Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/native/sun/security/ec/impl/oid.c
38918 views
1
/*
2
* Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
3
* Use is subject to license terms.
4
*
5
* This library is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU Lesser General Public
7
* License as published by the Free Software Foundation; either
8
* version 2.1 of the License, or (at your option) any later version.
9
*
10
* This library is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
* Lesser General Public License for more details.
14
*
15
* You should have received a copy of the GNU Lesser General Public License
16
* along with this library; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/* *********************************************************************
25
*
26
* The Original Code is the Netscape security libraries.
27
*
28
* The Initial Developer of the Original Code is
29
* Netscape Communications Corporation.
30
* Portions created by the Initial Developer are Copyright (C) 1994-2000
31
* the Initial Developer. All Rights Reserved.
32
*
33
* Contributor(s):
34
* Dr Vipul Gupta <[email protected]>, Sun Microsystems Laboratories
35
*
36
* Last Modified Date from the Original Code: March 2012
37
*********************************************************************** */
38
39
#include <sys/types.h>
40
41
#ifndef _WIN32
42
#if !defined(__linux__) && !defined(_ALLBSD_SOURCE)
43
#include <sys/systm.h>
44
#endif /* __linux__ || _ALLBSD_SOURCE */
45
#include <sys/param.h>
46
#endif /* _WIN32 */
47
48
#ifdef _KERNEL
49
#include <sys/kmem.h>
50
#else
51
#include <string.h>
52
#endif
53
#include "ec.h"
54
#include "ecl-curve.h"
55
#include "ecc_impl.h"
56
#include "secoidt.h"
57
58
#define CERTICOM_OID 0x2b, 0x81, 0x04
59
#define SECG_OID CERTICOM_OID, 0x00
60
61
#define ANSI_X962_OID 0x2a, 0x86, 0x48, 0xce, 0x3d
62
#define ANSI_X962_CURVE_OID ANSI_X962_OID, 0x03
63
#define ANSI_X962_GF2m_OID ANSI_X962_CURVE_OID, 0x00
64
#define ANSI_X962_GFp_OID ANSI_X962_CURVE_OID, 0x01
65
66
#define CONST_OID static const unsigned char
67
68
/* ANSI X9.62 prime curve OIDs */
69
/* NOTE: prime192v1 is the same as secp192r1, prime256v1 is the
70
* same as secp256r1
71
*/
72
CONST_OID ansiX962prime192v1[] = { ANSI_X962_GFp_OID, 0x01 };
73
CONST_OID ansiX962prime192v2[] = { ANSI_X962_GFp_OID, 0x02 };
74
CONST_OID ansiX962prime192v3[] = { ANSI_X962_GFp_OID, 0x03 };
75
CONST_OID ansiX962prime239v1[] = { ANSI_X962_GFp_OID, 0x04 };
76
CONST_OID ansiX962prime239v2[] = { ANSI_X962_GFp_OID, 0x05 };
77
CONST_OID ansiX962prime239v3[] = { ANSI_X962_GFp_OID, 0x06 };
78
CONST_OID ansiX962prime256v1[] = { ANSI_X962_GFp_OID, 0x07 };
79
80
/* SECG prime curve OIDs */
81
CONST_OID secgECsecp112r1[] = { SECG_OID, 0x06 };
82
CONST_OID secgECsecp112r2[] = { SECG_OID, 0x07 };
83
CONST_OID secgECsecp128r1[] = { SECG_OID, 0x1c };
84
CONST_OID secgECsecp128r2[] = { SECG_OID, 0x1d };
85
CONST_OID secgECsecp160k1[] = { SECG_OID, 0x09 };
86
CONST_OID secgECsecp160r1[] = { SECG_OID, 0x08 };
87
CONST_OID secgECsecp160r2[] = { SECG_OID, 0x1e };
88
CONST_OID secgECsecp192k1[] = { SECG_OID, 0x1f };
89
CONST_OID secgECsecp224k1[] = { SECG_OID, 0x20 };
90
CONST_OID secgECsecp224r1[] = { SECG_OID, 0x21 };
91
CONST_OID secgECsecp256k1[] = { SECG_OID, 0x0a };
92
CONST_OID secgECsecp384r1[] = { SECG_OID, 0x22 };
93
CONST_OID secgECsecp521r1[] = { SECG_OID, 0x23 };
94
95
/* SECG characterisitic two curve OIDs */
96
CONST_OID secgECsect113r1[] = {SECG_OID, 0x04 };
97
CONST_OID secgECsect113r2[] = {SECG_OID, 0x05 };
98
CONST_OID secgECsect131r1[] = {SECG_OID, 0x16 };
99
CONST_OID secgECsect131r2[] = {SECG_OID, 0x17 };
100
CONST_OID secgECsect163k1[] = {SECG_OID, 0x01 };
101
CONST_OID secgECsect163r1[] = {SECG_OID, 0x02 };
102
CONST_OID secgECsect163r2[] = {SECG_OID, 0x0f };
103
CONST_OID secgECsect193r1[] = {SECG_OID, 0x18 };
104
CONST_OID secgECsect193r2[] = {SECG_OID, 0x19 };
105
CONST_OID secgECsect233k1[] = {SECG_OID, 0x1a };
106
CONST_OID secgECsect233r1[] = {SECG_OID, 0x1b };
107
CONST_OID secgECsect239k1[] = {SECG_OID, 0x03 };
108
CONST_OID secgECsect283k1[] = {SECG_OID, 0x10 };
109
CONST_OID secgECsect283r1[] = {SECG_OID, 0x11 };
110
CONST_OID secgECsect409k1[] = {SECG_OID, 0x24 };
111
CONST_OID secgECsect409r1[] = {SECG_OID, 0x25 };
112
CONST_OID secgECsect571k1[] = {SECG_OID, 0x26 };
113
CONST_OID secgECsect571r1[] = {SECG_OID, 0x27 };
114
115
/* ANSI X9.62 characteristic two curve OIDs */
116
CONST_OID ansiX962c2pnb163v1[] = { ANSI_X962_GF2m_OID, 0x01 };
117
CONST_OID ansiX962c2pnb163v2[] = { ANSI_X962_GF2m_OID, 0x02 };
118
CONST_OID ansiX962c2pnb163v3[] = { ANSI_X962_GF2m_OID, 0x03 };
119
CONST_OID ansiX962c2pnb176v1[] = { ANSI_X962_GF2m_OID, 0x04 };
120
CONST_OID ansiX962c2tnb191v1[] = { ANSI_X962_GF2m_OID, 0x05 };
121
CONST_OID ansiX962c2tnb191v2[] = { ANSI_X962_GF2m_OID, 0x06 };
122
CONST_OID ansiX962c2tnb191v3[] = { ANSI_X962_GF2m_OID, 0x07 };
123
CONST_OID ansiX962c2onb191v4[] = { ANSI_X962_GF2m_OID, 0x08 };
124
CONST_OID ansiX962c2onb191v5[] = { ANSI_X962_GF2m_OID, 0x09 };
125
CONST_OID ansiX962c2pnb208w1[] = { ANSI_X962_GF2m_OID, 0x0a };
126
CONST_OID ansiX962c2tnb239v1[] = { ANSI_X962_GF2m_OID, 0x0b };
127
CONST_OID ansiX962c2tnb239v2[] = { ANSI_X962_GF2m_OID, 0x0c };
128
CONST_OID ansiX962c2tnb239v3[] = { ANSI_X962_GF2m_OID, 0x0d };
129
CONST_OID ansiX962c2onb239v4[] = { ANSI_X962_GF2m_OID, 0x0e };
130
CONST_OID ansiX962c2onb239v5[] = { ANSI_X962_GF2m_OID, 0x0f };
131
CONST_OID ansiX962c2pnb272w1[] = { ANSI_X962_GF2m_OID, 0x10 };
132
CONST_OID ansiX962c2pnb304w1[] = { ANSI_X962_GF2m_OID, 0x11 };
133
CONST_OID ansiX962c2tnb359v1[] = { ANSI_X962_GF2m_OID, 0x12 };
134
CONST_OID ansiX962c2pnb368w1[] = { ANSI_X962_GF2m_OID, 0x13 };
135
CONST_OID ansiX962c2tnb431r1[] = { ANSI_X962_GF2m_OID, 0x14 };
136
137
#define OI(x) { siDEROID, (unsigned char *)x, sizeof x }
138
#ifndef SECOID_NO_STRINGS
139
#define OD(oid,tag,desc,mech,ext) { OI(oid), tag, desc, mech, ext }
140
#else
141
#define OD(oid,tag,desc,mech,ext) { OI(oid), tag, 0, mech, ext }
142
#endif
143
144
#define CKM_INVALID_MECHANISM 0xffffffffUL
145
146
/* XXX this is incorrect */
147
#define INVALID_CERT_EXTENSION 1
148
149
#define CKM_ECDSA 0x00001041
150
#define CKM_ECDSA_SHA1 0x00001042
151
#define CKM_ECDH1_DERIVE 0x00001050
152
153
static SECOidData ANSI_prime_oids[] = {
154
{ { siDEROID, NULL, 0 }, ECCurve_noName,
155
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
156
157
OD( ansiX962prime192v1, ECCurve_NIST_P192,
158
"ANSI X9.62 elliptic curve prime192v1 (aka secp192r1, NIST P-192)",
159
CKM_INVALID_MECHANISM,
160
INVALID_CERT_EXTENSION ),
161
OD( ansiX962prime192v2, ECCurve_X9_62_PRIME_192V2,
162
"ANSI X9.62 elliptic curve prime192v2",
163
CKM_INVALID_MECHANISM,
164
INVALID_CERT_EXTENSION ),
165
OD( ansiX962prime192v3, ECCurve_X9_62_PRIME_192V3,
166
"ANSI X9.62 elliptic curve prime192v3",
167
CKM_INVALID_MECHANISM,
168
INVALID_CERT_EXTENSION ),
169
OD( ansiX962prime239v1, ECCurve_X9_62_PRIME_239V1,
170
"ANSI X9.62 elliptic curve prime239v1",
171
CKM_INVALID_MECHANISM,
172
INVALID_CERT_EXTENSION ),
173
OD( ansiX962prime239v2, ECCurve_X9_62_PRIME_239V2,
174
"ANSI X9.62 elliptic curve prime239v2",
175
CKM_INVALID_MECHANISM,
176
INVALID_CERT_EXTENSION ),
177
OD( ansiX962prime239v3, ECCurve_X9_62_PRIME_239V3,
178
"ANSI X9.62 elliptic curve prime239v3",
179
CKM_INVALID_MECHANISM,
180
INVALID_CERT_EXTENSION ),
181
OD( ansiX962prime256v1, ECCurve_NIST_P256,
182
"ANSI X9.62 elliptic curve prime256v1 (aka secp256r1, NIST P-256)",
183
CKM_INVALID_MECHANISM,
184
INVALID_CERT_EXTENSION )
185
};
186
187
static SECOidData SECG_oids[] = {
188
{ { siDEROID, NULL, 0 }, ECCurve_noName,
189
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
190
191
OD( secgECsect163k1, ECCurve_NIST_K163,
192
"SECG elliptic curve sect163k1 (aka NIST K-163)",
193
CKM_INVALID_MECHANISM,
194
INVALID_CERT_EXTENSION ),
195
OD( secgECsect163r1, ECCurve_SECG_CHAR2_163R1,
196
"SECG elliptic curve sect163r1",
197
CKM_INVALID_MECHANISM,
198
INVALID_CERT_EXTENSION ),
199
OD( secgECsect239k1, ECCurve_SECG_CHAR2_239K1,
200
"SECG elliptic curve sect239k1",
201
CKM_INVALID_MECHANISM,
202
INVALID_CERT_EXTENSION ),
203
OD( secgECsect113r1, ECCurve_SECG_CHAR2_113R1,
204
"SECG elliptic curve sect113r1",
205
CKM_INVALID_MECHANISM,
206
INVALID_CERT_EXTENSION ),
207
OD( secgECsect113r2, ECCurve_SECG_CHAR2_113R2,
208
"SECG elliptic curve sect113r2",
209
CKM_INVALID_MECHANISM,
210
INVALID_CERT_EXTENSION ),
211
OD( secgECsecp112r1, ECCurve_SECG_PRIME_112R1,
212
"SECG elliptic curve secp112r1",
213
CKM_INVALID_MECHANISM,
214
INVALID_CERT_EXTENSION ),
215
OD( secgECsecp112r2, ECCurve_SECG_PRIME_112R2,
216
"SECG elliptic curve secp112r2",
217
CKM_INVALID_MECHANISM,
218
INVALID_CERT_EXTENSION ),
219
OD( secgECsecp160r1, ECCurve_SECG_PRIME_160R1,
220
"SECG elliptic curve secp160r1",
221
CKM_INVALID_MECHANISM,
222
INVALID_CERT_EXTENSION ),
223
OD( secgECsecp160k1, ECCurve_SECG_PRIME_160K1,
224
"SECG elliptic curve secp160k1",
225
CKM_INVALID_MECHANISM,
226
INVALID_CERT_EXTENSION ),
227
OD( secgECsecp256k1, ECCurve_SECG_PRIME_256K1,
228
"SECG elliptic curve secp256k1",
229
CKM_INVALID_MECHANISM,
230
INVALID_CERT_EXTENSION ),
231
{ { siDEROID, NULL, 0 }, ECCurve_noName,
232
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
233
{ { siDEROID, NULL, 0 }, ECCurve_noName,
234
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
235
{ { siDEROID, NULL, 0 }, ECCurve_noName,
236
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
237
{ { siDEROID, NULL, 0 }, ECCurve_noName,
238
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
239
OD( secgECsect163r2, ECCurve_NIST_B163,
240
"SECG elliptic curve sect163r2 (aka NIST B-163)",
241
CKM_INVALID_MECHANISM,
242
INVALID_CERT_EXTENSION ),
243
OD( secgECsect283k1, ECCurve_NIST_K283,
244
"SECG elliptic curve sect283k1 (aka NIST K-283)",
245
CKM_INVALID_MECHANISM,
246
INVALID_CERT_EXTENSION ),
247
OD( secgECsect283r1, ECCurve_NIST_B283,
248
"SECG elliptic curve sect283r1 (aka NIST B-283)",
249
CKM_INVALID_MECHANISM,
250
INVALID_CERT_EXTENSION ),
251
{ { siDEROID, NULL, 0 }, ECCurve_noName,
252
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
253
{ { siDEROID, NULL, 0 }, ECCurve_noName,
254
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
255
{ { siDEROID, NULL, 0 }, ECCurve_noName,
256
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
257
{ { siDEROID, NULL, 0 }, ECCurve_noName,
258
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
259
OD( secgECsect131r1, ECCurve_SECG_CHAR2_131R1,
260
"SECG elliptic curve sect131r1",
261
CKM_INVALID_MECHANISM,
262
INVALID_CERT_EXTENSION ),
263
OD( secgECsect131r2, ECCurve_SECG_CHAR2_131R2,
264
"SECG elliptic curve sect131r2",
265
CKM_INVALID_MECHANISM,
266
INVALID_CERT_EXTENSION ),
267
OD( secgECsect193r1, ECCurve_SECG_CHAR2_193R1,
268
"SECG elliptic curve sect193r1",
269
CKM_INVALID_MECHANISM,
270
INVALID_CERT_EXTENSION ),
271
OD( secgECsect193r2, ECCurve_SECG_CHAR2_193R2,
272
"SECG elliptic curve sect193r2",
273
CKM_INVALID_MECHANISM,
274
INVALID_CERT_EXTENSION ),
275
OD( secgECsect233k1, ECCurve_NIST_K233,
276
"SECG elliptic curve sect233k1 (aka NIST K-233)",
277
CKM_INVALID_MECHANISM,
278
INVALID_CERT_EXTENSION ),
279
OD( secgECsect233r1, ECCurve_NIST_B233,
280
"SECG elliptic curve sect233r1 (aka NIST B-233)",
281
CKM_INVALID_MECHANISM,
282
INVALID_CERT_EXTENSION ),
283
OD( secgECsecp128r1, ECCurve_SECG_PRIME_128R1,
284
"SECG elliptic curve secp128r1",
285
CKM_INVALID_MECHANISM,
286
INVALID_CERT_EXTENSION ),
287
OD( secgECsecp128r2, ECCurve_SECG_PRIME_128R2,
288
"SECG elliptic curve secp128r2",
289
CKM_INVALID_MECHANISM,
290
INVALID_CERT_EXTENSION ),
291
OD( secgECsecp160r2, ECCurve_SECG_PRIME_160R2,
292
"SECG elliptic curve secp160r2",
293
CKM_INVALID_MECHANISM,
294
INVALID_CERT_EXTENSION ),
295
OD( secgECsecp192k1, ECCurve_SECG_PRIME_192K1,
296
"SECG elliptic curve secp192k1",
297
CKM_INVALID_MECHANISM,
298
INVALID_CERT_EXTENSION ),
299
OD( secgECsecp224k1, ECCurve_SECG_PRIME_224K1,
300
"SECG elliptic curve secp224k1",
301
CKM_INVALID_MECHANISM,
302
INVALID_CERT_EXTENSION ),
303
OD( secgECsecp224r1, ECCurve_NIST_P224,
304
"SECG elliptic curve secp224r1 (aka NIST P-224)",
305
CKM_INVALID_MECHANISM,
306
INVALID_CERT_EXTENSION ),
307
OD( secgECsecp384r1, ECCurve_NIST_P384,
308
"SECG elliptic curve secp384r1 (aka NIST P-384)",
309
CKM_INVALID_MECHANISM,
310
INVALID_CERT_EXTENSION ),
311
OD( secgECsecp521r1, ECCurve_NIST_P521,
312
"SECG elliptic curve secp521r1 (aka NIST P-521)",
313
CKM_INVALID_MECHANISM,
314
INVALID_CERT_EXTENSION ),
315
OD( secgECsect409k1, ECCurve_NIST_K409,
316
"SECG elliptic curve sect409k1 (aka NIST K-409)",
317
CKM_INVALID_MECHANISM,
318
INVALID_CERT_EXTENSION ),
319
OD( secgECsect409r1, ECCurve_NIST_B409,
320
"SECG elliptic curve sect409r1 (aka NIST B-409)",
321
CKM_INVALID_MECHANISM,
322
INVALID_CERT_EXTENSION ),
323
OD( secgECsect571k1, ECCurve_NIST_K571,
324
"SECG elliptic curve sect571k1 (aka NIST K-571)",
325
CKM_INVALID_MECHANISM,
326
INVALID_CERT_EXTENSION ),
327
OD( secgECsect571r1, ECCurve_NIST_B571,
328
"SECG elliptic curve sect571r1 (aka NIST B-571)",
329
CKM_INVALID_MECHANISM,
330
INVALID_CERT_EXTENSION )
331
};
332
333
static SECOidData ANSI_oids[] = {
334
{ { siDEROID, NULL, 0 }, ECCurve_noName,
335
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
336
337
/* ANSI X9.62 named elliptic curves (characteristic two field) */
338
OD( ansiX962c2pnb163v1, ECCurve_X9_62_CHAR2_PNB163V1,
339
"ANSI X9.62 elliptic curve c2pnb163v1",
340
CKM_INVALID_MECHANISM,
341
INVALID_CERT_EXTENSION ),
342
OD( ansiX962c2pnb163v2, ECCurve_X9_62_CHAR2_PNB163V2,
343
"ANSI X9.62 elliptic curve c2pnb163v2",
344
CKM_INVALID_MECHANISM,
345
INVALID_CERT_EXTENSION ),
346
OD( ansiX962c2pnb163v3, ECCurve_X9_62_CHAR2_PNB163V3,
347
"ANSI X9.62 elliptic curve c2pnb163v3",
348
CKM_INVALID_MECHANISM,
349
INVALID_CERT_EXTENSION ),
350
OD( ansiX962c2pnb176v1, ECCurve_X9_62_CHAR2_PNB176V1,
351
"ANSI X9.62 elliptic curve c2pnb176v1",
352
CKM_INVALID_MECHANISM,
353
INVALID_CERT_EXTENSION ),
354
OD( ansiX962c2tnb191v1, ECCurve_X9_62_CHAR2_TNB191V1,
355
"ANSI X9.62 elliptic curve c2tnb191v1",
356
CKM_INVALID_MECHANISM,
357
INVALID_CERT_EXTENSION ),
358
OD( ansiX962c2tnb191v2, ECCurve_X9_62_CHAR2_TNB191V2,
359
"ANSI X9.62 elliptic curve c2tnb191v2",
360
CKM_INVALID_MECHANISM,
361
INVALID_CERT_EXTENSION ),
362
OD( ansiX962c2tnb191v3, ECCurve_X9_62_CHAR2_TNB191V3,
363
"ANSI X9.62 elliptic curve c2tnb191v3",
364
CKM_INVALID_MECHANISM,
365
INVALID_CERT_EXTENSION ),
366
{ { siDEROID, NULL, 0 }, ECCurve_noName,
367
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
368
{ { siDEROID, NULL, 0 }, ECCurve_noName,
369
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
370
OD( ansiX962c2pnb208w1, ECCurve_X9_62_CHAR2_PNB208W1,
371
"ANSI X9.62 elliptic curve c2pnb208w1",
372
CKM_INVALID_MECHANISM,
373
INVALID_CERT_EXTENSION ),
374
OD( ansiX962c2tnb239v1, ECCurve_X9_62_CHAR2_TNB239V1,
375
"ANSI X9.62 elliptic curve c2tnb239v1",
376
CKM_INVALID_MECHANISM,
377
INVALID_CERT_EXTENSION ),
378
OD( ansiX962c2tnb239v2, ECCurve_X9_62_CHAR2_TNB239V2,
379
"ANSI X9.62 elliptic curve c2tnb239v2",
380
CKM_INVALID_MECHANISM,
381
INVALID_CERT_EXTENSION ),
382
OD( ansiX962c2tnb239v3, ECCurve_X9_62_CHAR2_TNB239V3,
383
"ANSI X9.62 elliptic curve c2tnb239v3",
384
CKM_INVALID_MECHANISM,
385
INVALID_CERT_EXTENSION ),
386
{ { siDEROID, NULL, 0 }, ECCurve_noName,
387
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
388
{ { siDEROID, NULL, 0 }, ECCurve_noName,
389
"Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
390
OD( ansiX962c2pnb272w1, ECCurve_X9_62_CHAR2_PNB272W1,
391
"ANSI X9.62 elliptic curve c2pnb272w1",
392
CKM_INVALID_MECHANISM,
393
INVALID_CERT_EXTENSION ),
394
OD( ansiX962c2pnb304w1, ECCurve_X9_62_CHAR2_PNB304W1,
395
"ANSI X9.62 elliptic curve c2pnb304w1",
396
CKM_INVALID_MECHANISM,
397
INVALID_CERT_EXTENSION ),
398
OD( ansiX962c2tnb359v1, ECCurve_X9_62_CHAR2_TNB359V1,
399
"ANSI X9.62 elliptic curve c2tnb359v1",
400
CKM_INVALID_MECHANISM,
401
INVALID_CERT_EXTENSION ),
402
OD( ansiX962c2pnb368w1, ECCurve_X9_62_CHAR2_PNB368W1,
403
"ANSI X9.62 elliptic curve c2pnb368w1",
404
CKM_INVALID_MECHANISM,
405
INVALID_CERT_EXTENSION ),
406
OD( ansiX962c2tnb431r1, ECCurve_X9_62_CHAR2_TNB431R1,
407
"ANSI X9.62 elliptic curve c2tnb431r1",
408
CKM_INVALID_MECHANISM,
409
INVALID_CERT_EXTENSION )
410
};
411
412
SECOidData *
413
SECOID_FindOID(const SECItem *oid)
414
{
415
SECOidData *po;
416
SECOidData *ret = NULL;
417
418
if (oid->len == 8) {
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)
423
ret = po;
424
}
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)
429
ret = po;
430
}
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)
435
ret = po;
436
}
437
return(ret);
438
}
439
440
ECCurveName
441
SECOID_FindOIDTag(const SECItem *oid)
442
{
443
SECOidData *oiddata;
444
445
oiddata = SECOID_FindOID (oid);
446
if (oiddata == NULL)
447
return ECCurve_noName;
448
449
return oiddata->offset;
450
}
451
452