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