Line data Source code
1 : /* crypto/ec/ec_curve.c */
2 : /*
3 : * Written by Nils Larsch for the OpenSSL project.
4 : */
5 : /* ====================================================================
6 : * Copyright (c) 1998-2010 The OpenSSL Project. All rights reserved.
7 : *
8 : * Redistribution and use in source and binary forms, with or without
9 : * modification, are permitted provided that the following conditions
10 : * are met:
11 : *
12 : * 1. Redistributions of source code must retain the above copyright
13 : * notice, this list of conditions and the following disclaimer.
14 : *
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
18 : * distribution.
19 : *
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/)"
24 : *
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.
29 : *
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.
33 : *
34 : * 6. Redistributions of any form whatsoever must retain the following
35 : * acknowledgment:
36 : * "This product includes software developed by the OpenSSL Project
37 : * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
38 : *
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 : * ====================================================================
52 : *
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).
56 : *
57 : */
58 : /* ====================================================================
59 : * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
60 : *
61 : * Portions of the attached software ("Contribution") are developed by
62 : * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
63 : *
64 : * The Contribution is licensed pursuant to the OpenSSL open source
65 : * license provided above.
66 : *
67 : * The elliptic curve binary polynomial software is originally written by
68 : * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
69 : *
70 : */
71 :
72 : #include <string.h>
73 : #include "ec_lcl.h"
74 : #include <openssl/err.h>
75 : #include <openssl/obj_mac.h>
76 : #include <openssl/opensslconf.h>
77 :
78 : #ifdef OPENSSL_FIPS
79 : # include <openssl/fips.h>
80 : #endif
81 :
82 : typedef struct {
83 : int field_type, /* either NID_X9_62_prime_field or
84 : * NID_X9_62_characteristic_two_field */
85 : seed_len, param_len;
86 : unsigned int cofactor; /* promoted to BN_ULONG */
87 : } EC_CURVE_DATA;
88 :
89 : /* the nist prime curves */
90 : static const struct {
91 : EC_CURVE_DATA h;
92 : unsigned char data[20 + 24 * 6];
93 : } _EC_NIST_PRIME_192 = {
94 : {
95 : NID_X9_62_prime_field, 20, 24, 1
96 : },
97 : {
98 : /* seed */
99 : 0x30, 0x45, 0xAE, 0x6F, 0xC8, 0x42, 0x2F, 0x64, 0xED, 0x57, 0x95, 0x28,
100 : 0xD3, 0x81, 0x20, 0xEA, 0xE1, 0x21, 0x96, 0xD5,
101 : /* p */
102 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
103 : 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
104 : /* a */
105 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
106 : 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
107 : /* b */
108 : 0x64, 0x21, 0x05, 0x19, 0xE5, 0x9C, 0x80, 0xE7, 0x0F, 0xA7, 0xE9, 0xAB,
109 : 0x72, 0x24, 0x30, 0x49, 0xFE, 0xB8, 0xDE, 0xEC, 0xC1, 0x46, 0xB9, 0xB1,
110 : /* x */
111 : 0x18, 0x8D, 0xA8, 0x0E, 0xB0, 0x30, 0x90, 0xF6, 0x7C, 0xBF, 0x20, 0xEB,
112 : 0x43, 0xA1, 0x88, 0x00, 0xF4, 0xFF, 0x0A, 0xFD, 0x82, 0xFF, 0x10, 0x12,
113 : /* y */
114 : 0x07, 0x19, 0x2b, 0x95, 0xff, 0xc8, 0xda, 0x78, 0x63, 0x10, 0x11, 0xed,
115 : 0x6b, 0x24, 0xcd, 0xd5, 0x73, 0xf9, 0x77, 0xa1, 0x1e, 0x79, 0x48, 0x11,
116 : /* order */
117 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
118 : 0x99, 0xDE, 0xF8, 0x36, 0x14, 0x6B, 0xC9, 0xB1, 0xB4, 0xD2, 0x28, 0x31
119 : }
120 : };
121 :
122 : static const struct {
123 : EC_CURVE_DATA h;
124 : unsigned char data[20 + 28 * 6];
125 : } _EC_NIST_PRIME_224 = {
126 : {
127 : NID_X9_62_prime_field, 20, 28, 1
128 : },
129 : {
130 : /* seed */
131 : 0xBD, 0x71, 0x34, 0x47, 0x99, 0xD5, 0xC7, 0xFC, 0xDC, 0x45, 0xB5, 0x9F,
132 : 0xA3, 0xB9, 0xAB, 0x8F, 0x6A, 0x94, 0x8B, 0xC5,
133 : /* p */
134 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
135 : 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136 : 0x00, 0x00, 0x00, 0x01,
137 : /* a */
138 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
139 : 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
140 : 0xFF, 0xFF, 0xFF, 0xFE,
141 : /* b */
142 : 0xB4, 0x05, 0x0A, 0x85, 0x0C, 0x04, 0xB3, 0xAB, 0xF5, 0x41, 0x32, 0x56,
143 : 0x50, 0x44, 0xB0, 0xB7, 0xD7, 0xBF, 0xD8, 0xBA, 0x27, 0x0B, 0x39, 0x43,
144 : 0x23, 0x55, 0xFF, 0xB4,
145 : /* x */
146 : 0xB7, 0x0E, 0x0C, 0xBD, 0x6B, 0xB4, 0xBF, 0x7F, 0x32, 0x13, 0x90, 0xB9,
147 : 0x4A, 0x03, 0xC1, 0xD3, 0x56, 0xC2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xD6,
148 : 0x11, 0x5C, 0x1D, 0x21,
149 : /* y */
150 : 0xbd, 0x37, 0x63, 0x88, 0xb5, 0xf7, 0x23, 0xfb, 0x4c, 0x22, 0xdf, 0xe6,
151 : 0xcd, 0x43, 0x75, 0xa0, 0x5a, 0x07, 0x47, 0x64, 0x44, 0xd5, 0x81, 0x99,
152 : 0x85, 0x00, 0x7e, 0x34,
153 : /* order */
154 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
155 : 0xFF, 0xFF, 0x16, 0xA2, 0xE0, 0xB8, 0xF0, 0x3E, 0x13, 0xDD, 0x29, 0x45,
156 : 0x5C, 0x5C, 0x2A, 0x3D
157 : }
158 : };
159 :
160 : static const struct {
161 : EC_CURVE_DATA h;
162 : unsigned char data[20 + 48 * 6];
163 : } _EC_NIST_PRIME_384 = {
164 : {
165 : NID_X9_62_prime_field, 20, 48, 1
166 : },
167 : {
168 : /* seed */
169 : 0xA3, 0x35, 0x92, 0x6A, 0xA3, 0x19, 0xA2, 0x7A, 0x1D, 0x00, 0x89, 0x6A,
170 : 0x67, 0x73, 0xA4, 0x82, 0x7A, 0xCD, 0xAC, 0x73,
171 : /* p */
172 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
173 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
174 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
175 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
176 : /* a */
177 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
178 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
179 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
180 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC,
181 : /* b */
182 : 0xB3, 0x31, 0x2F, 0xA7, 0xE2, 0x3E, 0xE7, 0xE4, 0x98, 0x8E, 0x05, 0x6B,
183 : 0xE3, 0xF8, 0x2D, 0x19, 0x18, 0x1D, 0x9C, 0x6E, 0xFE, 0x81, 0x41, 0x12,
184 : 0x03, 0x14, 0x08, 0x8F, 0x50, 0x13, 0x87, 0x5A, 0xC6, 0x56, 0x39, 0x8D,
185 : 0x8A, 0x2E, 0xD1, 0x9D, 0x2A, 0x85, 0xC8, 0xED, 0xD3, 0xEC, 0x2A, 0xEF,
186 : /* x */
187 : 0xAA, 0x87, 0xCA, 0x22, 0xBE, 0x8B, 0x05, 0x37, 0x8E, 0xB1, 0xC7, 0x1E,
188 : 0xF3, 0x20, 0xAD, 0x74, 0x6E, 0x1D, 0x3B, 0x62, 0x8B, 0xA7, 0x9B, 0x98,
189 : 0x59, 0xF7, 0x41, 0xE0, 0x82, 0x54, 0x2A, 0x38, 0x55, 0x02, 0xF2, 0x5D,
190 : 0xBF, 0x55, 0x29, 0x6C, 0x3A, 0x54, 0x5E, 0x38, 0x72, 0x76, 0x0A, 0xB7,
191 : /* y */
192 : 0x36, 0x17, 0xde, 0x4a, 0x96, 0x26, 0x2c, 0x6f, 0x5d, 0x9e, 0x98, 0xbf,
193 : 0x92, 0x92, 0xdc, 0x29, 0xf8, 0xf4, 0x1d, 0xbd, 0x28, 0x9a, 0x14, 0x7c,
194 : 0xe9, 0xda, 0x31, 0x13, 0xb5, 0xf0, 0xb8, 0xc0, 0x0a, 0x60, 0xb1, 0xce,
195 : 0x1d, 0x7e, 0x81, 0x9d, 0x7a, 0x43, 0x1d, 0x7c, 0x90, 0xea, 0x0e, 0x5f,
196 : /* order */
197 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
198 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
199 : 0xC7, 0x63, 0x4D, 0x81, 0xF4, 0x37, 0x2D, 0xDF, 0x58, 0x1A, 0x0D, 0xB2,
200 : 0x48, 0xB0, 0xA7, 0x7A, 0xEC, 0xEC, 0x19, 0x6A, 0xCC, 0xC5, 0x29, 0x73
201 : }
202 : };
203 :
204 : static const struct {
205 : EC_CURVE_DATA h;
206 : unsigned char data[20 + 66 * 6];
207 : } _EC_NIST_PRIME_521 = {
208 : {
209 : NID_X9_62_prime_field, 20, 66, 1
210 : },
211 : {
212 : /* seed */
213 : 0xD0, 0x9E, 0x88, 0x00, 0x29, 0x1C, 0xB8, 0x53, 0x96, 0xCC, 0x67, 0x17,
214 : 0x39, 0x32, 0x84, 0xAA, 0xA0, 0xDA, 0x64, 0xBA,
215 : /* p */
216 : 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
217 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
218 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
219 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
220 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
221 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
222 : /* a */
223 : 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
224 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
225 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
226 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
227 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
228 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
229 : /* b */
230 : 0x00, 0x51, 0x95, 0x3E, 0xB9, 0x61, 0x8E, 0x1C, 0x9A, 0x1F, 0x92, 0x9A,
231 : 0x21, 0xA0, 0xB6, 0x85, 0x40, 0xEE, 0xA2, 0xDA, 0x72, 0x5B, 0x99, 0xB3,
232 : 0x15, 0xF3, 0xB8, 0xB4, 0x89, 0x91, 0x8E, 0xF1, 0x09, 0xE1, 0x56, 0x19,
233 : 0x39, 0x51, 0xEC, 0x7E, 0x93, 0x7B, 0x16, 0x52, 0xC0, 0xBD, 0x3B, 0xB1,
234 : 0xBF, 0x07, 0x35, 0x73, 0xDF, 0x88, 0x3D, 0x2C, 0x34, 0xF1, 0xEF, 0x45,
235 : 0x1F, 0xD4, 0x6B, 0x50, 0x3F, 0x00,
236 : /* x */
237 : 0x00, 0xC6, 0x85, 0x8E, 0x06, 0xB7, 0x04, 0x04, 0xE9, 0xCD, 0x9E, 0x3E,
238 : 0xCB, 0x66, 0x23, 0x95, 0xB4, 0x42, 0x9C, 0x64, 0x81, 0x39, 0x05, 0x3F,
239 : 0xB5, 0x21, 0xF8, 0x28, 0xAF, 0x60, 0x6B, 0x4D, 0x3D, 0xBA, 0xA1, 0x4B,
240 : 0x5E, 0x77, 0xEF, 0xE7, 0x59, 0x28, 0xFE, 0x1D, 0xC1, 0x27, 0xA2, 0xFF,
241 : 0xA8, 0xDE, 0x33, 0x48, 0xB3, 0xC1, 0x85, 0x6A, 0x42, 0x9B, 0xF9, 0x7E,
242 : 0x7E, 0x31, 0xC2, 0xE5, 0xBD, 0x66,
243 : /* y */
244 : 0x01, 0x18, 0x39, 0x29, 0x6a, 0x78, 0x9a, 0x3b, 0xc0, 0x04, 0x5c, 0x8a,
245 : 0x5f, 0xb4, 0x2c, 0x7d, 0x1b, 0xd9, 0x98, 0xf5, 0x44, 0x49, 0x57, 0x9b,
246 : 0x44, 0x68, 0x17, 0xaf, 0xbd, 0x17, 0x27, 0x3e, 0x66, 0x2c, 0x97, 0xee,
247 : 0x72, 0x99, 0x5e, 0xf4, 0x26, 0x40, 0xc5, 0x50, 0xb9, 0x01, 0x3f, 0xad,
248 : 0x07, 0x61, 0x35, 0x3c, 0x70, 0x86, 0xa2, 0x72, 0xc2, 0x40, 0x88, 0xbe,
249 : 0x94, 0x76, 0x9f, 0xd1, 0x66, 0x50,
250 : /* order */
251 : 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
252 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
253 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0x51, 0x86,
254 : 0x87, 0x83, 0xBF, 0x2F, 0x96, 0x6B, 0x7F, 0xCC, 0x01, 0x48, 0xF7, 0x09,
255 : 0xA5, 0xD0, 0x3B, 0xB5, 0xC9, 0xB8, 0x89, 0x9C, 0x47, 0xAE, 0xBB, 0x6F,
256 : 0xB7, 0x1E, 0x91, 0x38, 0x64, 0x09
257 : }
258 : };
259 :
260 : /* the x9.62 prime curves (minus the nist prime curves) */
261 : static const struct {
262 : EC_CURVE_DATA h;
263 : unsigned char data[20 + 24 * 6];
264 : } _EC_X9_62_PRIME_192V2 = {
265 : {
266 : NID_X9_62_prime_field, 20, 24, 1
267 : },
268 : {
269 : /* seed */
270 : 0x31, 0xA9, 0x2E, 0xE2, 0x02, 0x9F, 0xD1, 0x0D, 0x90, 0x1B, 0x11, 0x3E,
271 : 0x99, 0x07, 0x10, 0xF0, 0xD2, 0x1A, 0xC6, 0xB6,
272 : /* p */
273 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
274 : 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
275 : /* a */
276 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
277 : 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
278 : /* b */
279 : 0xCC, 0x22, 0xD6, 0xDF, 0xB9, 0x5C, 0x6B, 0x25, 0xE4, 0x9C, 0x0D, 0x63,
280 : 0x64, 0xA4, 0xE5, 0x98, 0x0C, 0x39, 0x3A, 0xA2, 0x16, 0x68, 0xD9, 0x53,
281 : /* x */
282 : 0xEE, 0xA2, 0xBA, 0xE7, 0xE1, 0x49, 0x78, 0x42, 0xF2, 0xDE, 0x77, 0x69,
283 : 0xCF, 0xE9, 0xC9, 0x89, 0xC0, 0x72, 0xAD, 0x69, 0x6F, 0x48, 0x03, 0x4A,
284 : /* y */
285 : 0x65, 0x74, 0xd1, 0x1d, 0x69, 0xb6, 0xec, 0x7a, 0x67, 0x2b, 0xb8, 0x2a,
286 : 0x08, 0x3d, 0xf2, 0xf2, 0xb0, 0x84, 0x7d, 0xe9, 0x70, 0xb2, 0xde, 0x15,
287 : /* order */
288 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
289 : 0x5F, 0xB1, 0xA7, 0x24, 0xDC, 0x80, 0x41, 0x86, 0x48, 0xD8, 0xDD, 0x31
290 : }
291 : };
292 :
293 : static const struct {
294 : EC_CURVE_DATA h;
295 : unsigned char data[20 + 24 * 6];
296 : } _EC_X9_62_PRIME_192V3 = {
297 : {
298 : NID_X9_62_prime_field, 20, 24, 1
299 : },
300 : {
301 : /* seed */
302 : 0xC4, 0x69, 0x68, 0x44, 0x35, 0xDE, 0xB3, 0x78, 0xC4, 0xB6, 0x5C, 0xA9,
303 : 0x59, 0x1E, 0x2A, 0x57, 0x63, 0x05, 0x9A, 0x2E,
304 : /* p */
305 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
306 : 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
307 : /* a */
308 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
309 : 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
310 : /* b */
311 : 0x22, 0x12, 0x3D, 0xC2, 0x39, 0x5A, 0x05, 0xCA, 0xA7, 0x42, 0x3D, 0xAE,
312 : 0xCC, 0xC9, 0x47, 0x60, 0xA7, 0xD4, 0x62, 0x25, 0x6B, 0xD5, 0x69, 0x16,
313 : /* x */
314 : 0x7D, 0x29, 0x77, 0x81, 0x00, 0xC6, 0x5A, 0x1D, 0xA1, 0x78, 0x37, 0x16,
315 : 0x58, 0x8D, 0xCE, 0x2B, 0x8B, 0x4A, 0xEE, 0x8E, 0x22, 0x8F, 0x18, 0x96,
316 : /* y */
317 : 0x38, 0xa9, 0x0f, 0x22, 0x63, 0x73, 0x37, 0x33, 0x4b, 0x49, 0xdc, 0xb6,
318 : 0x6a, 0x6d, 0xc8, 0xf9, 0x97, 0x8a, 0xca, 0x76, 0x48, 0xa9, 0x43, 0xb0,
319 : /* order */
320 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
321 : 0x7A, 0x62, 0xD0, 0x31, 0xC8, 0x3F, 0x42, 0x94, 0xF6, 0x40, 0xEC, 0x13
322 : }
323 : };
324 :
325 : static const struct {
326 : EC_CURVE_DATA h;
327 : unsigned char data[20 + 30 * 6];
328 : } _EC_X9_62_PRIME_239V1 = {
329 : {
330 : NID_X9_62_prime_field, 20, 30, 1
331 : },
332 : {
333 : /* seed */
334 : 0xE4, 0x3B, 0xB4, 0x60, 0xF0, 0xB8, 0x0C, 0xC0, 0xC0, 0xB0, 0x75, 0x79,
335 : 0x8E, 0x94, 0x80, 0x60, 0xF8, 0x32, 0x1B, 0x7D,
336 : /* p */
337 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
338 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
339 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
340 : /* a */
341 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
342 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
343 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
344 : /* b */
345 : 0x6B, 0x01, 0x6C, 0x3B, 0xDC, 0xF1, 0x89, 0x41, 0xD0, 0xD6, 0x54, 0x92,
346 : 0x14, 0x75, 0xCA, 0x71, 0xA9, 0xDB, 0x2F, 0xB2, 0x7D, 0x1D, 0x37, 0x79,
347 : 0x61, 0x85, 0xC2, 0x94, 0x2C, 0x0A,
348 : /* x */
349 : 0x0F, 0xFA, 0x96, 0x3C, 0xDC, 0xA8, 0x81, 0x6C, 0xCC, 0x33, 0xB8, 0x64,
350 : 0x2B, 0xED, 0xF9, 0x05, 0xC3, 0xD3, 0x58, 0x57, 0x3D, 0x3F, 0x27, 0xFB,
351 : 0xBD, 0x3B, 0x3C, 0xB9, 0xAA, 0xAF,
352 : /* y */
353 : 0x7d, 0xeb, 0xe8, 0xe4, 0xe9, 0x0a, 0x5d, 0xae, 0x6e, 0x40, 0x54, 0xca,
354 : 0x53, 0x0b, 0xa0, 0x46, 0x54, 0xb3, 0x68, 0x18, 0xce, 0x22, 0x6b, 0x39,
355 : 0xfc, 0xcb, 0x7b, 0x02, 0xf1, 0xae,
356 : /* order */
357 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
358 : 0x7F, 0xFF, 0xFF, 0x9E, 0x5E, 0x9A, 0x9F, 0x5D, 0x90, 0x71, 0xFB, 0xD1,
359 : 0x52, 0x26, 0x88, 0x90, 0x9D, 0x0B
360 : }
361 : };
362 :
363 : static const struct {
364 : EC_CURVE_DATA h;
365 : unsigned char data[20 + 30 * 6];
366 : } _EC_X9_62_PRIME_239V2 = {
367 : {
368 : NID_X9_62_prime_field, 20, 30, 1
369 : },
370 : {
371 : /* seed */
372 : 0xE8, 0xB4, 0x01, 0x16, 0x04, 0x09, 0x53, 0x03, 0xCA, 0x3B, 0x80, 0x99,
373 : 0x98, 0x2B, 0xE0, 0x9F, 0xCB, 0x9A, 0xE6, 0x16,
374 : /* p */
375 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
376 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
377 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
378 : /* a */
379 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
380 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
381 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
382 : /* b */
383 : 0x61, 0x7F, 0xAB, 0x68, 0x32, 0x57, 0x6C, 0xBB, 0xFE, 0xD5, 0x0D, 0x99,
384 : 0xF0, 0x24, 0x9C, 0x3F, 0xEE, 0x58, 0xB9, 0x4B, 0xA0, 0x03, 0x8C, 0x7A,
385 : 0xE8, 0x4C, 0x8C, 0x83, 0x2F, 0x2C,
386 : /* x */
387 : 0x38, 0xAF, 0x09, 0xD9, 0x87, 0x27, 0x70, 0x51, 0x20, 0xC9, 0x21, 0xBB,
388 : 0x5E, 0x9E, 0x26, 0x29, 0x6A, 0x3C, 0xDC, 0xF2, 0xF3, 0x57, 0x57, 0xA0,
389 : 0xEA, 0xFD, 0x87, 0xB8, 0x30, 0xE7,
390 : /* y */
391 : 0x5b, 0x01, 0x25, 0xe4, 0xdb, 0xea, 0x0e, 0xc7, 0x20, 0x6d, 0xa0, 0xfc,
392 : 0x01, 0xd9, 0xb0, 0x81, 0x32, 0x9f, 0xb5, 0x55, 0xde, 0x6e, 0xf4, 0x60,
393 : 0x23, 0x7d, 0xff, 0x8b, 0xe4, 0xba,
394 : /* order */
395 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
396 : 0x80, 0x00, 0x00, 0xCF, 0xA7, 0xE8, 0x59, 0x43, 0x77, 0xD4, 0x14, 0xC0,
397 : 0x38, 0x21, 0xBC, 0x58, 0x20, 0x63
398 : }
399 : };
400 :
401 : static const struct {
402 : EC_CURVE_DATA h;
403 : unsigned char data[20 + 30 * 6];
404 : } _EC_X9_62_PRIME_239V3 = {
405 : {
406 : NID_X9_62_prime_field, 20, 30, 1
407 : },
408 : {
409 : /* seed */
410 : 0x7D, 0x73, 0x74, 0x16, 0x8F, 0xFE, 0x34, 0x71, 0xB6, 0x0A, 0x85, 0x76,
411 : 0x86, 0xA1, 0x94, 0x75, 0xD3, 0xBF, 0xA2, 0xFF,
412 : /* p */
413 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
414 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
415 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
416 : /* a */
417 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
418 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
419 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
420 : /* b */
421 : 0x25, 0x57, 0x05, 0xFA, 0x2A, 0x30, 0x66, 0x54, 0xB1, 0xF4, 0xCB, 0x03,
422 : 0xD6, 0xA7, 0x50, 0xA3, 0x0C, 0x25, 0x01, 0x02, 0xD4, 0x98, 0x87, 0x17,
423 : 0xD9, 0xBA, 0x15, 0xAB, 0x6D, 0x3E,
424 : /* x */
425 : 0x67, 0x68, 0xAE, 0x8E, 0x18, 0xBB, 0x92, 0xCF, 0xCF, 0x00, 0x5C, 0x94,
426 : 0x9A, 0xA2, 0xC6, 0xD9, 0x48, 0x53, 0xD0, 0xE6, 0x60, 0xBB, 0xF8, 0x54,
427 : 0xB1, 0xC9, 0x50, 0x5F, 0xE9, 0x5A,
428 : /* y */
429 : 0x16, 0x07, 0xe6, 0x89, 0x8f, 0x39, 0x0c, 0x06, 0xbc, 0x1d, 0x55, 0x2b,
430 : 0xad, 0x22, 0x6f, 0x3b, 0x6f, 0xcf, 0xe4, 0x8b, 0x6e, 0x81, 0x84, 0x99,
431 : 0xaf, 0x18, 0xe3, 0xed, 0x6c, 0xf3,
432 : /* order */
433 : 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
434 : 0x7F, 0xFF, 0xFF, 0x97, 0x5D, 0xEB, 0x41, 0xB3, 0xA6, 0x05, 0x7C, 0x3C,
435 : 0x43, 0x21, 0x46, 0x52, 0x65, 0x51
436 : }
437 : };
438 :
439 : static const struct {
440 : EC_CURVE_DATA h;
441 : unsigned char data[20 + 32 * 6];
442 : } _EC_X9_62_PRIME_256V1 = {
443 : {
444 : NID_X9_62_prime_field, 20, 32, 1
445 : },
446 : {
447 : /* seed */
448 : 0xC4, 0x9D, 0x36, 0x08, 0x86, 0xE7, 0x04, 0x93, 0x6A, 0x66, 0x78, 0xE1,
449 : 0x13, 0x9D, 0x26, 0xB7, 0x81, 0x9F, 0x7E, 0x90,
450 : /* p */
451 : 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
452 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
453 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
454 : /* a */
455 : 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
456 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
457 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
458 : /* b */
459 : 0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7, 0xB3, 0xEB, 0xBD, 0x55,
460 : 0x76, 0x98, 0x86, 0xBC, 0x65, 0x1D, 0x06, 0xB0, 0xCC, 0x53, 0xB0, 0xF6,
461 : 0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B,
462 : /* x */
463 : 0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47, 0xF8, 0xBC, 0xE6, 0xE5,
464 : 0x63, 0xA4, 0x40, 0xF2, 0x77, 0x03, 0x7D, 0x81, 0x2D, 0xEB, 0x33, 0xA0,
465 : 0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96,
466 : /* y */
467 : 0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b, 0x8e, 0xe7, 0xeb, 0x4a,
468 : 0x7c, 0x0f, 0x9e, 0x16, 0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce,
469 : 0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5,
470 : /* order */
471 : 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
472 : 0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84,
473 : 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51
474 : }
475 : };
476 :
477 : /* the secg prime curves (minus the nist and x9.62 prime curves) */
478 : static const struct {
479 : EC_CURVE_DATA h;
480 : unsigned char data[20 + 14 * 6];
481 : } _EC_SECG_PRIME_112R1 = {
482 : {
483 : NID_X9_62_prime_field, 20, 14, 1
484 : },
485 : {
486 : /* seed */
487 : 0x00, 0xF5, 0x0B, 0x02, 0x8E, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61,
488 : 0x51, 0x75, 0x29, 0x04, 0x72, 0x78, 0x3F, 0xB1,
489 : /* p */
490 : 0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x66, 0x80, 0x76, 0xBE, 0xAD,
491 : 0x20, 0x8B,
492 : /* a */
493 : 0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x66, 0x80, 0x76, 0xBE, 0xAD,
494 : 0x20, 0x88,
495 : /* b */
496 : 0x65, 0x9E, 0xF8, 0xBA, 0x04, 0x39, 0x16, 0xEE, 0xDE, 0x89, 0x11, 0x70,
497 : 0x2B, 0x22,
498 : /* x */
499 : 0x09, 0x48, 0x72, 0x39, 0x99, 0x5A, 0x5E, 0xE7, 0x6B, 0x55, 0xF9, 0xC2,
500 : 0xF0, 0x98,
501 : /* y */
502 : 0xa8, 0x9c, 0xe5, 0xaf, 0x87, 0x24, 0xc0, 0xa2, 0x3e, 0x0e, 0x0f, 0xf7,
503 : 0x75, 0x00,
504 : /* order */
505 : 0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x76, 0x28, 0xDF, 0xAC, 0x65,
506 : 0x61, 0xC5
507 : }
508 : };
509 :
510 : static const struct {
511 : EC_CURVE_DATA h;
512 : unsigned char data[20 + 14 * 6];
513 : } _EC_SECG_PRIME_112R2 = {
514 : {
515 : NID_X9_62_prime_field, 20, 14, 4
516 : },
517 : {
518 : /* seed */
519 : 0x00, 0x27, 0x57, 0xA1, 0x11, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61,
520 : 0x51, 0x75, 0x53, 0x16, 0xC0, 0x5E, 0x0B, 0xD4,
521 : /* p */
522 : 0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x66, 0x80, 0x76, 0xBE, 0xAD,
523 : 0x20, 0x8B,
524 : /* a */
525 : 0x61, 0x27, 0xC2, 0x4C, 0x05, 0xF3, 0x8A, 0x0A, 0xAA, 0xF6, 0x5C, 0x0E,
526 : 0xF0, 0x2C,
527 : /* b */
528 : 0x51, 0xDE, 0xF1, 0x81, 0x5D, 0xB5, 0xED, 0x74, 0xFC, 0xC3, 0x4C, 0x85,
529 : 0xD7, 0x09,
530 : /* x */
531 : 0x4B, 0xA3, 0x0A, 0xB5, 0xE8, 0x92, 0xB4, 0xE1, 0x64, 0x9D, 0xD0, 0x92,
532 : 0x86, 0x43,
533 : /* y */
534 : 0xad, 0xcd, 0x46, 0xf5, 0x88, 0x2e, 0x37, 0x47, 0xde, 0xf3, 0x6e, 0x95,
535 : 0x6e, 0x97,
536 : /* order */
537 : 0x36, 0xDF, 0x0A, 0xAF, 0xD8, 0xB8, 0xD7, 0x59, 0x7C, 0xA1, 0x05, 0x20,
538 : 0xD0, 0x4B
539 : }
540 : };
541 :
542 : static const struct {
543 : EC_CURVE_DATA h;
544 : unsigned char data[20 + 16 * 6];
545 : } _EC_SECG_PRIME_128R1 = {
546 : {
547 : NID_X9_62_prime_field, 20, 16, 1
548 : },
549 : {
550 : /* seed */
551 : 0x00, 0x0E, 0x0D, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75,
552 : 0x0C, 0xC0, 0x3A, 0x44, 0x73, 0xD0, 0x36, 0x79,
553 : /* p */
554 : 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
555 : 0xFF, 0xFF, 0xFF, 0xFF,
556 : /* a */
557 : 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
558 : 0xFF, 0xFF, 0xFF, 0xFC,
559 : /* b */
560 : 0xE8, 0x75, 0x79, 0xC1, 0x10, 0x79, 0xF4, 0x3D, 0xD8, 0x24, 0x99, 0x3C,
561 : 0x2C, 0xEE, 0x5E, 0xD3,
562 : /* x */
563 : 0x16, 0x1F, 0xF7, 0x52, 0x8B, 0x89, 0x9B, 0x2D, 0x0C, 0x28, 0x60, 0x7C,
564 : 0xA5, 0x2C, 0x5B, 0x86,
565 : /* y */
566 : 0xcf, 0x5a, 0xc8, 0x39, 0x5b, 0xaf, 0xeb, 0x13, 0xc0, 0x2d, 0xa2, 0x92,
567 : 0xdd, 0xed, 0x7a, 0x83,
568 : /* order */
569 : 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x75, 0xA3, 0x0D, 0x1B,
570 : 0x90, 0x38, 0xA1, 0x15
571 : }
572 : };
573 :
574 : static const struct {
575 : EC_CURVE_DATA h;
576 : unsigned char data[20 + 16 * 6];
577 : } _EC_SECG_PRIME_128R2 = {
578 : {
579 : NID_X9_62_prime_field, 20, 16, 4
580 : },
581 : {
582 : /* seed */
583 : 0x00, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75, 0x12, 0xD8,
584 : 0xF0, 0x34, 0x31, 0xFC, 0xE6, 0x3B, 0x88, 0xF4,
585 : /* p */
586 : 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
587 : 0xFF, 0xFF, 0xFF, 0xFF,
588 : /* a */
589 : 0xD6, 0x03, 0x19, 0x98, 0xD1, 0xB3, 0xBB, 0xFE, 0xBF, 0x59, 0xCC, 0x9B,
590 : 0xBF, 0xF9, 0xAE, 0xE1,
591 : /* b */
592 : 0x5E, 0xEE, 0xFC, 0xA3, 0x80, 0xD0, 0x29, 0x19, 0xDC, 0x2C, 0x65, 0x58,
593 : 0xBB, 0x6D, 0x8A, 0x5D,
594 : /* x */
595 : 0x7B, 0x6A, 0xA5, 0xD8, 0x5E, 0x57, 0x29, 0x83, 0xE6, 0xFB, 0x32, 0xA7,
596 : 0xCD, 0xEB, 0xC1, 0x40,
597 : /* y */
598 : 0x27, 0xb6, 0x91, 0x6a, 0x89, 0x4d, 0x3a, 0xee, 0x71, 0x06, 0xfe, 0x80,
599 : 0x5f, 0xc3, 0x4b, 0x44,
600 : /* order */
601 : 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xBE, 0x00, 0x24, 0x72,
602 : 0x06, 0x13, 0xB5, 0xA3
603 : }
604 : };
605 :
606 : static const struct {
607 : EC_CURVE_DATA h;
608 : unsigned char data[0 + 21 * 6];
609 : } _EC_SECG_PRIME_160K1 = {
610 : {
611 : NID_X9_62_prime_field, 0, 21, 1
612 : },
613 : {
614 : /* no seed */
615 : /* p */
616 : 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
617 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xAC, 0x73,
618 : /* a */
619 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
620 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
621 : /* b */
622 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
623 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
624 : /* x */
625 : 0x00, 0x3B, 0x4C, 0x38, 0x2C, 0xE3, 0x7A, 0xA1, 0x92, 0xA4, 0x01, 0x9E,
626 : 0x76, 0x30, 0x36, 0xF4, 0xF5, 0xDD, 0x4D, 0x7E, 0xBB,
627 : /* y */
628 : 0x00, 0x93, 0x8c, 0xf9, 0x35, 0x31, 0x8f, 0xdc, 0xed, 0x6b, 0xc2, 0x82,
629 : 0x86, 0x53, 0x17, 0x33, 0xc3, 0xf0, 0x3c, 0x4f, 0xee,
630 : /* order */
631 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xB8,
632 : 0xFA, 0x16, 0xDF, 0xAB, 0x9A, 0xCA, 0x16, 0xB6, 0xB3
633 : }
634 : };
635 :
636 : static const struct {
637 : EC_CURVE_DATA h;
638 : unsigned char data[20 + 21 * 6];
639 : } _EC_SECG_PRIME_160R1 = {
640 : {
641 : NID_X9_62_prime_field, 20, 21, 1
642 : },
643 : {
644 : /* seed */
645 : 0x10, 0x53, 0xCD, 0xE4, 0x2C, 0x14, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
646 : 0x15, 0x17, 0x53, 0x3B, 0xF3, 0xF8, 0x33, 0x45,
647 : /* p */
648 : 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
649 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
650 : /* a */
651 : 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
652 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFC,
653 : /* b */
654 : 0x00, 0x1C, 0x97, 0xBE, 0xFC, 0x54, 0xBD, 0x7A, 0x8B, 0x65, 0xAC, 0xF8,
655 : 0x9F, 0x81, 0xD4, 0xD4, 0xAD, 0xC5, 0x65, 0xFA, 0x45,
656 : /* x */
657 : 0x00, 0x4A, 0x96, 0xB5, 0x68, 0x8E, 0xF5, 0x73, 0x28, 0x46, 0x64, 0x69,
658 : 0x89, 0x68, 0xC3, 0x8B, 0xB9, 0x13, 0xCB, 0xFC, 0x82,
659 : /* y */
660 : 0x00, 0x23, 0xa6, 0x28, 0x55, 0x31, 0x68, 0x94, 0x7d, 0x59, 0xdc, 0xc9,
661 : 0x12, 0x04, 0x23, 0x51, 0x37, 0x7a, 0xc5, 0xfb, 0x32,
662 : /* order */
663 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF4,
664 : 0xC8, 0xF9, 0x27, 0xAE, 0xD3, 0xCA, 0x75, 0x22, 0x57
665 : }
666 : };
667 :
668 : static const struct {
669 : EC_CURVE_DATA h;
670 : unsigned char data[20 + 21 * 6];
671 : } _EC_SECG_PRIME_160R2 = {
672 : {
673 : NID_X9_62_prime_field, 20, 21, 1
674 : },
675 : {
676 : /* seed */
677 : 0xB9, 0x9B, 0x99, 0xB0, 0x99, 0xB3, 0x23, 0xE0, 0x27, 0x09, 0xA4, 0xD6,
678 : 0x96, 0xE6, 0x76, 0x87, 0x56, 0x15, 0x17, 0x51,
679 : /* p */
680 : 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
681 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xAC, 0x73,
682 : /* a */
683 : 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
684 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xAC, 0x70,
685 : /* b */
686 : 0x00, 0xB4, 0xE1, 0x34, 0xD3, 0xFB, 0x59, 0xEB, 0x8B, 0xAB, 0x57, 0x27,
687 : 0x49, 0x04, 0x66, 0x4D, 0x5A, 0xF5, 0x03, 0x88, 0xBA,
688 : /* x */
689 : 0x00, 0x52, 0xDC, 0xB0, 0x34, 0x29, 0x3A, 0x11, 0x7E, 0x1F, 0x4F, 0xF1,
690 : 0x1B, 0x30, 0xF7, 0x19, 0x9D, 0x31, 0x44, 0xCE, 0x6D,
691 : /* y */
692 : 0x00, 0xfe, 0xaf, 0xfe, 0xf2, 0xe3, 0x31, 0xf2, 0x96, 0xe0, 0x71, 0xfa,
693 : 0x0d, 0xf9, 0x98, 0x2c, 0xfe, 0xa7, 0xd4, 0x3f, 0x2e,
694 : /* order */
695 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35,
696 : 0x1E, 0xE7, 0x86, 0xA8, 0x18, 0xF3, 0xA1, 0xA1, 0x6B
697 : }
698 : };
699 :
700 : static const struct {
701 : EC_CURVE_DATA h;
702 : unsigned char data[0 + 24 * 6];
703 : } _EC_SECG_PRIME_192K1 = {
704 : {
705 : NID_X9_62_prime_field, 0, 24, 1
706 : },
707 : {
708 : /* no seed */
709 : /* p */
710 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
711 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xEE, 0x37,
712 : /* a */
713 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
714 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
715 : /* b */
716 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
717 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
718 : /* x */
719 : 0xDB, 0x4F, 0xF1, 0x0E, 0xC0, 0x57, 0xE9, 0xAE, 0x26, 0xB0, 0x7D, 0x02,
720 : 0x80, 0xB7, 0xF4, 0x34, 0x1D, 0xA5, 0xD1, 0xB1, 0xEA, 0xE0, 0x6C, 0x7D,
721 : /* y */
722 : 0x9b, 0x2f, 0x2f, 0x6d, 0x9c, 0x56, 0x28, 0xa7, 0x84, 0x41, 0x63, 0xd0,
723 : 0x15, 0xbe, 0x86, 0x34, 0x40, 0x82, 0xaa, 0x88, 0xd9, 0x5e, 0x2f, 0x9d,
724 : /* order */
725 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
726 : 0x26, 0xF2, 0xFC, 0x17, 0x0F, 0x69, 0x46, 0x6A, 0x74, 0xDE, 0xFD, 0x8D
727 : }
728 : };
729 :
730 : static const struct {
731 : EC_CURVE_DATA h;
732 : unsigned char data[0 + 29 * 6];
733 : } _EC_SECG_PRIME_224K1 = {
734 : {
735 : NID_X9_62_prime_field, 0, 29, 1
736 : },
737 : {
738 : /* no seed */
739 : /* p */
740 : 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
741 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
742 : 0xFE, 0xFF, 0xFF, 0xE5, 0x6D,
743 : /* a */
744 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
745 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
746 : 0x00, 0x00, 0x00, 0x00, 0x00,
747 : /* b */
748 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
749 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
750 : 0x00, 0x00, 0x00, 0x00, 0x05,
751 : /* x */
752 : 0x00, 0xA1, 0x45, 0x5B, 0x33, 0x4D, 0xF0, 0x99, 0xDF, 0x30, 0xFC, 0x28,
753 : 0xA1, 0x69, 0xA4, 0x67, 0xE9, 0xE4, 0x70, 0x75, 0xA9, 0x0F, 0x7E, 0x65,
754 : 0x0E, 0xB6, 0xB7, 0xA4, 0x5C,
755 : /* y */
756 : 0x00, 0x7e, 0x08, 0x9f, 0xed, 0x7f, 0xba, 0x34, 0x42, 0x82, 0xca, 0xfb,
757 : 0xd6, 0xf7, 0xe3, 0x19, 0xf7, 0xc0, 0xb0, 0xbd, 0x59, 0xe2, 0xca, 0x4b,
758 : 0xdb, 0x55, 0x6d, 0x61, 0xa5,
759 : /* order */
760 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
761 : 0x00, 0x00, 0x01, 0xDC, 0xE8, 0xD2, 0xEC, 0x61, 0x84, 0xCA, 0xF0, 0xA9,
762 : 0x71, 0x76, 0x9F, 0xB1, 0xF7
763 : }
764 : };
765 :
766 : static const struct {
767 : EC_CURVE_DATA h;
768 : unsigned char data[0 + 32 * 6];
769 : } _EC_SECG_PRIME_256K1 = {
770 : {
771 : NID_X9_62_prime_field, 0, 32, 1
772 : },
773 : {
774 : /* no seed */
775 : /* p */
776 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
777 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
778 : 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0x2F,
779 : /* a */
780 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
781 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
782 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
783 : /* b */
784 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
785 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
786 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
787 : /* x */
788 : 0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, 0x55, 0xA0, 0x62, 0x95,
789 : 0xCE, 0x87, 0x0B, 0x07, 0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9,
790 : 0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, 0x98,
791 : /* y */
792 : 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc,
793 : 0x0e, 0x11, 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19,
794 : 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, 0xd4, 0xb8,
795 : /* order */
796 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
797 : 0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B,
798 : 0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41
799 : }
800 : };
801 :
802 : /* some wap/wtls curves */
803 : static const struct {
804 : EC_CURVE_DATA h;
805 : unsigned char data[0 + 15 * 6];
806 : } _EC_WTLS_8 = {
807 : {
808 : NID_X9_62_prime_field, 0, 15, 1
809 : },
810 : {
811 : /* no seed */
812 : /* p */
813 : 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
814 : 0xFF, 0xFD, 0xE7,
815 : /* a */
816 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
817 : 0x00, 0x00, 0x00,
818 : /* b */
819 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
820 : 0x00, 0x00, 0x03,
821 : /* x */
822 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
823 : 0x00, 0x00, 0x01,
824 : /* y */
825 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
826 : 0x00, 0x00, 0x02,
827 : /* order */
828 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xEC, 0xEA, 0x55, 0x1A,
829 : 0xD8, 0x37, 0xE9
830 : }
831 : };
832 :
833 : static const struct {
834 : EC_CURVE_DATA h;
835 : unsigned char data[0 + 21 * 6];
836 : } _EC_WTLS_9 = {
837 : {
838 : NID_X9_62_prime_field, 0, 21, 1
839 : },
840 : {
841 : /* no seed */
842 : /* p */
843 : 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
844 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x80, 0x8F,
845 : /* a */
846 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
847 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
848 : /* b */
849 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
850 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
851 : /* x */
852 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
853 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
854 : /* y */
855 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
856 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
857 : /* order */
858 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xCD,
859 : 0xC9, 0x8A, 0xE0, 0xE2, 0xDE, 0x57, 0x4A, 0xBF, 0x33
860 : }
861 : };
862 :
863 : static const struct {
864 : EC_CURVE_DATA h;
865 : unsigned char data[0 + 28 * 6];
866 : } _EC_WTLS_12 = {
867 : {
868 : NID_X9_62_prime_field, 0, 28, 1
869 : },
870 : {
871 : /* no seed */
872 : /* p */
873 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
874 : 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
875 : 0x00, 0x00, 0x00, 0x01,
876 : /* a */
877 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
878 : 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
879 : 0xFF, 0xFF, 0xFF, 0xFE,
880 : /* b */
881 : 0xB4, 0x05, 0x0A, 0x85, 0x0C, 0x04, 0xB3, 0xAB, 0xF5, 0x41, 0x32, 0x56,
882 : 0x50, 0x44, 0xB0, 0xB7, 0xD7, 0xBF, 0xD8, 0xBA, 0x27, 0x0B, 0x39, 0x43,
883 : 0x23, 0x55, 0xFF, 0xB4,
884 : /* x */
885 : 0xB7, 0x0E, 0x0C, 0xBD, 0x6B, 0xB4, 0xBF, 0x7F, 0x32, 0x13, 0x90, 0xB9,
886 : 0x4A, 0x03, 0xC1, 0xD3, 0x56, 0xC2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xD6,
887 : 0x11, 0x5C, 0x1D, 0x21,
888 : /* y */
889 : 0xbd, 0x37, 0x63, 0x88, 0xb5, 0xf7, 0x23, 0xfb, 0x4c, 0x22, 0xdf, 0xe6,
890 : 0xcd, 0x43, 0x75, 0xa0, 0x5a, 0x07, 0x47, 0x64, 0x44, 0xd5, 0x81, 0x99,
891 : 0x85, 0x00, 0x7e, 0x34,
892 : /* order */
893 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
894 : 0xFF, 0xFF, 0x16, 0xA2, 0xE0, 0xB8, 0xF0, 0x3E, 0x13, 0xDD, 0x29, 0x45,
895 : 0x5C, 0x5C, 0x2A, 0x3D
896 : }
897 : };
898 :
899 : #ifndef OPENSSL_NO_EC2M
900 :
901 : /* characteristic two curves */
902 : static const struct {
903 : EC_CURVE_DATA h;
904 : unsigned char data[20 + 15 * 6];
905 : } _EC_SECG_CHAR2_113R1 = {
906 : {
907 : NID_X9_62_characteristic_two_field, 20, 15, 2
908 : },
909 : {
910 : /* seed */
911 : 0x10, 0xE7, 0x23, 0xAB, 0x14, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56, 0x15,
912 : 0x17, 0x56, 0xFE, 0xBF, 0x8F, 0xCB, 0x49, 0xA9,
913 : /* p */
914 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
915 : 0x00, 0x02, 0x01,
916 : /* a */
917 : 0x00, 0x30, 0x88, 0x25, 0x0C, 0xA6, 0xE7, 0xC7, 0xFE, 0x64, 0x9C, 0xE8,
918 : 0x58, 0x20, 0xF7,
919 : /* b */
920 : 0x00, 0xE8, 0xBE, 0xE4, 0xD3, 0xE2, 0x26, 0x07, 0x44, 0x18, 0x8B, 0xE0,
921 : 0xE9, 0xC7, 0x23,
922 : /* x */
923 : 0x00, 0x9D, 0x73, 0x61, 0x6F, 0x35, 0xF4, 0xAB, 0x14, 0x07, 0xD7, 0x35,
924 : 0x62, 0xC1, 0x0F,
925 : /* y */
926 : 0x00, 0xA5, 0x28, 0x30, 0x27, 0x79, 0x58, 0xEE, 0x84, 0xD1, 0x31, 0x5E,
927 : 0xD3, 0x18, 0x86,
928 : /* order */
929 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xCC, 0xEC, 0x8A,
930 : 0x39, 0xE5, 0x6F
931 : }
932 : };
933 :
934 : static const struct {
935 : EC_CURVE_DATA h;
936 : unsigned char data[20 + 15 * 6];
937 : } _EC_SECG_CHAR2_113R2 = {
938 : {
939 : NID_X9_62_characteristic_two_field, 20, 15, 2
940 : },
941 : {
942 : /* seed */
943 : 0x10, 0xC0, 0xFB, 0x15, 0x76, 0x08, 0x60, 0xDE, 0xF1, 0xEE, 0xF4, 0xD6,
944 : 0x96, 0xE6, 0x76, 0x87, 0x56, 0x15, 0x17, 0x5D,
945 : /* p */
946 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
947 : 0x00, 0x02, 0x01,
948 : /* a */
949 : 0x00, 0x68, 0x99, 0x18, 0xDB, 0xEC, 0x7E, 0x5A, 0x0D, 0xD6, 0xDF, 0xC0,
950 : 0xAA, 0x55, 0xC7,
951 : /* b */
952 : 0x00, 0x95, 0xE9, 0xA9, 0xEC, 0x9B, 0x29, 0x7B, 0xD4, 0xBF, 0x36, 0xE0,
953 : 0x59, 0x18, 0x4F,
954 : /* x */
955 : 0x01, 0xA5, 0x7A, 0x6A, 0x7B, 0x26, 0xCA, 0x5E, 0xF5, 0x2F, 0xCD, 0xB8,
956 : 0x16, 0x47, 0x97,
957 : /* y */
958 : 0x00, 0xB3, 0xAD, 0xC9, 0x4E, 0xD1, 0xFE, 0x67, 0x4C, 0x06, 0xE6, 0x95,
959 : 0xBA, 0xBA, 0x1D,
960 : /* order */
961 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x78, 0x9B, 0x24,
962 : 0x96, 0xAF, 0x93
963 : }
964 : };
965 :
966 : static const struct {
967 : EC_CURVE_DATA h;
968 : unsigned char data[20 + 17 * 6];
969 : } _EC_SECG_CHAR2_131R1 = {
970 : {
971 : NID_X9_62_characteristic_two_field, 20, 17, 2
972 : },
973 : {
974 : /* seed */
975 : 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75, 0x98, 0x5B, 0xD3,
976 : 0xAD, 0xBA, 0xDA, 0x21, 0xB4, 0x3A, 0x97, 0xE2,
977 : /* p */
978 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
979 : 0x00, 0x00, 0x00, 0x01, 0x0D,
980 : /* a */
981 : 0x07, 0xA1, 0x1B, 0x09, 0xA7, 0x6B, 0x56, 0x21, 0x44, 0x41, 0x8F, 0xF3,
982 : 0xFF, 0x8C, 0x25, 0x70, 0xB8,
983 : /* b */
984 : 0x02, 0x17, 0xC0, 0x56, 0x10, 0x88, 0x4B, 0x63, 0xB9, 0xC6, 0xC7, 0x29,
985 : 0x16, 0x78, 0xF9, 0xD3, 0x41,
986 : /* x */
987 : 0x00, 0x81, 0xBA, 0xF9, 0x1F, 0xDF, 0x98, 0x33, 0xC4, 0x0F, 0x9C, 0x18,
988 : 0x13, 0x43, 0x63, 0x83, 0x99,
989 : /* y */
990 : 0x07, 0x8C, 0x6E, 0x7E, 0xA3, 0x8C, 0x00, 0x1F, 0x73, 0xC8, 0x13, 0x4B,
991 : 0x1B, 0x4E, 0xF9, 0xE1, 0x50,
992 : /* order */
993 : 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x31, 0x23, 0x95,
994 : 0x3A, 0x94, 0x64, 0xB5, 0x4D
995 : }
996 : };
997 :
998 : static const struct {
999 : EC_CURVE_DATA h;
1000 : unsigned char data[20 + 17 * 6];
1001 : } _EC_SECG_CHAR2_131R2 = {
1002 : {
1003 : NID_X9_62_characteristic_two_field, 20, 17, 2
1004 : },
1005 : {
1006 : /* seed */
1007 : 0x98, 0x5B, 0xD3, 0xAD, 0xBA, 0xD4, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1008 : 0x15, 0x17, 0x5A, 0x21, 0xB4, 0x3A, 0x97, 0xE3,
1009 : /* p */
1010 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1011 : 0x00, 0x00, 0x00, 0x01, 0x0D,
1012 : /* a */
1013 : 0x03, 0xE5, 0xA8, 0x89, 0x19, 0xD7, 0xCA, 0xFC, 0xBF, 0x41, 0x5F, 0x07,
1014 : 0xC2, 0x17, 0x65, 0x73, 0xB2,
1015 : /* b */
1016 : 0x04, 0xB8, 0x26, 0x6A, 0x46, 0xC5, 0x56, 0x57, 0xAC, 0x73, 0x4C, 0xE3,
1017 : 0x8F, 0x01, 0x8F, 0x21, 0x92,
1018 : /* x */
1019 : 0x03, 0x56, 0xDC, 0xD8, 0xF2, 0xF9, 0x50, 0x31, 0xAD, 0x65, 0x2D, 0x23,
1020 : 0x95, 0x1B, 0xB3, 0x66, 0xA8,
1021 : /* y */
1022 : 0x06, 0x48, 0xF0, 0x6D, 0x86, 0x79, 0x40, 0xA5, 0x36, 0x6D, 0x9E, 0x26,
1023 : 0x5D, 0xE9, 0xEB, 0x24, 0x0F,
1024 : /* order */
1025 : 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x69, 0x54, 0xA2,
1026 : 0x33, 0x04, 0x9B, 0xA9, 0x8F
1027 : }
1028 : };
1029 :
1030 : static const struct {
1031 : EC_CURVE_DATA h;
1032 : unsigned char data[0 + 21 * 6];
1033 : } _EC_NIST_CHAR2_163K = {
1034 : {
1035 : NID_X9_62_characteristic_two_field, 0, 21, 2
1036 : },
1037 : {
1038 : /* no seed */
1039 : /* p */
1040 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1041 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9,
1042 : /* a */
1043 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1044 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1045 : /* b */
1046 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1047 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1048 : /* x */
1049 : 0x02, 0xFE, 0x13, 0xC0, 0x53, 0x7B, 0xBC, 0x11, 0xAC, 0xAA, 0x07, 0xD7,
1050 : 0x93, 0xDE, 0x4E, 0x6D, 0x5E, 0x5C, 0x94, 0xEE, 0xE8,
1051 : /* y */
1052 : 0x02, 0x89, 0x07, 0x0F, 0xB0, 0x5D, 0x38, 0xFF, 0x58, 0x32, 0x1F, 0x2E,
1053 : 0x80, 0x05, 0x36, 0xD5, 0x38, 0xCC, 0xDA, 0xA3, 0xD9,
1054 : /* order */
1055 : 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
1056 : 0x08, 0xA2, 0xE0, 0xCC, 0x0D, 0x99, 0xF8, 0xA5, 0xEF
1057 : }
1058 : };
1059 :
1060 : static const struct {
1061 : EC_CURVE_DATA h;
1062 : unsigned char data[0 + 21 * 6];
1063 : } _EC_SECG_CHAR2_163R1 = {
1064 : {
1065 : NID_X9_62_characteristic_two_field, 0, 21, 2
1066 : },
1067 : {
1068 : /* no seed */
1069 : # if 0
1070 : /*
1071 : * The algorithm used to derive the curve parameters from the seed
1072 : * used here is slightly different than the algorithm described in
1073 : * X9.62 .
1074 : */
1075 : 0x24, 0xB7, 0xB1, 0x37, 0xC8, 0xA1, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75,
1076 : 0x61, 0x51, 0x75, 0x6F, 0xD0, 0xDA, 0x2E, 0x5C,
1077 : # endif
1078 : /* p */
1079 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1080 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9,
1081 : /* a */
1082 : 0x07, 0xB6, 0x88, 0x2C, 0xAA, 0xEF, 0xA8, 0x4F, 0x95, 0x54, 0xFF, 0x84,
1083 : 0x28, 0xBD, 0x88, 0xE2, 0x46, 0xD2, 0x78, 0x2A, 0xE2,
1084 : /* b */
1085 : 0x07, 0x13, 0x61, 0x2D, 0xCD, 0xDC, 0xB4, 0x0A, 0xAB, 0x94, 0x6B, 0xDA,
1086 : 0x29, 0xCA, 0x91, 0xF7, 0x3A, 0xF9, 0x58, 0xAF, 0xD9,
1087 : /* x */
1088 : 0x03, 0x69, 0x97, 0x96, 0x97, 0xAB, 0x43, 0x89, 0x77, 0x89, 0x56, 0x67,
1089 : 0x89, 0x56, 0x7F, 0x78, 0x7A, 0x78, 0x76, 0xA6, 0x54,
1090 : /* y */
1091 : 0x00, 0x43, 0x5E, 0xDB, 0x42, 0xEF, 0xAF, 0xB2, 0x98, 0x9D, 0x51, 0xFE,
1092 : 0xFC, 0xE3, 0xC8, 0x09, 0x88, 0xF4, 0x1F, 0xF8, 0x83,
1093 : /* order */
1094 : 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x48,
1095 : 0xAA, 0xB6, 0x89, 0xC2, 0x9C, 0xA7, 0x10, 0x27, 0x9B
1096 : }
1097 : };
1098 :
1099 : static const struct {
1100 : EC_CURVE_DATA h;
1101 : unsigned char data[0 + 21 * 6];
1102 : } _EC_NIST_CHAR2_163B = {
1103 : {
1104 : NID_X9_62_characteristic_two_field, 0, 21, 2
1105 : },
1106 : {
1107 : /* no seed */
1108 : # if 0
1109 : /*
1110 : * The seed here was used to created the curve parameters in normal
1111 : * basis representation (and not the polynomial representation used
1112 : * here)
1113 : */
1114 : 0x85, 0xE2, 0x5B, 0xFE, 0x5C, 0x86, 0x22, 0x6C, 0xDB, 0x12, 0x01, 0x6F,
1115 : 0x75, 0x53, 0xF9, 0xD0, 0xE6, 0x93, 0xA2, 0x68,
1116 : # endif
1117 : /* p */
1118 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1119 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9,
1120 : /* a */
1121 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1122 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1123 : /* b */
1124 : 0x02, 0x0A, 0x60, 0x19, 0x07, 0xB8, 0xC9, 0x53, 0xCA, 0x14, 0x81, 0xEB,
1125 : 0x10, 0x51, 0x2F, 0x78, 0x74, 0x4A, 0x32, 0x05, 0xFD,
1126 : /* x */
1127 : 0x03, 0xF0, 0xEB, 0xA1, 0x62, 0x86, 0xA2, 0xD5, 0x7E, 0xA0, 0x99, 0x11,
1128 : 0x68, 0xD4, 0x99, 0x46, 0x37, 0xE8, 0x34, 0x3E, 0x36,
1129 : /* y */
1130 : 0x00, 0xD5, 0x1F, 0xBC, 0x6C, 0x71, 0xA0, 0x09, 0x4F, 0xA2, 0xCD, 0xD5,
1131 : 0x45, 0xB1, 0x1C, 0x5C, 0x0C, 0x79, 0x73, 0x24, 0xF1,
1132 : /* order */
1133 : 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x92,
1134 : 0xFE, 0x77, 0xE7, 0x0C, 0x12, 0xA4, 0x23, 0x4C, 0x33
1135 : }
1136 : };
1137 :
1138 : static const struct {
1139 : EC_CURVE_DATA h;
1140 : unsigned char data[20 + 25 * 6];
1141 : } _EC_SECG_CHAR2_193R1 = {
1142 : {
1143 : NID_X9_62_characteristic_two_field, 20, 25, 2
1144 : },
1145 : {
1146 : /* seed */
1147 : 0x10, 0x3F, 0xAE, 0xC7, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51,
1148 : 0x75, 0x77, 0x7F, 0xC5, 0xB1, 0x91, 0xEF, 0x30,
1149 : /* p */
1150 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1151 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
1152 : 0x01,
1153 : /* a */
1154 : 0x00, 0x17, 0x85, 0x8F, 0xEB, 0x7A, 0x98, 0x97, 0x51, 0x69, 0xE1, 0x71,
1155 : 0xF7, 0x7B, 0x40, 0x87, 0xDE, 0x09, 0x8A, 0xC8, 0xA9, 0x11, 0xDF, 0x7B,
1156 : 0x01,
1157 : /* b */
1158 : 0x00, 0xFD, 0xFB, 0x49, 0xBF, 0xE6, 0xC3, 0xA8, 0x9F, 0xAC, 0xAD, 0xAA,
1159 : 0x7A, 0x1E, 0x5B, 0xBC, 0x7C, 0xC1, 0xC2, 0xE5, 0xD8, 0x31, 0x47, 0x88,
1160 : 0x14,
1161 : /* x */
1162 : 0x01, 0xF4, 0x81, 0xBC, 0x5F, 0x0F, 0xF8, 0x4A, 0x74, 0xAD, 0x6C, 0xDF,
1163 : 0x6F, 0xDE, 0xF4, 0xBF, 0x61, 0x79, 0x62, 0x53, 0x72, 0xD8, 0xC0, 0xC5,
1164 : 0xE1,
1165 : /* y */
1166 : 0x00, 0x25, 0xE3, 0x99, 0xF2, 0x90, 0x37, 0x12, 0xCC, 0xF3, 0xEA, 0x9E,
1167 : 0x3A, 0x1A, 0xD1, 0x7F, 0xB0, 0xB3, 0x20, 0x1B, 0x6A, 0xF7, 0xCE, 0x1B,
1168 : 0x05,
1169 : /* order */
1170 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1171 : 0x00, 0xC7, 0xF3, 0x4A, 0x77, 0x8F, 0x44, 0x3A, 0xCC, 0x92, 0x0E, 0xBA,
1172 : 0x49
1173 : }
1174 : };
1175 :
1176 : static const struct {
1177 : EC_CURVE_DATA h;
1178 : unsigned char data[20 + 25 * 6];
1179 : } _EC_SECG_CHAR2_193R2 = {
1180 : {
1181 : NID_X9_62_characteristic_two_field, 20, 25, 2
1182 : },
1183 : {
1184 : /* seed */
1185 : 0x10, 0xB7, 0xB4, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56, 0x15, 0x17, 0x51,
1186 : 0x37, 0xC8, 0xA1, 0x6F, 0xD0, 0xDA, 0x22, 0x11,
1187 : /* p */
1188 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1189 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
1190 : 0x01,
1191 : /* a */
1192 : 0x01, 0x63, 0xF3, 0x5A, 0x51, 0x37, 0xC2, 0xCE, 0x3E, 0xA6, 0xED, 0x86,
1193 : 0x67, 0x19, 0x0B, 0x0B, 0xC4, 0x3E, 0xCD, 0x69, 0x97, 0x77, 0x02, 0x70,
1194 : 0x9B,
1195 : /* b */
1196 : 0x00, 0xC9, 0xBB, 0x9E, 0x89, 0x27, 0xD4, 0xD6, 0x4C, 0x37, 0x7E, 0x2A,
1197 : 0xB2, 0x85, 0x6A, 0x5B, 0x16, 0xE3, 0xEF, 0xB7, 0xF6, 0x1D, 0x43, 0x16,
1198 : 0xAE,
1199 : /* x */
1200 : 0x00, 0xD9, 0xB6, 0x7D, 0x19, 0x2E, 0x03, 0x67, 0xC8, 0x03, 0xF3, 0x9E,
1201 : 0x1A, 0x7E, 0x82, 0xCA, 0x14, 0xA6, 0x51, 0x35, 0x0A, 0xAE, 0x61, 0x7E,
1202 : 0x8F,
1203 : /* y */
1204 : 0x01, 0xCE, 0x94, 0x33, 0x56, 0x07, 0xC3, 0x04, 0xAC, 0x29, 0xE7, 0xDE,
1205 : 0xFB, 0xD9, 0xCA, 0x01, 0xF5, 0x96, 0xF9, 0x27, 0x22, 0x4C, 0xDE, 0xCF,
1206 : 0x6C,
1207 : /* order */
1208 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1209 : 0x01, 0x5A, 0xAB, 0x56, 0x1B, 0x00, 0x54, 0x13, 0xCC, 0xD4, 0xEE, 0x99,
1210 : 0xD5
1211 : }
1212 : };
1213 :
1214 : static const struct {
1215 : EC_CURVE_DATA h;
1216 : unsigned char data[0 + 30 * 6];
1217 : } _EC_NIST_CHAR2_233K = {
1218 : {
1219 : NID_X9_62_characteristic_two_field, 0, 30, 4
1220 : },
1221 : {
1222 : /* no seed */
1223 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1224 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
1225 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1226 : /* a */
1227 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1228 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1229 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1230 : /* b */
1231 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1232 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1233 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1234 : /* x */
1235 : 0x01, 0x72, 0x32, 0xBA, 0x85, 0x3A, 0x7E, 0x73, 0x1A, 0xF1, 0x29, 0xF2,
1236 : 0x2F, 0xF4, 0x14, 0x95, 0x63, 0xA4, 0x19, 0xC2, 0x6B, 0xF5, 0x0A, 0x4C,
1237 : 0x9D, 0x6E, 0xEF, 0xAD, 0x61, 0x26,
1238 : /* y */
1239 : 0x01, 0xDB, 0x53, 0x7D, 0xEC, 0xE8, 0x19, 0xB7, 0xF7, 0x0F, 0x55, 0x5A,
1240 : 0x67, 0xC4, 0x27, 0xA8, 0xCD, 0x9B, 0xF1, 0x8A, 0xEB, 0x9B, 0x56, 0xE0,
1241 : 0xC1, 0x10, 0x56, 0xFA, 0xE6, 0xA3,
1242 : /* order */
1243 : 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1244 : 0x00, 0x00, 0x00, 0x06, 0x9D, 0x5B, 0xB9, 0x15, 0xBC, 0xD4, 0x6E, 0xFB,
1245 : 0x1A, 0xD5, 0xF1, 0x73, 0xAB, 0xDF
1246 : }
1247 : };
1248 :
1249 : static const struct {
1250 : EC_CURVE_DATA h;
1251 : unsigned char data[20 + 30 * 6];
1252 : } _EC_NIST_CHAR2_233B = {
1253 : {
1254 : NID_X9_62_characteristic_two_field, 20, 30, 2
1255 : },
1256 : {
1257 : /* seed */
1258 : 0x74, 0xD5, 0x9F, 0xF0, 0x7F, 0x6B, 0x41, 0x3D, 0x0E, 0xA1, 0x4B, 0x34,
1259 : 0x4B, 0x20, 0xA2, 0xDB, 0x04, 0x9B, 0x50, 0xC3,
1260 : /* p */
1261 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1262 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
1263 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1264 : /* a */
1265 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1266 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1267 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1268 : /* b */
1269 : 0x00, 0x66, 0x64, 0x7E, 0xDE, 0x6C, 0x33, 0x2C, 0x7F, 0x8C, 0x09, 0x23,
1270 : 0xBB, 0x58, 0x21, 0x3B, 0x33, 0x3B, 0x20, 0xE9, 0xCE, 0x42, 0x81, 0xFE,
1271 : 0x11, 0x5F, 0x7D, 0x8F, 0x90, 0xAD,
1272 : /* x */
1273 : 0x00, 0xFA, 0xC9, 0xDF, 0xCB, 0xAC, 0x83, 0x13, 0xBB, 0x21, 0x39, 0xF1,
1274 : 0xBB, 0x75, 0x5F, 0xEF, 0x65, 0xBC, 0x39, 0x1F, 0x8B, 0x36, 0xF8, 0xF8,
1275 : 0xEB, 0x73, 0x71, 0xFD, 0x55, 0x8B,
1276 : /* y */
1277 : 0x01, 0x00, 0x6A, 0x08, 0xA4, 0x19, 0x03, 0x35, 0x06, 0x78, 0xE5, 0x85,
1278 : 0x28, 0xBE, 0xBF, 0x8A, 0x0B, 0xEF, 0xF8, 0x67, 0xA7, 0xCA, 0x36, 0x71,
1279 : 0x6F, 0x7E, 0x01, 0xF8, 0x10, 0x52,
1280 : /* order */
1281 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1282 : 0x00, 0x00, 0x00, 0x13, 0xE9, 0x74, 0xE7, 0x2F, 0x8A, 0x69, 0x22, 0x03,
1283 : 0x1D, 0x26, 0x03, 0xCF, 0xE0, 0xD7
1284 : }
1285 : };
1286 :
1287 : static const struct {
1288 : EC_CURVE_DATA h;
1289 : unsigned char data[0 + 30 * 6];
1290 : } _EC_SECG_CHAR2_239K1 = {
1291 : {
1292 : NID_X9_62_characteristic_two_field, 0, 30, 4
1293 : },
1294 : {
1295 : /* no seed */
1296 : 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
1297 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1298 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1299 : /* a */
1300 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1301 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1302 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1303 : /* b */
1304 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1305 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1306 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1307 : /* x */
1308 : 0x29, 0xA0, 0xB6, 0xA8, 0x87, 0xA9, 0x83, 0xE9, 0x73, 0x09, 0x88, 0xA6,
1309 : 0x87, 0x27, 0xA8, 0xB2, 0xD1, 0x26, 0xC4, 0x4C, 0xC2, 0xCC, 0x7B, 0x2A,
1310 : 0x65, 0x55, 0x19, 0x30, 0x35, 0xDC,
1311 : /* y */
1312 : 0x76, 0x31, 0x08, 0x04, 0xF1, 0x2E, 0x54, 0x9B, 0xDB, 0x01, 0x1C, 0x10,
1313 : 0x30, 0x89, 0xE7, 0x35, 0x10, 0xAC, 0xB2, 0x75, 0xFC, 0x31, 0x2A, 0x5D,
1314 : 0xC6, 0xB7, 0x65, 0x53, 0xF0, 0xCA,
1315 : /* order */
1316 : 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1317 : 0x00, 0x00, 0x00, 0x5A, 0x79, 0xFE, 0xC6, 0x7C, 0xB6, 0xE9, 0x1F, 0x1C,
1318 : 0x1D, 0xA8, 0x00, 0xE4, 0x78, 0xA5
1319 : }
1320 : };
1321 :
1322 : static const struct {
1323 : EC_CURVE_DATA h;
1324 : unsigned char data[0 + 36 * 6];
1325 : } _EC_NIST_CHAR2_283K = {
1326 : {
1327 : NID_X9_62_characteristic_two_field, 0, 36, 4
1328 : },
1329 : {
1330 : /* no seed */
1331 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1332 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1333 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA1,
1334 : /* a */
1335 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1336 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1337 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1338 : /* b */
1339 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1340 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1341 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1342 : /* x */
1343 : 0x05, 0x03, 0x21, 0x3F, 0x78, 0xCA, 0x44, 0x88, 0x3F, 0x1A, 0x3B, 0x81,
1344 : 0x62, 0xF1, 0x88, 0xE5, 0x53, 0xCD, 0x26, 0x5F, 0x23, 0xC1, 0x56, 0x7A,
1345 : 0x16, 0x87, 0x69, 0x13, 0xB0, 0xC2, 0xAC, 0x24, 0x58, 0x49, 0x28, 0x36,
1346 : /* y */
1347 : 0x01, 0xCC, 0xDA, 0x38, 0x0F, 0x1C, 0x9E, 0x31, 0x8D, 0x90, 0xF9, 0x5D,
1348 : 0x07, 0xE5, 0x42, 0x6F, 0xE8, 0x7E, 0x45, 0xC0, 0xE8, 0x18, 0x46, 0x98,
1349 : 0xE4, 0x59, 0x62, 0x36, 0x4E, 0x34, 0x11, 0x61, 0x77, 0xDD, 0x22, 0x59,
1350 : /* order */
1351 : 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1352 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE9, 0xAE, 0x2E, 0xD0, 0x75, 0x77,
1353 : 0x26, 0x5D, 0xFF, 0x7F, 0x94, 0x45, 0x1E, 0x06, 0x1E, 0x16, 0x3C, 0x61
1354 : }
1355 : };
1356 :
1357 : static const struct {
1358 : EC_CURVE_DATA h;
1359 : unsigned char data[20 + 36 * 6];
1360 : } _EC_NIST_CHAR2_283B = {
1361 : {
1362 : NID_X9_62_characteristic_two_field, 20, 36, 2
1363 : },
1364 : {
1365 : /* no seed */
1366 : 0x77, 0xE2, 0xB0, 0x73, 0x70, 0xEB, 0x0F, 0x83, 0x2A, 0x6D, 0xD5, 0xB6,
1367 : 0x2D, 0xFC, 0x88, 0xCD, 0x06, 0xBB, 0x84, 0xBE,
1368 : /* p */
1369 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1370 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1371 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA1,
1372 : /* a */
1373 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1374 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1375 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1376 : /* b */
1377 : 0x02, 0x7B, 0x68, 0x0A, 0xC8, 0xB8, 0x59, 0x6D, 0xA5, 0xA4, 0xAF, 0x8A,
1378 : 0x19, 0xA0, 0x30, 0x3F, 0xCA, 0x97, 0xFD, 0x76, 0x45, 0x30, 0x9F, 0xA2,
1379 : 0xA5, 0x81, 0x48, 0x5A, 0xF6, 0x26, 0x3E, 0x31, 0x3B, 0x79, 0xA2, 0xF5,
1380 : /* x */
1381 : 0x05, 0xF9, 0x39, 0x25, 0x8D, 0xB7, 0xDD, 0x90, 0xE1, 0x93, 0x4F, 0x8C,
1382 : 0x70, 0xB0, 0xDF, 0xEC, 0x2E, 0xED, 0x25, 0xB8, 0x55, 0x7E, 0xAC, 0x9C,
1383 : 0x80, 0xE2, 0xE1, 0x98, 0xF8, 0xCD, 0xBE, 0xCD, 0x86, 0xB1, 0x20, 0x53,
1384 : /* y */
1385 : 0x03, 0x67, 0x68, 0x54, 0xFE, 0x24, 0x14, 0x1C, 0xB9, 0x8F, 0xE6, 0xD4,
1386 : 0xB2, 0x0D, 0x02, 0xB4, 0x51, 0x6F, 0xF7, 0x02, 0x35, 0x0E, 0xDD, 0xB0,
1387 : 0x82, 0x67, 0x79, 0xC8, 0x13, 0xF0, 0xDF, 0x45, 0xBE, 0x81, 0x12, 0xF4,
1388 : /* order */
1389 : 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1390 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x90, 0x39, 0x96, 0x60, 0xFC,
1391 : 0x93, 0x8A, 0x90, 0x16, 0x5B, 0x04, 0x2A, 0x7C, 0xEF, 0xAD, 0xB3, 0x07
1392 : }
1393 : };
1394 :
1395 : static const struct {
1396 : EC_CURVE_DATA h;
1397 : unsigned char data[0 + 52 * 6];
1398 : } _EC_NIST_CHAR2_409K = {
1399 : {
1400 : NID_X9_62_characteristic_two_field, 0, 52, 4
1401 : },
1402 : {
1403 : /* no seed */
1404 : /* p */
1405 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1406 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1407 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1408 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1409 : 0x00, 0x00, 0x00, 0x01,
1410 : /* a */
1411 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1412 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1413 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1414 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1415 : 0x00, 0x00, 0x00, 0x00,
1416 : /* b */
1417 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1418 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1419 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1420 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1421 : 0x00, 0x00, 0x00, 0x01,
1422 : /* x */
1423 : 0x00, 0x60, 0xF0, 0x5F, 0x65, 0x8F, 0x49, 0xC1, 0xAD, 0x3A, 0xB1, 0x89,
1424 : 0x0F, 0x71, 0x84, 0x21, 0x0E, 0xFD, 0x09, 0x87, 0xE3, 0x07, 0xC8, 0x4C,
1425 : 0x27, 0xAC, 0xCF, 0xB8, 0xF9, 0xF6, 0x7C, 0xC2, 0xC4, 0x60, 0x18, 0x9E,
1426 : 0xB5, 0xAA, 0xAA, 0x62, 0xEE, 0x22, 0x2E, 0xB1, 0xB3, 0x55, 0x40, 0xCF,
1427 : 0xE9, 0x02, 0x37, 0x46,
1428 : /* y */
1429 : 0x01, 0xE3, 0x69, 0x05, 0x0B, 0x7C, 0x4E, 0x42, 0xAC, 0xBA, 0x1D, 0xAC,
1430 : 0xBF, 0x04, 0x29, 0x9C, 0x34, 0x60, 0x78, 0x2F, 0x91, 0x8E, 0xA4, 0x27,
1431 : 0xE6, 0x32, 0x51, 0x65, 0xE9, 0xEA, 0x10, 0xE3, 0xDA, 0x5F, 0x6C, 0x42,
1432 : 0xE9, 0xC5, 0x52, 0x15, 0xAA, 0x9C, 0xA2, 0x7A, 0x58, 0x63, 0xEC, 0x48,
1433 : 0xD8, 0xE0, 0x28, 0x6B,
1434 : /* order */
1435 : 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1436 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1437 : 0xFF, 0xFF, 0xFE, 0x5F, 0x83, 0xB2, 0xD4, 0xEA, 0x20, 0x40, 0x0E, 0xC4,
1438 : 0x55, 0x7D, 0x5E, 0xD3, 0xE3, 0xE7, 0xCA, 0x5B, 0x4B, 0x5C, 0x83, 0xB8,
1439 : 0xE0, 0x1E, 0x5F, 0xCF
1440 : }
1441 : };
1442 :
1443 : static const struct {
1444 : EC_CURVE_DATA h;
1445 : unsigned char data[20 + 52 * 6];
1446 : } _EC_NIST_CHAR2_409B = {
1447 : {
1448 : NID_X9_62_characteristic_two_field, 20, 52, 2
1449 : },
1450 : {
1451 : /* seed */
1452 : 0x40, 0x99, 0xB5, 0xA4, 0x57, 0xF9, 0xD6, 0x9F, 0x79, 0x21, 0x3D, 0x09,
1453 : 0x4C, 0x4B, 0xCD, 0x4D, 0x42, 0x62, 0x21, 0x0B,
1454 : /* p */
1455 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1456 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1457 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1458 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1459 : 0x00, 0x00, 0x00, 0x01,
1460 : /* a */
1461 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1462 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1463 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1464 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1465 : 0x00, 0x00, 0x00, 0x01,
1466 : /* b */
1467 : 0x00, 0x21, 0xA5, 0xC2, 0xC8, 0xEE, 0x9F, 0xEB, 0x5C, 0x4B, 0x9A, 0x75,
1468 : 0x3B, 0x7B, 0x47, 0x6B, 0x7F, 0xD6, 0x42, 0x2E, 0xF1, 0xF3, 0xDD, 0x67,
1469 : 0x47, 0x61, 0xFA, 0x99, 0xD6, 0xAC, 0x27, 0xC8, 0xA9, 0xA1, 0x97, 0xB2,
1470 : 0x72, 0x82, 0x2F, 0x6C, 0xD5, 0x7A, 0x55, 0xAA, 0x4F, 0x50, 0xAE, 0x31,
1471 : 0x7B, 0x13, 0x54, 0x5F,
1472 : /* x */
1473 : 0x01, 0x5D, 0x48, 0x60, 0xD0, 0x88, 0xDD, 0xB3, 0x49, 0x6B, 0x0C, 0x60,
1474 : 0x64, 0x75, 0x62, 0x60, 0x44, 0x1C, 0xDE, 0x4A, 0xF1, 0x77, 0x1D, 0x4D,
1475 : 0xB0, 0x1F, 0xFE, 0x5B, 0x34, 0xE5, 0x97, 0x03, 0xDC, 0x25, 0x5A, 0x86,
1476 : 0x8A, 0x11, 0x80, 0x51, 0x56, 0x03, 0xAE, 0xAB, 0x60, 0x79, 0x4E, 0x54,
1477 : 0xBB, 0x79, 0x96, 0xA7,
1478 : /* y */
1479 : 0x00, 0x61, 0xB1, 0xCF, 0xAB, 0x6B, 0xE5, 0xF3, 0x2B, 0xBF, 0xA7, 0x83,
1480 : 0x24, 0xED, 0x10, 0x6A, 0x76, 0x36, 0xB9, 0xC5, 0xA7, 0xBD, 0x19, 0x8D,
1481 : 0x01, 0x58, 0xAA, 0x4F, 0x54, 0x88, 0xD0, 0x8F, 0x38, 0x51, 0x4F, 0x1F,
1482 : 0xDF, 0x4B, 0x4F, 0x40, 0xD2, 0x18, 0x1B, 0x36, 0x81, 0xC3, 0x64, 0xBA,
1483 : 0x02, 0x73, 0xC7, 0x06,
1484 : /* order */
1485 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1486 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1487 : 0x00, 0x00, 0x01, 0xE2, 0xAA, 0xD6, 0xA6, 0x12, 0xF3, 0x33, 0x07, 0xBE,
1488 : 0x5F, 0xA4, 0x7C, 0x3C, 0x9E, 0x05, 0x2F, 0x83, 0x81, 0x64, 0xCD, 0x37,
1489 : 0xD9, 0xA2, 0x11, 0x73
1490 : }
1491 : };
1492 :
1493 : static const struct {
1494 : EC_CURVE_DATA h;
1495 : unsigned char data[0 + 72 * 6];
1496 : } _EC_NIST_CHAR2_571K = {
1497 : {
1498 : NID_X9_62_characteristic_two_field, 0, 72, 4
1499 : },
1500 : {
1501 : /* no seed */
1502 : /* p */
1503 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1504 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1505 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1506 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1507 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1508 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x25,
1509 : /* a */
1510 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1511 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1512 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1513 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1514 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1515 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1516 : /* b */
1517 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1518 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1519 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1520 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1521 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1522 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1523 : /* x */
1524 : 0x02, 0x6E, 0xB7, 0xA8, 0x59, 0x92, 0x3F, 0xBC, 0x82, 0x18, 0x96, 0x31,
1525 : 0xF8, 0x10, 0x3F, 0xE4, 0xAC, 0x9C, 0xA2, 0x97, 0x00, 0x12, 0xD5, 0xD4,
1526 : 0x60, 0x24, 0x80, 0x48, 0x01, 0x84, 0x1C, 0xA4, 0x43, 0x70, 0x95, 0x84,
1527 : 0x93, 0xB2, 0x05, 0xE6, 0x47, 0xDA, 0x30, 0x4D, 0xB4, 0xCE, 0xB0, 0x8C,
1528 : 0xBB, 0xD1, 0xBA, 0x39, 0x49, 0x47, 0x76, 0xFB, 0x98, 0x8B, 0x47, 0x17,
1529 : 0x4D, 0xCA, 0x88, 0xC7, 0xE2, 0x94, 0x52, 0x83, 0xA0, 0x1C, 0x89, 0x72,
1530 : /* y */
1531 : 0x03, 0x49, 0xDC, 0x80, 0x7F, 0x4F, 0xBF, 0x37, 0x4F, 0x4A, 0xEA, 0xDE,
1532 : 0x3B, 0xCA, 0x95, 0x31, 0x4D, 0xD5, 0x8C, 0xEC, 0x9F, 0x30, 0x7A, 0x54,
1533 : 0xFF, 0xC6, 0x1E, 0xFC, 0x00, 0x6D, 0x8A, 0x2C, 0x9D, 0x49, 0x79, 0xC0,
1534 : 0xAC, 0x44, 0xAE, 0xA7, 0x4F, 0xBE, 0xBB, 0xB9, 0xF7, 0x72, 0xAE, 0xDC,
1535 : 0xB6, 0x20, 0xB0, 0x1A, 0x7B, 0xA7, 0xAF, 0x1B, 0x32, 0x04, 0x30, 0xC8,
1536 : 0x59, 0x19, 0x84, 0xF6, 0x01, 0xCD, 0x4C, 0x14, 0x3E, 0xF1, 0xC7, 0xA3,
1537 : /* order */
1538 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1539 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1540 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1541 : 0x13, 0x18, 0x50, 0xE1, 0xF1, 0x9A, 0x63, 0xE4, 0xB3, 0x91, 0xA8, 0xDB,
1542 : 0x91, 0x7F, 0x41, 0x38, 0xB6, 0x30, 0xD8, 0x4B, 0xE5, 0xD6, 0x39, 0x38,
1543 : 0x1E, 0x91, 0xDE, 0xB4, 0x5C, 0xFE, 0x77, 0x8F, 0x63, 0x7C, 0x10, 0x01
1544 : }
1545 : };
1546 :
1547 : static const struct {
1548 : EC_CURVE_DATA h;
1549 : unsigned char data[20 + 72 * 6];
1550 : } _EC_NIST_CHAR2_571B = {
1551 : {
1552 : NID_X9_62_characteristic_two_field, 20, 72, 2
1553 : },
1554 : {
1555 : /* seed */
1556 : 0x2A, 0xA0, 0x58, 0xF7, 0x3A, 0x0E, 0x33, 0xAB, 0x48, 0x6B, 0x0F, 0x61,
1557 : 0x04, 0x10, 0xC5, 0x3A, 0x7F, 0x13, 0x23, 0x10,
1558 : /* p */
1559 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1560 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1561 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1562 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1563 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1564 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x25,
1565 : /* a */
1566 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1567 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1568 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1569 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1570 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1571 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1572 : /* b */
1573 : 0x02, 0xF4, 0x0E, 0x7E, 0x22, 0x21, 0xF2, 0x95, 0xDE, 0x29, 0x71, 0x17,
1574 : 0xB7, 0xF3, 0xD6, 0x2F, 0x5C, 0x6A, 0x97, 0xFF, 0xCB, 0x8C, 0xEF, 0xF1,
1575 : 0xCD, 0x6B, 0xA8, 0xCE, 0x4A, 0x9A, 0x18, 0xAD, 0x84, 0xFF, 0xAB, 0xBD,
1576 : 0x8E, 0xFA, 0x59, 0x33, 0x2B, 0xE7, 0xAD, 0x67, 0x56, 0xA6, 0x6E, 0x29,
1577 : 0x4A, 0xFD, 0x18, 0x5A, 0x78, 0xFF, 0x12, 0xAA, 0x52, 0x0E, 0x4D, 0xE7,
1578 : 0x39, 0xBA, 0xCA, 0x0C, 0x7F, 0xFE, 0xFF, 0x7F, 0x29, 0x55, 0x72, 0x7A,
1579 : /* x */
1580 : 0x03, 0x03, 0x00, 0x1D, 0x34, 0xB8, 0x56, 0x29, 0x6C, 0x16, 0xC0, 0xD4,
1581 : 0x0D, 0x3C, 0xD7, 0x75, 0x0A, 0x93, 0xD1, 0xD2, 0x95, 0x5F, 0xA8, 0x0A,
1582 : 0xA5, 0xF4, 0x0F, 0xC8, 0xDB, 0x7B, 0x2A, 0xBD, 0xBD, 0xE5, 0x39, 0x50,
1583 : 0xF4, 0xC0, 0xD2, 0x93, 0xCD, 0xD7, 0x11, 0xA3, 0x5B, 0x67, 0xFB, 0x14,
1584 : 0x99, 0xAE, 0x60, 0x03, 0x86, 0x14, 0xF1, 0x39, 0x4A, 0xBF, 0xA3, 0xB4,
1585 : 0xC8, 0x50, 0xD9, 0x27, 0xE1, 0xE7, 0x76, 0x9C, 0x8E, 0xEC, 0x2D, 0x19,
1586 : /* y */
1587 : 0x03, 0x7B, 0xF2, 0x73, 0x42, 0xDA, 0x63, 0x9B, 0x6D, 0xCC, 0xFF, 0xFE,
1588 : 0xB7, 0x3D, 0x69, 0xD7, 0x8C, 0x6C, 0x27, 0xA6, 0x00, 0x9C, 0xBB, 0xCA,
1589 : 0x19, 0x80, 0xF8, 0x53, 0x39, 0x21, 0xE8, 0xA6, 0x84, 0x42, 0x3E, 0x43,
1590 : 0xBA, 0xB0, 0x8A, 0x57, 0x62, 0x91, 0xAF, 0x8F, 0x46, 0x1B, 0xB2, 0xA8,
1591 : 0xB3, 0x53, 0x1D, 0x2F, 0x04, 0x85, 0xC1, 0x9B, 0x16, 0xE2, 0xF1, 0x51,
1592 : 0x6E, 0x23, 0xDD, 0x3C, 0x1A, 0x48, 0x27, 0xAF, 0x1B, 0x8A, 0xC1, 0x5B,
1593 : /* order */
1594 : 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1595 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1596 : 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1597 : 0xE6, 0x61, 0xCE, 0x18, 0xFF, 0x55, 0x98, 0x73, 0x08, 0x05, 0x9B, 0x18,
1598 : 0x68, 0x23, 0x85, 0x1E, 0xC7, 0xDD, 0x9C, 0xA1, 0x16, 0x1D, 0xE9, 0x3D,
1599 : 0x51, 0x74, 0xD6, 0x6E, 0x83, 0x82, 0xE9, 0xBB, 0x2F, 0xE8, 0x4E, 0x47
1600 : }
1601 : };
1602 :
1603 : static const struct {
1604 : EC_CURVE_DATA h;
1605 : unsigned char data[20 + 21 * 6];
1606 : } _EC_X9_62_CHAR2_163V1 = {
1607 : {
1608 : NID_X9_62_characteristic_two_field, 20, 21, 2
1609 : },
1610 : {
1611 : /* seed */
1612 : 0xD2, 0xC0, 0xFB, 0x15, 0x76, 0x08, 0x60, 0xDE, 0xF1, 0xEE, 0xF4, 0xD6,
1613 : 0x96, 0xE6, 0x76, 0x87, 0x56, 0x15, 0x17, 0x54,
1614 : /* p */
1615 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1616 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
1617 : /* a */
1618 : 0x07, 0x25, 0x46, 0xB5, 0x43, 0x52, 0x34, 0xA4, 0x22, 0xE0, 0x78, 0x96,
1619 : 0x75, 0xF4, 0x32, 0xC8, 0x94, 0x35, 0xDE, 0x52, 0x42,
1620 : /* b */
1621 : 0x00, 0xC9, 0x51, 0x7D, 0x06, 0xD5, 0x24, 0x0D, 0x3C, 0xFF, 0x38, 0xC7,
1622 : 0x4B, 0x20, 0xB6, 0xCD, 0x4D, 0x6F, 0x9D, 0xD4, 0xD9,
1623 : /* x */
1624 : 0x07, 0xAF, 0x69, 0x98, 0x95, 0x46, 0x10, 0x3D, 0x79, 0x32, 0x9F, 0xCC,
1625 : 0x3D, 0x74, 0x88, 0x0F, 0x33, 0xBB, 0xE8, 0x03, 0xCB,
1626 : /* y */
1627 : 0x01, 0xEC, 0x23, 0x21, 0x1B, 0x59, 0x66, 0xAD, 0xEA, 0x1D, 0x3F, 0x87,
1628 : 0xF7, 0xEA, 0x58, 0x48, 0xAE, 0xF0, 0xB7, 0xCA, 0x9F,
1629 : /* order */
1630 : 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE6,
1631 : 0x0F, 0xC8, 0x82, 0x1C, 0xC7, 0x4D, 0xAE, 0xAF, 0xC1
1632 : }
1633 : };
1634 :
1635 : static const struct {
1636 : EC_CURVE_DATA h;
1637 : unsigned char data[20 + 21 * 6];
1638 : } _EC_X9_62_CHAR2_163V2 = {
1639 : {
1640 : NID_X9_62_characteristic_two_field, 20, 21, 2
1641 : },
1642 : {
1643 : /* seed */
1644 : 0x53, 0x81, 0x4C, 0x05, 0x0D, 0x44, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1645 : 0x15, 0x17, 0x58, 0x0C, 0xA4, 0xE2, 0x9F, 0xFD,
1646 : /* p */
1647 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1648 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
1649 : /* a */
1650 : 0x01, 0x08, 0xB3, 0x9E, 0x77, 0xC4, 0xB1, 0x08, 0xBE, 0xD9, 0x81, 0xED,
1651 : 0x0E, 0x89, 0x0E, 0x11, 0x7C, 0x51, 0x1C, 0xF0, 0x72,
1652 : /* b */
1653 : 0x06, 0x67, 0xAC, 0xEB, 0x38, 0xAF, 0x4E, 0x48, 0x8C, 0x40, 0x74, 0x33,
1654 : 0xFF, 0xAE, 0x4F, 0x1C, 0x81, 0x16, 0x38, 0xDF, 0x20,
1655 : /* x */
1656 : 0x00, 0x24, 0x26, 0x6E, 0x4E, 0xB5, 0x10, 0x6D, 0x0A, 0x96, 0x4D, 0x92,
1657 : 0xC4, 0x86, 0x0E, 0x26, 0x71, 0xDB, 0x9B, 0x6C, 0xC5,
1658 : /* y */
1659 : 0x07, 0x9F, 0x68, 0x4D, 0xDF, 0x66, 0x84, 0xC5, 0xCD, 0x25, 0x8B, 0x38,
1660 : 0x90, 0x02, 0x1B, 0x23, 0x86, 0xDF, 0xD1, 0x9F, 0xC5,
1661 : /* order */
1662 : 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF6,
1663 : 0x4D, 0xE1, 0x15, 0x1A, 0xDB, 0xB7, 0x8F, 0x10, 0xA7
1664 : }
1665 : };
1666 :
1667 : static const struct {
1668 : EC_CURVE_DATA h;
1669 : unsigned char data[20 + 21 * 6];
1670 : } _EC_X9_62_CHAR2_163V3 = {
1671 : {
1672 : NID_X9_62_characteristic_two_field, 20, 21, 2
1673 : },
1674 : {
1675 : /* seed */
1676 : 0x50, 0xCB, 0xF1, 0xD9, 0x5C, 0xA9, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75,
1677 : 0x61, 0x51, 0x75, 0xF1, 0x6A, 0x36, 0xA3, 0xB8,
1678 : /* p */
1679 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1680 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
1681 : /* a */
1682 : 0x07, 0xA5, 0x26, 0xC6, 0x3D, 0x3E, 0x25, 0xA2, 0x56, 0xA0, 0x07, 0x69,
1683 : 0x9F, 0x54, 0x47, 0xE3, 0x2A, 0xE4, 0x56, 0xB5, 0x0E,
1684 : /* b */
1685 : 0x03, 0xF7, 0x06, 0x17, 0x98, 0xEB, 0x99, 0xE2, 0x38, 0xFD, 0x6F, 0x1B,
1686 : 0xF9, 0x5B, 0x48, 0xFE, 0xEB, 0x48, 0x54, 0x25, 0x2B,
1687 : /* x */
1688 : 0x02, 0xF9, 0xF8, 0x7B, 0x7C, 0x57, 0x4D, 0x0B, 0xDE, 0xCF, 0x8A, 0x22,
1689 : 0xE6, 0x52, 0x47, 0x75, 0xF9, 0x8C, 0xDE, 0xBD, 0xCB,
1690 : /* y */
1691 : 0x05, 0xB9, 0x35, 0x59, 0x0C, 0x15, 0x5E, 0x17, 0xEA, 0x48, 0xEB, 0x3F,
1692 : 0xF3, 0x71, 0x8B, 0x89, 0x3D, 0xF5, 0x9A, 0x05, 0xD0,
1693 : /* order */
1694 : 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1A,
1695 : 0xEE, 0x14, 0x0F, 0x11, 0x0A, 0xFF, 0x96, 0x13, 0x09
1696 : }
1697 : };
1698 :
1699 : static const struct {
1700 : EC_CURVE_DATA h;
1701 : unsigned char data[0 + 23 * 6];
1702 : } _EC_X9_62_CHAR2_176V1 = {
1703 : {
1704 : NID_X9_62_characteristic_two_field, 0, 23, 0xFF6E
1705 : },
1706 : {
1707 : /* no seed */
1708 : /* p */
1709 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1710 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07,
1711 : /* a */
1712 : 0x00, 0xE4, 0xE6, 0xDB, 0x29, 0x95, 0x06, 0x5C, 0x40, 0x7D, 0x9D, 0x39,
1713 : 0xB8, 0xD0, 0x96, 0x7B, 0x96, 0x70, 0x4B, 0xA8, 0xE9, 0xC9, 0x0B,
1714 : /* b */
1715 : 0x00, 0x5D, 0xDA, 0x47, 0x0A, 0xBE, 0x64, 0x14, 0xDE, 0x8E, 0xC1, 0x33,
1716 : 0xAE, 0x28, 0xE9, 0xBB, 0xD7, 0xFC, 0xEC, 0x0A, 0xE0, 0xFF, 0xF2,
1717 : /* x */
1718 : 0x00, 0x8D, 0x16, 0xC2, 0x86, 0x67, 0x98, 0xB6, 0x00, 0xF9, 0xF0, 0x8B,
1719 : 0xB4, 0xA8, 0xE8, 0x60, 0xF3, 0x29, 0x8C, 0xE0, 0x4A, 0x57, 0x98,
1720 : /* y */
1721 : 0x00, 0x6F, 0xA4, 0x53, 0x9C, 0x2D, 0xAD, 0xDD, 0xD6, 0xBA, 0xB5, 0x16,
1722 : 0x7D, 0x61, 0xB4, 0x36, 0xE1, 0xD9, 0x2B, 0xB1, 0x6A, 0x56, 0x2C,
1723 : /* order */
1724 : 0x00, 0x00, 0x01, 0x00, 0x92, 0x53, 0x73, 0x97, 0xEC, 0xA4, 0xF6, 0x14,
1725 : 0x57, 0x99, 0xD6, 0x2B, 0x0A, 0x19, 0xCE, 0x06, 0xFE, 0x26, 0xAD
1726 : }
1727 : };
1728 :
1729 : static const struct {
1730 : EC_CURVE_DATA h;
1731 : unsigned char data[20 + 24 * 6];
1732 : } _EC_X9_62_CHAR2_191V1 = {
1733 : {
1734 : NID_X9_62_characteristic_two_field, 20, 24, 2
1735 : },
1736 : {
1737 : /* seed */
1738 : 0x4E, 0x13, 0xCA, 0x54, 0x27, 0x44, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1739 : 0x15, 0x17, 0x55, 0x2F, 0x27, 0x9A, 0x8C, 0x84,
1740 : /* p */
1741 : 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1742 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
1743 : /* a */
1744 : 0x28, 0x66, 0x53, 0x7B, 0x67, 0x67, 0x52, 0x63, 0x6A, 0x68, 0xF5, 0x65,
1745 : 0x54, 0xE1, 0x26, 0x40, 0x27, 0x6B, 0x64, 0x9E, 0xF7, 0x52, 0x62, 0x67,
1746 : /* b */
1747 : 0x2E, 0x45, 0xEF, 0x57, 0x1F, 0x00, 0x78, 0x6F, 0x67, 0xB0, 0x08, 0x1B,
1748 : 0x94, 0x95, 0xA3, 0xD9, 0x54, 0x62, 0xF5, 0xDE, 0x0A, 0xA1, 0x85, 0xEC,
1749 : /* x */
1750 : 0x36, 0xB3, 0xDA, 0xF8, 0xA2, 0x32, 0x06, 0xF9, 0xC4, 0xF2, 0x99, 0xD7,
1751 : 0xB2, 0x1A, 0x9C, 0x36, 0x91, 0x37, 0xF2, 0xC8, 0x4A, 0xE1, 0xAA, 0x0D,
1752 : /* y */
1753 : 0x76, 0x5B, 0xE7, 0x34, 0x33, 0xB3, 0xF9, 0x5E, 0x33, 0x29, 0x32, 0xE7,
1754 : 0x0E, 0xA2, 0x45, 0xCA, 0x24, 0x18, 0xEA, 0x0E, 0xF9, 0x80, 0x18, 0xFB,
1755 : /* order */
1756 : 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1757 : 0x04, 0xA2, 0x0E, 0x90, 0xC3, 0x90, 0x67, 0xC8, 0x93, 0xBB, 0xB9, 0xA5
1758 : }
1759 : };
1760 :
1761 : static const struct {
1762 : EC_CURVE_DATA h;
1763 : unsigned char data[20 + 24 * 6];
1764 : } _EC_X9_62_CHAR2_191V2 = {
1765 : {
1766 : NID_X9_62_characteristic_two_field, 20, 24, 4
1767 : },
1768 : {
1769 : /* seed */
1770 : 0x08, 0x71, 0xEF, 0x2F, 0xEF, 0x24, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1771 : 0x15, 0x17, 0x58, 0xBE, 0xE0, 0xD9, 0x5C, 0x15,
1772 : /* p */
1773 : 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1774 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
1775 : /* a */
1776 : 0x40, 0x10, 0x28, 0x77, 0x4D, 0x77, 0x77, 0xC7, 0xB7, 0x66, 0x6D, 0x13,
1777 : 0x66, 0xEA, 0x43, 0x20, 0x71, 0x27, 0x4F, 0x89, 0xFF, 0x01, 0xE7, 0x18,
1778 : /* b */
1779 : 0x06, 0x20, 0x04, 0x8D, 0x28, 0xBC, 0xBD, 0x03, 0xB6, 0x24, 0x9C, 0x99,
1780 : 0x18, 0x2B, 0x7C, 0x8C, 0xD1, 0x97, 0x00, 0xC3, 0x62, 0xC4, 0x6A, 0x01,
1781 : /* x */
1782 : 0x38, 0x09, 0xB2, 0xB7, 0xCC, 0x1B, 0x28, 0xCC, 0x5A, 0x87, 0x92, 0x6A,
1783 : 0xAD, 0x83, 0xFD, 0x28, 0x78, 0x9E, 0x81, 0xE2, 0xC9, 0xE3, 0xBF, 0x10,
1784 : /* y */
1785 : 0x17, 0x43, 0x43, 0x86, 0x62, 0x6D, 0x14, 0xF3, 0xDB, 0xF0, 0x17, 0x60,
1786 : 0xD9, 0x21, 0x3A, 0x3E, 0x1C, 0xF3, 0x7A, 0xEC, 0x43, 0x7D, 0x66, 0x8A,
1787 : /* order */
1788 : 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1789 : 0x50, 0x50, 0x8C, 0xB8, 0x9F, 0x65, 0x28, 0x24, 0xE0, 0x6B, 0x81, 0x73
1790 : }
1791 : };
1792 :
1793 : static const struct {
1794 : EC_CURVE_DATA h;
1795 : unsigned char data[20 + 24 * 6];
1796 : } _EC_X9_62_CHAR2_191V3 = {
1797 : {
1798 : NID_X9_62_characteristic_two_field, 20, 24, 6
1799 : },
1800 : {
1801 : /* seed */
1802 : 0xE0, 0x53, 0x51, 0x2D, 0xC6, 0x84, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1803 : 0x15, 0x17, 0x50, 0x67, 0xAE, 0x78, 0x6D, 0x1F,
1804 : /* p */
1805 : 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1806 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
1807 : /* a */
1808 : 0x6C, 0x01, 0x07, 0x47, 0x56, 0x09, 0x91, 0x22, 0x22, 0x10, 0x56, 0x91,
1809 : 0x1C, 0x77, 0xD7, 0x7E, 0x77, 0xA7, 0x77, 0xE7, 0xE7, 0xE7, 0x7F, 0xCB,
1810 : /* b */
1811 : 0x71, 0xFE, 0x1A, 0xF9, 0x26, 0xCF, 0x84, 0x79, 0x89, 0xEF, 0xEF, 0x8D,
1812 : 0xB4, 0x59, 0xF6, 0x63, 0x94, 0xD9, 0x0F, 0x32, 0xAD, 0x3F, 0x15, 0xE8,
1813 : /* x */
1814 : 0x37, 0x5D, 0x4C, 0xE2, 0x4F, 0xDE, 0x43, 0x44, 0x89, 0xDE, 0x87, 0x46,
1815 : 0xE7, 0x17, 0x86, 0x01, 0x50, 0x09, 0xE6, 0x6E, 0x38, 0xA9, 0x26, 0xDD,
1816 : /* y */
1817 : 0x54, 0x5A, 0x39, 0x17, 0x61, 0x96, 0x57, 0x5D, 0x98, 0x59, 0x99, 0x36,
1818 : 0x6E, 0x6A, 0xD3, 0x4C, 0xE0, 0xA7, 0x7C, 0xD7, 0x12, 0x7B, 0x06, 0xBE,
1819 : /* order */
1820 : 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1821 : 0x61, 0x0C, 0x0B, 0x19, 0x68, 0x12, 0xBF, 0xB6, 0x28, 0x8A, 0x3E, 0xA3
1822 : }
1823 : };
1824 :
1825 : static const struct {
1826 : EC_CURVE_DATA h;
1827 : unsigned char data[0 + 27 * 6];
1828 : } _EC_X9_62_CHAR2_208W1 = {
1829 : {
1830 : NID_X9_62_characteristic_two_field, 0, 27, 0xFE48
1831 : },
1832 : {
1833 : /* no seed */
1834 : /* p */
1835 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1836 : 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1837 : 0x00, 0x00, 0x07,
1838 : /* a */
1839 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1840 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1841 : 0x00, 0x00, 0x00,
1842 : /* b */
1843 : 0x00, 0xC8, 0x61, 0x9E, 0xD4, 0x5A, 0x62, 0xE6, 0x21, 0x2E, 0x11, 0x60,
1844 : 0x34, 0x9E, 0x2B, 0xFA, 0x84, 0x44, 0x39, 0xFA, 0xFC, 0x2A, 0x3F, 0xD1,
1845 : 0x63, 0x8F, 0x9E,
1846 : /* x */
1847 : 0x00, 0x89, 0xFD, 0xFB, 0xE4, 0xAB, 0xE1, 0x93, 0xDF, 0x95, 0x59, 0xEC,
1848 : 0xF0, 0x7A, 0xC0, 0xCE, 0x78, 0x55, 0x4E, 0x27, 0x84, 0xEB, 0x8C, 0x1E,
1849 : 0xD1, 0xA5, 0x7A,
1850 : /* y */
1851 : 0x00, 0x0F, 0x55, 0xB5, 0x1A, 0x06, 0xE7, 0x8E, 0x9A, 0xC3, 0x8A, 0x03,
1852 : 0x5F, 0xF5, 0x20, 0xD8, 0xB0, 0x17, 0x81, 0xBE, 0xB1, 0xA6, 0xBB, 0x08,
1853 : 0x61, 0x7D, 0xE3,
1854 : /* order */
1855 : 0x00, 0x00, 0x01, 0x01, 0xBA, 0xF9, 0x5C, 0x97, 0x23, 0xC5, 0x7B, 0x6C,
1856 : 0x21, 0xDA, 0x2E, 0xFF, 0x2D, 0x5E, 0xD5, 0x88, 0xBD, 0xD5, 0x71, 0x7E,
1857 : 0x21, 0x2F, 0x9D
1858 : }
1859 : };
1860 :
1861 : static const struct {
1862 : EC_CURVE_DATA h;
1863 : unsigned char data[20 + 30 * 6];
1864 : } _EC_X9_62_CHAR2_239V1 = {
1865 : {
1866 : NID_X9_62_characteristic_two_field, 20, 30, 4
1867 : },
1868 : {
1869 : /* seed */
1870 : 0xD3, 0x4B, 0x9A, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75,
1871 : 0xCA, 0x71, 0xB9, 0x20, 0xBF, 0xEF, 0xB0, 0x5D,
1872 : /* p */
1873 : 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1874 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1875 : 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
1876 : /* a */
1877 : 0x32, 0x01, 0x08, 0x57, 0x07, 0x7C, 0x54, 0x31, 0x12, 0x3A, 0x46, 0xB8,
1878 : 0x08, 0x90, 0x67, 0x56, 0xF5, 0x43, 0x42, 0x3E, 0x8D, 0x27, 0x87, 0x75,
1879 : 0x78, 0x12, 0x57, 0x78, 0xAC, 0x76,
1880 : /* b */
1881 : 0x79, 0x04, 0x08, 0xF2, 0xEE, 0xDA, 0xF3, 0x92, 0xB0, 0x12, 0xED, 0xEF,
1882 : 0xB3, 0x39, 0x2F, 0x30, 0xF4, 0x32, 0x7C, 0x0C, 0xA3, 0xF3, 0x1F, 0xC3,
1883 : 0x83, 0xC4, 0x22, 0xAA, 0x8C, 0x16,
1884 : /* x */
1885 : 0x57, 0x92, 0x70, 0x98, 0xFA, 0x93, 0x2E, 0x7C, 0x0A, 0x96, 0xD3, 0xFD,
1886 : 0x5B, 0x70, 0x6E, 0xF7, 0xE5, 0xF5, 0xC1, 0x56, 0xE1, 0x6B, 0x7E, 0x7C,
1887 : 0x86, 0x03, 0x85, 0x52, 0xE9, 0x1D,
1888 : /* y */
1889 : 0x61, 0xD8, 0xEE, 0x50, 0x77, 0xC3, 0x3F, 0xEC, 0xF6, 0xF1, 0xA1, 0x6B,
1890 : 0x26, 0x8D, 0xE4, 0x69, 0xC3, 0xC7, 0x74, 0x4E, 0xA9, 0xA9, 0x71, 0x64,
1891 : 0x9F, 0xC7, 0xA9, 0x61, 0x63, 0x05,
1892 : /* order */
1893 : 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1894 : 0x00, 0x00, 0x00, 0x0F, 0x4D, 0x42, 0xFF, 0xE1, 0x49, 0x2A, 0x49, 0x93,
1895 : 0xF1, 0xCA, 0xD6, 0x66, 0xE4, 0x47
1896 : }
1897 : };
1898 :
1899 : static const struct {
1900 : EC_CURVE_DATA h;
1901 : unsigned char data[20 + 30 * 6];
1902 : } _EC_X9_62_CHAR2_239V2 = {
1903 : {
1904 : NID_X9_62_characteristic_two_field, 20, 30, 6
1905 : },
1906 : {
1907 : /* seed */
1908 : 0x2A, 0xA6, 0x98, 0x2F, 0xDF, 0xA4, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1909 : 0x15, 0x17, 0x5D, 0x26, 0x67, 0x27, 0x27, 0x7D,
1910 : /* p */
1911 : 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1912 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1913 : 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
1914 : /* a */
1915 : 0x42, 0x30, 0x01, 0x77, 0x57, 0xA7, 0x67, 0xFA, 0xE4, 0x23, 0x98, 0x56,
1916 : 0x9B, 0x74, 0x63, 0x25, 0xD4, 0x53, 0x13, 0xAF, 0x07, 0x66, 0x26, 0x64,
1917 : 0x79, 0xB7, 0x56, 0x54, 0xE6, 0x5F,
1918 : /* b */
1919 : 0x50, 0x37, 0xEA, 0x65, 0x41, 0x96, 0xCF, 0xF0, 0xCD, 0x82, 0xB2, 0xC1,
1920 : 0x4A, 0x2F, 0xCF, 0x2E, 0x3F, 0xF8, 0x77, 0x52, 0x85, 0xB5, 0x45, 0x72,
1921 : 0x2F, 0x03, 0xEA, 0xCD, 0xB7, 0x4B,
1922 : /* x */
1923 : 0x28, 0xF9, 0xD0, 0x4E, 0x90, 0x00, 0x69, 0xC8, 0xDC, 0x47, 0xA0, 0x85,
1924 : 0x34, 0xFE, 0x76, 0xD2, 0xB9, 0x00, 0xB7, 0xD7, 0xEF, 0x31, 0xF5, 0x70,
1925 : 0x9F, 0x20, 0x0C, 0x4C, 0xA2, 0x05,
1926 : /* y */
1927 : 0x56, 0x67, 0x33, 0x4C, 0x45, 0xAF, 0xF3, 0xB5, 0xA0, 0x3B, 0xAD, 0x9D,
1928 : 0xD7, 0x5E, 0x2C, 0x71, 0xA9, 0x93, 0x62, 0x56, 0x7D, 0x54, 0x53, 0xF7,
1929 : 0xFA, 0x6E, 0x22, 0x7E, 0xC8, 0x33,
1930 : /* order */
1931 : 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1932 : 0x55, 0x55, 0x55, 0x3C, 0x6F, 0x28, 0x85, 0x25, 0x9C, 0x31, 0xE3, 0xFC,
1933 : 0xDF, 0x15, 0x46, 0x24, 0x52, 0x2D
1934 : }
1935 : };
1936 :
1937 : static const struct {
1938 : EC_CURVE_DATA h;
1939 : unsigned char data[20 + 30 * 6];
1940 : } _EC_X9_62_CHAR2_239V3 = {
1941 : {
1942 : NID_X9_62_characteristic_two_field, 20, 30, 0xA
1943 : },
1944 : {
1945 : /* seed */
1946 : 0x9E, 0x07, 0x6F, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75,
1947 : 0xE1, 0x1E, 0x9F, 0xDD, 0x77, 0xF9, 0x20, 0x41,
1948 : /* p */
1949 : 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1950 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1951 : 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
1952 : /* a */
1953 : 0x01, 0x23, 0x87, 0x74, 0x66, 0x6A, 0x67, 0x76, 0x6D, 0x66, 0x76, 0xF7,
1954 : 0x78, 0xE6, 0x76, 0xB6, 0x69, 0x99, 0x17, 0x66, 0x66, 0xE6, 0x87, 0x66,
1955 : 0x6D, 0x87, 0x66, 0xC6, 0x6A, 0x9F,
1956 : /* b */
1957 : 0x6A, 0x94, 0x19, 0x77, 0xBA, 0x9F, 0x6A, 0x43, 0x51, 0x99, 0xAC, 0xFC,
1958 : 0x51, 0x06, 0x7E, 0xD5, 0x87, 0xF5, 0x19, 0xC5, 0xEC, 0xB5, 0x41, 0xB8,
1959 : 0xE4, 0x41, 0x11, 0xDE, 0x1D, 0x40,
1960 : /* x */
1961 : 0x70, 0xF6, 0xE9, 0xD0, 0x4D, 0x28, 0x9C, 0x4E, 0x89, 0x91, 0x3C, 0xE3,
1962 : 0x53, 0x0B, 0xFD, 0xE9, 0x03, 0x97, 0x7D, 0x42, 0xB1, 0x46, 0xD5, 0x39,
1963 : 0xBF, 0x1B, 0xDE, 0x4E, 0x9C, 0x92,
1964 : /* y */
1965 : 0x2E, 0x5A, 0x0E, 0xAF, 0x6E, 0x5E, 0x13, 0x05, 0xB9, 0x00, 0x4D, 0xCE,
1966 : 0x5C, 0x0E, 0xD7, 0xFE, 0x59, 0xA3, 0x56, 0x08, 0xF3, 0x38, 0x37, 0xC8,
1967 : 0x16, 0xD8, 0x0B, 0x79, 0xF4, 0x61,
1968 : /* order */
1969 : 0x0C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
1970 : 0xCC, 0xCC, 0xCC, 0xAC, 0x49, 0x12, 0xD2, 0xD9, 0xDF, 0x90, 0x3E, 0xF9,
1971 : 0x88, 0x8B, 0x8A, 0x0E, 0x4C, 0xFF
1972 : }
1973 : };
1974 :
1975 : static const struct {
1976 : EC_CURVE_DATA h;
1977 : unsigned char data[0 + 35 * 6];
1978 : } _EC_X9_62_CHAR2_272W1 = {
1979 : {
1980 : NID_X9_62_characteristic_two_field, 0, 35, 0xFF06
1981 : },
1982 : {
1983 : /* no seed */
1984 : /* p */
1985 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1986 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1987 : 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B,
1988 : /* a */
1989 : 0x00, 0x91, 0xA0, 0x91, 0xF0, 0x3B, 0x5F, 0xBA, 0x4A, 0xB2, 0xCC, 0xF4,
1990 : 0x9C, 0x4E, 0xDD, 0x22, 0x0F, 0xB0, 0x28, 0x71, 0x2D, 0x42, 0xBE, 0x75,
1991 : 0x2B, 0x2C, 0x40, 0x09, 0x4D, 0xBA, 0xCD, 0xB5, 0x86, 0xFB, 0x20,
1992 : /* b */
1993 : 0x00, 0x71, 0x67, 0xEF, 0xC9, 0x2B, 0xB2, 0xE3, 0xCE, 0x7C, 0x8A, 0xAA,
1994 : 0xFF, 0x34, 0xE1, 0x2A, 0x9C, 0x55, 0x70, 0x03, 0xD7, 0xC7, 0x3A, 0x6F,
1995 : 0xAF, 0x00, 0x3F, 0x99, 0xF6, 0xCC, 0x84, 0x82, 0xE5, 0x40, 0xF7,
1996 : /* x */
1997 : 0x00, 0x61, 0x08, 0xBA, 0xBB, 0x2C, 0xEE, 0xBC, 0xF7, 0x87, 0x05, 0x8A,
1998 : 0x05, 0x6C, 0xBE, 0x0C, 0xFE, 0x62, 0x2D, 0x77, 0x23, 0xA2, 0x89, 0xE0,
1999 : 0x8A, 0x07, 0xAE, 0x13, 0xEF, 0x0D, 0x10, 0xD1, 0x71, 0xDD, 0x8D,
2000 : /* y */
2001 : 0x00, 0x10, 0xC7, 0x69, 0x57, 0x16, 0x85, 0x1E, 0xEF, 0x6B, 0xA7, 0xF6,
2002 : 0x87, 0x2E, 0x61, 0x42, 0xFB, 0xD2, 0x41, 0xB8, 0x30, 0xFF, 0x5E, 0xFC,
2003 : 0xAC, 0xEC, 0xCA, 0xB0, 0x5E, 0x02, 0x00, 0x5D, 0xDE, 0x9D, 0x23,
2004 : /* order */
2005 : 0x00, 0x00, 0x01, 0x00, 0xFA, 0xF5, 0x13, 0x54, 0xE0, 0xE3, 0x9E, 0x48,
2006 : 0x92, 0xDF, 0x6E, 0x31, 0x9C, 0x72, 0xC8, 0x16, 0x16, 0x03, 0xFA, 0x45,
2007 : 0xAA, 0x7B, 0x99, 0x8A, 0x16, 0x7B, 0x8F, 0x1E, 0x62, 0x95, 0x21
2008 : }
2009 : };
2010 :
2011 : static const struct {
2012 : EC_CURVE_DATA h;
2013 : unsigned char data[0 + 39 * 6];
2014 : } _EC_X9_62_CHAR2_304W1 = {
2015 : {
2016 : NID_X9_62_characteristic_two_field, 0, 39, 0xFE2E
2017 : },
2018 : {
2019 : /* no seed */
2020 : /* p */
2021 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2022 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2023 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2024 : 0x00, 0x08, 0x07,
2025 : /* a */
2026 : 0x00, 0xFD, 0x0D, 0x69, 0x31, 0x49, 0xA1, 0x18, 0xF6, 0x51, 0xE6, 0xDC,
2027 : 0xE6, 0x80, 0x20, 0x85, 0x37, 0x7E, 0x5F, 0x88, 0x2D, 0x1B, 0x51, 0x0B,
2028 : 0x44, 0x16, 0x00, 0x74, 0xC1, 0x28, 0x80, 0x78, 0x36, 0x5A, 0x03, 0x96,
2029 : 0xC8, 0xE6, 0x81,
2030 : /* b */
2031 : 0x00, 0xBD, 0xDB, 0x97, 0xE5, 0x55, 0xA5, 0x0A, 0x90, 0x8E, 0x43, 0xB0,
2032 : 0x1C, 0x79, 0x8E, 0xA5, 0xDA, 0xA6, 0x78, 0x8F, 0x1E, 0xA2, 0x79, 0x4E,
2033 : 0xFC, 0xF5, 0x71, 0x66, 0xB8, 0xC1, 0x40, 0x39, 0x60, 0x1E, 0x55, 0x82,
2034 : 0x73, 0x40, 0xBE,
2035 : /* x */
2036 : 0x00, 0x19, 0x7B, 0x07, 0x84, 0x5E, 0x9B, 0xE2, 0xD9, 0x6A, 0xDB, 0x0F,
2037 : 0x5F, 0x3C, 0x7F, 0x2C, 0xFF, 0xBD, 0x7A, 0x3E, 0xB8, 0xB6, 0xFE, 0xC3,
2038 : 0x5C, 0x7F, 0xD6, 0x7F, 0x26, 0xDD, 0xF6, 0x28, 0x5A, 0x64, 0x4F, 0x74,
2039 : 0x0A, 0x26, 0x14,
2040 : /* y */
2041 : 0x00, 0xE1, 0x9F, 0xBE, 0xB7, 0x6E, 0x0D, 0xA1, 0x71, 0x51, 0x7E, 0xCF,
2042 : 0x40, 0x1B, 0x50, 0x28, 0x9B, 0xF0, 0x14, 0x10, 0x32, 0x88, 0x52, 0x7A,
2043 : 0x9B, 0x41, 0x6A, 0x10, 0x5E, 0x80, 0x26, 0x0B, 0x54, 0x9F, 0xDC, 0x1B,
2044 : 0x92, 0xC0, 0x3B,
2045 : /* order */
2046 : 0x00, 0x00, 0x01, 0x01, 0xD5, 0x56, 0x57, 0x2A, 0xAB, 0xAC, 0x80, 0x01,
2047 : 0x01, 0xD5, 0x56, 0x57, 0x2A, 0xAB, 0xAC, 0x80, 0x01, 0x02, 0x2D, 0x5C,
2048 : 0x91, 0xDD, 0x17, 0x3F, 0x8F, 0xB5, 0x61, 0xDA, 0x68, 0x99, 0x16, 0x44,
2049 : 0x43, 0x05, 0x1D
2050 : }
2051 : };
2052 :
2053 : static const struct {
2054 : EC_CURVE_DATA h;
2055 : unsigned char data[20 + 45 * 6];
2056 : } _EC_X9_62_CHAR2_359V1 = {
2057 : {
2058 : NID_X9_62_characteristic_two_field, 20, 45, 0x4C
2059 : },
2060 : {
2061 : /* seed */
2062 : 0x2B, 0x35, 0x49, 0x20, 0xB7, 0x24, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
2063 : 0x15, 0x17, 0x58, 0x5B, 0xA1, 0x33, 0x2D, 0xC6,
2064 : /* p */
2065 : 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2066 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2067 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2068 : 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
2069 : /* a */
2070 : 0x56, 0x67, 0x67, 0x6A, 0x65, 0x4B, 0x20, 0x75, 0x4F, 0x35, 0x6E, 0xA9,
2071 : 0x20, 0x17, 0xD9, 0x46, 0x56, 0x7C, 0x46, 0x67, 0x55, 0x56, 0xF1, 0x95,
2072 : 0x56, 0xA0, 0x46, 0x16, 0xB5, 0x67, 0xD2, 0x23, 0xA5, 0xE0, 0x56, 0x56,
2073 : 0xFB, 0x54, 0x90, 0x16, 0xA9, 0x66, 0x56, 0xA5, 0x57,
2074 : /* b */
2075 : 0x24, 0x72, 0xE2, 0xD0, 0x19, 0x7C, 0x49, 0x36, 0x3F, 0x1F, 0xE7, 0xF5,
2076 : 0xB6, 0xDB, 0x07, 0x5D, 0x52, 0xB6, 0x94, 0x7D, 0x13, 0x5D, 0x8C, 0xA4,
2077 : 0x45, 0x80, 0x5D, 0x39, 0xBC, 0x34, 0x56, 0x26, 0x08, 0x96, 0x87, 0x74,
2078 : 0x2B, 0x63, 0x29, 0xE7, 0x06, 0x80, 0x23, 0x19, 0x88,
2079 : /* x */
2080 : 0x3C, 0x25, 0x8E, 0xF3, 0x04, 0x77, 0x67, 0xE7, 0xED, 0xE0, 0xF1, 0xFD,
2081 : 0xAA, 0x79, 0xDA, 0xEE, 0x38, 0x41, 0x36, 0x6A, 0x13, 0x2E, 0x16, 0x3A,
2082 : 0xCE, 0xD4, 0xED, 0x24, 0x01, 0xDF, 0x9C, 0x6B, 0xDC, 0xDE, 0x98, 0xE8,
2083 : 0xE7, 0x07, 0xC0, 0x7A, 0x22, 0x39, 0xB1, 0xB0, 0x97,
2084 : /* y */
2085 : 0x53, 0xD7, 0xE0, 0x85, 0x29, 0x54, 0x70, 0x48, 0x12, 0x1E, 0x9C, 0x95,
2086 : 0xF3, 0x79, 0x1D, 0xD8, 0x04, 0x96, 0x39, 0x48, 0xF3, 0x4F, 0xAE, 0x7B,
2087 : 0xF4, 0x4E, 0xA8, 0x23, 0x65, 0xDC, 0x78, 0x68, 0xFE, 0x57, 0xE4, 0xAE,
2088 : 0x2D, 0xE2, 0x11, 0x30, 0x5A, 0x40, 0x71, 0x04, 0xBD,
2089 : /* order */
2090 : 0x01, 0xAF, 0x28, 0x6B, 0xCA, 0x1A, 0xF2, 0x86, 0xBC, 0xA1, 0xAF, 0x28,
2091 : 0x6B, 0xCA, 0x1A, 0xF2, 0x86, 0xBC, 0xA1, 0xAF, 0x28, 0x6B, 0xC9, 0xFB,
2092 : 0x8F, 0x6B, 0x85, 0xC5, 0x56, 0x89, 0x2C, 0x20, 0xA7, 0xEB, 0x96, 0x4F,
2093 : 0xE7, 0x71, 0x9E, 0x74, 0xF4, 0x90, 0x75, 0x8D, 0x3B
2094 : }
2095 : };
2096 :
2097 : static const struct {
2098 : EC_CURVE_DATA h;
2099 : unsigned char data[0 + 47 * 6];
2100 : } _EC_X9_62_CHAR2_368W1 = {
2101 : {
2102 : NID_X9_62_characteristic_two_field, 0, 47, 0xFF70
2103 : },
2104 : {
2105 : /* no seed */
2106 : /* p */
2107 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2108 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2109 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2110 : 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
2111 : /* a */
2112 : 0x00, 0xE0, 0xD2, 0xEE, 0x25, 0x09, 0x52, 0x06, 0xF5, 0xE2, 0xA4, 0xF9,
2113 : 0xED, 0x22, 0x9F, 0x1F, 0x25, 0x6E, 0x79, 0xA0, 0xE2, 0xB4, 0x55, 0x97,
2114 : 0x0D, 0x8D, 0x0D, 0x86, 0x5B, 0xD9, 0x47, 0x78, 0xC5, 0x76, 0xD6, 0x2F,
2115 : 0x0A, 0xB7, 0x51, 0x9C, 0xCD, 0x2A, 0x1A, 0x90, 0x6A, 0xE3, 0x0D,
2116 : /* b */
2117 : 0x00, 0xFC, 0x12, 0x17, 0xD4, 0x32, 0x0A, 0x90, 0x45, 0x2C, 0x76, 0x0A,
2118 : 0x58, 0xED, 0xCD, 0x30, 0xC8, 0xDD, 0x06, 0x9B, 0x3C, 0x34, 0x45, 0x38,
2119 : 0x37, 0xA3, 0x4E, 0xD5, 0x0C, 0xB5, 0x49, 0x17, 0xE1, 0xC2, 0x11, 0x2D,
2120 : 0x84, 0xD1, 0x64, 0xF4, 0x44, 0xF8, 0xF7, 0x47, 0x86, 0x04, 0x6A,
2121 : /* x */
2122 : 0x00, 0x10, 0x85, 0xE2, 0x75, 0x53, 0x81, 0xDC, 0xCC, 0xE3, 0xC1, 0x55,
2123 : 0x7A, 0xFA, 0x10, 0xC2, 0xF0, 0xC0, 0xC2, 0x82, 0x56, 0x46, 0xC5, 0xB3,
2124 : 0x4A, 0x39, 0x4C, 0xBC, 0xFA, 0x8B, 0xC1, 0x6B, 0x22, 0xE7, 0xE7, 0x89,
2125 : 0xE9, 0x27, 0xBE, 0x21, 0x6F, 0x02, 0xE1, 0xFB, 0x13, 0x6A, 0x5F,
2126 : /* y */
2127 : 0x00, 0x7B, 0x3E, 0xB1, 0xBD, 0xDC, 0xBA, 0x62, 0xD5, 0xD8, 0xB2, 0x05,
2128 : 0x9B, 0x52, 0x57, 0x97, 0xFC, 0x73, 0x82, 0x2C, 0x59, 0x05, 0x9C, 0x62,
2129 : 0x3A, 0x45, 0xFF, 0x38, 0x43, 0xCE, 0xE8, 0xF8, 0x7C, 0xD1, 0x85, 0x5A,
2130 : 0xDA, 0xA8, 0x1E, 0x2A, 0x07, 0x50, 0xB8, 0x0F, 0xDA, 0x23, 0x10,
2131 : /* order */
2132 : 0x00, 0x00, 0x01, 0x00, 0x90, 0x51, 0x2D, 0xA9, 0xAF, 0x72, 0xB0, 0x83,
2133 : 0x49, 0xD9, 0x8A, 0x5D, 0xD4, 0xC7, 0xB0, 0x53, 0x2E, 0xCA, 0x51, 0xCE,
2134 : 0x03, 0xE2, 0xD1, 0x0F, 0x3B, 0x7A, 0xC5, 0x79, 0xBD, 0x87, 0xE9, 0x09,
2135 : 0xAE, 0x40, 0xA6, 0xF1, 0x31, 0xE9, 0xCF, 0xCE, 0x5B, 0xD9, 0x67
2136 : }
2137 : };
2138 :
2139 : static const struct {
2140 : EC_CURVE_DATA h;
2141 : unsigned char data[0 + 54 * 6];
2142 : } _EC_X9_62_CHAR2_431R1 = {
2143 : {
2144 : NID_X9_62_characteristic_two_field, 0, 54, 0x2760
2145 : },
2146 : {
2147 : /* no seed */
2148 : /* p */
2149 : 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2150 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2151 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2152 : 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2153 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
2154 : /* a */
2155 : 0x1A, 0x82, 0x7E, 0xF0, 0x0D, 0xD6, 0xFC, 0x0E, 0x23, 0x4C, 0xAF, 0x04,
2156 : 0x6C, 0x6A, 0x5D, 0x8A, 0x85, 0x39, 0x5B, 0x23, 0x6C, 0xC4, 0xAD, 0x2C,
2157 : 0xF3, 0x2A, 0x0C, 0xAD, 0xBD, 0xC9, 0xDD, 0xF6, 0x20, 0xB0, 0xEB, 0x99,
2158 : 0x06, 0xD0, 0x95, 0x7F, 0x6C, 0x6F, 0xEA, 0xCD, 0x61, 0x54, 0x68, 0xDF,
2159 : 0x10, 0x4D, 0xE2, 0x96, 0xCD, 0x8F,
2160 : /* b */
2161 : 0x10, 0xD9, 0xB4, 0xA3, 0xD9, 0x04, 0x7D, 0x8B, 0x15, 0x43, 0x59, 0xAB,
2162 : 0xFB, 0x1B, 0x7F, 0x54, 0x85, 0xB0, 0x4C, 0xEB, 0x86, 0x82, 0x37, 0xDD,
2163 : 0xC9, 0xDE, 0xDA, 0x98, 0x2A, 0x67, 0x9A, 0x5A, 0x91, 0x9B, 0x62, 0x6D,
2164 : 0x4E, 0x50, 0xA8, 0xDD, 0x73, 0x1B, 0x10, 0x7A, 0x99, 0x62, 0x38, 0x1F,
2165 : 0xB5, 0xD8, 0x07, 0xBF, 0x26, 0x18,
2166 : /* x */
2167 : 0x12, 0x0F, 0xC0, 0x5D, 0x3C, 0x67, 0xA9, 0x9D, 0xE1, 0x61, 0xD2, 0xF4,
2168 : 0x09, 0x26, 0x22, 0xFE, 0xCA, 0x70, 0x1B, 0xE4, 0xF5, 0x0F, 0x47, 0x58,
2169 : 0x71, 0x4E, 0x8A, 0x87, 0xBB, 0xF2, 0xA6, 0x58, 0xEF, 0x8C, 0x21, 0xE7,
2170 : 0xC5, 0xEF, 0xE9, 0x65, 0x36, 0x1F, 0x6C, 0x29, 0x99, 0xC0, 0xC2, 0x47,
2171 : 0xB0, 0xDB, 0xD7, 0x0C, 0xE6, 0xB7,
2172 : /* y */
2173 : 0x20, 0xD0, 0xAF, 0x89, 0x03, 0xA9, 0x6F, 0x8D, 0x5F, 0xA2, 0xC2, 0x55,
2174 : 0x74, 0x5D, 0x3C, 0x45, 0x1B, 0x30, 0x2C, 0x93, 0x46, 0xD9, 0xB7, 0xE4,
2175 : 0x85, 0xE7, 0xBC, 0xE4, 0x1F, 0x6B, 0x59, 0x1F, 0x3E, 0x8F, 0x6A, 0xDD,
2176 : 0xCB, 0xB0, 0xBC, 0x4C, 0x2F, 0x94, 0x7A, 0x7D, 0xE1, 0xA8, 0x9B, 0x62,
2177 : 0x5D, 0x6A, 0x59, 0x8B, 0x37, 0x60,
2178 : /* order */
2179 : 0x00, 0x03, 0x40, 0x34, 0x03, 0x40, 0x34, 0x03, 0x40, 0x34, 0x03, 0x40,
2180 : 0x34, 0x03, 0x40, 0x34, 0x03, 0x40, 0x34, 0x03, 0x40, 0x34, 0x03, 0x40,
2181 : 0x34, 0x03, 0x40, 0x34, 0x03, 0x23, 0xC3, 0x13, 0xFA, 0xB5, 0x05, 0x89,
2182 : 0x70, 0x3B, 0x5E, 0xC6, 0x8D, 0x35, 0x87, 0xFE, 0xC6, 0x0D, 0x16, 0x1C,
2183 : 0xC1, 0x49, 0xC1, 0xAD, 0x4A, 0x91
2184 : }
2185 : };
2186 :
2187 : static const struct {
2188 : EC_CURVE_DATA h;
2189 : unsigned char data[0 + 15 * 6];
2190 : } _EC_WTLS_1 = {
2191 : {
2192 : NID_X9_62_characteristic_two_field, 0, 15, 2
2193 : },
2194 : {
2195 : /* no seed */
2196 : /* p */
2197 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2198 : 0x00, 0x02, 0x01,
2199 : /* a */
2200 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2201 : 0x00, 0x00, 0x01,
2202 : /* b */
2203 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2204 : 0x00, 0x00, 0x01,
2205 : /* x */
2206 : 0x01, 0x66, 0x79, 0x79, 0xA4, 0x0B, 0xA4, 0x97, 0xE5, 0xD5, 0xC2, 0x70,
2207 : 0x78, 0x06, 0x17,
2208 : /* y */
2209 : 0x00, 0xF4, 0x4B, 0x4A, 0xF1, 0xEC, 0xC2, 0x63, 0x0E, 0x08, 0x78, 0x5C,
2210 : 0xEB, 0xCC, 0x15,
2211 : /* order */
2212 : 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xBF, 0x91, 0xAF,
2213 : 0x6D, 0xEA, 0x73
2214 : }
2215 : };
2216 :
2217 : /* IPSec curves */
2218 : /*
2219 : * NOTE: The of curves over a extension field of non prime degree is not
2220 : * recommended (Weil-descent). As the group order is not a prime this curve
2221 : * is not suitable for ECDSA.
2222 : */
2223 : static const struct {
2224 : EC_CURVE_DATA h;
2225 : unsigned char data[0 + 20 * 6];
2226 : } _EC_IPSEC_155_ID3 = {
2227 : {
2228 : NID_X9_62_characteristic_two_field, 0, 20, 3
2229 : },
2230 : {
2231 : /* no seed */
2232 : /* p */
2233 : 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2234 : 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
2235 : /* a */
2236 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2237 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2238 : /* b */
2239 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2240 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x33, 0x8f,
2241 : /* x */
2242 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2243 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b,
2244 : /* y */
2245 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2246 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc8,
2247 : /* order */
2248 : 0x02, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xC7, 0xF3,
2249 : 0xC7, 0x88, 0x1B, 0xD0, 0x86, 0x8F, 0xA8, 0x6C
2250 : }
2251 : };
2252 :
2253 : /*
2254 : * NOTE: The of curves over a extension field of non prime degree is not
2255 : * recommended (Weil-descent). As the group order is not a prime this curve
2256 : * is not suitable for ECDSA.
2257 : */
2258 : static const struct {
2259 : EC_CURVE_DATA h;
2260 : unsigned char data[0 + 24 * 6];
2261 : } _EC_IPSEC_185_ID4 = {
2262 : {
2263 : NID_X9_62_characteristic_two_field, 0, 24, 2
2264 : },
2265 : {
2266 : /* no seed */
2267 : /* p */
2268 : 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2269 : 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
2270 : /* a */
2271 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2272 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2273 : /* b */
2274 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2275 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xe9,
2276 : /* x */
2277 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2278 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
2279 : /* y */
2280 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2281 : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d,
2282 : /* order */
2283 : 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2284 : 0xED, 0xF9, 0x7C, 0x44, 0xDB, 0x9F, 0x24, 0x20, 0xBA, 0xFC, 0xA7, 0x5E
2285 : }
2286 : };
2287 :
2288 : #endif
2289 :
2290 : /*
2291 : * These curves were added by Annie Yousar <a.yousar@informatik.hu-berlin.de>
2292 : * For the definition of RFC 5639 curves see
2293 : * http://www.ietf.org/rfc/rfc5639.txt These curves are generated verifiable
2294 : * at random, nevertheless the seed is omitted as parameter because the
2295 : * generation mechanism is different from those defined in ANSI X9.62.
2296 : */
2297 :
2298 : static const struct {
2299 : EC_CURVE_DATA h;
2300 : unsigned char data[0 + 20 * 6];
2301 : } _EC_brainpoolP160r1 = {
2302 : {
2303 : NID_X9_62_prime_field, 0, 20, 1
2304 : },
2305 : {
2306 : /* no seed */
2307 : /* p */
2308 : 0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF, 0xC7, 0xAD,
2309 : 0x95, 0xB3, 0xD8, 0x13, 0x95, 0x15, 0x62, 0x0F,
2310 : /* a */
2311 : 0x34, 0x0E, 0x7B, 0xE2, 0xA2, 0x80, 0xEB, 0x74, 0xE2, 0xBE, 0x61, 0xBA,
2312 : 0xDA, 0x74, 0x5D, 0x97, 0xE8, 0xF7, 0xC3, 0x00,
2313 : /* b */
2314 : 0x1E, 0x58, 0x9A, 0x85, 0x95, 0x42, 0x34, 0x12, 0x13, 0x4F, 0xAA, 0x2D,
2315 : 0xBD, 0xEC, 0x95, 0xC8, 0xD8, 0x67, 0x5E, 0x58,
2316 : /* x */
2317 : 0xBE, 0xD5, 0xAF, 0x16, 0xEA, 0x3F, 0x6A, 0x4F, 0x62, 0x93, 0x8C, 0x46,
2318 : 0x31, 0xEB, 0x5A, 0xF7, 0xBD, 0xBC, 0xDB, 0xC3,
2319 : /* y */
2320 : 0x16, 0x67, 0xCB, 0x47, 0x7A, 0x1A, 0x8E, 0xC3, 0x38, 0xF9, 0x47, 0x41,
2321 : 0x66, 0x9C, 0x97, 0x63, 0x16, 0xDA, 0x63, 0x21,
2322 : /* order */
2323 : 0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF, 0x59, 0x91,
2324 : 0xD4, 0x50, 0x29, 0x40, 0x9E, 0x60, 0xFC, 0x09
2325 : }
2326 : };
2327 :
2328 : static const struct {
2329 : EC_CURVE_DATA h;
2330 : unsigned char data[0 + 20 * 6];
2331 : } _EC_brainpoolP160t1 = {
2332 : {
2333 : NID_X9_62_prime_field, 0, 20, 1
2334 : },
2335 : {
2336 : /* no seed */
2337 : /* p */
2338 : 0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF, 0xC7, 0xAD,
2339 : 0x95, 0xB3, 0xD8, 0x13, 0x95, 0x15, 0x62, 0x0F,
2340 : /* a */
2341 : 0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF, 0xC7, 0xAD,
2342 : 0x95, 0xB3, 0xD8, 0x13, 0x95, 0x15, 0x62, 0x0C,
2343 : /* b */
2344 : 0x7A, 0x55, 0x6B, 0x6D, 0xAE, 0x53, 0x5B, 0x7B, 0x51, 0xED, 0x2C, 0x4D,
2345 : 0x7D, 0xAA, 0x7A, 0x0B, 0x5C, 0x55, 0xF3, 0x80,
2346 : /* x */
2347 : 0xB1, 0x99, 0xB1, 0x3B, 0x9B, 0x34, 0xEF, 0xC1, 0x39, 0x7E, 0x64, 0xBA,
2348 : 0xEB, 0x05, 0xAC, 0xC2, 0x65, 0xFF, 0x23, 0x78,
2349 : /* y */
2350 : 0xAD, 0xD6, 0x71, 0x8B, 0x7C, 0x7C, 0x19, 0x61, 0xF0, 0x99, 0x1B, 0x84,
2351 : 0x24, 0x43, 0x77, 0x21, 0x52, 0xC9, 0xE0, 0xAD,
2352 : /* order */
2353 : 0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF, 0x59, 0x91,
2354 : 0xD4, 0x50, 0x29, 0x40, 0x9E, 0x60, 0xFC, 0x09
2355 : }
2356 : };
2357 :
2358 : static const struct {
2359 : EC_CURVE_DATA h;
2360 : unsigned char data[0 + 24 * 6];
2361 : } _EC_brainpoolP192r1 = {
2362 : {
2363 : NID_X9_62_prime_field, 0, 24, 1
2364 : },
2365 : {
2366 : /* no seed */
2367 : /* p */
2368 : 0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3, 0x46, 0x30,
2369 : 0x93, 0xD1, 0x8D, 0xB7, 0x8F, 0xCE, 0x47, 0x6D, 0xE1, 0xA8, 0x62, 0x97,
2370 : /* a */
2371 : 0x6A, 0x91, 0x17, 0x40, 0x76, 0xB1, 0xE0, 0xE1, 0x9C, 0x39, 0xC0, 0x31,
2372 : 0xFE, 0x86, 0x85, 0xC1, 0xCA, 0xE0, 0x40, 0xE5, 0xC6, 0x9A, 0x28, 0xEF,
2373 : /* b */
2374 : 0x46, 0x9A, 0x28, 0xEF, 0x7C, 0x28, 0xCC, 0xA3, 0xDC, 0x72, 0x1D, 0x04,
2375 : 0x4F, 0x44, 0x96, 0xBC, 0xCA, 0x7E, 0xF4, 0x14, 0x6F, 0xBF, 0x25, 0xC9,
2376 : /* x */
2377 : 0xC0, 0xA0, 0x64, 0x7E, 0xAA, 0xB6, 0xA4, 0x87, 0x53, 0xB0, 0x33, 0xC5,
2378 : 0x6C, 0xB0, 0xF0, 0x90, 0x0A, 0x2F, 0x5C, 0x48, 0x53, 0x37, 0x5F, 0xD6,
2379 : /* y */
2380 : 0x14, 0xB6, 0x90, 0x86, 0x6A, 0xBD, 0x5B, 0xB8, 0x8B, 0x5F, 0x48, 0x28,
2381 : 0xC1, 0x49, 0x00, 0x02, 0xE6, 0x77, 0x3F, 0xA2, 0xFA, 0x29, 0x9B, 0x8F,
2382 : /* order */
2383 : 0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3, 0x46, 0x2F,
2384 : 0x9E, 0x9E, 0x91, 0x6B, 0x5B, 0xE8, 0xF1, 0x02, 0x9A, 0xC4, 0xAC, 0xC1
2385 : }
2386 : };
2387 :
2388 : static const struct {
2389 : EC_CURVE_DATA h;
2390 : unsigned char data[0 + 24 * 6];
2391 : } _EC_brainpoolP192t1 = {
2392 : {
2393 : NID_X9_62_prime_field, 0, 24, 1
2394 : },
2395 : {
2396 : /* no seed */
2397 : /* p */
2398 : 0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3, 0x46, 0x30,
2399 : 0x93, 0xD1, 0x8D, 0xB7, 0x8F, 0xCE, 0x47, 0x6D, 0xE1, 0xA8, 0x62, 0x97,
2400 : /* a */
2401 : 0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3, 0x46, 0x30,
2402 : 0x93, 0xD1, 0x8D, 0xB7, 0x8F, 0xCE, 0x47, 0x6D, 0xE1, 0xA8, 0x62, 0x94,
2403 : /* b */
2404 : 0x13, 0xD5, 0x6F, 0xFA, 0xEC, 0x78, 0x68, 0x1E, 0x68, 0xF9, 0xDE, 0xB4,
2405 : 0x3B, 0x35, 0xBE, 0xC2, 0xFB, 0x68, 0x54, 0x2E, 0x27, 0x89, 0x7B, 0x79,
2406 : /* x */
2407 : 0x3A, 0xE9, 0xE5, 0x8C, 0x82, 0xF6, 0x3C, 0x30, 0x28, 0x2E, 0x1F, 0xE7,
2408 : 0xBB, 0xF4, 0x3F, 0xA7, 0x2C, 0x44, 0x6A, 0xF6, 0xF4, 0x61, 0x81, 0x29,
2409 : /* y */
2410 : 0x09, 0x7E, 0x2C, 0x56, 0x67, 0xC2, 0x22, 0x3A, 0x90, 0x2A, 0xB5, 0xCA,
2411 : 0x44, 0x9D, 0x00, 0x84, 0xB7, 0xE5, 0xB3, 0xDE, 0x7C, 0xCC, 0x01, 0xC9,
2412 : /* order */
2413 : 0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3, 0x46, 0x2F,
2414 : 0x9E, 0x9E, 0x91, 0x6B, 0x5B, 0xE8, 0xF1, 0x02, 0x9A, 0xC4, 0xAC, 0xC1
2415 : }
2416 : };
2417 :
2418 : static const struct {
2419 : EC_CURVE_DATA h;
2420 : unsigned char data[0 + 28 * 6];
2421 : } _EC_brainpoolP224r1 = {
2422 : {
2423 : NID_X9_62_prime_field, 0, 28, 1
2424 : },
2425 : {
2426 : /* no seed */
2427 : /* p */
2428 : 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18, 0x30, 0x25,
2429 : 0x75, 0xD1, 0xD7, 0x87, 0xB0, 0x9F, 0x07, 0x57, 0x97, 0xDA, 0x89, 0xF5,
2430 : 0x7E, 0xC8, 0xC0, 0xFF,
2431 : /* a */
2432 : 0x68, 0xA5, 0xE6, 0x2C, 0xA9, 0xCE, 0x6C, 0x1C, 0x29, 0x98, 0x03, 0xA6,
2433 : 0xC1, 0x53, 0x0B, 0x51, 0x4E, 0x18, 0x2A, 0xD8, 0xB0, 0x04, 0x2A, 0x59,
2434 : 0xCA, 0xD2, 0x9F, 0x43,
2435 : /* b */
2436 : 0x25, 0x80, 0xF6, 0x3C, 0xCF, 0xE4, 0x41, 0x38, 0x87, 0x07, 0x13, 0xB1,
2437 : 0xA9, 0x23, 0x69, 0xE3, 0x3E, 0x21, 0x35, 0xD2, 0x66, 0xDB, 0xB3, 0x72,
2438 : 0x38, 0x6C, 0x40, 0x0B,
2439 : /* x */
2440 : 0x0D, 0x90, 0x29, 0xAD, 0x2C, 0x7E, 0x5C, 0xF4, 0x34, 0x08, 0x23, 0xB2,
2441 : 0xA8, 0x7D, 0xC6, 0x8C, 0x9E, 0x4C, 0xE3, 0x17, 0x4C, 0x1E, 0x6E, 0xFD,
2442 : 0xEE, 0x12, 0xC0, 0x7D,
2443 : /* y */
2444 : 0x58, 0xAA, 0x56, 0xF7, 0x72, 0xC0, 0x72, 0x6F, 0x24, 0xC6, 0xB8, 0x9E,
2445 : 0x4E, 0xCD, 0xAC, 0x24, 0x35, 0x4B, 0x9E, 0x99, 0xCA, 0xA3, 0xF6, 0xD3,
2446 : 0x76, 0x14, 0x02, 0xCD,
2447 : /* order */
2448 : 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18, 0x30, 0x25,
2449 : 0x75, 0xD0, 0xFB, 0x98, 0xD1, 0x16, 0xBC, 0x4B, 0x6D, 0xDE, 0xBC, 0xA3,
2450 : 0xA5, 0xA7, 0x93, 0x9F
2451 : }
2452 : };
2453 :
2454 : static const struct {
2455 : EC_CURVE_DATA h;
2456 : unsigned char data[0 + 28 * 6];
2457 : } _EC_brainpoolP224t1 = {
2458 : {
2459 : NID_X9_62_prime_field, 0, 28, 1
2460 : },
2461 : {
2462 : /* no seed */
2463 : /* p */
2464 : 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18, 0x30, 0x25,
2465 : 0x75, 0xD1, 0xD7, 0x87, 0xB0, 0x9F, 0x07, 0x57, 0x97, 0xDA, 0x89, 0xF5,
2466 : 0x7E, 0xC8, 0xC0, 0xFF,
2467 : /* a */
2468 : 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18, 0x30, 0x25,
2469 : 0x75, 0xD1, 0xD7, 0x87, 0xB0, 0x9F, 0x07, 0x57, 0x97, 0xDA, 0x89, 0xF5,
2470 : 0x7E, 0xC8, 0xC0, 0xFC,
2471 : /* b */
2472 : 0x4B, 0x33, 0x7D, 0x93, 0x41, 0x04, 0xCD, 0x7B, 0xEF, 0x27, 0x1B, 0xF6,
2473 : 0x0C, 0xED, 0x1E, 0xD2, 0x0D, 0xA1, 0x4C, 0x08, 0xB3, 0xBB, 0x64, 0xF1,
2474 : 0x8A, 0x60, 0x88, 0x8D,
2475 : /* x */
2476 : 0x6A, 0xB1, 0xE3, 0x44, 0xCE, 0x25, 0xFF, 0x38, 0x96, 0x42, 0x4E, 0x7F,
2477 : 0xFE, 0x14, 0x76, 0x2E, 0xCB, 0x49, 0xF8, 0x92, 0x8A, 0xC0, 0xC7, 0x60,
2478 : 0x29, 0xB4, 0xD5, 0x80,
2479 : /* y */
2480 : 0x03, 0x74, 0xE9, 0xF5, 0x14, 0x3E, 0x56, 0x8C, 0xD2, 0x3F, 0x3F, 0x4D,
2481 : 0x7C, 0x0D, 0x4B, 0x1E, 0x41, 0xC8, 0xCC, 0x0D, 0x1C, 0x6A, 0xBD, 0x5F,
2482 : 0x1A, 0x46, 0xDB, 0x4C,
2483 : /* order */
2484 : 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18, 0x30, 0x25,
2485 : 0x75, 0xD0, 0xFB, 0x98, 0xD1, 0x16, 0xBC, 0x4B, 0x6D, 0xDE, 0xBC, 0xA3,
2486 : 0xA5, 0xA7, 0x93, 0x9F
2487 : }
2488 : };
2489 :
2490 : static const struct {
2491 : EC_CURVE_DATA h;
2492 : unsigned char data[0 + 32 * 6];
2493 : } _EC_brainpoolP256r1 = {
2494 : {
2495 : NID_X9_62_prime_field, 0, 32, 1
2496 : },
2497 : {
2498 : /* no seed */
2499 : /* p */
2500 : 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90,
2501 : 0x9D, 0x83, 0x8D, 0x72, 0x6E, 0x3B, 0xF6, 0x23, 0xD5, 0x26, 0x20, 0x28,
2502 : 0x20, 0x13, 0x48, 0x1D, 0x1F, 0x6E, 0x53, 0x77,
2503 : /* a */
2504 : 0x7D, 0x5A, 0x09, 0x75, 0xFC, 0x2C, 0x30, 0x57, 0xEE, 0xF6, 0x75, 0x30,
2505 : 0x41, 0x7A, 0xFF, 0xE7, 0xFB, 0x80, 0x55, 0xC1, 0x26, 0xDC, 0x5C, 0x6C,
2506 : 0xE9, 0x4A, 0x4B, 0x44, 0xF3, 0x30, 0xB5, 0xD9,
2507 : /* b */
2508 : 0x26, 0xDC, 0x5C, 0x6C, 0xE9, 0x4A, 0x4B, 0x44, 0xF3, 0x30, 0xB5, 0xD9,
2509 : 0xBB, 0xD7, 0x7C, 0xBF, 0x95, 0x84, 0x16, 0x29, 0x5C, 0xF7, 0xE1, 0xCE,
2510 : 0x6B, 0xCC, 0xDC, 0x18, 0xFF, 0x8C, 0x07, 0xB6,
2511 : /* x */
2512 : 0x8B, 0xD2, 0xAE, 0xB9, 0xCB, 0x7E, 0x57, 0xCB, 0x2C, 0x4B, 0x48, 0x2F,
2513 : 0xFC, 0x81, 0xB7, 0xAF, 0xB9, 0xDE, 0x27, 0xE1, 0xE3, 0xBD, 0x23, 0xC2,
2514 : 0x3A, 0x44, 0x53, 0xBD, 0x9A, 0xCE, 0x32, 0x62,
2515 : /* y */
2516 : 0x54, 0x7E, 0xF8, 0x35, 0xC3, 0xDA, 0xC4, 0xFD, 0x97, 0xF8, 0x46, 0x1A,
2517 : 0x14, 0x61, 0x1D, 0xC9, 0xC2, 0x77, 0x45, 0x13, 0x2D, 0xED, 0x8E, 0x54,
2518 : 0x5C, 0x1D, 0x54, 0xC7, 0x2F, 0x04, 0x69, 0x97,
2519 : /* order */
2520 : 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90,
2521 : 0x9D, 0x83, 0x8D, 0x71, 0x8C, 0x39, 0x7A, 0xA3, 0xB5, 0x61, 0xA6, 0xF7,
2522 : 0x90, 0x1E, 0x0E, 0x82, 0x97, 0x48, 0x56, 0xA7
2523 : }
2524 : };
2525 :
2526 : static const struct {
2527 : EC_CURVE_DATA h;
2528 : unsigned char data[0 + 32 * 6];
2529 : } _EC_brainpoolP256t1 = {
2530 : {
2531 : NID_X9_62_prime_field, 0, 32, 1
2532 : },
2533 : {
2534 : /* no seed */
2535 : /* p */
2536 : 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90,
2537 : 0x9D, 0x83, 0x8D, 0x72, 0x6E, 0x3B, 0xF6, 0x23, 0xD5, 0x26, 0x20, 0x28,
2538 : 0x20, 0x13, 0x48, 0x1D, 0x1F, 0x6E, 0x53, 0x77,
2539 : /* a */
2540 : 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90,
2541 : 0x9D, 0x83, 0x8D, 0x72, 0x6E, 0x3B, 0xF6, 0x23, 0xD5, 0x26, 0x20, 0x28,
2542 : 0x20, 0x13, 0x48, 0x1D, 0x1F, 0x6E, 0x53, 0x74,
2543 : /* b */
2544 : 0x66, 0x2C, 0x61, 0xC4, 0x30, 0xD8, 0x4E, 0xA4, 0xFE, 0x66, 0xA7, 0x73,
2545 : 0x3D, 0x0B, 0x76, 0xB7, 0xBF, 0x93, 0xEB, 0xC4, 0xAF, 0x2F, 0x49, 0x25,
2546 : 0x6A, 0xE5, 0x81, 0x01, 0xFE, 0xE9, 0x2B, 0x04,
2547 : /* x */
2548 : 0xA3, 0xE8, 0xEB, 0x3C, 0xC1, 0xCF, 0xE7, 0xB7, 0x73, 0x22, 0x13, 0xB2,
2549 : 0x3A, 0x65, 0x61, 0x49, 0xAF, 0xA1, 0x42, 0xC4, 0x7A, 0xAF, 0xBC, 0x2B,
2550 : 0x79, 0xA1, 0x91, 0x56, 0x2E, 0x13, 0x05, 0xF4,
2551 : /* y */
2552 : 0x2D, 0x99, 0x6C, 0x82, 0x34, 0x39, 0xC5, 0x6D, 0x7F, 0x7B, 0x22, 0xE1,
2553 : 0x46, 0x44, 0x41, 0x7E, 0x69, 0xBC, 0xB6, 0xDE, 0x39, 0xD0, 0x27, 0x00,
2554 : 0x1D, 0xAB, 0xE8, 0xF3, 0x5B, 0x25, 0xC9, 0xBE,
2555 : /* order */
2556 : 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90,
2557 : 0x9D, 0x83, 0x8D, 0x71, 0x8C, 0x39, 0x7A, 0xA3, 0xB5, 0x61, 0xA6, 0xF7,
2558 : 0x90, 0x1E, 0x0E, 0x82, 0x97, 0x48, 0x56, 0xA7
2559 : }
2560 : };
2561 :
2562 : static const struct {
2563 : EC_CURVE_DATA h;
2564 : unsigned char data[0 + 40 * 6];
2565 : } _EC_brainpoolP320r1 = {
2566 : {
2567 : NID_X9_62_prime_field, 0, 40, 1
2568 : },
2569 : {
2570 : /* no seed */
2571 : /* p */
2572 : 0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C, 0x78, 0x5E,
2573 : 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA6, 0xF6, 0xF4, 0x0D, 0xEF,
2574 : 0x4F, 0x92, 0xB9, 0xEC, 0x78, 0x93, 0xEC, 0x28, 0xFC, 0xD4, 0x12, 0xB1,
2575 : 0xF1, 0xB3, 0x2E, 0x27,
2576 : /* a */
2577 : 0x3E, 0xE3, 0x0B, 0x56, 0x8F, 0xBA, 0xB0, 0xF8, 0x83, 0xCC, 0xEB, 0xD4,
2578 : 0x6D, 0x3F, 0x3B, 0xB8, 0xA2, 0xA7, 0x35, 0x13, 0xF5, 0xEB, 0x79, 0xDA,
2579 : 0x66, 0x19, 0x0E, 0xB0, 0x85, 0xFF, 0xA9, 0xF4, 0x92, 0xF3, 0x75, 0xA9,
2580 : 0x7D, 0x86, 0x0E, 0xB4,
2581 : /* b */
2582 : 0x52, 0x08, 0x83, 0x94, 0x9D, 0xFD, 0xBC, 0x42, 0xD3, 0xAD, 0x19, 0x86,
2583 : 0x40, 0x68, 0x8A, 0x6F, 0xE1, 0x3F, 0x41, 0x34, 0x95, 0x54, 0xB4, 0x9A,
2584 : 0xCC, 0x31, 0xDC, 0xCD, 0x88, 0x45, 0x39, 0x81, 0x6F, 0x5E, 0xB4, 0xAC,
2585 : 0x8F, 0xB1, 0xF1, 0xA6,
2586 : /* x */
2587 : 0x43, 0xBD, 0x7E, 0x9A, 0xFB, 0x53, 0xD8, 0xB8, 0x52, 0x89, 0xBC, 0xC4,
2588 : 0x8E, 0xE5, 0xBF, 0xE6, 0xF2, 0x01, 0x37, 0xD1, 0x0A, 0x08, 0x7E, 0xB6,
2589 : 0xE7, 0x87, 0x1E, 0x2A, 0x10, 0xA5, 0x99, 0xC7, 0x10, 0xAF, 0x8D, 0x0D,
2590 : 0x39, 0xE2, 0x06, 0x11,
2591 : /* y */
2592 : 0x14, 0xFD, 0xD0, 0x55, 0x45, 0xEC, 0x1C, 0xC8, 0xAB, 0x40, 0x93, 0x24,
2593 : 0x7F, 0x77, 0x27, 0x5E, 0x07, 0x43, 0xFF, 0xED, 0x11, 0x71, 0x82, 0xEA,
2594 : 0xA9, 0xC7, 0x78, 0x77, 0xAA, 0xAC, 0x6A, 0xC7, 0xD3, 0x52, 0x45, 0xD1,
2595 : 0x69, 0x2E, 0x8E, 0xE1,
2596 : /* order */
2597 : 0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C, 0x78, 0x5E,
2598 : 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA5, 0xB6, 0x8F, 0x12, 0xA3,
2599 : 0x2D, 0x48, 0x2E, 0xC7, 0xEE, 0x86, 0x58, 0xE9, 0x86, 0x91, 0x55, 0x5B,
2600 : 0x44, 0xC5, 0x93, 0x11
2601 : }
2602 : };
2603 :
2604 : static const struct {
2605 : EC_CURVE_DATA h;
2606 : unsigned char data[0 + 40 * 6];
2607 : } _EC_brainpoolP320t1 = {
2608 : {
2609 : NID_X9_62_prime_field, 0, 40, 1
2610 : },
2611 : {
2612 : /* no seed */
2613 : /* p */
2614 : 0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C, 0x78, 0x5E,
2615 : 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA6, 0xF6, 0xF4, 0x0D, 0xEF,
2616 : 0x4F, 0x92, 0xB9, 0xEC, 0x78, 0x93, 0xEC, 0x28, 0xFC, 0xD4, 0x12, 0xB1,
2617 : 0xF1, 0xB3, 0x2E, 0x27,
2618 : /* a */
2619 : 0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C, 0x78, 0x5E,
2620 : 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA6, 0xF6, 0xF4, 0x0D, 0xEF,
2621 : 0x4F, 0x92, 0xB9, 0xEC, 0x78, 0x93, 0xEC, 0x28, 0xFC, 0xD4, 0x12, 0xB1,
2622 : 0xF1, 0xB3, 0x2E, 0x24,
2623 : /* b */
2624 : 0xA7, 0xF5, 0x61, 0xE0, 0x38, 0xEB, 0x1E, 0xD5, 0x60, 0xB3, 0xD1, 0x47,
2625 : 0xDB, 0x78, 0x20, 0x13, 0x06, 0x4C, 0x19, 0xF2, 0x7E, 0xD2, 0x7C, 0x67,
2626 : 0x80, 0xAA, 0xF7, 0x7F, 0xB8, 0xA5, 0x47, 0xCE, 0xB5, 0xB4, 0xFE, 0xF4,
2627 : 0x22, 0x34, 0x03, 0x53,
2628 : /* x */
2629 : 0x92, 0x5B, 0xE9, 0xFB, 0x01, 0xAF, 0xC6, 0xFB, 0x4D, 0x3E, 0x7D, 0x49,
2630 : 0x90, 0x01, 0x0F, 0x81, 0x34, 0x08, 0xAB, 0x10, 0x6C, 0x4F, 0x09, 0xCB,
2631 : 0x7E, 0xE0, 0x78, 0x68, 0xCC, 0x13, 0x6F, 0xFF, 0x33, 0x57, 0xF6, 0x24,
2632 : 0xA2, 0x1B, 0xED, 0x52,
2633 : /* y */
2634 : 0x63, 0xBA, 0x3A, 0x7A, 0x27, 0x48, 0x3E, 0xBF, 0x66, 0x71, 0xDB, 0xEF,
2635 : 0x7A, 0xBB, 0x30, 0xEB, 0xEE, 0x08, 0x4E, 0x58, 0xA0, 0xB0, 0x77, 0xAD,
2636 : 0x42, 0xA5, 0xA0, 0x98, 0x9D, 0x1E, 0xE7, 0x1B, 0x1B, 0x9B, 0xC0, 0x45,
2637 : 0x5F, 0xB0, 0xD2, 0xC3,
2638 : /* order */
2639 : 0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C, 0x78, 0x5E,
2640 : 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA5, 0xB6, 0x8F, 0x12, 0xA3,
2641 : 0x2D, 0x48, 0x2E, 0xC7, 0xEE, 0x86, 0x58, 0xE9, 0x86, 0x91, 0x55, 0x5B,
2642 : 0x44, 0xC5, 0x93, 0x11
2643 : }
2644 : };
2645 :
2646 : static const struct {
2647 : EC_CURVE_DATA h;
2648 : unsigned char data[0 + 48 * 6];
2649 : } _EC_brainpoolP384r1 = {
2650 : {
2651 : NID_X9_62_prime_field, 0, 48, 1
2652 : },
2653 : {
2654 : /* no seed */
2655 : /* p */
2656 : 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D, 0x6F, 0x7E,
2657 : 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB4,
2658 : 0x12, 0xB1, 0xDA, 0x19, 0x7F, 0xB7, 0x11, 0x23, 0xAC, 0xD3, 0xA7, 0x29,
2659 : 0x90, 0x1D, 0x1A, 0x71, 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xEC, 0x53,
2660 : /* a */
2661 : 0x7B, 0xC3, 0x82, 0xC6, 0x3D, 0x8C, 0x15, 0x0C, 0x3C, 0x72, 0x08, 0x0A,
2662 : 0xCE, 0x05, 0xAF, 0xA0, 0xC2, 0xBE, 0xA2, 0x8E, 0x4F, 0xB2, 0x27, 0x87,
2663 : 0x13, 0x91, 0x65, 0xEF, 0xBA, 0x91, 0xF9, 0x0F, 0x8A, 0xA5, 0x81, 0x4A,
2664 : 0x50, 0x3A, 0xD4, 0xEB, 0x04, 0xA8, 0xC7, 0xDD, 0x22, 0xCE, 0x28, 0x26,
2665 : /* b */
2666 : 0x04, 0xA8, 0xC7, 0xDD, 0x22, 0xCE, 0x28, 0x26, 0x8B, 0x39, 0xB5, 0x54,
2667 : 0x16, 0xF0, 0x44, 0x7C, 0x2F, 0xB7, 0x7D, 0xE1, 0x07, 0xDC, 0xD2, 0xA6,
2668 : 0x2E, 0x88, 0x0E, 0xA5, 0x3E, 0xEB, 0x62, 0xD5, 0x7C, 0xB4, 0x39, 0x02,
2669 : 0x95, 0xDB, 0xC9, 0x94, 0x3A, 0xB7, 0x86, 0x96, 0xFA, 0x50, 0x4C, 0x11,
2670 : /* x */
2671 : 0x1D, 0x1C, 0x64, 0xF0, 0x68, 0xCF, 0x45, 0xFF, 0xA2, 0xA6, 0x3A, 0x81,
2672 : 0xB7, 0xC1, 0x3F, 0x6B, 0x88, 0x47, 0xA3, 0xE7, 0x7E, 0xF1, 0x4F, 0xE3,
2673 : 0xDB, 0x7F, 0xCA, 0xFE, 0x0C, 0xBD, 0x10, 0xE8, 0xE8, 0x26, 0xE0, 0x34,
2674 : 0x36, 0xD6, 0x46, 0xAA, 0xEF, 0x87, 0xB2, 0xE2, 0x47, 0xD4, 0xAF, 0x1E,
2675 : /* y */
2676 : 0x8A, 0xBE, 0x1D, 0x75, 0x20, 0xF9, 0xC2, 0xA4, 0x5C, 0xB1, 0xEB, 0x8E,
2677 : 0x95, 0xCF, 0xD5, 0x52, 0x62, 0xB7, 0x0B, 0x29, 0xFE, 0xEC, 0x58, 0x64,
2678 : 0xE1, 0x9C, 0x05, 0x4F, 0xF9, 0x91, 0x29, 0x28, 0x0E, 0x46, 0x46, 0x21,
2679 : 0x77, 0x91, 0x81, 0x11, 0x42, 0x82, 0x03, 0x41, 0x26, 0x3C, 0x53, 0x15,
2680 : /* order */
2681 : 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D, 0x6F, 0x7E,
2682 : 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB3,
2683 : 0x1F, 0x16, 0x6E, 0x6C, 0xAC, 0x04, 0x25, 0xA7, 0xCF, 0x3A, 0xB6, 0xAF,
2684 : 0x6B, 0x7F, 0xC3, 0x10, 0x3B, 0x88, 0x32, 0x02, 0xE9, 0x04, 0x65, 0x65
2685 : }
2686 : };
2687 :
2688 : static const struct {
2689 : EC_CURVE_DATA h;
2690 : unsigned char data[0 + 48 * 6];
2691 : } _EC_brainpoolP384t1 = {
2692 : {
2693 : NID_X9_62_prime_field, 0, 48, 1
2694 : },
2695 : {
2696 : /* no seed */
2697 : /* p */
2698 : 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D, 0x6F, 0x7E,
2699 : 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB4,
2700 : 0x12, 0xB1, 0xDA, 0x19, 0x7F, 0xB7, 0x11, 0x23, 0xAC, 0xD3, 0xA7, 0x29,
2701 : 0x90, 0x1D, 0x1A, 0x71, 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xEC, 0x53,
2702 : /* a */
2703 : 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D, 0x6F, 0x7E,
2704 : 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB4,
2705 : 0x12, 0xB1, 0xDA, 0x19, 0x7F, 0xB7, 0x11, 0x23, 0xAC, 0xD3, 0xA7, 0x29,
2706 : 0x90, 0x1D, 0x1A, 0x71, 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xEC, 0x50,
2707 : /* b */
2708 : 0x7F, 0x51, 0x9E, 0xAD, 0xA7, 0xBD, 0xA8, 0x1B, 0xD8, 0x26, 0xDB, 0xA6,
2709 : 0x47, 0x91, 0x0F, 0x8C, 0x4B, 0x93, 0x46, 0xED, 0x8C, 0xCD, 0xC6, 0x4E,
2710 : 0x4B, 0x1A, 0xBD, 0x11, 0x75, 0x6D, 0xCE, 0x1D, 0x20, 0x74, 0xAA, 0x26,
2711 : 0x3B, 0x88, 0x80, 0x5C, 0xED, 0x70, 0x35, 0x5A, 0x33, 0xB4, 0x71, 0xEE,
2712 : /* x */
2713 : 0x18, 0xDE, 0x98, 0xB0, 0x2D, 0xB9, 0xA3, 0x06, 0xF2, 0xAF, 0xCD, 0x72,
2714 : 0x35, 0xF7, 0x2A, 0x81, 0x9B, 0x80, 0xAB, 0x12, 0xEB, 0xD6, 0x53, 0x17,
2715 : 0x24, 0x76, 0xFE, 0xCD, 0x46, 0x2A, 0xAB, 0xFF, 0xC4, 0xFF, 0x19, 0x1B,
2716 : 0x94, 0x6A, 0x5F, 0x54, 0xD8, 0xD0, 0xAA, 0x2F, 0x41, 0x88, 0x08, 0xCC,
2717 : /* y */
2718 : 0x25, 0xAB, 0x05, 0x69, 0x62, 0xD3, 0x06, 0x51, 0xA1, 0x14, 0xAF, 0xD2,
2719 : 0x75, 0x5A, 0xD3, 0x36, 0x74, 0x7F, 0x93, 0x47, 0x5B, 0x7A, 0x1F, 0xCA,
2720 : 0x3B, 0x88, 0xF2, 0xB6, 0xA2, 0x08, 0xCC, 0xFE, 0x46, 0x94, 0x08, 0x58,
2721 : 0x4D, 0xC2, 0xB2, 0x91, 0x26, 0x75, 0xBF, 0x5B, 0x9E, 0x58, 0x29, 0x28,
2722 : /* order */
2723 : 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D, 0x6F, 0x7E,
2724 : 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB3,
2725 : 0x1F, 0x16, 0x6E, 0x6C, 0xAC, 0x04, 0x25, 0xA7, 0xCF, 0x3A, 0xB6, 0xAF,
2726 : 0x6B, 0x7F, 0xC3, 0x10, 0x3B, 0x88, 0x32, 0x02, 0xE9, 0x04, 0x65, 0x65
2727 : }
2728 : };
2729 :
2730 : static const struct {
2731 : EC_CURVE_DATA h;
2732 : unsigned char data[0 + 64 * 6];
2733 : } _EC_brainpoolP512r1 = {
2734 : {
2735 : NID_X9_62_prime_field, 0, 64, 1
2736 : },
2737 : {
2738 : /* no seed */
2739 : /* p */
2740 : 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4, 0xE6, 0xAE,
2741 : 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E,
2742 : 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x71, 0x7D, 0x4D, 0x9B, 0x00,
2743 : 0x9B, 0xC6, 0x68, 0x42, 0xAE, 0xCD, 0xA1, 0x2A, 0xE6, 0xA3, 0x80, 0xE6,
2744 : 0x28, 0x81, 0xFF, 0x2F, 0x2D, 0x82, 0xC6, 0x85, 0x28, 0xAA, 0x60, 0x56,
2745 : 0x58, 0x3A, 0x48, 0xF3,
2746 : /* a */
2747 : 0x78, 0x30, 0xA3, 0x31, 0x8B, 0x60, 0x3B, 0x89, 0xE2, 0x32, 0x71, 0x45,
2748 : 0xAC, 0x23, 0x4C, 0xC5, 0x94, 0xCB, 0xDD, 0x8D, 0x3D, 0xF9, 0x16, 0x10,
2749 : 0xA8, 0x34, 0x41, 0xCA, 0xEA, 0x98, 0x63, 0xBC, 0x2D, 0xED, 0x5D, 0x5A,
2750 : 0xA8, 0x25, 0x3A, 0xA1, 0x0A, 0x2E, 0xF1, 0xC9, 0x8B, 0x9A, 0xC8, 0xB5,
2751 : 0x7F, 0x11, 0x17, 0xA7, 0x2B, 0xF2, 0xC7, 0xB9, 0xE7, 0xC1, 0xAC, 0x4D,
2752 : 0x77, 0xFC, 0x94, 0xCA,
2753 : /* b */
2754 : 0x3D, 0xF9, 0x16, 0x10, 0xA8, 0x34, 0x41, 0xCA, 0xEA, 0x98, 0x63, 0xBC,
2755 : 0x2D, 0xED, 0x5D, 0x5A, 0xA8, 0x25, 0x3A, 0xA1, 0x0A, 0x2E, 0xF1, 0xC9,
2756 : 0x8B, 0x9A, 0xC8, 0xB5, 0x7F, 0x11, 0x17, 0xA7, 0x2B, 0xF2, 0xC7, 0xB9,
2757 : 0xE7, 0xC1, 0xAC, 0x4D, 0x77, 0xFC, 0x94, 0xCA, 0xDC, 0x08, 0x3E, 0x67,
2758 : 0x98, 0x40, 0x50, 0xB7, 0x5E, 0xBA, 0xE5, 0xDD, 0x28, 0x09, 0xBD, 0x63,
2759 : 0x80, 0x16, 0xF7, 0x23,
2760 : /* x */
2761 : 0x81, 0xAE, 0xE4, 0xBD, 0xD8, 0x2E, 0xD9, 0x64, 0x5A, 0x21, 0x32, 0x2E,
2762 : 0x9C, 0x4C, 0x6A, 0x93, 0x85, 0xED, 0x9F, 0x70, 0xB5, 0xD9, 0x16, 0xC1,
2763 : 0xB4, 0x3B, 0x62, 0xEE, 0xF4, 0xD0, 0x09, 0x8E, 0xFF, 0x3B, 0x1F, 0x78,
2764 : 0xE2, 0xD0, 0xD4, 0x8D, 0x50, 0xD1, 0x68, 0x7B, 0x93, 0xB9, 0x7D, 0x5F,
2765 : 0x7C, 0x6D, 0x50, 0x47, 0x40, 0x6A, 0x5E, 0x68, 0x8B, 0x35, 0x22, 0x09,
2766 : 0xBC, 0xB9, 0xF8, 0x22,
2767 : /* y */
2768 : 0x7D, 0xDE, 0x38, 0x5D, 0x56, 0x63, 0x32, 0xEC, 0xC0, 0xEA, 0xBF, 0xA9,
2769 : 0xCF, 0x78, 0x22, 0xFD, 0xF2, 0x09, 0xF7, 0x00, 0x24, 0xA5, 0x7B, 0x1A,
2770 : 0xA0, 0x00, 0xC5, 0x5B, 0x88, 0x1F, 0x81, 0x11, 0xB2, 0xDC, 0xDE, 0x49,
2771 : 0x4A, 0x5F, 0x48, 0x5E, 0x5B, 0xCA, 0x4B, 0xD8, 0x8A, 0x27, 0x63, 0xAE,
2772 : 0xD1, 0xCA, 0x2B, 0x2F, 0xA8, 0xF0, 0x54, 0x06, 0x78, 0xCD, 0x1E, 0x0F,
2773 : 0x3A, 0xD8, 0x08, 0x92,
2774 : /* order */
2775 : 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4, 0xE6, 0xAE,
2776 : 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E,
2777 : 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x70, 0x55, 0x3E, 0x5C, 0x41,
2778 : 0x4C, 0xA9, 0x26, 0x19, 0x41, 0x86, 0x61, 0x19, 0x7F, 0xAC, 0x10, 0x47,
2779 : 0x1D, 0xB1, 0xD3, 0x81, 0x08, 0x5D, 0xDA, 0xDD, 0xB5, 0x87, 0x96, 0x82,
2780 : 0x9C, 0xA9, 0x00, 0x69
2781 : }
2782 : };
2783 :
2784 : static const struct {
2785 : EC_CURVE_DATA h;
2786 : unsigned char data[0 + 64 * 6];
2787 : } _EC_brainpoolP512t1 = {
2788 : {
2789 : NID_X9_62_prime_field, 0, 64, 1
2790 : },
2791 : {
2792 : /* no seed */
2793 : /* p */
2794 : 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4, 0xE6, 0xAE,
2795 : 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E,
2796 : 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x71, 0x7D, 0x4D, 0x9B, 0x00,
2797 : 0x9B, 0xC6, 0x68, 0x42, 0xAE, 0xCD, 0xA1, 0x2A, 0xE6, 0xA3, 0x80, 0xE6,
2798 : 0x28, 0x81, 0xFF, 0x2F, 0x2D, 0x82, 0xC6, 0x85, 0x28, 0xAA, 0x60, 0x56,
2799 : 0x58, 0x3A, 0x48, 0xF3,
2800 : /* a */
2801 : 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4, 0xE6, 0xAE,
2802 : 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E,
2803 : 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x71, 0x7D, 0x4D, 0x9B, 0x00,
2804 : 0x9B, 0xC6, 0x68, 0x42, 0xAE, 0xCD, 0xA1, 0x2A, 0xE6, 0xA3, 0x80, 0xE6,
2805 : 0x28, 0x81, 0xFF, 0x2F, 0x2D, 0x82, 0xC6, 0x85, 0x28, 0xAA, 0x60, 0x56,
2806 : 0x58, 0x3A, 0x48, 0xF0,
2807 : /* b */
2808 : 0x7C, 0xBB, 0xBC, 0xF9, 0x44, 0x1C, 0xFA, 0xB7, 0x6E, 0x18, 0x90, 0xE4,
2809 : 0x68, 0x84, 0xEA, 0xE3, 0x21, 0xF7, 0x0C, 0x0B, 0xCB, 0x49, 0x81, 0x52,
2810 : 0x78, 0x97, 0x50, 0x4B, 0xEC, 0x3E, 0x36, 0xA6, 0x2B, 0xCD, 0xFA, 0x23,
2811 : 0x04, 0x97, 0x65, 0x40, 0xF6, 0x45, 0x00, 0x85, 0xF2, 0xDA, 0xE1, 0x45,
2812 : 0xC2, 0x25, 0x53, 0xB4, 0x65, 0x76, 0x36, 0x89, 0x18, 0x0E, 0xA2, 0x57,
2813 : 0x18, 0x67, 0x42, 0x3E,
2814 : /* x */
2815 : 0x64, 0x0E, 0xCE, 0x5C, 0x12, 0x78, 0x87, 0x17, 0xB9, 0xC1, 0xBA, 0x06,
2816 : 0xCB, 0xC2, 0xA6, 0xFE, 0xBA, 0x85, 0x84, 0x24, 0x58, 0xC5, 0x6D, 0xDE,
2817 : 0x9D, 0xB1, 0x75, 0x8D, 0x39, 0xC0, 0x31, 0x3D, 0x82, 0xBA, 0x51, 0x73,
2818 : 0x5C, 0xDB, 0x3E, 0xA4, 0x99, 0xAA, 0x77, 0xA7, 0xD6, 0x94, 0x3A, 0x64,
2819 : 0xF7, 0xA3, 0xF2, 0x5F, 0xE2, 0x6F, 0x06, 0xB5, 0x1B, 0xAA, 0x26, 0x96,
2820 : 0xFA, 0x90, 0x35, 0xDA,
2821 : /* y */
2822 : 0x5B, 0x53, 0x4B, 0xD5, 0x95, 0xF5, 0xAF, 0x0F, 0xA2, 0xC8, 0x92, 0x37,
2823 : 0x6C, 0x84, 0xAC, 0xE1, 0xBB, 0x4E, 0x30, 0x19, 0xB7, 0x16, 0x34, 0xC0,
2824 : 0x11, 0x31, 0x15, 0x9C, 0xAE, 0x03, 0xCE, 0xE9, 0xD9, 0x93, 0x21, 0x84,
2825 : 0xBE, 0xEF, 0x21, 0x6B, 0xD7, 0x1D, 0xF2, 0xDA, 0xDF, 0x86, 0xA6, 0x27,
2826 : 0x30, 0x6E, 0xCF, 0xF9, 0x6D, 0xBB, 0x8B, 0xAC, 0xE1, 0x98, 0xB6, 0x1E,
2827 : 0x00, 0xF8, 0xB3, 0x32,
2828 : /* order */
2829 : 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4, 0xE6, 0xAE,
2830 : 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E,
2831 : 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x70, 0x55, 0x3E, 0x5C, 0x41,
2832 : 0x4C, 0xA9, 0x26, 0x19, 0x41, 0x86, 0x61, 0x19, 0x7F, 0xAC, 0x10, 0x47,
2833 : 0x1D, 0xB1, 0xD3, 0x81, 0x08, 0x5D, 0xDA, 0xDD, 0xB5, 0x87, 0x96, 0x82,
2834 : 0x9C, 0xA9, 0x00, 0x69
2835 : }
2836 : };
2837 :
2838 : typedef struct _ec_list_element_st {
2839 : int nid;
2840 : const EC_CURVE_DATA *data;
2841 : const EC_METHOD *(*meth) (void);
2842 : const char *comment;
2843 : } ec_list_element;
2844 :
2845 : static const ec_list_element curve_list[] = {
2846 : /* prime field curves */
2847 : /* secg curves */
2848 : {NID_secp112r1, &_EC_SECG_PRIME_112R1.h, 0,
2849 : "SECG/WTLS curve over a 112 bit prime field"},
2850 : {NID_secp112r2, &_EC_SECG_PRIME_112R2.h, 0,
2851 : "SECG curve over a 112 bit prime field"},
2852 : {NID_secp128r1, &_EC_SECG_PRIME_128R1.h, 0,
2853 : "SECG curve over a 128 bit prime field"},
2854 : {NID_secp128r2, &_EC_SECG_PRIME_128R2.h, 0,
2855 : "SECG curve over a 128 bit prime field"},
2856 : {NID_secp160k1, &_EC_SECG_PRIME_160K1.h, 0,
2857 : "SECG curve over a 160 bit prime field"},
2858 : {NID_secp160r1, &_EC_SECG_PRIME_160R1.h, 0,
2859 : "SECG curve over a 160 bit prime field"},
2860 : {NID_secp160r2, &_EC_SECG_PRIME_160R2.h, 0,
2861 : "SECG/WTLS curve over a 160 bit prime field"},
2862 : /* SECG secp192r1 is the same as X9.62 prime192v1 and hence omitted */
2863 : {NID_secp192k1, &_EC_SECG_PRIME_192K1.h, 0,
2864 : "SECG curve over a 192 bit prime field"},
2865 : {NID_secp224k1, &_EC_SECG_PRIME_224K1.h, 0,
2866 : "SECG curve over a 224 bit prime field"},
2867 : #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
2868 : {NID_secp224r1, &_EC_NIST_PRIME_224.h, EC_GFp_nistp224_method,
2869 : "NIST/SECG curve over a 224 bit prime field"},
2870 : #else
2871 : {NID_secp224r1, &_EC_NIST_PRIME_224.h, 0,
2872 : "NIST/SECG curve over a 224 bit prime field"},
2873 : #endif
2874 : {NID_secp256k1, &_EC_SECG_PRIME_256K1.h, 0,
2875 : "SECG curve over a 256 bit prime field"},
2876 : /* SECG secp256r1 is the same as X9.62 prime256v1 and hence omitted */
2877 : {NID_secp384r1, &_EC_NIST_PRIME_384.h, 0,
2878 : "NIST/SECG curve over a 384 bit prime field"},
2879 : #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
2880 : {NID_secp521r1, &_EC_NIST_PRIME_521.h, EC_GFp_nistp521_method,
2881 : "NIST/SECG curve over a 521 bit prime field"},
2882 : #else
2883 : {NID_secp521r1, &_EC_NIST_PRIME_521.h, 0,
2884 : "NIST/SECG curve over a 521 bit prime field"},
2885 : #endif
2886 : /* X9.62 curves */
2887 : {NID_X9_62_prime192v1, &_EC_NIST_PRIME_192.h, 0,
2888 : "NIST/X9.62/SECG curve over a 192 bit prime field"},
2889 : {NID_X9_62_prime192v2, &_EC_X9_62_PRIME_192V2.h, 0,
2890 : "X9.62 curve over a 192 bit prime field"},
2891 : {NID_X9_62_prime192v3, &_EC_X9_62_PRIME_192V3.h, 0,
2892 : "X9.62 curve over a 192 bit prime field"},
2893 : {NID_X9_62_prime239v1, &_EC_X9_62_PRIME_239V1.h, 0,
2894 : "X9.62 curve over a 239 bit prime field"},
2895 : {NID_X9_62_prime239v2, &_EC_X9_62_PRIME_239V2.h, 0,
2896 : "X9.62 curve over a 239 bit prime field"},
2897 : {NID_X9_62_prime239v3, &_EC_X9_62_PRIME_239V3.h, 0,
2898 : "X9.62 curve over a 239 bit prime field"},
2899 : {NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h,
2900 : #if defined(ECP_NISTZ256_ASM)
2901 : EC_GFp_nistz256_method,
2902 : #elif !defined(OPENSSL_NO_EC_NISTP_64_GCC_128)
2903 : EC_GFp_nistp256_method,
2904 : #else
2905 : 0,
2906 : #endif
2907 : "X9.62/SECG curve over a 256 bit prime field"},
2908 : #ifndef OPENSSL_NO_EC2M
2909 : /* characteristic two field curves */
2910 : /* NIST/SECG curves */
2911 : {NID_sect113r1, &_EC_SECG_CHAR2_113R1.h, 0,
2912 : "SECG curve over a 113 bit binary field"},
2913 : {NID_sect113r2, &_EC_SECG_CHAR2_113R2.h, 0,
2914 : "SECG curve over a 113 bit binary field"},
2915 : {NID_sect131r1, &_EC_SECG_CHAR2_131R1.h, 0,
2916 : "SECG/WTLS curve over a 131 bit binary field"},
2917 : {NID_sect131r2, &_EC_SECG_CHAR2_131R2.h, 0,
2918 : "SECG curve over a 131 bit binary field"},
2919 : {NID_sect163k1, &_EC_NIST_CHAR2_163K.h, 0,
2920 : "NIST/SECG/WTLS curve over a 163 bit binary field"},
2921 : {NID_sect163r1, &_EC_SECG_CHAR2_163R1.h, 0,
2922 : "SECG curve over a 163 bit binary field"},
2923 : {NID_sect163r2, &_EC_NIST_CHAR2_163B.h, 0,
2924 : "NIST/SECG curve over a 163 bit binary field"},
2925 : {NID_sect193r1, &_EC_SECG_CHAR2_193R1.h, 0,
2926 : "SECG curve over a 193 bit binary field"},
2927 : {NID_sect193r2, &_EC_SECG_CHAR2_193R2.h, 0,
2928 : "SECG curve over a 193 bit binary field"},
2929 : {NID_sect233k1, &_EC_NIST_CHAR2_233K.h, 0,
2930 : "NIST/SECG/WTLS curve over a 233 bit binary field"},
2931 : {NID_sect233r1, &_EC_NIST_CHAR2_233B.h, 0,
2932 : "NIST/SECG/WTLS curve over a 233 bit binary field"},
2933 : {NID_sect239k1, &_EC_SECG_CHAR2_239K1.h, 0,
2934 : "SECG curve over a 239 bit binary field"},
2935 : {NID_sect283k1, &_EC_NIST_CHAR2_283K.h, 0,
2936 : "NIST/SECG curve over a 283 bit binary field"},
2937 : {NID_sect283r1, &_EC_NIST_CHAR2_283B.h, 0,
2938 : "NIST/SECG curve over a 283 bit binary field"},
2939 : {NID_sect409k1, &_EC_NIST_CHAR2_409K.h, 0,
2940 : "NIST/SECG curve over a 409 bit binary field"},
2941 : {NID_sect409r1, &_EC_NIST_CHAR2_409B.h, 0,
2942 : "NIST/SECG curve over a 409 bit binary field"},
2943 : {NID_sect571k1, &_EC_NIST_CHAR2_571K.h, 0,
2944 : "NIST/SECG curve over a 571 bit binary field"},
2945 : {NID_sect571r1, &_EC_NIST_CHAR2_571B.h, 0,
2946 : "NIST/SECG curve over a 571 bit binary field"},
2947 : /* X9.62 curves */
2948 : {NID_X9_62_c2pnb163v1, &_EC_X9_62_CHAR2_163V1.h, 0,
2949 : "X9.62 curve over a 163 bit binary field"},
2950 : {NID_X9_62_c2pnb163v2, &_EC_X9_62_CHAR2_163V2.h, 0,
2951 : "X9.62 curve over a 163 bit binary field"},
2952 : {NID_X9_62_c2pnb163v3, &_EC_X9_62_CHAR2_163V3.h, 0,
2953 : "X9.62 curve over a 163 bit binary field"},
2954 : {NID_X9_62_c2pnb176v1, &_EC_X9_62_CHAR2_176V1.h, 0,
2955 : "X9.62 curve over a 176 bit binary field"},
2956 : {NID_X9_62_c2tnb191v1, &_EC_X9_62_CHAR2_191V1.h, 0,
2957 : "X9.62 curve over a 191 bit binary field"},
2958 : {NID_X9_62_c2tnb191v2, &_EC_X9_62_CHAR2_191V2.h, 0,
2959 : "X9.62 curve over a 191 bit binary field"},
2960 : {NID_X9_62_c2tnb191v3, &_EC_X9_62_CHAR2_191V3.h, 0,
2961 : "X9.62 curve over a 191 bit binary field"},
2962 : {NID_X9_62_c2pnb208w1, &_EC_X9_62_CHAR2_208W1.h, 0,
2963 : "X9.62 curve over a 208 bit binary field"},
2964 : {NID_X9_62_c2tnb239v1, &_EC_X9_62_CHAR2_239V1.h, 0,
2965 : "X9.62 curve over a 239 bit binary field"},
2966 : {NID_X9_62_c2tnb239v2, &_EC_X9_62_CHAR2_239V2.h, 0,
2967 : "X9.62 curve over a 239 bit binary field"},
2968 : {NID_X9_62_c2tnb239v3, &_EC_X9_62_CHAR2_239V3.h, 0,
2969 : "X9.62 curve over a 239 bit binary field"},
2970 : {NID_X9_62_c2pnb272w1, &_EC_X9_62_CHAR2_272W1.h, 0,
2971 : "X9.62 curve over a 272 bit binary field"},
2972 : {NID_X9_62_c2pnb304w1, &_EC_X9_62_CHAR2_304W1.h, 0,
2973 : "X9.62 curve over a 304 bit binary field"},
2974 : {NID_X9_62_c2tnb359v1, &_EC_X9_62_CHAR2_359V1.h, 0,
2975 : "X9.62 curve over a 359 bit binary field"},
2976 : {NID_X9_62_c2pnb368w1, &_EC_X9_62_CHAR2_368W1.h, 0,
2977 : "X9.62 curve over a 368 bit binary field"},
2978 : {NID_X9_62_c2tnb431r1, &_EC_X9_62_CHAR2_431R1.h, 0,
2979 : "X9.62 curve over a 431 bit binary field"},
2980 : /*
2981 : * the WAP/WTLS curves [unlike SECG, spec has its own OIDs for curves
2982 : * from X9.62]
2983 : */
2984 : {NID_wap_wsg_idm_ecid_wtls1, &_EC_WTLS_1.h, 0,
2985 : "WTLS curve over a 113 bit binary field"},
2986 : {NID_wap_wsg_idm_ecid_wtls3, &_EC_NIST_CHAR2_163K.h, 0,
2987 : "NIST/SECG/WTLS curve over a 163 bit binary field"},
2988 : {NID_wap_wsg_idm_ecid_wtls4, &_EC_SECG_CHAR2_113R1.h, 0,
2989 : "SECG curve over a 113 bit binary field"},
2990 : {NID_wap_wsg_idm_ecid_wtls5, &_EC_X9_62_CHAR2_163V1.h, 0,
2991 : "X9.62 curve over a 163 bit binary field"},
2992 : #endif
2993 : {NID_wap_wsg_idm_ecid_wtls6, &_EC_SECG_PRIME_112R1.h, 0,
2994 : "SECG/WTLS curve over a 112 bit prime field"},
2995 : {NID_wap_wsg_idm_ecid_wtls7, &_EC_SECG_PRIME_160R2.h, 0,
2996 : "SECG/WTLS curve over a 160 bit prime field"},
2997 : {NID_wap_wsg_idm_ecid_wtls8, &_EC_WTLS_8.h, 0,
2998 : "WTLS curve over a 112 bit prime field"},
2999 : {NID_wap_wsg_idm_ecid_wtls9, &_EC_WTLS_9.h, 0,
3000 : "WTLS curve over a 160 bit prime field"},
3001 : #ifndef OPENSSL_NO_EC2M
3002 : {NID_wap_wsg_idm_ecid_wtls10, &_EC_NIST_CHAR2_233K.h, 0,
3003 : "NIST/SECG/WTLS curve over a 233 bit binary field"},
3004 : {NID_wap_wsg_idm_ecid_wtls11, &_EC_NIST_CHAR2_233B.h, 0,
3005 : "NIST/SECG/WTLS curve over a 233 bit binary field"},
3006 : #endif
3007 : {NID_wap_wsg_idm_ecid_wtls12, &_EC_WTLS_12.h, 0,
3008 : "WTLS curvs over a 224 bit prime field"},
3009 : #ifndef OPENSSL_NO_EC2M
3010 : /* IPSec curves */
3011 : {NID_ipsec3, &_EC_IPSEC_155_ID3.h, 0,
3012 : "\n\tIPSec/IKE/Oakley curve #3 over a 155 bit binary field.\n"
3013 : "\tNot suitable for ECDSA.\n\tQuestionable extension field!"},
3014 : {NID_ipsec4, &_EC_IPSEC_185_ID4.h, 0,
3015 : "\n\tIPSec/IKE/Oakley curve #4 over a 185 bit binary field.\n"
3016 : "\tNot suitable for ECDSA.\n\tQuestionable extension field!"},
3017 : #endif
3018 : /* brainpool curves */
3019 : {NID_brainpoolP160r1, &_EC_brainpoolP160r1.h, 0,
3020 : "RFC 5639 curve over a 160 bit prime field"},
3021 : {NID_brainpoolP160t1, &_EC_brainpoolP160t1.h, 0,
3022 : "RFC 5639 curve over a 160 bit prime field"},
3023 : {NID_brainpoolP192r1, &_EC_brainpoolP192r1.h, 0,
3024 : "RFC 5639 curve over a 192 bit prime field"},
3025 : {NID_brainpoolP192t1, &_EC_brainpoolP192t1.h, 0,
3026 : "RFC 5639 curve over a 192 bit prime field"},
3027 : {NID_brainpoolP224r1, &_EC_brainpoolP224r1.h, 0,
3028 : "RFC 5639 curve over a 224 bit prime field"},
3029 : {NID_brainpoolP224t1, &_EC_brainpoolP224t1.h, 0,
3030 : "RFC 5639 curve over a 224 bit prime field"},
3031 : {NID_brainpoolP256r1, &_EC_brainpoolP256r1.h, 0,
3032 : "RFC 5639 curve over a 256 bit prime field"},
3033 : {NID_brainpoolP256t1, &_EC_brainpoolP256t1.h, 0,
3034 : "RFC 5639 curve over a 256 bit prime field"},
3035 : {NID_brainpoolP320r1, &_EC_brainpoolP320r1.h, 0,
3036 : "RFC 5639 curve over a 320 bit prime field"},
3037 : {NID_brainpoolP320t1, &_EC_brainpoolP320t1.h, 0,
3038 : "RFC 5639 curve over a 320 bit prime field"},
3039 : {NID_brainpoolP384r1, &_EC_brainpoolP384r1.h, 0,
3040 : "RFC 5639 curve over a 384 bit prime field"},
3041 : {NID_brainpoolP384t1, &_EC_brainpoolP384t1.h, 0,
3042 : "RFC 5639 curve over a 384 bit prime field"},
3043 : {NID_brainpoolP512r1, &_EC_brainpoolP512r1.h, 0,
3044 : "RFC 5639 curve over a 512 bit prime field"},
3045 : {NID_brainpoolP512t1, &_EC_brainpoolP512t1.h, 0,
3046 : "RFC 5639 curve over a 512 bit prime field"},
3047 : };
3048 :
3049 : #define curve_list_length (sizeof(curve_list)/sizeof(ec_list_element))
3050 :
3051 1242 : static EC_GROUP *ec_group_new_from_data(const ec_list_element curve)
3052 : {
3053 : EC_GROUP *group = NULL;
3054 : EC_POINT *P = NULL;
3055 : BN_CTX *ctx = NULL;
3056 : BIGNUM *p = NULL, *a = NULL, *b = NULL, *x = NULL, *y = NULL, *order =
3057 : NULL;
3058 : int ok = 0;
3059 : int seed_len, param_len;
3060 : const EC_METHOD *meth;
3061 : const EC_CURVE_DATA *data;
3062 : const unsigned char *params;
3063 :
3064 1242 : if ((ctx = BN_CTX_new()) == NULL) {
3065 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_MALLOC_FAILURE);
3066 : goto err;
3067 : }
3068 :
3069 1242 : data = curve.data;
3070 1242 : seed_len = data->seed_len;
3071 1242 : param_len = data->param_len;
3072 1242 : params = (const unsigned char *)(data + 1); /* skip header */
3073 1242 : params += seed_len; /* skip seed */
3074 :
3075 1242 : if (!(p = BN_bin2bn(params + 0 * param_len, param_len, NULL))
3076 1242 : || !(a = BN_bin2bn(params + 1 * param_len, param_len, NULL))
3077 1242 : || !(b = BN_bin2bn(params + 2 * param_len, param_len, NULL))) {
3078 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
3079 : goto err;
3080 : }
3081 :
3082 1242 : if (curve.meth != 0) {
3083 0 : meth = curve.meth();
3084 0 : if (((group = EC_GROUP_new(meth)) == NULL) ||
3085 0 : (!(group->meth->group_set_curve(group, p, a, b, ctx)))) {
3086 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3087 : goto err;
3088 : }
3089 1242 : } else if (data->field_type == NID_X9_62_prime_field) {
3090 1242 : if ((group = EC_GROUP_new_curve_GFp(p, a, b, ctx)) == NULL) {
3091 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3092 : goto err;
3093 : }
3094 : }
3095 : #ifndef OPENSSL_NO_EC2M
3096 : else { /* field_type ==
3097 : * NID_X9_62_characteristic_two_field */
3098 :
3099 0 : if ((group = EC_GROUP_new_curve_GF2m(p, a, b, ctx)) == NULL) {
3100 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3101 : goto err;
3102 : }
3103 : }
3104 : #endif
3105 :
3106 1242 : if ((P = EC_POINT_new(group)) == NULL) {
3107 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3108 : goto err;
3109 : }
3110 :
3111 1242 : if (!(x = BN_bin2bn(params + 3 * param_len, param_len, NULL))
3112 1242 : || !(y = BN_bin2bn(params + 4 * param_len, param_len, NULL))) {
3113 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
3114 : goto err;
3115 : }
3116 1242 : if (!EC_POINT_set_affine_coordinates_GFp(group, P, x, y, ctx)) {
3117 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3118 : goto err;
3119 : }
3120 1242 : if (!(order = BN_bin2bn(params + 5 * param_len, param_len, NULL))
3121 1242 : || !BN_set_word(x, (BN_ULONG)data->cofactor)) {
3122 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
3123 : goto err;
3124 : }
3125 1242 : if (!EC_GROUP_set_generator(group, P, order, x)) {
3126 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3127 : goto err;
3128 : }
3129 1242 : if (seed_len) {
3130 1242 : if (!EC_GROUP_set_seed(group, params - seed_len, seed_len)) {
3131 0 : ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3132 : goto err;
3133 : }
3134 : }
3135 : ok = 1;
3136 : err:
3137 1242 : if (!ok) {
3138 0 : EC_GROUP_free(group);
3139 : group = NULL;
3140 : }
3141 1242 : if (P)
3142 1242 : EC_POINT_free(P);
3143 1242 : if (ctx)
3144 1242 : BN_CTX_free(ctx);
3145 1242 : if (p)
3146 1242 : BN_free(p);
3147 1242 : if (a)
3148 1242 : BN_free(a);
3149 1242 : if (b)
3150 1242 : BN_free(b);
3151 1242 : if (order)
3152 1242 : BN_free(order);
3153 1242 : if (x)
3154 1242 : BN_free(x);
3155 1242 : if (y)
3156 1242 : BN_free(y);
3157 1242 : return group;
3158 : }
3159 :
3160 1242 : EC_GROUP *EC_GROUP_new_by_curve_name(int nid)
3161 : {
3162 : size_t i;
3163 : EC_GROUP *ret = NULL;
3164 :
3165 : #ifdef OPENSSL_FIPS
3166 : if (FIPS_mode())
3167 : return FIPS_ec_group_new_by_curve_name(nid);
3168 : #endif
3169 1242 : if (nid <= 0)
3170 : return NULL;
3171 :
3172 23598 : for (i = 0; i < curve_list_length; i++)
3173 24840 : if (curve_list[i].nid == nid) {
3174 1242 : ret = ec_group_new_from_data(curve_list[i]);
3175 1242 : break;
3176 : }
3177 :
3178 1242 : if (ret == NULL) {
3179 0 : ECerr(EC_F_EC_GROUP_NEW_BY_CURVE_NAME, EC_R_UNKNOWN_GROUP);
3180 0 : return NULL;
3181 : }
3182 :
3183 1242 : EC_GROUP_set_curve_name(ret, nid);
3184 :
3185 1242 : return ret;
3186 : }
3187 :
3188 0 : size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems)
3189 : {
3190 : size_t i, min;
3191 :
3192 0 : if (r == NULL || nitems == 0)
3193 : return curve_list_length;
3194 :
3195 0 : min = nitems < curve_list_length ? nitems : curve_list_length;
3196 :
3197 0 : for (i = 0; i < min; i++) {
3198 0 : r[i].nid = curve_list[i].nid;
3199 0 : r[i].comment = curve_list[i].comment;
3200 : }
3201 :
3202 : return curve_list_length;
3203 : }
3204 :
3205 : /* Functions to translate between common NIST curve names and NIDs */
3206 :
3207 : typedef struct {
3208 : const char *name; /* NIST Name of curve */
3209 : int nid; /* Curve NID */
3210 : } EC_NIST_NAME;
3211 :
3212 : static EC_NIST_NAME nist_curves[] = {
3213 : {"B-163", NID_sect163r2},
3214 : {"B-233", NID_sect233r1},
3215 : {"B-283", NID_sect283r1},
3216 : {"B-409", NID_sect409r1},
3217 : {"B-571", NID_sect571r1},
3218 : {"K-163", NID_sect163k1},
3219 : {"K-233", NID_sect233k1},
3220 : {"K-283", NID_sect283k1},
3221 : {"K-409", NID_sect409k1},
3222 : {"K-571", NID_sect571k1},
3223 : {"P-192", NID_X9_62_prime192v1},
3224 : {"P-224", NID_secp224r1},
3225 : {"P-256", NID_X9_62_prime256v1},
3226 : {"P-384", NID_secp384r1},
3227 : {"P-521", NID_secp521r1}
3228 : };
3229 :
3230 0 : const char *EC_curve_nid2nist(int nid)
3231 : {
3232 : size_t i;
3233 0 : for (i = 0; i < sizeof(nist_curves) / sizeof(EC_NIST_NAME); i++) {
3234 0 : if (nist_curves[i].nid == nid)
3235 0 : return nist_curves[i].name;
3236 : }
3237 : return NULL;
3238 : }
3239 :
3240 0 : int EC_curve_nist2nid(const char *name)
3241 : {
3242 : size_t i;
3243 0 : for (i = 0; i < sizeof(nist_curves) / sizeof(EC_NIST_NAME); i++) {
3244 0 : if (!strcmp(nist_curves[i].name, name))
3245 0 : return nist_curves[i].nid;
3246 : }
3247 : return NID_undef;
3248 : }
|