1 /* crypto/ec/ec_curve.c */
3 * Written by Nils Larsch for the OpenSSL project.
5 /* ====================================================================
6 * Copyright (c) 1998-2010 The OpenSSL Project. All rights reserved.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * openssl-core@openssl.org.
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
34 * 6. Redistributions of any form whatsoever must retain the following
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
58 /* ====================================================================
59 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
61 * Portions of the attached software ("Contribution") are developed by
62 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
64 * The Contribution is licensed pursuant to the OpenSSL open source
65 * license provided above.
67 * The elliptic curve binary polynomial software is originally written by
68 * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
73 #include <openssl/err.h>
74 #include <openssl/obj_mac.h>
75 #include <openssl/opensslconf.h>
78 int field_type, /* either NID_X9_62_prime_field or
79 * NID_X9_62_characteristic_two_field */
82 unsigned int cofactor; /* promoted to BN_ULONG */
85 /* the nist prime curves */
86 static const struct { EC_CURVE_DATA h; unsigned char data[20+24*6]; }
87 _EC_NIST_PRIME_192 = {
88 { NID_X9_62_prime_field,20,24,1 },
91 0x30,0x45,0xAE,0x6F,0xC8,0x42,0x2F,0x64,0xED,0x57,
92 0x95,0x28,0xD3,0x81,0x20,0xEA,0xE1,0x21,0x96,0xD5,
95 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
96 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,
100 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
101 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,
105 0x64,0x21,0x05,0x19,0xE5,0x9C,0x80,0xE7,0x0F,0xA7,
106 0xE9,0xAB,0x72,0x24,0x30,0x49,0xFE,0xB8,0xDE,0xEC,
110 0x18,0x8D,0xA8,0x0E,0xB0,0x30,0x90,0xF6,0x7C,0xBF,
111 0x20,0xEB,0x43,0xA1,0x88,0x00,0xF4,0xFF,0x0A,0xFD,
115 0x07,0x19,0x2b,0x95,0xff,0xc8,0xda,0x78,0x63,0x10,
116 0x11,0xed,0x6b,0x24,0xcd,0xd5,0x73,0xf9,0x77,0xa1,
120 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
121 0xFF,0xFF,0x99,0xDE,0xF8,0x36,0x14,0x6B,0xC9,0xB1,
122 0xB4,0xD2,0x28,0x31 }
125 static const struct { EC_CURVE_DATA h; unsigned char data[20+28*6]; }
126 _EC_NIST_PRIME_224 = {
127 { NID_X9_62_prime_field,20,28,1 },
130 0xBD,0x71,0x34,0x47,0x99,0xD5,0xC7,0xFC,0xDC,0x45,
131 0xB5,0x9F,0xA3,0xB9,0xAB,0x8F,0x6A,0x94,0x8B,0xC5,
134 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
135 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
136 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
139 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
140 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,
141 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
144 0xB4,0x05,0x0A,0x85,0x0C,0x04,0xB3,0xAB,0xF5,0x41,
145 0x32,0x56,0x50,0x44,0xB0,0xB7,0xD7,0xBF,0xD8,0xBA,
146 0x27,0x0B,0x39,0x43,0x23,0x55,0xFF,0xB4,
149 0xB7,0x0E,0x0C,0xBD,0x6B,0xB4,0xBF,0x7F,0x32,0x13,
150 0x90,0xB9,0x4A,0x03,0xC1,0xD3,0x56,0xC2,0x11,0x22,
151 0x34,0x32,0x80,0xD6,0x11,0x5C,0x1D,0x21,
154 0xbd,0x37,0x63,0x88,0xb5,0xf7,0x23,0xfb,0x4c,0x22,
155 0xdf,0xe6,0xcd,0x43,0x75,0xa0,0x5a,0x07,0x47,0x64,
156 0x44,0xd5,0x81,0x99,0x85,0x00,0x7e,0x34,
159 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
160 0xFF,0xFF,0xFF,0xFF,0x16,0xA2,0xE0,0xB8,0xF0,0x3E,
161 0x13,0xDD,0x29,0x45,0x5C,0x5C,0x2A,0x3D }
164 static const struct { EC_CURVE_DATA h; unsigned char data[20+48*6]; }
165 _EC_NIST_PRIME_384 = {
166 { NID_X9_62_prime_field,20,48,1 },
169 0xA3,0x35,0x92,0x6A,0xA3,0x19,0xA2,0x7A,0x1D,0x00,
170 0x89,0x6A,0x67,0x73,0xA4,0x82,0x7A,0xCD,0xAC,0x73,
173 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
174 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
175 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
176 0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
177 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
180 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
181 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
182 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
183 0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
184 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFC,
186 0xB3,0x31,0x2F,0xA7,0xE2,0x3E,0xE7,0xE4,0x98,0x8E,
187 0x05,0x6B,0xE3,0xF8,0x2D,0x19,0x18,0x1D,0x9C,0x6E,
188 0xFE,0x81,0x41,0x12,0x03,0x14,0x08,0x8F,0x50,0x13,
189 0x87,0x5A,0xC6,0x56,0x39,0x8D,0x8A,0x2E,0xD1,0x9D,
190 0x2A,0x85,0xC8,0xED,0xD3,0xEC,0x2A,0xEF,
192 0xAA,0x87,0xCA,0x22,0xBE,0x8B,0x05,0x37,0x8E,0xB1,
193 0xC7,0x1E,0xF3,0x20,0xAD,0x74,0x6E,0x1D,0x3B,0x62,
194 0x8B,0xA7,0x9B,0x98,0x59,0xF7,0x41,0xE0,0x82,0x54,
195 0x2A,0x38,0x55,0x02,0xF2,0x5D,0xBF,0x55,0x29,0x6C,
196 0x3A,0x54,0x5E,0x38,0x72,0x76,0x0A,0xB7,
198 0x36,0x17,0xde,0x4a,0x96,0x26,0x2c,0x6f,0x5d,0x9e,
199 0x98,0xbf,0x92,0x92,0xdc,0x29,0xf8,0xf4,0x1d,0xbd,
200 0x28,0x9a,0x14,0x7c,0xe9,0xda,0x31,0x13,0xb5,0xf0,
201 0xb8,0xc0,0x0a,0x60,0xb1,0xce,0x1d,0x7e,0x81,0x9d,
202 0x7a,0x43,0x1d,0x7c,0x90,0xea,0x0e,0x5f,
204 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
205 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
206 0xFF,0xFF,0xFF,0xFF,0xC7,0x63,0x4D,0x81,0xF4,0x37,
207 0x2D,0xDF,0x58,0x1A,0x0D,0xB2,0x48,0xB0,0xA7,0x7A,
208 0xEC,0xEC,0x19,0x6A,0xCC,0xC5,0x29,0x73 }
211 static const struct { EC_CURVE_DATA h; unsigned char data[20+66*6]; }
212 _EC_NIST_PRIME_521 = {
213 { NID_X9_62_prime_field,20,66,1 },
216 0xD0,0x9E,0x88,0x00,0x29,0x1C,0xB8,0x53,0x96,0xCC,
217 0x67,0x17,0x39,0x32,0x84,0xAA,0xA0,0xDA,0x64,0xBA,
220 0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
221 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
222 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
223 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
224 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
225 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
226 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
229 0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
230 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
231 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
232 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
233 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
234 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
235 0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
238 0x00,0x51,0x95,0x3E,0xB9,0x61,0x8E,0x1C,0x9A,0x1F,
239 0x92,0x9A,0x21,0xA0,0xB6,0x85,0x40,0xEE,0xA2,0xDA,
240 0x72,0x5B,0x99,0xB3,0x15,0xF3,0xB8,0xB4,0x89,0x91,
241 0x8E,0xF1,0x09,0xE1,0x56,0x19,0x39,0x51,0xEC,0x7E,
242 0x93,0x7B,0x16,0x52,0xC0,0xBD,0x3B,0xB1,0xBF,0x07,
243 0x35,0x73,0xDF,0x88,0x3D,0x2C,0x34,0xF1,0xEF,0x45,
244 0x1F,0xD4,0x6B,0x50,0x3F,0x00,
247 0x00,0xC6,0x85,0x8E,0x06,0xB7,0x04,0x04,0xE9,0xCD,
248 0x9E,0x3E,0xCB,0x66,0x23,0x95,0xB4,0x42,0x9C,0x64,
249 0x81,0x39,0x05,0x3F,0xB5,0x21,0xF8,0x28,0xAF,0x60,
250 0x6B,0x4D,0x3D,0xBA,0xA1,0x4B,0x5E,0x77,0xEF,0xE7,
251 0x59,0x28,0xFE,0x1D,0xC1,0x27,0xA2,0xFF,0xA8,0xDE,
252 0x33,0x48,0xB3,0xC1,0x85,0x6A,0x42,0x9B,0xF9,0x7E,
253 0x7E,0x31,0xC2,0xE5,0xBD,0x66,
256 0x01,0x18,0x39,0x29,0x6a,0x78,0x9a,0x3b,0xc0,0x04,
257 0x5c,0x8a,0x5f,0xb4,0x2c,0x7d,0x1b,0xd9,0x98,0xf5,
258 0x44,0x49,0x57,0x9b,0x44,0x68,0x17,0xaf,0xbd,0x17,
259 0x27,0x3e,0x66,0x2c,0x97,0xee,0x72,0x99,0x5e,0xf4,
260 0x26,0x40,0xc5,0x50,0xb9,0x01,0x3f,0xad,0x07,0x61,
261 0x35,0x3c,0x70,0x86,0xa2,0x72,0xc2,0x40,0x88,0xbe,
262 0x94,0x76,0x9f,0xd1,0x66,0x50,
265 0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
266 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
267 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
268 0xFF,0xFF,0xFF,0xFA,0x51,0x86,0x87,0x83,0xBF,0x2F,
269 0x96,0x6B,0x7F,0xCC,0x01,0x48,0xF7,0x09,0xA5,0xD0,
270 0x3B,0xB5,0xC9,0xB8,0x89,0x9C,0x47,0xAE,0xBB,0x6F,
271 0xB7,0x1E,0x91,0x38,0x64,0x09 }
274 /* the x9.62 prime curves (minus the nist prime curves) */
275 static const struct { EC_CURVE_DATA h; unsigned char data[20+24*6]; }
276 _EC_X9_62_PRIME_192V2 = {
277 { NID_X9_62_prime_field,20,24,1 },
280 0x31,0xA9,0x2E,0xE2,0x02,0x9F,0xD1,0x0D,0x90,0x1B,
281 0x11,0x3E,0x99,0x07,0x10,0xF0,0xD2,0x1A,0xC6,0xB6,
284 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
285 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,
289 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
290 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,
294 0xCC,0x22,0xD6,0xDF,0xB9,0x5C,0x6B,0x25,0xE4,0x9C,
295 0x0D,0x63,0x64,0xA4,0xE5,0x98,0x0C,0x39,0x3A,0xA2,
299 0xEE,0xA2,0xBA,0xE7,0xE1,0x49,0x78,0x42,0xF2,0xDE,
300 0x77,0x69,0xCF,0xE9,0xC9,0x89,0xC0,0x72,0xAD,0x69,
304 0x65,0x74,0xd1,0x1d,0x69,0xb6,0xec,0x7a,0x67,0x2b,
305 0xb8,0x2a,0x08,0x3d,0xf2,0xf2,0xb0,0x84,0x7d,0xe9,
309 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
310 0xFF,0xFE,0x5F,0xB1,0xA7,0x24,0xDC,0x80,0x41,0x86,
311 0x48,0xD8,0xDD,0x31 }
314 static const struct { EC_CURVE_DATA h; unsigned char data[20+24*6]; }
315 _EC_X9_62_PRIME_192V3 = {
316 { NID_X9_62_prime_field,20,24,1 },
319 0xC4,0x69,0x68,0x44,0x35,0xDE,0xB3,0x78,0xC4,0xB6,
320 0x5C,0xA9,0x59,0x1E,0x2A,0x57,0x63,0x05,0x9A,0x2E,
323 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
324 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,
328 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
329 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,
333 0x22,0x12,0x3D,0xC2,0x39,0x5A,0x05,0xCA,0xA7,0x42,
334 0x3D,0xAE,0xCC,0xC9,0x47,0x60,0xA7,0xD4,0x62,0x25,
338 0x7D,0x29,0x77,0x81,0x00,0xC6,0x5A,0x1D,0xA1,0x78,
339 0x37,0x16,0x58,0x8D,0xCE,0x2B,0x8B,0x4A,0xEE,0x8E,
343 0x38,0xa9,0x0f,0x22,0x63,0x73,0x37,0x33,0x4b,0x49,
344 0xdc,0xb6,0x6a,0x6d,0xc8,0xf9,0x97,0x8a,0xca,0x76,
348 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
349 0xFF,0xFF,0x7A,0x62,0xD0,0x31,0xC8,0x3F,0x42,0x94,
350 0xF6,0x40,0xEC,0x13 }
353 static const struct { EC_CURVE_DATA h; unsigned char data[20+30*6]; }
354 _EC_X9_62_PRIME_239V1 = {
355 { NID_X9_62_prime_field,20,30,1 },
358 0xE4,0x3B,0xB4,0x60,0xF0,0xB8,0x0C,0xC0,0xC0,0xB0,
359 0x75,0x79,0x8E,0x94,0x80,0x60,0xF8,0x32,0x1B,0x7D,
362 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
363 0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
364 0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
367 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
368 0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
369 0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFC,
372 0x6B,0x01,0x6C,0x3B,0xDC,0xF1,0x89,0x41,0xD0,0xD6,
373 0x54,0x92,0x14,0x75,0xCA,0x71,0xA9,0xDB,0x2F,0xB2,
374 0x7D,0x1D,0x37,0x79,0x61,0x85,0xC2,0x94,0x2C,0x0A,
377 0x0F,0xFA,0x96,0x3C,0xDC,0xA8,0x81,0x6C,0xCC,0x33,
378 0xB8,0x64,0x2B,0xED,0xF9,0x05,0xC3,0xD3,0x58,0x57,
379 0x3D,0x3F,0x27,0xFB,0xBD,0x3B,0x3C,0xB9,0xAA,0xAF,
382 0x7d,0xeb,0xe8,0xe4,0xe9,0x0a,0x5d,0xae,0x6e,0x40,
383 0x54,0xca,0x53,0x0b,0xa0,0x46,0x54,0xb3,0x68,0x18,
384 0xce,0x22,0x6b,0x39,0xfc,0xcb,0x7b,0x02,0xf1,0xae,
387 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
388 0xFF,0xFF,0x7F,0xFF,0xFF,0x9E,0x5E,0x9A,0x9F,0x5D,
389 0x90,0x71,0xFB,0xD1,0x52,0x26,0x88,0x90,0x9D,0x0B }
392 static const struct { EC_CURVE_DATA h; unsigned char data[20+30*6]; }
393 _EC_X9_62_PRIME_239V2 = {
394 { NID_X9_62_prime_field,20,30,1 },
397 0xE8,0xB4,0x01,0x16,0x04,0x09,0x53,0x03,0xCA,0x3B,
398 0x80,0x99,0x98,0x2B,0xE0,0x9F,0xCB,0x9A,0xE6,0x16,
401 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
402 0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
403 0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
406 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
407 0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
408 0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFC,
411 0x61,0x7F,0xAB,0x68,0x32,0x57,0x6C,0xBB,0xFE,0xD5,
412 0x0D,0x99,0xF0,0x24,0x9C,0x3F,0xEE,0x58,0xB9,0x4B,
413 0xA0,0x03,0x8C,0x7A,0xE8,0x4C,0x8C,0x83,0x2F,0x2C,
416 0x38,0xAF,0x09,0xD9,0x87,0x27,0x70,0x51,0x20,0xC9,
417 0x21,0xBB,0x5E,0x9E,0x26,0x29,0x6A,0x3C,0xDC,0xF2,
418 0xF3,0x57,0x57,0xA0,0xEA,0xFD,0x87,0xB8,0x30,0xE7,
421 0x5b,0x01,0x25,0xe4,0xdb,0xea,0x0e,0xc7,0x20,0x6d,
422 0xa0,0xfc,0x01,0xd9,0xb0,0x81,0x32,0x9f,0xb5,0x55,
423 0xde,0x6e,0xf4,0x60,0x23,0x7d,0xff,0x8b,0xe4,0xba,
426 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
427 0xFF,0xFF,0x80,0x00,0x00,0xCF,0xA7,0xE8,0x59,0x43,
428 0x77,0xD4,0x14,0xC0,0x38,0x21,0xBC,0x58,0x20,0x63 }
431 static const struct { EC_CURVE_DATA h; unsigned char data[20+30*6]; }
432 _EC_X9_62_PRIME_239V3 = {
433 { NID_X9_62_prime_field,20,30,1 },
437 0x7D,0x73,0x74,0x16,0x8F,0xFE,0x34,0x71,0xB6,0x0A,
438 0x85,0x76,0x86,0xA1,0x94,0x75,0xD3,0xBF,0xA2,0xFF,
441 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
442 0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
443 0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
446 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
447 0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
448 0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFC,
451 0x25,0x57,0x05,0xFA,0x2A,0x30,0x66,0x54,0xB1,0xF4,
452 0xCB,0x03,0xD6,0xA7,0x50,0xA3,0x0C,0x25,0x01,0x02,
453 0xD4,0x98,0x87,0x17,0xD9,0xBA,0x15,0xAB,0x6D,0x3E,
456 0x67,0x68,0xAE,0x8E,0x18,0xBB,0x92,0xCF,0xCF,0x00,
457 0x5C,0x94,0x9A,0xA2,0xC6,0xD9,0x48,0x53,0xD0,0xE6,
458 0x60,0xBB,0xF8,0x54,0xB1,0xC9,0x50,0x5F,0xE9,0x5A,
461 0x16,0x07,0xe6,0x89,0x8f,0x39,0x0c,0x06,0xbc,0x1d,
462 0x55,0x2b,0xad,0x22,0x6f,0x3b,0x6f,0xcf,0xe4,0x8b,
463 0x6e,0x81,0x84,0x99,0xaf,0x18,0xe3,0xed,0x6c,0xf3,
466 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
467 0xFF,0xFF,0x7F,0xFF,0xFF,0x97,0x5D,0xEB,0x41,0xB3,
468 0xA6,0x05,0x7C,0x3C,0x43,0x21,0x46,0x52,0x65,0x51 }
472 static const struct { EC_CURVE_DATA h; unsigned char data[20+32*6]; }
473 _EC_X9_62_PRIME_256V1 = {
474 { NID_X9_62_prime_field,20,32,1 },
477 0xC4,0x9D,0x36,0x08,0x86,0xE7,0x04,0x93,0x6A,0x66,
478 0x78,0xE1,0x13,0x9D,0x26,0xB7,0x81,0x9F,0x7E,0x90,
481 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x01,0x00,0x00,
482 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
483 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
487 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x01,0x00,0x00,
488 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
489 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
493 0x5A,0xC6,0x35,0xD8,0xAA,0x3A,0x93,0xE7,0xB3,0xEB,
494 0xBD,0x55,0x76,0x98,0x86,0xBC,0x65,0x1D,0x06,0xB0,
495 0xCC,0x53,0xB0,0xF6,0x3B,0xCE,0x3C,0x3E,0x27,0xD2,
499 0x6B,0x17,0xD1,0xF2,0xE1,0x2C,0x42,0x47,0xF8,0xBC,
500 0xE6,0xE5,0x63,0xA4,0x40,0xF2,0x77,0x03,0x7D,0x81,
501 0x2D,0xEB,0x33,0xA0,0xF4,0xA1,0x39,0x45,0xD8,0x98,
505 0x4f,0xe3,0x42,0xe2,0xfe,0x1a,0x7f,0x9b,0x8e,0xe7,
506 0xeb,0x4a,0x7c,0x0f,0x9e,0x16,0x2b,0xce,0x33,0x57,
507 0x6b,0x31,0x5e,0xce,0xcb,0xb6,0x40,0x68,0x37,0xbf,
511 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,
512 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBC,0xE6,0xFA,0xAD,
513 0xA7,0x17,0x9E,0x84,0xF3,0xB9,0xCA,0xC2,0xFC,0x63,
517 /* the secg prime curves (minus the nist and x9.62 prime curves) */
518 static const struct { EC_CURVE_DATA h; unsigned char data[20+14*6]; }
519 _EC_SECG_PRIME_112R1 = {
520 { NID_X9_62_prime_field,20,14,1 },
523 0x00,0xF5,0x0B,0x02,0x8E,0x4D,0x69,0x6E,0x67,0x68,
524 0x75,0x61,0x51,0x75,0x29,0x04,0x72,0x78,0x3F,0xB1,
527 0xDB,0x7C,0x2A,0xBF,0x62,0xE3,0x5E,0x66,0x80,0x76,
531 0xDB,0x7C,0x2A,0xBF,0x62,0xE3,0x5E,0x66,0x80,0x76,
535 0x65,0x9E,0xF8,0xBA,0x04,0x39,0x16,0xEE,0xDE,0x89,
539 0x09,0x48,0x72,0x39,0x99,0x5A,0x5E,0xE7,0x6B,0x55,
543 0xa8,0x9c,0xe5,0xaf,0x87,0x24,0xc0,0xa2,0x3e,0x0e,
547 0xDB,0x7C,0x2A,0xBF,0x62,0xE3,0x5E,0x76,0x28,0xDF,
548 0xAC,0x65,0x61,0xC5 }
551 static const struct { EC_CURVE_DATA h; unsigned char data[20+14*6]; }
552 _EC_SECG_PRIME_112R2 = {
553 { NID_X9_62_prime_field,20,14,4 },
556 0x00,0x27,0x57,0xA1,0x11,0x4D,0x69,0x6E,0x67,0x68,
557 0x75,0x61,0x51,0x75,0x53,0x16,0xC0,0x5E,0x0B,0xD4,
560 0xDB,0x7C,0x2A,0xBF,0x62,0xE3,0x5E,0x66,0x80,0x76,
564 0x61,0x27,0xC2,0x4C,0x05,0xF3,0x8A,0x0A,0xAA,0xF6,
568 0x51,0xDE,0xF1,0x81,0x5D,0xB5,0xED,0x74,0xFC,0xC3,
572 0x4B,0xA3,0x0A,0xB5,0xE8,0x92,0xB4,0xE1,0x64,0x9D,
576 0xad,0xcd,0x46,0xf5,0x88,0x2e,0x37,0x47,0xde,0xf3,
580 0x36,0xDF,0x0A,0xAF,0xD8,0xB8,0xD7,0x59,0x7C,0xA1,
581 0x05,0x20,0xD0,0x4B }
584 static const struct { EC_CURVE_DATA h; unsigned char data[20+16*6]; }
585 _EC_SECG_PRIME_128R1 = {
586 { NID_X9_62_prime_field,20,16,1 },
589 0x00,0x0E,0x0D,0x4D,0x69,0x6E,0x67,0x68,0x75,0x61,
590 0x51,0x75,0x0C,0xC0,0x3A,0x44,0x73,0xD0,0x36,0x79,
593 0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
594 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
597 0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
598 0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
601 0xE8,0x75,0x79,0xC1,0x10,0x79,0xF4,0x3D,0xD8,0x24,
602 0x99,0x3C,0x2C,0xEE,0x5E,0xD3,
605 0x16,0x1F,0xF7,0x52,0x8B,0x89,0x9B,0x2D,0x0C,0x28,
606 0x60,0x7C,0xA5,0x2C,0x5B,0x86,
609 0xcf,0x5a,0xc8,0x39,0x5b,0xaf,0xeb,0x13,0xc0,0x2d,
610 0xa2,0x92,0xdd,0xed,0x7a,0x83,
613 0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x75,0xA3,
614 0x0D,0x1B,0x90,0x38,0xA1,0x15 }
617 static const struct { EC_CURVE_DATA h; unsigned char data[20+16*6]; }
618 _EC_SECG_PRIME_128R2 = {
619 { NID_X9_62_prime_field,20,16,4 },
622 0x00,0x4D,0x69,0x6E,0x67,0x68,0x75,0x61,0x51,0x75,
623 0x12,0xD8,0xF0,0x34,0x31,0xFC,0xE6,0x3B,0x88,0xF4,
626 0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
627 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
630 0xD6,0x03,0x19,0x98,0xD1,0xB3,0xBB,0xFE,0xBF,0x59,
631 0xCC,0x9B,0xBF,0xF9,0xAE,0xE1,
634 0x5E,0xEE,0xFC,0xA3,0x80,0xD0,0x29,0x19,0xDC,0x2C,
635 0x65,0x58,0xBB,0x6D,0x8A,0x5D,
638 0x7B,0x6A,0xA5,0xD8,0x5E,0x57,0x29,0x83,0xE6,0xFB,
639 0x32,0xA7,0xCD,0xEB,0xC1,0x40,
642 0x27,0xb6,0x91,0x6a,0x89,0x4d,0x3a,0xee,0x71,0x06,
643 0xfe,0x80,0x5f,0xc3,0x4b,0x44,
646 0x3F,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xBE,0x00,
647 0x24,0x72,0x06,0x13,0xB5,0xA3 }
650 static const struct { EC_CURVE_DATA h; unsigned char data[0+21*6]; }
651 _EC_SECG_PRIME_160K1 = {
652 { NID_X9_62_prime_field,0,21,1 },
656 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
657 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xAC,
661 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
662 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
666 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
667 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
671 0x00,0x3B,0x4C,0x38,0x2C,0xE3,0x7A,0xA1,0x92,0xA4,
672 0x01,0x9E,0x76,0x30,0x36,0xF4,0xF5,0xDD,0x4D,0x7E,
676 0x00,0x93,0x8c,0xf9,0x35,0x31,0x8f,0xdc,0xed,0x6b,
677 0xc2,0x82,0x86,0x53,0x17,0x33,0xc3,0xf0,0x3c,0x4f,
681 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
682 0x01,0xB8,0xFA,0x16,0xDF,0xAB,0x9A,0xCA,0x16,0xB6,
686 static const struct { EC_CURVE_DATA h; unsigned char data[20+21*6]; }
687 _EC_SECG_PRIME_160R1 = {
688 { NID_X9_62_prime_field,20,21,1 },
691 0x10,0x53,0xCD,0xE4,0x2C,0x14,0xD6,0x96,0xE6,0x76,
692 0x87,0x56,0x15,0x17,0x53,0x3B,0xF3,0xF8,0x33,0x45,
695 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
696 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,
700 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
701 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,
705 0x00,0x1C,0x97,0xBE,0xFC,0x54,0xBD,0x7A,0x8B,0x65,
706 0xAC,0xF8,0x9F,0x81,0xD4,0xD4,0xAD,0xC5,0x65,0xFA,
710 0x00,0x4A,0x96,0xB5,0x68,0x8E,0xF5,0x73,0x28,0x46,
711 0x64,0x69,0x89,0x68,0xC3,0x8B,0xB9,0x13,0xCB,0xFC,
715 0x00,0x23,0xa6,0x28,0x55,0x31,0x68,0x94,0x7d,0x59,
716 0xdc,0xc9,0x12,0x04,0x23,0x51,0x37,0x7a,0xc5,0xfb,
720 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
721 0x01,0xF4,0xC8,0xF9,0x27,0xAE,0xD3,0xCA,0x75,0x22,
725 static const struct { EC_CURVE_DATA h; unsigned char data[20+21*6]; }
726 _EC_SECG_PRIME_160R2 = {
727 { NID_X9_62_prime_field,20,21,1 },
730 0xB9,0x9B,0x99,0xB0,0x99,0xB3,0x23,0xE0,0x27,0x09,
731 0xA4,0xD6,0x96,0xE6,0x76,0x87,0x56,0x15,0x17,0x51,
734 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
735 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xAC,
739 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
740 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xAC,
744 0x00,0xB4,0xE1,0x34,0xD3,0xFB,0x59,0xEB,0x8B,0xAB,
745 0x57,0x27,0x49,0x04,0x66,0x4D,0x5A,0xF5,0x03,0x88,
749 0x00,0x52,0xDC,0xB0,0x34,0x29,0x3A,0x11,0x7E,0x1F,
750 0x4F,0xF1,0x1B,0x30,0xF7,0x19,0x9D,0x31,0x44,0xCE,
754 0x00,0xfe,0xaf,0xfe,0xf2,0xe3,0x31,0xf2,0x96,0xe0,
755 0x71,0xfa,0x0d,0xf9,0x98,0x2c,0xfe,0xa7,0xd4,0x3f,
759 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
760 0x00,0x35,0x1E,0xE7,0x86,0xA8,0x18,0xF3,0xA1,0xA1,
764 static const struct { EC_CURVE_DATA h; unsigned char data[0+24*6]; }
765 _EC_SECG_PRIME_192K1 = {
766 { NID_X9_62_prime_field,0,24,1 },
770 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
771 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
775 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
776 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
780 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
781 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
785 0xDB,0x4F,0xF1,0x0E,0xC0,0x57,0xE9,0xAE,0x26,0xB0,
786 0x7D,0x02,0x80,0xB7,0xF4,0x34,0x1D,0xA5,0xD1,0xB1,
790 0x9b,0x2f,0x2f,0x6d,0x9c,0x56,0x28,0xa7,0x84,0x41,
791 0x63,0xd0,0x15,0xbe,0x86,0x34,0x40,0x82,0xaa,0x88,
795 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
796 0xFF,0xFE,0x26,0xF2,0xFC,0x17,0x0F,0x69,0x46,0x6A,
797 0x74,0xDE,0xFD,0x8D }
800 static const struct { EC_CURVE_DATA h; unsigned char data[0+29*6]; }
801 _EC_SECG_PRIME_224K1 = {
802 { NID_X9_62_prime_field,0,29,1 },
806 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
807 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
808 0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xE5,0x6D,
811 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
812 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
813 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
816 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
817 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
818 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
821 0x00,0xA1,0x45,0x5B,0x33,0x4D,0xF0,0x99,0xDF,0x30,
822 0xFC,0x28,0xA1,0x69,0xA4,0x67,0xE9,0xE4,0x70,0x75,
823 0xA9,0x0F,0x7E,0x65,0x0E,0xB6,0xB7,0xA4,0x5C,
826 0x00,0x7e,0x08,0x9f,0xed,0x7f,0xba,0x34,0x42,0x82,
827 0xca,0xfb,0xd6,0xf7,0xe3,0x19,0xf7,0xc0,0xb0,0xbd,
828 0x59,0xe2,0xca,0x4b,0xdb,0x55,0x6d,0x61,0xa5,
831 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
832 0x00,0x00,0x00,0x00,0x01,0xDC,0xE8,0xD2,0xEC,0x61,
833 0x84,0xCA,0xF0,0xA9,0x71,0x76,0x9F,0xB1,0xF7 }
836 static const struct { EC_CURVE_DATA h; unsigned char data[0+32*6]; }
837 _EC_SECG_PRIME_256K1 = {
838 { NID_X9_62_prime_field,0,32,1 },
842 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
843 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
844 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,
848 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
849 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
850 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
854 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
855 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
856 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
860 0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,
861 0x62,0x95,0xCE,0x87,0x0B,0x07,0x02,0x9B,0xFC,0xDB,
862 0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0xF8,
866 0x48,0x3a,0xda,0x77,0x26,0xa3,0xc4,0x65,0x5d,0xa4,
867 0xfb,0xfc,0x0e,0x11,0x08,0xa8,0xfd,0x17,0xb4,0x48,
868 0xa6,0x85,0x54,0x19,0x9c,0x47,0xd0,0x8f,0xfb,0x10,
872 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
873 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,
874 0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E,0x8C,0xD0,0x36,
878 /* some wap/wtls curves */
879 static const struct { EC_CURVE_DATA h; unsigned char data[0+15*6]; }
881 { NID_X9_62_prime_field,0,15,1 },
885 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
886 0xFF,0xFF,0xFF,0xFD,0xE7,
889 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
890 0x00,0x00,0x00,0x00,0x00,
893 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
894 0x00,0x00,0x00,0x00,0x03,
897 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
898 0x00,0x00,0x00,0x00,0x01,
901 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
902 0x00,0x00,0x00,0x00,0x02,
905 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xEC,0xEA,
906 0x55,0x1A,0xD8,0x37,0xE9 }
909 static const struct { EC_CURVE_DATA h; unsigned char data[0+21*6]; }
911 { NID_X9_62_prime_field,0,21,1 },
915 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
916 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x80,
920 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
921 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
925 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
926 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
930 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
931 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
935 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
936 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
940 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
941 0x01,0xCD,0xC9,0x8A,0xE0,0xE2,0xDE,0x57,0x4A,0xBF,
945 static const struct { EC_CURVE_DATA h; unsigned char data[0+28*6]; }
947 { NID_X9_62_prime_field,0,28,1 },
951 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
952 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
953 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
956 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
957 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,
958 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
961 0xB4,0x05,0x0A,0x85,0x0C,0x04,0xB3,0xAB,0xF5,0x41,
962 0x32,0x56,0x50,0x44,0xB0,0xB7,0xD7,0xBF,0xD8,0xBA,
963 0x27,0x0B,0x39,0x43,0x23,0x55,0xFF,0xB4,
966 0xB7,0x0E,0x0C,0xBD,0x6B,0xB4,0xBF,0x7F,0x32,0x13,
967 0x90,0xB9,0x4A,0x03,0xC1,0xD3,0x56,0xC2,0x11,0x22,
968 0x34,0x32,0x80,0xD6,0x11,0x5C,0x1D,0x21,
971 0xbd,0x37,0x63,0x88,0xb5,0xf7,0x23,0xfb,0x4c,0x22,
972 0xdf,0xe6,0xcd,0x43,0x75,0xa0,0x5a,0x07,0x47,0x64,
973 0x44,0xd5,0x81,0x99,0x85,0x00,0x7e,0x34,
976 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
977 0xFF,0xFF,0xFF,0xFF,0x16,0xA2,0xE0,0xB8,0xF0,0x3E,
978 0x13,0xDD,0x29,0x45,0x5C,0x5C,0x2A,0x3D }
981 #ifndef OPENSSL_NO_EC2M
983 /* characteristic two curves */
984 static const struct { EC_CURVE_DATA h; unsigned char data[20+15*6]; }
985 _EC_SECG_CHAR2_113R1 = {
986 { NID_X9_62_characteristic_two_field,20,15,2 },
989 0x10,0xE7,0x23,0xAB,0x14,0xD6,0x96,0xE6,0x76,0x87,
990 0x56,0x15,0x17,0x56,0xFE,0xBF,0x8F,0xCB,0x49,0xA9,
993 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
994 0x00,0x00,0x00,0x02,0x01,
997 0x00,0x30,0x88,0x25,0x0C,0xA6,0xE7,0xC7,0xFE,0x64,
998 0x9C,0xE8,0x58,0x20,0xF7,
1001 0x00,0xE8,0xBE,0xE4,0xD3,0xE2,0x26,0x07,0x44,0x18,
1002 0x8B,0xE0,0xE9,0xC7,0x23,
1005 0x00,0x9D,0x73,0x61,0x6F,0x35,0xF4,0xAB,0x14,0x07,
1006 0xD7,0x35,0x62,0xC1,0x0F,
1009 0x00,0xA5,0x28,0x30,0x27,0x79,0x58,0xEE,0x84,0xD1,
1010 0x31,0x5E,0xD3,0x18,0x86,
1013 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xCC,
1014 0xEC,0x8A,0x39,0xE5,0x6F }
1017 static const struct { EC_CURVE_DATA h; unsigned char data[20+15*6]; }
1018 _EC_SECG_CHAR2_113R2 = {
1019 { NID_X9_62_characteristic_two_field,20,15,2 },
1022 0x10,0xC0,0xFB,0x15,0x76,0x08,0x60,0xDE,0xF1,0xEE,
1023 0xF4,0xD6,0x96,0xE6,0x76,0x87,0x56,0x15,0x17,0x5D,
1026 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1027 0x00,0x00,0x00,0x02,0x01,
1030 0x00,0x68,0x99,0x18,0xDB,0xEC,0x7E,0x5A,0x0D,0xD6,
1031 0xDF,0xC0,0xAA,0x55,0xC7,
1034 0x00,0x95,0xE9,0xA9,0xEC,0x9B,0x29,0x7B,0xD4,0xBF,
1035 0x36,0xE0,0x59,0x18,0x4F,
1038 0x01,0xA5,0x7A,0x6A,0x7B,0x26,0xCA,0x5E,0xF5,0x2F,
1039 0xCD,0xB8,0x16,0x47,0x97,
1042 0x00,0xB3,0xAD,0xC9,0x4E,0xD1,0xFE,0x67,0x4C,0x06,
1043 0xE6,0x95,0xBA,0xBA,0x1D,
1046 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x08,0x78,
1047 0x9B,0x24,0x96,0xAF,0x93 }
1050 static const struct { EC_CURVE_DATA h; unsigned char data[20+17*6]; }
1051 _EC_SECG_CHAR2_131R1 = {
1052 { NID_X9_62_characteristic_two_field,20,17,2 },
1055 0x4D,0x69,0x6E,0x67,0x68,0x75,0x61,0x51,0x75,0x98,
1056 0x5B,0xD3,0xAD,0xBA,0xDA,0x21,0xB4,0x3A,0x97,0xE2,
1059 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1060 0x00,0x00,0x00,0x00,0x00,0x01,0x0D,
1063 0x07,0xA1,0x1B,0x09,0xA7,0x6B,0x56,0x21,0x44,0x41,
1064 0x8F,0xF3,0xFF,0x8C,0x25,0x70,0xB8,
1067 0x02,0x17,0xC0,0x56,0x10,0x88,0x4B,0x63,0xB9,0xC6,
1068 0xC7,0x29,0x16,0x78,0xF9,0xD3,0x41,
1071 0x00,0x81,0xBA,0xF9,0x1F,0xDF,0x98,0x33,0xC4,0x0F,
1072 0x9C,0x18,0x13,0x43,0x63,0x83,0x99,
1075 0x07,0x8C,0x6E,0x7E,0xA3,0x8C,0x00,0x1F,0x73,0xC8,
1076 0x13,0x4B,0x1B,0x4E,0xF9,0xE1,0x50,
1079 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x31,
1080 0x23,0x95,0x3A,0x94,0x64,0xB5,0x4D }
1083 static const struct { EC_CURVE_DATA h; unsigned char data[20+17*6]; }
1084 _EC_SECG_CHAR2_131R2 = {
1085 { NID_X9_62_characteristic_two_field,20,17,2 },
1088 0x98,0x5B,0xD3,0xAD,0xBA,0xD4,0xD6,0x96,0xE6,0x76,
1089 0x87,0x56,0x15,0x17,0x5A,0x21,0xB4,0x3A,0x97,0xE3,
1092 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1093 0x00,0x00,0x00,0x00,0x00,0x01,0x0D,
1096 0x03,0xE5,0xA8,0x89,0x19,0xD7,0xCA,0xFC,0xBF,0x41,
1097 0x5F,0x07,0xC2,0x17,0x65,0x73,0xB2,
1100 0x04,0xB8,0x26,0x6A,0x46,0xC5,0x56,0x57,0xAC,0x73,
1101 0x4C,0xE3,0x8F,0x01,0x8F,0x21,0x92,
1104 0x03,0x56,0xDC,0xD8,0xF2,0xF9,0x50,0x31,0xAD,0x65,
1105 0x2D,0x23,0x95,0x1B,0xB3,0x66,0xA8,
1108 0x06,0x48,0xF0,0x6D,0x86,0x79,0x40,0xA5,0x36,0x6D,
1109 0x9E,0x26,0x5D,0xE9,0xEB,0x24,0x0F,
1112 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x69,
1113 0x54,0xA2,0x33,0x04,0x9B,0xA9,0x8F }
1116 static const struct { EC_CURVE_DATA h; unsigned char data[0+21*6]; }
1117 _EC_NIST_CHAR2_163K = {
1118 { NID_X9_62_characteristic_two_field,0,21,2 },
1122 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1123 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1127 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1128 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1132 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1133 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1137 0x02,0xFE,0x13,0xC0,0x53,0x7B,0xBC,0x11,0xAC,0xAA,
1138 0x07,0xD7,0x93,0xDE,0x4E,0x6D,0x5E,0x5C,0x94,0xEE,
1142 0x02,0x89,0x07,0x0F,0xB0,0x5D,0x38,0xFF,0x58,0x32,
1143 0x1F,0x2E,0x80,0x05,0x36,0xD5,0x38,0xCC,0xDA,0xA3,
1147 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1148 0x02,0x01,0x08,0xA2,0xE0,0xCC,0x0D,0x99,0xF8,0xA5,
1152 static const struct { EC_CURVE_DATA h; unsigned char data[0+21*6]; }
1153 _EC_SECG_CHAR2_163R1 = {
1154 { NID_X9_62_characteristic_two_field,0,21,2 },
1158 /* The algorithm used to derive the curve parameters from
1159 * the seed used here is slightly different than the
1160 * algorithm described in X9.62 . */
1161 0x24,0xB7,0xB1,0x37,0xC8,0xA1,0x4D,0x69,0x6E,0x67,
1162 0x68,0x75,0x61,0x51,0x75,0x6F,0xD0,0xDA,0x2E,0x5C,
1165 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1166 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1170 0x07,0xB6,0x88,0x2C,0xAA,0xEF,0xA8,0x4F,0x95,0x54,
1171 0xFF,0x84,0x28,0xBD,0x88,0xE2,0x46,0xD2,0x78,0x2A,
1175 0x07,0x13,0x61,0x2D,0xCD,0xDC,0xB4,0x0A,0xAB,0x94,
1176 0x6B,0xDA,0x29,0xCA,0x91,0xF7,0x3A,0xF9,0x58,0xAF,
1180 0x03,0x69,0x97,0x96,0x97,0xAB,0x43,0x89,0x77,0x89,
1181 0x56,0x67,0x89,0x56,0x7F,0x78,0x7A,0x78,0x76,0xA6,
1185 0x00,0x43,0x5E,0xDB,0x42,0xEF,0xAF,0xB2,0x98,0x9D,
1186 0x51,0xFE,0xFC,0xE3,0xC8,0x09,0x88,0xF4,0x1F,0xF8,
1190 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
1191 0xFF,0x48,0xAA,0xB6,0x89,0xC2,0x9C,0xA7,0x10,0x27,
1195 static const struct { EC_CURVE_DATA h; unsigned char data[0+21*6]; }
1196 _EC_NIST_CHAR2_163B = {
1197 { NID_X9_62_characteristic_two_field,0,21,2 },
1201 /* The seed here was used to created the curve parameters in normal
1202 * basis representation (and not the polynomial representation used here) */
1203 0x85,0xE2,0x5B,0xFE,0x5C,0x86,0x22,0x6C,0xDB,0x12,
1204 0x01,0x6F,0x75,0x53,0xF9,0xD0,0xE6,0x93,0xA2,0x68,
1207 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1208 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1212 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1213 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1217 0x02,0x0A,0x60,0x19,0x07,0xB8,0xC9,0x53,0xCA,0x14,
1218 0x81,0xEB,0x10,0x51,0x2F,0x78,0x74,0x4A,0x32,0x05,
1222 0x03,0xF0,0xEB,0xA1,0x62,0x86,0xA2,0xD5,0x7E,0xA0,
1223 0x99,0x11,0x68,0xD4,0x99,0x46,0x37,0xE8,0x34,0x3E,
1227 0x00,0xD5,0x1F,0xBC,0x6C,0x71,0xA0,0x09,0x4F,0xA2,
1228 0xCD,0xD5,0x45,0xB1,0x1C,0x5C,0x0C,0x79,0x73,0x24,
1232 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1233 0x02,0x92,0xFE,0x77,0xE7,0x0C,0x12,0xA4,0x23,0x4C,
1237 static const struct { EC_CURVE_DATA h; unsigned char data[20+25*6]; }
1238 _EC_SECG_CHAR2_193R1 = {
1239 { NID_X9_62_characteristic_two_field,20,25,2 },
1242 0x10,0x3F,0xAE,0xC7,0x4D,0x69,0x6E,0x67,0x68,0x75,
1243 0x61,0x51,0x75,0x77,0x7F,0xC5,0xB1,0x91,0xEF,0x30,
1246 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1247 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1248 0x00,0x00,0x00,0x80,0x01,
1251 0x00,0x17,0x85,0x8F,0xEB,0x7A,0x98,0x97,0x51,0x69,
1252 0xE1,0x71,0xF7,0x7B,0x40,0x87,0xDE,0x09,0x8A,0xC8,
1253 0xA9,0x11,0xDF,0x7B,0x01,
1256 0x00,0xFD,0xFB,0x49,0xBF,0xE6,0xC3,0xA8,0x9F,0xAC,
1257 0xAD,0xAA,0x7A,0x1E,0x5B,0xBC,0x7C,0xC1,0xC2,0xE5,
1258 0xD8,0x31,0x47,0x88,0x14,
1261 0x01,0xF4,0x81,0xBC,0x5F,0x0F,0xF8,0x4A,0x74,0xAD,
1262 0x6C,0xDF,0x6F,0xDE,0xF4,0xBF,0x61,0x79,0x62,0x53,
1263 0x72,0xD8,0xC0,0xC5,0xE1,
1266 0x00,0x25,0xE3,0x99,0xF2,0x90,0x37,0x12,0xCC,0xF3,
1267 0xEA,0x9E,0x3A,0x1A,0xD1,0x7F,0xB0,0xB3,0x20,0x1B,
1268 0x6A,0xF7,0xCE,0x1B,0x05,
1271 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1272 0x00,0x00,0x00,0xC7,0xF3,0x4A,0x77,0x8F,0x44,0x3A,
1273 0xCC,0x92,0x0E,0xBA,0x49 }
1276 static const struct { EC_CURVE_DATA h; unsigned char data[20+25*6]; }
1277 _EC_SECG_CHAR2_193R2 = {
1278 { NID_X9_62_characteristic_two_field,20,25,2 },
1281 0x10,0xB7,0xB4,0xD6,0x96,0xE6,0x76,0x87,0x56,0x15,
1282 0x17,0x51,0x37,0xC8,0xA1,0x6F,0xD0,0xDA,0x22,0x11,
1285 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1286 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1287 0x00,0x00,0x00,0x80,0x01,
1290 0x01,0x63,0xF3,0x5A,0x51,0x37,0xC2,0xCE,0x3E,0xA6,
1291 0xED,0x86,0x67,0x19,0x0B,0x0B,0xC4,0x3E,0xCD,0x69,
1292 0x97,0x77,0x02,0x70,0x9B,
1295 0x00,0xC9,0xBB,0x9E,0x89,0x27,0xD4,0xD6,0x4C,0x37,
1296 0x7E,0x2A,0xB2,0x85,0x6A,0x5B,0x16,0xE3,0xEF,0xB7,
1297 0xF6,0x1D,0x43,0x16,0xAE,
1300 0x00,0xD9,0xB6,0x7D,0x19,0x2E,0x03,0x67,0xC8,0x03,
1301 0xF3,0x9E,0x1A,0x7E,0x82,0xCA,0x14,0xA6,0x51,0x35,
1302 0x0A,0xAE,0x61,0x7E,0x8F,
1305 0x01,0xCE,0x94,0x33,0x56,0x07,0xC3,0x04,0xAC,0x29,
1306 0xE7,0xDE,0xFB,0xD9,0xCA,0x01,0xF5,0x96,0xF9,0x27,
1307 0x22,0x4C,0xDE,0xCF,0x6C,
1310 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1311 0x00,0x00,0x01,0x5A,0xAB,0x56,0x1B,0x00,0x54,0x13,
1312 0xCC,0xD4,0xEE,0x99,0xD5 }
1315 static const struct { EC_CURVE_DATA h; unsigned char data[0+30*6]; }
1316 _EC_NIST_CHAR2_233K = {
1317 { NID_X9_62_characteristic_two_field,0,30,4 },
1320 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1321 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1322 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
1325 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1326 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1327 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1330 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1331 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1332 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
1335 0x01,0x72,0x32,0xBA,0x85,0x3A,0x7E,0x73,0x1A,0xF1,
1336 0x29,0xF2,0x2F,0xF4,0x14,0x95,0x63,0xA4,0x19,0xC2,
1337 0x6B,0xF5,0x0A,0x4C,0x9D,0x6E,0xEF,0xAD,0x61,0x26,
1340 0x01,0xDB,0x53,0x7D,0xEC,0xE8,0x19,0xB7,0xF7,0x0F,
1341 0x55,0x5A,0x67,0xC4,0x27,0xA8,0xCD,0x9B,0xF1,0x8A,
1342 0xEB,0x9B,0x56,0xE0,0xC1,0x10,0x56,0xFA,0xE6,0xA3,
1345 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1346 0x00,0x00,0x00,0x00,0x00,0x06,0x9D,0x5B,0xB9,0x15,
1347 0xBC,0xD4,0x6E,0xFB,0x1A,0xD5,0xF1,0x73,0xAB,0xDF }
1350 static const struct { EC_CURVE_DATA h; unsigned char data[20+30*6]; }
1351 _EC_NIST_CHAR2_233B = {
1352 { NID_X9_62_characteristic_two_field,20,30,2 },
1355 0x74,0xD5,0x9F,0xF0,0x7F,0x6B,0x41,0x3D,0x0E,0xA1,
1356 0x4B,0x34,0x4B,0x20,0xA2,0xDB,0x04,0x9B,0x50,0xC3,
1359 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1360 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1361 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
1364 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1365 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1366 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
1369 0x00,0x66,0x64,0x7E,0xDE,0x6C,0x33,0x2C,0x7F,0x8C,
1370 0x09,0x23,0xBB,0x58,0x21,0x3B,0x33,0x3B,0x20,0xE9,
1371 0xCE,0x42,0x81,0xFE,0x11,0x5F,0x7D,0x8F,0x90,0xAD,
1374 0x00,0xFA,0xC9,0xDF,0xCB,0xAC,0x83,0x13,0xBB,0x21,
1375 0x39,0xF1,0xBB,0x75,0x5F,0xEF,0x65,0xBC,0x39,0x1F,
1376 0x8B,0x36,0xF8,0xF8,0xEB,0x73,0x71,0xFD,0x55,0x8B,
1379 0x01,0x00,0x6A,0x08,0xA4,0x19,0x03,0x35,0x06,0x78,
1380 0xE5,0x85,0x28,0xBE,0xBF,0x8A,0x0B,0xEF,0xF8,0x67,
1381 0xA7,0xCA,0x36,0x71,0x6F,0x7E,0x01,0xF8,0x10,0x52,
1384 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1385 0x00,0x00,0x00,0x00,0x00,0x13,0xE9,0x74,0xE7,0x2F,
1386 0x8A,0x69,0x22,0x03,0x1D,0x26,0x03,0xCF,0xE0,0xD7 }
1389 static const struct { EC_CURVE_DATA h; unsigned char data[0+30*6]; }
1390 _EC_SECG_CHAR2_239K1 = {
1391 { NID_X9_62_characteristic_two_field,0,30,4 },
1394 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1395 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1396 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
1399 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1400 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1401 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1404 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1405 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1406 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
1409 0x29,0xA0,0xB6,0xA8,0x87,0xA9,0x83,0xE9,0x73,0x09,
1410 0x88,0xA6,0x87,0x27,0xA8,0xB2,0xD1,0x26,0xC4,0x4C,
1411 0xC2,0xCC,0x7B,0x2A,0x65,0x55,0x19,0x30,0x35,0xDC,
1414 0x76,0x31,0x08,0x04,0xF1,0x2E,0x54,0x9B,0xDB,0x01,
1415 0x1C,0x10,0x30,0x89,0xE7,0x35,0x10,0xAC,0xB2,0x75,
1416 0xFC,0x31,0x2A,0x5D,0xC6,0xB7,0x65,0x53,0xF0,0xCA,
1419 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1420 0x00,0x00,0x00,0x00,0x00,0x5A,0x79,0xFE,0xC6,0x7C,
1421 0xB6,0xE9,0x1F,0x1C,0x1D,0xA8,0x00,0xE4,0x78,0xA5 }
1424 static const struct { EC_CURVE_DATA h; unsigned char data[0+36*6]; }
1425 _EC_NIST_CHAR2_283K = {
1426 { NID_X9_62_characteristic_two_field,0,36,4 },
1429 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1430 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1431 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1432 0x00,0x00,0x00,0x00,0x10,0xA1,
1435 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1436 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1437 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1438 0x00,0x00,0x00,0x00,0x00,0x00,
1441 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1442 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1443 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1444 0x00,0x00,0x00,0x00,0x00,0x01,
1447 0x05,0x03,0x21,0x3F,0x78,0xCA,0x44,0x88,0x3F,0x1A,
1448 0x3B,0x81,0x62,0xF1,0x88,0xE5,0x53,0xCD,0x26,0x5F,
1449 0x23,0xC1,0x56,0x7A,0x16,0x87,0x69,0x13,0xB0,0xC2,
1450 0xAC,0x24,0x58,0x49,0x28,0x36,
1453 0x01,0xCC,0xDA,0x38,0x0F,0x1C,0x9E,0x31,0x8D,0x90,
1454 0xF9,0x5D,0x07,0xE5,0x42,0x6F,0xE8,0x7E,0x45,0xC0,
1455 0xE8,0x18,0x46,0x98,0xE4,0x59,0x62,0x36,0x4E,0x34,
1456 0x11,0x61,0x77,0xDD,0x22,0x59,
1459 0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
1460 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE9,0xAE,
1461 0x2E,0xD0,0x75,0x77,0x26,0x5D,0xFF,0x7F,0x94,0x45,
1462 0x1E,0x06,0x1E,0x16,0x3C,0x61 }
1465 static const struct { EC_CURVE_DATA h; unsigned char data[20+36*6]; }
1466 _EC_NIST_CHAR2_283B = {
1467 { NID_X9_62_characteristic_two_field,20,36,2 },
1470 0x77,0xE2,0xB0,0x73,0x70,0xEB,0x0F,0x83,0x2A,0x6D,
1471 0xD5,0xB6,0x2D,0xFC,0x88,0xCD,0x06,0xBB,0x84,0xBE,
1474 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1475 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1476 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1477 0x00,0x00,0x00,0x00,0x10,0xA1,
1480 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1481 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1482 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1483 0x00,0x00,0x00,0x00,0x00,0x01,
1486 0x02,0x7B,0x68,0x0A,0xC8,0xB8,0x59,0x6D,0xA5,0xA4,
1487 0xAF,0x8A,0x19,0xA0,0x30,0x3F,0xCA,0x97,0xFD,0x76,
1488 0x45,0x30,0x9F,0xA2,0xA5,0x81,0x48,0x5A,0xF6,0x26,
1489 0x3E,0x31,0x3B,0x79,0xA2,0xF5,
1492 0x05,0xF9,0x39,0x25,0x8D,0xB7,0xDD,0x90,0xE1,0x93,
1493 0x4F,0x8C,0x70,0xB0,0xDF,0xEC,0x2E,0xED,0x25,0xB8,
1494 0x55,0x7E,0xAC,0x9C,0x80,0xE2,0xE1,0x98,0xF8,0xCD,
1495 0xBE,0xCD,0x86,0xB1,0x20,0x53,
1498 0x03,0x67,0x68,0x54,0xFE,0x24,0x14,0x1C,0xB9,0x8F,
1499 0xE6,0xD4,0xB2,0x0D,0x02,0xB4,0x51,0x6F,0xF7,0x02,
1500 0x35,0x0E,0xDD,0xB0,0x82,0x67,0x79,0xC8,0x13,0xF0,
1501 0xDF,0x45,0xBE,0x81,0x12,0xF4,
1504 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
1505 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0x90,
1506 0x39,0x96,0x60,0xFC,0x93,0x8A,0x90,0x16,0x5B,0x04,
1507 0x2A,0x7C,0xEF,0xAD,0xB3,0x07 }
1510 static const struct { EC_CURVE_DATA h; unsigned char data[0+52*6]; }
1511 _EC_NIST_CHAR2_409K = {
1512 { NID_X9_62_characteristic_two_field,0,52,4 },
1516 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1517 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1518 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1519 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1520 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1524 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1525 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1526 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1527 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1528 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1532 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1533 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1534 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1535 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1536 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1540 0x00,0x60,0xF0,0x5F,0x65,0x8F,0x49,0xC1,0xAD,0x3A,
1541 0xB1,0x89,0x0F,0x71,0x84,0x21,0x0E,0xFD,0x09,0x87,
1542 0xE3,0x07,0xC8,0x4C,0x27,0xAC,0xCF,0xB8,0xF9,0xF6,
1543 0x7C,0xC2,0xC4,0x60,0x18,0x9E,0xB5,0xAA,0xAA,0x62,
1544 0xEE,0x22,0x2E,0xB1,0xB3,0x55,0x40,0xCF,0xE9,0x02,
1548 0x01,0xE3,0x69,0x05,0x0B,0x7C,0x4E,0x42,0xAC,0xBA,
1549 0x1D,0xAC,0xBF,0x04,0x29,0x9C,0x34,0x60,0x78,0x2F,
1550 0x91,0x8E,0xA4,0x27,0xE6,0x32,0x51,0x65,0xE9,0xEA,
1551 0x10,0xE3,0xDA,0x5F,0x6C,0x42,0xE9,0xC5,0x52,0x15,
1552 0xAA,0x9C,0xA2,0x7A,0x58,0x63,0xEC,0x48,0xD8,0xE0,
1556 0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
1557 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
1558 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x5F,0x83,0xB2,
1559 0xD4,0xEA,0x20,0x40,0x0E,0xC4,0x55,0x7D,0x5E,0xD3,
1560 0xE3,0xE7,0xCA,0x5B,0x4B,0x5C,0x83,0xB8,0xE0,0x1E,
1564 static const struct { EC_CURVE_DATA h; unsigned char data[20+52*6]; }
1565 _EC_NIST_CHAR2_409B = {
1566 { NID_X9_62_characteristic_two_field,20,52,2 },
1569 0x40,0x99,0xB5,0xA4,0x57,0xF9,0xD6,0x9F,0x79,0x21,
1570 0x3D,0x09,0x4C,0x4B,0xCD,0x4D,0x42,0x62,0x21,0x0B,
1573 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1574 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1575 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1576 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1577 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1581 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1582 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1583 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1584 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1585 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1589 0x00,0x21,0xA5,0xC2,0xC8,0xEE,0x9F,0xEB,0x5C,0x4B,
1590 0x9A,0x75,0x3B,0x7B,0x47,0x6B,0x7F,0xD6,0x42,0x2E,
1591 0xF1,0xF3,0xDD,0x67,0x47,0x61,0xFA,0x99,0xD6,0xAC,
1592 0x27,0xC8,0xA9,0xA1,0x97,0xB2,0x72,0x82,0x2F,0x6C,
1593 0xD5,0x7A,0x55,0xAA,0x4F,0x50,0xAE,0x31,0x7B,0x13,
1597 0x01,0x5D,0x48,0x60,0xD0,0x88,0xDD,0xB3,0x49,0x6B,
1598 0x0C,0x60,0x64,0x75,0x62,0x60,0x44,0x1C,0xDE,0x4A,
1599 0xF1,0x77,0x1D,0x4D,0xB0,0x1F,0xFE,0x5B,0x34,0xE5,
1600 0x97,0x03,0xDC,0x25,0x5A,0x86,0x8A,0x11,0x80,0x51,
1601 0x56,0x03,0xAE,0xAB,0x60,0x79,0x4E,0x54,0xBB,0x79,
1605 0x00,0x61,0xB1,0xCF,0xAB,0x6B,0xE5,0xF3,0x2B,0xBF,
1606 0xA7,0x83,0x24,0xED,0x10,0x6A,0x76,0x36,0xB9,0xC5,
1607 0xA7,0xBD,0x19,0x8D,0x01,0x58,0xAA,0x4F,0x54,0x88,
1608 0xD0,0x8F,0x38,0x51,0x4F,0x1F,0xDF,0x4B,0x4F,0x40,
1609 0xD2,0x18,0x1B,0x36,0x81,0xC3,0x64,0xBA,0x02,0x73,
1613 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1614 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1615 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0xAA,0xD6,
1616 0xA6,0x12,0xF3,0x33,0x07,0xBE,0x5F,0xA4,0x7C,0x3C,
1617 0x9E,0x05,0x2F,0x83,0x81,0x64,0xCD,0x37,0xD9,0xA2,
1621 static const struct { EC_CURVE_DATA h; unsigned char data[0+72*6]; }
1622 _EC_NIST_CHAR2_571K = {
1623 { NID_X9_62_characteristic_two_field,0,72,4 },
1627 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1628 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1629 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1630 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1631 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1632 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1633 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1637 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1638 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1639 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1640 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1641 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1642 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1643 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1647 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1648 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1649 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1650 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1651 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1652 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1653 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1657 0x02,0x6E,0xB7,0xA8,0x59,0x92,0x3F,0xBC,0x82,0x18,
1658 0x96,0x31,0xF8,0x10,0x3F,0xE4,0xAC,0x9C,0xA2,0x97,
1659 0x00,0x12,0xD5,0xD4,0x60,0x24,0x80,0x48,0x01,0x84,
1660 0x1C,0xA4,0x43,0x70,0x95,0x84,0x93,0xB2,0x05,0xE6,
1661 0x47,0xDA,0x30,0x4D,0xB4,0xCE,0xB0,0x8C,0xBB,0xD1,
1662 0xBA,0x39,0x49,0x47,0x76,0xFB,0x98,0x8B,0x47,0x17,
1663 0x4D,0xCA,0x88,0xC7,0xE2,0x94,0x52,0x83,0xA0,0x1C,
1667 0x03,0x49,0xDC,0x80,0x7F,0x4F,0xBF,0x37,0x4F,0x4A,
1668 0xEA,0xDE,0x3B,0xCA,0x95,0x31,0x4D,0xD5,0x8C,0xEC,
1669 0x9F,0x30,0x7A,0x54,0xFF,0xC6,0x1E,0xFC,0x00,0x6D,
1670 0x8A,0x2C,0x9D,0x49,0x79,0xC0,0xAC,0x44,0xAE,0xA7,
1671 0x4F,0xBE,0xBB,0xB9,0xF7,0x72,0xAE,0xDC,0xB6,0x20,
1672 0xB0,0x1A,0x7B,0xA7,0xAF,0x1B,0x32,0x04,0x30,0xC8,
1673 0x59,0x19,0x84,0xF6,0x01,0xCD,0x4C,0x14,0x3E,0xF1,
1677 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1678 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1679 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1680 0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x18,0x50,0xE1,
1681 0xF1,0x9A,0x63,0xE4,0xB3,0x91,0xA8,0xDB,0x91,0x7F,
1682 0x41,0x38,0xB6,0x30,0xD8,0x4B,0xE5,0xD6,0x39,0x38,
1683 0x1E,0x91,0xDE,0xB4,0x5C,0xFE,0x77,0x8F,0x63,0x7C,
1687 static const struct { EC_CURVE_DATA h; unsigned char data[20+72*6]; }
1688 _EC_NIST_CHAR2_571B = {
1689 { NID_X9_62_characteristic_two_field,20,72,2 },
1692 0x2A,0xA0,0x58,0xF7,0x3A,0x0E,0x33,0xAB,0x48,0x6B,
1693 0x0F,0x61,0x04,0x10,0xC5,0x3A,0x7F,0x13,0x23,0x10,
1696 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1697 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1698 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1699 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1700 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1701 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1702 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1706 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1707 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1708 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1709 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1710 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1711 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1712 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1716 0x02,0xF4,0x0E,0x7E,0x22,0x21,0xF2,0x95,0xDE,0x29,
1717 0x71,0x17,0xB7,0xF3,0xD6,0x2F,0x5C,0x6A,0x97,0xFF,
1718 0xCB,0x8C,0xEF,0xF1,0xCD,0x6B,0xA8,0xCE,0x4A,0x9A,
1719 0x18,0xAD,0x84,0xFF,0xAB,0xBD,0x8E,0xFA,0x59,0x33,
1720 0x2B,0xE7,0xAD,0x67,0x56,0xA6,0x6E,0x29,0x4A,0xFD,
1721 0x18,0x5A,0x78,0xFF,0x12,0xAA,0x52,0x0E,0x4D,0xE7,
1722 0x39,0xBA,0xCA,0x0C,0x7F,0xFE,0xFF,0x7F,0x29,0x55,
1726 0x03,0x03,0x00,0x1D,0x34,0xB8,0x56,0x29,0x6C,0x16,
1727 0xC0,0xD4,0x0D,0x3C,0xD7,0x75,0x0A,0x93,0xD1,0xD2,
1728 0x95,0x5F,0xA8,0x0A,0xA5,0xF4,0x0F,0xC8,0xDB,0x7B,
1729 0x2A,0xBD,0xBD,0xE5,0x39,0x50,0xF4,0xC0,0xD2,0x93,
1730 0xCD,0xD7,0x11,0xA3,0x5B,0x67,0xFB,0x14,0x99,0xAE,
1731 0x60,0x03,0x86,0x14,0xF1,0x39,0x4A,0xBF,0xA3,0xB4,
1732 0xC8,0x50,0xD9,0x27,0xE1,0xE7,0x76,0x9C,0x8E,0xEC,
1736 0x03,0x7B,0xF2,0x73,0x42,0xDA,0x63,0x9B,0x6D,0xCC,
1737 0xFF,0xFE,0xB7,0x3D,0x69,0xD7,0x8C,0x6C,0x27,0xA6,
1738 0x00,0x9C,0xBB,0xCA,0x19,0x80,0xF8,0x53,0x39,0x21,
1739 0xE8,0xA6,0x84,0x42,0x3E,0x43,0xBA,0xB0,0x8A,0x57,
1740 0x62,0x91,0xAF,0x8F,0x46,0x1B,0xB2,0xA8,0xB3,0x53,
1741 0x1D,0x2F,0x04,0x85,0xC1,0x9B,0x16,0xE2,0xF1,0x51,
1742 0x6E,0x23,0xDD,0x3C,0x1A,0x48,0x27,0xAF,0x1B,0x8A,
1746 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
1747 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
1748 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
1749 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE6,0x61,0xCE,0x18,
1750 0xFF,0x55,0x98,0x73,0x08,0x05,0x9B,0x18,0x68,0x23,
1751 0x85,0x1E,0xC7,0xDD,0x9C,0xA1,0x16,0x1D,0xE9,0x3D,
1752 0x51,0x74,0xD6,0x6E,0x83,0x82,0xE9,0xBB,0x2F,0xE8,
1756 static const struct { EC_CURVE_DATA h; unsigned char data[20+21*6]; }
1757 _EC_X9_62_CHAR2_163V1 = {
1758 { NID_X9_62_characteristic_two_field,20,21,2 },
1761 0xD2,0xC0,0xFB,0x15,0x76,0x08,0x60,0xDE,0xF1,0xEE,
1762 0xF4,0xD6,0x96,0xE6,0x76,0x87,0x56,0x15,0x17,0x54,
1765 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1766 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
1770 0x07,0x25,0x46,0xB5,0x43,0x52,0x34,0xA4,0x22,0xE0,
1771 0x78,0x96,0x75,0xF4,0x32,0xC8,0x94,0x35,0xDE,0x52,
1775 0x00,0xC9,0x51,0x7D,0x06,0xD5,0x24,0x0D,0x3C,0xFF,
1776 0x38,0xC7,0x4B,0x20,0xB6,0xCD,0x4D,0x6F,0x9D,0xD4,
1780 0x07,0xAF,0x69,0x98,0x95,0x46,0x10,0x3D,0x79,0x32,
1781 0x9F,0xCC,0x3D,0x74,0x88,0x0F,0x33,0xBB,0xE8,0x03,
1785 0x01,0xEC,0x23,0x21,0x1B,0x59,0x66,0xAD,0xEA,0x1D,
1786 0x3F,0x87,0xF7,0xEA,0x58,0x48,0xAE,0xF0,0xB7,0xCA,
1790 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1791 0x01,0xE6,0x0F,0xC8,0x82,0x1C,0xC7,0x4D,0xAE,0xAF,
1795 static const struct { EC_CURVE_DATA h; unsigned char data[20+21*6]; }
1796 _EC_X9_62_CHAR2_163V2 = {
1797 { NID_X9_62_characteristic_two_field,20,21,2 },
1800 0x53,0x81,0x4C,0x05,0x0D,0x44,0xD6,0x96,0xE6,0x76,
1801 0x87,0x56,0x15,0x17,0x58,0x0C,0xA4,0xE2,0x9F,0xFD,
1804 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1805 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
1809 0x01,0x08,0xB3,0x9E,0x77,0xC4,0xB1,0x08,0xBE,0xD9,
1810 0x81,0xED,0x0E,0x89,0x0E,0x11,0x7C,0x51,0x1C,0xF0,
1814 0x06,0x67,0xAC,0xEB,0x38,0xAF,0x4E,0x48,0x8C,0x40,
1815 0x74,0x33,0xFF,0xAE,0x4F,0x1C,0x81,0x16,0x38,0xDF,
1819 0x00,0x24,0x26,0x6E,0x4E,0xB5,0x10,0x6D,0x0A,0x96,
1820 0x4D,0x92,0xC4,0x86,0x0E,0x26,0x71,0xDB,0x9B,0x6C,
1824 0x07,0x9F,0x68,0x4D,0xDF,0x66,0x84,0xC5,0xCD,0x25,
1825 0x8B,0x38,0x90,0x02,0x1B,0x23,0x86,0xDF,0xD1,0x9F,
1829 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
1830 0xFD,0xF6,0x4D,0xE1,0x15,0x1A,0xDB,0xB7,0x8F,0x10,
1834 static const struct { EC_CURVE_DATA h; unsigned char data[20+21*6]; }
1835 _EC_X9_62_CHAR2_163V3 = {
1836 { NID_X9_62_characteristic_two_field,20,21,2 },
1839 0x50,0xCB,0xF1,0xD9,0x5C,0xA9,0x4D,0x69,0x6E,0x67,
1840 0x68,0x75,0x61,0x51,0x75,0xF1,0x6A,0x36,0xA3,0xB8,
1843 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1844 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
1848 0x07,0xA5,0x26,0xC6,0x3D,0x3E,0x25,0xA2,0x56,0xA0,
1849 0x07,0x69,0x9F,0x54,0x47,0xE3,0x2A,0xE4,0x56,0xB5,
1853 0x03,0xF7,0x06,0x17,0x98,0xEB,0x99,0xE2,0x38,0xFD,
1854 0x6F,0x1B,0xF9,0x5B,0x48,0xFE,0xEB,0x48,0x54,0x25,
1858 0x02,0xF9,0xF8,0x7B,0x7C,0x57,0x4D,0x0B,0xDE,0xCF,
1859 0x8A,0x22,0xE6,0x52,0x47,0x75,0xF9,0x8C,0xDE,0xBD,
1863 0x05,0xB9,0x35,0x59,0x0C,0x15,0x5E,0x17,0xEA,0x48,
1864 0xEB,0x3F,0xF3,0x71,0x8B,0x89,0x3D,0xF5,0x9A,0x05,
1868 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
1869 0xFE,0x1A,0xEE,0x14,0x0F,0x11,0x0A,0xFF,0x96,0x13,
1873 static const struct { EC_CURVE_DATA h; unsigned char data[0+23*6]; }
1874 _EC_X9_62_CHAR2_176V1 = {
1875 { NID_X9_62_characteristic_two_field,0,23,0xFF6E },
1879 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1880 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
1884 0x00,0xE4,0xE6,0xDB,0x29,0x95,0x06,0x5C,0x40,0x7D,
1885 0x9D,0x39,0xB8,0xD0,0x96,0x7B,0x96,0x70,0x4B,0xA8,
1889 0x00,0x5D,0xDA,0x47,0x0A,0xBE,0x64,0x14,0xDE,0x8E,
1890 0xC1,0x33,0xAE,0x28,0xE9,0xBB,0xD7,0xFC,0xEC,0x0A,
1894 0x00,0x8D,0x16,0xC2,0x86,0x67,0x98,0xB6,0x00,0xF9,
1895 0xF0,0x8B,0xB4,0xA8,0xE8,0x60,0xF3,0x29,0x8C,0xE0,
1899 0x00,0x6F,0xA4,0x53,0x9C,0x2D,0xAD,0xDD,0xD6,0xBA,
1900 0xB5,0x16,0x7D,0x61,0xB4,0x36,0xE1,0xD9,0x2B,0xB1,
1904 0x00,0x00,0x01,0x00,0x92,0x53,0x73,0x97,0xEC,0xA4,
1905 0xF6,0x14,0x57,0x99,0xD6,0x2B,0x0A,0x19,0xCE,0x06,
1909 static const struct { EC_CURVE_DATA h; unsigned char data[20+24*6]; }
1910 _EC_X9_62_CHAR2_191V1 = {
1911 { NID_X9_62_characteristic_two_field,20,24,2 },
1914 0x4E,0x13,0xCA,0x54,0x27,0x44,0xD6,0x96,0xE6,0x76,
1915 0x87,0x56,0x15,0x17,0x55,0x2F,0x27,0x9A,0x8C,0x84,
1918 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1919 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1920 0x00,0x00,0x02,0x01,
1923 0x28,0x66,0x53,0x7B,0x67,0x67,0x52,0x63,0x6A,0x68,
1924 0xF5,0x65,0x54,0xE1,0x26,0x40,0x27,0x6B,0x64,0x9E,
1925 0xF7,0x52,0x62,0x67,
1928 0x2E,0x45,0xEF,0x57,0x1F,0x00,0x78,0x6F,0x67,0xB0,
1929 0x08,0x1B,0x94,0x95,0xA3,0xD9,0x54,0x62,0xF5,0xDE,
1930 0x0A,0xA1,0x85,0xEC,
1933 0x36,0xB3,0xDA,0xF8,0xA2,0x32,0x06,0xF9,0xC4,0xF2,
1934 0x99,0xD7,0xB2,0x1A,0x9C,0x36,0x91,0x37,0xF2,0xC8,
1935 0x4A,0xE1,0xAA,0x0D,
1938 0x76,0x5B,0xE7,0x34,0x33,0xB3,0xF9,0x5E,0x33,0x29,
1939 0x32,0xE7,0x0E,0xA2,0x45,0xCA,0x24,0x18,0xEA,0x0E,
1940 0xF9,0x80,0x18,0xFB,
1943 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1944 0x00,0x00,0x04,0xA2,0x0E,0x90,0xC3,0x90,0x67,0xC8,
1945 0x93,0xBB,0xB9,0xA5 }
1948 static const struct { EC_CURVE_DATA h; unsigned char data[20+24*6]; }
1949 _EC_X9_62_CHAR2_191V2 = {
1950 { NID_X9_62_characteristic_two_field,20,24,4 },
1953 0x08,0x71,0xEF,0x2F,0xEF,0x24,0xD6,0x96,0xE6,0x76,
1954 0x87,0x56,0x15,0x17,0x58,0xBE,0xE0,0xD9,0x5C,0x15,
1957 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1958 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1959 0x00,0x00,0x02,0x01,
1962 0x40,0x10,0x28,0x77,0x4D,0x77,0x77,0xC7,0xB7,0x66,
1963 0x6D,0x13,0x66,0xEA,0x43,0x20,0x71,0x27,0x4F,0x89,
1964 0xFF,0x01,0xE7,0x18,
1967 0x06,0x20,0x04,0x8D,0x28,0xBC,0xBD,0x03,0xB6,0x24,
1968 0x9C,0x99,0x18,0x2B,0x7C,0x8C,0xD1,0x97,0x00,0xC3,
1969 0x62,0xC4,0x6A,0x01,
1972 0x38,0x09,0xB2,0xB7,0xCC,0x1B,0x28,0xCC,0x5A,0x87,
1973 0x92,0x6A,0xAD,0x83,0xFD,0x28,0x78,0x9E,0x81,0xE2,
1974 0xC9,0xE3,0xBF,0x10,
1977 0x17,0x43,0x43,0x86,0x62,0x6D,0x14,0xF3,0xDB,0xF0,
1978 0x17,0x60,0xD9,0x21,0x3A,0x3E,0x1C,0xF3,0x7A,0xEC,
1979 0x43,0x7D,0x66,0x8A,
1982 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1983 0x00,0x00,0x50,0x50,0x8C,0xB8,0x9F,0x65,0x28,0x24,
1984 0xE0,0x6B,0x81,0x73 }
1987 static const struct { EC_CURVE_DATA h; unsigned char data[20+24*6]; }
1988 _EC_X9_62_CHAR2_191V3 = {
1989 { NID_X9_62_characteristic_two_field,20,24,6 },
1992 0xE0,0x53,0x51,0x2D,0xC6,0x84,0xD6,0x96,0xE6,0x76,
1993 0x87,0x56,0x15,0x17,0x50,0x67,0xAE,0x78,0x6D,0x1F,
1996 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1997 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1998 0x00,0x00,0x02,0x01,
2001 0x6C,0x01,0x07,0x47,0x56,0x09,0x91,0x22,0x22,0x10,
2002 0x56,0x91,0x1C,0x77,0xD7,0x7E,0x77,0xA7,0x77,0xE7,
2003 0xE7,0xE7,0x7F,0xCB,
2006 0x71,0xFE,0x1A,0xF9,0x26,0xCF,0x84,0x79,0x89,0xEF,
2007 0xEF,0x8D,0xB4,0x59,0xF6,0x63,0x94,0xD9,0x0F,0x32,
2008 0xAD,0x3F,0x15,0xE8,
2011 0x37,0x5D,0x4C,0xE2,0x4F,0xDE,0x43,0x44,0x89,0xDE,
2012 0x87,0x46,0xE7,0x17,0x86,0x01,0x50,0x09,0xE6,0x6E,
2013 0x38,0xA9,0x26,0xDD,
2016 0x54,0x5A,0x39,0x17,0x61,0x96,0x57,0x5D,0x98,0x59,
2017 0x99,0x36,0x6E,0x6A,0xD3,0x4C,0xE0,0xA7,0x7C,0xD7,
2018 0x12,0x7B,0x06,0xBE,
2021 0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
2022 0x55,0x55,0x61,0x0C,0x0B,0x19,0x68,0x12,0xBF,0xB6,
2023 0x28,0x8A,0x3E,0xA3 }
2026 static const struct { EC_CURVE_DATA h; unsigned char data[0+27*6]; }
2027 _EC_X9_62_CHAR2_208W1 = {
2028 { NID_X9_62_characteristic_two_field,0,27,0xFE48 },
2032 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2033 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
2034 0x00,0x00,0x00,0x00,0x00,0x00,0x07,
2037 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2038 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2039 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2042 0x00,0xC8,0x61,0x9E,0xD4,0x5A,0x62,0xE6,0x21,0x2E,
2043 0x11,0x60,0x34,0x9E,0x2B,0xFA,0x84,0x44,0x39,0xFA,
2044 0xFC,0x2A,0x3F,0xD1,0x63,0x8F,0x9E,
2047 0x00,0x89,0xFD,0xFB,0xE4,0xAB,0xE1,0x93,0xDF,0x95,
2048 0x59,0xEC,0xF0,0x7A,0xC0,0xCE,0x78,0x55,0x4E,0x27,
2049 0x84,0xEB,0x8C,0x1E,0xD1,0xA5,0x7A,
2052 0x00,0x0F,0x55,0xB5,0x1A,0x06,0xE7,0x8E,0x9A,0xC3,
2053 0x8A,0x03,0x5F,0xF5,0x20,0xD8,0xB0,0x17,0x81,0xBE,
2054 0xB1,0xA6,0xBB,0x08,0x61,0x7D,0xE3,
2057 0x00,0x00,0x01,0x01,0xBA,0xF9,0x5C,0x97,0x23,0xC5,
2058 0x7B,0x6C,0x21,0xDA,0x2E,0xFF,0x2D,0x5E,0xD5,0x88,
2059 0xBD,0xD5,0x71,0x7E,0x21,0x2F,0x9D }
2062 static const struct { EC_CURVE_DATA h; unsigned char data[20+30*6]; }
2063 _EC_X9_62_CHAR2_239V1 = {
2064 { NID_X9_62_characteristic_two_field,20,30,4 },
2067 0xD3,0x4B,0x9A,0x4D,0x69,0x6E,0x67,0x68,0x75,0x61,
2068 0x51,0x75,0xCA,0x71,0xB9,0x20,0xBF,0xEF,0xB0,0x5D,
2071 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2072 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2073 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x01,
2076 0x32,0x01,0x08,0x57,0x07,0x7C,0x54,0x31,0x12,0x3A,
2077 0x46,0xB8,0x08,0x90,0x67,0x56,0xF5,0x43,0x42,0x3E,
2078 0x8D,0x27,0x87,0x75,0x78,0x12,0x57,0x78,0xAC,0x76,
2081 0x79,0x04,0x08,0xF2,0xEE,0xDA,0xF3,0x92,0xB0,0x12,
2082 0xED,0xEF,0xB3,0x39,0x2F,0x30,0xF4,0x32,0x7C,0x0C,
2083 0xA3,0xF3,0x1F,0xC3,0x83,0xC4,0x22,0xAA,0x8C,0x16,
2086 0x57,0x92,0x70,0x98,0xFA,0x93,0x2E,0x7C,0x0A,0x96,
2087 0xD3,0xFD,0x5B,0x70,0x6E,0xF7,0xE5,0xF5,0xC1,0x56,
2088 0xE1,0x6B,0x7E,0x7C,0x86,0x03,0x85,0x52,0xE9,0x1D,
2091 0x61,0xD8,0xEE,0x50,0x77,0xC3,0x3F,0xEC,0xF6,0xF1,
2092 0xA1,0x6B,0x26,0x8D,0xE4,0x69,0xC3,0xC7,0x74,0x4E,
2093 0xA9,0xA9,0x71,0x64,0x9F,0xC7,0xA9,0x61,0x63,0x05,
2096 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2097 0x00,0x00,0x00,0x00,0x00,0x0F,0x4D,0x42,0xFF,0xE1,
2098 0x49,0x2A,0x49,0x93,0xF1,0xCA,0xD6,0x66,0xE4,0x47 }
2101 static const struct { EC_CURVE_DATA h; unsigned char data[20+30*6]; }
2102 _EC_X9_62_CHAR2_239V2 = {
2103 { NID_X9_62_characteristic_two_field,20,30,6 },
2106 0x2A,0xA6,0x98,0x2F,0xDF,0xA4,0xD6,0x96,0xE6,0x76,
2107 0x87,0x56,0x15,0x17,0x5D,0x26,0x67,0x27,0x27,0x7D,
2110 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2111 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2112 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x01,
2115 0x42,0x30,0x01,0x77,0x57,0xA7,0x67,0xFA,0xE4,0x23,
2116 0x98,0x56,0x9B,0x74,0x63,0x25,0xD4,0x53,0x13,0xAF,
2117 0x07,0x66,0x26,0x64,0x79,0xB7,0x56,0x54,0xE6,0x5F,
2120 0x50,0x37,0xEA,0x65,0x41,0x96,0xCF,0xF0,0xCD,0x82,
2121 0xB2,0xC1,0x4A,0x2F,0xCF,0x2E,0x3F,0xF8,0x77,0x52,
2122 0x85,0xB5,0x45,0x72,0x2F,0x03,0xEA,0xCD,0xB7,0x4B,
2125 0x28,0xF9,0xD0,0x4E,0x90,0x00,0x69,0xC8,0xDC,0x47,
2126 0xA0,0x85,0x34,0xFE,0x76,0xD2,0xB9,0x00,0xB7,0xD7,
2127 0xEF,0x31,0xF5,0x70,0x9F,0x20,0x0C,0x4C,0xA2,0x05,
2130 0x56,0x67,0x33,0x4C,0x45,0xAF,0xF3,0xB5,0xA0,0x3B,
2131 0xAD,0x9D,0xD7,0x5E,0x2C,0x71,0xA9,0x93,0x62,0x56,
2132 0x7D,0x54,0x53,0xF7,0xFA,0x6E,0x22,0x7E,0xC8,0x33,
2135 0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
2136 0x55,0x55,0x55,0x55,0x55,0x3C,0x6F,0x28,0x85,0x25,
2137 0x9C,0x31,0xE3,0xFC,0xDF,0x15,0x46,0x24,0x52,0x2D }
2140 static const struct { EC_CURVE_DATA h; unsigned char data[20+30*6]; }
2141 _EC_X9_62_CHAR2_239V3 = {
2142 { NID_X9_62_characteristic_two_field,20,30,0xA },
2145 0x9E,0x07,0x6F,0x4D,0x69,0x6E,0x67,0x68,0x75,0x61,
2146 0x51,0x75,0xE1,0x1E,0x9F,0xDD,0x77,0xF9,0x20,0x41,
2149 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2150 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2151 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x01,
2154 0x01,0x23,0x87,0x74,0x66,0x6A,0x67,0x76,0x6D,0x66,
2155 0x76,0xF7,0x78,0xE6,0x76,0xB6,0x69,0x99,0x17,0x66,
2156 0x66,0xE6,0x87,0x66,0x6D,0x87,0x66,0xC6,0x6A,0x9F,
2159 0x6A,0x94,0x19,0x77,0xBA,0x9F,0x6A,0x43,0x51,0x99,
2160 0xAC,0xFC,0x51,0x06,0x7E,0xD5,0x87,0xF5,0x19,0xC5,
2161 0xEC,0xB5,0x41,0xB8,0xE4,0x41,0x11,0xDE,0x1D,0x40,
2164 0x70,0xF6,0xE9,0xD0,0x4D,0x28,0x9C,0x4E,0x89,0x91,
2165 0x3C,0xE3,0x53,0x0B,0xFD,0xE9,0x03,0x97,0x7D,0x42,
2166 0xB1,0x46,0xD5,0x39,0xBF,0x1B,0xDE,0x4E,0x9C,0x92,
2169 0x2E,0x5A,0x0E,0xAF,0x6E,0x5E,0x13,0x05,0xB9,0x00,
2170 0x4D,0xCE,0x5C,0x0E,0xD7,0xFE,0x59,0xA3,0x56,0x08,
2171 0xF3,0x38,0x37,0xC8,0x16,0xD8,0x0B,0x79,0xF4,0x61,
2174 0x0C,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,
2175 0xCC,0xCC,0xCC,0xCC,0xCC,0xAC,0x49,0x12,0xD2,0xD9,
2176 0xDF,0x90,0x3E,0xF9,0x88,0x8B,0x8A,0x0E,0x4C,0xFF }
2179 static const struct { EC_CURVE_DATA h; unsigned char data[0+35*6]; }
2180 _EC_X9_62_CHAR2_272W1 = {
2181 { NID_X9_62_characteristic_two_field,0,35,0xFF06 },
2185 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2186 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2187 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
2188 0x00,0x00,0x00,0x00,0x0B,
2191 0x00,0x91,0xA0,0x91,0xF0,0x3B,0x5F,0xBA,0x4A,0xB2,
2192 0xCC,0xF4,0x9C,0x4E,0xDD,0x22,0x0F,0xB0,0x28,0x71,
2193 0x2D,0x42,0xBE,0x75,0x2B,0x2C,0x40,0x09,0x4D,0xBA,
2194 0xCD,0xB5,0x86,0xFB,0x20,
2197 0x00,0x71,0x67,0xEF,0xC9,0x2B,0xB2,0xE3,0xCE,0x7C,
2198 0x8A,0xAA,0xFF,0x34,0xE1,0x2A,0x9C,0x55,0x70,0x03,
2199 0xD7,0xC7,0x3A,0x6F,0xAF,0x00,0x3F,0x99,0xF6,0xCC,
2200 0x84,0x82,0xE5,0x40,0xF7,
2203 0x00,0x61,0x08,0xBA,0xBB,0x2C,0xEE,0xBC,0xF7,0x87,
2204 0x05,0x8A,0x05,0x6C,0xBE,0x0C,0xFE,0x62,0x2D,0x77,
2205 0x23,0xA2,0x89,0xE0,0x8A,0x07,0xAE,0x13,0xEF,0x0D,
2206 0x10,0xD1,0x71,0xDD,0x8D,
2209 0x00,0x10,0xC7,0x69,0x57,0x16,0x85,0x1E,0xEF,0x6B,
2210 0xA7,0xF6,0x87,0x2E,0x61,0x42,0xFB,0xD2,0x41,0xB8,
2211 0x30,0xFF,0x5E,0xFC,0xAC,0xEC,0xCA,0xB0,0x5E,0x02,
2212 0x00,0x5D,0xDE,0x9D,0x23,
2215 0x00,0x00,0x01,0x00,0xFA,0xF5,0x13,0x54,0xE0,0xE3,
2216 0x9E,0x48,0x92,0xDF,0x6E,0x31,0x9C,0x72,0xC8,0x16,
2217 0x16,0x03,0xFA,0x45,0xAA,0x7B,0x99,0x8A,0x16,0x7B,
2218 0x8F,0x1E,0x62,0x95,0x21 }
2221 static const struct { EC_CURVE_DATA h; unsigned char data[0+39*6]; }
2222 _EC_X9_62_CHAR2_304W1 = {
2223 { NID_X9_62_characteristic_two_field,0,39,0xFE2E },
2227 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2228 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2229 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2230 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x07,
2232 0x00,0xFD,0x0D,0x69,0x31,0x49,0xA1,0x18,0xF6,0x51,
2233 0xE6,0xDC,0xE6,0x80,0x20,0x85,0x37,0x7E,0x5F,0x88,
2234 0x2D,0x1B,0x51,0x0B,0x44,0x16,0x00,0x74,0xC1,0x28,
2235 0x80,0x78,0x36,0x5A,0x03,0x96,0xC8,0xE6,0x81,
2237 0x00,0xBD,0xDB,0x97,0xE5,0x55,0xA5,0x0A,0x90,0x8E,
2238 0x43,0xB0,0x1C,0x79,0x8E,0xA5,0xDA,0xA6,0x78,0x8F,
2239 0x1E,0xA2,0x79,0x4E,0xFC,0xF5,0x71,0x66,0xB8,0xC1,
2240 0x40,0x39,0x60,0x1E,0x55,0x82,0x73,0x40,0xBE,
2242 0x00,0x19,0x7B,0x07,0x84,0x5E,0x9B,0xE2,0xD9,0x6A,
2243 0xDB,0x0F,0x5F,0x3C,0x7F,0x2C,0xFF,0xBD,0x7A,0x3E,
2244 0xB8,0xB6,0xFE,0xC3,0x5C,0x7F,0xD6,0x7F,0x26,0xDD,
2245 0xF6,0x28,0x5A,0x64,0x4F,0x74,0x0A,0x26,0x14,
2247 0x00,0xE1,0x9F,0xBE,0xB7,0x6E,0x0D,0xA1,0x71,0x51,
2248 0x7E,0xCF,0x40,0x1B,0x50,0x28,0x9B,0xF0,0x14,0x10,
2249 0x32,0x88,0x52,0x7A,0x9B,0x41,0x6A,0x10,0x5E,0x80,
2250 0x26,0x0B,0x54,0x9F,0xDC,0x1B,0x92,0xC0,0x3B,
2252 0x00,0x00,0x01,0x01,0xD5,0x56,0x57,0x2A,0xAB,0xAC,
2253 0x80,0x01,0x01,0xD5,0x56,0x57,0x2A,0xAB,0xAC,0x80,
2254 0x01,0x02,0x2D,0x5C,0x91,0xDD,0x17,0x3F,0x8F,0xB5,
2255 0x61,0xDA,0x68,0x99,0x16,0x44,0x43,0x05,0x1D }
2258 static const struct { EC_CURVE_DATA h; unsigned char data[20+45*6]; }
2259 _EC_X9_62_CHAR2_359V1 = {
2260 { NID_X9_62_characteristic_two_field,20,45,0x4C },
2263 0x2B,0x35,0x49,0x20,0xB7,0x24,0xD6,0x96,0xE6,0x76,
2264 0x87,0x56,0x15,0x17,0x58,0x5B,0xA1,0x33,0x2D,0xC6,
2267 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2268 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2269 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2270 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
2271 0x00,0x00,0x00,0x00,0x01,
2274 0x56,0x67,0x67,0x6A,0x65,0x4B,0x20,0x75,0x4F,0x35,
2275 0x6E,0xA9,0x20,0x17,0xD9,0x46,0x56,0x7C,0x46,0x67,
2276 0x55,0x56,0xF1,0x95,0x56,0xA0,0x46,0x16,0xB5,0x67,
2277 0xD2,0x23,0xA5,0xE0,0x56,0x56,0xFB,0x54,0x90,0x16,
2278 0xA9,0x66,0x56,0xA5,0x57,
2281 0x24,0x72,0xE2,0xD0,0x19,0x7C,0x49,0x36,0x3F,0x1F,
2282 0xE7,0xF5,0xB6,0xDB,0x07,0x5D,0x52,0xB6,0x94,0x7D,
2283 0x13,0x5D,0x8C,0xA4,0x45,0x80,0x5D,0x39,0xBC,0x34,
2284 0x56,0x26,0x08,0x96,0x87,0x74,0x2B,0x63,0x29,0xE7,
2285 0x06,0x80,0x23,0x19,0x88,
2288 0x3C,0x25,0x8E,0xF3,0x04,0x77,0x67,0xE7,0xED,0xE0,
2289 0xF1,0xFD,0xAA,0x79,0xDA,0xEE,0x38,0x41,0x36,0x6A,
2290 0x13,0x2E,0x16,0x3A,0xCE,0xD4,0xED,0x24,0x01,0xDF,
2291 0x9C,0x6B,0xDC,0xDE,0x98,0xE8,0xE7,0x07,0xC0,0x7A,
2292 0x22,0x39,0xB1,0xB0,0x97,
2295 0x53,0xD7,0xE0,0x85,0x29,0x54,0x70,0x48,0x12,0x1E,
2296 0x9C,0x95,0xF3,0x79,0x1D,0xD8,0x04,0x96,0x39,0x48,
2297 0xF3,0x4F,0xAE,0x7B,0xF4,0x4E,0xA8,0x23,0x65,0xDC,
2298 0x78,0x68,0xFE,0x57,0xE4,0xAE,0x2D,0xE2,0x11,0x30,
2299 0x5A,0x40,0x71,0x04,0xBD,
2302 0x01,0xAF,0x28,0x6B,0xCA,0x1A,0xF2,0x86,0xBC,0xA1,
2303 0xAF,0x28,0x6B,0xCA,0x1A,0xF2,0x86,0xBC,0xA1,0xAF,
2304 0x28,0x6B,0xC9,0xFB,0x8F,0x6B,0x85,0xC5,0x56,0x89,
2305 0x2C,0x20,0xA7,0xEB,0x96,0x4F,0xE7,0x71,0x9E,0x74,
2306 0xF4,0x90,0x75,0x8D,0x3B }
2309 static const struct { EC_CURVE_DATA h; unsigned char data[0+47*6]; }
2310 _EC_X9_62_CHAR2_368W1 = {
2311 { NID_X9_62_characteristic_two_field,0,47,0xFF70 },
2315 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2316 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2317 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2318 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
2319 0x00,0x00,0x00,0x00,0x00,0x00,0x07,
2322 0x00,0xE0,0xD2,0xEE,0x25,0x09,0x52,0x06,0xF5,0xE2,
2323 0xA4,0xF9,0xED,0x22,0x9F,0x1F,0x25,0x6E,0x79,0xA0,
2324 0xE2,0xB4,0x55,0x97,0x0D,0x8D,0x0D,0x86,0x5B,0xD9,
2325 0x47,0x78,0xC5,0x76,0xD6,0x2F,0x0A,0xB7,0x51,0x9C,
2326 0xCD,0x2A,0x1A,0x90,0x6A,0xE3,0x0D,
2329 0x00,0xFC,0x12,0x17,0xD4,0x32,0x0A,0x90,0x45,0x2C,
2330 0x76,0x0A,0x58,0xED,0xCD,0x30,0xC8,0xDD,0x06,0x9B,
2331 0x3C,0x34,0x45,0x38,0x37,0xA3,0x4E,0xD5,0x0C,0xB5,
2332 0x49,0x17,0xE1,0xC2,0x11,0x2D,0x84,0xD1,0x64,0xF4,
2333 0x44,0xF8,0xF7,0x47,0x86,0x04,0x6A,
2336 0x00,0x10,0x85,0xE2,0x75,0x53,0x81,0xDC,0xCC,0xE3,
2337 0xC1,0x55,0x7A,0xFA,0x10,0xC2,0xF0,0xC0,0xC2,0x82,
2338 0x56,0x46,0xC5,0xB3,0x4A,0x39,0x4C,0xBC,0xFA,0x8B,
2339 0xC1,0x6B,0x22,0xE7,0xE7,0x89,0xE9,0x27,0xBE,0x21,
2340 0x6F,0x02,0xE1,0xFB,0x13,0x6A,0x5F,
2343 0x00,0x7B,0x3E,0xB1,0xBD,0xDC,0xBA,0x62,0xD5,0xD8,
2344 0xB2,0x05,0x9B,0x52,0x57,0x97,0xFC,0x73,0x82,0x2C,
2345 0x59,0x05,0x9C,0x62,0x3A,0x45,0xFF,0x38,0x43,0xCE,
2346 0xE8,0xF8,0x7C,0xD1,0x85,0x5A,0xDA,0xA8,0x1E,0x2A,
2347 0x07,0x50,0xB8,0x0F,0xDA,0x23,0x10,
2350 0x00,0x00,0x01,0x00,0x90,0x51,0x2D,0xA9,0xAF,0x72,
2351 0xB0,0x83,0x49,0xD9,0x8A,0x5D,0xD4,0xC7,0xB0,0x53,
2352 0x2E,0xCA,0x51,0xCE,0x03,0xE2,0xD1,0x0F,0x3B,0x7A,
2353 0xC5,0x79,0xBD,0x87,0xE9,0x09,0xAE,0x40,0xA6,0xF1,
2354 0x31,0xE9,0xCF,0xCE,0x5B,0xD9,0x67 }
2357 static const struct { EC_CURVE_DATA h; unsigned char data[0+54*6]; }
2358 _EC_X9_62_CHAR2_431R1 = {
2359 { NID_X9_62_characteristic_two_field,0,54,0x2760 },
2363 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2364 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2365 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2366 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
2367 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2368 0x00,0x00,0x00,0x01,
2371 0x1A,0x82,0x7E,0xF0,0x0D,0xD6,0xFC,0x0E,0x23,0x4C,
2372 0xAF,0x04,0x6C,0x6A,0x5D,0x8A,0x85,0x39,0x5B,0x23,
2373 0x6C,0xC4,0xAD,0x2C,0xF3,0x2A,0x0C,0xAD,0xBD,0xC9,
2374 0xDD,0xF6,0x20,0xB0,0xEB,0x99,0x06,0xD0,0x95,0x7F,
2375 0x6C,0x6F,0xEA,0xCD,0x61,0x54,0x68,0xDF,0x10,0x4D,
2376 0xE2,0x96,0xCD,0x8F,
2379 0x10,0xD9,0xB4,0xA3,0xD9,0x04,0x7D,0x8B,0x15,0x43,
2380 0x59,0xAB,0xFB,0x1B,0x7F,0x54,0x85,0xB0,0x4C,0xEB,
2381 0x86,0x82,0x37,0xDD,0xC9,0xDE,0xDA,0x98,0x2A,0x67,
2382 0x9A,0x5A,0x91,0x9B,0x62,0x6D,0x4E,0x50,0xA8,0xDD,
2383 0x73,0x1B,0x10,0x7A,0x99,0x62,0x38,0x1F,0xB5,0xD8,
2384 0x07,0xBF,0x26,0x18,
2387 0x12,0x0F,0xC0,0x5D,0x3C,0x67,0xA9,0x9D,0xE1,0x61,
2388 0xD2,0xF4,0x09,0x26,0x22,0xFE,0xCA,0x70,0x1B,0xE4,
2389 0xF5,0x0F,0x47,0x58,0x71,0x4E,0x8A,0x87,0xBB,0xF2,
2390 0xA6,0x58,0xEF,0x8C,0x21,0xE7,0xC5,0xEF,0xE9,0x65,
2391 0x36,0x1F,0x6C,0x29,0x99,0xC0,0xC2,0x47,0xB0,0xDB,
2392 0xD7,0x0C,0xE6,0xB7,
2395 0x20,0xD0,0xAF,0x89,0x03,0xA9,0x6F,0x8D,0x5F,0xA2,
2396 0xC2,0x55,0x74,0x5D,0x3C,0x45,0x1B,0x30,0x2C,0x93,
2397 0x46,0xD9,0xB7,0xE4,0x85,0xE7,0xBC,0xE4,0x1F,0x6B,
2398 0x59,0x1F,0x3E,0x8F,0x6A,0xDD,0xCB,0xB0,0xBC,0x4C,
2399 0x2F,0x94,0x7A,0x7D,0xE1,0xA8,0x9B,0x62,0x5D,0x6A,
2400 0x59,0x8B,0x37,0x60,
2403 0x00,0x03,0x40,0x34,0x03,0x40,0x34,0x03,0x40,0x34,
2404 0x03,0x40,0x34,0x03,0x40,0x34,0x03,0x40,0x34,0x03,
2405 0x40,0x34,0x03,0x40,0x34,0x03,0x40,0x34,0x03,0x23,
2406 0xC3,0x13,0xFA,0xB5,0x05,0x89,0x70,0x3B,0x5E,0xC6,
2407 0x8D,0x35,0x87,0xFE,0xC6,0x0D,0x16,0x1C,0xC1,0x49,
2408 0xC1,0xAD,0x4A,0x91 }
2411 static const struct { EC_CURVE_DATA h; unsigned char data[0+15*6]; }
2413 { NID_X9_62_characteristic_two_field,0,15,2 },
2417 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2418 0x00,0x00,0x00,0x02,0x01,
2421 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2422 0x00,0x00,0x00,0x00,0x01,
2425 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2426 0x00,0x00,0x00,0x00,0x01,
2429 0x01,0x66,0x79,0x79,0xA4,0x0B,0xA4,0x97,0xE5,0xD5,
2430 0xC2,0x70,0x78,0x06,0x17,
2433 0x00,0xF4,0x4B,0x4A,0xF1,0xEC,0xC2,0x63,0x0E,0x08,
2434 0x78,0x5C,0xEB,0xCC,0x15,
2437 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xBF,
2438 0x91,0xAF,0x6D,0xEA,0x73 }
2442 /* NOTE: The of curves over a extension field of non prime degree
2443 * is not recommended (Weil-descent).
2444 * As the group order is not a prime this curve is not suitable
2447 static const struct { EC_CURVE_DATA h; unsigned char data[0+20*6]; }
2448 _EC_IPSEC_155_ID3 = {
2449 { NID_X9_62_characteristic_two_field,0,20,3 },
2453 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2454 0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
2457 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2458 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2461 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2462 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x33,0x8f,
2465 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2466 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7b,
2469 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2470 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xc8,
2473 0x02,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
2474 0xC7,0xF3,0xC7,0x88,0x1B,0xD0,0x86,0x8F,0xA8,0x6C }
2477 /* NOTE: The of curves over a extension field of non prime degree
2478 * is not recommended (Weil-descent).
2479 * As the group order is not a prime this curve is not suitable
2482 static const struct { EC_CURVE_DATA h; unsigned char data[0+24*6]; }
2483 _EC_IPSEC_185_ID4 = {
2484 { NID_X9_62_characteristic_two_field,0,24,2 },
2488 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2489 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,
2490 0x00,0x00,0x00,0x01,
2493 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2494 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2495 0x00,0x00,0x00,0x00,
2498 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2499 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2500 0x00,0x00,0x1e,0xe9,
2503 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2504 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2505 0x00,0x00,0x00,0x18,
2508 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2509 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2510 0x00,0x00,0x00,0x0d,
2513 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
2514 0xFF,0xFF,0xED,0xF9,0x7C,0x44,0xDB,0x9F,0x24,0x20,
2515 0xBA,0xFC,0xA7,0x5E }
2521 typedef struct _ec_list_element_st {
2523 const EC_CURVE_DATA *data;
2524 const EC_METHOD *(*meth)(void);
2525 const char *comment;
2528 static const ec_list_element curve_list[] = {
2529 /* prime field curves */
2531 { NID_secp112r1, &_EC_SECG_PRIME_112R1.h, 0, "SECG/WTLS curve over a 112 bit prime field" },
2532 { NID_secp112r2, &_EC_SECG_PRIME_112R2.h, 0, "SECG curve over a 112 bit prime field" },
2533 { NID_secp128r1, &_EC_SECG_PRIME_128R1.h, 0, "SECG curve over a 128 bit prime field" },
2534 { NID_secp128r2, &_EC_SECG_PRIME_128R2.h, 0, "SECG curve over a 128 bit prime field" },
2535 { NID_secp160k1, &_EC_SECG_PRIME_160K1.h, 0, "SECG curve over a 160 bit prime field" },
2536 { NID_secp160r1, &_EC_SECG_PRIME_160R1.h, 0, "SECG curve over a 160 bit prime field" },
2537 { NID_secp160r2, &_EC_SECG_PRIME_160R2.h, 0, "SECG/WTLS curve over a 160 bit prime field" },
2538 /* SECG secp192r1 is the same as X9.62 prime192v1 and hence omitted */
2539 { NID_secp192k1, &_EC_SECG_PRIME_192K1.h, 0, "SECG curve over a 192 bit prime field" },
2540 { NID_secp224k1, &_EC_SECG_PRIME_224K1.h, 0, "SECG curve over a 224 bit prime field" },
2541 #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
2542 { NID_secp224r1, &_EC_NIST_PRIME_224.h, EC_GFp_nistp224_method, "NIST/SECG curve over a 224 bit prime field" },
2544 { NID_secp224r1, &_EC_NIST_PRIME_224.h, 0, "NIST/SECG curve over a 224 bit prime field" },
2546 { NID_secp256k1, &_EC_SECG_PRIME_256K1.h, 0, "SECG curve over a 256 bit prime field" },
2547 /* SECG secp256r1 is the same as X9.62 prime256v1 and hence omitted */
2548 { NID_secp384r1, &_EC_NIST_PRIME_384.h, 0, "NIST/SECG curve over a 384 bit prime field" },
2549 #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
2550 { NID_secp521r1, &_EC_NIST_PRIME_521.h, EC_GFp_nistp521_method, "NIST/SECG curve over a 521 bit prime field" },
2552 { NID_secp521r1, &_EC_NIST_PRIME_521.h, 0, "NIST/SECG curve over a 521 bit prime field" },
2555 { NID_X9_62_prime192v1, &_EC_NIST_PRIME_192.h, 0, "NIST/X9.62/SECG curve over a 192 bit prime field" },
2556 { NID_X9_62_prime192v2, &_EC_X9_62_PRIME_192V2.h, 0, "X9.62 curve over a 192 bit prime field" },
2557 { NID_X9_62_prime192v3, &_EC_X9_62_PRIME_192V3.h, 0, "X9.62 curve over a 192 bit prime field" },
2558 { NID_X9_62_prime239v1, &_EC_X9_62_PRIME_239V1.h, 0, "X9.62 curve over a 239 bit prime field" },
2559 { NID_X9_62_prime239v2, &_EC_X9_62_PRIME_239V2.h, 0, "X9.62 curve over a 239 bit prime field" },
2560 { NID_X9_62_prime239v3, &_EC_X9_62_PRIME_239V3.h, 0, "X9.62 curve over a 239 bit prime field" },
2561 #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
2562 { NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h, EC_GFp_nistp256_method, "X9.62/SECG curve over a 256 bit prime field" },
2564 { NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h, 0, "X9.62/SECG curve over a 256 bit prime field" },
2566 #ifndef OPENSSL_NO_EC2M
2567 /* characteristic two field curves */
2568 /* NIST/SECG curves */
2569 { NID_sect113r1, &_EC_SECG_CHAR2_113R1.h, 0, "SECG curve over a 113 bit binary field" },
2570 { NID_sect113r2, &_EC_SECG_CHAR2_113R2.h, 0, "SECG curve over a 113 bit binary field" },
2571 { NID_sect131r1, &_EC_SECG_CHAR2_131R1.h, 0, "SECG/WTLS curve over a 131 bit binary field" },
2572 { NID_sect131r2, &_EC_SECG_CHAR2_131R2.h, 0, "SECG curve over a 131 bit binary field" },
2573 { NID_sect163k1, &_EC_NIST_CHAR2_163K.h, 0, "NIST/SECG/WTLS curve over a 163 bit binary field" },
2574 { NID_sect163r1, &_EC_SECG_CHAR2_163R1.h, 0, "SECG curve over a 163 bit binary field" },
2575 { NID_sect163r2, &_EC_NIST_CHAR2_163B.h, 0, "NIST/SECG curve over a 163 bit binary field" },
2576 { NID_sect193r1, &_EC_SECG_CHAR2_193R1.h, 0, "SECG curve over a 193 bit binary field" },
2577 { NID_sect193r2, &_EC_SECG_CHAR2_193R2.h, 0, "SECG curve over a 193 bit binary field" },
2578 { NID_sect233k1, &_EC_NIST_CHAR2_233K.h, 0, "NIST/SECG/WTLS curve over a 233 bit binary field" },
2579 { NID_sect233r1, &_EC_NIST_CHAR2_233B.h, 0, "NIST/SECG/WTLS curve over a 233 bit binary field" },
2580 { NID_sect239k1, &_EC_SECG_CHAR2_239K1.h, 0, "SECG curve over a 239 bit binary field" },
2581 { NID_sect283k1, &_EC_NIST_CHAR2_283K.h, 0, "NIST/SECG curve over a 283 bit binary field" },
2582 { NID_sect283r1, &_EC_NIST_CHAR2_283B.h, 0, "NIST/SECG curve over a 283 bit binary field" },
2583 { NID_sect409k1, &_EC_NIST_CHAR2_409K.h, 0, "NIST/SECG curve over a 409 bit binary field" },
2584 { NID_sect409r1, &_EC_NIST_CHAR2_409B.h, 0, "NIST/SECG curve over a 409 bit binary field" },
2585 { NID_sect571k1, &_EC_NIST_CHAR2_571K.h, 0, "NIST/SECG curve over a 571 bit binary field" },
2586 { NID_sect571r1, &_EC_NIST_CHAR2_571B.h, 0, "NIST/SECG curve over a 571 bit binary field" },
2588 { NID_X9_62_c2pnb163v1, &_EC_X9_62_CHAR2_163V1.h, 0, "X9.62 curve over a 163 bit binary field" },
2589 { NID_X9_62_c2pnb163v2, &_EC_X9_62_CHAR2_163V2.h, 0, "X9.62 curve over a 163 bit binary field" },
2590 { NID_X9_62_c2pnb163v3, &_EC_X9_62_CHAR2_163V3.h, 0, "X9.62 curve over a 163 bit binary field" },
2591 { NID_X9_62_c2pnb176v1, &_EC_X9_62_CHAR2_176V1.h, 0, "X9.62 curve over a 176 bit binary field" },
2592 { NID_X9_62_c2tnb191v1, &_EC_X9_62_CHAR2_191V1.h, 0, "X9.62 curve over a 191 bit binary field" },
2593 { NID_X9_62_c2tnb191v2, &_EC_X9_62_CHAR2_191V2.h, 0, "X9.62 curve over a 191 bit binary field" },
2594 { NID_X9_62_c2tnb191v3, &_EC_X9_62_CHAR2_191V3.h, 0, "X9.62 curve over a 191 bit binary field" },
2595 { NID_X9_62_c2pnb208w1, &_EC_X9_62_CHAR2_208W1.h, 0, "X9.62 curve over a 208 bit binary field" },
2596 { NID_X9_62_c2tnb239v1, &_EC_X9_62_CHAR2_239V1.h, 0, "X9.62 curve over a 239 bit binary field" },
2597 { NID_X9_62_c2tnb239v2, &_EC_X9_62_CHAR2_239V2.h, 0, "X9.62 curve over a 239 bit binary field" },
2598 { NID_X9_62_c2tnb239v3, &_EC_X9_62_CHAR2_239V3.h, 0, "X9.62 curve over a 239 bit binary field" },
2599 { NID_X9_62_c2pnb272w1, &_EC_X9_62_CHAR2_272W1.h, 0, "X9.62 curve over a 272 bit binary field" },
2600 { NID_X9_62_c2pnb304w1, &_EC_X9_62_CHAR2_304W1.h, 0, "X9.62 curve over a 304 bit binary field" },
2601 { NID_X9_62_c2tnb359v1, &_EC_X9_62_CHAR2_359V1.h, 0, "X9.62 curve over a 359 bit binary field" },
2602 { NID_X9_62_c2pnb368w1, &_EC_X9_62_CHAR2_368W1.h, 0, "X9.62 curve over a 368 bit binary field" },
2603 { NID_X9_62_c2tnb431r1, &_EC_X9_62_CHAR2_431R1.h, 0, "X9.62 curve over a 431 bit binary field" },
2604 /* the WAP/WTLS curves
2605 * [unlike SECG, spec has its own OIDs for curves from X9.62] */
2606 { NID_wap_wsg_idm_ecid_wtls1, &_EC_WTLS_1.h, 0, "WTLS curve over a 113 bit binary field" },
2607 { NID_wap_wsg_idm_ecid_wtls3, &_EC_NIST_CHAR2_163K.h, 0, "NIST/SECG/WTLS curve over a 163 bit binary field" },
2608 { NID_wap_wsg_idm_ecid_wtls4, &_EC_SECG_CHAR2_113R1.h, 0, "SECG curve over a 113 bit binary field" },
2609 { NID_wap_wsg_idm_ecid_wtls5, &_EC_X9_62_CHAR2_163V1.h, 0, "X9.62 curve over a 163 bit binary field" },
2611 { NID_wap_wsg_idm_ecid_wtls6, &_EC_SECG_PRIME_112R1.h, 0, "SECG/WTLS curve over a 112 bit prime field" },
2612 { NID_wap_wsg_idm_ecid_wtls7, &_EC_SECG_PRIME_160R2.h, 0, "SECG/WTLS curve over a 160 bit prime field" },
2613 { NID_wap_wsg_idm_ecid_wtls8, &_EC_WTLS_8.h, 0, "WTLS curve over a 112 bit prime field" },
2614 { NID_wap_wsg_idm_ecid_wtls9, &_EC_WTLS_9.h, 0, "WTLS curve over a 160 bit prime field" },
2615 #ifndef OPENSSL_NO_EC2M
2616 { NID_wap_wsg_idm_ecid_wtls10, &_EC_NIST_CHAR2_233K.h, 0, "NIST/SECG/WTLS curve over a 233 bit binary field" },
2617 { NID_wap_wsg_idm_ecid_wtls11, &_EC_NIST_CHAR2_233B.h, 0, "NIST/SECG/WTLS curve over a 233 bit binary field" },
2619 { NID_wap_wsg_idm_ecid_wtls12, &_EC_WTLS_12.h, 0, "WTLS curvs over a 224 bit prime field" },
2620 #ifndef OPENSSL_NO_EC2M
2622 { NID_ipsec3, &_EC_IPSEC_155_ID3.h, 0, "\n\tIPSec/IKE/Oakley curve #3 over a 155 bit binary field.\n"
2623 "\tNot suitable for ECDSA.\n\tQuestionable extension field!" },
2624 { NID_ipsec4, &_EC_IPSEC_185_ID4.h, 0, "\n\tIPSec/IKE/Oakley curve #4 over a 185 bit binary field.\n"
2625 "\tNot suitable for ECDSA.\n\tQuestionable extension field!" },
2629 #define curve_list_length (sizeof(curve_list)/sizeof(ec_list_element))
2631 static EC_GROUP *ec_group_new_from_data(const ec_list_element curve)
2633 EC_GROUP *group=NULL;
2636 BIGNUM *p=NULL, *a=NULL, *b=NULL, *x=NULL, *y=NULL, *order=NULL;
2638 int seed_len,param_len;
2639 const EC_METHOD *meth;
2640 const EC_CURVE_DATA *data;
2641 const unsigned char *params;
2643 if ((ctx = BN_CTX_new()) == NULL)
2645 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_MALLOC_FAILURE);
2650 seed_len = data->seed_len;
2651 param_len = data->param_len;
2652 params = (const unsigned char *)(data+1); /* skip header */
2653 params += seed_len; /* skip seed */
2655 if (!(p = BN_bin2bn(params+0*param_len, param_len, NULL))
2656 || !(a = BN_bin2bn(params+1*param_len, param_len, NULL))
2657 || !(b = BN_bin2bn(params+2*param_len, param_len, NULL)))
2659 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
2663 if (curve.meth != 0)
2665 meth = curve.meth();
2666 if (((group = EC_GROUP_new(meth)) == NULL) ||
2667 (!(group->meth->group_set_curve(group, p, a, b, ctx))))
2669 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2673 else if (data->field_type == NID_X9_62_prime_field)
2675 if ((group = EC_GROUP_new_curve_GFp(p, a, b, ctx)) == NULL)
2677 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2681 #ifndef OPENSSL_NO_EC2M
2682 else /* field_type == NID_X9_62_characteristic_two_field */
2684 if ((group = EC_GROUP_new_curve_GF2m(p, a, b, ctx)) == NULL)
2686 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2692 if ((P = EC_POINT_new(group)) == NULL)
2694 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2698 if (!(x = BN_bin2bn(params+3*param_len, param_len, NULL))
2699 || !(y = BN_bin2bn(params+4*param_len, param_len, NULL)))
2701 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
2704 if (!EC_POINT_set_affine_coordinates_GFp(group, P, x, y, ctx))
2706 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2709 if (!(order = BN_bin2bn(params+5*param_len, param_len, NULL))
2710 || !BN_set_word(x, (BN_ULONG)data->cofactor))
2712 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
2715 if (!EC_GROUP_set_generator(group, P, order, x))
2717 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2722 if (!EC_GROUP_set_seed(group, params-seed_len, seed_len))
2724 ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2732 EC_GROUP_free(group);
2754 EC_GROUP *EC_GROUP_new_by_curve_name(int nid)
2757 EC_GROUP *ret = NULL;
2762 for (i=0; i<curve_list_length; i++)
2763 if (curve_list[i].nid == nid)
2765 ret = ec_group_new_from_data(curve_list[i]);
2771 ECerr(EC_F_EC_GROUP_NEW_BY_CURVE_NAME, EC_R_UNKNOWN_GROUP);
2775 EC_GROUP_set_curve_name(ret, nid);
2780 size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems)
2784 if (r == NULL || nitems == 0)
2785 return curve_list_length;
2787 min = nitems < curve_list_length ? nitems : curve_list_length;
2789 for (i = 0; i < min; i++)
2791 r[i].nid = curve_list[i].nid;
2792 r[i].comment = curve_list[i].comment;
2795 return curve_list_length;