1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * The contents of this file are subject to the Mozilla Public License Version
5 * 1.1 (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/MPL/
9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 * for the specific language governing rights and limitations under the
14 * The Original Code is the Netscape security libraries.
16 * The Initial Developer of the Original Code is
17 * Netscape Communications Corporation.
18 * Portions created by the Initial Developer are Copyright (C) 1994-2000
19 * the Initial Developer. All Rights Reserved.
22 * Dr Vipul Gupta <vipul.gupta@sun.com>, Sun Microsystems Laboratories
24 * Alternatively, the contents of this file may be used under the terms of
25 * either the GNU General Public License Version 2 or later (the "GPL"), or
26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the MPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the MPL, the GPL or the LGPL.
36 * ***** END LICENSE BLOCK ***** */
38 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
39 * Use is subject to license terms.
41 * Sun elects to use this software under the MPL license.
44 #include <sys/types.h>
45 #include <sys/systm.h>
46 #include <sys/param.h>
53 #include "ecl-curve.h"
57 #define CERTICOM_OID 0x2b, 0x81, 0x04
58 #define SECG_OID CERTICOM_OID, 0x00
60 #define ANSI_X962_OID 0x2a, 0x86, 0x48, 0xce, 0x3d
61 #define ANSI_X962_CURVE_OID ANSI_X962_OID, 0x03
62 #define ANSI_X962_GF2m_OID ANSI_X962_CURVE_OID, 0x00
63 #define ANSI_X962_GFp_OID ANSI_X962_CURVE_OID, 0x01
65 #define CONST_OID static const unsigned char
67 /* ANSI X9.62 prime curve OIDs */
68 /* NOTE: prime192v1 is the same as secp192r1, prime256v1 is the
71 CONST_OID ansiX962prime192v1
[] = { ANSI_X962_GFp_OID
, 0x01 };
72 CONST_OID ansiX962prime192v2
[] = { ANSI_X962_GFp_OID
, 0x02 };
73 CONST_OID ansiX962prime192v3
[] = { ANSI_X962_GFp_OID
, 0x03 };
74 CONST_OID ansiX962prime239v1
[] = { ANSI_X962_GFp_OID
, 0x04 };
75 CONST_OID ansiX962prime239v2
[] = { ANSI_X962_GFp_OID
, 0x05 };
76 CONST_OID ansiX962prime239v3
[] = { ANSI_X962_GFp_OID
, 0x06 };
77 CONST_OID ansiX962prime256v1
[] = { ANSI_X962_GFp_OID
, 0x07 };
79 /* SECG prime curve OIDs */
80 CONST_OID secgECsecp112r1
[] = { SECG_OID
, 0x06 };
81 CONST_OID secgECsecp112r2
[] = { SECG_OID
, 0x07 };
82 CONST_OID secgECsecp128r1
[] = { SECG_OID
, 0x1c };
83 CONST_OID secgECsecp128r2
[] = { SECG_OID
, 0x1d };
84 CONST_OID secgECsecp160k1
[] = { SECG_OID
, 0x09 };
85 CONST_OID secgECsecp160r1
[] = { SECG_OID
, 0x08 };
86 CONST_OID secgECsecp160r2
[] = { SECG_OID
, 0x1e };
87 CONST_OID secgECsecp192k1
[] = { SECG_OID
, 0x1f };
88 CONST_OID secgECsecp224k1
[] = { SECG_OID
, 0x20 };
89 CONST_OID secgECsecp224r1
[] = { SECG_OID
, 0x21 };
90 CONST_OID secgECsecp256k1
[] = { SECG_OID
, 0x0a };
91 CONST_OID secgECsecp384r1
[] = { SECG_OID
, 0x22 };
92 CONST_OID secgECsecp521r1
[] = { SECG_OID
, 0x23 };
94 /* SECG characterisitic two curve OIDs */
95 CONST_OID secgECsect113r1
[] = {SECG_OID
, 0x04 };
96 CONST_OID secgECsect113r2
[] = {SECG_OID
, 0x05 };
97 CONST_OID secgECsect131r1
[] = {SECG_OID
, 0x16 };
98 CONST_OID secgECsect131r2
[] = {SECG_OID
, 0x17 };
99 CONST_OID secgECsect163k1
[] = {SECG_OID
, 0x01 };
100 CONST_OID secgECsect163r1
[] = {SECG_OID
, 0x02 };
101 CONST_OID secgECsect163r2
[] = {SECG_OID
, 0x0f };
102 CONST_OID secgECsect193r1
[] = {SECG_OID
, 0x18 };
103 CONST_OID secgECsect193r2
[] = {SECG_OID
, 0x19 };
104 CONST_OID secgECsect233k1
[] = {SECG_OID
, 0x1a };
105 CONST_OID secgECsect233r1
[] = {SECG_OID
, 0x1b };
106 CONST_OID secgECsect239k1
[] = {SECG_OID
, 0x03 };
107 CONST_OID secgECsect283k1
[] = {SECG_OID
, 0x10 };
108 CONST_OID secgECsect283r1
[] = {SECG_OID
, 0x11 };
109 CONST_OID secgECsect409k1
[] = {SECG_OID
, 0x24 };
110 CONST_OID secgECsect409r1
[] = {SECG_OID
, 0x25 };
111 CONST_OID secgECsect571k1
[] = {SECG_OID
, 0x26 };
112 CONST_OID secgECsect571r1
[] = {SECG_OID
, 0x27 };
114 /* ANSI X9.62 characteristic two curve OIDs */
115 CONST_OID ansiX962c2pnb163v1
[] = { ANSI_X962_GF2m_OID
, 0x01 };
116 CONST_OID ansiX962c2pnb163v2
[] = { ANSI_X962_GF2m_OID
, 0x02 };
117 CONST_OID ansiX962c2pnb163v3
[] = { ANSI_X962_GF2m_OID
, 0x03 };
118 CONST_OID ansiX962c2pnb176v1
[] = { ANSI_X962_GF2m_OID
, 0x04 };
119 CONST_OID ansiX962c2tnb191v1
[] = { ANSI_X962_GF2m_OID
, 0x05 };
120 CONST_OID ansiX962c2tnb191v2
[] = { ANSI_X962_GF2m_OID
, 0x06 };
121 CONST_OID ansiX962c2tnb191v3
[] = { ANSI_X962_GF2m_OID
, 0x07 };
122 CONST_OID ansiX962c2onb191v4
[] = { ANSI_X962_GF2m_OID
, 0x08 };
123 CONST_OID ansiX962c2onb191v5
[] = { ANSI_X962_GF2m_OID
, 0x09 };
124 CONST_OID ansiX962c2pnb208w1
[] = { ANSI_X962_GF2m_OID
, 0x0a };
125 CONST_OID ansiX962c2tnb239v1
[] = { ANSI_X962_GF2m_OID
, 0x0b };
126 CONST_OID ansiX962c2tnb239v2
[] = { ANSI_X962_GF2m_OID
, 0x0c };
127 CONST_OID ansiX962c2tnb239v3
[] = { ANSI_X962_GF2m_OID
, 0x0d };
128 CONST_OID ansiX962c2onb239v4
[] = { ANSI_X962_GF2m_OID
, 0x0e };
129 CONST_OID ansiX962c2onb239v5
[] = { ANSI_X962_GF2m_OID
, 0x0f };
130 CONST_OID ansiX962c2pnb272w1
[] = { ANSI_X962_GF2m_OID
, 0x10 };
131 CONST_OID ansiX962c2pnb304w1
[] = { ANSI_X962_GF2m_OID
, 0x11 };
132 CONST_OID ansiX962c2tnb359v1
[] = { ANSI_X962_GF2m_OID
, 0x12 };
133 CONST_OID ansiX962c2pnb368w1
[] = { ANSI_X962_GF2m_OID
, 0x13 };
134 CONST_OID ansiX962c2tnb431r1
[] = { ANSI_X962_GF2m_OID
, 0x14 };
136 #define OI(x) { siDEROID, (unsigned char *)x, sizeof x }
137 #ifndef SECOID_NO_STRINGS
138 #define OD(oid,tag,desc,mech,ext) { OI(oid), tag, desc, mech, ext }
140 #define OD(oid,tag,desc,mech,ext) { OI(oid), tag, 0, mech, ext }
143 #define CKM_INVALID_MECHANISM 0xffffffffUL
145 /* XXX this is incorrect */
146 #define INVALID_CERT_EXTENSION 1
148 #define CKM_ECDSA 0x00001041UL
149 #define CKM_ECDSA_SHA1 0x00001042UL
150 #define CKM_ECDH1_DERIVE 0x00001050UL
152 static SECOidData ANSI_prime_oids
[] = {
153 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
154 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
156 OD( ansiX962prime192v1
, ECCurve_NIST_P192
,
157 "ANSI X9.62 elliptic curve prime192v1 (aka secp192r1, NIST P-192)",
158 CKM_INVALID_MECHANISM
,
159 INVALID_CERT_EXTENSION
),
160 OD( ansiX962prime192v2
, ECCurve_X9_62_PRIME_192V2
,
161 "ANSI X9.62 elliptic curve prime192v2",
162 CKM_INVALID_MECHANISM
,
163 INVALID_CERT_EXTENSION
),
164 OD( ansiX962prime192v3
, ECCurve_X9_62_PRIME_192V3
,
165 "ANSI X9.62 elliptic curve prime192v3",
166 CKM_INVALID_MECHANISM
,
167 INVALID_CERT_EXTENSION
),
168 OD( ansiX962prime239v1
, ECCurve_X9_62_PRIME_239V1
,
169 "ANSI X9.62 elliptic curve prime239v1",
170 CKM_INVALID_MECHANISM
,
171 INVALID_CERT_EXTENSION
),
172 OD( ansiX962prime239v2
, ECCurve_X9_62_PRIME_239V2
,
173 "ANSI X9.62 elliptic curve prime239v2",
174 CKM_INVALID_MECHANISM
,
175 INVALID_CERT_EXTENSION
),
176 OD( ansiX962prime239v3
, ECCurve_X9_62_PRIME_239V3
,
177 "ANSI X9.62 elliptic curve prime239v3",
178 CKM_INVALID_MECHANISM
,
179 INVALID_CERT_EXTENSION
),
180 OD( ansiX962prime256v1
, ECCurve_NIST_P256
,
181 "ANSI X9.62 elliptic curve prime256v1 (aka secp256r1, NIST P-256)",
182 CKM_INVALID_MECHANISM
,
183 INVALID_CERT_EXTENSION
)
186 static SECOidData SECG_oids
[] = {
187 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
188 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
190 OD( secgECsect163k1
, ECCurve_NIST_K163
,
191 "SECG elliptic curve sect163k1 (aka NIST K-163)",
192 CKM_INVALID_MECHANISM
,
193 INVALID_CERT_EXTENSION
),
194 OD( secgECsect163r1
, ECCurve_SECG_CHAR2_163R1
,
195 "SECG elliptic curve sect163r1",
196 CKM_INVALID_MECHANISM
,
197 INVALID_CERT_EXTENSION
),
198 OD( secgECsect239k1
, ECCurve_SECG_CHAR2_239K1
,
199 "SECG elliptic curve sect239k1",
200 CKM_INVALID_MECHANISM
,
201 INVALID_CERT_EXTENSION
),
202 OD( secgECsect113r1
, ECCurve_SECG_CHAR2_113R1
,
203 "SECG elliptic curve sect113r1",
204 CKM_INVALID_MECHANISM
,
205 INVALID_CERT_EXTENSION
),
206 OD( secgECsect113r2
, ECCurve_SECG_CHAR2_113R2
,
207 "SECG elliptic curve sect113r2",
208 CKM_INVALID_MECHANISM
,
209 INVALID_CERT_EXTENSION
),
210 OD( secgECsecp112r1
, ECCurve_SECG_PRIME_112R1
,
211 "SECG elliptic curve secp112r1",
212 CKM_INVALID_MECHANISM
,
213 INVALID_CERT_EXTENSION
),
214 OD( secgECsecp112r2
, ECCurve_SECG_PRIME_112R2
,
215 "SECG elliptic curve secp112r2",
216 CKM_INVALID_MECHANISM
,
217 INVALID_CERT_EXTENSION
),
218 OD( secgECsecp160r1
, ECCurve_SECG_PRIME_160R1
,
219 "SECG elliptic curve secp160r1",
220 CKM_INVALID_MECHANISM
,
221 INVALID_CERT_EXTENSION
),
222 OD( secgECsecp160k1
, ECCurve_SECG_PRIME_160K1
,
223 "SECG elliptic curve secp160k1",
224 CKM_INVALID_MECHANISM
,
225 INVALID_CERT_EXTENSION
),
226 OD( secgECsecp256k1
, ECCurve_SECG_PRIME_256K1
,
227 "SECG elliptic curve secp256k1",
228 CKM_INVALID_MECHANISM
,
229 INVALID_CERT_EXTENSION
),
230 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
231 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
232 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
233 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
234 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
235 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
236 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
237 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
238 OD( secgECsect163r2
, ECCurve_NIST_B163
,
239 "SECG elliptic curve sect163r2 (aka NIST B-163)",
240 CKM_INVALID_MECHANISM
,
241 INVALID_CERT_EXTENSION
),
242 OD( secgECsect283k1
, ECCurve_NIST_K283
,
243 "SECG elliptic curve sect283k1 (aka NIST K-283)",
244 CKM_INVALID_MECHANISM
,
245 INVALID_CERT_EXTENSION
),
246 OD( secgECsect283r1
, ECCurve_NIST_B283
,
247 "SECG elliptic curve sect283r1 (aka NIST B-283)",
248 CKM_INVALID_MECHANISM
,
249 INVALID_CERT_EXTENSION
),
250 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
251 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
252 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
253 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
254 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
255 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
256 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
257 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
258 OD( secgECsect131r1
, ECCurve_SECG_CHAR2_131R1
,
259 "SECG elliptic curve sect131r1",
260 CKM_INVALID_MECHANISM
,
261 INVALID_CERT_EXTENSION
),
262 OD( secgECsect131r2
, ECCurve_SECG_CHAR2_131R2
,
263 "SECG elliptic curve sect131r2",
264 CKM_INVALID_MECHANISM
,
265 INVALID_CERT_EXTENSION
),
266 OD( secgECsect193r1
, ECCurve_SECG_CHAR2_193R1
,
267 "SECG elliptic curve sect193r1",
268 CKM_INVALID_MECHANISM
,
269 INVALID_CERT_EXTENSION
),
270 OD( secgECsect193r2
, ECCurve_SECG_CHAR2_193R2
,
271 "SECG elliptic curve sect193r2",
272 CKM_INVALID_MECHANISM
,
273 INVALID_CERT_EXTENSION
),
274 OD( secgECsect233k1
, ECCurve_NIST_K233
,
275 "SECG elliptic curve sect233k1 (aka NIST K-233)",
276 CKM_INVALID_MECHANISM
,
277 INVALID_CERT_EXTENSION
),
278 OD( secgECsect233r1
, ECCurve_NIST_B233
,
279 "SECG elliptic curve sect233r1 (aka NIST B-233)",
280 CKM_INVALID_MECHANISM
,
281 INVALID_CERT_EXTENSION
),
282 OD( secgECsecp128r1
, ECCurve_SECG_PRIME_128R1
,
283 "SECG elliptic curve secp128r1",
284 CKM_INVALID_MECHANISM
,
285 INVALID_CERT_EXTENSION
),
286 OD( secgECsecp128r2
, ECCurve_SECG_PRIME_128R2
,
287 "SECG elliptic curve secp128r2",
288 CKM_INVALID_MECHANISM
,
289 INVALID_CERT_EXTENSION
),
290 OD( secgECsecp160r2
, ECCurve_SECG_PRIME_160R2
,
291 "SECG elliptic curve secp160r2",
292 CKM_INVALID_MECHANISM
,
293 INVALID_CERT_EXTENSION
),
294 OD( secgECsecp192k1
, ECCurve_SECG_PRIME_192K1
,
295 "SECG elliptic curve secp192k1",
296 CKM_INVALID_MECHANISM
,
297 INVALID_CERT_EXTENSION
),
298 OD( secgECsecp224k1
, ECCurve_SECG_PRIME_224K1
,
299 "SECG elliptic curve secp224k1",
300 CKM_INVALID_MECHANISM
,
301 INVALID_CERT_EXTENSION
),
302 OD( secgECsecp224r1
, ECCurve_NIST_P224
,
303 "SECG elliptic curve secp224r1 (aka NIST P-224)",
304 CKM_INVALID_MECHANISM
,
305 INVALID_CERT_EXTENSION
),
306 OD( secgECsecp384r1
, ECCurve_NIST_P384
,
307 "SECG elliptic curve secp384r1 (aka NIST P-384)",
308 CKM_INVALID_MECHANISM
,
309 INVALID_CERT_EXTENSION
),
310 OD( secgECsecp521r1
, ECCurve_NIST_P521
,
311 "SECG elliptic curve secp521r1 (aka NIST P-521)",
312 CKM_INVALID_MECHANISM
,
313 INVALID_CERT_EXTENSION
),
314 OD( secgECsect409k1
, ECCurve_NIST_K409
,
315 "SECG elliptic curve sect409k1 (aka NIST K-409)",
316 CKM_INVALID_MECHANISM
,
317 INVALID_CERT_EXTENSION
),
318 OD( secgECsect409r1
, ECCurve_NIST_B409
,
319 "SECG elliptic curve sect409r1 (aka NIST B-409)",
320 CKM_INVALID_MECHANISM
,
321 INVALID_CERT_EXTENSION
),
322 OD( secgECsect571k1
, ECCurve_NIST_K571
,
323 "SECG elliptic curve sect571k1 (aka NIST K-571)",
324 CKM_INVALID_MECHANISM
,
325 INVALID_CERT_EXTENSION
),
326 OD( secgECsect571r1
, ECCurve_NIST_B571
,
327 "SECG elliptic curve sect571r1 (aka NIST B-571)",
328 CKM_INVALID_MECHANISM
,
329 INVALID_CERT_EXTENSION
)
332 static SECOidData ANSI_oids
[] = {
333 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
334 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
336 /* ANSI X9.62 named elliptic curves (characteristic two field) */
337 OD( ansiX962c2pnb163v1
, ECCurve_X9_62_CHAR2_PNB163V1
,
338 "ANSI X9.62 elliptic curve c2pnb163v1",
339 CKM_INVALID_MECHANISM
,
340 INVALID_CERT_EXTENSION
),
341 OD( ansiX962c2pnb163v2
, ECCurve_X9_62_CHAR2_PNB163V2
,
342 "ANSI X9.62 elliptic curve c2pnb163v2",
343 CKM_INVALID_MECHANISM
,
344 INVALID_CERT_EXTENSION
),
345 OD( ansiX962c2pnb163v3
, ECCurve_X9_62_CHAR2_PNB163V3
,
346 "ANSI X9.62 elliptic curve c2pnb163v3",
347 CKM_INVALID_MECHANISM
,
348 INVALID_CERT_EXTENSION
),
349 OD( ansiX962c2pnb176v1
, ECCurve_X9_62_CHAR2_PNB176V1
,
350 "ANSI X9.62 elliptic curve c2pnb176v1",
351 CKM_INVALID_MECHANISM
,
352 INVALID_CERT_EXTENSION
),
353 OD( ansiX962c2tnb191v1
, ECCurve_X9_62_CHAR2_TNB191V1
,
354 "ANSI X9.62 elliptic curve c2tnb191v1",
355 CKM_INVALID_MECHANISM
,
356 INVALID_CERT_EXTENSION
),
357 OD( ansiX962c2tnb191v2
, ECCurve_X9_62_CHAR2_TNB191V2
,
358 "ANSI X9.62 elliptic curve c2tnb191v2",
359 CKM_INVALID_MECHANISM
,
360 INVALID_CERT_EXTENSION
),
361 OD( ansiX962c2tnb191v3
, ECCurve_X9_62_CHAR2_TNB191V3
,
362 "ANSI X9.62 elliptic curve c2tnb191v3",
363 CKM_INVALID_MECHANISM
,
364 INVALID_CERT_EXTENSION
),
365 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
366 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
367 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
368 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
369 OD( ansiX962c2pnb208w1
, ECCurve_X9_62_CHAR2_PNB208W1
,
370 "ANSI X9.62 elliptic curve c2pnb208w1",
371 CKM_INVALID_MECHANISM
,
372 INVALID_CERT_EXTENSION
),
373 OD( ansiX962c2tnb239v1
, ECCurve_X9_62_CHAR2_TNB239V1
,
374 "ANSI X9.62 elliptic curve c2tnb239v1",
375 CKM_INVALID_MECHANISM
,
376 INVALID_CERT_EXTENSION
),
377 OD( ansiX962c2tnb239v2
, ECCurve_X9_62_CHAR2_TNB239V2
,
378 "ANSI X9.62 elliptic curve c2tnb239v2",
379 CKM_INVALID_MECHANISM
,
380 INVALID_CERT_EXTENSION
),
381 OD( ansiX962c2tnb239v3
, ECCurve_X9_62_CHAR2_TNB239V3
,
382 "ANSI X9.62 elliptic curve c2tnb239v3",
383 CKM_INVALID_MECHANISM
,
384 INVALID_CERT_EXTENSION
),
385 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
386 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
387 { { siDEROID
, NULL
, 0 }, ECCurve_noName
,
388 "Unknown OID", CKM_INVALID_MECHANISM
, INVALID_CERT_EXTENSION
},
389 OD( ansiX962c2pnb272w1
, ECCurve_X9_62_CHAR2_PNB272W1
,
390 "ANSI X9.62 elliptic curve c2pnb272w1",
391 CKM_INVALID_MECHANISM
,
392 INVALID_CERT_EXTENSION
),
393 OD( ansiX962c2pnb304w1
, ECCurve_X9_62_CHAR2_PNB304W1
,
394 "ANSI X9.62 elliptic curve c2pnb304w1",
395 CKM_INVALID_MECHANISM
,
396 INVALID_CERT_EXTENSION
),
397 OD( ansiX962c2tnb359v1
, ECCurve_X9_62_CHAR2_TNB359V1
,
398 "ANSI X9.62 elliptic curve c2tnb359v1",
399 CKM_INVALID_MECHANISM
,
400 INVALID_CERT_EXTENSION
),
401 OD( ansiX962c2pnb368w1
, ECCurve_X9_62_CHAR2_PNB368W1
,
402 "ANSI X9.62 elliptic curve c2pnb368w1",
403 CKM_INVALID_MECHANISM
,
404 INVALID_CERT_EXTENSION
),
405 OD( ansiX962c2tnb431r1
, ECCurve_X9_62_CHAR2_TNB431R1
,
406 "ANSI X9.62 elliptic curve c2tnb431r1",
407 CKM_INVALID_MECHANISM
,
408 INVALID_CERT_EXTENSION
)
412 SECOID_FindOID(const SECItem
*oid
)
419 if (oid
->data
[6] == 0x00) {
420 /* XXX bounds check */
421 po
= &ANSI_oids
[oid
->data
[7]];
422 if (memcmp(oid
->data
, po
->oid
.data
, 8) == 0)
425 if (oid
->data
[6] == 0x01) {
426 /* XXX bounds check */
427 po
= &ANSI_prime_oids
[oid
->data
[7]];
428 if (memcmp(oid
->data
, po
->oid
.data
, 8) == 0)
431 } else if (oid
->len
== 5) {
432 /* XXX bounds check */
433 po
= &SECG_oids
[oid
->data
[4]];
434 if (memcmp(oid
->data
, po
->oid
.data
, 5) == 0)
443 SECOID_FindOIDTag(const SECItem
*oid
)
447 oiddata
= SECOID_FindOID (oid
);
449 return ECCurve_noName
;
451 return oiddata
->offset
;