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