Coverage Report

Created: 2025-12-10 06:24

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