Coverage Report

Created: 2025-12-31 06:58

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