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