xref: /openbsd/lib/libcrypto/ec/ec_curve.c (revision 01938560)
1*01938560Stb /* $OpenBSD: ec_curve.c,v 1.36 2023/05/01 17:29:36 tb Exp $ */
25650a0e1Sdjm /*
35650a0e1Sdjm  * Written by Nils Larsch for the OpenSSL project.
45650a0e1Sdjm  */
55650a0e1Sdjm /* ====================================================================
6ec07fdf1Sdjm  * Copyright (c) 1998-2010 The OpenSSL Project.  All rights reserved.
75650a0e1Sdjm  *
85650a0e1Sdjm  * Redistribution and use in source and binary forms, with or without
95650a0e1Sdjm  * modification, are permitted provided that the following conditions
105650a0e1Sdjm  * are met:
115650a0e1Sdjm  *
125650a0e1Sdjm  * 1. Redistributions of source code must retain the above copyright
135650a0e1Sdjm  *    notice, this list of conditions and the following disclaimer.
145650a0e1Sdjm  *
155650a0e1Sdjm  * 2. Redistributions in binary form must reproduce the above copyright
165650a0e1Sdjm  *    notice, this list of conditions and the following disclaimer in
175650a0e1Sdjm  *    the documentation and/or other materials provided with the
185650a0e1Sdjm  *    distribution.
195650a0e1Sdjm  *
205650a0e1Sdjm  * 3. All advertising materials mentioning features or use of this
215650a0e1Sdjm  *    software must display the following acknowledgment:
225650a0e1Sdjm  *    "This product includes software developed by the OpenSSL Project
235650a0e1Sdjm  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
245650a0e1Sdjm  *
255650a0e1Sdjm  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
265650a0e1Sdjm  *    endorse or promote products derived from this software without
275650a0e1Sdjm  *    prior written permission. For written permission, please contact
285650a0e1Sdjm  *    openssl-core@openssl.org.
295650a0e1Sdjm  *
305650a0e1Sdjm  * 5. Products derived from this software may not be called "OpenSSL"
315650a0e1Sdjm  *    nor may "OpenSSL" appear in their names without prior written
325650a0e1Sdjm  *    permission of the OpenSSL Project.
335650a0e1Sdjm  *
345650a0e1Sdjm  * 6. Redistributions of any form whatsoever must retain the following
355650a0e1Sdjm  *    acknowledgment:
365650a0e1Sdjm  *    "This product includes software developed by the OpenSSL Project
375650a0e1Sdjm  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
385650a0e1Sdjm  *
395650a0e1Sdjm  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
405650a0e1Sdjm  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
415650a0e1Sdjm  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
425650a0e1Sdjm  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
435650a0e1Sdjm  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
445650a0e1Sdjm  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
455650a0e1Sdjm  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
465650a0e1Sdjm  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
475650a0e1Sdjm  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
485650a0e1Sdjm  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
495650a0e1Sdjm  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
505650a0e1Sdjm  * OF THE POSSIBILITY OF SUCH DAMAGE.
515650a0e1Sdjm  * ====================================================================
525650a0e1Sdjm  *
535650a0e1Sdjm  * This product includes cryptographic software written by Eric Young
545650a0e1Sdjm  * (eay@cryptsoft.com).  This product includes software written by Tim
555650a0e1Sdjm  * Hudson (tjh@cryptsoft.com).
565650a0e1Sdjm  *
575650a0e1Sdjm  */
585650a0e1Sdjm /* ====================================================================
595650a0e1Sdjm  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
605650a0e1Sdjm  *
615650a0e1Sdjm  * Portions of the attached software ("Contribution") are developed by
625650a0e1Sdjm  * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
635650a0e1Sdjm  *
645650a0e1Sdjm  * The Contribution is licensed pursuant to the OpenSSL open source
655650a0e1Sdjm  * license provided above.
665650a0e1Sdjm  *
675650a0e1Sdjm  * The elliptic curve binary polynomial software is originally written by
685650a0e1Sdjm  * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
695650a0e1Sdjm  *
705650a0e1Sdjm  */
715650a0e1Sdjm 
72bdb7dc21Sjsing #include <string.h>
73bdb7dc21Sjsing 
748cf4d6a6Sjsing #include <openssl/opensslconf.h>
758cf4d6a6Sjsing 
765650a0e1Sdjm #include <openssl/err.h>
779e45fc42Stb #include <openssl/objects.h>
789e45fc42Stb 
79c9675a23Stb #include "ec_local.h"
805650a0e1Sdjm 
815650a0e1Sdjm /* the nist prime curves */
82f67ac449Stedu static const struct {
8359919d1cStb 	uint8_t seed[20];
8459919d1cStb 	uint8_t p[24];
8559919d1cStb 	uint8_t a[24];
8659919d1cStb 	uint8_t b[24];
8759919d1cStb 	uint8_t x[24];
8859919d1cStb 	uint8_t y[24];
8959919d1cStb 	uint8_t order[24];
9059919d1cStb } _EC_NIST_PRIME_192 = {
9159919d1cStb 	.seed = {
92*01938560Stb 		0x30, 0x45, 0xAE, 0x6F, 0xC8, 0x42, 0x2F, 0x64, 0xED, 0x57,
93f1535dc8Sdjm 		0x95, 0x28, 0xD3, 0x81, 0x20, 0xEA, 0xE1, 0x21, 0x96, 0xD5,
9459919d1cStb 	},
9559919d1cStb 	.p = {
96*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
97f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
98f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF,
9959919d1cStb 	},
10059919d1cStb 	.a = {
101*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
102f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
103f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFC,
10459919d1cStb 	},
10559919d1cStb 	.b = {
106*01938560Stb 		0x64, 0x21, 0x05, 0x19, 0xE5, 0x9C, 0x80, 0xE7, 0x0F, 0xA7,
107f1535dc8Sdjm 		0xE9, 0xAB, 0x72, 0x24, 0x30, 0x49, 0xFE, 0xB8, 0xDE, 0xEC,
108f1535dc8Sdjm 		0xC1, 0x46, 0xB9, 0xB1,
10959919d1cStb 	},
11059919d1cStb 	.x = {
111*01938560Stb 		0x18, 0x8D, 0xA8, 0x0E, 0xB0, 0x30, 0x90, 0xF6, 0x7C, 0xBF,
112f1535dc8Sdjm 		0x20, 0xEB, 0x43, 0xA1, 0x88, 0x00, 0xF4, 0xFF, 0x0A, 0xFD,
113f1535dc8Sdjm 		0x82, 0xFF, 0x10, 0x12,
11459919d1cStb 	},
11559919d1cStb 	.y = {
116*01938560Stb 		0x07, 0x19, 0x2b, 0x95, 0xff, 0xc8, 0xda, 0x78, 0x63, 0x10,
117f1535dc8Sdjm 		0x11, 0xed, 0x6b, 0x24, 0xcd, 0xd5, 0x73, 0xf9, 0x77, 0xa1,
118f1535dc8Sdjm 		0x1e, 0x79, 0x48, 0x11,
11959919d1cStb 	},
12059919d1cStb 	.order = {
121*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
122f1535dc8Sdjm 		0xFF, 0xFF, 0x99, 0xDE, 0xF8, 0x36, 0x14, 0x6B, 0xC9, 0xB1,
12359919d1cStb 		0xB4, 0xD2, 0x28, 0x31,
12459919d1cStb 	},
1255650a0e1Sdjm };
1265650a0e1Sdjm 
127f67ac449Stedu static const struct {
12859919d1cStb 	uint8_t seed[20];
12959919d1cStb 	uint8_t p[28];
13059919d1cStb 	uint8_t a[28];
13159919d1cStb 	uint8_t b[28];
13259919d1cStb 	uint8_t x[28];
13359919d1cStb 	uint8_t y[28];
13459919d1cStb 	uint8_t order[28];
13559919d1cStb } _EC_NIST_PRIME_224 = {
13659919d1cStb 	.seed = {
137*01938560Stb 		0xBD, 0x71, 0x34, 0x47, 0x99, 0xD5, 0xC7, 0xFC, 0xDC, 0x45,
138f1535dc8Sdjm 		0xB5, 0x9F, 0xA3, 0xB9, 0xAB, 0x8F, 0x6A, 0x94, 0x8B, 0xC5,
13959919d1cStb 	},
14059919d1cStb 	.p = {
141*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
142f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
143f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
14459919d1cStb 	},
14559919d1cStb 	.a = {
146*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
147f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
148f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
14959919d1cStb 	},
15059919d1cStb 	.b = {
151*01938560Stb 		0xB4, 0x05, 0x0A, 0x85, 0x0C, 0x04, 0xB3, 0xAB, 0xF5, 0x41,
152f1535dc8Sdjm 		0x32, 0x56, 0x50, 0x44, 0xB0, 0xB7, 0xD7, 0xBF, 0xD8, 0xBA,
153f1535dc8Sdjm 		0x27, 0x0B, 0x39, 0x43, 0x23, 0x55, 0xFF, 0xB4,
15459919d1cStb 	},
15559919d1cStb 	.x = {
156*01938560Stb 		0xB7, 0x0E, 0x0C, 0xBD, 0x6B, 0xB4, 0xBF, 0x7F, 0x32, 0x13,
157f1535dc8Sdjm 		0x90, 0xB9, 0x4A, 0x03, 0xC1, 0xD3, 0x56, 0xC2, 0x11, 0x22,
158f1535dc8Sdjm 		0x34, 0x32, 0x80, 0xD6, 0x11, 0x5C, 0x1D, 0x21,
15959919d1cStb 	},
16059919d1cStb 	.y = {
161*01938560Stb 		0xbd, 0x37, 0x63, 0x88, 0xb5, 0xf7, 0x23, 0xfb, 0x4c, 0x22,
162f1535dc8Sdjm 		0xdf, 0xe6, 0xcd, 0x43, 0x75, 0xa0, 0x5a, 0x07, 0x47, 0x64,
163f1535dc8Sdjm 		0x44, 0xd5, 0x81, 0x99, 0x85, 0x00, 0x7e, 0x34,
16459919d1cStb 	},
16559919d1cStb 	.order = {
166*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
167f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0x16, 0xA2, 0xE0, 0xB8, 0xF0, 0x3E,
16859919d1cStb 		0x13, 0xDD, 0x29, 0x45, 0x5C, 0x5C, 0x2A, 0x3D,
16959919d1cStb 	},
1705650a0e1Sdjm };
1715650a0e1Sdjm 
172f67ac449Stedu static const struct {
17359919d1cStb 	uint8_t seed[20];
17459919d1cStb 	uint8_t p[48];
17559919d1cStb 	uint8_t a[48];
17659919d1cStb 	uint8_t b[48];
17759919d1cStb 	uint8_t x[48];
17859919d1cStb 	uint8_t y[48];
17959919d1cStb 	uint8_t order[48];
18059919d1cStb } _EC_NIST_PRIME_384 = {
18159919d1cStb 	.seed = {
182*01938560Stb 		0xA3, 0x35, 0x92, 0x6A, 0xA3, 0x19, 0xA2, 0x7A, 0x1D, 0x00,
183f1535dc8Sdjm 		0x89, 0x6A, 0x67, 0x73, 0xA4, 0x82, 0x7A, 0xCD, 0xAC, 0x73,
18459919d1cStb 	},
18559919d1cStb 	.p = {
186*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
187f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
188f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
189f1535dc8Sdjm 		0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
190f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
19159919d1cStb 	},
19259919d1cStb 	.a = {
193*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
194f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
195f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
196f1535dc8Sdjm 		0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
197f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC,
19859919d1cStb 	},
19959919d1cStb 	.b = {
200*01938560Stb 		0xB3, 0x31, 0x2F, 0xA7, 0xE2, 0x3E, 0xE7, 0xE4, 0x98, 0x8E,
201f1535dc8Sdjm 		0x05, 0x6B, 0xE3, 0xF8, 0x2D, 0x19, 0x18, 0x1D, 0x9C, 0x6E,
202f1535dc8Sdjm 		0xFE, 0x81, 0x41, 0x12, 0x03, 0x14, 0x08, 0x8F, 0x50, 0x13,
203f1535dc8Sdjm 		0x87, 0x5A, 0xC6, 0x56, 0x39, 0x8D, 0x8A, 0x2E, 0xD1, 0x9D,
204f1535dc8Sdjm 		0x2A, 0x85, 0xC8, 0xED, 0xD3, 0xEC, 0x2A, 0xEF,
20559919d1cStb 	},
20659919d1cStb 	.x = {
207*01938560Stb 		0xAA, 0x87, 0xCA, 0x22, 0xBE, 0x8B, 0x05, 0x37, 0x8E, 0xB1,
208f1535dc8Sdjm 		0xC7, 0x1E, 0xF3, 0x20, 0xAD, 0x74, 0x6E, 0x1D, 0x3B, 0x62,
209f1535dc8Sdjm 		0x8B, 0xA7, 0x9B, 0x98, 0x59, 0xF7, 0x41, 0xE0, 0x82, 0x54,
210f1535dc8Sdjm 		0x2A, 0x38, 0x55, 0x02, 0xF2, 0x5D, 0xBF, 0x55, 0x29, 0x6C,
211f1535dc8Sdjm 		0x3A, 0x54, 0x5E, 0x38, 0x72, 0x76, 0x0A, 0xB7,
21259919d1cStb 	},
21359919d1cStb 	.y = {
214*01938560Stb 		0x36, 0x17, 0xde, 0x4a, 0x96, 0x26, 0x2c, 0x6f, 0x5d, 0x9e,
215f1535dc8Sdjm 		0x98, 0xbf, 0x92, 0x92, 0xdc, 0x29, 0xf8, 0xf4, 0x1d, 0xbd,
216f1535dc8Sdjm 		0x28, 0x9a, 0x14, 0x7c, 0xe9, 0xda, 0x31, 0x13, 0xb5, 0xf0,
217f1535dc8Sdjm 		0xb8, 0xc0, 0x0a, 0x60, 0xb1, 0xce, 0x1d, 0x7e, 0x81, 0x9d,
218f1535dc8Sdjm 		0x7a, 0x43, 0x1d, 0x7c, 0x90, 0xea, 0x0e, 0x5f,
21959919d1cStb 	},
22059919d1cStb 	.order = {
221*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
222f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
223f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0x63, 0x4D, 0x81, 0xF4, 0x37,
224f1535dc8Sdjm 		0x2D, 0xDF, 0x58, 0x1A, 0x0D, 0xB2, 0x48, 0xB0, 0xA7, 0x7A,
22559919d1cStb 		0xEC, 0xEC, 0x19, 0x6A, 0xCC, 0xC5, 0x29, 0x73,
22659919d1cStb 	},
2275650a0e1Sdjm };
2285650a0e1Sdjm 
229f67ac449Stedu static const struct {
23059919d1cStb 	uint8_t seed[20];
23159919d1cStb 	uint8_t p[66];
23259919d1cStb 	uint8_t a[66];
23359919d1cStb 	uint8_t b[66];
23459919d1cStb 	uint8_t x[66];
23559919d1cStb 	uint8_t y[66];
23659919d1cStb 	uint8_t order[66];
23759919d1cStb } _EC_NIST_PRIME_521 = {
23859919d1cStb 	.seed = {
239*01938560Stb 		0xD0, 0x9E, 0x88, 0x00, 0x29, 0x1C, 0xB8, 0x53, 0x96, 0xCC,
240f1535dc8Sdjm 		0x67, 0x17, 0x39, 0x32, 0x84, 0xAA, 0xA0, 0xDA, 0x64, 0xBA,
24159919d1cStb 	},
24259919d1cStb 	.p = {
243*01938560Stb 		0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
244f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
245f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
246f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
247f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
248f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
249f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
25059919d1cStb 	},
25159919d1cStb 	.a = {
252*01938560Stb 		0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
253f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
254f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
255f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
256f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
257f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
258f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
25959919d1cStb 	},
26059919d1cStb 	.b = {
261*01938560Stb 		0x00, 0x51, 0x95, 0x3E, 0xB9, 0x61, 0x8E, 0x1C, 0x9A, 0x1F,
262f1535dc8Sdjm 		0x92, 0x9A, 0x21, 0xA0, 0xB6, 0x85, 0x40, 0xEE, 0xA2, 0xDA,
263f1535dc8Sdjm 		0x72, 0x5B, 0x99, 0xB3, 0x15, 0xF3, 0xB8, 0xB4, 0x89, 0x91,
264f1535dc8Sdjm 		0x8E, 0xF1, 0x09, 0xE1, 0x56, 0x19, 0x39, 0x51, 0xEC, 0x7E,
265f1535dc8Sdjm 		0x93, 0x7B, 0x16, 0x52, 0xC0, 0xBD, 0x3B, 0xB1, 0xBF, 0x07,
266f1535dc8Sdjm 		0x35, 0x73, 0xDF, 0x88, 0x3D, 0x2C, 0x34, 0xF1, 0xEF, 0x45,
267f1535dc8Sdjm 		0x1F, 0xD4, 0x6B, 0x50, 0x3F, 0x00,
26859919d1cStb 	},
26959919d1cStb 	.x = {
270*01938560Stb 		0x00, 0xC6, 0x85, 0x8E, 0x06, 0xB7, 0x04, 0x04, 0xE9, 0xCD,
271f1535dc8Sdjm 		0x9E, 0x3E, 0xCB, 0x66, 0x23, 0x95, 0xB4, 0x42, 0x9C, 0x64,
272f1535dc8Sdjm 		0x81, 0x39, 0x05, 0x3F, 0xB5, 0x21, 0xF8, 0x28, 0xAF, 0x60,
273f1535dc8Sdjm 		0x6B, 0x4D, 0x3D, 0xBA, 0xA1, 0x4B, 0x5E, 0x77, 0xEF, 0xE7,
274f1535dc8Sdjm 		0x59, 0x28, 0xFE, 0x1D, 0xC1, 0x27, 0xA2, 0xFF, 0xA8, 0xDE,
275f1535dc8Sdjm 		0x33, 0x48, 0xB3, 0xC1, 0x85, 0x6A, 0x42, 0x9B, 0xF9, 0x7E,
276f1535dc8Sdjm 		0x7E, 0x31, 0xC2, 0xE5, 0xBD, 0x66,
27759919d1cStb 	},
27859919d1cStb 	.y = {
279*01938560Stb 		0x01, 0x18, 0x39, 0x29, 0x6a, 0x78, 0x9a, 0x3b, 0xc0, 0x04,
280f1535dc8Sdjm 		0x5c, 0x8a, 0x5f, 0xb4, 0x2c, 0x7d, 0x1b, 0xd9, 0x98, 0xf5,
281f1535dc8Sdjm 		0x44, 0x49, 0x57, 0x9b, 0x44, 0x68, 0x17, 0xaf, 0xbd, 0x17,
282f1535dc8Sdjm 		0x27, 0x3e, 0x66, 0x2c, 0x97, 0xee, 0x72, 0x99, 0x5e, 0xf4,
283f1535dc8Sdjm 		0x26, 0x40, 0xc5, 0x50, 0xb9, 0x01, 0x3f, 0xad, 0x07, 0x61,
284f1535dc8Sdjm 		0x35, 0x3c, 0x70, 0x86, 0xa2, 0x72, 0xc2, 0x40, 0x88, 0xbe,
285f1535dc8Sdjm 		0x94, 0x76, 0x9f, 0xd1, 0x66, 0x50,
28659919d1cStb 	},
28759919d1cStb 	.order = {
288*01938560Stb 		0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
289f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
290f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
291f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFA, 0x51, 0x86, 0x87, 0x83, 0xBF, 0x2F,
292f1535dc8Sdjm 		0x96, 0x6B, 0x7F, 0xCC, 0x01, 0x48, 0xF7, 0x09, 0xA5, 0xD0,
293f1535dc8Sdjm 		0x3B, 0xB5, 0xC9, 0xB8, 0x89, 0x9C, 0x47, 0xAE, 0xBB, 0x6F,
29459919d1cStb 		0xB7, 0x1E, 0x91, 0x38, 0x64, 0x09,
29559919d1cStb 	},
2965650a0e1Sdjm };
297f1535dc8Sdjm 
2985650a0e1Sdjm /* the x9.62 prime curves (minus the nist prime curves) */
299f67ac449Stedu static const struct {
30059919d1cStb 	uint8_t seed[20];
30159919d1cStb 	uint8_t p[24];
30259919d1cStb 	uint8_t a[24];
30359919d1cStb 	uint8_t b[24];
30459919d1cStb 	uint8_t x[24];
30559919d1cStb 	uint8_t y[24];
30659919d1cStb 	uint8_t order[24];
30759919d1cStb } _EC_X9_62_PRIME_192V2 = {
30859919d1cStb 	.seed = {
309*01938560Stb 		0x31, 0xA9, 0x2E, 0xE2, 0x02, 0x9F, 0xD1, 0x0D, 0x90, 0x1B,
310f1535dc8Sdjm 		0x11, 0x3E, 0x99, 0x07, 0x10, 0xF0, 0xD2, 0x1A, 0xC6, 0xB6,
31159919d1cStb 	},
31259919d1cStb 	.p = {
313*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
314f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
315f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF,
31659919d1cStb 	},
31759919d1cStb 	.a = {
318*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
319f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
320f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFC,
32159919d1cStb 	},
32259919d1cStb 	.b = {
323*01938560Stb 		0xCC, 0x22, 0xD6, 0xDF, 0xB9, 0x5C, 0x6B, 0x25, 0xE4, 0x9C,
324f1535dc8Sdjm 		0x0D, 0x63, 0x64, 0xA4, 0xE5, 0x98, 0x0C, 0x39, 0x3A, 0xA2,
325f1535dc8Sdjm 		0x16, 0x68, 0xD9, 0x53,
32659919d1cStb 	},
32759919d1cStb 	.x = {
328*01938560Stb 		0xEE, 0xA2, 0xBA, 0xE7, 0xE1, 0x49, 0x78, 0x42, 0xF2, 0xDE,
329f1535dc8Sdjm 		0x77, 0x69, 0xCF, 0xE9, 0xC9, 0x89, 0xC0, 0x72, 0xAD, 0x69,
330f1535dc8Sdjm 		0x6F, 0x48, 0x03, 0x4A,
33159919d1cStb 	},
33259919d1cStb 	.y = {
333*01938560Stb 		0x65, 0x74, 0xd1, 0x1d, 0x69, 0xb6, 0xec, 0x7a, 0x67, 0x2b,
334f1535dc8Sdjm 		0xb8, 0x2a, 0x08, 0x3d, 0xf2, 0xf2, 0xb0, 0x84, 0x7d, 0xe9,
335f1535dc8Sdjm 		0x70, 0xb2, 0xde, 0x15,
33659919d1cStb 	},
33759919d1cStb 	.order = {
338*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
339f1535dc8Sdjm 		0xFF, 0xFE, 0x5F, 0xB1, 0xA7, 0x24, 0xDC, 0x80, 0x41, 0x86,
34059919d1cStb 		0x48, 0xD8, 0xDD, 0x31,
34159919d1cStb 	},
3425650a0e1Sdjm };
3435650a0e1Sdjm 
344f67ac449Stedu static const struct {
34559919d1cStb 	uint8_t seed[20];
34659919d1cStb 	uint8_t p[24];
34759919d1cStb 	uint8_t a[24];
34859919d1cStb 	uint8_t b[24];
34959919d1cStb 	uint8_t x[24];
35059919d1cStb 	uint8_t y[24];
35159919d1cStb 	uint8_t order[24];
35259919d1cStb } _EC_X9_62_PRIME_192V3 = {
35359919d1cStb 	.seed = {
354*01938560Stb 		0xC4, 0x69, 0x68, 0x44, 0x35, 0xDE, 0xB3, 0x78, 0xC4, 0xB6,
355f1535dc8Sdjm 		0x5C, 0xA9, 0x59, 0x1E, 0x2A, 0x57, 0x63, 0x05, 0x9A, 0x2E,
35659919d1cStb 	},
35759919d1cStb 	.p = {
358*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
359f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
360f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF,
36159919d1cStb 	},
36259919d1cStb 	.a = {
363*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
364f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
365f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFC,
36659919d1cStb 	},
36759919d1cStb 	.b = {
368*01938560Stb 		0x22, 0x12, 0x3D, 0xC2, 0x39, 0x5A, 0x05, 0xCA, 0xA7, 0x42,
369f1535dc8Sdjm 		0x3D, 0xAE, 0xCC, 0xC9, 0x47, 0x60, 0xA7, 0xD4, 0x62, 0x25,
370f1535dc8Sdjm 		0x6B, 0xD5, 0x69, 0x16,
37159919d1cStb 	},
37259919d1cStb 	.x = {
373*01938560Stb 		0x7D, 0x29, 0x77, 0x81, 0x00, 0xC6, 0x5A, 0x1D, 0xA1, 0x78,
374f1535dc8Sdjm 		0x37, 0x16, 0x58, 0x8D, 0xCE, 0x2B, 0x8B, 0x4A, 0xEE, 0x8E,
375f1535dc8Sdjm 		0x22, 0x8F, 0x18, 0x96,
37659919d1cStb 	},
37759919d1cStb 	.y = {
378*01938560Stb 		0x38, 0xa9, 0x0f, 0x22, 0x63, 0x73, 0x37, 0x33, 0x4b, 0x49,
379f1535dc8Sdjm 		0xdc, 0xb6, 0x6a, 0x6d, 0xc8, 0xf9, 0x97, 0x8a, 0xca, 0x76,
380f1535dc8Sdjm 		0x48, 0xa9, 0x43, 0xb0,
38159919d1cStb 	},
38259919d1cStb 	.order = {
383*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
384f1535dc8Sdjm 		0xFF, 0xFF, 0x7A, 0x62, 0xD0, 0x31, 0xC8, 0x3F, 0x42, 0x94,
38559919d1cStb 		0xF6, 0x40, 0xEC, 0x13,
38659919d1cStb 	},
3875650a0e1Sdjm };
3885650a0e1Sdjm 
389f67ac449Stedu static const struct {
39059919d1cStb 	uint8_t seed[20];
39159919d1cStb 	uint8_t p[30];
39259919d1cStb 	uint8_t a[30];
39359919d1cStb 	uint8_t b[30];
39459919d1cStb 	uint8_t x[30];
39559919d1cStb 	uint8_t y[30];
39659919d1cStb 	uint8_t order[30];
39759919d1cStb } _EC_X9_62_PRIME_239V1 = {
39859919d1cStb 	.seed = {
399*01938560Stb 		0xE4, 0x3B, 0xB4, 0x60, 0xF0, 0xB8, 0x0C, 0xC0, 0xC0, 0xB0,
400f1535dc8Sdjm 		0x75, 0x79, 0x8E, 0x94, 0x80, 0x60, 0xF8, 0x32, 0x1B, 0x7D,
40159919d1cStb 	},
40259919d1cStb 	.p = {
403*01938560Stb 		0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
404f1535dc8Sdjm 		0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
405f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
40659919d1cStb 	},
40759919d1cStb 	.a = {
408*01938560Stb 		0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
409f1535dc8Sdjm 		0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
410f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
41159919d1cStb 	},
41259919d1cStb 	.b = {
413*01938560Stb 		0x6B, 0x01, 0x6C, 0x3B, 0xDC, 0xF1, 0x89, 0x41, 0xD0, 0xD6,
414f1535dc8Sdjm 		0x54, 0x92, 0x14, 0x75, 0xCA, 0x71, 0xA9, 0xDB, 0x2F, 0xB2,
415f1535dc8Sdjm 		0x7D, 0x1D, 0x37, 0x79, 0x61, 0x85, 0xC2, 0x94, 0x2C, 0x0A,
41659919d1cStb 	},
41759919d1cStb 	.x = {
418*01938560Stb 		0x0F, 0xFA, 0x96, 0x3C, 0xDC, 0xA8, 0x81, 0x6C, 0xCC, 0x33,
419f1535dc8Sdjm 		0xB8, 0x64, 0x2B, 0xED, 0xF9, 0x05, 0xC3, 0xD3, 0x58, 0x57,
420f1535dc8Sdjm 		0x3D, 0x3F, 0x27, 0xFB, 0xBD, 0x3B, 0x3C, 0xB9, 0xAA, 0xAF,
42159919d1cStb 	},
42259919d1cStb 	.y = {
423*01938560Stb 		0x7d, 0xeb, 0xe8, 0xe4, 0xe9, 0x0a, 0x5d, 0xae, 0x6e, 0x40,
424f1535dc8Sdjm 		0x54, 0xca, 0x53, 0x0b, 0xa0, 0x46, 0x54, 0xb3, 0x68, 0x18,
425f1535dc8Sdjm 		0xce, 0x22, 0x6b, 0x39, 0xfc, 0xcb, 0x7b, 0x02, 0xf1, 0xae,
42659919d1cStb 	},
42759919d1cStb 	.order = {
428*01938560Stb 		0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
429f1535dc8Sdjm 		0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x9E, 0x5E, 0x9A, 0x9F, 0x5D,
43059919d1cStb 		0x90, 0x71, 0xFB, 0xD1, 0x52, 0x26, 0x88, 0x90, 0x9D, 0x0B,
43159919d1cStb 	},
4325650a0e1Sdjm };
4335650a0e1Sdjm 
434f67ac449Stedu static const struct {
43559919d1cStb 	uint8_t seed[20];
43659919d1cStb 	uint8_t p[30];
43759919d1cStb 	uint8_t a[30];
43859919d1cStb 	uint8_t b[30];
43959919d1cStb 	uint8_t x[30];
44059919d1cStb 	uint8_t y[30];
44159919d1cStb 	uint8_t order[30];
44259919d1cStb } _EC_X9_62_PRIME_239V2 = {
44359919d1cStb 	.seed = {
444*01938560Stb 		0xE8, 0xB4, 0x01, 0x16, 0x04, 0x09, 0x53, 0x03, 0xCA, 0x3B,
445f1535dc8Sdjm 		0x80, 0x99, 0x98, 0x2B, 0xE0, 0x9F, 0xCB, 0x9A, 0xE6, 0x16,
44659919d1cStb 	},
44759919d1cStb 	.p = {
448*01938560Stb 		0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
449f1535dc8Sdjm 		0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
450f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
45159919d1cStb 	},
45259919d1cStb 	.a = {
453*01938560Stb 		0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
454f1535dc8Sdjm 		0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
455f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
45659919d1cStb 	},
45759919d1cStb 	.b = {
458*01938560Stb 		0x61, 0x7F, 0xAB, 0x68, 0x32, 0x57, 0x6C, 0xBB, 0xFE, 0xD5,
459f1535dc8Sdjm 		0x0D, 0x99, 0xF0, 0x24, 0x9C, 0x3F, 0xEE, 0x58, 0xB9, 0x4B,
460f1535dc8Sdjm 		0xA0, 0x03, 0x8C, 0x7A, 0xE8, 0x4C, 0x8C, 0x83, 0x2F, 0x2C,
46159919d1cStb 	},
46259919d1cStb 	.x = {
463*01938560Stb 		0x38, 0xAF, 0x09, 0xD9, 0x87, 0x27, 0x70, 0x51, 0x20, 0xC9,
464f1535dc8Sdjm 		0x21, 0xBB, 0x5E, 0x9E, 0x26, 0x29, 0x6A, 0x3C, 0xDC, 0xF2,
465f1535dc8Sdjm 		0xF3, 0x57, 0x57, 0xA0, 0xEA, 0xFD, 0x87, 0xB8, 0x30, 0xE7,
46659919d1cStb 	},
46759919d1cStb 	.y = {
468*01938560Stb 		0x5b, 0x01, 0x25, 0xe4, 0xdb, 0xea, 0x0e, 0xc7, 0x20, 0x6d,
469f1535dc8Sdjm 		0xa0, 0xfc, 0x01, 0xd9, 0xb0, 0x81, 0x32, 0x9f, 0xb5, 0x55,
470f1535dc8Sdjm 		0xde, 0x6e, 0xf4, 0x60, 0x23, 0x7d, 0xff, 0x8b, 0xe4, 0xba,
47159919d1cStb 	},
47259919d1cStb 	.order = {
473*01938560Stb 		0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
474f1535dc8Sdjm 		0xFF, 0xFF, 0x80, 0x00, 0x00, 0xCF, 0xA7, 0xE8, 0x59, 0x43,
47559919d1cStb 		0x77, 0xD4, 0x14, 0xC0, 0x38, 0x21, 0xBC, 0x58, 0x20, 0x63,
47659919d1cStb 	},
4775650a0e1Sdjm };
4785650a0e1Sdjm 
479f67ac449Stedu static const struct {
48059919d1cStb 	uint8_t seed[20];
48159919d1cStb 	uint8_t p[30];
48259919d1cStb 	uint8_t a[30];
48359919d1cStb 	uint8_t b[30];
48459919d1cStb 	uint8_t x[30];
48559919d1cStb 	uint8_t y[30];
48659919d1cStb 	uint8_t order[30];
48759919d1cStb } _EC_X9_62_PRIME_239V3 = {
48859919d1cStb 	.seed = {
489*01938560Stb 		0x7D, 0x73, 0x74, 0x16, 0x8F, 0xFE, 0x34, 0x71, 0xB6, 0x0A,
490f1535dc8Sdjm 		0x85, 0x76, 0x86, 0xA1, 0x94, 0x75, 0xD3, 0xBF, 0xA2, 0xFF,
49159919d1cStb 	},
49259919d1cStb 	.p = {
493*01938560Stb 		0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
494f1535dc8Sdjm 		0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
495f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
49659919d1cStb 	},
49759919d1cStb 	.a = {
498*01938560Stb 		0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
499f1535dc8Sdjm 		0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
500f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
50159919d1cStb 	},
50259919d1cStb 	.b = {
503*01938560Stb 		0x25, 0x57, 0x05, 0xFA, 0x2A, 0x30, 0x66, 0x54, 0xB1, 0xF4,
504f1535dc8Sdjm 		0xCB, 0x03, 0xD6, 0xA7, 0x50, 0xA3, 0x0C, 0x25, 0x01, 0x02,
505f1535dc8Sdjm 		0xD4, 0x98, 0x87, 0x17, 0xD9, 0xBA, 0x15, 0xAB, 0x6D, 0x3E,
50659919d1cStb 	},
50759919d1cStb 	.x = {
508*01938560Stb 		0x67, 0x68, 0xAE, 0x8E, 0x18, 0xBB, 0x92, 0xCF, 0xCF, 0x00,
509f1535dc8Sdjm 		0x5C, 0x94, 0x9A, 0xA2, 0xC6, 0xD9, 0x48, 0x53, 0xD0, 0xE6,
510f1535dc8Sdjm 		0x60, 0xBB, 0xF8, 0x54, 0xB1, 0xC9, 0x50, 0x5F, 0xE9, 0x5A,
51159919d1cStb 	},
51259919d1cStb 	.y = {
513*01938560Stb 		0x16, 0x07, 0xe6, 0x89, 0x8f, 0x39, 0x0c, 0x06, 0xbc, 0x1d,
514f1535dc8Sdjm 		0x55, 0x2b, 0xad, 0x22, 0x6f, 0x3b, 0x6f, 0xcf, 0xe4, 0x8b,
515f1535dc8Sdjm 		0x6e, 0x81, 0x84, 0x99, 0xaf, 0x18, 0xe3, 0xed, 0x6c, 0xf3,
51659919d1cStb 	},
51759919d1cStb 	.order = {
518*01938560Stb 		0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
519f1535dc8Sdjm 		0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x97, 0x5D, 0xEB, 0x41, 0xB3,
52059919d1cStb 		0xA6, 0x05, 0x7C, 0x3C, 0x43, 0x21, 0x46, 0x52, 0x65, 0x51,
52159919d1cStb 	},
5225650a0e1Sdjm };
5235650a0e1Sdjm 
524f67ac449Stedu static const struct {
52559919d1cStb 	uint8_t seed[20];
52659919d1cStb 	uint8_t p[32];
52759919d1cStb 	uint8_t a[32];
52859919d1cStb 	uint8_t b[32];
52959919d1cStb 	uint8_t x[32];
53059919d1cStb 	uint8_t y[32];
53159919d1cStb 	uint8_t order[32];
53259919d1cStb } _EC_X9_62_PRIME_256V1 = {
53359919d1cStb 	.seed = {
534*01938560Stb 		0xC4, 0x9D, 0x36, 0x08, 0x86, 0xE7, 0x04, 0x93, 0x6A, 0x66,
535f1535dc8Sdjm 		0x78, 0xE1, 0x13, 0x9D, 0x26, 0xB7, 0x81, 0x9F, 0x7E, 0x90,
53659919d1cStb 	},
53759919d1cStb 	.p = {
538*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
539f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
540f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
541f1535dc8Sdjm 		0xFF, 0xFF,
54259919d1cStb 	},
54359919d1cStb 	.a = {
544*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
545f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
546f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
547f1535dc8Sdjm 		0xFF, 0xFC,
54859919d1cStb 	},
54959919d1cStb 	.b = {
550*01938560Stb 		0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7, 0xB3, 0xEB,
551f1535dc8Sdjm 		0xBD, 0x55, 0x76, 0x98, 0x86, 0xBC, 0x65, 0x1D, 0x06, 0xB0,
552f1535dc8Sdjm 		0xCC, 0x53, 0xB0, 0xF6, 0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2,
553f1535dc8Sdjm 		0x60, 0x4B,
55459919d1cStb 	},
55559919d1cStb 	.x = {
556*01938560Stb 		0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47, 0xF8, 0xBC,
557f1535dc8Sdjm 		0xE6, 0xE5, 0x63, 0xA4, 0x40, 0xF2, 0x77, 0x03, 0x7D, 0x81,
558f1535dc8Sdjm 		0x2D, 0xEB, 0x33, 0xA0, 0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98,
559f1535dc8Sdjm 		0xC2, 0x96,
56059919d1cStb 	},
56159919d1cStb 	.y = {
562*01938560Stb 		0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b, 0x8e, 0xe7,
563f1535dc8Sdjm 		0xeb, 0x4a, 0x7c, 0x0f, 0x9e, 0x16, 0x2b, 0xce, 0x33, 0x57,
564f1535dc8Sdjm 		0x6b, 0x31, 0x5e, 0xce, 0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf,
565f1535dc8Sdjm 		0x51, 0xf5,
56659919d1cStb 	},
56759919d1cStb 	.order = {
568*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
569f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD,
570f1535dc8Sdjm 		0xA7, 0x17, 0x9E, 0x84, 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63,
57159919d1cStb 		0x25, 0x51,
57259919d1cStb 	},
5735650a0e1Sdjm };
574f1535dc8Sdjm 
5755650a0e1Sdjm /* the secg prime curves (minus the nist and x9.62 prime curves) */
576f67ac449Stedu static const struct {
57759919d1cStb 	uint8_t seed[20];
57859919d1cStb 	uint8_t p[14];
57959919d1cStb 	uint8_t a[14];
58059919d1cStb 	uint8_t b[14];
58159919d1cStb 	uint8_t x[14];
58259919d1cStb 	uint8_t y[14];
58359919d1cStb 	uint8_t order[14];
58459919d1cStb } _EC_SECG_PRIME_112R1 = {
58559919d1cStb 	.seed = {
586*01938560Stb 		0x00, 0xF5, 0x0B, 0x02, 0x8E, 0x4D, 0x69, 0x6E, 0x67, 0x68,
587f1535dc8Sdjm 		0x75, 0x61, 0x51, 0x75, 0x29, 0x04, 0x72, 0x78, 0x3F, 0xB1,
58859919d1cStb 	},
58959919d1cStb 	.p = {
590*01938560Stb 		0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x66, 0x80, 0x76,
591f1535dc8Sdjm 		0xBE, 0xAD, 0x20, 0x8B,
59259919d1cStb 	},
59359919d1cStb 	.a = {
594*01938560Stb 		0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x66, 0x80, 0x76,
595f1535dc8Sdjm 		0xBE, 0xAD, 0x20, 0x88,
59659919d1cStb 	},
59759919d1cStb 	.b = {
598*01938560Stb 		0x65, 0x9E, 0xF8, 0xBA, 0x04, 0x39, 0x16, 0xEE, 0xDE, 0x89,
599f1535dc8Sdjm 		0x11, 0x70, 0x2B, 0x22,
60059919d1cStb 	},
60159919d1cStb 	.x = {
602*01938560Stb 		0x09, 0x48, 0x72, 0x39, 0x99, 0x5A, 0x5E, 0xE7, 0x6B, 0x55,
603f1535dc8Sdjm 		0xF9, 0xC2, 0xF0, 0x98,
60459919d1cStb 	},
60559919d1cStb 	.y = {
606*01938560Stb 		0xa8, 0x9c, 0xe5, 0xaf, 0x87, 0x24, 0xc0, 0xa2, 0x3e, 0x0e,
607f1535dc8Sdjm 		0x0f, 0xf7, 0x75, 0x00,
60859919d1cStb 	},
60959919d1cStb 	.order = {
610*01938560Stb 		0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x76, 0x28, 0xDF,
61159919d1cStb 		0xAC, 0x65, 0x61, 0xC5,
61259919d1cStb 	},
6135650a0e1Sdjm };
6145650a0e1Sdjm 
615f67ac449Stedu static const struct {
61659919d1cStb 	uint8_t seed[20];
61759919d1cStb 	uint8_t p[14];
61859919d1cStb 	uint8_t a[14];
61959919d1cStb 	uint8_t b[14];
62059919d1cStb 	uint8_t x[14];
62159919d1cStb 	uint8_t y[14];
62259919d1cStb 	uint8_t order[14];
62359919d1cStb } _EC_SECG_PRIME_112R2 = {
62459919d1cStb 	.seed = {
625*01938560Stb 		0x00, 0x27, 0x57, 0xA1, 0x11, 0x4D, 0x69, 0x6E, 0x67, 0x68,
626f1535dc8Sdjm 		0x75, 0x61, 0x51, 0x75, 0x53, 0x16, 0xC0, 0x5E, 0x0B, 0xD4,
62759919d1cStb 	},
62859919d1cStb 	.p = {
629*01938560Stb 		0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x66, 0x80, 0x76,
630f1535dc8Sdjm 		0xBE, 0xAD, 0x20, 0x8B,
63159919d1cStb 	},
63259919d1cStb 	.a = {
633*01938560Stb 		0x61, 0x27, 0xC2, 0x4C, 0x05, 0xF3, 0x8A, 0x0A, 0xAA, 0xF6,
634f1535dc8Sdjm 		0x5C, 0x0E, 0xF0, 0x2C,
63559919d1cStb 	},
63659919d1cStb 	.b = {
637*01938560Stb 		0x51, 0xDE, 0xF1, 0x81, 0x5D, 0xB5, 0xED, 0x74, 0xFC, 0xC3,
638f1535dc8Sdjm 		0x4C, 0x85, 0xD7, 0x09,
63959919d1cStb 	},
64059919d1cStb 	.x = {
641*01938560Stb 		0x4B, 0xA3, 0x0A, 0xB5, 0xE8, 0x92, 0xB4, 0xE1, 0x64, 0x9D,
642f1535dc8Sdjm 		0xD0, 0x92, 0x86, 0x43,
64359919d1cStb 	},
64459919d1cStb 	.y = {
645*01938560Stb 		0xad, 0xcd, 0x46, 0xf5, 0x88, 0x2e, 0x37, 0x47, 0xde, 0xf3,
646f1535dc8Sdjm 		0x6e, 0x95, 0x6e, 0x97,
64759919d1cStb 	},
64859919d1cStb 	.order = {
649*01938560Stb 		0x36, 0xDF, 0x0A, 0xAF, 0xD8, 0xB8, 0xD7, 0x59, 0x7C, 0xA1,
65059919d1cStb 		0x05, 0x20, 0xD0, 0x4B,
65159919d1cStb 	},
6525650a0e1Sdjm };
6535650a0e1Sdjm 
654f67ac449Stedu static const struct {
65559919d1cStb 	uint8_t seed[20];
65659919d1cStb 	uint8_t p[16];
65759919d1cStb 	uint8_t a[16];
65859919d1cStb 	uint8_t b[16];
65959919d1cStb 	uint8_t x[16];
66059919d1cStb 	uint8_t y[16];
66159919d1cStb 	uint8_t order[16];
66259919d1cStb } _EC_SECG_PRIME_128R1 = {
66359919d1cStb 	.seed = {
664*01938560Stb 		0x00, 0x0E, 0x0D, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61,
665f1535dc8Sdjm 		0x51, 0x75, 0x0C, 0xC0, 0x3A, 0x44, 0x73, 0xD0, 0x36, 0x79,
66659919d1cStb 	},
66759919d1cStb 	.p = {
668*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
669f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
67059919d1cStb 	},
67159919d1cStb 	.a = {
672*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
673f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
67459919d1cStb 	},
67559919d1cStb 	.b = {
676*01938560Stb 		0xE8, 0x75, 0x79, 0xC1, 0x10, 0x79, 0xF4, 0x3D, 0xD8, 0x24,
677f1535dc8Sdjm 		0x99, 0x3C, 0x2C, 0xEE, 0x5E, 0xD3,
67859919d1cStb 	},
67959919d1cStb 	.x = {
680*01938560Stb 		0x16, 0x1F, 0xF7, 0x52, 0x8B, 0x89, 0x9B, 0x2D, 0x0C, 0x28,
681f1535dc8Sdjm 		0x60, 0x7C, 0xA5, 0x2C, 0x5B, 0x86,
68259919d1cStb 	},
68359919d1cStb 	.y = {
684*01938560Stb 		0xcf, 0x5a, 0xc8, 0x39, 0x5b, 0xaf, 0xeb, 0x13, 0xc0, 0x2d,
685f1535dc8Sdjm 		0xa2, 0x92, 0xdd, 0xed, 0x7a, 0x83,
68659919d1cStb 	},
68759919d1cStb 	.order = {
688*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x75, 0xA3,
68959919d1cStb 		0x0D, 0x1B, 0x90, 0x38, 0xA1, 0x15,
69059919d1cStb 	},
6915650a0e1Sdjm };
6925650a0e1Sdjm 
693f67ac449Stedu static const struct {
69459919d1cStb 	uint8_t seed[20];
69559919d1cStb 	uint8_t p[16];
69659919d1cStb 	uint8_t a[16];
69759919d1cStb 	uint8_t b[16];
69859919d1cStb 	uint8_t x[16];
69959919d1cStb 	uint8_t y[16];
70059919d1cStb 	uint8_t order[16];
70159919d1cStb } _EC_SECG_PRIME_128R2 = {
70259919d1cStb 	.seed = {
703*01938560Stb 		0x00, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75,
704f1535dc8Sdjm 		0x12, 0xD8, 0xF0, 0x34, 0x31, 0xFC, 0xE6, 0x3B, 0x88, 0xF4,
70559919d1cStb 	},
70659919d1cStb 	.p = {
707*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
708f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
70959919d1cStb 	},
71059919d1cStb 	.a = {
711*01938560Stb 		0xD6, 0x03, 0x19, 0x98, 0xD1, 0xB3, 0xBB, 0xFE, 0xBF, 0x59,
712f1535dc8Sdjm 		0xCC, 0x9B, 0xBF, 0xF9, 0xAE, 0xE1,
71359919d1cStb 	},
71459919d1cStb 	.b = {
715*01938560Stb 		0x5E, 0xEE, 0xFC, 0xA3, 0x80, 0xD0, 0x29, 0x19, 0xDC, 0x2C,
716f1535dc8Sdjm 		0x65, 0x58, 0xBB, 0x6D, 0x8A, 0x5D,
71759919d1cStb 	},
71859919d1cStb 	.x = {
719*01938560Stb 		0x7B, 0x6A, 0xA5, 0xD8, 0x5E, 0x57, 0x29, 0x83, 0xE6, 0xFB,
720f1535dc8Sdjm 		0x32, 0xA7, 0xCD, 0xEB, 0xC1, 0x40,
72159919d1cStb 	},
72259919d1cStb 	.y = {
723*01938560Stb 		0x27, 0xb6, 0x91, 0x6a, 0x89, 0x4d, 0x3a, 0xee, 0x71, 0x06,
724f1535dc8Sdjm 		0xfe, 0x80, 0x5f, 0xc3, 0x4b, 0x44,
72559919d1cStb 	},
72659919d1cStb 	.order = {
727*01938560Stb 		0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xBE, 0x00,
72859919d1cStb 		0x24, 0x72, 0x06, 0x13, 0xB5, 0xA3,
72959919d1cStb 	},
7305650a0e1Sdjm };
7315650a0e1Sdjm 
732f67ac449Stedu static const struct {
73359919d1cStb 	uint8_t p[21];
73459919d1cStb 	uint8_t a[21];
73559919d1cStb 	uint8_t b[21];
73659919d1cStb 	uint8_t x[21];
73759919d1cStb 	uint8_t y[21];
73859919d1cStb 	uint8_t order[21];
73959919d1cStb } _EC_SECG_PRIME_160K1 = {
74059919d1cStb 	.p = {
741*01938560Stb 		0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
742f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xAC,
743f1535dc8Sdjm 		0x73,
74459919d1cStb 	},
74559919d1cStb 	.a = {
746*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
747f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
748f1535dc8Sdjm 		0x00,
74959919d1cStb 	},
75059919d1cStb 	.b  = {
751*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
752f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
753f1535dc8Sdjm 		0x07,
75459919d1cStb 	},
75559919d1cStb 	.x = {
756*01938560Stb 		0x00, 0x3B, 0x4C, 0x38, 0x2C, 0xE3, 0x7A, 0xA1, 0x92, 0xA4,
757f1535dc8Sdjm 		0x01, 0x9E, 0x76, 0x30, 0x36, 0xF4, 0xF5, 0xDD, 0x4D, 0x7E,
758f1535dc8Sdjm 		0xBB,
75959919d1cStb 	},
76059919d1cStb 	.y = {
761*01938560Stb 		0x00, 0x93, 0x8c, 0xf9, 0x35, 0x31, 0x8f, 0xdc, 0xed, 0x6b,
762f1535dc8Sdjm 		0xc2, 0x82, 0x86, 0x53, 0x17, 0x33, 0xc3, 0xf0, 0x3c, 0x4f,
763f1535dc8Sdjm 		0xee,
76459919d1cStb 	},
76559919d1cStb 	.order = {
766*01938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
767f1535dc8Sdjm 		0x01, 0xB8, 0xFA, 0x16, 0xDF, 0xAB, 0x9A, 0xCA, 0x16, 0xB6,
76859919d1cStb 		0xB3,
76959919d1cStb 	},
7705650a0e1Sdjm };
7715650a0e1Sdjm 
772f67ac449Stedu static const struct {
77359919d1cStb 	uint8_t seed[20];
77459919d1cStb 	uint8_t p[21];
77559919d1cStb 	uint8_t a[21];
77659919d1cStb 	uint8_t b[21];
77759919d1cStb 	uint8_t x[21];
77859919d1cStb 	uint8_t y[21];
77959919d1cStb 	uint8_t order[21];
78059919d1cStb } _EC_SECG_PRIME_160R1 = {
78159919d1cStb 	.seed = {
782*01938560Stb 		0x10, 0x53, 0xCD, 0xE4, 0x2C, 0x14, 0xD6, 0x96, 0xE6, 0x76,
783f1535dc8Sdjm 		0x87, 0x56, 0x15, 0x17, 0x53, 0x3B, 0xF3, 0xF8, 0x33, 0x45,
78459919d1cStb 	},
78559919d1cStb 	.p = {
786*01938560Stb 		0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
787f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF,
788f1535dc8Sdjm 		0xFF,
78959919d1cStb 	},
79059919d1cStb 	.a = {
791*01938560Stb 		0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
792f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF,
793f1535dc8Sdjm 		0xFC,
79459919d1cStb 	},
79559919d1cStb 	.b = {
796*01938560Stb 		0x00, 0x1C, 0x97, 0xBE, 0xFC, 0x54, 0xBD, 0x7A, 0x8B, 0x65,
797f1535dc8Sdjm 		0xAC, 0xF8, 0x9F, 0x81, 0xD4, 0xD4, 0xAD, 0xC5, 0x65, 0xFA,
798f1535dc8Sdjm 		0x45,
79959919d1cStb 	},
80059919d1cStb 	.x = {
801*01938560Stb 		0x00, 0x4A, 0x96, 0xB5, 0x68, 0x8E, 0xF5, 0x73, 0x28, 0x46,
802f1535dc8Sdjm 		0x64, 0x69, 0x89, 0x68, 0xC3, 0x8B, 0xB9, 0x13, 0xCB, 0xFC,
803f1535dc8Sdjm 		0x82,
80459919d1cStb 	},
80559919d1cStb 	.y = {
806*01938560Stb 		0x00, 0x23, 0xa6, 0x28, 0x55, 0x31, 0x68, 0x94, 0x7d, 0x59,
807f1535dc8Sdjm 		0xdc, 0xc9, 0x12, 0x04, 0x23, 0x51, 0x37, 0x7a, 0xc5, 0xfb,
808f1535dc8Sdjm 		0x32,
80959919d1cStb 	},
81059919d1cStb 	.order = {
811*01938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
812f1535dc8Sdjm 		0x01, 0xF4, 0xC8, 0xF9, 0x27, 0xAE, 0xD3, 0xCA, 0x75, 0x22,
81359919d1cStb 		0x57,
81459919d1cStb 	},
8155650a0e1Sdjm };
8165650a0e1Sdjm 
817f67ac449Stedu static const struct {
81859919d1cStb 	uint8_t seed[20];
81959919d1cStb 	uint8_t p[21];
82059919d1cStb 	uint8_t a[21];
82159919d1cStb 	uint8_t b[21];
82259919d1cStb 	uint8_t x[21];
82359919d1cStb 	uint8_t y[21];
82459919d1cStb 	uint8_t order[21];
82559919d1cStb } _EC_SECG_PRIME_160R2 = {
82659919d1cStb 	.seed = {
827*01938560Stb 		0xB9, 0x9B, 0x99, 0xB0, 0x99, 0xB3, 0x23, 0xE0, 0x27, 0x09,
828f1535dc8Sdjm 		0xA4, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56, 0x15, 0x17, 0x51,
82959919d1cStb 	},
83059919d1cStb 	.p = {
831*01938560Stb 		0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
832f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xAC,
833f1535dc8Sdjm 		0x73,
83459919d1cStb 	},
83559919d1cStb 	.a = {
836*01938560Stb 		0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
837f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xAC,
838f1535dc8Sdjm 		0x70,
83959919d1cStb 	},
84059919d1cStb 	.b = {
841*01938560Stb 		0x00, 0xB4, 0xE1, 0x34, 0xD3, 0xFB, 0x59, 0xEB, 0x8B, 0xAB,
842f1535dc8Sdjm 		0x57, 0x27, 0x49, 0x04, 0x66, 0x4D, 0x5A, 0xF5, 0x03, 0x88,
843f1535dc8Sdjm 		0xBA,
84459919d1cStb 	},
84559919d1cStb 	.x = {
846*01938560Stb 		0x00, 0x52, 0xDC, 0xB0, 0x34, 0x29, 0x3A, 0x11, 0x7E, 0x1F,
847f1535dc8Sdjm 		0x4F, 0xF1, 0x1B, 0x30, 0xF7, 0x19, 0x9D, 0x31, 0x44, 0xCE,
848f1535dc8Sdjm 		0x6D,
84959919d1cStb 	},
85059919d1cStb 	.y = {
851*01938560Stb 		0x00, 0xfe, 0xaf, 0xfe, 0xf2, 0xe3, 0x31, 0xf2, 0x96, 0xe0,
852f1535dc8Sdjm 		0x71, 0xfa, 0x0d, 0xf9, 0x98, 0x2c, 0xfe, 0xa7, 0xd4, 0x3f,
853f1535dc8Sdjm 		0x2e,
85459919d1cStb 	},
85559919d1cStb 	.order = {
856*01938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
857f1535dc8Sdjm 		0x00, 0x35, 0x1E, 0xE7, 0x86, 0xA8, 0x18, 0xF3, 0xA1, 0xA1,
85859919d1cStb 		0x6B,
85959919d1cStb 	},
8605650a0e1Sdjm };
8615650a0e1Sdjm 
862f67ac449Stedu static const struct {
86359919d1cStb 	uint8_t p[24];
86459919d1cStb 	uint8_t a[24];
86559919d1cStb 	uint8_t b[24];
86659919d1cStb 	uint8_t x[24];
86759919d1cStb 	uint8_t y[24];
86859919d1cStb 	uint8_t order[24];
86959919d1cStb } _EC_SECG_PRIME_192K1 = {
87059919d1cStb 	.p = {
871*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
872f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
873f1535dc8Sdjm 		0xFF, 0xFF, 0xEE, 0x37,
87459919d1cStb 	},
87559919d1cStb 	.a = {
876*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
877f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
878f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00,
87959919d1cStb 	},
88059919d1cStb 	.b = {
881*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
882f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
883f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x03,
88459919d1cStb 	},
88559919d1cStb 	.x = {
886*01938560Stb 		0xDB, 0x4F, 0xF1, 0x0E, 0xC0, 0x57, 0xE9, 0xAE, 0x26, 0xB0,
887f1535dc8Sdjm 		0x7D, 0x02, 0x80, 0xB7, 0xF4, 0x34, 0x1D, 0xA5, 0xD1, 0xB1,
888f1535dc8Sdjm 		0xEA, 0xE0, 0x6C, 0x7D,
88959919d1cStb 	},
89059919d1cStb 	.y = {
891*01938560Stb 		0x9b, 0x2f, 0x2f, 0x6d, 0x9c, 0x56, 0x28, 0xa7, 0x84, 0x41,
892f1535dc8Sdjm 		0x63, 0xd0, 0x15, 0xbe, 0x86, 0x34, 0x40, 0x82, 0xaa, 0x88,
893f1535dc8Sdjm 		0xd9, 0x5e, 0x2f, 0x9d,
89459919d1cStb 	},
89559919d1cStb 	.order = {
896*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
897f1535dc8Sdjm 		0xFF, 0xFE, 0x26, 0xF2, 0xFC, 0x17, 0x0F, 0x69, 0x46, 0x6A,
89859919d1cStb 		0x74, 0xDE, 0xFD, 0x8D,
89959919d1cStb 	},
9005650a0e1Sdjm };
9015650a0e1Sdjm 
902f67ac449Stedu static const struct {
90359919d1cStb 	uint8_t p[29];
90459919d1cStb 	uint8_t a[29];
90559919d1cStb 	uint8_t b[29];
90659919d1cStb 	uint8_t x[29];
90759919d1cStb 	uint8_t y[29];
90859919d1cStb 	uint8_t order[29];
90959919d1cStb } _EC_SECG_PRIME_224K1 = {
91059919d1cStb 	.p = {
911*01938560Stb 		0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
912f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
913f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xE5, 0x6D,
91459919d1cStb 	},
91559919d1cStb 	.a = {
916*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
917f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
918f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91959919d1cStb 	},
92059919d1cStb 	.b = {
921*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
922f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
923f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
92459919d1cStb 	},
92559919d1cStb 	.x = {
926*01938560Stb 		0x00, 0xA1, 0x45, 0x5B, 0x33, 0x4D, 0xF0, 0x99, 0xDF, 0x30,
927f1535dc8Sdjm 		0xFC, 0x28, 0xA1, 0x69, 0xA4, 0x67, 0xE9, 0xE4, 0x70, 0x75,
928f1535dc8Sdjm 		0xA9, 0x0F, 0x7E, 0x65, 0x0E, 0xB6, 0xB7, 0xA4, 0x5C,
92959919d1cStb 	},
93059919d1cStb 	.y = {
931*01938560Stb 		0x00, 0x7e, 0x08, 0x9f, 0xed, 0x7f, 0xba, 0x34, 0x42, 0x82,
932f1535dc8Sdjm 		0xca, 0xfb, 0xd6, 0xf7, 0xe3, 0x19, 0xf7, 0xc0, 0xb0, 0xbd,
933f1535dc8Sdjm 		0x59, 0xe2, 0xca, 0x4b, 0xdb, 0x55, 0x6d, 0x61, 0xa5,
93459919d1cStb 	},
93559919d1cStb 	.order = {
936*01938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
937f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x01, 0xDC, 0xE8, 0xD2, 0xEC, 0x61,
93859919d1cStb 		0x84, 0xCA, 0xF0, 0xA9, 0x71, 0x76, 0x9F, 0xB1, 0xF7,
93959919d1cStb 	},
9405650a0e1Sdjm };
9415650a0e1Sdjm 
942f67ac449Stedu static const struct {
94359919d1cStb 	uint8_t p[32];
94459919d1cStb 	uint8_t a[32];
94559919d1cStb 	uint8_t b[32];
94659919d1cStb 	uint8_t x[32];
94759919d1cStb 	uint8_t y[32];
94859919d1cStb 	uint8_t order[32];
94959919d1cStb } _EC_SECG_PRIME_256K1 = {
95059919d1cStb 	.p = {
951*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
952f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
953f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF,
954f1535dc8Sdjm 		0xFC, 0x2F,
95559919d1cStb 	},
95659919d1cStb 	.a = {
957*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
958f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
959f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
960f1535dc8Sdjm 		0x00, 0x00,
96159919d1cStb 	},
96259919d1cStb 	.b = {
963*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
964f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
965f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
966f1535dc8Sdjm 		0x00, 0x07,
96759919d1cStb 	},
96859919d1cStb 	.x = {
969*01938560Stb 		0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, 0x55, 0xA0,
970f1535dc8Sdjm 		0x62, 0x95, 0xCE, 0x87, 0x0B, 0x07, 0x02, 0x9B, 0xFC, 0xDB,
971f1535dc8Sdjm 		0x2D, 0xCE, 0x28, 0xD9, 0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8,
972f1535dc8Sdjm 		0x17, 0x98,
97359919d1cStb 	},
97459919d1cStb 	.y = {
975*01938560Stb 		0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4,
976f1535dc8Sdjm 		0xfb, 0xfc, 0x0e, 0x11, 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48,
977f1535dc8Sdjm 		0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
978f1535dc8Sdjm 		0xd4, 0xb8,
97959919d1cStb 	},
98059919d1cStb 	.order = {
981*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
982f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC, 0xE6,
983f1535dc8Sdjm 		0xAF, 0x48, 0xA0, 0x3B, 0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36,
98459919d1cStb 		0x41, 0x41,
98559919d1cStb 	},
9865650a0e1Sdjm };
9875650a0e1Sdjm 
9885650a0e1Sdjm /* some wap/wtls curves */
989f67ac449Stedu static const struct {
99059919d1cStb 	uint8_t p[15];
99159919d1cStb 	uint8_t a[15];
99259919d1cStb 	uint8_t b[15];
99359919d1cStb 	uint8_t x[15];
99459919d1cStb 	uint8_t y[15];
99559919d1cStb 	uint8_t order[15];
99659919d1cStb } _EC_WTLS_8 = {
99759919d1cStb 	.p = {
998*01938560Stb 		0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
999f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFD, 0xE7,
100059919d1cStb 	},
100159919d1cStb 	.a = {
1002*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1003f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00,
100459919d1cStb 	},
100559919d1cStb 	.b = {
1006*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1007f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x03,
100859919d1cStb 	},
100959919d1cStb 	.x = {
1010*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1011f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x01,
101259919d1cStb 	},
101359919d1cStb 	.y = {
1014*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1015f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x02,
101659919d1cStb 	},
101759919d1cStb 	.order = {
1018*01938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xEC, 0xEA,
101959919d1cStb 		0x55, 0x1A, 0xD8, 0x37, 0xE9,
102059919d1cStb 	},
10215650a0e1Sdjm };
10225650a0e1Sdjm 
1023f67ac449Stedu static const struct {
102459919d1cStb 	uint8_t p[21];
102559919d1cStb 	uint8_t a[21];
102659919d1cStb 	uint8_t b[21];
102759919d1cStb 	uint8_t x[21];
102859919d1cStb 	uint8_t y[21];
102959919d1cStb 	uint8_t order[21];
103059919d1cStb } _EC_WTLS_9 = {
103159919d1cStb 	.p = {
1032*01938560Stb 		0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1033f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x80,
1034f1535dc8Sdjm 		0x8F,
103559919d1cStb 	},
103659919d1cStb 	.a = {
1037*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1038f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1039f1535dc8Sdjm 		0x00,
104059919d1cStb 	},
104159919d1cStb 	.b = {
1042*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1043f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1044f1535dc8Sdjm 		0x03,
104559919d1cStb 	},
104659919d1cStb 	.x = {
1047*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1048f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1049f1535dc8Sdjm 		0x01,
105059919d1cStb 	},
105159919d1cStb 	.y = {
1052*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1053f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1054f1535dc8Sdjm 		0x02,
105559919d1cStb 	},
105659919d1cStb 	.order = {
1057*01938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1058f1535dc8Sdjm 		0x01, 0xCD, 0xC9, 0x8A, 0xE0, 0xE2, 0xDE, 0x57, 0x4A, 0xBF,
105959919d1cStb 		0x33,
106059919d1cStb 	},
10615650a0e1Sdjm };
10625650a0e1Sdjm 
1063f67ac449Stedu static const struct {
106459919d1cStb 	uint8_t p[28];
106559919d1cStb 	uint8_t a[28];
106659919d1cStb 	uint8_t b[28];
106759919d1cStb 	uint8_t x[28];
106859919d1cStb 	uint8_t y[28];
106959919d1cStb 	uint8_t order[28];
107059919d1cStb } _EC_WTLS_12 = {
107159919d1cStb 	.p = {
1072*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1073f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
1074f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
107559919d1cStb 	},
107659919d1cStb 	.a = {
1077*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1078f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
1079f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
108059919d1cStb 	},
108159919d1cStb 	.b = {
1082*01938560Stb 		0xB4, 0x05, 0x0A, 0x85, 0x0C, 0x04, 0xB3, 0xAB, 0xF5, 0x41,
1083f1535dc8Sdjm 		0x32, 0x56, 0x50, 0x44, 0xB0, 0xB7, 0xD7, 0xBF, 0xD8, 0xBA,
1084f1535dc8Sdjm 		0x27, 0x0B, 0x39, 0x43, 0x23, 0x55, 0xFF, 0xB4,
108559919d1cStb 	},
108659919d1cStb 	.x = {
1087*01938560Stb 		0xB7, 0x0E, 0x0C, 0xBD, 0x6B, 0xB4, 0xBF, 0x7F, 0x32, 0x13,
1088f1535dc8Sdjm 		0x90, 0xB9, 0x4A, 0x03, 0xC1, 0xD3, 0x56, 0xC2, 0x11, 0x22,
1089f1535dc8Sdjm 		0x34, 0x32, 0x80, 0xD6, 0x11, 0x5C, 0x1D, 0x21,
109059919d1cStb 	},
109159919d1cStb 	.y = {
1092*01938560Stb 		0xbd, 0x37, 0x63, 0x88, 0xb5, 0xf7, 0x23, 0xfb, 0x4c, 0x22,
1093f1535dc8Sdjm 		0xdf, 0xe6, 0xcd, 0x43, 0x75, 0xa0, 0x5a, 0x07, 0x47, 0x64,
1094f1535dc8Sdjm 		0x44, 0xd5, 0x81, 0x99, 0x85, 0x00, 0x7e, 0x34,
109559919d1cStb 	},
109659919d1cStb 	.order = {
1097*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1098f1535dc8Sdjm 		0xFF, 0xFF, 0xFF, 0xFF, 0x16, 0xA2, 0xE0, 0xB8, 0xF0, 0x3E,
109959919d1cStb 		0x13, 0xDD, 0x29, 0x45, 0x5C, 0x5C, 0x2A, 0x3D,
110059919d1cStb 	},
11015650a0e1Sdjm };
11025650a0e1Sdjm 
1103f67ac449Stedu static const struct {
110459919d1cStb 	uint8_t p[20];
110559919d1cStb 	uint8_t a[20];
110659919d1cStb 	uint8_t b[20];
110759919d1cStb 	uint8_t x[20];
110859919d1cStb 	uint8_t y[20];
110959919d1cStb 	uint8_t order[20];
111059919d1cStb } _EC_brainpoolP160r1 = {
111159919d1cStb 	.p = {
1112*01938560Stb 		0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF,
11139caf19c3Smiod 		0xC7, 0xAD, 0x95, 0xB3, 0xD8, 0x13, 0x95, 0x15, 0x62, 0x0F,
111459919d1cStb 	},
111559919d1cStb 	.a = {
1116*01938560Stb 		0x34, 0x0E, 0x7B, 0xE2, 0xA2, 0x80, 0xEB, 0x74, 0xE2, 0xBE,
11179caf19c3Smiod 		0x61, 0xBA, 0xDA, 0x74, 0x5D, 0x97, 0xE8, 0xF7, 0xC3, 0x00,
111859919d1cStb 	},
111959919d1cStb 	.b = {
1120*01938560Stb 		0x1E, 0x58, 0x9A, 0x85, 0x95, 0x42, 0x34, 0x12, 0x13, 0x4F,
11219caf19c3Smiod 		0xAA, 0x2D, 0xBD, 0xEC, 0x95, 0xC8, 0xD8, 0x67, 0x5E, 0x58,
112259919d1cStb 	},
112359919d1cStb 	.x = {
1124*01938560Stb 		0xBE, 0xD5, 0xAF, 0x16, 0xEA, 0x3F, 0x6A, 0x4F, 0x62, 0x93,
11259caf19c3Smiod 		0x8C, 0x46, 0x31, 0xEB, 0x5A, 0xF7, 0xBD, 0xBC, 0xDB, 0xC3,
112659919d1cStb 	},
112759919d1cStb 	.y = {
1128*01938560Stb 		0x16, 0x67, 0xCB, 0x47, 0x7A, 0x1A, 0x8E, 0xC3, 0x38, 0xF9,
11299caf19c3Smiod 		0x47, 0x41, 0x66, 0x9C, 0x97, 0x63, 0x16, 0xDA, 0x63, 0x21,
113059919d1cStb 	},
113159919d1cStb 	.order = {
1132*01938560Stb 		0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF,
113359919d1cStb 		0x59, 0x91, 0xD4, 0x50, 0x29, 0x40, 0x9E, 0x60, 0xFC, 0x09,
113459919d1cStb 	},
11359caf19c3Smiod };
11369caf19c3Smiod 
1137f67ac449Stedu static const struct {
113859919d1cStb 	uint8_t p[20];
113959919d1cStb 	uint8_t a[20];
114059919d1cStb 	uint8_t b[20];
114159919d1cStb 	uint8_t x[20];
114259919d1cStb 	uint8_t y[20];
114359919d1cStb 	uint8_t order[20];
114459919d1cStb } _EC_brainpoolP160t1 = {
114559919d1cStb 	.p = {
1146*01938560Stb 		0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF,
11479caf19c3Smiod 		0xC7, 0xAD, 0x95, 0xB3, 0xD8, 0x13, 0x95, 0x15, 0x62, 0x0F,
114859919d1cStb 	},
114959919d1cStb 	.a = {
1150*01938560Stb 		0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF,
11519caf19c3Smiod 		0xC7, 0xAD, 0x95, 0xB3, 0xD8, 0x13, 0x95, 0x15, 0x62, 0x0C,
115259919d1cStb 	},
115359919d1cStb 	.b = {
1154*01938560Stb 		0x7A, 0x55, 0x6B, 0x6D, 0xAE, 0x53, 0x5B, 0x7B, 0x51, 0xED,
11559caf19c3Smiod 		0x2C, 0x4D, 0x7D, 0xAA, 0x7A, 0x0B, 0x5C, 0x55, 0xF3, 0x80,
115659919d1cStb 	},
115759919d1cStb 	.x = {
1158*01938560Stb 		0xB1, 0x99, 0xB1, 0x3B, 0x9B, 0x34, 0xEF, 0xC1, 0x39, 0x7E,
11599caf19c3Smiod 		0x64, 0xBA, 0xEB, 0x05, 0xAC, 0xC2, 0x65, 0xFF, 0x23, 0x78,
116059919d1cStb 	},
116159919d1cStb 	.y = {
1162*01938560Stb 		0xAD, 0xD6, 0x71, 0x8B, 0x7C, 0x7C, 0x19, 0x61, 0xF0, 0x99,
11639caf19c3Smiod 		0x1B, 0x84, 0x24, 0x43, 0x77, 0x21, 0x52, 0xC9, 0xE0, 0xAD,
116459919d1cStb 	},
116559919d1cStb 	.order = {
1166*01938560Stb 		0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF,
116759919d1cStb 		0x59, 0x91, 0xD4, 0x50, 0x29, 0x40, 0x9E, 0x60, 0xFC, 0x09,
116859919d1cStb 	},
11699caf19c3Smiod };
11709caf19c3Smiod 
1171f67ac449Stedu static const struct {
117259919d1cStb 	uint8_t p[24];
117359919d1cStb 	uint8_t a[24];
117459919d1cStb 	uint8_t b[24];
117559919d1cStb 	uint8_t x[24];
117659919d1cStb 	uint8_t y[24];
117759919d1cStb 	uint8_t order[24];
117859919d1cStb } _EC_brainpoolP192r1 = {
117959919d1cStb 	.p = {
1180*01938560Stb 		0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3,
11819caf19c3Smiod 		0x46, 0x30, 0x93, 0xD1, 0x8D, 0xB7, 0x8F, 0xCE, 0x47, 0x6D,
11829caf19c3Smiod 		0xE1, 0xA8, 0x62, 0x97,
118359919d1cStb 	},
118459919d1cStb 	.a = {
1185*01938560Stb 		0x6A, 0x91, 0x17, 0x40, 0x76, 0xB1, 0xE0, 0xE1, 0x9C, 0x39,
11869caf19c3Smiod 		0xC0, 0x31, 0xFE, 0x86, 0x85, 0xC1, 0xCA, 0xE0, 0x40, 0xE5,
11879caf19c3Smiod 		0xC6, 0x9A, 0x28, 0xEF,
118859919d1cStb 	},
118959919d1cStb 	.b = {
1190*01938560Stb 		0x46, 0x9A, 0x28, 0xEF, 0x7C, 0x28, 0xCC, 0xA3, 0xDC, 0x72,
11919caf19c3Smiod 		0x1D, 0x04, 0x4F, 0x44, 0x96, 0xBC, 0xCA, 0x7E, 0xF4, 0x14,
11929caf19c3Smiod 		0x6F, 0xBF, 0x25, 0xC9,
119359919d1cStb 	},
119459919d1cStb 	.x = {
1195*01938560Stb 		0xC0, 0xA0, 0x64, 0x7E, 0xAA, 0xB6, 0xA4, 0x87, 0x53, 0xB0,
11969caf19c3Smiod 		0x33, 0xC5, 0x6C, 0xB0, 0xF0, 0x90, 0x0A, 0x2F, 0x5C, 0x48,
11979caf19c3Smiod 		0x53, 0x37, 0x5F, 0xD6,
119859919d1cStb 	},
119959919d1cStb 	.y = {
1200*01938560Stb 		0x14, 0xB6, 0x90, 0x86, 0x6A, 0xBD, 0x5B, 0xB8, 0x8B, 0x5F,
12019caf19c3Smiod 		0x48, 0x28, 0xC1, 0x49, 0x00, 0x02, 0xE6, 0x77, 0x3F, 0xA2,
12029caf19c3Smiod 		0xFA, 0x29, 0x9B, 0x8F,
120359919d1cStb 	},
120459919d1cStb 	.order = {
1205*01938560Stb 		0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3,
12069caf19c3Smiod 		0x46, 0x2F, 0x9E, 0x9E, 0x91, 0x6B, 0x5B, 0xE8, 0xF1, 0x02,
120759919d1cStb 		0x9A, 0xC4, 0xAC, 0xC1,
120859919d1cStb 	},
12099caf19c3Smiod };
12109caf19c3Smiod 
1211f67ac449Stedu static const struct {
121259919d1cStb 	uint8_t p[24];
121359919d1cStb 	uint8_t a[24];
121459919d1cStb 	uint8_t b[24];
121559919d1cStb 	uint8_t x[24];
121659919d1cStb 	uint8_t y[24];
121759919d1cStb 	uint8_t order[24];
121859919d1cStb } _EC_brainpoolP192t1 = {
121959919d1cStb 	.p = {
1220*01938560Stb 		0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3,
12219caf19c3Smiod 		0x46, 0x30, 0x93, 0xD1, 0x8D, 0xB7, 0x8F, 0xCE, 0x47, 0x6D,
12229caf19c3Smiod 		0xE1, 0xA8, 0x62, 0x97,
122359919d1cStb 	},
122459919d1cStb 	.a = {
1225*01938560Stb 		0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3,
12269caf19c3Smiod 		0x46, 0x30, 0x93, 0xD1, 0x8D, 0xB7, 0x8F, 0xCE, 0x47, 0x6D,
12279caf19c3Smiod 		0xE1, 0xA8, 0x62, 0x94,
122859919d1cStb 	},
122959919d1cStb 	.b = {
1230*01938560Stb 		0x13, 0xD5, 0x6F, 0xFA, 0xEC, 0x78, 0x68, 0x1E, 0x68, 0xF9,
12319caf19c3Smiod 		0xDE, 0xB4, 0x3B, 0x35, 0xBE, 0xC2, 0xFB, 0x68, 0x54, 0x2E,
12329caf19c3Smiod 		0x27, 0x89, 0x7B, 0x79,
123359919d1cStb 	},
123459919d1cStb 	.x = {
1235*01938560Stb 		0x3A, 0xE9, 0xE5, 0x8C, 0x82, 0xF6, 0x3C, 0x30, 0x28, 0x2E,
12369caf19c3Smiod 		0x1F, 0xE7, 0xBB, 0xF4, 0x3F, 0xA7, 0x2C, 0x44, 0x6A, 0xF6,
12379caf19c3Smiod 		0xF4, 0x61, 0x81, 0x29,
123859919d1cStb 	},
123959919d1cStb 	.y = {
1240*01938560Stb 		0x09, 0x7E, 0x2C, 0x56, 0x67, 0xC2, 0x22, 0x3A, 0x90, 0x2A,
12419caf19c3Smiod 		0xB5, 0xCA, 0x44, 0x9D, 0x00, 0x84, 0xB7, 0xE5, 0xB3, 0xDE,
12429caf19c3Smiod 		0x7C, 0xCC, 0x01, 0xC9,
124359919d1cStb 	},
124459919d1cStb 	.order = {
1245*01938560Stb 		0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3,
12469caf19c3Smiod 		0x46, 0x2F, 0x9E, 0x9E, 0x91, 0x6B, 0x5B, 0xE8, 0xF1, 0x02,
124759919d1cStb 		0x9A, 0xC4, 0xAC, 0xC1,
124859919d1cStb 	},
12499caf19c3Smiod };
12509caf19c3Smiod 
1251f67ac449Stedu static const struct {
125259919d1cStb 	uint8_t p[28];
125359919d1cStb 	uint8_t a[28];
125459919d1cStb 	uint8_t b[28];
125559919d1cStb 	uint8_t x[28];
125659919d1cStb 	uint8_t y[28];
125759919d1cStb 	uint8_t order[28];
125859919d1cStb } _EC_brainpoolP224r1 = {
125959919d1cStb 	.p = {
1260*01938560Stb 		0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18,
12619caf19c3Smiod 		0x30, 0x25, 0x75, 0xD1, 0xD7, 0x87, 0xB0, 0x9F, 0x07, 0x57,
12629caf19c3Smiod 		0x97, 0xDA, 0x89, 0xF5, 0x7E, 0xC8, 0xC0, 0xFF,
126359919d1cStb 	},
126459919d1cStb 	.a = {
1265*01938560Stb 		0x68, 0xA5, 0xE6, 0x2C, 0xA9, 0xCE, 0x6C, 0x1C, 0x29, 0x98,
12669caf19c3Smiod 		0x03, 0xA6, 0xC1, 0x53, 0x0B, 0x51, 0x4E, 0x18, 0x2A, 0xD8,
12679caf19c3Smiod 		0xB0, 0x04, 0x2A, 0x59, 0xCA, 0xD2, 0x9F, 0x43,
126859919d1cStb 	},
126959919d1cStb 	.b = {
1270*01938560Stb 		0x25, 0x80, 0xF6, 0x3C, 0xCF, 0xE4, 0x41, 0x38, 0x87, 0x07,
12719caf19c3Smiod 		0x13, 0xB1, 0xA9, 0x23, 0x69, 0xE3, 0x3E, 0x21, 0x35, 0xD2,
12729caf19c3Smiod 		0x66, 0xDB, 0xB3, 0x72, 0x38, 0x6C, 0x40, 0x0B,
127359919d1cStb 	},
127459919d1cStb 	.x = {
1275*01938560Stb 		0x0D, 0x90, 0x29, 0xAD, 0x2C, 0x7E, 0x5C, 0xF4, 0x34, 0x08,
12769caf19c3Smiod 		0x23, 0xB2, 0xA8, 0x7D, 0xC6, 0x8C, 0x9E, 0x4C, 0xE3, 0x17,
12779caf19c3Smiod 		0x4C, 0x1E, 0x6E, 0xFD, 0xEE, 0x12, 0xC0, 0x7D,
127859919d1cStb 	},
127959919d1cStb 	.y = {
1280*01938560Stb 		0x58, 0xAA, 0x56, 0xF7, 0x72, 0xC0, 0x72, 0x6F, 0x24, 0xC6,
12819caf19c3Smiod 		0xB8, 0x9E, 0x4E, 0xCD, 0xAC, 0x24, 0x35, 0x4B, 0x9E, 0x99,
12829caf19c3Smiod 		0xCA, 0xA3, 0xF6, 0xD3, 0x76, 0x14, 0x02, 0xCD,
128359919d1cStb 	},
128459919d1cStb 	.order = {
1285*01938560Stb 		0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18,
12869caf19c3Smiod 		0x30, 0x25, 0x75, 0xD0, 0xFB, 0x98, 0xD1, 0x16, 0xBC, 0x4B,
128759919d1cStb 		0x6D, 0xDE, 0xBC, 0xA3, 0xA5, 0xA7, 0x93, 0x9F,
128859919d1cStb 	},
12899caf19c3Smiod };
12909caf19c3Smiod 
1291f67ac449Stedu static const struct {
129259919d1cStb 	uint8_t p[28];
129359919d1cStb 	uint8_t a[28];
129459919d1cStb 	uint8_t b[28];
129559919d1cStb 	uint8_t x[28];
129659919d1cStb 	uint8_t y[28];
129759919d1cStb 	uint8_t order[28];
129859919d1cStb } _EC_brainpoolP224t1 = {
129959919d1cStb 	.p = {
1300*01938560Stb 		0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18,
13019caf19c3Smiod 		0x30, 0x25, 0x75, 0xD1, 0xD7, 0x87, 0xB0, 0x9F, 0x07, 0x57,
13029caf19c3Smiod 		0x97, 0xDA, 0x89, 0xF5, 0x7E, 0xC8, 0xC0, 0xFF,
130359919d1cStb 	},
130459919d1cStb 	.a = {
1305*01938560Stb 		0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18,
13069caf19c3Smiod 		0x30, 0x25, 0x75, 0xD1, 0xD7, 0x87, 0xB0, 0x9F, 0x07, 0x57,
13079caf19c3Smiod 		0x97, 0xDA, 0x89, 0xF5, 0x7E, 0xC8, 0xC0, 0xFC,
130859919d1cStb 	},
130959919d1cStb 	.b = {
1310*01938560Stb 		0x4B, 0x33, 0x7D, 0x93, 0x41, 0x04, 0xCD, 0x7B, 0xEF, 0x27,
13119caf19c3Smiod 		0x1B, 0xF6, 0x0C, 0xED, 0x1E, 0xD2, 0x0D, 0xA1, 0x4C, 0x08,
13129caf19c3Smiod 		0xB3, 0xBB, 0x64, 0xF1, 0x8A, 0x60, 0x88, 0x8D,
131359919d1cStb 	},
131459919d1cStb 	.x = {
1315*01938560Stb 		0x6A, 0xB1, 0xE3, 0x44, 0xCE, 0x25, 0xFF, 0x38, 0x96, 0x42,
13169caf19c3Smiod 		0x4E, 0x7F, 0xFE, 0x14, 0x76, 0x2E, 0xCB, 0x49, 0xF8, 0x92,
13179caf19c3Smiod 		0x8A, 0xC0, 0xC7, 0x60, 0x29, 0xB4, 0xD5, 0x80,
131859919d1cStb 	},
131959919d1cStb 	.y = {
1320*01938560Stb 		0x03, 0x74, 0xE9, 0xF5, 0x14, 0x3E, 0x56, 0x8C, 0xD2, 0x3F,
13219caf19c3Smiod 		0x3F, 0x4D, 0x7C, 0x0D, 0x4B, 0x1E, 0x41, 0xC8, 0xCC, 0x0D,
13229caf19c3Smiod 		0x1C, 0x6A, 0xBD, 0x5F, 0x1A, 0x46, 0xDB, 0x4C,
132359919d1cStb 	},
132459919d1cStb 	.order = {
1325*01938560Stb 		0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18,
13269caf19c3Smiod 		0x30, 0x25, 0x75, 0xD0, 0xFB, 0x98, 0xD1, 0x16, 0xBC, 0x4B,
132759919d1cStb 		0x6D, 0xDE, 0xBC, 0xA3, 0xA5, 0xA7, 0x93, 0x9F,
132859919d1cStb 	},
13299caf19c3Smiod };
13309caf19c3Smiod 
1331f67ac449Stedu static const struct {
133259919d1cStb 	uint8_t p[32];
133359919d1cStb 	uint8_t a[32];
133459919d1cStb 	uint8_t b[32];
133559919d1cStb 	uint8_t x[32];
133659919d1cStb 	uint8_t y[32];
133759919d1cStb 	uint8_t order[32];
133859919d1cStb } _EC_brainpoolP256r1 = {
133959919d1cStb 	.p = {
1340*01938560Stb 		0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66,
13419caf19c3Smiod 		0x0A, 0x90, 0x9D, 0x83, 0x8D, 0x72, 0x6E, 0x3B, 0xF6, 0x23,
13429caf19c3Smiod 		0xD5, 0x26, 0x20, 0x28, 0x20, 0x13, 0x48, 0x1D, 0x1F, 0x6E,
13439caf19c3Smiod 		0x53, 0x77,
134459919d1cStb 	},
134559919d1cStb 	.a = {
1346*01938560Stb 		0x7D, 0x5A, 0x09, 0x75, 0xFC, 0x2C, 0x30, 0x57, 0xEE, 0xF6,
13479caf19c3Smiod 		0x75, 0x30, 0x41, 0x7A, 0xFF, 0xE7, 0xFB, 0x80, 0x55, 0xC1,
13489caf19c3Smiod 		0x26, 0xDC, 0x5C, 0x6C, 0xE9, 0x4A, 0x4B, 0x44, 0xF3, 0x30,
13499caf19c3Smiod 		0xB5, 0xD9,
135059919d1cStb 	},
135159919d1cStb 	.b = {
1352*01938560Stb 		0x26, 0xDC, 0x5C, 0x6C, 0xE9, 0x4A, 0x4B, 0x44, 0xF3, 0x30,
13539caf19c3Smiod 		0xB5, 0xD9, 0xBB, 0xD7, 0x7C, 0xBF, 0x95, 0x84, 0x16, 0x29,
13549caf19c3Smiod 		0x5C, 0xF7, 0xE1, 0xCE, 0x6B, 0xCC, 0xDC, 0x18, 0xFF, 0x8C,
13559caf19c3Smiod 		0x07, 0xB6,
135659919d1cStb 	},
135759919d1cStb 	.x = {
1358*01938560Stb 		0x8B, 0xD2, 0xAE, 0xB9, 0xCB, 0x7E, 0x57, 0xCB, 0x2C, 0x4B,
13599caf19c3Smiod 		0x48, 0x2F, 0xFC, 0x81, 0xB7, 0xAF, 0xB9, 0xDE, 0x27, 0xE1,
13609caf19c3Smiod 		0xE3, 0xBD, 0x23, 0xC2, 0x3A, 0x44, 0x53, 0xBD, 0x9A, 0xCE,
13619caf19c3Smiod 		0x32, 0x62,
136259919d1cStb 	},
136359919d1cStb 	.y = {
1364*01938560Stb 		0x54, 0x7E, 0xF8, 0x35, 0xC3, 0xDA, 0xC4, 0xFD, 0x97, 0xF8,
13659caf19c3Smiod 		0x46, 0x1A, 0x14, 0x61, 0x1D, 0xC9, 0xC2, 0x77, 0x45, 0x13,
13669caf19c3Smiod 		0x2D, 0xED, 0x8E, 0x54, 0x5C, 0x1D, 0x54, 0xC7, 0x2F, 0x04,
13679caf19c3Smiod 		0x69, 0x97,
136859919d1cStb 	},
136959919d1cStb 	.order = {
1370*01938560Stb 		0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66,
13719caf19c3Smiod 		0x0A, 0x90, 0x9D, 0x83, 0x8D, 0x71, 0x8C, 0x39, 0x7A, 0xA3,
13729caf19c3Smiod 		0xB5, 0x61, 0xA6, 0xF7, 0x90, 0x1E, 0x0E, 0x82, 0x97, 0x48,
137359919d1cStb 		0x56, 0xA7,
137459919d1cStb 	},
13759caf19c3Smiod };
13769caf19c3Smiod 
1377f67ac449Stedu static const struct {
137859919d1cStb 	uint8_t p[32];
137959919d1cStb 	uint8_t a[32];
138059919d1cStb 	uint8_t b[32];
138159919d1cStb 	uint8_t x[32];
138259919d1cStb 	uint8_t y[32];
138359919d1cStb 	uint8_t order[32];
138459919d1cStb } _EC_brainpoolP256t1 = {
138559919d1cStb 	.p = {
1386*01938560Stb 		0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66,
13879caf19c3Smiod 		0x0A, 0x90, 0x9D, 0x83, 0x8D, 0x72, 0x6E, 0x3B, 0xF6, 0x23,
13889caf19c3Smiod 		0xD5, 0x26, 0x20, 0x28, 0x20, 0x13, 0x48, 0x1D, 0x1F, 0x6E,
13899caf19c3Smiod 		0x53, 0x77,
139059919d1cStb 	},
139159919d1cStb 	.a = {
1392*01938560Stb 		0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66,
13939caf19c3Smiod 		0x0A, 0x90, 0x9D, 0x83, 0x8D, 0x72, 0x6E, 0x3B, 0xF6, 0x23,
13949caf19c3Smiod 		0xD5, 0x26, 0x20, 0x28, 0x20, 0x13, 0x48, 0x1D, 0x1F, 0x6E,
13959caf19c3Smiod 		0x53, 0x74,
139659919d1cStb 	},
139759919d1cStb 	.b = {
1398*01938560Stb 		0x66, 0x2C, 0x61, 0xC4, 0x30, 0xD8, 0x4E, 0xA4, 0xFE, 0x66,
13999caf19c3Smiod 		0xA7, 0x73, 0x3D, 0x0B, 0x76, 0xB7, 0xBF, 0x93, 0xEB, 0xC4,
14009caf19c3Smiod 		0xAF, 0x2F, 0x49, 0x25, 0x6A, 0xE5, 0x81, 0x01, 0xFE, 0xE9,
14019caf19c3Smiod 		0x2B, 0x04,
140259919d1cStb 	},
140359919d1cStb 	.x = {
1404*01938560Stb 		0xA3, 0xE8, 0xEB, 0x3C, 0xC1, 0xCF, 0xE7, 0xB7, 0x73, 0x22,
14059caf19c3Smiod 		0x13, 0xB2, 0x3A, 0x65, 0x61, 0x49, 0xAF, 0xA1, 0x42, 0xC4,
14069caf19c3Smiod 		0x7A, 0xAF, 0xBC, 0x2B, 0x79, 0xA1, 0x91, 0x56, 0x2E, 0x13,
14079caf19c3Smiod 		0x05, 0xF4,
140859919d1cStb 	},
140959919d1cStb 	.y = {
1410*01938560Stb 		0x2D, 0x99, 0x6C, 0x82, 0x34, 0x39, 0xC5, 0x6D, 0x7F, 0x7B,
14119caf19c3Smiod 		0x22, 0xE1, 0x46, 0x44, 0x41, 0x7E, 0x69, 0xBC, 0xB6, 0xDE,
14129caf19c3Smiod 		0x39, 0xD0, 0x27, 0x00, 0x1D, 0xAB, 0xE8, 0xF3, 0x5B, 0x25,
14139caf19c3Smiod 		0xC9, 0xBE,
141459919d1cStb 	},
141559919d1cStb 	.order = {
1416*01938560Stb 		0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66,
14179caf19c3Smiod 		0x0A, 0x90, 0x9D, 0x83, 0x8D, 0x71, 0x8C, 0x39, 0x7A, 0xA3,
14189caf19c3Smiod 		0xB5, 0x61, 0xA6, 0xF7, 0x90, 0x1E, 0x0E, 0x82, 0x97, 0x48,
141959919d1cStb 		0x56, 0xA7,
142059919d1cStb 	},
14219caf19c3Smiod };
14229caf19c3Smiod 
1423f67ac449Stedu static const struct {
142459919d1cStb 	uint8_t p[40];
142559919d1cStb 	uint8_t a[40];
142659919d1cStb 	uint8_t b[40];
142759919d1cStb 	uint8_t x[40];
142859919d1cStb 	uint8_t y[40];
142959919d1cStb 	uint8_t order[40];
143059919d1cStb } _EC_brainpoolP320r1 = {
143159919d1cStb 	.p = {
1432*01938560Stb 		0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C,
14339caf19c3Smiod 		0x78, 0x5E, 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA6,
14349caf19c3Smiod 		0xF6, 0xF4, 0x0D, 0xEF, 0x4F, 0x92, 0xB9, 0xEC, 0x78, 0x93,
14359caf19c3Smiod 		0xEC, 0x28, 0xFC, 0xD4, 0x12, 0xB1, 0xF1, 0xB3, 0x2E, 0x27,
143659919d1cStb 	},
143759919d1cStb 	.a = {
1438*01938560Stb 		0x3E, 0xE3, 0x0B, 0x56, 0x8F, 0xBA, 0xB0, 0xF8, 0x83, 0xCC,
14399caf19c3Smiod 		0xEB, 0xD4, 0x6D, 0x3F, 0x3B, 0xB8, 0xA2, 0xA7, 0x35, 0x13,
14409caf19c3Smiod 		0xF5, 0xEB, 0x79, 0xDA, 0x66, 0x19, 0x0E, 0xB0, 0x85, 0xFF,
14419caf19c3Smiod 		0xA9, 0xF4, 0x92, 0xF3, 0x75, 0xA9, 0x7D, 0x86, 0x0E, 0xB4,
144259919d1cStb 	},
144359919d1cStb 	.b = {
1444*01938560Stb 		0x52, 0x08, 0x83, 0x94, 0x9D, 0xFD, 0xBC, 0x42, 0xD3, 0xAD,
14459caf19c3Smiod 		0x19, 0x86, 0x40, 0x68, 0x8A, 0x6F, 0xE1, 0x3F, 0x41, 0x34,
14469caf19c3Smiod 		0x95, 0x54, 0xB4, 0x9A, 0xCC, 0x31, 0xDC, 0xCD, 0x88, 0x45,
14479caf19c3Smiod 		0x39, 0x81, 0x6F, 0x5E, 0xB4, 0xAC, 0x8F, 0xB1, 0xF1, 0xA6,
144859919d1cStb 	},
144959919d1cStb 	.x = {
1450*01938560Stb 		0x43, 0xBD, 0x7E, 0x9A, 0xFB, 0x53, 0xD8, 0xB8, 0x52, 0x89,
14519caf19c3Smiod 		0xBC, 0xC4, 0x8E, 0xE5, 0xBF, 0xE6, 0xF2, 0x01, 0x37, 0xD1,
14529caf19c3Smiod 		0x0A, 0x08, 0x7E, 0xB6, 0xE7, 0x87, 0x1E, 0x2A, 0x10, 0xA5,
14539caf19c3Smiod 		0x99, 0xC7, 0x10, 0xAF, 0x8D, 0x0D, 0x39, 0xE2, 0x06, 0x11,
145459919d1cStb 	},
145559919d1cStb 	.y = {
1456*01938560Stb 		0x14, 0xFD, 0xD0, 0x55, 0x45, 0xEC, 0x1C, 0xC8, 0xAB, 0x40,
14579caf19c3Smiod 		0x93, 0x24, 0x7F, 0x77, 0x27, 0x5E, 0x07, 0x43, 0xFF, 0xED,
14589caf19c3Smiod 		0x11, 0x71, 0x82, 0xEA, 0xA9, 0xC7, 0x78, 0x77, 0xAA, 0xAC,
14599caf19c3Smiod 		0x6A, 0xC7, 0xD3, 0x52, 0x45, 0xD1, 0x69, 0x2E, 0x8E, 0xE1,
146059919d1cStb 	},
146159919d1cStb 	.order = {
1462*01938560Stb 		0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C,
14639caf19c3Smiod 		0x78, 0x5E, 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA5,
14649caf19c3Smiod 		0xB6, 0x8F, 0x12, 0xA3, 0x2D, 0x48, 0x2E, 0xC7, 0xEE, 0x86,
146559919d1cStb 		0x58, 0xE9, 0x86, 0x91, 0x55, 0x5B, 0x44, 0xC5, 0x93, 0x11,
146659919d1cStb 	},
14679caf19c3Smiod };
14689caf19c3Smiod 
1469f67ac449Stedu static const struct {
147059919d1cStb 	uint8_t p[40];
147159919d1cStb 	uint8_t a[40];
147259919d1cStb 	uint8_t b[40];
147359919d1cStb 	uint8_t x[40];
147459919d1cStb 	uint8_t y[40];
147559919d1cStb 	uint8_t order[40];
147659919d1cStb } _EC_brainpoolP320t1 = {
147759919d1cStb 	.p = {
1478*01938560Stb 		0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C,
14799caf19c3Smiod 		0x78, 0x5E, 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA6,
14809caf19c3Smiod 		0xF6, 0xF4, 0x0D, 0xEF, 0x4F, 0x92, 0xB9, 0xEC, 0x78, 0x93,
14819caf19c3Smiod 		0xEC, 0x28, 0xFC, 0xD4, 0x12, 0xB1, 0xF1, 0xB3, 0x2E, 0x27,
148259919d1cStb 	},
148359919d1cStb 	.a = {
1484*01938560Stb 		0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C,
14859caf19c3Smiod 		0x78, 0x5E, 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA6,
14869caf19c3Smiod 		0xF6, 0xF4, 0x0D, 0xEF, 0x4F, 0x92, 0xB9, 0xEC, 0x78, 0x93,
14879caf19c3Smiod 		0xEC, 0x28, 0xFC, 0xD4, 0x12, 0xB1, 0xF1, 0xB3, 0x2E, 0x24,
148859919d1cStb 	},
148959919d1cStb 	.b = {
1490*01938560Stb 		0xA7, 0xF5, 0x61, 0xE0, 0x38, 0xEB, 0x1E, 0xD5, 0x60, 0xB3,
14919caf19c3Smiod 		0xD1, 0x47, 0xDB, 0x78, 0x20, 0x13, 0x06, 0x4C, 0x19, 0xF2,
14929caf19c3Smiod 		0x7E, 0xD2, 0x7C, 0x67, 0x80, 0xAA, 0xF7, 0x7F, 0xB8, 0xA5,
14939caf19c3Smiod 		0x47, 0xCE, 0xB5, 0xB4, 0xFE, 0xF4, 0x22, 0x34, 0x03, 0x53,
149459919d1cStb 	},
149559919d1cStb 	.x = {
1496*01938560Stb 		0x92, 0x5B, 0xE9, 0xFB, 0x01, 0xAF, 0xC6, 0xFB, 0x4D, 0x3E,
14979caf19c3Smiod 		0x7D, 0x49, 0x90, 0x01, 0x0F, 0x81, 0x34, 0x08, 0xAB, 0x10,
14989caf19c3Smiod 		0x6C, 0x4F, 0x09, 0xCB, 0x7E, 0xE0, 0x78, 0x68, 0xCC, 0x13,
14999caf19c3Smiod 		0x6F, 0xFF, 0x33, 0x57, 0xF6, 0x24, 0xA2, 0x1B, 0xED, 0x52,
150059919d1cStb 	},
150159919d1cStb 	.y = {
1502*01938560Stb 		0x63, 0xBA, 0x3A, 0x7A, 0x27, 0x48, 0x3E, 0xBF, 0x66, 0x71,
15039caf19c3Smiod 		0xDB, 0xEF, 0x7A, 0xBB, 0x30, 0xEB, 0xEE, 0x08, 0x4E, 0x58,
15049caf19c3Smiod 		0xA0, 0xB0, 0x77, 0xAD, 0x42, 0xA5, 0xA0, 0x98, 0x9D, 0x1E,
15059caf19c3Smiod 		0xE7, 0x1B, 0x1B, 0x9B, 0xC0, 0x45, 0x5F, 0xB0, 0xD2, 0xC3,
150659919d1cStb 	},
150759919d1cStb 	.order = {
1508*01938560Stb 		0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C,
15099caf19c3Smiod 		0x78, 0x5E, 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA5,
15109caf19c3Smiod 		0xB6, 0x8F, 0x12, 0xA3, 0x2D, 0x48, 0x2E, 0xC7, 0xEE, 0x86,
151159919d1cStb 		0x58, 0xE9, 0x86, 0x91, 0x55, 0x5B, 0x44, 0xC5, 0x93, 0x11,
151259919d1cStb 	},
15139caf19c3Smiod };
15149caf19c3Smiod 
1515f67ac449Stedu static const struct {
151659919d1cStb 	uint8_t p[48];
151759919d1cStb 	uint8_t a[48];
151859919d1cStb 	uint8_t b[48];
151959919d1cStb 	uint8_t x[48];
152059919d1cStb 	uint8_t y[48];
152159919d1cStb 	uint8_t order[48];
152259919d1cStb } _EC_brainpoolP384r1 = {
152359919d1cStb 	.p = {
1524*01938560Stb 		0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D,
15259caf19c3Smiod 		0x6F, 0x7E, 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09,
15269caf19c3Smiod 		0xED, 0x54, 0x56, 0xB4, 0x12, 0xB1, 0xDA, 0x19, 0x7F, 0xB7,
15279caf19c3Smiod 		0x11, 0x23, 0xAC, 0xD3, 0xA7, 0x29, 0x90, 0x1D, 0x1A, 0x71,
15289caf19c3Smiod 		0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xEC, 0x53,
152959919d1cStb 	},
153059919d1cStb 	.a = {
1531*01938560Stb 		0x7B, 0xC3, 0x82, 0xC6, 0x3D, 0x8C, 0x15, 0x0C, 0x3C, 0x72,
15329caf19c3Smiod 		0x08, 0x0A, 0xCE, 0x05, 0xAF, 0xA0, 0xC2, 0xBE, 0xA2, 0x8E,
15339caf19c3Smiod 		0x4F, 0xB2, 0x27, 0x87, 0x13, 0x91, 0x65, 0xEF, 0xBA, 0x91,
15349caf19c3Smiod 		0xF9, 0x0F, 0x8A, 0xA5, 0x81, 0x4A, 0x50, 0x3A, 0xD4, 0xEB,
15359caf19c3Smiod 		0x04, 0xA8, 0xC7, 0xDD, 0x22, 0xCE, 0x28, 0x26,
153659919d1cStb 	},
153759919d1cStb 	.b = {
1538*01938560Stb 		0x04, 0xA8, 0xC7, 0xDD, 0x22, 0xCE, 0x28, 0x26, 0x8B, 0x39,
15399caf19c3Smiod 		0xB5, 0x54, 0x16, 0xF0, 0x44, 0x7C, 0x2F, 0xB7, 0x7D, 0xE1,
15409caf19c3Smiod 		0x07, 0xDC, 0xD2, 0xA6, 0x2E, 0x88, 0x0E, 0xA5, 0x3E, 0xEB,
15419caf19c3Smiod 		0x62, 0xD5, 0x7C, 0xB4, 0x39, 0x02, 0x95, 0xDB, 0xC9, 0x94,
15429caf19c3Smiod 		0x3A, 0xB7, 0x86, 0x96, 0xFA, 0x50, 0x4C, 0x11,
154359919d1cStb 	},
154459919d1cStb 	.x = {
1545*01938560Stb 		0x1D, 0x1C, 0x64, 0xF0, 0x68, 0xCF, 0x45, 0xFF, 0xA2, 0xA6,
15469caf19c3Smiod 		0x3A, 0x81, 0xB7, 0xC1, 0x3F, 0x6B, 0x88, 0x47, 0xA3, 0xE7,
15479caf19c3Smiod 		0x7E, 0xF1, 0x4F, 0xE3, 0xDB, 0x7F, 0xCA, 0xFE, 0x0C, 0xBD,
15489caf19c3Smiod 		0x10, 0xE8, 0xE8, 0x26, 0xE0, 0x34, 0x36, 0xD6, 0x46, 0xAA,
15499caf19c3Smiod 		0xEF, 0x87, 0xB2, 0xE2, 0x47, 0xD4, 0xAF, 0x1E,
155059919d1cStb 	},
155159919d1cStb 	.y = {
1552*01938560Stb 		0x8A, 0xBE, 0x1D, 0x75, 0x20, 0xF9, 0xC2, 0xA4, 0x5C, 0xB1,
15539caf19c3Smiod 		0xEB, 0x8E, 0x95, 0xCF, 0xD5, 0x52, 0x62, 0xB7, 0x0B, 0x29,
15549caf19c3Smiod 		0xFE, 0xEC, 0x58, 0x64, 0xE1, 0x9C, 0x05, 0x4F, 0xF9, 0x91,
15559caf19c3Smiod 		0x29, 0x28, 0x0E, 0x46, 0x46, 0x21, 0x77, 0x91, 0x81, 0x11,
15569caf19c3Smiod 		0x42, 0x82, 0x03, 0x41, 0x26, 0x3C, 0x53, 0x15,
155759919d1cStb 	},
155859919d1cStb 	.order = {
1559*01938560Stb 		0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D,
15609caf19c3Smiod 		0x6F, 0x7E, 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09,
15619caf19c3Smiod 		0xED, 0x54, 0x56, 0xB3, 0x1F, 0x16, 0x6E, 0x6C, 0xAC, 0x04,
15629caf19c3Smiod 		0x25, 0xA7, 0xCF, 0x3A, 0xB6, 0xAF, 0x6B, 0x7F, 0xC3, 0x10,
156359919d1cStb 		0x3B, 0x88, 0x32, 0x02, 0xE9, 0x04, 0x65, 0x65,
156459919d1cStb 	},
15659caf19c3Smiod };
15669caf19c3Smiod 
1567f67ac449Stedu static const struct {
156859919d1cStb 	uint8_t p[48];
156959919d1cStb 	uint8_t a[48];
157059919d1cStb 	uint8_t b[48];
157159919d1cStb 	uint8_t x[48];
157259919d1cStb 	uint8_t y[48];
157359919d1cStb 	uint8_t order[48];
157459919d1cStb } _EC_brainpoolP384t1 = {
157559919d1cStb 	.p = {
1576*01938560Stb 		0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D,
15779caf19c3Smiod 		0x6F, 0x7E, 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09,
15789caf19c3Smiod 		0xED, 0x54, 0x56, 0xB4, 0x12, 0xB1, 0xDA, 0x19, 0x7F, 0xB7,
15799caf19c3Smiod 		0x11, 0x23, 0xAC, 0xD3, 0xA7, 0x29, 0x90, 0x1D, 0x1A, 0x71,
15809caf19c3Smiod 		0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xEC, 0x53,
158159919d1cStb 	},
158259919d1cStb 	.a = {
1583*01938560Stb 		0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D,
15849caf19c3Smiod 		0x6F, 0x7E, 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09,
15859caf19c3Smiod 		0xED, 0x54, 0x56, 0xB4, 0x12, 0xB1, 0xDA, 0x19, 0x7F, 0xB7,
15869caf19c3Smiod 		0x11, 0x23, 0xAC, 0xD3, 0xA7, 0x29, 0x90, 0x1D, 0x1A, 0x71,
15879caf19c3Smiod 		0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xEC, 0x50,
158859919d1cStb 	},
158959919d1cStb 	.b = {
1590*01938560Stb 		0x7F, 0x51, 0x9E, 0xAD, 0xA7, 0xBD, 0xA8, 0x1B, 0xD8, 0x26,
15919caf19c3Smiod 		0xDB, 0xA6, 0x47, 0x91, 0x0F, 0x8C, 0x4B, 0x93, 0x46, 0xED,
15929caf19c3Smiod 		0x8C, 0xCD, 0xC6, 0x4E, 0x4B, 0x1A, 0xBD, 0x11, 0x75, 0x6D,
15939caf19c3Smiod 		0xCE, 0x1D, 0x20, 0x74, 0xAA, 0x26, 0x3B, 0x88, 0x80, 0x5C,
15949caf19c3Smiod 		0xED, 0x70, 0x35, 0x5A, 0x33, 0xB4, 0x71, 0xEE,
159559919d1cStb 	},
159659919d1cStb 	.x = {
1597*01938560Stb 		0x18, 0xDE, 0x98, 0xB0, 0x2D, 0xB9, 0xA3, 0x06, 0xF2, 0xAF,
15989caf19c3Smiod 		0xCD, 0x72, 0x35, 0xF7, 0x2A, 0x81, 0x9B, 0x80, 0xAB, 0x12,
15999caf19c3Smiod 		0xEB, 0xD6, 0x53, 0x17, 0x24, 0x76, 0xFE, 0xCD, 0x46, 0x2A,
16009caf19c3Smiod 		0xAB, 0xFF, 0xC4, 0xFF, 0x19, 0x1B, 0x94, 0x6A, 0x5F, 0x54,
16019caf19c3Smiod 		0xD8, 0xD0, 0xAA, 0x2F, 0x41, 0x88, 0x08, 0xCC,
160259919d1cStb 	},
160359919d1cStb 	.y = {
1604*01938560Stb 		0x25, 0xAB, 0x05, 0x69, 0x62, 0xD3, 0x06, 0x51, 0xA1, 0x14,
16059caf19c3Smiod 		0xAF, 0xD2, 0x75, 0x5A, 0xD3, 0x36, 0x74, 0x7F, 0x93, 0x47,
16069caf19c3Smiod 		0x5B, 0x7A, 0x1F, 0xCA, 0x3B, 0x88, 0xF2, 0xB6, 0xA2, 0x08,
16079caf19c3Smiod 		0xCC, 0xFE, 0x46, 0x94, 0x08, 0x58, 0x4D, 0xC2, 0xB2, 0x91,
16089caf19c3Smiod 		0x26, 0x75, 0xBF, 0x5B, 0x9E, 0x58, 0x29, 0x28,
160959919d1cStb 	},
161059919d1cStb 	.order = {
1611*01938560Stb 		0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D,
16129caf19c3Smiod 		0x6F, 0x7E, 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09,
16139caf19c3Smiod 		0xED, 0x54, 0x56, 0xB3, 0x1F, 0x16, 0x6E, 0x6C, 0xAC, 0x04,
16149caf19c3Smiod 		0x25, 0xA7, 0xCF, 0x3A, 0xB6, 0xAF, 0x6B, 0x7F, 0xC3, 0x10,
161559919d1cStb 		0x3B, 0x88, 0x32, 0x02, 0xE9, 0x04, 0x65, 0x65,
161659919d1cStb 	},
16179caf19c3Smiod };
16189caf19c3Smiod 
1619f67ac449Stedu static const struct {
162059919d1cStb 	uint8_t p[64];
162159919d1cStb 	uint8_t a[64];
162259919d1cStb 	uint8_t b[64];
162359919d1cStb 	uint8_t x[64];
162459919d1cStb 	uint8_t y[64];
162559919d1cStb 	uint8_t order[64];
162659919d1cStb } _EC_brainpoolP512r1 = {
162759919d1cStb 	.p = {
1628*01938560Stb 		0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4,
16299caf19c3Smiod 		0xE6, 0xAE, 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3,
16309caf19c3Smiod 		0xB3, 0xC9, 0xD2, 0x0E, 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33,
16319caf19c3Smiod 		0x08, 0x71, 0x7D, 0x4D, 0x9B, 0x00, 0x9B, 0xC6, 0x68, 0x42,
16329caf19c3Smiod 		0xAE, 0xCD, 0xA1, 0x2A, 0xE6, 0xA3, 0x80, 0xE6, 0x28, 0x81,
16339caf19c3Smiod 		0xFF, 0x2F, 0x2D, 0x82, 0xC6, 0x85, 0x28, 0xAA, 0x60, 0x56,
16349caf19c3Smiod 		0x58, 0x3A, 0x48, 0xF3,
163559919d1cStb 	},
163659919d1cStb 	.a = {
1637*01938560Stb 		0x78, 0x30, 0xA3, 0x31, 0x8B, 0x60, 0x3B, 0x89, 0xE2, 0x32,
16389caf19c3Smiod 		0x71, 0x45, 0xAC, 0x23, 0x4C, 0xC5, 0x94, 0xCB, 0xDD, 0x8D,
16399caf19c3Smiod 		0x3D, 0xF9, 0x16, 0x10, 0xA8, 0x34, 0x41, 0xCA, 0xEA, 0x98,
16409caf19c3Smiod 		0x63, 0xBC, 0x2D, 0xED, 0x5D, 0x5A, 0xA8, 0x25, 0x3A, 0xA1,
16419caf19c3Smiod 		0x0A, 0x2E, 0xF1, 0xC9, 0x8B, 0x9A, 0xC8, 0xB5, 0x7F, 0x11,
16429caf19c3Smiod 		0x17, 0xA7, 0x2B, 0xF2, 0xC7, 0xB9, 0xE7, 0xC1, 0xAC, 0x4D,
16439caf19c3Smiod 		0x77, 0xFC, 0x94, 0xCA,
164459919d1cStb 	},
164559919d1cStb 	.b = {
1646*01938560Stb 		0x3D, 0xF9, 0x16, 0x10, 0xA8, 0x34, 0x41, 0xCA, 0xEA, 0x98,
16479caf19c3Smiod 		0x63, 0xBC, 0x2D, 0xED, 0x5D, 0x5A, 0xA8, 0x25, 0x3A, 0xA1,
16489caf19c3Smiod 		0x0A, 0x2E, 0xF1, 0xC9, 0x8B, 0x9A, 0xC8, 0xB5, 0x7F, 0x11,
16499caf19c3Smiod 		0x17, 0xA7, 0x2B, 0xF2, 0xC7, 0xB9, 0xE7, 0xC1, 0xAC, 0x4D,
16509caf19c3Smiod 		0x77, 0xFC, 0x94, 0xCA, 0xDC, 0x08, 0x3E, 0x67, 0x98, 0x40,
16519caf19c3Smiod 		0x50, 0xB7, 0x5E, 0xBA, 0xE5, 0xDD, 0x28, 0x09, 0xBD, 0x63,
16529caf19c3Smiod 		0x80, 0x16, 0xF7, 0x23,
165359919d1cStb 	},
165459919d1cStb 	.x = {
1655*01938560Stb 		0x81, 0xAE, 0xE4, 0xBD, 0xD8, 0x2E, 0xD9, 0x64, 0x5A, 0x21,
16569caf19c3Smiod 		0x32, 0x2E, 0x9C, 0x4C, 0x6A, 0x93, 0x85, 0xED, 0x9F, 0x70,
16579caf19c3Smiod 		0xB5, 0xD9, 0x16, 0xC1, 0xB4, 0x3B, 0x62, 0xEE, 0xF4, 0xD0,
16589caf19c3Smiod 		0x09, 0x8E, 0xFF, 0x3B, 0x1F, 0x78, 0xE2, 0xD0, 0xD4, 0x8D,
16599caf19c3Smiod 		0x50, 0xD1, 0x68, 0x7B, 0x93, 0xB9, 0x7D, 0x5F, 0x7C, 0x6D,
16609caf19c3Smiod 		0x50, 0x47, 0x40, 0x6A, 0x5E, 0x68, 0x8B, 0x35, 0x22, 0x09,
16619caf19c3Smiod 		0xBC, 0xB9, 0xF8, 0x22,
166259919d1cStb 	},
166359919d1cStb 	.y = {
1664*01938560Stb 		0x7D, 0xDE, 0x38, 0x5D, 0x56, 0x63, 0x32, 0xEC, 0xC0, 0xEA,
16659caf19c3Smiod 		0xBF, 0xA9, 0xCF, 0x78, 0x22, 0xFD, 0xF2, 0x09, 0xF7, 0x00,
16669caf19c3Smiod 		0x24, 0xA5, 0x7B, 0x1A, 0xA0, 0x00, 0xC5, 0x5B, 0x88, 0x1F,
16679caf19c3Smiod 		0x81, 0x11, 0xB2, 0xDC, 0xDE, 0x49, 0x4A, 0x5F, 0x48, 0x5E,
16689caf19c3Smiod 		0x5B, 0xCA, 0x4B, 0xD8, 0x8A, 0x27, 0x63, 0xAE, 0xD1, 0xCA,
16699caf19c3Smiod 		0x2B, 0x2F, 0xA8, 0xF0, 0x54, 0x06, 0x78, 0xCD, 0x1E, 0x0F,
16709caf19c3Smiod 		0x3A, 0xD8, 0x08, 0x92,
167159919d1cStb 	},
167259919d1cStb 	.order = {
1673*01938560Stb 		0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4,
16749caf19c3Smiod 		0xE6, 0xAE, 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3,
16759caf19c3Smiod 		0xB3, 0xC9, 0xD2, 0x0E, 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33,
16769caf19c3Smiod 		0x08, 0x70, 0x55, 0x3E, 0x5C, 0x41, 0x4C, 0xA9, 0x26, 0x19,
16779caf19c3Smiod 		0x41, 0x86, 0x61, 0x19, 0x7F, 0xAC, 0x10, 0x47, 0x1D, 0xB1,
16789caf19c3Smiod 		0xD3, 0x81, 0x08, 0x5D, 0xDA, 0xDD, 0xB5, 0x87, 0x96, 0x82,
167959919d1cStb 		0x9C, 0xA9, 0x00, 0x69,
168059919d1cStb 	},
16819caf19c3Smiod };
16829caf19c3Smiod 
1683f67ac449Stedu static const struct {
168459919d1cStb 	uint8_t p[64];
168559919d1cStb 	uint8_t a[64];
168659919d1cStb 	uint8_t b[64];
168759919d1cStb 	uint8_t x[64];
168859919d1cStb 	uint8_t y[64];
168959919d1cStb 	uint8_t order[64];
169059919d1cStb } _EC_brainpoolP512t1 = {
169159919d1cStb 	.p = {
1692*01938560Stb 		0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4,
16939caf19c3Smiod 		0xE6, 0xAE, 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3,
16949caf19c3Smiod 		0xB3, 0xC9, 0xD2, 0x0E, 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33,
16959caf19c3Smiod 		0x08, 0x71, 0x7D, 0x4D, 0x9B, 0x00, 0x9B, 0xC6, 0x68, 0x42,
16969caf19c3Smiod 		0xAE, 0xCD, 0xA1, 0x2A, 0xE6, 0xA3, 0x80, 0xE6, 0x28, 0x81,
16979caf19c3Smiod 		0xFF, 0x2F, 0x2D, 0x82, 0xC6, 0x85, 0x28, 0xAA, 0x60, 0x56,
16989caf19c3Smiod 		0x58, 0x3A, 0x48, 0xF3,
169959919d1cStb 	},
170059919d1cStb 	.a = {
1701*01938560Stb 		0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4,
17029caf19c3Smiod 		0xE6, 0xAE, 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3,
17039caf19c3Smiod 		0xB3, 0xC9, 0xD2, 0x0E, 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33,
17049caf19c3Smiod 		0x08, 0x71, 0x7D, 0x4D, 0x9B, 0x00, 0x9B, 0xC6, 0x68, 0x42,
17059caf19c3Smiod 		0xAE, 0xCD, 0xA1, 0x2A, 0xE6, 0xA3, 0x80, 0xE6, 0x28, 0x81,
17069caf19c3Smiod 		0xFF, 0x2F, 0x2D, 0x82, 0xC6, 0x85, 0x28, 0xAA, 0x60, 0x56,
17079caf19c3Smiod 		0x58, 0x3A, 0x48, 0xF0,
170859919d1cStb 	},
170959919d1cStb 	.b = {
1710*01938560Stb 		0x7C, 0xBB, 0xBC, 0xF9, 0x44, 0x1C, 0xFA, 0xB7, 0x6E, 0x18,
17119caf19c3Smiod 		0x90, 0xE4, 0x68, 0x84, 0xEA, 0xE3, 0x21, 0xF7, 0x0C, 0x0B,
17129caf19c3Smiod 		0xCB, 0x49, 0x81, 0x52, 0x78, 0x97, 0x50, 0x4B, 0xEC, 0x3E,
17139caf19c3Smiod 		0x36, 0xA6, 0x2B, 0xCD, 0xFA, 0x23, 0x04, 0x97, 0x65, 0x40,
17149caf19c3Smiod 		0xF6, 0x45, 0x00, 0x85, 0xF2, 0xDA, 0xE1, 0x45, 0xC2, 0x25,
17159caf19c3Smiod 		0x53, 0xB4, 0x65, 0x76, 0x36, 0x89, 0x18, 0x0E, 0xA2, 0x57,
17169caf19c3Smiod 		0x18, 0x67, 0x42, 0x3E,
171759919d1cStb 	},
171859919d1cStb 	.x = {
1719*01938560Stb 		0x64, 0x0E, 0xCE, 0x5C, 0x12, 0x78, 0x87, 0x17, 0xB9, 0xC1,
17209caf19c3Smiod 		0xBA, 0x06, 0xCB, 0xC2, 0xA6, 0xFE, 0xBA, 0x85, 0x84, 0x24,
17219caf19c3Smiod 		0x58, 0xC5, 0x6D, 0xDE, 0x9D, 0xB1, 0x75, 0x8D, 0x39, 0xC0,
17229caf19c3Smiod 		0x31, 0x3D, 0x82, 0xBA, 0x51, 0x73, 0x5C, 0xDB, 0x3E, 0xA4,
17239caf19c3Smiod 		0x99, 0xAA, 0x77, 0xA7, 0xD6, 0x94, 0x3A, 0x64, 0xF7, 0xA3,
17249caf19c3Smiod 		0xF2, 0x5F, 0xE2, 0x6F, 0x06, 0xB5, 0x1B, 0xAA, 0x26, 0x96,
17259caf19c3Smiod 		0xFA, 0x90, 0x35, 0xDA,
172659919d1cStb 	},
172759919d1cStb 	.y = {
1728*01938560Stb 		0x5B, 0x53, 0x4B, 0xD5, 0x95, 0xF5, 0xAF, 0x0F, 0xA2, 0xC8,
17299caf19c3Smiod 		0x92, 0x37, 0x6C, 0x84, 0xAC, 0xE1, 0xBB, 0x4E, 0x30, 0x19,
17309caf19c3Smiod 		0xB7, 0x16, 0x34, 0xC0, 0x11, 0x31, 0x15, 0x9C, 0xAE, 0x03,
17319caf19c3Smiod 		0xCE, 0xE9, 0xD9, 0x93, 0x21, 0x84, 0xBE, 0xEF, 0x21, 0x6B,
17329caf19c3Smiod 		0xD7, 0x1D, 0xF2, 0xDA, 0xDF, 0x86, 0xA6, 0x27, 0x30, 0x6E,
17339caf19c3Smiod 		0xCF, 0xF9, 0x6D, 0xBB, 0x8B, 0xAC, 0xE1, 0x98, 0xB6, 0x1E,
17349caf19c3Smiod 		0x00, 0xF8, 0xB3, 0x32,
173559919d1cStb 	},
173659919d1cStb 	.order = {
1737*01938560Stb 		0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4,
17389caf19c3Smiod 		0xE6, 0xAE, 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3,
17399caf19c3Smiod 		0xB3, 0xC9, 0xD2, 0x0E, 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33,
17409caf19c3Smiod 		0x08, 0x70, 0x55, 0x3E, 0x5C, 0x41, 0x4C, 0xA9, 0x26, 0x19,
17419caf19c3Smiod 		0x41, 0x86, 0x61, 0x19, 0x7F, 0xAC, 0x10, 0x47, 0x1D, 0xB1,
17429caf19c3Smiod 		0xD3, 0x81, 0x08, 0x5D, 0xDA, 0xDD, 0xB5, 0x87, 0x96, 0x82,
174359919d1cStb 		0x9C, 0xA9, 0x00, 0x69,
174459919d1cStb 	},
17459caf19c3Smiod };
17469caf19c3Smiod 
1747f67ac449Stedu static const struct {
174859919d1cStb 	uint8_t p[32];
174959919d1cStb 	uint8_t a[32];
175059919d1cStb 	uint8_t b[32];
175159919d1cStb 	uint8_t x[32];
175259919d1cStb 	uint8_t y[32];
175359919d1cStb 	uint8_t order[32];
175459919d1cStb } _EC_FRP256v1 = {
175559919d1cStb 	.p = {
1756*01938560Stb 		0xF1, 0xFD, 0x17, 0x8C, 0x0B, 0x3A, 0xD5, 0x8F, 0x10, 0x12,
1757f9a1f7bbSmiod 		0x6D, 0xE8, 0xCE, 0x42, 0x43, 0x5B, 0x39, 0x61, 0xAD, 0xBC,
1758f9a1f7bbSmiod 		0xAB, 0xC8, 0xCA, 0x6D, 0xE8, 0xFC, 0xF3, 0x53, 0xD8, 0x6E,
1759f9a1f7bbSmiod 		0x9C, 0x03,
176059919d1cStb 	},
176159919d1cStb 	.a = {
1762*01938560Stb 		0xF1, 0xFD, 0x17, 0x8C, 0x0B, 0x3A, 0xD5, 0x8F, 0x10, 0x12,
1763f9a1f7bbSmiod 		0x6D, 0xE8, 0xCE, 0x42, 0x43, 0x5B, 0x39, 0x61, 0xAD, 0xBC,
1764f9a1f7bbSmiod 		0xAB, 0xC8, 0xCA, 0x6D, 0xE8, 0xFC, 0xF3, 0x53, 0xD8, 0x6E,
1765f9a1f7bbSmiod 		0x9C, 0x00,
176659919d1cStb 	},
176759919d1cStb 	.b = {
1768*01938560Stb 		0xEE, 0x35, 0x3F, 0xCA, 0x54, 0x28, 0xA9, 0x30, 0x0D, 0x4A,
1769f9a1f7bbSmiod 		0xBA, 0x75, 0x4A, 0x44, 0xC0, 0x0F, 0xDF, 0xEC, 0x0C, 0x9A,
1770f9a1f7bbSmiod 		0xE4, 0xB1, 0xA1, 0x80, 0x30, 0x75, 0xED, 0x96, 0x7B, 0x7B,
1771f9a1f7bbSmiod 		0xB7, 0x3F,
177259919d1cStb 	},
177359919d1cStb 	.x = {
1774*01938560Stb 		0xB6, 0xB3, 0xD4, 0xC3, 0x56, 0xC1, 0x39, 0xEB, 0x31, 0x18,
1775f9a1f7bbSmiod 		0x3D, 0x47, 0x49, 0xD4, 0x23, 0x95, 0x8C, 0x27, 0xD2, 0xDC,
1776f9a1f7bbSmiod 		0xAF, 0x98, 0xB7, 0x01, 0x64, 0xC9, 0x7A, 0x2D, 0xD9, 0x8F,
1777f9a1f7bbSmiod 		0x5C, 0xFF,
177859919d1cStb 	},
177959919d1cStb 	.y = {
1780*01938560Stb 		0x61, 0x42, 0xE0, 0xF7, 0xC8, 0xB2, 0x04, 0x91, 0x1F, 0x92,
1781f9a1f7bbSmiod 		0x71, 0xF0, 0xF3, 0xEC, 0xEF, 0x8C, 0x27, 0x01, 0xC3, 0x07,
1782f9a1f7bbSmiod 		0xE8, 0xE4, 0xC9, 0xE1, 0x83, 0x11, 0x5A, 0x15, 0x54, 0x06,
1783f9a1f7bbSmiod 		0x2C, 0xFB,
178459919d1cStb 	},
178559919d1cStb 	.order = {
1786*01938560Stb 		0xF1, 0xFD, 0x17, 0x8C, 0x0B, 0x3A, 0xD5, 0x8F, 0x10, 0x12,
1787f9a1f7bbSmiod 		0x6D, 0xE8, 0xCE, 0x42, 0x43, 0x5B, 0x53, 0xDC, 0x67, 0xE1,
1788f9a1f7bbSmiod 		0x40, 0xD2, 0xBF, 0x94, 0x1F, 0xFD, 0xD4, 0x59, 0xC6, 0xD6,
178959919d1cStb 		0x55, 0xE1,
179059919d1cStb 	},
1791f9a1f7bbSmiod };
1792f9a1f7bbSmiod 
179390f161ccSmiod #ifndef OPENSSL_NO_GOST
179490f161ccSmiod static const struct {
179559919d1cStb 	uint8_t p[32];
179659919d1cStb 	uint8_t a[32];
179759919d1cStb 	uint8_t b[32];
179859919d1cStb 	uint8_t x[32];
179959919d1cStb 	uint8_t y[32];
180059919d1cStb 	uint8_t order[32];
180159919d1cStb } _EC_GOST_2001_Test = {
180259919d1cStb 	.p = {
1803*01938560Stb 		0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
180490f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
180590f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
180690f161ccSmiod 		0x04, 0x31,
180759919d1cStb 	},
180859919d1cStb 	.a = {
1809*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181090f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181190f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181290f161ccSmiod 		0x00, 0x07,
181359919d1cStb 	},
181459919d1cStb 	.b = {
1815*01938560Stb 		0x5F, 0xBF, 0xF4, 0x98, 0xAA, 0x93, 0x8C, 0xE7, 0x39, 0xB8,
181690f161ccSmiod 		0xE0, 0x22, 0xFB, 0xAF, 0xEF, 0x40, 0x56, 0x3F, 0x6E, 0x6A,
181790f161ccSmiod 		0x34, 0x72, 0xFC, 0x2A, 0x51, 0x4C, 0x0C, 0xE9, 0xDA, 0xE2,
181890f161ccSmiod 		0x3B, 0x7E,
181959919d1cStb 	},
182059919d1cStb 	.x = {
1821*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
182290f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
182390f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
182490f161ccSmiod 		0x00, 0x02,
182559919d1cStb 	},
182659919d1cStb 	.y = {
1827*01938560Stb 		0x08, 0xE2, 0xA8, 0xA0, 0xE6, 0x51, 0x47, 0xD4, 0xBD, 0x63,
182890f161ccSmiod 		0x16, 0x03, 0x0E, 0x16, 0xD1, 0x9C, 0x85, 0xC9, 0x7F, 0x0A,
182990f161ccSmiod 		0x9C, 0xA2, 0x67, 0x12, 0x2B, 0x96, 0xAB, 0xBC, 0xEA, 0x7E,
183090f161ccSmiod 		0x8F, 0xC8,
183159919d1cStb 	},
183259919d1cStb 	.order = {
1833*01938560Stb 		0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
183490f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x50, 0xFE, 0x8A, 0x18,
183590f161ccSmiod 		0x92, 0x97, 0x61, 0x54, 0xC5, 0x9C, 0xFC, 0x19, 0x3A, 0xCC,
183690f161ccSmiod 		0xF5, 0xB3,
183759919d1cStb 	},
183890f161ccSmiod };
183990f161ccSmiod 
184090f161ccSmiod static const struct {
184159919d1cStb 	uint8_t p[32];
184259919d1cStb 	uint8_t a[32];
184359919d1cStb 	uint8_t b[32];
184459919d1cStb 	uint8_t x[32];
184559919d1cStb 	uint8_t y[32];
184659919d1cStb 	uint8_t order[32];
184759919d1cStb } _EC_GOST_2001_CryptoPro_A = {
184859919d1cStb 	.p = {
1849*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
185090f161ccSmiod 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
185190f161ccSmiod 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
185290f161ccSmiod 		0xFD, 0x97,
185359919d1cStb 	},
185459919d1cStb 	.a = {
1855*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
185690f161ccSmiod 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
185790f161ccSmiod 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
185890f161ccSmiod 		0xFD, 0x94,
185959919d1cStb 	},
186059919d1cStb 	.b = {
1861*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
186290f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
186390f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
186490f161ccSmiod 		0x00, 0xA6,
186559919d1cStb 	},
186659919d1cStb 	.x = {
1867*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
186890f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
186990f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
187090f161ccSmiod 		0x00, 0x01,
187159919d1cStb 	},
187259919d1cStb 	.y = {
1873*01938560Stb 		0x8D, 0x91, 0xE4, 0x71, 0xE0, 0x98, 0x9C, 0xDA, 0x27, 0xDF,
187490f161ccSmiod 		0x50, 0x5A, 0x45, 0x3F, 0x2B, 0x76, 0x35, 0x29, 0x4F, 0x2D,
187590f161ccSmiod 		0xDF, 0x23, 0xE3, 0xB1, 0x22, 0xAC, 0xC9, 0x9C, 0x9E, 0x9F,
187690f161ccSmiod 		0x1E, 0x14,
187759919d1cStb 	},
187859919d1cStb 	.order = {
1879*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
188090f161ccSmiod 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6C, 0x61, 0x10, 0x70,
188190f161ccSmiod 		0x99, 0x5A, 0xD1, 0x00, 0x45, 0x84, 0x1B, 0x09, 0xB7, 0x61,
188290f161ccSmiod 		0xB8, 0x93,
188359919d1cStb 	},
188490f161ccSmiod };
188590f161ccSmiod 
188690f161ccSmiod static const struct {
188759919d1cStb 	uint8_t p[32];
188859919d1cStb 	uint8_t a[32];
188959919d1cStb 	uint8_t b[32];
189059919d1cStb 	uint8_t x[32];
189159919d1cStb 	uint8_t y[32];
189259919d1cStb 	uint8_t order[32];
189359919d1cStb } _EC_GOST_2001_CryptoPro_B = {
189459919d1cStb 	.p = {
1895*01938560Stb 		0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189690f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189790f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189890f161ccSmiod 		0x0C, 0x99,
189959919d1cStb 	},
190059919d1cStb 	.a = {
1901*01938560Stb 		0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
190290f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
190390f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
190490f161ccSmiod 		0x0C, 0x96,
190559919d1cStb 	},
190659919d1cStb 	.b = {
1907*01938560Stb 		0x3E, 0x1A, 0xF4, 0x19, 0xA2, 0x69, 0xA5, 0xF8, 0x66, 0xA7,
190890f161ccSmiod 		0xD3, 0xC2, 0x5C, 0x3D, 0xF8, 0x0A, 0xE9, 0x79, 0x25, 0x93,
190990f161ccSmiod 		0x73, 0xFF, 0x2B, 0x18, 0x2F, 0x49, 0xD4, 0xCE, 0x7E, 0x1B,
191090f161ccSmiod 		0xBC, 0x8B,
191159919d1cStb 	},
191259919d1cStb 	.x = {
1913*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
191490f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
191590f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
191690f161ccSmiod 		0x00, 0x01,
191759919d1cStb 	},
191859919d1cStb 	.y = {
1919*01938560Stb 		0x3F, 0xA8, 0x12, 0x43, 0x59, 0xF9, 0x66, 0x80, 0xB8, 0x3D,
192090f161ccSmiod 		0x1C, 0x3E, 0xB2, 0xC0, 0x70, 0xE5, 0xC5, 0x45, 0xC9, 0x85,
192190f161ccSmiod 		0x8D, 0x03, 0xEC, 0xFB, 0x74, 0x4B, 0xF8, 0xD7, 0x17, 0x71,
192290f161ccSmiod 		0x7E, 0xFC,
192359919d1cStb 	},
192459919d1cStb 	.order = {
1925*01938560Stb 		0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192690f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x5F, 0x70, 0x0C, 0xFF,
192790f161ccSmiod 		0xF1, 0xA6, 0x24, 0xE5, 0xE4, 0x97, 0x16, 0x1B, 0xCC, 0x8A,
192890f161ccSmiod 		0x19, 0x8F,
192959919d1cStb 	},
193090f161ccSmiod };
193190f161ccSmiod 
193290f161ccSmiod static const struct {
193359919d1cStb 	uint8_t p[32];
193459919d1cStb 	uint8_t a[32];
193559919d1cStb 	uint8_t b[32];
193659919d1cStb 	uint8_t x[32];
193759919d1cStb 	uint8_t y[32];
193859919d1cStb 	uint8_t order[32];
193959919d1cStb } _EC_GOST_2001_CryptoPro_C = {
194059919d1cStb 	.p = {
1941*01938560Stb 		0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07, 0xAB, 0x1E,
194290f161ccSmiod 		0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA, 0xCF, 0x84, 0x6E, 0x86,
194390f161ccSmiod 		0x78, 0x90, 0x51, 0xD3, 0x79, 0x98, 0xF7, 0xB9, 0x02, 0x2D,
194490f161ccSmiod 		0x75, 0x9B,
194559919d1cStb 	},
194659919d1cStb 	.a = {
1947*01938560Stb 		0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07, 0xAB, 0x1E,
194890f161ccSmiod 		0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA, 0xCF, 0x84, 0x6E, 0x86,
194990f161ccSmiod 		0x78, 0x90, 0x51, 0xD3, 0x79, 0x98, 0xF7, 0xB9, 0x02, 0x2D,
195090f161ccSmiod 		0x75, 0x98,
195159919d1cStb 	},
195259919d1cStb 	.b = {
1953*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195490f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195590f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195690f161ccSmiod 		0x80, 0x5A,
195759919d1cStb 	},
195859919d1cStb 	.x = {
1959*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
196090f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
196190f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
196290f161ccSmiod 		0x00, 0x00,
196359919d1cStb 	},
196459919d1cStb 	.y = {
1965*01938560Stb 		0x41, 0xEC, 0xE5, 0x57, 0x43, 0x71, 0x1A, 0x8C, 0x3C, 0xBF,
196690f161ccSmiod 		0x37, 0x83, 0xCD, 0x08, 0xC0, 0xEE, 0x4D, 0x4D, 0xC4, 0x40,
196790f161ccSmiod 		0xD4, 0x64, 0x1A, 0x8F, 0x36, 0x6E, 0x55, 0x0D, 0xFD, 0xB3,
196890f161ccSmiod 		0xBB, 0x67,
196959919d1cStb 	},
197059919d1cStb 	.order = {
1971*01938560Stb 		0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07, 0xAB, 0x1E,
197290f161ccSmiod 		0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA, 0x58, 0x2C, 0xA3, 0x51,
197390f161ccSmiod 		0x1E, 0xDD, 0xFB, 0x74, 0xF0, 0x2F, 0x3A, 0x65, 0x98, 0x98,
197490f161ccSmiod 		0x0B, 0xB9,
197559919d1cStb 	},
197690f161ccSmiod };
197790f161ccSmiod 
19785a4e9db7Sjsing /*
19795a4e9db7Sjsing  * This curve is defined in two birationally equal forms: canonical and Twisted
19805a4e9db7Sjsing  * Edwards. We do calculations in canonical (Weierstrass) form.
19815a4e9db7Sjsing  */
19825a4e9db7Sjsing static const struct {
198359919d1cStb 	uint8_t p[32];
198459919d1cStb 	uint8_t a[32];
198559919d1cStb 	uint8_t b[32];
198659919d1cStb 	uint8_t x[32];
198759919d1cStb 	uint8_t y[32];
198859919d1cStb 	uint8_t order[32];
198959919d1cStb } _EC_GOST_2012_256_TC26_A = {
199059919d1cStb 	.p = {
1991*01938560Stb 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
19925a4e9db7Sjsing 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
19935a4e9db7Sjsing 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
19945a4e9db7Sjsing 		0xFD, 0x97,
199559919d1cStb 	},
199659919d1cStb 	.a = {
1997*01938560Stb 		0xc2, 0x17, 0x3f, 0x15, 0x13, 0x98, 0x16, 0x73, 0xaf, 0x48,
19985a4e9db7Sjsing 		0x92, 0xc2, 0x30, 0x35, 0xa2, 0x7c, 0xe2, 0x5e, 0x20, 0x13,
19995a4e9db7Sjsing 		0xbf, 0x95, 0xaa, 0x33, 0xb2, 0x2c, 0x65, 0x6f, 0x27, 0x7e,
20005a4e9db7Sjsing 		0x73, 0x35,
200159919d1cStb 	},
200259919d1cStb 	.b = {
2003*01938560Stb 		0x29, 0x5f, 0x9b, 0xae, 0x74, 0x28, 0xed, 0x9c, 0xcc, 0x20,
20045a4e9db7Sjsing 		0xe7, 0xc3, 0x59, 0xa9, 0xd4, 0x1a, 0x22, 0xfc, 0xcd, 0x91,
20055a4e9db7Sjsing 		0x08, 0xe1, 0x7b, 0xf7, 0xba, 0x93, 0x37, 0xa6, 0xf8, 0xae,
20065a4e9db7Sjsing 		0x95, 0x13,
200759919d1cStb 	},
200859919d1cStb 	.x = {
2009*01938560Stb 		0x91, 0xe3, 0x84, 0x43, 0xa5, 0xe8, 0x2c, 0x0d, 0x88, 0x09,
20105a4e9db7Sjsing 		0x23, 0x42, 0x57, 0x12, 0xb2, 0xbb, 0x65, 0x8b, 0x91, 0x96,
20115a4e9db7Sjsing 		0x93, 0x2e, 0x02, 0xc7, 0x8b, 0x25, 0x82, 0xfe, 0x74, 0x2d,
20125a4e9db7Sjsing 		0xaa, 0x28,
201359919d1cStb 	},
201459919d1cStb 	.y = {
2015*01938560Stb 		0x32, 0x87, 0x94, 0x23, 0xab, 0x1a, 0x03, 0x75, 0x89, 0x57,
20165a4e9db7Sjsing 		0x86, 0xc4, 0xbb, 0x46, 0xe9, 0x56, 0x5f, 0xde, 0x0b, 0x53,
20175a4e9db7Sjsing 		0x44, 0x76, 0x67, 0x40, 0xaf, 0x26, 0x8a, 0xdb, 0x32, 0x32,
20185a4e9db7Sjsing 		0x2e, 0x5c,
201959919d1cStb 	},
202059919d1cStb 	.order = {
2021*01938560Stb 		0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20225a4e9db7Sjsing 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xd8, 0xcd, 0xdf,
20235a4e9db7Sjsing 		0xc8, 0x7b, 0x66, 0x35, 0xc1, 0x15, 0xaf, 0x55, 0x6c, 0x36,
20245a4e9db7Sjsing 		0x0c, 0x67,
202559919d1cStb 	},
20265a4e9db7Sjsing };
20275a4e9db7Sjsing 
202890f161ccSmiod static const struct {
202959919d1cStb 	uint8_t p[64];
203059919d1cStb 	uint8_t a[64];
203159919d1cStb 	uint8_t b[64];
203259919d1cStb 	uint8_t x[64];
203359919d1cStb 	uint8_t y[64];
203459919d1cStb 	uint8_t order[64];
203559919d1cStb } _EC_GOST_2012_512_Test = {
203659919d1cStb 	.p = {
2037*01938560Stb 		0x45, 0x31, 0xac, 0xd1, 0xfe, 0x00, 0x23, 0xc7, 0x55, 0x0d,
20385a4e9db7Sjsing 		0x26, 0x7b, 0x6b, 0x2f, 0xee, 0x80, 0x92, 0x2b, 0x14, 0xb2,
20395a4e9db7Sjsing 		0xff, 0xb9, 0x0f, 0x04, 0xd4, 0xeb, 0x7c, 0x09, 0xb5, 0xd2,
20405a4e9db7Sjsing 		0xd1, 0x5d, 0xf1, 0xd8, 0x52, 0x74, 0x1a, 0xf4, 0x70, 0x4a,
20415a4e9db7Sjsing 		0x04, 0x58, 0x04, 0x7e, 0x80, 0xe4, 0x54, 0x6d, 0x35, 0xb8,
20425a4e9db7Sjsing 		0x33, 0x6f, 0xac, 0x22, 0x4d, 0xd8, 0x16, 0x64, 0xbb, 0xf5,
20435a4e9db7Sjsing 		0x28, 0xbe, 0x63, 0x73,
204459919d1cStb 	},
204559919d1cStb 	.a = {
2046*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20475a4e9db7Sjsing 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20485a4e9db7Sjsing 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20495a4e9db7Sjsing 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20505a4e9db7Sjsing 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20515a4e9db7Sjsing 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20525a4e9db7Sjsing 		0x00, 0x00, 0x00, 0x07,
205359919d1cStb 	},
205459919d1cStb 	.b = {
2055*01938560Stb 		0x1c, 0xff, 0x08, 0x06, 0xa3, 0x11, 0x16, 0xda, 0x29, 0xd8,
20565a4e9db7Sjsing 		0xcf, 0xa5, 0x4e, 0x57, 0xeb, 0x74, 0x8b, 0xc5, 0xf3, 0x77,
20575a4e9db7Sjsing 		0xe4, 0x94, 0x00, 0xfd, 0xd7, 0x88, 0xb6, 0x49, 0xec, 0xa1,
20585a4e9db7Sjsing 		0xac, 0x43, 0x61, 0x83, 0x40, 0x13, 0xb2, 0xad, 0x73, 0x22,
20595a4e9db7Sjsing 		0x48, 0x0a, 0x89, 0xca, 0x58, 0xe0, 0xcf, 0x74, 0xbc, 0x9e,
20605a4e9db7Sjsing 		0x54, 0x0c, 0x2a, 0xdd, 0x68, 0x97, 0xfa, 0xd0, 0xa3, 0x08,
20615a4e9db7Sjsing 		0x4f, 0x30, 0x2a, 0xdc,
206259919d1cStb 	},
206359919d1cStb 	.x = {
2064*01938560Stb 		0x24, 0xd1, 0x9c, 0xc6, 0x45, 0x72, 0xee, 0x30, 0xf3, 0x96,
20655a4e9db7Sjsing 		0xbf, 0x6e, 0xbb, 0xfd, 0x7a, 0x6c, 0x52, 0x13, 0xb3, 0xb3,
20665a4e9db7Sjsing 		0xd7, 0x05, 0x7c, 0xc8, 0x25, 0xf9, 0x10, 0x93, 0xa6, 0x8c,
20675a4e9db7Sjsing 		0xd7, 0x62, 0xfd, 0x60, 0x61, 0x12, 0x62, 0xcd, 0x83, 0x8d,
20685a4e9db7Sjsing 		0xc6, 0xb6, 0x0a, 0xa7, 0xee, 0xe8, 0x04, 0xe2, 0x8b, 0xc8,
20695a4e9db7Sjsing 		0x49, 0x97, 0x7f, 0xac, 0x33, 0xb4, 0xb5, 0x30, 0xf1, 0xb1,
20705a4e9db7Sjsing 		0x20, 0x24, 0x8a, 0x9a,
207159919d1cStb 	},
207259919d1cStb 	.y = {
2073*01938560Stb 		0x2b, 0xb3, 0x12, 0xa4, 0x3b, 0xd2, 0xce, 0x6e, 0x0d, 0x02,
20745a4e9db7Sjsing 		0x06, 0x13, 0xc8, 0x57, 0xac, 0xdd, 0xcf, 0xbf, 0x06, 0x1e,
20755a4e9db7Sjsing 		0x91, 0xe5, 0xf2, 0xc3, 0xf3, 0x24, 0x47, 0xc2, 0x59, 0xf3,
20765a4e9db7Sjsing 		0x9b, 0x2c, 0x83, 0xab, 0x15, 0x6d, 0x77, 0xf1, 0x49, 0x6b,
20775a4e9db7Sjsing 		0xf7, 0xeb, 0x33, 0x51, 0xe1, 0xee, 0x4e, 0x43, 0xdc, 0x1a,
20785a4e9db7Sjsing 		0x18, 0xb9, 0x1b, 0x24, 0x64, 0x0b, 0x6d, 0xbb, 0x92, 0xcb,
20795a4e9db7Sjsing 		0x1a, 0xdd, 0x37, 0x1e,
208059919d1cStb 	},
208159919d1cStb 	.order = {
2082*01938560Stb 		0x45, 0x31, 0xac, 0xd1, 0xfe, 0x00, 0x23, 0xc7, 0x55, 0x0d,
20835a4e9db7Sjsing 		0x26, 0x7b, 0x6b, 0x2f, 0xee, 0x80, 0x92, 0x2b, 0x14, 0xb2,
20845a4e9db7Sjsing 		0xff, 0xb9, 0x0f, 0x04, 0xd4, 0xeb, 0x7c, 0x09, 0xb5, 0xd2,
20855a4e9db7Sjsing 		0xd1, 0x5d, 0xa8, 0x2f, 0x2d, 0x7e, 0xcb, 0x1d, 0xba, 0xc7,
20865a4e9db7Sjsing 		0x19, 0x90, 0x5c, 0x5e, 0xec, 0xc4, 0x23, 0xf1, 0xd8, 0x6e,
20875a4e9db7Sjsing 		0x25, 0xed, 0xbe, 0x23, 0xc5, 0x95, 0xd6, 0x44, 0xaa, 0xf1,
20885a4e9db7Sjsing 		0x87, 0xe6, 0xe6, 0xdf,
208959919d1cStb 	},
20905a4e9db7Sjsing };
20915a4e9db7Sjsing 
20925a4e9db7Sjsing static const struct {
209359919d1cStb 	uint8_t p[64];
209459919d1cStb 	uint8_t a[64];
209559919d1cStb 	uint8_t b[64];
209659919d1cStb 	uint8_t x[64];
209759919d1cStb 	uint8_t y[64];
209859919d1cStb 	uint8_t order[64];
209959919d1cStb } _EC_GOST_2012_512_TC26_A = {
210059919d1cStb 	.p = {
2101*01938560Stb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
210290f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
210390f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
210490f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
210590f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
210690f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
210790f161ccSmiod 		0xff, 0xff, 0xfd, 0xc7,
210859919d1cStb 	},
210959919d1cStb 	.a = {
2110*01938560Stb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
211190f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
211290f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
211390f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
211490f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
211590f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
211690f161ccSmiod 		0xff, 0xff, 0xfd, 0xc4,
211759919d1cStb 	},
211859919d1cStb 	.b = {
2119*01938560Stb 		0xe8, 0xc2, 0x50, 0x5d, 0xed, 0xfc, 0x86, 0xdd, 0xc1, 0xbd,
212090f161ccSmiod 		0x0b, 0x2b, 0x66, 0x67, 0xf1, 0xda, 0x34, 0xb8, 0x25, 0x74,
212190f161ccSmiod 		0x76, 0x1c, 0xb0, 0xe8, 0x79, 0xbd, 0x08, 0x1c, 0xfd, 0x0b,
212290f161ccSmiod 		0x62, 0x65, 0xee, 0x3c, 0xb0, 0x90, 0xf3, 0x0d, 0x27, 0x61,
212390f161ccSmiod 		0x4c, 0xb4, 0x57, 0x40, 0x10, 0xda, 0x90, 0xdd, 0x86, 0x2e,
212490f161ccSmiod 		0xf9, 0xd4, 0xeb, 0xee, 0x47, 0x61, 0x50, 0x31, 0x90, 0x78,
212590f161ccSmiod 		0x5a, 0x71, 0xc7, 0x60,
212659919d1cStb 	},
212759919d1cStb 	.x = {
2128*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
212990f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213090f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213190f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213290f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213390f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213490f161ccSmiod 		0x00, 0x00, 0x00, 0x03,
213559919d1cStb 	},
213659919d1cStb 	.y = {
2137*01938560Stb 		0x75, 0x03, 0xcf, 0xe8, 0x7a, 0x83, 0x6a, 0xe3, 0xa6, 0x1b,
213890f161ccSmiod 		0x88, 0x16, 0xe2, 0x54, 0x50, 0xe6, 0xce, 0x5e, 0x1c, 0x93,
213990f161ccSmiod 		0xac, 0xf1, 0xab, 0xc1, 0x77, 0x80, 0x64, 0xfd, 0xcb, 0xef,
214090f161ccSmiod 		0xa9, 0x21, 0xdf, 0x16, 0x26, 0xbe, 0x4f, 0xd0, 0x36, 0xe9,
214190f161ccSmiod 		0x3d, 0x75, 0xe6, 0xa5, 0x0e, 0x3a, 0x41, 0xe9, 0x80, 0x28,
214290f161ccSmiod 		0xfe, 0x5f, 0xc2, 0x35, 0xf5, 0xb8, 0x89, 0xa5, 0x89, 0xcb,
214390f161ccSmiod 		0x52, 0x15, 0xf2, 0xa4,
214459919d1cStb 	},
214559919d1cStb 	.order = {
2146*01938560Stb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
214790f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
214890f161ccSmiod 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
214990f161ccSmiod 		0xff, 0xff, 0x27, 0xe6, 0x95, 0x32, 0xf4, 0x8d, 0x89, 0x11,
215090f161ccSmiod 		0x6f, 0xf2, 0x2b, 0x8d, 0x4e, 0x05, 0x60, 0x60, 0x9b, 0x4b,
215190f161ccSmiod 		0x38, 0xab, 0xfa, 0xd2, 0xb8, 0x5d, 0xca, 0xcd, 0xb1, 0x41,
215259919d1cStb 		0x1f, 0x10, 0xb2, 0x75,
215359919d1cStb 	},
215490f161ccSmiod };
215590f161ccSmiod 
215690f161ccSmiod static const struct {
215759919d1cStb 	uint8_t p[64];
215859919d1cStb 	uint8_t a[64];
215959919d1cStb 	uint8_t b[64];
216059919d1cStb 	uint8_t x[64];
216159919d1cStb 	uint8_t y[64];
216259919d1cStb 	uint8_t order[64];
216359919d1cStb } _EC_GOST_2012_512_TC26_B = {
216459919d1cStb 	.p = {
2165*01938560Stb 		0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
216690f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
216790f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
216890f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
216990f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217090f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217190f161ccSmiod 		0x00, 0x00, 0x00, 0x6f,
217259919d1cStb 	},
217359919d1cStb 	.a = {
2174*01938560Stb 		0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217590f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217690f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217790f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217890f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217990f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
218090f161ccSmiod 		0x00, 0x00, 0x00, 0x6c,
218159919d1cStb 	},
218259919d1cStb 	.b = {
2183*01938560Stb 		0x68, 0x7d, 0x1b, 0x45, 0x9d, 0xc8, 0x41, 0x45, 0x7e, 0x3e,
218490f161ccSmiod 		0x06, 0xcf, 0x6f, 0x5e, 0x25, 0x17, 0xb9, 0x7c, 0x7d, 0x61,
218590f161ccSmiod 		0x4a, 0xf1, 0x38, 0xbc, 0xbf, 0x85, 0xdc, 0x80, 0x6c, 0x4b,
218690f161ccSmiod 		0x28, 0x9f, 0x3e, 0x96, 0x5d, 0x2d, 0xb1, 0x41, 0x6d, 0x21,
218790f161ccSmiod 		0x7f, 0x8b, 0x27, 0x6f, 0xad, 0x1a, 0xb6, 0x9c, 0x50, 0xf7,
218890f161ccSmiod 		0x8b, 0xee, 0x1f, 0xa3, 0x10, 0x6e, 0xfb, 0x8c, 0xcb, 0xc7,
218990f161ccSmiod 		0xc5, 0x14, 0x01, 0x16,
219059919d1cStb 	},
219159919d1cStb 	.x = {
2192*01938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219390f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219490f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219590f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219690f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219790f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219890f161ccSmiod 		0x00, 0x00, 0x00, 0x02,
219959919d1cStb 	},
220059919d1cStb 	.y = {
2201*01938560Stb 		0x1a, 0x8f, 0x7e, 0xda, 0x38, 0x9b, 0x09, 0x4c, 0x2c, 0x07,
220290f161ccSmiod 		0x1e, 0x36, 0x47, 0xa8, 0x94, 0x0f, 0x3c, 0x12, 0x3b, 0x69,
220390f161ccSmiod 		0x75, 0x78, 0xc2, 0x13, 0xbe, 0x6d, 0xd9, 0xe6, 0xc8, 0xec,
220490f161ccSmiod 		0x73, 0x35, 0xdc, 0xb2, 0x28, 0xfd, 0x1e, 0xdf, 0x4a, 0x39,
220590f161ccSmiod 		0x15, 0x2c, 0xbc, 0xaa, 0xf8, 0xc0, 0x39, 0x88, 0x28, 0x04,
220690f161ccSmiod 		0x10, 0x55, 0xf9, 0x4c, 0xee, 0xec, 0x7e, 0x21, 0x34, 0x07,
220790f161ccSmiod 		0x80, 0xfe, 0x41, 0xbd,
220859919d1cStb 	},
220959919d1cStb 	.order = {
2210*01938560Stb 		0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
221190f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
221290f161ccSmiod 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
221390f161ccSmiod 		0x00, 0x01, 0x49, 0xa1, 0xec, 0x14, 0x25, 0x65, 0xa5, 0x45,
221490f161ccSmiod 		0xac, 0xfd, 0xb7, 0x7b, 0xd9, 0xd4, 0x0c, 0xfa, 0x8b, 0x99,
221590f161ccSmiod 		0x67, 0x12, 0x10, 0x1b, 0xea, 0x0e, 0xc6, 0x34, 0x6c, 0x54,
221659919d1cStb 		0x37, 0x4f, 0x25, 0xbd,
221759919d1cStb 	},
221890f161ccSmiod };
221990f161ccSmiod 
22205a4e9db7Sjsing /*
22215a4e9db7Sjsing  * This curve is defined in two birationally equal forms: canonical and Twisted
22225a4e9db7Sjsing  * Edwards. We do calculations in canonical (Weierstrass) form.
22235a4e9db7Sjsing  */
22245a4e9db7Sjsing static const struct {
222559919d1cStb 	uint8_t p[64];
222659919d1cStb 	uint8_t a[64];
222759919d1cStb 	uint8_t b[64];
222859919d1cStb 	uint8_t x[64];
222959919d1cStb 	uint8_t y[64];
223059919d1cStb 	uint8_t order[64];
223159919d1cStb } _EC_GOST_2012_512_TC26_C = {
223259919d1cStb 	.p = {
2233*01938560Stb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22345a4e9db7Sjsing 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22355a4e9db7Sjsing 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22365a4e9db7Sjsing 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22375a4e9db7Sjsing 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22385a4e9db7Sjsing 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22395a4e9db7Sjsing 		0xff, 0xff, 0xfd, 0xc7,
224059919d1cStb 	},
224159919d1cStb 	.a = {
2242*01938560Stb 		0xdc, 0x92, 0x03, 0xe5, 0x14, 0xa7, 0x21, 0x87, 0x54, 0x85,
22435a4e9db7Sjsing 		0xa5, 0x29, 0xd2, 0xc7, 0x22, 0xfb, 0x18, 0x7b, 0xc8, 0x98,
22445a4e9db7Sjsing 		0x0e, 0xb8, 0x66, 0x64, 0x4d, 0xe4, 0x1c, 0x68, 0xe1, 0x43,
22455a4e9db7Sjsing 		0x06, 0x45, 0x46, 0xe8, 0x61, 0xc0, 0xe2, 0xc9, 0xed, 0xd9,
22465a4e9db7Sjsing 		0x2a, 0xde, 0x71, 0xf4, 0x6f, 0xcf, 0x50, 0xff, 0x2a, 0xd9,
22475a4e9db7Sjsing 		0x7f, 0x95, 0x1f, 0xda, 0x9f, 0x2a, 0x2e, 0xb6, 0x54, 0x6f,
22485a4e9db7Sjsing 		0x39, 0x68, 0x9b, 0xd3,
224959919d1cStb 	},
225059919d1cStb 	.b = {
2251*01938560Stb 		0xb4, 0xc4, 0xee, 0x28, 0xce, 0xbc, 0x6c, 0x2c, 0x8a, 0xc1,
22525a4e9db7Sjsing 		0x29, 0x52, 0xcf, 0x37, 0xf1, 0x6a, 0xc7, 0xef, 0xb6, 0xa9,
22535a4e9db7Sjsing 		0xf6, 0x9f, 0x4b, 0x57, 0xff, 0xda, 0x2e, 0x4f, 0x0d, 0xe5,
22545a4e9db7Sjsing 		0xad, 0xe0, 0x38, 0xcb, 0xc2, 0xff, 0xf7, 0x19, 0xd2, 0xc1,
22555a4e9db7Sjsing 		0x8d, 0xe0, 0x28, 0x4b, 0x8b, 0xfe, 0xf3, 0xb5, 0x2b, 0x8c,
22565a4e9db7Sjsing 		0xc7, 0xa5, 0xf5, 0xbf, 0x0a, 0x3c, 0x8d, 0x23, 0x19, 0xa5,
22575a4e9db7Sjsing 		0x31, 0x25, 0x57, 0xe1,
225859919d1cStb 	},
225959919d1cStb 	.x = {
2260*01938560Stb 		0xe2, 0xe3, 0x1e, 0xdf, 0xc2, 0x3d, 0xe7, 0xbd, 0xeb, 0xe2,
22615a4e9db7Sjsing 		0x41, 0xce, 0x59, 0x3e, 0xf5, 0xde, 0x22, 0x95, 0xb7, 0xa9,
22625a4e9db7Sjsing 		0xcb, 0xae, 0xf0, 0x21, 0xd3, 0x85, 0xf7, 0x07, 0x4c, 0xea,
22635a4e9db7Sjsing 		0x04, 0x3a, 0xa2, 0x72, 0x72, 0xa7, 0xae, 0x60, 0x2b, 0xf2,
22645a4e9db7Sjsing 		0xa7, 0xb9, 0x03, 0x3d, 0xb9, 0xed, 0x36, 0x10, 0xc6, 0xfb,
22655a4e9db7Sjsing 		0x85, 0x48, 0x7e, 0xae, 0x97, 0xaa, 0xc5, 0xbc, 0x79, 0x28,
22665a4e9db7Sjsing 		0xc1, 0x95, 0x01, 0x48,
226759919d1cStb 	},
226859919d1cStb 	.y = {
2269*01938560Stb 		0xf5, 0xce, 0x40, 0xd9, 0x5b, 0x5e, 0xb8, 0x99, 0xab, 0xbc,
22705a4e9db7Sjsing 		0xcf, 0xf5, 0x91, 0x1c, 0xb8, 0x57, 0x79, 0x39, 0x80, 0x4d,
22715a4e9db7Sjsing 		0x65, 0x27, 0x37, 0x8b, 0x8c, 0x10, 0x8c, 0x3d, 0x20, 0x90,
22725a4e9db7Sjsing 		0xff, 0x9b, 0xe1, 0x8e, 0x2d, 0x33, 0xe3, 0x02, 0x1e, 0xd2,
22735a4e9db7Sjsing 		0xef, 0x32, 0xd8, 0x58, 0x22, 0x42, 0x3b, 0x63, 0x04, 0xf7,
22745a4e9db7Sjsing 		0x26, 0xaa, 0x85, 0x4b, 0xae, 0x07, 0xd0, 0x39, 0x6e, 0x9a,
22755a4e9db7Sjsing 		0x9a, 0xdd, 0xc4, 0x0f,
227659919d1cStb 	},
227759919d1cStb 	.order = {
2278*01938560Stb 		0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22795a4e9db7Sjsing 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22805a4e9db7Sjsing 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22815a4e9db7Sjsing 		0xff, 0xff, 0xc9, 0x8c, 0xdb, 0xa4, 0x65, 0x06, 0xab, 0x00,
22825a4e9db7Sjsing 		0x4c, 0x33, 0xa9, 0xff, 0x51, 0x47, 0x50, 0x2c, 0xc8, 0xed,
22835a4e9db7Sjsing 		0xa9, 0xe7, 0xa7, 0x69, 0xa1, 0x26, 0x94, 0x62, 0x3c, 0xef,
22845a4e9db7Sjsing 		0x47, 0xf0, 0x23, 0xed,
228559919d1cStb 	},
22865a4e9db7Sjsing };
228790f161ccSmiod #endif
228890f161ccSmiod 
228959919d1cStb static const struct ec_list_element {
2290f1535dc8Sdjm 	const char *comment;
229159919d1cStb 	int nid;
229259919d1cStb 	int seed_len;
229359919d1cStb 	int param_len;
229459919d1cStb 	unsigned int cofactor;
229559919d1cStb 	const uint8_t *seed;
229659919d1cStb 	const uint8_t *p;
229759919d1cStb 	const uint8_t *a;
229859919d1cStb 	const uint8_t *b;
229959919d1cStb 	const uint8_t *x;
230059919d1cStb 	const uint8_t *y;
230159919d1cStb 	const uint8_t *order;
230259919d1cStb } curve_list[] = {
23035650a0e1Sdjm 	/* secg curves */
2304978dd0cbStb 	{
2305978dd0cbStb 		.comment = "SECG/WTLS curve over a 112 bit prime field",
230659919d1cStb 		.nid = NID_secp112r1,
230759919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_112R1.seed),
230859919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_112R1.p),
230959919d1cStb 		.seed = _EC_SECG_PRIME_112R1.seed,
231059919d1cStb 		.p = _EC_SECG_PRIME_112R1.p,
231159919d1cStb 		.a = _EC_SECG_PRIME_112R1.a,
231259919d1cStb 		.b = _EC_SECG_PRIME_112R1.b,
231359919d1cStb 		.x = _EC_SECG_PRIME_112R1.x,
231459919d1cStb 		.y = _EC_SECG_PRIME_112R1.y,
231559919d1cStb 		.order = _EC_SECG_PRIME_112R1.order,
231659919d1cStb 		.cofactor = 1,
2317978dd0cbStb 	},
2318978dd0cbStb 	{
2319978dd0cbStb 		.comment = "SECG curve over a 112 bit prime field",
232059919d1cStb 		.nid = NID_secp112r2,
232159919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_112R2.seed),
232259919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_112R2.p),
232359919d1cStb 		.seed = _EC_SECG_PRIME_112R2.seed,
232459919d1cStb 		.p = _EC_SECG_PRIME_112R2.p,
232559919d1cStb 		.a = _EC_SECG_PRIME_112R2.a,
232659919d1cStb 		.b = _EC_SECG_PRIME_112R2.b,
232759919d1cStb 		.x = _EC_SECG_PRIME_112R2.x,
232859919d1cStb 		.y = _EC_SECG_PRIME_112R2.y,
232959919d1cStb 		.order = _EC_SECG_PRIME_112R2.order,
233059919d1cStb 		.cofactor = 4,
2331978dd0cbStb 	},
2332978dd0cbStb 	{
233359919d1cStb 		.comment = "SECG curve over a 128 bit prime field",
2334978dd0cbStb 		.nid = NID_secp128r1,
233559919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_128R1.seed),
233659919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_128R1.p),
233759919d1cStb 		.seed = _EC_SECG_PRIME_128R1.seed,
233859919d1cStb 		.p = _EC_SECG_PRIME_128R1.p,
233959919d1cStb 		.a = _EC_SECG_PRIME_128R1.a,
234059919d1cStb 		.b = _EC_SECG_PRIME_128R1.b,
234159919d1cStb 		.x = _EC_SECG_PRIME_128R1.x,
234259919d1cStb 		.y = _EC_SECG_PRIME_128R1.y,
234359919d1cStb 		.order = _EC_SECG_PRIME_128R1.order,
234459919d1cStb 		.cofactor = 1,
2345978dd0cbStb 	},
2346978dd0cbStb 	{
234759919d1cStb 		.comment = "SECG curve over a 128 bit prime field",
2348978dd0cbStb 		.nid = NID_secp128r2,
234959919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_128R2.seed),
235059919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_128R2.p),
235159919d1cStb 		.seed = _EC_SECG_PRIME_128R2.seed,
235259919d1cStb 		.p = _EC_SECG_PRIME_128R2.p,
235359919d1cStb 		.a = _EC_SECG_PRIME_128R2.a,
235459919d1cStb 		.b = _EC_SECG_PRIME_128R2.b,
235559919d1cStb 		.x = _EC_SECG_PRIME_128R2.x,
235659919d1cStb 		.y = _EC_SECG_PRIME_128R2.y,
235759919d1cStb 		.order = _EC_SECG_PRIME_128R2.order,
235859919d1cStb 		.cofactor = 4,
2359978dd0cbStb 	},
2360978dd0cbStb 	{
236159919d1cStb 		.comment = "SECG curve over a 160 bit prime field",
2362978dd0cbStb 		.nid = NID_secp160k1,
236359919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_160K1.p),
236459919d1cStb 		.p = _EC_SECG_PRIME_160K1.p,
236559919d1cStb 		.a = _EC_SECG_PRIME_160K1.a,
236659919d1cStb 		.b = _EC_SECG_PRIME_160K1.b,
236759919d1cStb 		.x = _EC_SECG_PRIME_160K1.x,
236859919d1cStb 		.y = _EC_SECG_PRIME_160K1.y,
236959919d1cStb 		.order = _EC_SECG_PRIME_160K1.order,
237059919d1cStb 		.cofactor = 1,
2371978dd0cbStb 	},
2372978dd0cbStb 	{
237359919d1cStb 		.comment = "SECG curve over a 160 bit prime field",
2374978dd0cbStb 		.nid = NID_secp160r1,
237559919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_160R1.seed),
237659919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_160R1.p),
237759919d1cStb 		.seed = _EC_SECG_PRIME_160R1.seed,
237859919d1cStb 		.p = _EC_SECG_PRIME_160R1.p,
237959919d1cStb 		.a = _EC_SECG_PRIME_160R1.a,
238059919d1cStb 		.b = _EC_SECG_PRIME_160R1.b,
238159919d1cStb 		.x = _EC_SECG_PRIME_160R1.x,
238259919d1cStb 		.y = _EC_SECG_PRIME_160R1.y,
238359919d1cStb 		.order = _EC_SECG_PRIME_160R1.order,
238459919d1cStb 		.cofactor = 1,
2385978dd0cbStb 	},
2386978dd0cbStb 	{
2387978dd0cbStb 		.comment = "SECG/WTLS curve over a 160 bit prime field",
238859919d1cStb 		.nid = NID_secp160r2,
238959919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_160R2.seed),
239059919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_160R2.p),
239159919d1cStb 		.seed = _EC_SECG_PRIME_160R2.seed,
239259919d1cStb 		.p = _EC_SECG_PRIME_160R2.p,
239359919d1cStb 		.a = _EC_SECG_PRIME_160R2.a,
239459919d1cStb 		.b = _EC_SECG_PRIME_160R2.b,
239559919d1cStb 		.x = _EC_SECG_PRIME_160R2.x,
239659919d1cStb 		.y = _EC_SECG_PRIME_160R2.y,
239759919d1cStb 		.order = _EC_SECG_PRIME_160R2.order,
239859919d1cStb 		.cofactor = 1,
2399978dd0cbStb 	},
24005650a0e1Sdjm 	/* SECG secp192r1 is the same as X9.62 prime192v1 and hence omitted */
2401978dd0cbStb 	{
2402978dd0cbStb 		.comment = "SECG curve over a 192 bit prime field",
240359919d1cStb 		.nid = NID_secp192k1,
240459919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_192K1.p),
240559919d1cStb 		.p = _EC_SECG_PRIME_192K1.p,
240659919d1cStb 		.a = _EC_SECG_PRIME_192K1.a,
240759919d1cStb 		.b = _EC_SECG_PRIME_192K1.b,
240859919d1cStb 		.x = _EC_SECG_PRIME_192K1.x,
240959919d1cStb 		.y = _EC_SECG_PRIME_192K1.y,
241059919d1cStb 		.order = _EC_SECG_PRIME_192K1.order,
241159919d1cStb 		.cofactor = 1,
2412978dd0cbStb 	},
2413978dd0cbStb 	{
2414978dd0cbStb 		.comment = "SECG curve over a 224 bit prime field",
241559919d1cStb 		.nid = NID_secp224k1,
241659919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_224K1.p),
241759919d1cStb 		.p = _EC_SECG_PRIME_224K1.p,
241859919d1cStb 		.a = _EC_SECG_PRIME_224K1.a,
241959919d1cStb 		.b = _EC_SECG_PRIME_224K1.b,
242059919d1cStb 		.x = _EC_SECG_PRIME_224K1.x,
242159919d1cStb 		.y = _EC_SECG_PRIME_224K1.y,
242259919d1cStb 		.order = _EC_SECG_PRIME_224K1.order,
242359919d1cStb 		.cofactor = 1,
2424978dd0cbStb 	},
2425978dd0cbStb 	{
2426978dd0cbStb 		.comment = "NIST/SECG curve over a 224 bit prime field",
242759919d1cStb 		.nid = NID_secp224r1,
242859919d1cStb 		.seed_len = sizeof(_EC_NIST_PRIME_224.seed),
242959919d1cStb 		.param_len = sizeof(_EC_NIST_PRIME_224.p),
243059919d1cStb 		.seed = _EC_NIST_PRIME_224.seed,
243159919d1cStb 		.p = _EC_NIST_PRIME_224.p,
243259919d1cStb 		.a = _EC_NIST_PRIME_224.a,
243359919d1cStb 		.b = _EC_NIST_PRIME_224.b,
243459919d1cStb 		.x = _EC_NIST_PRIME_224.x,
243559919d1cStb 		.y = _EC_NIST_PRIME_224.y,
243659919d1cStb 		.order = _EC_NIST_PRIME_224.order,
243759919d1cStb 		.cofactor = 1,
2438978dd0cbStb 	},
2439978dd0cbStb 	{
2440978dd0cbStb 		.comment = "SECG curve over a 256 bit prime field",
244159919d1cStb 		.nid = NID_secp256k1,
244259919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_256K1.p),
244359919d1cStb 		.p = _EC_SECG_PRIME_256K1.p,
244459919d1cStb 		.a = _EC_SECG_PRIME_256K1.a,
244559919d1cStb 		.b = _EC_SECG_PRIME_256K1.b,
244659919d1cStb 		.x = _EC_SECG_PRIME_256K1.x,
244759919d1cStb 		.y = _EC_SECG_PRIME_256K1.y,
244859919d1cStb 		.order = _EC_SECG_PRIME_256K1.order,
244959919d1cStb 		.cofactor = 1,
2450978dd0cbStb 	},
24515650a0e1Sdjm 	/* SECG secp256r1 is the same as X9.62 prime256v1 and hence omitted */
2452978dd0cbStb 	{
2453978dd0cbStb 		.comment = "NIST/SECG curve over a 384 bit prime field",
245459919d1cStb 		.nid = NID_secp384r1,
245559919d1cStb 		.seed_len = sizeof(_EC_NIST_PRIME_384.seed),
245659919d1cStb 		.param_len = sizeof(_EC_NIST_PRIME_384.p),
245759919d1cStb 		.seed = _EC_NIST_PRIME_384.seed,
245859919d1cStb 		.p = _EC_NIST_PRIME_384.p,
245959919d1cStb 		.a = _EC_NIST_PRIME_384.a,
246059919d1cStb 		.b = _EC_NIST_PRIME_384.b,
246159919d1cStb 		.x = _EC_NIST_PRIME_384.x,
246259919d1cStb 		.y = _EC_NIST_PRIME_384.y,
246359919d1cStb 		.order = _EC_NIST_PRIME_384.order,
246459919d1cStb 		.cofactor = 1,
2465978dd0cbStb 	},
2466978dd0cbStb 	{
2467978dd0cbStb 		.comment = "NIST/SECG curve over a 521 bit prime field",
246859919d1cStb 		.nid = NID_secp521r1,
246959919d1cStb 		.seed_len = sizeof(_EC_NIST_PRIME_521.seed),
247059919d1cStb 		.param_len = sizeof(_EC_NIST_PRIME_521.p),
247159919d1cStb 		.seed = _EC_NIST_PRIME_521.seed,
247259919d1cStb 		.p = _EC_NIST_PRIME_521.p,
247359919d1cStb 		.a = _EC_NIST_PRIME_521.a,
247459919d1cStb 		.b = _EC_NIST_PRIME_521.b,
247559919d1cStb 		.x = _EC_NIST_PRIME_521.x,
247659919d1cStb 		.y = _EC_NIST_PRIME_521.y,
247759919d1cStb 		.order = _EC_NIST_PRIME_521.order,
247859919d1cStb 		.cofactor = 1,
2479978dd0cbStb 	},
24805650a0e1Sdjm 	/* X9.62 curves */
2481978dd0cbStb 	{
2482978dd0cbStb 		.comment = "NIST/X9.62/SECG curve over a 192 bit prime field",
248359919d1cStb 		.nid = NID_X9_62_prime192v1,
248459919d1cStb 		.seed_len = sizeof(_EC_NIST_PRIME_192.seed),
248559919d1cStb 		.param_len = sizeof(_EC_NIST_PRIME_192.p),
248659919d1cStb 		.seed = _EC_NIST_PRIME_192.seed,
248759919d1cStb 		.p = _EC_NIST_PRIME_192.p,
248859919d1cStb 		.a = _EC_NIST_PRIME_192.a,
248959919d1cStb 		.b = _EC_NIST_PRIME_192.b,
249059919d1cStb 		.x = _EC_NIST_PRIME_192.x,
249159919d1cStb 		.y = _EC_NIST_PRIME_192.y,
249259919d1cStb 		.order = _EC_NIST_PRIME_192.order,
249359919d1cStb 		.cofactor = 1,
2494978dd0cbStb 	},
2495978dd0cbStb 	{
249659919d1cStb 		.comment = "X9.62 curve over a 192 bit prime field",
2497978dd0cbStb 		.nid = NID_X9_62_prime192v2,
249859919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_192V2.seed),
249959919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_192V2.p),
250059919d1cStb 		.seed = _EC_X9_62_PRIME_192V2.seed,
250159919d1cStb 		.p = _EC_X9_62_PRIME_192V2.p,
250259919d1cStb 		.a = _EC_X9_62_PRIME_192V2.a,
250359919d1cStb 		.b = _EC_X9_62_PRIME_192V2.b,
250459919d1cStb 		.x = _EC_X9_62_PRIME_192V2.x,
250559919d1cStb 		.y = _EC_X9_62_PRIME_192V2.y,
250659919d1cStb 		.order = _EC_X9_62_PRIME_192V2.order,
250759919d1cStb 		.cofactor = 1,
2508978dd0cbStb 	},
2509978dd0cbStb 	{
251059919d1cStb 		.comment = "X9.62 curve over a 192 bit prime field",
2511978dd0cbStb 		.nid = NID_X9_62_prime192v3,
251259919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_192V3.seed),
251359919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_192V3.p),
251459919d1cStb 		.seed = _EC_X9_62_PRIME_192V3.seed,
251559919d1cStb 		.p = _EC_X9_62_PRIME_192V3.p,
251659919d1cStb 		.a = _EC_X9_62_PRIME_192V3.a,
251759919d1cStb 		.b = _EC_X9_62_PRIME_192V3.b,
251859919d1cStb 		.x = _EC_X9_62_PRIME_192V3.x,
251959919d1cStb 		.y = _EC_X9_62_PRIME_192V3.y,
252059919d1cStb 		.order = _EC_X9_62_PRIME_192V3.order,
252159919d1cStb 		.cofactor = 1,
2522978dd0cbStb 	},
2523978dd0cbStb 	{
252459919d1cStb 		.comment = "X9.62 curve over a 239 bit prime field",
2525978dd0cbStb 		.nid = NID_X9_62_prime239v1,
252659919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_239V1.seed),
252759919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_239V1.p),
252859919d1cStb 		.seed = _EC_X9_62_PRIME_239V1.seed,
252959919d1cStb 		.p = _EC_X9_62_PRIME_239V1.p,
253059919d1cStb 		.a = _EC_X9_62_PRIME_239V1.a,
253159919d1cStb 		.b = _EC_X9_62_PRIME_239V1.b,
253259919d1cStb 		.x = _EC_X9_62_PRIME_239V1.x,
253359919d1cStb 		.y = _EC_X9_62_PRIME_239V1.y,
253459919d1cStb 		.order = _EC_X9_62_PRIME_239V1.order,
253559919d1cStb 		.cofactor = 1,
2536978dd0cbStb 	},
2537978dd0cbStb 	{
253859919d1cStb 		.comment = "X9.62 curve over a 239 bit prime field",
2539978dd0cbStb 		.nid = NID_X9_62_prime239v2,
254059919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_239V2.seed),
254159919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_239V2.p),
254259919d1cStb 		.seed = _EC_X9_62_PRIME_239V2.seed,
254359919d1cStb 		.p = _EC_X9_62_PRIME_239V2.p,
254459919d1cStb 		.a = _EC_X9_62_PRIME_239V2.a,
254559919d1cStb 		.b = _EC_X9_62_PRIME_239V2.b,
254659919d1cStb 		.x = _EC_X9_62_PRIME_239V2.x,
254759919d1cStb 		.y = _EC_X9_62_PRIME_239V2.y,
254859919d1cStb 		.order = _EC_X9_62_PRIME_239V2.order,
254959919d1cStb 		.cofactor = 1,
2550978dd0cbStb 	},
2551978dd0cbStb 	{
255259919d1cStb 		.comment = "X9.62 curve over a 239 bit prime field",
2553978dd0cbStb 		.nid = NID_X9_62_prime239v3,
255459919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_239V3.seed),
255559919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_239V3.p),
255659919d1cStb 		.seed = _EC_X9_62_PRIME_239V3.seed,
255759919d1cStb 		.p = _EC_X9_62_PRIME_239V3.p,
255859919d1cStb 		.a = _EC_X9_62_PRIME_239V3.a,
255959919d1cStb 		.b = _EC_X9_62_PRIME_239V3.b,
256059919d1cStb 		.x = _EC_X9_62_PRIME_239V3.x,
256159919d1cStb 		.y = _EC_X9_62_PRIME_239V3.y,
256259919d1cStb 		.order = _EC_X9_62_PRIME_239V3.order,
256359919d1cStb 		.cofactor = 1,
2564978dd0cbStb 	},
2565978dd0cbStb 	{
2566978dd0cbStb 		.comment = "X9.62/SECG curve over a 256 bit prime field",
256759919d1cStb 		.nid = NID_X9_62_prime256v1,
256859919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_256V1.seed),
256959919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_256V1.p),
257059919d1cStb 		.seed = _EC_X9_62_PRIME_256V1.seed,
257159919d1cStb 		.p = _EC_X9_62_PRIME_256V1.p,
257259919d1cStb 		.a = _EC_X9_62_PRIME_256V1.a,
257359919d1cStb 		.b = _EC_X9_62_PRIME_256V1.b,
257459919d1cStb 		.x = _EC_X9_62_PRIME_256V1.x,
257559919d1cStb 		.y = _EC_X9_62_PRIME_256V1.y,
257659919d1cStb 		.order = _EC_X9_62_PRIME_256V1.order,
257759919d1cStb 		.cofactor = 1,
2578978dd0cbStb 	},
2579978dd0cbStb 	{
2580978dd0cbStb 		.comment = "SECG/WTLS curve over a 112 bit prime field",
258159919d1cStb 		.nid = NID_wap_wsg_idm_ecid_wtls6,
258259919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_112R1.seed),
258359919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_112R1.p),
258459919d1cStb 		.seed = _EC_SECG_PRIME_112R1.seed,
258559919d1cStb 		.p = _EC_SECG_PRIME_112R1.p,
258659919d1cStb 		.a = _EC_SECG_PRIME_112R1.a,
258759919d1cStb 		.b = _EC_SECG_PRIME_112R1.b,
258859919d1cStb 		.x = _EC_SECG_PRIME_112R1.x,
258959919d1cStb 		.y = _EC_SECG_PRIME_112R1.y,
259059919d1cStb 		.order = _EC_SECG_PRIME_112R1.order,
259159919d1cStb 		.cofactor = 1,
2592978dd0cbStb 	},
2593978dd0cbStb 	{
2594978dd0cbStb 		.comment = "SECG/WTLS curve over a 160 bit prime field",
259559919d1cStb 		.nid = NID_wap_wsg_idm_ecid_wtls7,
259659919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_160R2.seed),
259759919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_160R2.p),
259859919d1cStb 		.seed = _EC_SECG_PRIME_160R2.seed,
259959919d1cStb 		.p = _EC_SECG_PRIME_160R2.p,
260059919d1cStb 		.a = _EC_SECG_PRIME_160R2.a,
260159919d1cStb 		.b = _EC_SECG_PRIME_160R2.b,
260259919d1cStb 		.x = _EC_SECG_PRIME_160R2.x,
260359919d1cStb 		.y = _EC_SECG_PRIME_160R2.y,
260459919d1cStb 		.order = _EC_SECG_PRIME_160R2.order,
260559919d1cStb 		.cofactor = 1,
2606978dd0cbStb 	},
2607978dd0cbStb 	{
2608978dd0cbStb 		.comment = "WTLS curve over a 112 bit prime field",
260959919d1cStb 		.nid = NID_wap_wsg_idm_ecid_wtls8,
261059919d1cStb 		.param_len = sizeof(_EC_WTLS_8.p),
261159919d1cStb 		.p = _EC_WTLS_8.p,
261259919d1cStb 		.a = _EC_WTLS_8.a,
261359919d1cStb 		.b = _EC_WTLS_8.b,
261459919d1cStb 		.x = _EC_WTLS_8.x,
261559919d1cStb 		.y = _EC_WTLS_8.y,
261659919d1cStb 		.order = _EC_WTLS_8.order,
261759919d1cStb 		.cofactor = 1,
2618978dd0cbStb 	},
2619978dd0cbStb 	{
2620978dd0cbStb 		.comment = "WTLS curve over a 160 bit prime field",
262159919d1cStb 		.nid = NID_wap_wsg_idm_ecid_wtls9,
262259919d1cStb 		.param_len = sizeof(_EC_WTLS_9.p),
262359919d1cStb 		.p = _EC_WTLS_9.p,
262459919d1cStb 		.a = _EC_WTLS_9.a,
262559919d1cStb 		.b = _EC_WTLS_9.b,
262659919d1cStb 		.x = _EC_WTLS_9.x,
262759919d1cStb 		.y = _EC_WTLS_9.y,
262859919d1cStb 		.order = _EC_WTLS_9.order,
262959919d1cStb 		.cofactor = 1,
2630978dd0cbStb 	},
2631978dd0cbStb 	{
2632978dd0cbStb 		.comment = "WTLS curve over a 224 bit prime field",
263359919d1cStb 		.nid = NID_wap_wsg_idm_ecid_wtls12,
263459919d1cStb 		.param_len = sizeof(_EC_WTLS_12.p),
263559919d1cStb 		.p = _EC_WTLS_12.p,
263659919d1cStb 		.a = _EC_WTLS_12.a,
263759919d1cStb 		.b = _EC_WTLS_12.b,
263859919d1cStb 		.x = _EC_WTLS_12.x,
263959919d1cStb 		.y = _EC_WTLS_12.y,
264059919d1cStb 		.order = _EC_WTLS_12.order,
264159919d1cStb 		.cofactor = 1,
2642978dd0cbStb 	},
26439caf19c3Smiod 	/* RFC 5639 curves */
2644978dd0cbStb 	{
264559919d1cStb 		.comment = "RFC 5639 curve over a 160 bit prime field",
2646978dd0cbStb 		.nid = NID_brainpoolP160r1,
264759919d1cStb 		.param_len = sizeof(_EC_brainpoolP160r1.p),
264859919d1cStb 		.p = _EC_brainpoolP160r1.p,
264959919d1cStb 		.a = _EC_brainpoolP160r1.a,
265059919d1cStb 		.b = _EC_brainpoolP160r1.b,
265159919d1cStb 		.x = _EC_brainpoolP160r1.x,
265259919d1cStb 		.y = _EC_brainpoolP160r1.y,
265359919d1cStb 		.order = _EC_brainpoolP160r1.order,
265459919d1cStb 		.cofactor = 1,
2655978dd0cbStb 	},
2656978dd0cbStb 	{
265759919d1cStb 		.comment = "RFC 5639 curve over a 160 bit prime field",
2658978dd0cbStb 		.nid = NID_brainpoolP160t1,
265959919d1cStb 		.param_len = sizeof(_EC_brainpoolP160t1.p),
266059919d1cStb 		.p = _EC_brainpoolP160t1.p,
266159919d1cStb 		.a = _EC_brainpoolP160t1.a,
266259919d1cStb 		.b = _EC_brainpoolP160t1.b,
266359919d1cStb 		.x = _EC_brainpoolP160t1.x,
266459919d1cStb 		.y = _EC_brainpoolP160t1.y,
266559919d1cStb 		.order = _EC_brainpoolP160t1.order,
266659919d1cStb 		.cofactor = 1,
2667978dd0cbStb 	},
2668978dd0cbStb 	{
266959919d1cStb 		.comment = "RFC 5639 curve over a 192 bit prime field",
2670978dd0cbStb 		.nid = NID_brainpoolP192r1,
267159919d1cStb 		.param_len = sizeof(_EC_brainpoolP192r1.p),
267259919d1cStb 		.p = _EC_brainpoolP192r1.p,
267359919d1cStb 		.a = _EC_brainpoolP192r1.a,
267459919d1cStb 		.b = _EC_brainpoolP192r1.b,
267559919d1cStb 		.x = _EC_brainpoolP192r1.x,
267659919d1cStb 		.y = _EC_brainpoolP192r1.y,
267759919d1cStb 		.order = _EC_brainpoolP192r1.order,
267859919d1cStb 		.cofactor = 1,
2679978dd0cbStb 	},
2680978dd0cbStb 	{
268159919d1cStb 		.comment = "RFC 5639 curve over a 192 bit prime field",
2682978dd0cbStb 		.nid = NID_brainpoolP192t1,
268359919d1cStb 		.param_len = sizeof(_EC_brainpoolP192t1.p),
268459919d1cStb 		.p = _EC_brainpoolP192t1.p,
268559919d1cStb 		.a = _EC_brainpoolP192t1.a,
268659919d1cStb 		.b = _EC_brainpoolP192t1.b,
268759919d1cStb 		.x = _EC_brainpoolP192t1.x,
268859919d1cStb 		.y = _EC_brainpoolP192t1.y,
268959919d1cStb 		.order = _EC_brainpoolP192t1.order,
269059919d1cStb 		.cofactor = 1,
2691978dd0cbStb 	},
2692978dd0cbStb 	{
269359919d1cStb 		.comment = "RFC 5639 curve over a 224 bit prime field",
2694978dd0cbStb 		.nid = NID_brainpoolP224r1,
269559919d1cStb 		.param_len = sizeof(_EC_brainpoolP224r1.p),
269659919d1cStb 		.p = _EC_brainpoolP224r1.p,
269759919d1cStb 		.a = _EC_brainpoolP224r1.a,
269859919d1cStb 		.b = _EC_brainpoolP224r1.b,
269959919d1cStb 		.x = _EC_brainpoolP224r1.x,
270059919d1cStb 		.y = _EC_brainpoolP224r1.y,
270159919d1cStb 		.order = _EC_brainpoolP224r1.order,
270259919d1cStb 		.cofactor = 1,
2703978dd0cbStb 	},
2704978dd0cbStb 	{
270559919d1cStb 		.comment = "RFC 5639 curve over a 224 bit prime field",
2706978dd0cbStb 		.nid = NID_brainpoolP224t1,
270759919d1cStb 		.param_len = sizeof(_EC_brainpoolP224t1.p),
270859919d1cStb 		.p = _EC_brainpoolP224t1.p,
270959919d1cStb 		.a = _EC_brainpoolP224t1.a,
271059919d1cStb 		.b = _EC_brainpoolP224t1.b,
271159919d1cStb 		.x = _EC_brainpoolP224t1.x,
271259919d1cStb 		.y = _EC_brainpoolP224t1.y,
271359919d1cStb 		.order = _EC_brainpoolP224t1.order,
271459919d1cStb 		.cofactor = 1,
2715978dd0cbStb 	},
2716978dd0cbStb 	{
271759919d1cStb 		.comment = "RFC 5639 curve over a 256 bit prime field",
2718978dd0cbStb 		.nid = NID_brainpoolP256r1,
271959919d1cStb 		.param_len = sizeof(_EC_brainpoolP256r1.p),
272059919d1cStb 		.p = _EC_brainpoolP256r1.p,
272159919d1cStb 		.a = _EC_brainpoolP256r1.a,
272259919d1cStb 		.b = _EC_brainpoolP256r1.b,
272359919d1cStb 		.x = _EC_brainpoolP256r1.x,
272459919d1cStb 		.y = _EC_brainpoolP256r1.y,
272559919d1cStb 		.order = _EC_brainpoolP256r1.order,
272659919d1cStb 		.cofactor = 1,
2727978dd0cbStb 	},
2728978dd0cbStb 	{
272959919d1cStb 		.comment = "RFC 5639 curve over a 256 bit prime field",
2730978dd0cbStb 		.nid = NID_brainpoolP256t1,
273159919d1cStb 		.param_len = sizeof(_EC_brainpoolP256t1.p),
273259919d1cStb 		.p = _EC_brainpoolP256t1.p,
273359919d1cStb 		.a = _EC_brainpoolP256t1.a,
273459919d1cStb 		.b = _EC_brainpoolP256t1.b,
273559919d1cStb 		.x = _EC_brainpoolP256t1.x,
273659919d1cStb 		.y = _EC_brainpoolP256t1.y,
273759919d1cStb 		.order = _EC_brainpoolP256t1.order,
273859919d1cStb 		.cofactor = 1,
2739978dd0cbStb 	},
2740978dd0cbStb 	{
274159919d1cStb 		.comment = "RFC 5639 curve over a 320 bit prime field",
2742978dd0cbStb 		.nid = NID_brainpoolP320r1,
274359919d1cStb 		.param_len = sizeof(_EC_brainpoolP320r1.p),
274459919d1cStb 		.p = _EC_brainpoolP320r1.p,
274559919d1cStb 		.a = _EC_brainpoolP320r1.a,
274659919d1cStb 		.b = _EC_brainpoolP320r1.b,
274759919d1cStb 		.x = _EC_brainpoolP320r1.x,
274859919d1cStb 		.y = _EC_brainpoolP320r1.y,
274959919d1cStb 		.order = _EC_brainpoolP320r1.order,
275059919d1cStb 		.cofactor = 1,
2751978dd0cbStb 	},
2752978dd0cbStb 	{
275359919d1cStb 		.comment = "RFC 5639 curve over a 320 bit prime field",
2754978dd0cbStb 		.nid = NID_brainpoolP320t1,
275559919d1cStb 		.param_len = sizeof(_EC_brainpoolP320t1.p),
275659919d1cStb 		.p = _EC_brainpoolP320t1.p,
275759919d1cStb 		.a = _EC_brainpoolP320t1.a,
275859919d1cStb 		.b = _EC_brainpoolP320t1.b,
275959919d1cStb 		.x = _EC_brainpoolP320t1.x,
276059919d1cStb 		.y = _EC_brainpoolP320t1.y,
276159919d1cStb 		.order = _EC_brainpoolP320t1.order,
276259919d1cStb 		.cofactor = 1,
2763978dd0cbStb 	},
2764978dd0cbStb 	{
276559919d1cStb 		.comment = "RFC 5639 curve over a 384 bit prime field",
2766978dd0cbStb 		.nid = NID_brainpoolP384r1,
276759919d1cStb 		.param_len = sizeof(_EC_brainpoolP384r1.p),
276859919d1cStb 		.p = _EC_brainpoolP384r1.p,
276959919d1cStb 		.a = _EC_brainpoolP384r1.a,
277059919d1cStb 		.b = _EC_brainpoolP384r1.b,
277159919d1cStb 		.x = _EC_brainpoolP384r1.x,
277259919d1cStb 		.y = _EC_brainpoolP384r1.y,
277359919d1cStb 		.order = _EC_brainpoolP384r1.order,
277459919d1cStb 		.cofactor = 1,
2775978dd0cbStb 	},
2776978dd0cbStb 	{
277759919d1cStb 		.comment = "RFC 5639 curve over a 384 bit prime field",
2778978dd0cbStb 		.nid = NID_brainpoolP384t1,
277959919d1cStb 		.param_len = sizeof(_EC_brainpoolP384t1.p),
278059919d1cStb 		.p = _EC_brainpoolP384t1.p,
278159919d1cStb 		.a = _EC_brainpoolP384t1.a,
278259919d1cStb 		.b = _EC_brainpoolP384t1.b,
278359919d1cStb 		.x = _EC_brainpoolP384t1.x,
278459919d1cStb 		.y = _EC_brainpoolP384t1.y,
278559919d1cStb 		.order = _EC_brainpoolP384t1.order,
278659919d1cStb 		.cofactor = 1,
2787978dd0cbStb 	},
2788978dd0cbStb 	{
278959919d1cStb 		.comment = "RFC 5639 curve over a 512 bit prime field",
2790978dd0cbStb 		.nid = NID_brainpoolP512r1,
279159919d1cStb 		.param_len = sizeof(_EC_brainpoolP512r1.p),
279259919d1cStb 		.p = _EC_brainpoolP512r1.p,
279359919d1cStb 		.a = _EC_brainpoolP512r1.a,
279459919d1cStb 		.b = _EC_brainpoolP512r1.b,
279559919d1cStb 		.x = _EC_brainpoolP512r1.x,
279659919d1cStb 		.y = _EC_brainpoolP512r1.y,
279759919d1cStb 		.order = _EC_brainpoolP512r1.order,
279859919d1cStb 		.cofactor = 1,
2799978dd0cbStb 	},
2800978dd0cbStb 	{
2801978dd0cbStb 		.comment = "RFC 5639 curve over a 512 bit prime field",
280259919d1cStb 		.nid = NID_brainpoolP512t1,
280359919d1cStb 		.param_len = sizeof(_EC_brainpoolP512t1.p),
280459919d1cStb 		.p = _EC_brainpoolP512t1.p,
280559919d1cStb 		.a = _EC_brainpoolP512t1.a,
280659919d1cStb 		.b = _EC_brainpoolP512t1.b,
280759919d1cStb 		.x = _EC_brainpoolP512t1.x,
280859919d1cStb 		.y = _EC_brainpoolP512t1.y,
280959919d1cStb 		.order = _EC_brainpoolP512t1.order,
281059919d1cStb 		.cofactor = 1,
2811978dd0cbStb 	},
2812f9a1f7bbSmiod 	/* ANSSI */
2813978dd0cbStb 	{
2814978dd0cbStb 		.comment = "FRP256v1",
281559919d1cStb 		.nid = NID_FRP256v1,
281659919d1cStb 		.param_len = sizeof(_EC_FRP256v1.p),
281759919d1cStb 		.p = _EC_FRP256v1.p,
281859919d1cStb 		.a = _EC_FRP256v1.a,
281959919d1cStb 		.b = _EC_FRP256v1.b,
282059919d1cStb 		.x = _EC_FRP256v1.x,
282159919d1cStb 		.y = _EC_FRP256v1.y,
282259919d1cStb 		.order = _EC_FRP256v1.order,
282359919d1cStb 		.cofactor = 1,
2824978dd0cbStb 	},
282590f161ccSmiod #ifndef OPENSSL_NO_GOST
282690f161ccSmiod 	/* GOST R 34.10-2001 */
2827978dd0cbStb 	{
2828978dd0cbStb 		.comment = "GOST R 34.10-2001 Test Curve",
282959919d1cStb 		.nid = NID_id_GostR3410_2001_TestParamSet,
283059919d1cStb 		.param_len = sizeof(_EC_GOST_2001_Test.p),
283159919d1cStb 		.p = _EC_GOST_2001_Test.p,
283259919d1cStb 		.a = _EC_GOST_2001_Test.a,
283359919d1cStb 		.b = _EC_GOST_2001_Test.b,
283459919d1cStb 		.x = _EC_GOST_2001_Test.x,
283559919d1cStb 		.y = _EC_GOST_2001_Test.y,
283659919d1cStb 		.order = _EC_GOST_2001_Test.order,
283759919d1cStb 		.cofactor = 1,
2838978dd0cbStb 	},
2839978dd0cbStb 	{
2840978dd0cbStb 		.comment = "GOST R 34.10-2001 CryptoPro-A",
284159919d1cStb 		.nid = NID_id_GostR3410_2001_CryptoPro_A_ParamSet,
284259919d1cStb 		.param_len = sizeof(_EC_GOST_2001_CryptoPro_A.p),
284359919d1cStb 		.p = _EC_GOST_2001_CryptoPro_A.p,
284459919d1cStb 		.a = _EC_GOST_2001_CryptoPro_A.a,
284559919d1cStb 		.b = _EC_GOST_2001_CryptoPro_A.b,
284659919d1cStb 		.x = _EC_GOST_2001_CryptoPro_A.x,
284759919d1cStb 		.y = _EC_GOST_2001_CryptoPro_A.y,
284859919d1cStb 		.order = _EC_GOST_2001_CryptoPro_A.order,
284959919d1cStb 		.cofactor = 1,
2850978dd0cbStb 	},
2851978dd0cbStb 	{
2852978dd0cbStb 		.comment = "GOST R 34.10-2001 CryptoPro-B",
285359919d1cStb 		.nid = NID_id_GostR3410_2001_CryptoPro_B_ParamSet,
285459919d1cStb 		.param_len = sizeof(_EC_GOST_2001_CryptoPro_B.p),
285559919d1cStb 		.p = _EC_GOST_2001_CryptoPro_B.p,
285659919d1cStb 		.a = _EC_GOST_2001_CryptoPro_B.a,
285759919d1cStb 		.b = _EC_GOST_2001_CryptoPro_B.b,
285859919d1cStb 		.x = _EC_GOST_2001_CryptoPro_B.x,
285959919d1cStb 		.y = _EC_GOST_2001_CryptoPro_B.y,
286059919d1cStb 		.order = _EC_GOST_2001_CryptoPro_B.order,
286159919d1cStb 		.cofactor = 1,
2862978dd0cbStb 	},
2863978dd0cbStb 	{
2864978dd0cbStb 		.comment = "GOST R 34.10-2001 CryptoPro-C",
286559919d1cStb 		.nid = NID_id_GostR3410_2001_CryptoPro_C_ParamSet,
286659919d1cStb 		.param_len = sizeof(_EC_GOST_2001_CryptoPro_C.p),
286759919d1cStb 		.p = _EC_GOST_2001_CryptoPro_C.p,
286859919d1cStb 		.a = _EC_GOST_2001_CryptoPro_C.a,
286959919d1cStb 		.b = _EC_GOST_2001_CryptoPro_C.b,
287059919d1cStb 		.x = _EC_GOST_2001_CryptoPro_C.x,
287159919d1cStb 		.y = _EC_GOST_2001_CryptoPro_C.y,
287259919d1cStb 		.order = _EC_GOST_2001_CryptoPro_C.order,
287359919d1cStb 		.cofactor = 1,
2874978dd0cbStb 	},
2875978dd0cbStb 	{
2876978dd0cbStb 		.comment = "GOST R 34.10-2001 CryptoPro-XchA",
287759919d1cStb 		.nid = NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet,
287859919d1cStb 		.param_len = sizeof(_EC_GOST_2001_CryptoPro_A.p),
287959919d1cStb 		.p = _EC_GOST_2001_CryptoPro_A.p,
288059919d1cStb 		.a = _EC_GOST_2001_CryptoPro_A.a,
288159919d1cStb 		.b = _EC_GOST_2001_CryptoPro_A.b,
288259919d1cStb 		.x = _EC_GOST_2001_CryptoPro_A.x,
288359919d1cStb 		.y = _EC_GOST_2001_CryptoPro_A.y,
288459919d1cStb 		.order = _EC_GOST_2001_CryptoPro_A.order,
288559919d1cStb 		.cofactor = 1,
2886978dd0cbStb 	},
2887978dd0cbStb 	{
2888978dd0cbStb 		.comment = "GOST R 34.10-2001 CryptoPro-XchB",
288959919d1cStb 		.nid = NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet,
289059919d1cStb 		.param_len = sizeof(_EC_GOST_2001_CryptoPro_C.p),
289159919d1cStb 		.p = _EC_GOST_2001_CryptoPro_C.p,
289259919d1cStb 		.a = _EC_GOST_2001_CryptoPro_C.a,
289359919d1cStb 		.b = _EC_GOST_2001_CryptoPro_C.b,
289459919d1cStb 		.x = _EC_GOST_2001_CryptoPro_C.x,
289559919d1cStb 		.y = _EC_GOST_2001_CryptoPro_C.y,
289659919d1cStb 		.order = _EC_GOST_2001_CryptoPro_C.order,
289759919d1cStb 		.cofactor = 1,
2898978dd0cbStb 	},
2899978dd0cbStb 	{
2900978dd0cbStb 		.comment = "GOST R 34.10-2012 256 TC26-A",
290159919d1cStb 		.nid = NID_id_tc26_gost_3410_12_256_paramSetA,
290259919d1cStb 		.param_len = sizeof(_EC_GOST_2012_256_TC26_A.p),
290359919d1cStb 		.p = _EC_GOST_2012_256_TC26_A.p,
290459919d1cStb 		.a = _EC_GOST_2012_256_TC26_A.a,
290559919d1cStb 		.b = _EC_GOST_2012_256_TC26_A.b,
290659919d1cStb 		.x = _EC_GOST_2012_256_TC26_A.x,
290759919d1cStb 		.y = _EC_GOST_2012_256_TC26_A.y,
290859919d1cStb 		.order = _EC_GOST_2012_256_TC26_A.order,
290959919d1cStb 		.cofactor = 4,
2910978dd0cbStb 	},
2911978dd0cbStb 	{
2912978dd0cbStb 		.comment = "GOST R 34.10-2012 256 TC26-B",
291359919d1cStb 		.nid = NID_id_tc26_gost_3410_12_256_paramSetB,
291459919d1cStb 		.param_len = sizeof(_EC_GOST_2001_CryptoPro_A.p),
291559919d1cStb 		.p = _EC_GOST_2001_CryptoPro_A.p,
291659919d1cStb 		.a = _EC_GOST_2001_CryptoPro_A.a,
291759919d1cStb 		.b = _EC_GOST_2001_CryptoPro_A.b,
291859919d1cStb 		.x = _EC_GOST_2001_CryptoPro_A.x,
291959919d1cStb 		.y = _EC_GOST_2001_CryptoPro_A.y,
292059919d1cStb 		.order = _EC_GOST_2001_CryptoPro_A.order,
292159919d1cStb 		.cofactor = 1,
2922978dd0cbStb 	},
2923978dd0cbStb 	{
2924978dd0cbStb 		.comment = "GOST R 34.10-2012 256 TC26-C",
292559919d1cStb 		.nid = NID_id_tc26_gost_3410_12_256_paramSetC,
292659919d1cStb 		.param_len = sizeof(_EC_GOST_2001_CryptoPro_B.p),
292759919d1cStb 		.p = _EC_GOST_2001_CryptoPro_B.p,
292859919d1cStb 		.a = _EC_GOST_2001_CryptoPro_B.a,
292959919d1cStb 		.b = _EC_GOST_2001_CryptoPro_B.b,
293059919d1cStb 		.x = _EC_GOST_2001_CryptoPro_B.x,
293159919d1cStb 		.y = _EC_GOST_2001_CryptoPro_B.y,
293259919d1cStb 		.order = _EC_GOST_2001_CryptoPro_B.order,
293359919d1cStb 		.cofactor = 1,
2934978dd0cbStb 	},
2935978dd0cbStb 	{
2936978dd0cbStb 		.comment = "GOST R 34.10-2012 256 TC26-D",
293759919d1cStb 		.nid = NID_id_tc26_gost_3410_12_256_paramSetD,
293859919d1cStb 		.param_len = sizeof(_EC_GOST_2001_CryptoPro_C.p),
293959919d1cStb 		.p = _EC_GOST_2001_CryptoPro_C.p,
294059919d1cStb 		.a = _EC_GOST_2001_CryptoPro_C.a,
294159919d1cStb 		.b = _EC_GOST_2001_CryptoPro_C.b,
294259919d1cStb 		.x = _EC_GOST_2001_CryptoPro_C.x,
294359919d1cStb 		.y = _EC_GOST_2001_CryptoPro_C.y,
294459919d1cStb 		.order = _EC_GOST_2001_CryptoPro_C.order,
294559919d1cStb 		.cofactor = 1,
2946978dd0cbStb 	},
2947978dd0cbStb 	{
2948978dd0cbStb 		.comment = "GOST R 34.10-2012 512 Test Curve",
294959919d1cStb 		.nid = NID_id_tc26_gost_3410_12_512_paramSetTest,
295059919d1cStb 		.param_len = sizeof(_EC_GOST_2012_512_Test.p),
295159919d1cStb 		.p = _EC_GOST_2012_512_Test.p,
295259919d1cStb 		.a = _EC_GOST_2012_512_Test.a,
295359919d1cStb 		.b = _EC_GOST_2012_512_Test.b,
295459919d1cStb 		.x = _EC_GOST_2012_512_Test.x,
295559919d1cStb 		.y = _EC_GOST_2012_512_Test.y,
295659919d1cStb 		.order = _EC_GOST_2012_512_Test.order,
295759919d1cStb 		.cofactor = 1,
2958978dd0cbStb 	},
2959978dd0cbStb 	{
2960978dd0cbStb 		.comment = "GOST R 34.10-2012 512 TC26-A",
296159919d1cStb 		.nid = NID_id_tc26_gost_3410_12_512_paramSetA,
296259919d1cStb 		.param_len = sizeof(_EC_GOST_2012_512_TC26_A.p),
296359919d1cStb 		.p = _EC_GOST_2012_512_TC26_A.p,
296459919d1cStb 		.a = _EC_GOST_2012_512_TC26_A.a,
296559919d1cStb 		.b = _EC_GOST_2012_512_TC26_A.b,
296659919d1cStb 		.x = _EC_GOST_2012_512_TC26_A.x,
296759919d1cStb 		.y = _EC_GOST_2012_512_TC26_A.y,
296859919d1cStb 		.order = _EC_GOST_2012_512_TC26_A.order,
296959919d1cStb 		.cofactor = 1,
2970978dd0cbStb 	},
2971978dd0cbStb 	{
2972978dd0cbStb 		.comment = "GOST R 34.10-2012 512 TC26-B",
297359919d1cStb 		.nid = NID_id_tc26_gost_3410_12_512_paramSetB,
297459919d1cStb 		.param_len = sizeof(_EC_GOST_2012_512_TC26_B.p),
297559919d1cStb 		.p = _EC_GOST_2012_512_TC26_B.p,
297659919d1cStb 		.a = _EC_GOST_2012_512_TC26_B.a,
297759919d1cStb 		.b = _EC_GOST_2012_512_TC26_B.b,
297859919d1cStb 		.x = _EC_GOST_2012_512_TC26_B.x,
297959919d1cStb 		.y = _EC_GOST_2012_512_TC26_B.y,
298059919d1cStb 		.order = _EC_GOST_2012_512_TC26_B.order,
298159919d1cStb 		.cofactor = 1,
2982978dd0cbStb 	},
2983978dd0cbStb 	{
2984978dd0cbStb 		.comment = "GOST R 34.10-2012 512 TC26-C",
298559919d1cStb 		.nid = NID_id_tc26_gost_3410_12_512_paramSetC,
298659919d1cStb 		.param_len = sizeof(_EC_GOST_2012_512_TC26_C.p),
298759919d1cStb 		.p = _EC_GOST_2012_512_TC26_C.p,
298859919d1cStb 		.a = _EC_GOST_2012_512_TC26_C.a,
298959919d1cStb 		.b = _EC_GOST_2012_512_TC26_C.b,
299059919d1cStb 		.x = _EC_GOST_2012_512_TC26_C.x,
299159919d1cStb 		.y = _EC_GOST_2012_512_TC26_C.y,
299259919d1cStb 		.order = _EC_GOST_2012_512_TC26_C.order,
299359919d1cStb 		.cofactor = 4,
2994978dd0cbStb 	},
299590f161ccSmiod #endif
29965650a0e1Sdjm };
29975650a0e1Sdjm 
299859919d1cStb #define curve_list_length (sizeof(curve_list) / sizeof(curve_list[0]))
29995650a0e1Sdjm 
3000f67ac449Stedu static EC_GROUP *
300159919d1cStb ec_group_new_from_data(const struct ec_list_element *curve)
30025650a0e1Sdjm {
30035650a0e1Sdjm 	EC_GROUP *group = NULL;
30045650a0e1Sdjm 	EC_POINT *P = NULL;
30055650a0e1Sdjm 	BN_CTX *ctx = NULL;
3006e3e151efStb 	BIGNUM *p, *a, *b, *x, *y, *order, *cofactor;
30075650a0e1Sdjm 	int ok = 0;
30085650a0e1Sdjm 
3009f67ac449Stedu 	if ((ctx = BN_CTX_new()) == NULL) {
30105067ae9fSbeck 		ECerror(ERR_R_MALLOC_FAILURE);
30115650a0e1Sdjm 		goto err;
30125650a0e1Sdjm 	}
3013e3e151efStb 	BN_CTX_start(ctx);
3014e3e151efStb 
3015e3e151efStb 	if ((p = BN_CTX_get(ctx)) == NULL) {
3016e3e151efStb 		ECerror(ERR_R_BN_LIB);
3017e3e151efStb 		goto err;
3018e3e151efStb 	}
3019e3e151efStb 	if ((a = BN_CTX_get(ctx)) == NULL) {
3020e3e151efStb 		ECerror(ERR_R_BN_LIB);
3021e3e151efStb 		goto err;
3022e3e151efStb 	}
3023e3e151efStb 	if ((b = BN_CTX_get(ctx)) == NULL) {
3024e3e151efStb 		ECerror(ERR_R_BN_LIB);
3025e3e151efStb 		goto err;
3026e3e151efStb 	}
3027e3e151efStb 	if ((x = BN_CTX_get(ctx)) == NULL) {
3028e3e151efStb 		ECerror(ERR_R_BN_LIB);
3029e3e151efStb 		goto err;
3030e3e151efStb 	}
3031e3e151efStb 	if ((y = BN_CTX_get(ctx)) == NULL) {
3032e3e151efStb 		ECerror(ERR_R_BN_LIB);
3033e3e151efStb 		goto err;
3034e3e151efStb 	}
3035e3e151efStb 	if ((order = BN_CTX_get(ctx)) == NULL) {
3036e3e151efStb 		ECerror(ERR_R_BN_LIB);
3037e3e151efStb 		goto err;
3038e3e151efStb 	}
3039e3e151efStb 	if ((cofactor = BN_CTX_get(ctx)) == NULL) {
3040e3e151efStb 		ECerror(ERR_R_BN_LIB);
3041e3e151efStb 		goto err;
3042e3e151efStb 	}
3043e3e151efStb 
304459919d1cStb 	if (BN_bin2bn(curve->p, curve->param_len, p) == NULL) {
3045e3e151efStb 		ECerror(ERR_R_BN_LIB);
3046e3e151efStb 		goto err;
3047e3e151efStb 	}
304859919d1cStb 	if (BN_bin2bn(curve->a, curve->param_len, a) == NULL) {
3049e3e151efStb 		ECerror(ERR_R_BN_LIB);
3050e3e151efStb 		goto err;
3051e3e151efStb 	}
305259919d1cStb 	if (BN_bin2bn(curve->b, curve->param_len, b) == NULL) {
30535067ae9fSbeck 		ECerror(ERR_R_BN_LIB);
30545650a0e1Sdjm 		goto err;
30555650a0e1Sdjm 	}
3056f67ac449Stedu 	if ((group = EC_GROUP_new_curve_GFp(p, a, b, ctx)) == NULL) {
30575067ae9fSbeck 		ECerror(ERR_R_EC_LIB);
30585650a0e1Sdjm 		goto err;
30595650a0e1Sdjm 	}
30605650a0e1Sdjm 
3061f67ac449Stedu 	if ((P = EC_POINT_new(group)) == NULL) {
30625067ae9fSbeck 		ECerror(ERR_R_EC_LIB);
30635650a0e1Sdjm 		goto err;
30645650a0e1Sdjm 	}
306559919d1cStb 	if (BN_bin2bn(curve->x, curve->param_len, x) == NULL) {
3066e3e151efStb 		ECerror(ERR_R_BN_LIB);
3067e3e151efStb 		goto err;
3068e3e151efStb 	}
306959919d1cStb 	if (BN_bin2bn(curve->y, curve->param_len, y) == NULL) {
30705067ae9fSbeck 		ECerror(ERR_R_BN_LIB);
30715650a0e1Sdjm 		goto err;
30725650a0e1Sdjm 	}
307374a506e7Stb 	if (!EC_POINT_set_affine_coordinates(group, P, x, y, ctx)) {
30745067ae9fSbeck 		ECerror(ERR_R_EC_LIB);
30755650a0e1Sdjm 		goto err;
30765650a0e1Sdjm 	}
307759919d1cStb 	if (BN_bin2bn(curve->order, curve->param_len, order) == NULL) {
307859919d1cStb 		ECerror(ERR_R_EC_LIB);
30795650a0e1Sdjm 		goto err;
30805650a0e1Sdjm 	}
308159919d1cStb 	if (!BN_set_word(cofactor, curve->cofactor)) {
3082e3e151efStb 		ECerror(ERR_R_BN_LIB);
3083e3e151efStb 		goto err;
3084e3e151efStb 	}
3085e3e151efStb 	if (!EC_GROUP_set_generator(group, P, order, cofactor)) {
30865067ae9fSbeck 		ECerror(ERR_R_EC_LIB);
30875650a0e1Sdjm 		goto err;
30885650a0e1Sdjm 	}
308959919d1cStb 	if (curve->seed != NULL) {
309059919d1cStb 		if (!EC_GROUP_set_seed(group, curve->seed, curve->seed_len)) {
30915067ae9fSbeck 			ECerror(ERR_R_EC_LIB);
30925650a0e1Sdjm 			goto err;
30935650a0e1Sdjm 		}
30945650a0e1Sdjm 	}
30955650a0e1Sdjm 	ok = 1;
30965650a0e1Sdjm  err:
3097f67ac449Stedu 	if (!ok) {
30985650a0e1Sdjm 		EC_GROUP_free(group);
30995650a0e1Sdjm 		group = NULL;
31005650a0e1Sdjm 	}
31015650a0e1Sdjm 	EC_POINT_free(P);
3102e3e151efStb 	BN_CTX_end(ctx);
31035650a0e1Sdjm 	BN_CTX_free(ctx);
3104e3e151efStb 
31055650a0e1Sdjm 	return group;
31065650a0e1Sdjm }
31075650a0e1Sdjm 
3108f67ac449Stedu EC_GROUP *
3109f67ac449Stedu EC_GROUP_new_by_curve_name(int nid)
31105650a0e1Sdjm {
31115650a0e1Sdjm 	size_t i;
31125650a0e1Sdjm 	EC_GROUP *ret = NULL;
31135650a0e1Sdjm 
31145650a0e1Sdjm 	if (nid <= 0)
31155650a0e1Sdjm 		return NULL;
31165650a0e1Sdjm 
31175650a0e1Sdjm 	for (i = 0; i < curve_list_length; i++)
3118f67ac449Stedu 		if (curve_list[i].nid == nid) {
311959919d1cStb 			ret = ec_group_new_from_data(&curve_list[i]);
31205650a0e1Sdjm 			break;
31215650a0e1Sdjm 		}
3122f67ac449Stedu 	if (ret == NULL) {
31235067ae9fSbeck 		ECerror(EC_R_UNKNOWN_GROUP);
31245650a0e1Sdjm 		return NULL;
31255650a0e1Sdjm 	}
31265650a0e1Sdjm 	EC_GROUP_set_curve_name(ret, nid);
31275650a0e1Sdjm 
31285650a0e1Sdjm 	return ret;
31295650a0e1Sdjm }
31305650a0e1Sdjm 
3131f67ac449Stedu size_t
3132f67ac449Stedu EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems)
31335650a0e1Sdjm {
31345650a0e1Sdjm 	size_t i, min;
31355650a0e1Sdjm 
31365650a0e1Sdjm 	if (r == NULL || nitems == 0)
31375650a0e1Sdjm 		return curve_list_length;
31385650a0e1Sdjm 
31395650a0e1Sdjm 	min = nitems < curve_list_length ? nitems : curve_list_length;
31405650a0e1Sdjm 
3141f67ac449Stedu 	for (i = 0; i < min; i++) {
31425650a0e1Sdjm 		r[i].nid = curve_list[i].nid;
3143f1535dc8Sdjm 		r[i].comment = curve_list[i].comment;
31445650a0e1Sdjm 	}
31455650a0e1Sdjm 
31465650a0e1Sdjm 	return curve_list_length;
31475650a0e1Sdjm }
3148bdb7dc21Sjsing 
3149034a9b39Stb static const struct {
3150034a9b39Stb 	const char *name;
3151034a9b39Stb 	int nid;
3152034a9b39Stb } nist_curves[] = {
3153bdb7dc21Sjsing 	{ "B-163", NID_sect163r2 },
3154bdb7dc21Sjsing 	{ "B-233", NID_sect233r1 },
3155bdb7dc21Sjsing 	{ "B-283", NID_sect283r1 },
3156bdb7dc21Sjsing 	{ "B-409", NID_sect409r1 },
3157bdb7dc21Sjsing 	{ "B-571", NID_sect571r1 },
3158bdb7dc21Sjsing 	{ "K-163", NID_sect163k1 },
3159bdb7dc21Sjsing 	{ "K-233", NID_sect233k1 },
3160bdb7dc21Sjsing 	{ "K-283", NID_sect283k1 },
3161bdb7dc21Sjsing 	{ "K-409", NID_sect409k1 },
3162bdb7dc21Sjsing 	{ "K-571", NID_sect571k1 },
3163bdb7dc21Sjsing 	{ "P-192", NID_X9_62_prime192v1 },
3164bdb7dc21Sjsing 	{ "P-224", NID_secp224r1 },
3165bdb7dc21Sjsing 	{ "P-256", NID_X9_62_prime256v1 },
3166bdb7dc21Sjsing 	{ "P-384", NID_secp384r1 },
3167bdb7dc21Sjsing 	{ "P-521", NID_secp521r1 }
3168bdb7dc21Sjsing };
3169bdb7dc21Sjsing 
3170bdb7dc21Sjsing const char *
3171bdb7dc21Sjsing EC_curve_nid2nist(int nid)
3172bdb7dc21Sjsing {
3173bdb7dc21Sjsing 	size_t i;
3174bdb7dc21Sjsing 
3175034a9b39Stb 	for (i = 0; i < sizeof(nist_curves) / sizeof(nist_curves[0]); i++) {
3176bdb7dc21Sjsing 		if (nist_curves[i].nid == nid)
3177034a9b39Stb 			return nist_curves[i].name;
3178bdb7dc21Sjsing 	}
3179034a9b39Stb 
3180034a9b39Stb 	return NULL;
3181bdb7dc21Sjsing }
3182bdb7dc21Sjsing 
3183bdb7dc21Sjsing int
3184bdb7dc21Sjsing EC_curve_nist2nid(const char *name)
3185bdb7dc21Sjsing {
3186bdb7dc21Sjsing 	size_t i;
3187bdb7dc21Sjsing 
3188034a9b39Stb 	for (i = 0; i < sizeof(nist_curves) / sizeof(nist_curves[0]); i++) {
3189034a9b39Stb 		if (strcmp(nist_curves[i].name, name) == 0)
3190034a9b39Stb 			return nist_curves[i].nid;
3191bdb7dc21Sjsing 	}
3192034a9b39Stb 
3193034a9b39Stb 	return NID_undef;
3194bdb7dc21Sjsing }
3195