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