Coverage Report

Created: 2023-06-08 06:41

/src/openssl111/crypto/ec/ec_curve.c
Line
Count
Source (jump to first uncovered line)
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
736k
#define curve_list_length OSSL_NELEM(curve_list)
3010
3011
static EC_GROUP *ec_group_new_from_data(const ec_list_element curve)
3012
16.0k
{
3013
16.0k
    EC_GROUP *group = NULL;
3014
16.0k
    EC_POINT *P = NULL;
3015
16.0k
    BN_CTX *ctx = NULL;
3016
16.0k
    BIGNUM *p = NULL, *a = NULL, *b = NULL, *x = NULL, *y = NULL, *order =
3017
16.0k
        NULL;
3018
16.0k
    int ok = 0;
3019
16.0k
    int seed_len, param_len;
3020
16.0k
    const EC_METHOD *meth;
3021
16.0k
    const EC_CURVE_DATA *data;
3022
16.0k
    const unsigned char *params;
3023
3024
    /* If no curve data curve method must handle everything */
3025
16.0k
    if (curve.data == NULL)
3026
0
        return EC_GROUP_new(curve.meth != NULL ? curve.meth() : NULL);
3027
3028
16.0k
    if ((ctx = BN_CTX_new()) == NULL) {
3029
0
        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_MALLOC_FAILURE);
3030
0
        goto err;
3031
0
    }
3032
3033
16.0k
    data = curve.data;
3034
16.0k
    seed_len = data->seed_len;
3035
16.0k
    param_len = data->param_len;
3036
16.0k
    params = (const unsigned char *)(data + 1); /* skip header */
3037
16.0k
    params += seed_len;         /* skip seed */
3038
3039
16.0k
    if ((p = BN_bin2bn(params + 0 * param_len, param_len, NULL)) == NULL
3040
16.0k
        || (a = BN_bin2bn(params + 1 * param_len, param_len, NULL)) == NULL
3041
16.0k
        || (b = BN_bin2bn(params + 2 * param_len, param_len, NULL)) == NULL) {
3042
0
        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
3043
0
        goto err;
3044
0
    }
3045
3046
16.0k
    if (curve.meth != 0) {
3047
3.63k
        meth = curve.meth();
3048
3.63k
        if (((group = EC_GROUP_new(meth)) == NULL) ||
3049
3.63k
            (!(group->meth->group_set_curve(group, p, a, b, ctx)))) {
3050
0
            ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3051
0
            goto err;
3052
0
        }
3053
12.3k
    } else if (data->field_type == NID_X9_62_prime_field) {
3054
4.57k
        if ((group = EC_GROUP_new_curve_GFp(p, a, b, ctx)) == NULL) {
3055
0
            ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3056
0
            goto err;
3057
0
        }
3058
4.57k
    }
3059
7.79k
#ifndef OPENSSL_NO_EC2M
3060
7.79k
    else {                      /* field_type ==
3061
                                 * NID_X9_62_characteristic_two_field */
3062
3063
7.79k
        if ((group = EC_GROUP_new_curve_GF2m(p, a, b, ctx)) == NULL) {
3064
0
            ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3065
0
            goto err;
3066
0
        }
3067
7.79k
    }
3068
16.0k
#endif
3069
3070
16.0k
    EC_GROUP_set_curve_name(group, curve.nid);
3071
3072
16.0k
    if ((P = EC_POINT_new(group)) == NULL) {
3073
0
        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3074
0
        goto err;
3075
0
    }
3076
3077
16.0k
    if ((x = BN_bin2bn(params + 3 * param_len, param_len, NULL)) == NULL
3078
16.0k
        || (y = BN_bin2bn(params + 4 * param_len, param_len, NULL)) == NULL) {
3079
0
        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
3080
0
        goto err;
3081
0
    }
3082
16.0k
    if (!EC_POINT_set_affine_coordinates(group, P, x, y, ctx)) {
3083
0
        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3084
0
        goto err;
3085
0
    }
3086
16.0k
    if ((order = BN_bin2bn(params + 5 * param_len, param_len, NULL)) == NULL
3087
16.0k
        || !BN_set_word(x, (BN_ULONG)data->cofactor)) {
3088
0
        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
3089
0
        goto err;
3090
0
    }
3091
16.0k
    if (!EC_GROUP_set_generator(group, P, order, x)) {
3092
0
        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3093
0
        goto err;
3094
0
    }
3095
16.0k
    if (seed_len) {
3096
6.31k
        if (!EC_GROUP_set_seed(group, params - seed_len, seed_len)) {
3097
0
            ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
3098
0
            goto err;
3099
0
        }
3100
6.31k
    }
3101
3102
16.0k
    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
16.0k
        ASN1_OBJECT *asn1obj = OBJ_nid2obj(curve.nid);
3116
3117
16.0k
        if (asn1obj == NULL) {
3118
0
            ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_OBJ_LIB);
3119
0
            goto err;
3120
0
        }
3121
16.0k
        if (OBJ_length(asn1obj) == 0)
3122
0
            EC_GROUP_set_asn1_flag(group, OPENSSL_EC_EXPLICIT_CURVE);
3123
3124
16.0k
        ASN1_OBJECT_free(asn1obj);
3125
16.0k
    }
3126
3127
16.0k
    ok = 1;
3128
16.0k
 err:
3129
16.0k
    if (!ok) {
3130
0
        EC_GROUP_free(group);
3131
0
        group = NULL;
3132
0
    }
3133
16.0k
    EC_POINT_free(P);
3134
16.0k
    BN_CTX_free(ctx);
3135
16.0k
    BN_free(p);
3136
16.0k
    BN_free(a);
3137
16.0k
    BN_free(b);
3138
16.0k
    BN_free(order);
3139
16.0k
    BN_free(x);
3140
16.0k
    BN_free(y);
3141
16.0k
    return group;
3142
16.0k
}
3143
3144
EC_GROUP *EC_GROUP_new_by_curve_name(int nid)
3145
17.2k
{
3146
17.2k
    size_t i;
3147
17.2k
    EC_GROUP *ret = NULL;
3148
3149
17.2k
    if (nid <= 0)
3150
626
        return NULL;
3151
3152
572k
    for (i = 0; i < curve_list_length; i++)
3153
572k
        if (curve_list[i].nid == nid) {
3154
16.0k
            ret = ec_group_new_from_data(curve_list[i]);
3155
16.0k
            break;
3156
16.0k
        }
3157
3158
16.6k
    if (ret == NULL) {
3159
639
        ECerr(EC_F_EC_GROUP_NEW_BY_CURVE_NAME, EC_R_UNKNOWN_GROUP);
3160
639
        return NULL;
3161
639
    }
3162
3163
16.0k
    return ret;
3164
16.6k
}
3165
3166
size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems)
3167
0
{
3168
0
    size_t i, min;
3169
3170
0
    if (r == NULL || nitems == 0)
3171
0
        return curve_list_length;
3172
3173
0
    min = nitems < curve_list_length ? nitems : curve_list_length;
3174
3175
0
    for (i = 0; i < min; i++) {
3176
0
        r[i].nid = curve_list[i].nid;
3177
0
        r[i].comment = curve_list[i].comment;
3178
0
    }
3179
3180
0
    return curve_list_length;
3181
0
}
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
416
{
3210
416
    size_t i;
3211
5.56k
    for (i = 0; i < OSSL_NELEM(nist_curves); i++) {
3212
5.29k
        if (nist_curves[i].nid == nid)
3213
147
            return nist_curves[i].name;
3214
5.29k
    }
3215
269
    return NULL;
3216
416
}
3217
3218
int EC_curve_nist2nid(const char *name)
3219
0
{
3220
0
    size_t i;
3221
0
    for (i = 0; i < OSSL_NELEM(nist_curves); i++) {
3222
0
        if (strcmp(nist_curves[i].name, name) == 0)
3223
0
            return nist_curves[i].nid;
3224
0
    }
3225
0
    return NID_undef;
3226
0
}
3227
3228
35.5k
#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
1.99k
{
3239
1.99k
    int ret = -1, nid, len, field_type, param_len;
3240
1.99k
    size_t i, seed_len;
3241
1.99k
    const unsigned char *seed, *params_seed, *params;
3242
1.99k
    unsigned char *param_bytes = NULL;
3243
1.99k
    const EC_CURVE_DATA *data;
3244
1.99k
    const EC_POINT *generator = NULL;
3245
1.99k
    const EC_METHOD *meth;
3246
1.99k
    const BIGNUM *cofactor = NULL;
3247
    /* An array of BIGNUMs for (p, a, b, x, y, order) */
3248
1.99k
    BIGNUM *bn[NUM_BN_FIELDS] = {NULL, NULL, NULL, NULL, NULL, NULL};
3249
3250
1.99k
    meth = EC_GROUP_method_of(group);
3251
1.99k
    if (meth == NULL)
3252
0
        return -1;
3253
    /* Use the optional named curve nid as a search field */
3254
1.99k
    nid = EC_GROUP_get_curve_name(group);
3255
1.99k
    field_type = EC_METHOD_get_field_type(meth);
3256
1.99k
    seed_len = EC_GROUP_get_seed_len(group);
3257
1.99k
    seed = EC_GROUP_get0_seed(group);
3258
1.99k
    cofactor = EC_GROUP_get0_cofactor(group);
3259
3260
1.99k
    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
1.99k
    param_len = BN_num_bytes(group->order);
3269
1.99k
    len = BN_num_bytes(group->field);
3270
1.99k
    if (len > param_len)
3271
145
        param_len = len;
3272
3273
    /* Allocate space to store the padded data for (p, a, b, x, y, order)  */
3274
1.99k
    param_bytes = OPENSSL_malloc(param_len * NUM_BN_FIELDS);
3275
1.99k
    if (param_bytes == NULL)
3276
0
        goto end;
3277
3278
    /* Create the bignums */
3279
13.9k
    for (i = 0; i < NUM_BN_FIELDS; ++i) {
3280
11.9k
        if ((bn[i] = BN_CTX_get(ctx)) == NULL)
3281
0
            goto end;
3282
11.9k
    }
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
1.99k
    if (!(EC_GROUP_get_curve(group, bn[0], bn[1], bn[2], ctx)
3289
1.99k
        && ((generator = EC_GROUP_get0_generator(group)) != NULL)
3290
        /* Get x & y */
3291
1.99k
        && EC_POINT_get_affine_coordinates(group, generator, bn[3], bn[4], ctx)
3292
        /* Get order */
3293
1.99k
        && EC_GROUP_get_order(group, bn[5], ctx)))
3294
15
        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
13.8k
    for (i = 0; i < NUM_BN_FIELDS; ++i) {
3302
11.8k
        if (BN_bn2binpad(bn[i], &param_bytes[i*param_len], param_len) <= 0)
3303
0
            goto end;
3304
11.8k
    }
3305
3306
163k
    for (i = 0; i < curve_list_length; i++) {
3307
161k
        const ec_list_element curve = curve_list[i];
3308
3309
161k
        data = curve.data;
3310
        /* Get the raw order byte data */
3311
161k
        params_seed = (const unsigned char *)(data + 1); /* skip header */
3312
161k
        params = params_seed + data->seed_len;
3313
3314
        /* Look for unique fields in the fixed curve data */
3315
161k
        if (data->field_type == field_type
3316
161k
            && param_len == data->param_len
3317
161k
            && (nid <= 0 || nid == curve.nid)
3318
            /* check the optional cofactor (ignore if its zero) */
3319
161k
            && (BN_is_zero(cofactor)
3320
7.84k
                || BN_is_word(cofactor, (const BN_ULONG)curve.data->cofactor))
3321
            /* Check the optional seed (ignore if its not set) */
3322
161k
            && (data->seed_len == 0 || seed_len == 0
3323
7.78k
                || ((size_t)data->seed_len == seed_len
3324
0
                     && memcmp(params_seed, seed, seed_len) == 0))
3325
            /* Check that the groups params match the built-in curve params */
3326
161k
            && memcmp(param_bytes, params, param_len * NUM_BN_FIELDS)
3327
7.78k
                             == 0) {
3328
0
            ret = curve.nid;
3329
0
            goto end;
3330
0
        }
3331
161k
    }
3332
    /* Gets here if the group was not found */
3333
1.97k
    ret = NID_undef;
3334
1.99k
end:
3335
1.99k
    OPENSSL_free(param_bytes);
3336
1.99k
    BN_CTX_end(ctx);
3337
1.99k
    return ret;
3338
1.97k
}