xref: /openbsd/lib/libcrypto/ec/ec_curve.c (revision 0884f548)
1*0884f548Stb /* $OpenBSD: ec_curve.c,v 1.43 2024/03/24 06:05:41 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 = {
92ecf6283eStb 		0x30, 0x45, 0xae, 0x6f, 0xc8, 0x42, 0x2f, 0x64, 0xed, 0x57,
93ecf6283eStb 		0x95, 0x28, 0xd3, 0x81, 0x20, 0xea, 0xe1, 0x21, 0x96, 0xd5,
9459919d1cStb 	},
9559919d1cStb 	.p = {
96ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
97ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
98ecf6283eStb 		0xff, 0xff, 0xff, 0xff,
9959919d1cStb 	},
10059919d1cStb 	.a = {
101ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
102ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
103ecf6283eStb 		0xff, 0xff, 0xff, 0xfc,
10459919d1cStb 	},
10559919d1cStb 	.b = {
106ecf6283eStb 		0x64, 0x21, 0x05, 0x19, 0xe5, 0x9c, 0x80, 0xe7, 0x0f, 0xa7,
107ecf6283eStb 		0xe9, 0xab, 0x72, 0x24, 0x30, 0x49, 0xfe, 0xb8, 0xde, 0xec,
108ecf6283eStb 		0xc1, 0x46, 0xb9, 0xb1,
10959919d1cStb 	},
11059919d1cStb 	.x = {
111ecf6283eStb 		0x18, 0x8d, 0xa8, 0x0e, 0xb0, 0x30, 0x90, 0xf6, 0x7c, 0xbf,
112ecf6283eStb 		0x20, 0xeb, 0x43, 0xa1, 0x88, 0x00, 0xf4, 0xff, 0x0a, 0xfd,
113ecf6283eStb 		0x82, 0xff, 0x10, 0x12,
11459919d1cStb 	},
11559919d1cStb 	.y = {
11601938560Stb 		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 = {
121ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
122ecf6283eStb 		0xff, 0xff, 0x99, 0xde, 0xf8, 0x36, 0x14, 0x6b, 0xc9, 0xb1,
123ecf6283eStb 		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 = {
137ecf6283eStb 		0xbd, 0x71, 0x34, 0x47, 0x99, 0xd5, 0xc7, 0xfc, 0xdc, 0x45,
138ecf6283eStb 		0xb5, 0x9f, 0xa3, 0xb9, 0xab, 0x8f, 0x6a, 0x94, 0x8b, 0xc5,
13959919d1cStb 	},
14059919d1cStb 	.p = {
141ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
142ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
143f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
14459919d1cStb 	},
14559919d1cStb 	.a = {
146ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
147ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
148ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
14959919d1cStb 	},
15059919d1cStb 	.b = {
151ecf6283eStb 		0xb4, 0x05, 0x0a, 0x85, 0x0c, 0x04, 0xb3, 0xab, 0xf5, 0x41,
152ecf6283eStb 		0x32, 0x56, 0x50, 0x44, 0xb0, 0xb7, 0xd7, 0xbf, 0xd8, 0xba,
153ecf6283eStb 		0x27, 0x0b, 0x39, 0x43, 0x23, 0x55, 0xff, 0xb4,
15459919d1cStb 	},
15559919d1cStb 	.x = {
156ecf6283eStb 		0xb7, 0x0e, 0x0c, 0xbd, 0x6b, 0xb4, 0xbf, 0x7f, 0x32, 0x13,
157ecf6283eStb 		0x90, 0xb9, 0x4a, 0x03, 0xc1, 0xd3, 0x56, 0xc2, 0x11, 0x22,
158ecf6283eStb 		0x34, 0x32, 0x80, 0xd6, 0x11, 0x5c, 0x1d, 0x21,
15959919d1cStb 	},
16059919d1cStb 	.y = {
16101938560Stb 		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 = {
166ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
167ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0x16, 0xa2, 0xe0, 0xb8, 0xf0, 0x3e,
168ecf6283eStb 		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 = {
182ecf6283eStb 		0xa3, 0x35, 0x92, 0x6a, 0xa3, 0x19, 0xa2, 0x7a, 0x1d, 0x00,
183ecf6283eStb 		0x89, 0x6a, 0x67, 0x73, 0xa4, 0x82, 0x7a, 0xcd, 0xac, 0x73,
18459919d1cStb 	},
18559919d1cStb 	.p = {
186ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
187ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
188ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
189ecf6283eStb 		0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
190ecf6283eStb 		0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
19159919d1cStb 	},
19259919d1cStb 	.a = {
193ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
194ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
195ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
196ecf6283eStb 		0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
197ecf6283eStb 		0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfc,
19859919d1cStb 	},
19959919d1cStb 	.b = {
200ecf6283eStb 		0xb3, 0x31, 0x2f, 0xa7, 0xe2, 0x3e, 0xe7, 0xe4, 0x98, 0x8e,
201ecf6283eStb 		0x05, 0x6b, 0xe3, 0xf8, 0x2d, 0x19, 0x18, 0x1d, 0x9c, 0x6e,
202ecf6283eStb 		0xfe, 0x81, 0x41, 0x12, 0x03, 0x14, 0x08, 0x8f, 0x50, 0x13,
203ecf6283eStb 		0x87, 0x5a, 0xc6, 0x56, 0x39, 0x8d, 0x8a, 0x2e, 0xd1, 0x9d,
204ecf6283eStb 		0x2a, 0x85, 0xc8, 0xed, 0xd3, 0xec, 0x2a, 0xef,
20559919d1cStb 	},
20659919d1cStb 	.x = {
207ecf6283eStb 		0xaa, 0x87, 0xca, 0x22, 0xbe, 0x8b, 0x05, 0x37, 0x8e, 0xb1,
208ecf6283eStb 		0xc7, 0x1e, 0xf3, 0x20, 0xad, 0x74, 0x6e, 0x1d, 0x3b, 0x62,
209ecf6283eStb 		0x8b, 0xa7, 0x9b, 0x98, 0x59, 0xf7, 0x41, 0xe0, 0x82, 0x54,
210ecf6283eStb 		0x2a, 0x38, 0x55, 0x02, 0xf2, 0x5d, 0xbf, 0x55, 0x29, 0x6c,
211ecf6283eStb 		0x3a, 0x54, 0x5e, 0x38, 0x72, 0x76, 0x0a, 0xb7,
21259919d1cStb 	},
21359919d1cStb 	.y = {
21401938560Stb 		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 = {
221ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
222ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
223ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xc7, 0x63, 0x4d, 0x81, 0xf4, 0x37,
224ecf6283eStb 		0x2d, 0xdf, 0x58, 0x1a, 0x0d, 0xb2, 0x48, 0xb0, 0xa7, 0x7a,
225ecf6283eStb 		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 = {
239ecf6283eStb 		0xd0, 0x9e, 0x88, 0x00, 0x29, 0x1c, 0xb8, 0x53, 0x96, 0xcc,
240ecf6283eStb 		0x67, 0x17, 0x39, 0x32, 0x84, 0xaa, 0xa0, 0xda, 0x64, 0xba,
24159919d1cStb 	},
24259919d1cStb 	.p = {
243ecf6283eStb 		0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
244ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
245ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
246ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
247ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
248ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
249ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25059919d1cStb 	},
25159919d1cStb 	.a = {
252ecf6283eStb 		0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
253ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
254ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
255ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
256ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
257ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
258ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
25959919d1cStb 	},
26059919d1cStb 	.b = {
261ecf6283eStb 		0x00, 0x51, 0x95, 0x3e, 0xb9, 0x61, 0x8e, 0x1c, 0x9a, 0x1f,
262ecf6283eStb 		0x92, 0x9a, 0x21, 0xa0, 0xb6, 0x85, 0x40, 0xee, 0xa2, 0xda,
263ecf6283eStb 		0x72, 0x5b, 0x99, 0xb3, 0x15, 0xf3, 0xb8, 0xb4, 0x89, 0x91,
264ecf6283eStb 		0x8e, 0xf1, 0x09, 0xe1, 0x56, 0x19, 0x39, 0x51, 0xec, 0x7e,
265ecf6283eStb 		0x93, 0x7b, 0x16, 0x52, 0xc0, 0xbd, 0x3b, 0xb1, 0xbf, 0x07,
266ecf6283eStb 		0x35, 0x73, 0xdf, 0x88, 0x3d, 0x2c, 0x34, 0xf1, 0xef, 0x45,
267ecf6283eStb 		0x1f, 0xd4, 0x6b, 0x50, 0x3f, 0x00,
26859919d1cStb 	},
26959919d1cStb 	.x = {
270ecf6283eStb 		0x00, 0xc6, 0x85, 0x8e, 0x06, 0xb7, 0x04, 0x04, 0xe9, 0xcd,
271ecf6283eStb 		0x9e, 0x3e, 0xcb, 0x66, 0x23, 0x95, 0xb4, 0x42, 0x9c, 0x64,
272ecf6283eStb 		0x81, 0x39, 0x05, 0x3f, 0xb5, 0x21, 0xf8, 0x28, 0xaf, 0x60,
273ecf6283eStb 		0x6b, 0x4d, 0x3d, 0xba, 0xa1, 0x4b, 0x5e, 0x77, 0xef, 0xe7,
274ecf6283eStb 		0x59, 0x28, 0xfe, 0x1d, 0xc1, 0x27, 0xa2, 0xff, 0xa8, 0xde,
275ecf6283eStb 		0x33, 0x48, 0xb3, 0xc1, 0x85, 0x6a, 0x42, 0x9b, 0xf9, 0x7e,
276ecf6283eStb 		0x7e, 0x31, 0xc2, 0xe5, 0xbd, 0x66,
27759919d1cStb 	},
27859919d1cStb 	.y = {
27901938560Stb 		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 = {
288ecf6283eStb 		0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
289ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
290ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
291ecf6283eStb 		0xff, 0xff, 0xff, 0xfa, 0x51, 0x86, 0x87, 0x83, 0xbf, 0x2f,
292ecf6283eStb 		0x96, 0x6b, 0x7f, 0xcc, 0x01, 0x48, 0xf7, 0x09, 0xa5, 0xd0,
293ecf6283eStb 		0x3b, 0xb5, 0xc9, 0xb8, 0x89, 0x9c, 0x47, 0xae, 0xbb, 0x6f,
294ecf6283eStb 		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 = {
309ecf6283eStb 		0x31, 0xa9, 0x2e, 0xe2, 0x02, 0x9f, 0xd1, 0x0d, 0x90, 0x1b,
310ecf6283eStb 		0x11, 0x3e, 0x99, 0x07, 0x10, 0xf0, 0xd2, 0x1a, 0xc6, 0xb6,
31159919d1cStb 	},
31259919d1cStb 	.p = {
313ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
314ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
315ecf6283eStb 		0xff, 0xff, 0xff, 0xff,
31659919d1cStb 	},
31759919d1cStb 	.a = {
318ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
319ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
320ecf6283eStb 		0xff, 0xff, 0xff, 0xfc,
32159919d1cStb 	},
32259919d1cStb 	.b = {
323ecf6283eStb 		0xcc, 0x22, 0xd6, 0xdf, 0xb9, 0x5c, 0x6b, 0x25, 0xe4, 0x9c,
324ecf6283eStb 		0x0d, 0x63, 0x64, 0xa4, 0xe5, 0x98, 0x0c, 0x39, 0x3a, 0xa2,
325ecf6283eStb 		0x16, 0x68, 0xd9, 0x53,
32659919d1cStb 	},
32759919d1cStb 	.x = {
328ecf6283eStb 		0xee, 0xa2, 0xba, 0xe7, 0xe1, 0x49, 0x78, 0x42, 0xf2, 0xde,
329ecf6283eStb 		0x77, 0x69, 0xcf, 0xe9, 0xc9, 0x89, 0xc0, 0x72, 0xad, 0x69,
330ecf6283eStb 		0x6f, 0x48, 0x03, 0x4a,
33159919d1cStb 	},
33259919d1cStb 	.y = {
33301938560Stb 		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 = {
338ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
339ecf6283eStb 		0xff, 0xfe, 0x5f, 0xb1, 0xa7, 0x24, 0xdc, 0x80, 0x41, 0x86,
340ecf6283eStb 		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 = {
354ecf6283eStb 		0xc4, 0x69, 0x68, 0x44, 0x35, 0xde, 0xb3, 0x78, 0xc4, 0xb6,
355ecf6283eStb 		0x5c, 0xa9, 0x59, 0x1e, 0x2a, 0x57, 0x63, 0x05, 0x9a, 0x2e,
35659919d1cStb 	},
35759919d1cStb 	.p = {
358ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
359ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
360ecf6283eStb 		0xff, 0xff, 0xff, 0xff,
36159919d1cStb 	},
36259919d1cStb 	.a = {
363ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
364ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
365ecf6283eStb 		0xff, 0xff, 0xff, 0xfc,
36659919d1cStb 	},
36759919d1cStb 	.b = {
368ecf6283eStb 		0x22, 0x12, 0x3d, 0xc2, 0x39, 0x5a, 0x05, 0xca, 0xa7, 0x42,
369ecf6283eStb 		0x3d, 0xae, 0xcc, 0xc9, 0x47, 0x60, 0xa7, 0xd4, 0x62, 0x25,
370ecf6283eStb 		0x6b, 0xd5, 0x69, 0x16,
37159919d1cStb 	},
37259919d1cStb 	.x = {
373ecf6283eStb 		0x7d, 0x29, 0x77, 0x81, 0x00, 0xc6, 0x5a, 0x1d, 0xa1, 0x78,
374ecf6283eStb 		0x37, 0x16, 0x58, 0x8d, 0xce, 0x2b, 0x8b, 0x4a, 0xee, 0x8e,
375ecf6283eStb 		0x22, 0x8f, 0x18, 0x96,
37659919d1cStb 	},
37759919d1cStb 	.y = {
37801938560Stb 		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 = {
383ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
384ecf6283eStb 		0xff, 0xff, 0x7a, 0x62, 0xd0, 0x31, 0xc8, 0x3f, 0x42, 0x94,
385ecf6283eStb 		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 = {
399ecf6283eStb 		0xe4, 0x3b, 0xb4, 0x60, 0xf0, 0xb8, 0x0c, 0xc0, 0xc0, 0xb0,
400ecf6283eStb 		0x75, 0x79, 0x8e, 0x94, 0x80, 0x60, 0xf8, 0x32, 0x1b, 0x7d,
40159919d1cStb 	},
40259919d1cStb 	.p = {
403ecf6283eStb 		0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
404ecf6283eStb 		0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
405ecf6283eStb 		0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
40659919d1cStb 	},
40759919d1cStb 	.a = {
408ecf6283eStb 		0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
409ecf6283eStb 		0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
410ecf6283eStb 		0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfc,
41159919d1cStb 	},
41259919d1cStb 	.b = {
413ecf6283eStb 		0x6b, 0x01, 0x6c, 0x3b, 0xdc, 0xf1, 0x89, 0x41, 0xd0, 0xd6,
414ecf6283eStb 		0x54, 0x92, 0x14, 0x75, 0xca, 0x71, 0xa9, 0xdb, 0x2f, 0xb2,
415ecf6283eStb 		0x7d, 0x1d, 0x37, 0x79, 0x61, 0x85, 0xc2, 0x94, 0x2c, 0x0a,
41659919d1cStb 	},
41759919d1cStb 	.x = {
418ecf6283eStb 		0x0f, 0xfa, 0x96, 0x3c, 0xdc, 0xa8, 0x81, 0x6c, 0xcc, 0x33,
419ecf6283eStb 		0xb8, 0x64, 0x2b, 0xed, 0xf9, 0x05, 0xc3, 0xd3, 0x58, 0x57,
420ecf6283eStb 		0x3d, 0x3f, 0x27, 0xfb, 0xbd, 0x3b, 0x3c, 0xb9, 0xaa, 0xaf,
42159919d1cStb 	},
42259919d1cStb 	.y = {
42301938560Stb 		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 = {
428ecf6283eStb 		0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
429ecf6283eStb 		0xff, 0xff, 0x7f, 0xff, 0xff, 0x9e, 0x5e, 0x9a, 0x9f, 0x5d,
430ecf6283eStb 		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 = {
444ecf6283eStb 		0xe8, 0xb4, 0x01, 0x16, 0x04, 0x09, 0x53, 0x03, 0xca, 0x3b,
445ecf6283eStb 		0x80, 0x99, 0x98, 0x2b, 0xe0, 0x9f, 0xcb, 0x9a, 0xe6, 0x16,
44659919d1cStb 	},
44759919d1cStb 	.p = {
448ecf6283eStb 		0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
449ecf6283eStb 		0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
450ecf6283eStb 		0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
45159919d1cStb 	},
45259919d1cStb 	.a = {
453ecf6283eStb 		0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
454ecf6283eStb 		0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
455ecf6283eStb 		0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfc,
45659919d1cStb 	},
45759919d1cStb 	.b = {
458ecf6283eStb 		0x61, 0x7f, 0xab, 0x68, 0x32, 0x57, 0x6c, 0xbb, 0xfe, 0xd5,
459ecf6283eStb 		0x0d, 0x99, 0xf0, 0x24, 0x9c, 0x3f, 0xee, 0x58, 0xb9, 0x4b,
460ecf6283eStb 		0xa0, 0x03, 0x8c, 0x7a, 0xe8, 0x4c, 0x8c, 0x83, 0x2f, 0x2c,
46159919d1cStb 	},
46259919d1cStb 	.x = {
463ecf6283eStb 		0x38, 0xaf, 0x09, 0xd9, 0x87, 0x27, 0x70, 0x51, 0x20, 0xc9,
464ecf6283eStb 		0x21, 0xbb, 0x5e, 0x9e, 0x26, 0x29, 0x6a, 0x3c, 0xdc, 0xf2,
465ecf6283eStb 		0xf3, 0x57, 0x57, 0xa0, 0xea, 0xfd, 0x87, 0xb8, 0x30, 0xe7,
46659919d1cStb 	},
46759919d1cStb 	.y = {
46801938560Stb 		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 = {
473ecf6283eStb 		0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
474ecf6283eStb 		0xff, 0xff, 0x80, 0x00, 0x00, 0xcf, 0xa7, 0xe8, 0x59, 0x43,
475ecf6283eStb 		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 = {
489ecf6283eStb 		0x7d, 0x73, 0x74, 0x16, 0x8f, 0xfe, 0x34, 0x71, 0xb6, 0x0a,
490ecf6283eStb 		0x85, 0x76, 0x86, 0xa1, 0x94, 0x75, 0xd3, 0xbf, 0xa2, 0xff,
49159919d1cStb 	},
49259919d1cStb 	.p = {
493ecf6283eStb 		0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
494ecf6283eStb 		0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
495ecf6283eStb 		0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
49659919d1cStb 	},
49759919d1cStb 	.a = {
498ecf6283eStb 		0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
499ecf6283eStb 		0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
500ecf6283eStb 		0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfc,
50159919d1cStb 	},
50259919d1cStb 	.b = {
503ecf6283eStb 		0x25, 0x57, 0x05, 0xfa, 0x2a, 0x30, 0x66, 0x54, 0xb1, 0xf4,
504ecf6283eStb 		0xcb, 0x03, 0xd6, 0xa7, 0x50, 0xa3, 0x0c, 0x25, 0x01, 0x02,
505ecf6283eStb 		0xd4, 0x98, 0x87, 0x17, 0xd9, 0xba, 0x15, 0xab, 0x6d, 0x3e,
50659919d1cStb 	},
50759919d1cStb 	.x = {
508ecf6283eStb 		0x67, 0x68, 0xae, 0x8e, 0x18, 0xbb, 0x92, 0xcf, 0xcf, 0x00,
509ecf6283eStb 		0x5c, 0x94, 0x9a, 0xa2, 0xc6, 0xd9, 0x48, 0x53, 0xd0, 0xe6,
510ecf6283eStb 		0x60, 0xbb, 0xf8, 0x54, 0xb1, 0xc9, 0x50, 0x5f, 0xe9, 0x5a,
51159919d1cStb 	},
51259919d1cStb 	.y = {
51301938560Stb 		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 = {
518ecf6283eStb 		0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
519ecf6283eStb 		0xff, 0xff, 0x7f, 0xff, 0xff, 0x97, 0x5d, 0xeb, 0x41, 0xb3,
520ecf6283eStb 		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 = {
534ecf6283eStb 		0xc4, 0x9d, 0x36, 0x08, 0x86, 0xe7, 0x04, 0x93, 0x6a, 0x66,
535ecf6283eStb 		0x78, 0xe1, 0x13, 0x9d, 0x26, 0xb7, 0x81, 0x9f, 0x7e, 0x90,
53659919d1cStb 	},
53759919d1cStb 	.p = {
538ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
539f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
540ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
541ecf6283eStb 		0xff, 0xff,
54259919d1cStb 	},
54359919d1cStb 	.a = {
544ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
545f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
546ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
547ecf6283eStb 		0xff, 0xfc,
54859919d1cStb 	},
54959919d1cStb 	.b = {
550ecf6283eStb 		0x5a, 0xc6, 0x35, 0xd8, 0xaa, 0x3a, 0x93, 0xe7, 0xb3, 0xeb,
551ecf6283eStb 		0xbd, 0x55, 0x76, 0x98, 0x86, 0xbc, 0x65, 0x1d, 0x06, 0xb0,
552ecf6283eStb 		0xcc, 0x53, 0xb0, 0xf6, 0x3b, 0xce, 0x3c, 0x3e, 0x27, 0xd2,
553ecf6283eStb 		0x60, 0x4b,
55459919d1cStb 	},
55559919d1cStb 	.x = {
556ecf6283eStb 		0x6b, 0x17, 0xd1, 0xf2, 0xe1, 0x2c, 0x42, 0x47, 0xf8, 0xbc,
557ecf6283eStb 		0xe6, 0xe5, 0x63, 0xa4, 0x40, 0xf2, 0x77, 0x03, 0x7d, 0x81,
558ecf6283eStb 		0x2d, 0xeb, 0x33, 0xa0, 0xf4, 0xa1, 0x39, 0x45, 0xd8, 0x98,
559ecf6283eStb 		0xc2, 0x96,
56059919d1cStb 	},
56159919d1cStb 	.y = {
56201938560Stb 		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 = {
568ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
569ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbc, 0xe6, 0xfa, 0xad,
570ecf6283eStb 		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 = {
586ecf6283eStb 		0x00, 0xf5, 0x0b, 0x02, 0x8e, 0x4d, 0x69, 0x6e, 0x67, 0x68,
587ecf6283eStb 		0x75, 0x61, 0x51, 0x75, 0x29, 0x04, 0x72, 0x78, 0x3f, 0xb1,
58859919d1cStb 	},
58959919d1cStb 	.p = {
590ecf6283eStb 		0xdb, 0x7c, 0x2a, 0xbf, 0x62, 0xe3, 0x5e, 0x66, 0x80, 0x76,
591ecf6283eStb 		0xbe, 0xad, 0x20, 0x8b,
59259919d1cStb 	},
59359919d1cStb 	.a = {
594ecf6283eStb 		0xdb, 0x7c, 0x2a, 0xbf, 0x62, 0xe3, 0x5e, 0x66, 0x80, 0x76,
595ecf6283eStb 		0xbe, 0xad, 0x20, 0x88,
59659919d1cStb 	},
59759919d1cStb 	.b = {
598ecf6283eStb 		0x65, 0x9e, 0xf8, 0xba, 0x04, 0x39, 0x16, 0xee, 0xde, 0x89,
599ecf6283eStb 		0x11, 0x70, 0x2b, 0x22,
60059919d1cStb 	},
60159919d1cStb 	.x = {
602ecf6283eStb 		0x09, 0x48, 0x72, 0x39, 0x99, 0x5a, 0x5e, 0xe7, 0x6b, 0x55,
603ecf6283eStb 		0xf9, 0xc2, 0xf0, 0x98,
60459919d1cStb 	},
60559919d1cStb 	.y = {
60601938560Stb 		0xa8, 0x9c, 0xe5, 0xaf, 0x87, 0x24, 0xc0, 0xa2, 0x3e, 0x0e,
607f1535dc8Sdjm 		0x0f, 0xf7, 0x75, 0x00,
60859919d1cStb 	},
60959919d1cStb 	.order = {
610ecf6283eStb 		0xdb, 0x7c, 0x2a, 0xbf, 0x62, 0xe3, 0x5e, 0x76, 0x28, 0xdf,
611ecf6283eStb 		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 = {
625ecf6283eStb 		0x00, 0x27, 0x57, 0xa1, 0x11, 0x4d, 0x69, 0x6e, 0x67, 0x68,
626ecf6283eStb 		0x75, 0x61, 0x51, 0x75, 0x53, 0x16, 0xc0, 0x5e, 0x0b, 0xd4,
62759919d1cStb 	},
62859919d1cStb 	.p = {
629ecf6283eStb 		0xdb, 0x7c, 0x2a, 0xbf, 0x62, 0xe3, 0x5e, 0x66, 0x80, 0x76,
630ecf6283eStb 		0xbe, 0xad, 0x20, 0x8b,
63159919d1cStb 	},
63259919d1cStb 	.a = {
633ecf6283eStb 		0x61, 0x27, 0xc2, 0x4c, 0x05, 0xf3, 0x8a, 0x0a, 0xaa, 0xf6,
634ecf6283eStb 		0x5c, 0x0e, 0xf0, 0x2c,
63559919d1cStb 	},
63659919d1cStb 	.b = {
637ecf6283eStb 		0x51, 0xde, 0xf1, 0x81, 0x5d, 0xb5, 0xed, 0x74, 0xfc, 0xc3,
638ecf6283eStb 		0x4c, 0x85, 0xd7, 0x09,
63959919d1cStb 	},
64059919d1cStb 	.x = {
641ecf6283eStb 		0x4b, 0xa3, 0x0a, 0xb5, 0xe8, 0x92, 0xb4, 0xe1, 0x64, 0x9d,
642ecf6283eStb 		0xd0, 0x92, 0x86, 0x43,
64359919d1cStb 	},
64459919d1cStb 	.y = {
64501938560Stb 		0xad, 0xcd, 0x46, 0xf5, 0x88, 0x2e, 0x37, 0x47, 0xde, 0xf3,
646f1535dc8Sdjm 		0x6e, 0x95, 0x6e, 0x97,
64759919d1cStb 	},
64859919d1cStb 	.order = {
649ecf6283eStb 		0x36, 0xdf, 0x0a, 0xaf, 0xd8, 0xb8, 0xd7, 0x59, 0x7c, 0xa1,
650ecf6283eStb 		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 = {
664ecf6283eStb 		0x00, 0x0e, 0x0d, 0x4d, 0x69, 0x6e, 0x67, 0x68, 0x75, 0x61,
665ecf6283eStb 		0x51, 0x75, 0x0c, 0xc0, 0x3a, 0x44, 0x73, 0xd0, 0x36, 0x79,
66659919d1cStb 	},
66759919d1cStb 	.p = {
668ecf6283eStb 		0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
669ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
67059919d1cStb 	},
67159919d1cStb 	.a = {
672ecf6283eStb 		0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
673ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
67459919d1cStb 	},
67559919d1cStb 	.b = {
676ecf6283eStb 		0xe8, 0x75, 0x79, 0xc1, 0x10, 0x79, 0xf4, 0x3d, 0xd8, 0x24,
677ecf6283eStb 		0x99, 0x3c, 0x2c, 0xee, 0x5e, 0xd3,
67859919d1cStb 	},
67959919d1cStb 	.x = {
680ecf6283eStb 		0x16, 0x1f, 0xf7, 0x52, 0x8b, 0x89, 0x9b, 0x2d, 0x0c, 0x28,
681ecf6283eStb 		0x60, 0x7c, 0xa5, 0x2c, 0x5b, 0x86,
68259919d1cStb 	},
68359919d1cStb 	.y = {
68401938560Stb 		0xcf, 0x5a, 0xc8, 0x39, 0x5b, 0xaf, 0xeb, 0x13, 0xc0, 0x2d,
685f1535dc8Sdjm 		0xa2, 0x92, 0xdd, 0xed, 0x7a, 0x83,
68659919d1cStb 	},
68759919d1cStb 	.order = {
688ecf6283eStb 		0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x75, 0xa3,
689ecf6283eStb 		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 = {
703ecf6283eStb 		0x00, 0x4d, 0x69, 0x6e, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75,
704ecf6283eStb 		0x12, 0xd8, 0xf0, 0x34, 0x31, 0xfc, 0xe6, 0x3b, 0x88, 0xf4,
70559919d1cStb 	},
70659919d1cStb 	.p = {
707ecf6283eStb 		0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
708ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
70959919d1cStb 	},
71059919d1cStb 	.a = {
711ecf6283eStb 		0xd6, 0x03, 0x19, 0x98, 0xd1, 0xb3, 0xbb, 0xfe, 0xbf, 0x59,
712ecf6283eStb 		0xcc, 0x9b, 0xbf, 0xf9, 0xae, 0xe1,
71359919d1cStb 	},
71459919d1cStb 	.b = {
715ecf6283eStb 		0x5e, 0xee, 0xfc, 0xa3, 0x80, 0xd0, 0x29, 0x19, 0xdc, 0x2c,
716ecf6283eStb 		0x65, 0x58, 0xbb, 0x6d, 0x8a, 0x5d,
71759919d1cStb 	},
71859919d1cStb 	.x = {
719ecf6283eStb 		0x7b, 0x6a, 0xa5, 0xd8, 0x5e, 0x57, 0x29, 0x83, 0xe6, 0xfb,
720ecf6283eStb 		0x32, 0xa7, 0xcd, 0xeb, 0xc1, 0x40,
72159919d1cStb 	},
72259919d1cStb 	.y = {
72301938560Stb 		0x27, 0xb6, 0x91, 0x6a, 0x89, 0x4d, 0x3a, 0xee, 0x71, 0x06,
724f1535dc8Sdjm 		0xfe, 0x80, 0x5f, 0xc3, 0x4b, 0x44,
72559919d1cStb 	},
72659919d1cStb 	.order = {
727ecf6283eStb 		0x3f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xbe, 0x00,
728ecf6283eStb 		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 = {
741ecf6283eStb 		0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
742ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xac,
743f1535dc8Sdjm 		0x73,
74459919d1cStb 	},
74559919d1cStb 	.a = {
74601938560Stb 		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  = {
75101938560Stb 		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 = {
756ecf6283eStb 		0x00, 0x3b, 0x4c, 0x38, 0x2c, 0xe3, 0x7a, 0xa1, 0x92, 0xa4,
757ecf6283eStb 		0x01, 0x9e, 0x76, 0x30, 0x36, 0xf4, 0xf5, 0xdd, 0x4d, 0x7e,
758ecf6283eStb 		0xbb,
75959919d1cStb 	},
76059919d1cStb 	.y = {
76101938560Stb 		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 = {
76601938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
767ecf6283eStb 		0x01, 0xb8, 0xfa, 0x16, 0xdf, 0xab, 0x9a, 0xca, 0x16, 0xb6,
768ecf6283eStb 		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 = {
782ecf6283eStb 		0x10, 0x53, 0xcd, 0xe4, 0x2c, 0x14, 0xd6, 0x96, 0xe6, 0x76,
783ecf6283eStb 		0x87, 0x56, 0x15, 0x17, 0x53, 0x3b, 0xf3, 0xf8, 0x33, 0x45,
78459919d1cStb 	},
78559919d1cStb 	.p = {
786ecf6283eStb 		0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
787ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
788ecf6283eStb 		0xff,
78959919d1cStb 	},
79059919d1cStb 	.a = {
791ecf6283eStb 		0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
792ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
793ecf6283eStb 		0xfc,
79459919d1cStb 	},
79559919d1cStb 	.b = {
796ecf6283eStb 		0x00, 0x1c, 0x97, 0xbe, 0xfc, 0x54, 0xbd, 0x7a, 0x8b, 0x65,
797ecf6283eStb 		0xac, 0xf8, 0x9f, 0x81, 0xd4, 0xd4, 0xad, 0xc5, 0x65, 0xfa,
798f1535dc8Sdjm 		0x45,
79959919d1cStb 	},
80059919d1cStb 	.x = {
801ecf6283eStb 		0x00, 0x4a, 0x96, 0xb5, 0x68, 0x8e, 0xf5, 0x73, 0x28, 0x46,
802ecf6283eStb 		0x64, 0x69, 0x89, 0x68, 0xc3, 0x8b, 0xb9, 0x13, 0xcb, 0xfc,
803f1535dc8Sdjm 		0x82,
80459919d1cStb 	},
80559919d1cStb 	.y = {
80601938560Stb 		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 = {
81101938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
812ecf6283eStb 		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 = {
827ecf6283eStb 		0xb9, 0x9b, 0x99, 0xb0, 0x99, 0xb3, 0x23, 0xe0, 0x27, 0x09,
828ecf6283eStb 		0xa4, 0xd6, 0x96, 0xe6, 0x76, 0x87, 0x56, 0x15, 0x17, 0x51,
82959919d1cStb 	},
83059919d1cStb 	.p = {
831ecf6283eStb 		0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
832ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xac,
833f1535dc8Sdjm 		0x73,
83459919d1cStb 	},
83559919d1cStb 	.a = {
836ecf6283eStb 		0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
837ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xac,
838f1535dc8Sdjm 		0x70,
83959919d1cStb 	},
84059919d1cStb 	.b = {
841ecf6283eStb 		0x00, 0xb4, 0xe1, 0x34, 0xd3, 0xfb, 0x59, 0xeb, 0x8b, 0xab,
842ecf6283eStb 		0x57, 0x27, 0x49, 0x04, 0x66, 0x4d, 0x5a, 0xf5, 0x03, 0x88,
843ecf6283eStb 		0xba,
84459919d1cStb 	},
84559919d1cStb 	.x = {
846ecf6283eStb 		0x00, 0x52, 0xdc, 0xb0, 0x34, 0x29, 0x3a, 0x11, 0x7e, 0x1f,
847ecf6283eStb 		0x4f, 0xf1, 0x1b, 0x30, 0xf7, 0x19, 0x9d, 0x31, 0x44, 0xce,
848ecf6283eStb 		0x6d,
84959919d1cStb 	},
85059919d1cStb 	.y = {
85101938560Stb 		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 = {
85601938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
857ecf6283eStb 		0x00, 0x35, 0x1e, 0xe7, 0x86, 0xa8, 0x18, 0xf3, 0xa1, 0xa1,
858ecf6283eStb 		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 = {
871ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
872ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
873ecf6283eStb 		0xff, 0xff, 0xee, 0x37,
87459919d1cStb 	},
87559919d1cStb 	.a = {
87601938560Stb 		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 = {
88101938560Stb 		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 = {
886ecf6283eStb 		0xdb, 0x4f, 0xf1, 0x0e, 0xc0, 0x57, 0xe9, 0xae, 0x26, 0xb0,
887ecf6283eStb 		0x7d, 0x02, 0x80, 0xb7, 0xf4, 0x34, 0x1d, 0xa5, 0xd1, 0xb1,
888ecf6283eStb 		0xea, 0xe0, 0x6c, 0x7d,
88959919d1cStb 	},
89059919d1cStb 	.y = {
89101938560Stb 		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 = {
896ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
897ecf6283eStb 		0xff, 0xfe, 0x26, 0xf2, 0xfc, 0x17, 0x0f, 0x69, 0x46, 0x6a,
898ecf6283eStb 		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 = {
911ecf6283eStb 		0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
912ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
913ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xe5, 0x6d,
91459919d1cStb 	},
91559919d1cStb 	.a = {
91601938560Stb 		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 = {
92101938560Stb 		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 = {
926ecf6283eStb 		0x00, 0xa1, 0x45, 0x5b, 0x33, 0x4d, 0xf0, 0x99, 0xdf, 0x30,
927ecf6283eStb 		0xfc, 0x28, 0xa1, 0x69, 0xa4, 0x67, 0xe9, 0xe4, 0x70, 0x75,
928ecf6283eStb 		0xa9, 0x0f, 0x7e, 0x65, 0x0e, 0xb6, 0xb7, 0xa4, 0x5c,
92959919d1cStb 	},
93059919d1cStb 	.y = {
93101938560Stb 		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 = {
93601938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
937ecf6283eStb 		0x00, 0x00, 0x00, 0x00, 0x01, 0xdc, 0xe8, 0xd2, 0xec, 0x61,
938ecf6283eStb 		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 = {
951ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
952ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
953ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
954ecf6283eStb 		0xfc, 0x2f,
95559919d1cStb 	},
95659919d1cStb 	.a = {
95701938560Stb 		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 = {
96301938560Stb 		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 = {
969ecf6283eStb 		0x79, 0xbe, 0x66, 0x7e, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0,
970ecf6283eStb 		0x62, 0x95, 0xce, 0x87, 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb,
971ecf6283eStb 		0x2d, 0xce, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
972f1535dc8Sdjm 		0x17, 0x98,
97359919d1cStb 	},
97459919d1cStb 	.y = {
97501938560Stb 		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 = {
981ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
982ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xba, 0xae, 0xdc, 0xe6,
983ecf6283eStb 		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 = {
998ecf6283eStb 		0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
999ecf6283eStb 		0xff, 0xff, 0xff, 0xfd, 0xe7,
100059919d1cStb 	},
100159919d1cStb 	.a = {
100201938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1003f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00,
100459919d1cStb 	},
100559919d1cStb 	.b = {
100601938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1007f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x03,
100859919d1cStb 	},
100959919d1cStb 	.x = {
101001938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1011f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x01,
101259919d1cStb 	},
101359919d1cStb 	.y = {
101401938560Stb 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1015f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x02,
101659919d1cStb 	},
101759919d1cStb 	.order = {
1018ecf6283eStb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xec, 0xea,
1019ecf6283eStb 		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 = {
1032ecf6283eStb 		0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1033ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x80,
1034ecf6283eStb 		0x8f,
103559919d1cStb 	},
103659919d1cStb 	.a = {
103701938560Stb 		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 = {
104201938560Stb 		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 = {
104701938560Stb 		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 = {
105201938560Stb 		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 = {
105701938560Stb 		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1058ecf6283eStb 		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 = {
1072ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1073ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
1074f1535dc8Sdjm 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
107559919d1cStb 	},
107659919d1cStb 	.a = {
1077ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1078ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
1079ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
108059919d1cStb 	},
108159919d1cStb 	.b = {
1082ecf6283eStb 		0xb4, 0x05, 0x0a, 0x85, 0x0c, 0x04, 0xb3, 0xab, 0xf5, 0x41,
1083ecf6283eStb 		0x32, 0x56, 0x50, 0x44, 0xb0, 0xb7, 0xd7, 0xbf, 0xd8, 0xba,
1084ecf6283eStb 		0x27, 0x0b, 0x39, 0x43, 0x23, 0x55, 0xff, 0xb4,
108559919d1cStb 	},
108659919d1cStb 	.x = {
1087ecf6283eStb 		0xb7, 0x0e, 0x0c, 0xbd, 0x6b, 0xb4, 0xbf, 0x7f, 0x32, 0x13,
1088ecf6283eStb 		0x90, 0xb9, 0x4a, 0x03, 0xc1, 0xd3, 0x56, 0xc2, 0x11, 0x22,
1089ecf6283eStb 		0x34, 0x32, 0x80, 0xd6, 0x11, 0x5c, 0x1d, 0x21,
109059919d1cStb 	},
109159919d1cStb 	.y = {
109201938560Stb 		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 = {
1097ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1098ecf6283eStb 		0xff, 0xff, 0xff, 0xff, 0x16, 0xa2, 0xe0, 0xb8, 0xf0, 0x3e,
1099ecf6283eStb 		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 = {
1112ecf6283eStb 		0xe9, 0x5e, 0x4a, 0x5f, 0x73, 0x70, 0x59, 0xdc, 0x60, 0xdf,
1113ecf6283eStb 		0xc7, 0xad, 0x95, 0xb3, 0xd8, 0x13, 0x95, 0x15, 0x62, 0x0f,
111459919d1cStb 	},
111559919d1cStb 	.a = {
1116ecf6283eStb 		0x34, 0x0e, 0x7b, 0xe2, 0xa2, 0x80, 0xeb, 0x74, 0xe2, 0xbe,
1117ecf6283eStb 		0x61, 0xba, 0xda, 0x74, 0x5d, 0x97, 0xe8, 0xf7, 0xc3, 0x00,
111859919d1cStb 	},
111959919d1cStb 	.b = {
1120ecf6283eStb 		0x1e, 0x58, 0x9a, 0x85, 0x95, 0x42, 0x34, 0x12, 0x13, 0x4f,
1121ecf6283eStb 		0xaa, 0x2d, 0xbd, 0xec, 0x95, 0xc8, 0xd8, 0x67, 0x5e, 0x58,
112259919d1cStb 	},
112359919d1cStb 	.x = {
1124ecf6283eStb 		0xbe, 0xd5, 0xaf, 0x16, 0xea, 0x3f, 0x6a, 0x4f, 0x62, 0x93,
1125ecf6283eStb 		0x8c, 0x46, 0x31, 0xeb, 0x5a, 0xf7, 0xbd, 0xbc, 0xdb, 0xc3,
112659919d1cStb 	},
112759919d1cStb 	.y = {
1128ecf6283eStb 		0x16, 0x67, 0xcb, 0x47, 0x7a, 0x1a, 0x8e, 0xc3, 0x38, 0xf9,
1129ecf6283eStb 		0x47, 0x41, 0x66, 0x9c, 0x97, 0x63, 0x16, 0xda, 0x63, 0x21,
113059919d1cStb 	},
113159919d1cStb 	.order = {
1132ecf6283eStb 		0xe9, 0x5e, 0x4a, 0x5f, 0x73, 0x70, 0x59, 0xdc, 0x60, 0xdf,
1133ecf6283eStb 		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 = {
1146ecf6283eStb 		0xe9, 0x5e, 0x4a, 0x5f, 0x73, 0x70, 0x59, 0xdc, 0x60, 0xdf,
1147ecf6283eStb 		0xc7, 0xad, 0x95, 0xb3, 0xd8, 0x13, 0x95, 0x15, 0x62, 0x0f,
114859919d1cStb 	},
114959919d1cStb 	.a = {
1150ecf6283eStb 		0xe9, 0x5e, 0x4a, 0x5f, 0x73, 0x70, 0x59, 0xdc, 0x60, 0xdf,
1151ecf6283eStb 		0xc7, 0xad, 0x95, 0xb3, 0xd8, 0x13, 0x95, 0x15, 0x62, 0x0c,
115259919d1cStb 	},
115359919d1cStb 	.b = {
1154ecf6283eStb 		0x7a, 0x55, 0x6b, 0x6d, 0xae, 0x53, 0x5b, 0x7b, 0x51, 0xed,
1155ecf6283eStb 		0x2c, 0x4d, 0x7d, 0xaa, 0x7a, 0x0b, 0x5c, 0x55, 0xf3, 0x80,
115659919d1cStb 	},
115759919d1cStb 	.x = {
1158ecf6283eStb 		0xb1, 0x99, 0xb1, 0x3b, 0x9b, 0x34, 0xef, 0xc1, 0x39, 0x7e,
1159ecf6283eStb 		0x64, 0xba, 0xeb, 0x05, 0xac, 0xc2, 0x65, 0xff, 0x23, 0x78,
116059919d1cStb 	},
116159919d1cStb 	.y = {
1162ecf6283eStb 		0xad, 0xd6, 0x71, 0x8b, 0x7c, 0x7c, 0x19, 0x61, 0xf0, 0x99,
1163ecf6283eStb 		0x1b, 0x84, 0x24, 0x43, 0x77, 0x21, 0x52, 0xc9, 0xe0, 0xad,
116459919d1cStb 	},
116559919d1cStb 	.order = {
1166ecf6283eStb 		0xe9, 0x5e, 0x4a, 0x5f, 0x73, 0x70, 0x59, 0xdc, 0x60, 0xdf,
1167ecf6283eStb 		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 = {
1180ecf6283eStb 		0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 0xa7, 0xa3,
1181ecf6283eStb 		0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, 0x8f, 0xce, 0x47, 0x6d,
1182ecf6283eStb 		0xe1, 0xa8, 0x62, 0x97,
118359919d1cStb 	},
118459919d1cStb 	.a = {
1185ecf6283eStb 		0x6a, 0x91, 0x17, 0x40, 0x76, 0xb1, 0xe0, 0xe1, 0x9c, 0x39,
1186ecf6283eStb 		0xc0, 0x31, 0xfe, 0x86, 0x85, 0xc1, 0xca, 0xe0, 0x40, 0xe5,
1187ecf6283eStb 		0xc6, 0x9a, 0x28, 0xef,
118859919d1cStb 	},
118959919d1cStb 	.b = {
1190ecf6283eStb 		0x46, 0x9a, 0x28, 0xef, 0x7c, 0x28, 0xcc, 0xa3, 0xdc, 0x72,
1191ecf6283eStb 		0x1d, 0x04, 0x4f, 0x44, 0x96, 0xbc, 0xca, 0x7e, 0xf4, 0x14,
1192ecf6283eStb 		0x6f, 0xbf, 0x25, 0xc9,
119359919d1cStb 	},
119459919d1cStb 	.x = {
1195ecf6283eStb 		0xc0, 0xa0, 0x64, 0x7e, 0xaa, 0xb6, 0xa4, 0x87, 0x53, 0xb0,
1196ecf6283eStb 		0x33, 0xc5, 0x6c, 0xb0, 0xf0, 0x90, 0x0a, 0x2f, 0x5c, 0x48,
1197ecf6283eStb 		0x53, 0x37, 0x5f, 0xd6,
119859919d1cStb 	},
119959919d1cStb 	.y = {
1200ecf6283eStb 		0x14, 0xb6, 0x90, 0x86, 0x6a, 0xbd, 0x5b, 0xb8, 0x8b, 0x5f,
1201ecf6283eStb 		0x48, 0x28, 0xc1, 0x49, 0x00, 0x02, 0xe6, 0x77, 0x3f, 0xa2,
1202ecf6283eStb 		0xfa, 0x29, 0x9b, 0x8f,
120359919d1cStb 	},
120459919d1cStb 	.order = {
1205ecf6283eStb 		0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 0xa7, 0xa3,
1206ecf6283eStb 		0x46, 0x2f, 0x9e, 0x9e, 0x91, 0x6b, 0x5b, 0xe8, 0xf1, 0x02,
1207ecf6283eStb 		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 = {
1220ecf6283eStb 		0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 0xa7, 0xa3,
1221ecf6283eStb 		0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, 0x8f, 0xce, 0x47, 0x6d,
1222ecf6283eStb 		0xe1, 0xa8, 0x62, 0x97,
122359919d1cStb 	},
122459919d1cStb 	.a = {
1225ecf6283eStb 		0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 0xa7, 0xa3,
1226ecf6283eStb 		0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, 0x8f, 0xce, 0x47, 0x6d,
1227ecf6283eStb 		0xe1, 0xa8, 0x62, 0x94,
122859919d1cStb 	},
122959919d1cStb 	.b = {
1230ecf6283eStb 		0x13, 0xd5, 0x6f, 0xfa, 0xec, 0x78, 0x68, 0x1e, 0x68, 0xf9,
1231ecf6283eStb 		0xde, 0xb4, 0x3b, 0x35, 0xbe, 0xc2, 0xfb, 0x68, 0x54, 0x2e,
1232ecf6283eStb 		0x27, 0x89, 0x7b, 0x79,
123359919d1cStb 	},
123459919d1cStb 	.x = {
1235ecf6283eStb 		0x3a, 0xe9, 0xe5, 0x8c, 0x82, 0xf6, 0x3c, 0x30, 0x28, 0x2e,
1236ecf6283eStb 		0x1f, 0xe7, 0xbb, 0xf4, 0x3f, 0xa7, 0x2c, 0x44, 0x6a, 0xf6,
1237ecf6283eStb 		0xf4, 0x61, 0x81, 0x29,
123859919d1cStb 	},
123959919d1cStb 	.y = {
1240ecf6283eStb 		0x09, 0x7e, 0x2c, 0x56, 0x67, 0xc2, 0x22, 0x3a, 0x90, 0x2a,
1241ecf6283eStb 		0xb5, 0xca, 0x44, 0x9d, 0x00, 0x84, 0xb7, 0xe5, 0xb3, 0xde,
1242ecf6283eStb 		0x7c, 0xcc, 0x01, 0xc9,
124359919d1cStb 	},
124459919d1cStb 	.order = {
1245ecf6283eStb 		0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 0xa7, 0xa3,
1246ecf6283eStb 		0x46, 0x2f, 0x9e, 0x9e, 0x91, 0x6b, 0x5b, 0xe8, 0xf1, 0x02,
1247ecf6283eStb 		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 = {
1260ecf6283eStb 		0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, 0x2a, 0x18,
1261ecf6283eStb 		0x30, 0x25, 0x75, 0xd1, 0xd7, 0x87, 0xb0, 0x9f, 0x07, 0x57,
1262ecf6283eStb 		0x97, 0xda, 0x89, 0xf5, 0x7e, 0xc8, 0xc0, 0xff,
126359919d1cStb 	},
126459919d1cStb 	.a = {
1265ecf6283eStb 		0x68, 0xa5, 0xe6, 0x2c, 0xa9, 0xce, 0x6c, 0x1c, 0x29, 0x98,
1266ecf6283eStb 		0x03, 0xa6, 0xc1, 0x53, 0x0b, 0x51, 0x4e, 0x18, 0x2a, 0xd8,
1267ecf6283eStb 		0xb0, 0x04, 0x2a, 0x59, 0xca, 0xd2, 0x9f, 0x43,
126859919d1cStb 	},
126959919d1cStb 	.b = {
1270ecf6283eStb 		0x25, 0x80, 0xf6, 0x3c, 0xcf, 0xe4, 0x41, 0x38, 0x87, 0x07,
1271ecf6283eStb 		0x13, 0xb1, 0xa9, 0x23, 0x69, 0xe3, 0x3e, 0x21, 0x35, 0xd2,
1272ecf6283eStb 		0x66, 0xdb, 0xb3, 0x72, 0x38, 0x6c, 0x40, 0x0b,
127359919d1cStb 	},
127459919d1cStb 	.x = {
1275ecf6283eStb 		0x0d, 0x90, 0x29, 0xad, 0x2c, 0x7e, 0x5c, 0xf4, 0x34, 0x08,
1276ecf6283eStb 		0x23, 0xb2, 0xa8, 0x7d, 0xc6, 0x8c, 0x9e, 0x4c, 0xe3, 0x17,
1277ecf6283eStb 		0x4c, 0x1e, 0x6e, 0xfd, 0xee, 0x12, 0xc0, 0x7d,
127859919d1cStb 	},
127959919d1cStb 	.y = {
1280ecf6283eStb 		0x58, 0xaa, 0x56, 0xf7, 0x72, 0xc0, 0x72, 0x6f, 0x24, 0xc6,
1281ecf6283eStb 		0xb8, 0x9e, 0x4e, 0xcd, 0xac, 0x24, 0x35, 0x4b, 0x9e, 0x99,
1282ecf6283eStb 		0xca, 0xa3, 0xf6, 0xd3, 0x76, 0x14, 0x02, 0xcd,
128359919d1cStb 	},
128459919d1cStb 	.order = {
1285ecf6283eStb 		0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, 0x2a, 0x18,
1286ecf6283eStb 		0x30, 0x25, 0x75, 0xd0, 0xfb, 0x98, 0xd1, 0x16, 0xbc, 0x4b,
1287ecf6283eStb 		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 = {
1300ecf6283eStb 		0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, 0x2a, 0x18,
1301ecf6283eStb 		0x30, 0x25, 0x75, 0xd1, 0xd7, 0x87, 0xb0, 0x9f, 0x07, 0x57,
1302ecf6283eStb 		0x97, 0xda, 0x89, 0xf5, 0x7e, 0xc8, 0xc0, 0xff,
130359919d1cStb 	},
130459919d1cStb 	.a = {
1305ecf6283eStb 		0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, 0x2a, 0x18,
1306ecf6283eStb 		0x30, 0x25, 0x75, 0xd1, 0xd7, 0x87, 0xb0, 0x9f, 0x07, 0x57,
1307ecf6283eStb 		0x97, 0xda, 0x89, 0xf5, 0x7e, 0xc8, 0xc0, 0xfc,
130859919d1cStb 	},
130959919d1cStb 	.b = {
1310ecf6283eStb 		0x4b, 0x33, 0x7d, 0x93, 0x41, 0x04, 0xcd, 0x7b, 0xef, 0x27,
1311ecf6283eStb 		0x1b, 0xf6, 0x0c, 0xed, 0x1e, 0xd2, 0x0d, 0xa1, 0x4c, 0x08,
1312ecf6283eStb 		0xb3, 0xbb, 0x64, 0xf1, 0x8a, 0x60, 0x88, 0x8d,
131359919d1cStb 	},
131459919d1cStb 	.x = {
1315ecf6283eStb 		0x6a, 0xb1, 0xe3, 0x44, 0xce, 0x25, 0xff, 0x38, 0x96, 0x42,
1316ecf6283eStb 		0x4e, 0x7f, 0xfe, 0x14, 0x76, 0x2e, 0xcb, 0x49, 0xf8, 0x92,
1317ecf6283eStb 		0x8a, 0xc0, 0xc7, 0x60, 0x29, 0xb4, 0xd5, 0x80,
131859919d1cStb 	},
131959919d1cStb 	.y = {
1320ecf6283eStb 		0x03, 0x74, 0xe9, 0xf5, 0x14, 0x3e, 0x56, 0x8c, 0xd2, 0x3f,
1321ecf6283eStb 		0x3f, 0x4d, 0x7c, 0x0d, 0x4b, 0x1e, 0x41, 0xc8, 0xcc, 0x0d,
1322ecf6283eStb 		0x1c, 0x6a, 0xbd, 0x5f, 0x1a, 0x46, 0xdb, 0x4c,
132359919d1cStb 	},
132459919d1cStb 	.order = {
1325ecf6283eStb 		0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, 0x2a, 0x18,
1326ecf6283eStb 		0x30, 0x25, 0x75, 0xd0, 0xfb, 0x98, 0xd1, 0x16, 0xbc, 0x4b,
1327ecf6283eStb 		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 = {
1340ecf6283eStb 		0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, 0x3e, 0x66,
1341ecf6283eStb 		0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x72, 0x6e, 0x3b, 0xf6, 0x23,
1342ecf6283eStb 		0xd5, 0x26, 0x20, 0x28, 0x20, 0x13, 0x48, 0x1d, 0x1f, 0x6e,
13439caf19c3Smiod 		0x53, 0x77,
134459919d1cStb 	},
134559919d1cStb 	.a = {
1346ecf6283eStb 		0x7d, 0x5a, 0x09, 0x75, 0xfc, 0x2c, 0x30, 0x57, 0xee, 0xf6,
1347ecf6283eStb 		0x75, 0x30, 0x41, 0x7a, 0xff, 0xe7, 0xfb, 0x80, 0x55, 0xc1,
1348ecf6283eStb 		0x26, 0xdc, 0x5c, 0x6c, 0xe9, 0x4a, 0x4b, 0x44, 0xf3, 0x30,
1349ecf6283eStb 		0xb5, 0xd9,
135059919d1cStb 	},
135159919d1cStb 	.b = {
1352ecf6283eStb 		0x26, 0xdc, 0x5c, 0x6c, 0xe9, 0x4a, 0x4b, 0x44, 0xf3, 0x30,
1353ecf6283eStb 		0xb5, 0xd9, 0xbb, 0xd7, 0x7c, 0xbf, 0x95, 0x84, 0x16, 0x29,
1354ecf6283eStb 		0x5c, 0xf7, 0xe1, 0xce, 0x6b, 0xcc, 0xdc, 0x18, 0xff, 0x8c,
1355ecf6283eStb 		0x07, 0xb6,
135659919d1cStb 	},
135759919d1cStb 	.x = {
1358ecf6283eStb 		0x8b, 0xd2, 0xae, 0xb9, 0xcb, 0x7e, 0x57, 0xcb, 0x2c, 0x4b,
1359ecf6283eStb 		0x48, 0x2f, 0xfc, 0x81, 0xb7, 0xaf, 0xb9, 0xde, 0x27, 0xe1,
1360ecf6283eStb 		0xe3, 0xbd, 0x23, 0xc2, 0x3a, 0x44, 0x53, 0xbd, 0x9a, 0xce,
13619caf19c3Smiod 		0x32, 0x62,
136259919d1cStb 	},
136359919d1cStb 	.y = {
1364ecf6283eStb 		0x54, 0x7e, 0xf8, 0x35, 0xc3, 0xda, 0xc4, 0xfd, 0x97, 0xf8,
1365ecf6283eStb 		0x46, 0x1a, 0x14, 0x61, 0x1d, 0xc9, 0xc2, 0x77, 0x45, 0x13,
1366ecf6283eStb 		0x2d, 0xed, 0x8e, 0x54, 0x5c, 0x1d, 0x54, 0xc7, 0x2f, 0x04,
13679caf19c3Smiod 		0x69, 0x97,
136859919d1cStb 	},
136959919d1cStb 	.order = {
1370ecf6283eStb 		0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, 0x3e, 0x66,
1371ecf6283eStb 		0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x71, 0x8c, 0x39, 0x7a, 0xa3,
1372ecf6283eStb 		0xb5, 0x61, 0xa6, 0xf7, 0x90, 0x1e, 0x0e, 0x82, 0x97, 0x48,
1373ecf6283eStb 		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 = {
1386ecf6283eStb 		0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, 0x3e, 0x66,
1387ecf6283eStb 		0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x72, 0x6e, 0x3b, 0xf6, 0x23,
1388ecf6283eStb 		0xd5, 0x26, 0x20, 0x28, 0x20, 0x13, 0x48, 0x1d, 0x1f, 0x6e,
13899caf19c3Smiod 		0x53, 0x77,
139059919d1cStb 	},
139159919d1cStb 	.a = {
1392ecf6283eStb 		0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, 0x3e, 0x66,
1393ecf6283eStb 		0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x72, 0x6e, 0x3b, 0xf6, 0x23,
1394ecf6283eStb 		0xd5, 0x26, 0x20, 0x28, 0x20, 0x13, 0x48, 0x1d, 0x1f, 0x6e,
13959caf19c3Smiod 		0x53, 0x74,
139659919d1cStb 	},
139759919d1cStb 	.b = {
1398ecf6283eStb 		0x66, 0x2c, 0x61, 0xc4, 0x30, 0xd8, 0x4e, 0xa4, 0xfe, 0x66,
1399ecf6283eStb 		0xa7, 0x73, 0x3d, 0x0b, 0x76, 0xb7, 0xbf, 0x93, 0xeb, 0xc4,
1400ecf6283eStb 		0xaf, 0x2f, 0x49, 0x25, 0x6a, 0xe5, 0x81, 0x01, 0xfe, 0xe9,
1401ecf6283eStb 		0x2b, 0x04,
140259919d1cStb 	},
140359919d1cStb 	.x = {
1404ecf6283eStb 		0xa3, 0xe8, 0xeb, 0x3c, 0xc1, 0xcf, 0xe7, 0xb7, 0x73, 0x22,
1405ecf6283eStb 		0x13, 0xb2, 0x3a, 0x65, 0x61, 0x49, 0xaf, 0xa1, 0x42, 0xc4,
1406ecf6283eStb 		0x7a, 0xaf, 0xbc, 0x2b, 0x79, 0xa1, 0x91, 0x56, 0x2e, 0x13,
1407ecf6283eStb 		0x05, 0xf4,
140859919d1cStb 	},
140959919d1cStb 	.y = {
1410ecf6283eStb 		0x2d, 0x99, 0x6c, 0x82, 0x34, 0x39, 0xc5, 0x6d, 0x7f, 0x7b,
1411ecf6283eStb 		0x22, 0xe1, 0x46, 0x44, 0x41, 0x7e, 0x69, 0xbc, 0xb6, 0xde,
1412ecf6283eStb 		0x39, 0xd0, 0x27, 0x00, 0x1d, 0xab, 0xe8, 0xf3, 0x5b, 0x25,
1413ecf6283eStb 		0xc9, 0xbe,
141459919d1cStb 	},
141559919d1cStb 	.order = {
1416ecf6283eStb 		0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, 0x3e, 0x66,
1417ecf6283eStb 		0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x71, 0x8c, 0x39, 0x7a, 0xa3,
1418ecf6283eStb 		0xb5, 0x61, 0xa6, 0xf7, 0x90, 0x1e, 0x0e, 0x82, 0x97, 0x48,
1419ecf6283eStb 		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 = {
1432ecf6283eStb 		0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, 0xe1, 0x3c,
1433ecf6283eStb 		0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, 0xf9, 0x8f, 0xcf, 0xa6,
1434ecf6283eStb 		0xf6, 0xf4, 0x0d, 0xef, 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93,
1435ecf6283eStb 		0xec, 0x28, 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x27,
143659919d1cStb 	},
143759919d1cStb 	.a = {
1438ecf6283eStb 		0x3e, 0xe3, 0x0b, 0x56, 0x8f, 0xba, 0xb0, 0xf8, 0x83, 0xcc,
1439ecf6283eStb 		0xeb, 0xd4, 0x6d, 0x3f, 0x3b, 0xb8, 0xa2, 0xa7, 0x35, 0x13,
1440ecf6283eStb 		0xf5, 0xeb, 0x79, 0xda, 0x66, 0x19, 0x0e, 0xb0, 0x85, 0xff,
1441ecf6283eStb 		0xa9, 0xf4, 0x92, 0xf3, 0x75, 0xa9, 0x7d, 0x86, 0x0e, 0xb4,
144259919d1cStb 	},
144359919d1cStb 	.b = {
1444ecf6283eStb 		0x52, 0x08, 0x83, 0x94, 0x9d, 0xfd, 0xbc, 0x42, 0xd3, 0xad,
1445ecf6283eStb 		0x19, 0x86, 0x40, 0x68, 0x8a, 0x6f, 0xe1, 0x3f, 0x41, 0x34,
1446ecf6283eStb 		0x95, 0x54, 0xb4, 0x9a, 0xcc, 0x31, 0xdc, 0xcd, 0x88, 0x45,
1447ecf6283eStb 		0x39, 0x81, 0x6f, 0x5e, 0xb4, 0xac, 0x8f, 0xb1, 0xf1, 0xa6,
144859919d1cStb 	},
144959919d1cStb 	.x = {
1450ecf6283eStb 		0x43, 0xbd, 0x7e, 0x9a, 0xfb, 0x53, 0xd8, 0xb8, 0x52, 0x89,
1451ecf6283eStb 		0xbc, 0xc4, 0x8e, 0xe5, 0xbf, 0xe6, 0xf2, 0x01, 0x37, 0xd1,
1452ecf6283eStb 		0x0a, 0x08, 0x7e, 0xb6, 0xe7, 0x87, 0x1e, 0x2a, 0x10, 0xa5,
1453ecf6283eStb 		0x99, 0xc7, 0x10, 0xaf, 0x8d, 0x0d, 0x39, 0xe2, 0x06, 0x11,
145459919d1cStb 	},
145559919d1cStb 	.y = {
1456ecf6283eStb 		0x14, 0xfd, 0xd0, 0x55, 0x45, 0xec, 0x1c, 0xc8, 0xab, 0x40,
1457ecf6283eStb 		0x93, 0x24, 0x7f, 0x77, 0x27, 0x5e, 0x07, 0x43, 0xff, 0xed,
1458ecf6283eStb 		0x11, 0x71, 0x82, 0xea, 0xa9, 0xc7, 0x78, 0x77, 0xaa, 0xac,
1459ecf6283eStb 		0x6a, 0xc7, 0xd3, 0x52, 0x45, 0xd1, 0x69, 0x2e, 0x8e, 0xe1,
146059919d1cStb 	},
146159919d1cStb 	.order = {
1462ecf6283eStb 		0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, 0xe1, 0x3c,
1463ecf6283eStb 		0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, 0xf9, 0x8f, 0xcf, 0xa5,
1464ecf6283eStb 		0xb6, 0x8f, 0x12, 0xa3, 0x2d, 0x48, 0x2e, 0xc7, 0xee, 0x86,
1465ecf6283eStb 		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 = {
1478ecf6283eStb 		0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, 0xe1, 0x3c,
1479ecf6283eStb 		0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, 0xf9, 0x8f, 0xcf, 0xa6,
1480ecf6283eStb 		0xf6, 0xf4, 0x0d, 0xef, 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93,
1481ecf6283eStb 		0xec, 0x28, 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x27,
148259919d1cStb 	},
148359919d1cStb 	.a = {
1484ecf6283eStb 		0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, 0xe1, 0x3c,
1485ecf6283eStb 		0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, 0xf9, 0x8f, 0xcf, 0xa6,
1486ecf6283eStb 		0xf6, 0xf4, 0x0d, 0xef, 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93,
1487ecf6283eStb 		0xec, 0x28, 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x24,
148859919d1cStb 	},
148959919d1cStb 	.b = {
1490ecf6283eStb 		0xa7, 0xf5, 0x61, 0xe0, 0x38, 0xeb, 0x1e, 0xd5, 0x60, 0xb3,
1491ecf6283eStb 		0xd1, 0x47, 0xdb, 0x78, 0x20, 0x13, 0x06, 0x4c, 0x19, 0xf2,
1492ecf6283eStb 		0x7e, 0xd2, 0x7c, 0x67, 0x80, 0xaa, 0xf7, 0x7f, 0xb8, 0xa5,
1493ecf6283eStb 		0x47, 0xce, 0xb5, 0xb4, 0xfe, 0xf4, 0x22, 0x34, 0x03, 0x53,
149459919d1cStb 	},
149559919d1cStb 	.x = {
1496ecf6283eStb 		0x92, 0x5b, 0xe9, 0xfb, 0x01, 0xaf, 0xc6, 0xfb, 0x4d, 0x3e,
1497ecf6283eStb 		0x7d, 0x49, 0x90, 0x01, 0x0f, 0x81, 0x34, 0x08, 0xab, 0x10,
1498ecf6283eStb 		0x6c, 0x4f, 0x09, 0xcb, 0x7e, 0xe0, 0x78, 0x68, 0xcc, 0x13,
1499ecf6283eStb 		0x6f, 0xff, 0x33, 0x57, 0xf6, 0x24, 0xa2, 0x1b, 0xed, 0x52,
150059919d1cStb 	},
150159919d1cStb 	.y = {
1502ecf6283eStb 		0x63, 0xba, 0x3a, 0x7a, 0x27, 0x48, 0x3e, 0xbf, 0x66, 0x71,
1503ecf6283eStb 		0xdb, 0xef, 0x7a, 0xbb, 0x30, 0xeb, 0xee, 0x08, 0x4e, 0x58,
1504ecf6283eStb 		0xa0, 0xb0, 0x77, 0xad, 0x42, 0xa5, 0xa0, 0x98, 0x9d, 0x1e,
1505ecf6283eStb 		0xe7, 0x1b, 0x1b, 0x9b, 0xc0, 0x45, 0x5f, 0xb0, 0xd2, 0xc3,
150659919d1cStb 	},
150759919d1cStb 	.order = {
1508ecf6283eStb 		0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, 0xe1, 0x3c,
1509ecf6283eStb 		0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, 0xf9, 0x8f, 0xcf, 0xa5,
1510ecf6283eStb 		0xb6, 0x8f, 0x12, 0xa3, 0x2d, 0x48, 0x2e, 0xc7, 0xee, 0x86,
1511ecf6283eStb 		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 = {
1524ecf6283eStb 		0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 0x0f, 0x5d,
1525ecf6283eStb 		0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 0x15, 0x2f, 0x71, 0x09,
1526ecf6283eStb 		0xed, 0x54, 0x56, 0xb4, 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7,
1527ecf6283eStb 		0x11, 0x23, 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71,
1528ecf6283eStb 		0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53,
152959919d1cStb 	},
153059919d1cStb 	.a = {
1531ecf6283eStb 		0x7b, 0xc3, 0x82, 0xc6, 0x3d, 0x8c, 0x15, 0x0c, 0x3c, 0x72,
1532ecf6283eStb 		0x08, 0x0a, 0xce, 0x05, 0xaf, 0xa0, 0xc2, 0xbe, 0xa2, 0x8e,
1533ecf6283eStb 		0x4f, 0xb2, 0x27, 0x87, 0x13, 0x91, 0x65, 0xef, 0xba, 0x91,
1534ecf6283eStb 		0xf9, 0x0f, 0x8a, 0xa5, 0x81, 0x4a, 0x50, 0x3a, 0xd4, 0xeb,
1535ecf6283eStb 		0x04, 0xa8, 0xc7, 0xdd, 0x22, 0xce, 0x28, 0x26,
153659919d1cStb 	},
153759919d1cStb 	.b = {
1538ecf6283eStb 		0x04, 0xa8, 0xc7, 0xdd, 0x22, 0xce, 0x28, 0x26, 0x8b, 0x39,
1539ecf6283eStb 		0xb5, 0x54, 0x16, 0xf0, 0x44, 0x7c, 0x2f, 0xb7, 0x7d, 0xe1,
1540ecf6283eStb 		0x07, 0xdc, 0xd2, 0xa6, 0x2e, 0x88, 0x0e, 0xa5, 0x3e, 0xeb,
1541ecf6283eStb 		0x62, 0xd5, 0x7c, 0xb4, 0x39, 0x02, 0x95, 0xdb, 0xc9, 0x94,
1542ecf6283eStb 		0x3a, 0xb7, 0x86, 0x96, 0xfa, 0x50, 0x4c, 0x11,
154359919d1cStb 	},
154459919d1cStb 	.x = {
1545ecf6283eStb 		0x1d, 0x1c, 0x64, 0xf0, 0x68, 0xcf, 0x45, 0xff, 0xa2, 0xa6,
1546ecf6283eStb 		0x3a, 0x81, 0xb7, 0xc1, 0x3f, 0x6b, 0x88, 0x47, 0xa3, 0xe7,
1547ecf6283eStb 		0x7e, 0xf1, 0x4f, 0xe3, 0xdb, 0x7f, 0xca, 0xfe, 0x0c, 0xbd,
1548ecf6283eStb 		0x10, 0xe8, 0xe8, 0x26, 0xe0, 0x34, 0x36, 0xd6, 0x46, 0xaa,
1549ecf6283eStb 		0xef, 0x87, 0xb2, 0xe2, 0x47, 0xd4, 0xaf, 0x1e,
155059919d1cStb 	},
155159919d1cStb 	.y = {
1552ecf6283eStb 		0x8a, 0xbe, 0x1d, 0x75, 0x20, 0xf9, 0xc2, 0xa4, 0x5c, 0xb1,
1553ecf6283eStb 		0xeb, 0x8e, 0x95, 0xcf, 0xd5, 0x52, 0x62, 0xb7, 0x0b, 0x29,
1554ecf6283eStb 		0xfe, 0xec, 0x58, 0x64, 0xe1, 0x9c, 0x05, 0x4f, 0xf9, 0x91,
1555ecf6283eStb 		0x29, 0x28, 0x0e, 0x46, 0x46, 0x21, 0x77, 0x91, 0x81, 0x11,
1556ecf6283eStb 		0x42, 0x82, 0x03, 0x41, 0x26, 0x3c, 0x53, 0x15,
155759919d1cStb 	},
155859919d1cStb 	.order = {
1559ecf6283eStb 		0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 0x0f, 0x5d,
1560ecf6283eStb 		0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 0x15, 0x2f, 0x71, 0x09,
1561ecf6283eStb 		0xed, 0x54, 0x56, 0xb3, 0x1f, 0x16, 0x6e, 0x6c, 0xac, 0x04,
1562ecf6283eStb 		0x25, 0xa7, 0xcf, 0x3a, 0xb6, 0xaf, 0x6b, 0x7f, 0xc3, 0x10,
1563ecf6283eStb 		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 = {
1576ecf6283eStb 		0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 0x0f, 0x5d,
1577ecf6283eStb 		0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 0x15, 0x2f, 0x71, 0x09,
1578ecf6283eStb 		0xed, 0x54, 0x56, 0xb4, 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7,
1579ecf6283eStb 		0x11, 0x23, 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71,
1580ecf6283eStb 		0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53,
158159919d1cStb 	},
158259919d1cStb 	.a = {
1583ecf6283eStb 		0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 0x0f, 0x5d,
1584ecf6283eStb 		0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 0x15, 0x2f, 0x71, 0x09,
1585ecf6283eStb 		0xed, 0x54, 0x56, 0xb4, 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7,
1586ecf6283eStb 		0x11, 0x23, 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71,
1587ecf6283eStb 		0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x50,
158859919d1cStb 	},
158959919d1cStb 	.b = {
1590ecf6283eStb 		0x7f, 0x51, 0x9e, 0xad, 0xa7, 0xbd, 0xa8, 0x1b, 0xd8, 0x26,
1591ecf6283eStb 		0xdb, 0xa6, 0x47, 0x91, 0x0f, 0x8c, 0x4b, 0x93, 0x46, 0xed,
1592ecf6283eStb 		0x8c, 0xcd, 0xc6, 0x4e, 0x4b, 0x1a, 0xbd, 0x11, 0x75, 0x6d,
1593ecf6283eStb 		0xce, 0x1d, 0x20, 0x74, 0xaa, 0x26, 0x3b, 0x88, 0x80, 0x5c,
1594ecf6283eStb 		0xed, 0x70, 0x35, 0x5a, 0x33, 0xb4, 0x71, 0xee,
159559919d1cStb 	},
159659919d1cStb 	.x = {
1597ecf6283eStb 		0x18, 0xde, 0x98, 0xb0, 0x2d, 0xb9, 0xa3, 0x06, 0xf2, 0xaf,
1598ecf6283eStb 		0xcd, 0x72, 0x35, 0xf7, 0x2a, 0x81, 0x9b, 0x80, 0xab, 0x12,
1599ecf6283eStb 		0xeb, 0xd6, 0x53, 0x17, 0x24, 0x76, 0xfe, 0xcd, 0x46, 0x2a,
1600ecf6283eStb 		0xab, 0xff, 0xc4, 0xff, 0x19, 0x1b, 0x94, 0x6a, 0x5f, 0x54,
1601ecf6283eStb 		0xd8, 0xd0, 0xaa, 0x2f, 0x41, 0x88, 0x08, 0xcc,
160259919d1cStb 	},
160359919d1cStb 	.y = {
1604ecf6283eStb 		0x25, 0xab, 0x05, 0x69, 0x62, 0xd3, 0x06, 0x51, 0xa1, 0x14,
1605ecf6283eStb 		0xaf, 0xd2, 0x75, 0x5a, 0xd3, 0x36, 0x74, 0x7f, 0x93, 0x47,
1606ecf6283eStb 		0x5b, 0x7a, 0x1f, 0xca, 0x3b, 0x88, 0xf2, 0xb6, 0xa2, 0x08,
1607ecf6283eStb 		0xcc, 0xfe, 0x46, 0x94, 0x08, 0x58, 0x4d, 0xc2, 0xb2, 0x91,
1608ecf6283eStb 		0x26, 0x75, 0xbf, 0x5b, 0x9e, 0x58, 0x29, 0x28,
160959919d1cStb 	},
161059919d1cStb 	.order = {
1611ecf6283eStb 		0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 0x0f, 0x5d,
1612ecf6283eStb 		0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 0x15, 0x2f, 0x71, 0x09,
1613ecf6283eStb 		0xed, 0x54, 0x56, 0xb3, 0x1f, 0x16, 0x6e, 0x6c, 0xac, 0x04,
1614ecf6283eStb 		0x25, 0xa7, 0xcf, 0x3a, 0xb6, 0xaf, 0x6b, 0x7f, 0xc3, 0x10,
1615ecf6283eStb 		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 = {
1628ecf6283eStb 		0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, 0x3f, 0xd4,
1629ecf6283eStb 		0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, 0xcb, 0x30, 0x8d, 0xb3,
1630ecf6283eStb 		0xb3, 0xc9, 0xd2, 0x0e, 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33,
1631ecf6283eStb 		0x08, 0x71, 0x7d, 0x4d, 0x9b, 0x00, 0x9b, 0xc6, 0x68, 0x42,
1632ecf6283eStb 		0xae, 0xcd, 0xa1, 0x2a, 0xe6, 0xa3, 0x80, 0xe6, 0x28, 0x81,
1633ecf6283eStb 		0xff, 0x2f, 0x2d, 0x82, 0xc6, 0x85, 0x28, 0xaa, 0x60, 0x56,
1634ecf6283eStb 		0x58, 0x3a, 0x48, 0xf3,
163559919d1cStb 	},
163659919d1cStb 	.a = {
1637ecf6283eStb 		0x78, 0x30, 0xa3, 0x31, 0x8b, 0x60, 0x3b, 0x89, 0xe2, 0x32,
1638ecf6283eStb 		0x71, 0x45, 0xac, 0x23, 0x4c, 0xc5, 0x94, 0xcb, 0xdd, 0x8d,
1639ecf6283eStb 		0x3d, 0xf9, 0x16, 0x10, 0xa8, 0x34, 0x41, 0xca, 0xea, 0x98,
1640ecf6283eStb 		0x63, 0xbc, 0x2d, 0xed, 0x5d, 0x5a, 0xa8, 0x25, 0x3a, 0xa1,
1641ecf6283eStb 		0x0a, 0x2e, 0xf1, 0xc9, 0x8b, 0x9a, 0xc8, 0xb5, 0x7f, 0x11,
1642ecf6283eStb 		0x17, 0xa7, 0x2b, 0xf2, 0xc7, 0xb9, 0xe7, 0xc1, 0xac, 0x4d,
1643ecf6283eStb 		0x77, 0xfc, 0x94, 0xca,
164459919d1cStb 	},
164559919d1cStb 	.b = {
1646ecf6283eStb 		0x3d, 0xf9, 0x16, 0x10, 0xa8, 0x34, 0x41, 0xca, 0xea, 0x98,
1647ecf6283eStb 		0x63, 0xbc, 0x2d, 0xed, 0x5d, 0x5a, 0xa8, 0x25, 0x3a, 0xa1,
1648ecf6283eStb 		0x0a, 0x2e, 0xf1, 0xc9, 0x8b, 0x9a, 0xc8, 0xb5, 0x7f, 0x11,
1649ecf6283eStb 		0x17, 0xa7, 0x2b, 0xf2, 0xc7, 0xb9, 0xe7, 0xc1, 0xac, 0x4d,
1650ecf6283eStb 		0x77, 0xfc, 0x94, 0xca, 0xdc, 0x08, 0x3e, 0x67, 0x98, 0x40,
1651ecf6283eStb 		0x50, 0xb7, 0x5e, 0xba, 0xe5, 0xdd, 0x28, 0x09, 0xbd, 0x63,
1652ecf6283eStb 		0x80, 0x16, 0xf7, 0x23,
165359919d1cStb 	},
165459919d1cStb 	.x = {
1655ecf6283eStb 		0x81, 0xae, 0xe4, 0xbd, 0xd8, 0x2e, 0xd9, 0x64, 0x5a, 0x21,
1656ecf6283eStb 		0x32, 0x2e, 0x9c, 0x4c, 0x6a, 0x93, 0x85, 0xed, 0x9f, 0x70,
1657ecf6283eStb 		0xb5, 0xd9, 0x16, 0xc1, 0xb4, 0x3b, 0x62, 0xee, 0xf4, 0xd0,
1658ecf6283eStb 		0x09, 0x8e, 0xff, 0x3b, 0x1f, 0x78, 0xe2, 0xd0, 0xd4, 0x8d,
1659ecf6283eStb 		0x50, 0xd1, 0x68, 0x7b, 0x93, 0xb9, 0x7d, 0x5f, 0x7c, 0x6d,
1660ecf6283eStb 		0x50, 0x47, 0x40, 0x6a, 0x5e, 0x68, 0x8b, 0x35, 0x22, 0x09,
1661ecf6283eStb 		0xbc, 0xb9, 0xf8, 0x22,
166259919d1cStb 	},
166359919d1cStb 	.y = {
1664ecf6283eStb 		0x7d, 0xde, 0x38, 0x5d, 0x56, 0x63, 0x32, 0xec, 0xc0, 0xea,
1665ecf6283eStb 		0xbf, 0xa9, 0xcf, 0x78, 0x22, 0xfd, 0xf2, 0x09, 0xf7, 0x00,
1666ecf6283eStb 		0x24, 0xa5, 0x7b, 0x1a, 0xa0, 0x00, 0xc5, 0x5b, 0x88, 0x1f,
1667ecf6283eStb 		0x81, 0x11, 0xb2, 0xdc, 0xde, 0x49, 0x4a, 0x5f, 0x48, 0x5e,
1668ecf6283eStb 		0x5b, 0xca, 0x4b, 0xd8, 0x8a, 0x27, 0x63, 0xae, 0xd1, 0xca,
1669ecf6283eStb 		0x2b, 0x2f, 0xa8, 0xf0, 0x54, 0x06, 0x78, 0xcd, 0x1e, 0x0f,
1670ecf6283eStb 		0x3a, 0xd8, 0x08, 0x92,
167159919d1cStb 	},
167259919d1cStb 	.order = {
1673ecf6283eStb 		0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, 0x3f, 0xd4,
1674ecf6283eStb 		0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, 0xcb, 0x30, 0x8d, 0xb3,
1675ecf6283eStb 		0xb3, 0xc9, 0xd2, 0x0e, 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33,
1676ecf6283eStb 		0x08, 0x70, 0x55, 0x3e, 0x5c, 0x41, 0x4c, 0xa9, 0x26, 0x19,
1677ecf6283eStb 		0x41, 0x86, 0x61, 0x19, 0x7f, 0xac, 0x10, 0x47, 0x1d, 0xb1,
1678ecf6283eStb 		0xd3, 0x81, 0x08, 0x5d, 0xda, 0xdd, 0xb5, 0x87, 0x96, 0x82,
1679ecf6283eStb 		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 = {
1692ecf6283eStb 		0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, 0x3f, 0xd4,
1693ecf6283eStb 		0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, 0xcb, 0x30, 0x8d, 0xb3,
1694ecf6283eStb 		0xb3, 0xc9, 0xd2, 0x0e, 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33,
1695ecf6283eStb 		0x08, 0x71, 0x7d, 0x4d, 0x9b, 0x00, 0x9b, 0xc6, 0x68, 0x42,
1696ecf6283eStb 		0xae, 0xcd, 0xa1, 0x2a, 0xe6, 0xa3, 0x80, 0xe6, 0x28, 0x81,
1697ecf6283eStb 		0xff, 0x2f, 0x2d, 0x82, 0xc6, 0x85, 0x28, 0xaa, 0x60, 0x56,
1698ecf6283eStb 		0x58, 0x3a, 0x48, 0xf3,
169959919d1cStb 	},
170059919d1cStb 	.a = {
1701ecf6283eStb 		0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, 0x3f, 0xd4,
1702ecf6283eStb 		0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, 0xcb, 0x30, 0x8d, 0xb3,
1703ecf6283eStb 		0xb3, 0xc9, 0xd2, 0x0e, 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33,
1704ecf6283eStb 		0x08, 0x71, 0x7d, 0x4d, 0x9b, 0x00, 0x9b, 0xc6, 0x68, 0x42,
1705ecf6283eStb 		0xae, 0xcd, 0xa1, 0x2a, 0xe6, 0xa3, 0x80, 0xe6, 0x28, 0x81,
1706ecf6283eStb 		0xff, 0x2f, 0x2d, 0x82, 0xc6, 0x85, 0x28, 0xaa, 0x60, 0x56,
1707ecf6283eStb 		0x58, 0x3a, 0x48, 0xf0,
170859919d1cStb 	},
170959919d1cStb 	.b = {
1710ecf6283eStb 		0x7c, 0xbb, 0xbc, 0xf9, 0x44, 0x1c, 0xfa, 0xb7, 0x6e, 0x18,
1711ecf6283eStb 		0x90, 0xe4, 0x68, 0x84, 0xea, 0xe3, 0x21, 0xf7, 0x0c, 0x0b,
1712ecf6283eStb 		0xcb, 0x49, 0x81, 0x52, 0x78, 0x97, 0x50, 0x4b, 0xec, 0x3e,
1713ecf6283eStb 		0x36, 0xa6, 0x2b, 0xcd, 0xfa, 0x23, 0x04, 0x97, 0x65, 0x40,
1714ecf6283eStb 		0xf6, 0x45, 0x00, 0x85, 0xf2, 0xda, 0xe1, 0x45, 0xc2, 0x25,
1715ecf6283eStb 		0x53, 0xb4, 0x65, 0x76, 0x36, 0x89, 0x18, 0x0e, 0xa2, 0x57,
1716ecf6283eStb 		0x18, 0x67, 0x42, 0x3e,
171759919d1cStb 	},
171859919d1cStb 	.x = {
1719ecf6283eStb 		0x64, 0x0e, 0xce, 0x5c, 0x12, 0x78, 0x87, 0x17, 0xb9, 0xc1,
1720ecf6283eStb 		0xba, 0x06, 0xcb, 0xc2, 0xa6, 0xfe, 0xba, 0x85, 0x84, 0x24,
1721ecf6283eStb 		0x58, 0xc5, 0x6d, 0xde, 0x9d, 0xb1, 0x75, 0x8d, 0x39, 0xc0,
1722ecf6283eStb 		0x31, 0x3d, 0x82, 0xba, 0x51, 0x73, 0x5c, 0xdb, 0x3e, 0xa4,
1723ecf6283eStb 		0x99, 0xaa, 0x77, 0xa7, 0xd6, 0x94, 0x3a, 0x64, 0xf7, 0xa3,
1724ecf6283eStb 		0xf2, 0x5f, 0xe2, 0x6f, 0x06, 0xb5, 0x1b, 0xaa, 0x26, 0x96,
1725ecf6283eStb 		0xfa, 0x90, 0x35, 0xda,
172659919d1cStb 	},
172759919d1cStb 	.y = {
1728ecf6283eStb 		0x5b, 0x53, 0x4b, 0xd5, 0x95, 0xf5, 0xaf, 0x0f, 0xa2, 0xc8,
1729ecf6283eStb 		0x92, 0x37, 0x6c, 0x84, 0xac, 0xe1, 0xbb, 0x4e, 0x30, 0x19,
1730ecf6283eStb 		0xb7, 0x16, 0x34, 0xc0, 0x11, 0x31, 0x15, 0x9c, 0xae, 0x03,
1731ecf6283eStb 		0xce, 0xe9, 0xd9, 0x93, 0x21, 0x84, 0xbe, 0xef, 0x21, 0x6b,
1732ecf6283eStb 		0xd7, 0x1d, 0xf2, 0xda, 0xdf, 0x86, 0xa6, 0x27, 0x30, 0x6e,
1733ecf6283eStb 		0xcf, 0xf9, 0x6d, 0xbb, 0x8b, 0xac, 0xe1, 0x98, 0xb6, 0x1e,
1734ecf6283eStb 		0x00, 0xf8, 0xb3, 0x32,
173559919d1cStb 	},
173659919d1cStb 	.order = {
1737ecf6283eStb 		0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, 0x3f, 0xd4,
1738ecf6283eStb 		0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, 0xcb, 0x30, 0x8d, 0xb3,
1739ecf6283eStb 		0xb3, 0xc9, 0xd2, 0x0e, 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33,
1740ecf6283eStb 		0x08, 0x70, 0x55, 0x3e, 0x5c, 0x41, 0x4c, 0xa9, 0x26, 0x19,
1741ecf6283eStb 		0x41, 0x86, 0x61, 0x19, 0x7f, 0xac, 0x10, 0x47, 0x1d, 0xb1,
1742ecf6283eStb 		0xd3, 0x81, 0x08, 0x5d, 0xda, 0xdd, 0xb5, 0x87, 0x96, 0x82,
1743ecf6283eStb 		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 = {
1756ecf6283eStb 		0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f, 0x10, 0x12,
1757ecf6283eStb 		0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b, 0x39, 0x61, 0xad, 0xbc,
1758ecf6283eStb 		0xab, 0xc8, 0xca, 0x6d, 0xe8, 0xfc, 0xf3, 0x53, 0xd8, 0x6e,
1759ecf6283eStb 		0x9c, 0x03,
176059919d1cStb 	},
176159919d1cStb 	.a = {
1762ecf6283eStb 		0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f, 0x10, 0x12,
1763ecf6283eStb 		0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b, 0x39, 0x61, 0xad, 0xbc,
1764ecf6283eStb 		0xab, 0xc8, 0xca, 0x6d, 0xe8, 0xfc, 0xf3, 0x53, 0xd8, 0x6e,
1765ecf6283eStb 		0x9c, 0x00,
176659919d1cStb 	},
176759919d1cStb 	.b = {
1768ecf6283eStb 		0xee, 0x35, 0x3f, 0xca, 0x54, 0x28, 0xa9, 0x30, 0x0d, 0x4a,
1769ecf6283eStb 		0xba, 0x75, 0x4a, 0x44, 0xc0, 0x0f, 0xdf, 0xec, 0x0c, 0x9a,
1770ecf6283eStb 		0xe4, 0xb1, 0xa1, 0x80, 0x30, 0x75, 0xed, 0x96, 0x7b, 0x7b,
1771ecf6283eStb 		0xb7, 0x3f,
177259919d1cStb 	},
177359919d1cStb 	.x = {
1774ecf6283eStb 		0xb6, 0xb3, 0xd4, 0xc3, 0x56, 0xc1, 0x39, 0xeb, 0x31, 0x18,
1775ecf6283eStb 		0x3d, 0x47, 0x49, 0xd4, 0x23, 0x95, 0x8c, 0x27, 0xd2, 0xdc,
1776ecf6283eStb 		0xaf, 0x98, 0xb7, 0x01, 0x64, 0xc9, 0x7a, 0x2d, 0xd9, 0x8f,
1777ecf6283eStb 		0x5c, 0xff,
177859919d1cStb 	},
177959919d1cStb 	.y = {
1780ecf6283eStb 		0x61, 0x42, 0xe0, 0xf7, 0xc8, 0xb2, 0x04, 0x91, 0x1f, 0x92,
1781ecf6283eStb 		0x71, 0xf0, 0xf3, 0xec, 0xef, 0x8c, 0x27, 0x01, 0xc3, 0x07,
1782ecf6283eStb 		0xe8, 0xe4, 0xc9, 0xe1, 0x83, 0x11, 0x5a, 0x15, 0x54, 0x06,
1783ecf6283eStb 		0x2c, 0xfb,
178459919d1cStb 	},
178559919d1cStb 	.order = {
1786ecf6283eStb 		0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f, 0x10, 0x12,
1787ecf6283eStb 		0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b, 0x53, 0xdc, 0x67, 0xe1,
1788ecf6283eStb 		0x40, 0xd2, 0xbf, 0x94, 0x1f, 0xfd, 0xd4, 0x59, 0xc6, 0xd6,
1789ecf6283eStb 		0x55, 0xe1,
179059919d1cStb 	},
1791f9a1f7bbSmiod };
1792f9a1f7bbSmiod 
179359919d1cStb static const struct ec_list_element {
1794f1535dc8Sdjm 	const char *comment;
179559919d1cStb 	int nid;
179659919d1cStb 	int seed_len;
179759919d1cStb 	int param_len;
179859919d1cStb 	unsigned int cofactor;
179959919d1cStb 	const uint8_t *seed;
180059919d1cStb 	const uint8_t *p;
180159919d1cStb 	const uint8_t *a;
180259919d1cStb 	const uint8_t *b;
180359919d1cStb 	const uint8_t *x;
180459919d1cStb 	const uint8_t *y;
180559919d1cStb 	const uint8_t *order;
180659919d1cStb } curve_list[] = {
18075650a0e1Sdjm 	/* secg curves */
1808978dd0cbStb 	{
1809978dd0cbStb 		.comment = "SECG/WTLS curve over a 112 bit prime field",
181059919d1cStb 		.nid = NID_secp112r1,
181159919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_112R1.seed),
181259919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_112R1.p),
181359919d1cStb 		.seed = _EC_SECG_PRIME_112R1.seed,
181459919d1cStb 		.p = _EC_SECG_PRIME_112R1.p,
181559919d1cStb 		.a = _EC_SECG_PRIME_112R1.a,
181659919d1cStb 		.b = _EC_SECG_PRIME_112R1.b,
181759919d1cStb 		.x = _EC_SECG_PRIME_112R1.x,
181859919d1cStb 		.y = _EC_SECG_PRIME_112R1.y,
181959919d1cStb 		.order = _EC_SECG_PRIME_112R1.order,
182059919d1cStb 		.cofactor = 1,
1821978dd0cbStb 	},
1822978dd0cbStb 	{
1823978dd0cbStb 		.comment = "SECG curve over a 112 bit prime field",
182459919d1cStb 		.nid = NID_secp112r2,
182559919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_112R2.seed),
182659919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_112R2.p),
182759919d1cStb 		.seed = _EC_SECG_PRIME_112R2.seed,
182859919d1cStb 		.p = _EC_SECG_PRIME_112R2.p,
182959919d1cStb 		.a = _EC_SECG_PRIME_112R2.a,
183059919d1cStb 		.b = _EC_SECG_PRIME_112R2.b,
183159919d1cStb 		.x = _EC_SECG_PRIME_112R2.x,
183259919d1cStb 		.y = _EC_SECG_PRIME_112R2.y,
183359919d1cStb 		.order = _EC_SECG_PRIME_112R2.order,
183459919d1cStb 		.cofactor = 4,
1835978dd0cbStb 	},
1836978dd0cbStb 	{
183759919d1cStb 		.comment = "SECG curve over a 128 bit prime field",
1838978dd0cbStb 		.nid = NID_secp128r1,
183959919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_128R1.seed),
184059919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_128R1.p),
184159919d1cStb 		.seed = _EC_SECG_PRIME_128R1.seed,
184259919d1cStb 		.p = _EC_SECG_PRIME_128R1.p,
184359919d1cStb 		.a = _EC_SECG_PRIME_128R1.a,
184459919d1cStb 		.b = _EC_SECG_PRIME_128R1.b,
184559919d1cStb 		.x = _EC_SECG_PRIME_128R1.x,
184659919d1cStb 		.y = _EC_SECG_PRIME_128R1.y,
184759919d1cStb 		.order = _EC_SECG_PRIME_128R1.order,
184859919d1cStb 		.cofactor = 1,
1849978dd0cbStb 	},
1850978dd0cbStb 	{
185159919d1cStb 		.comment = "SECG curve over a 128 bit prime field",
1852978dd0cbStb 		.nid = NID_secp128r2,
185359919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_128R2.seed),
185459919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_128R2.p),
185559919d1cStb 		.seed = _EC_SECG_PRIME_128R2.seed,
185659919d1cStb 		.p = _EC_SECG_PRIME_128R2.p,
185759919d1cStb 		.a = _EC_SECG_PRIME_128R2.a,
185859919d1cStb 		.b = _EC_SECG_PRIME_128R2.b,
185959919d1cStb 		.x = _EC_SECG_PRIME_128R2.x,
186059919d1cStb 		.y = _EC_SECG_PRIME_128R2.y,
186159919d1cStb 		.order = _EC_SECG_PRIME_128R2.order,
186259919d1cStb 		.cofactor = 4,
1863978dd0cbStb 	},
1864978dd0cbStb 	{
186559919d1cStb 		.comment = "SECG curve over a 160 bit prime field",
1866978dd0cbStb 		.nid = NID_secp160k1,
186759919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_160K1.p),
186859919d1cStb 		.p = _EC_SECG_PRIME_160K1.p,
186959919d1cStb 		.a = _EC_SECG_PRIME_160K1.a,
187059919d1cStb 		.b = _EC_SECG_PRIME_160K1.b,
187159919d1cStb 		.x = _EC_SECG_PRIME_160K1.x,
187259919d1cStb 		.y = _EC_SECG_PRIME_160K1.y,
187359919d1cStb 		.order = _EC_SECG_PRIME_160K1.order,
187459919d1cStb 		.cofactor = 1,
1875978dd0cbStb 	},
1876978dd0cbStb 	{
187759919d1cStb 		.comment = "SECG curve over a 160 bit prime field",
1878978dd0cbStb 		.nid = NID_secp160r1,
187959919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_160R1.seed),
188059919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_160R1.p),
188159919d1cStb 		.seed = _EC_SECG_PRIME_160R1.seed,
188259919d1cStb 		.p = _EC_SECG_PRIME_160R1.p,
188359919d1cStb 		.a = _EC_SECG_PRIME_160R1.a,
188459919d1cStb 		.b = _EC_SECG_PRIME_160R1.b,
188559919d1cStb 		.x = _EC_SECG_PRIME_160R1.x,
188659919d1cStb 		.y = _EC_SECG_PRIME_160R1.y,
188759919d1cStb 		.order = _EC_SECG_PRIME_160R1.order,
188859919d1cStb 		.cofactor = 1,
1889978dd0cbStb 	},
1890978dd0cbStb 	{
1891978dd0cbStb 		.comment = "SECG/WTLS curve over a 160 bit prime field",
189259919d1cStb 		.nid = NID_secp160r2,
189359919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_160R2.seed),
189459919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_160R2.p),
189559919d1cStb 		.seed = _EC_SECG_PRIME_160R2.seed,
189659919d1cStb 		.p = _EC_SECG_PRIME_160R2.p,
189759919d1cStb 		.a = _EC_SECG_PRIME_160R2.a,
189859919d1cStb 		.b = _EC_SECG_PRIME_160R2.b,
189959919d1cStb 		.x = _EC_SECG_PRIME_160R2.x,
190059919d1cStb 		.y = _EC_SECG_PRIME_160R2.y,
190159919d1cStb 		.order = _EC_SECG_PRIME_160R2.order,
190259919d1cStb 		.cofactor = 1,
1903978dd0cbStb 	},
19045650a0e1Sdjm 	/* SECG secp192r1 is the same as X9.62 prime192v1 and hence omitted */
1905978dd0cbStb 	{
1906978dd0cbStb 		.comment = "SECG curve over a 192 bit prime field",
190759919d1cStb 		.nid = NID_secp192k1,
190859919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_192K1.p),
190959919d1cStb 		.p = _EC_SECG_PRIME_192K1.p,
191059919d1cStb 		.a = _EC_SECG_PRIME_192K1.a,
191159919d1cStb 		.b = _EC_SECG_PRIME_192K1.b,
191259919d1cStb 		.x = _EC_SECG_PRIME_192K1.x,
191359919d1cStb 		.y = _EC_SECG_PRIME_192K1.y,
191459919d1cStb 		.order = _EC_SECG_PRIME_192K1.order,
191559919d1cStb 		.cofactor = 1,
1916978dd0cbStb 	},
1917978dd0cbStb 	{
1918978dd0cbStb 		.comment = "SECG curve over a 224 bit prime field",
191959919d1cStb 		.nid = NID_secp224k1,
192059919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_224K1.p),
192159919d1cStb 		.p = _EC_SECG_PRIME_224K1.p,
192259919d1cStb 		.a = _EC_SECG_PRIME_224K1.a,
192359919d1cStb 		.b = _EC_SECG_PRIME_224K1.b,
192459919d1cStb 		.x = _EC_SECG_PRIME_224K1.x,
192559919d1cStb 		.y = _EC_SECG_PRIME_224K1.y,
192659919d1cStb 		.order = _EC_SECG_PRIME_224K1.order,
192759919d1cStb 		.cofactor = 1,
1928978dd0cbStb 	},
1929978dd0cbStb 	{
1930978dd0cbStb 		.comment = "NIST/SECG curve over a 224 bit prime field",
193159919d1cStb 		.nid = NID_secp224r1,
193259919d1cStb 		.seed_len = sizeof(_EC_NIST_PRIME_224.seed),
193359919d1cStb 		.param_len = sizeof(_EC_NIST_PRIME_224.p),
193459919d1cStb 		.seed = _EC_NIST_PRIME_224.seed,
193559919d1cStb 		.p = _EC_NIST_PRIME_224.p,
193659919d1cStb 		.a = _EC_NIST_PRIME_224.a,
193759919d1cStb 		.b = _EC_NIST_PRIME_224.b,
193859919d1cStb 		.x = _EC_NIST_PRIME_224.x,
193959919d1cStb 		.y = _EC_NIST_PRIME_224.y,
194059919d1cStb 		.order = _EC_NIST_PRIME_224.order,
194159919d1cStb 		.cofactor = 1,
1942978dd0cbStb 	},
1943978dd0cbStb 	{
1944978dd0cbStb 		.comment = "SECG curve over a 256 bit prime field",
194559919d1cStb 		.nid = NID_secp256k1,
194659919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_256K1.p),
194759919d1cStb 		.p = _EC_SECG_PRIME_256K1.p,
194859919d1cStb 		.a = _EC_SECG_PRIME_256K1.a,
194959919d1cStb 		.b = _EC_SECG_PRIME_256K1.b,
195059919d1cStb 		.x = _EC_SECG_PRIME_256K1.x,
195159919d1cStb 		.y = _EC_SECG_PRIME_256K1.y,
195259919d1cStb 		.order = _EC_SECG_PRIME_256K1.order,
195359919d1cStb 		.cofactor = 1,
1954978dd0cbStb 	},
19555650a0e1Sdjm 	/* SECG secp256r1 is the same as X9.62 prime256v1 and hence omitted */
1956978dd0cbStb 	{
1957978dd0cbStb 		.comment = "NIST/SECG curve over a 384 bit prime field",
195859919d1cStb 		.nid = NID_secp384r1,
195959919d1cStb 		.seed_len = sizeof(_EC_NIST_PRIME_384.seed),
196059919d1cStb 		.param_len = sizeof(_EC_NIST_PRIME_384.p),
196159919d1cStb 		.seed = _EC_NIST_PRIME_384.seed,
196259919d1cStb 		.p = _EC_NIST_PRIME_384.p,
196359919d1cStb 		.a = _EC_NIST_PRIME_384.a,
196459919d1cStb 		.b = _EC_NIST_PRIME_384.b,
196559919d1cStb 		.x = _EC_NIST_PRIME_384.x,
196659919d1cStb 		.y = _EC_NIST_PRIME_384.y,
196759919d1cStb 		.order = _EC_NIST_PRIME_384.order,
196859919d1cStb 		.cofactor = 1,
1969978dd0cbStb 	},
1970978dd0cbStb 	{
1971978dd0cbStb 		.comment = "NIST/SECG curve over a 521 bit prime field",
197259919d1cStb 		.nid = NID_secp521r1,
197359919d1cStb 		.seed_len = sizeof(_EC_NIST_PRIME_521.seed),
197459919d1cStb 		.param_len = sizeof(_EC_NIST_PRIME_521.p),
197559919d1cStb 		.seed = _EC_NIST_PRIME_521.seed,
197659919d1cStb 		.p = _EC_NIST_PRIME_521.p,
197759919d1cStb 		.a = _EC_NIST_PRIME_521.a,
197859919d1cStb 		.b = _EC_NIST_PRIME_521.b,
197959919d1cStb 		.x = _EC_NIST_PRIME_521.x,
198059919d1cStb 		.y = _EC_NIST_PRIME_521.y,
198159919d1cStb 		.order = _EC_NIST_PRIME_521.order,
198259919d1cStb 		.cofactor = 1,
1983978dd0cbStb 	},
19845650a0e1Sdjm 	/* X9.62 curves */
1985978dd0cbStb 	{
1986978dd0cbStb 		.comment = "NIST/X9.62/SECG curve over a 192 bit prime field",
198759919d1cStb 		.nid = NID_X9_62_prime192v1,
198859919d1cStb 		.seed_len = sizeof(_EC_NIST_PRIME_192.seed),
198959919d1cStb 		.param_len = sizeof(_EC_NIST_PRIME_192.p),
199059919d1cStb 		.seed = _EC_NIST_PRIME_192.seed,
199159919d1cStb 		.p = _EC_NIST_PRIME_192.p,
199259919d1cStb 		.a = _EC_NIST_PRIME_192.a,
199359919d1cStb 		.b = _EC_NIST_PRIME_192.b,
199459919d1cStb 		.x = _EC_NIST_PRIME_192.x,
199559919d1cStb 		.y = _EC_NIST_PRIME_192.y,
199659919d1cStb 		.order = _EC_NIST_PRIME_192.order,
199759919d1cStb 		.cofactor = 1,
1998978dd0cbStb 	},
1999978dd0cbStb 	{
200059919d1cStb 		.comment = "X9.62 curve over a 192 bit prime field",
2001978dd0cbStb 		.nid = NID_X9_62_prime192v2,
200259919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_192V2.seed),
200359919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_192V2.p),
200459919d1cStb 		.seed = _EC_X9_62_PRIME_192V2.seed,
200559919d1cStb 		.p = _EC_X9_62_PRIME_192V2.p,
200659919d1cStb 		.a = _EC_X9_62_PRIME_192V2.a,
200759919d1cStb 		.b = _EC_X9_62_PRIME_192V2.b,
200859919d1cStb 		.x = _EC_X9_62_PRIME_192V2.x,
200959919d1cStb 		.y = _EC_X9_62_PRIME_192V2.y,
201059919d1cStb 		.order = _EC_X9_62_PRIME_192V2.order,
201159919d1cStb 		.cofactor = 1,
2012978dd0cbStb 	},
2013978dd0cbStb 	{
201459919d1cStb 		.comment = "X9.62 curve over a 192 bit prime field",
2015978dd0cbStb 		.nid = NID_X9_62_prime192v3,
201659919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_192V3.seed),
201759919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_192V3.p),
201859919d1cStb 		.seed = _EC_X9_62_PRIME_192V3.seed,
201959919d1cStb 		.p = _EC_X9_62_PRIME_192V3.p,
202059919d1cStb 		.a = _EC_X9_62_PRIME_192V3.a,
202159919d1cStb 		.b = _EC_X9_62_PRIME_192V3.b,
202259919d1cStb 		.x = _EC_X9_62_PRIME_192V3.x,
202359919d1cStb 		.y = _EC_X9_62_PRIME_192V3.y,
202459919d1cStb 		.order = _EC_X9_62_PRIME_192V3.order,
202559919d1cStb 		.cofactor = 1,
2026978dd0cbStb 	},
2027978dd0cbStb 	{
202859919d1cStb 		.comment = "X9.62 curve over a 239 bit prime field",
2029978dd0cbStb 		.nid = NID_X9_62_prime239v1,
203059919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_239V1.seed),
203159919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_239V1.p),
203259919d1cStb 		.seed = _EC_X9_62_PRIME_239V1.seed,
203359919d1cStb 		.p = _EC_X9_62_PRIME_239V1.p,
203459919d1cStb 		.a = _EC_X9_62_PRIME_239V1.a,
203559919d1cStb 		.b = _EC_X9_62_PRIME_239V1.b,
203659919d1cStb 		.x = _EC_X9_62_PRIME_239V1.x,
203759919d1cStb 		.y = _EC_X9_62_PRIME_239V1.y,
203859919d1cStb 		.order = _EC_X9_62_PRIME_239V1.order,
203959919d1cStb 		.cofactor = 1,
2040978dd0cbStb 	},
2041978dd0cbStb 	{
204259919d1cStb 		.comment = "X9.62 curve over a 239 bit prime field",
2043978dd0cbStb 		.nid = NID_X9_62_prime239v2,
204459919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_239V2.seed),
204559919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_239V2.p),
204659919d1cStb 		.seed = _EC_X9_62_PRIME_239V2.seed,
204759919d1cStb 		.p = _EC_X9_62_PRIME_239V2.p,
204859919d1cStb 		.a = _EC_X9_62_PRIME_239V2.a,
204959919d1cStb 		.b = _EC_X9_62_PRIME_239V2.b,
205059919d1cStb 		.x = _EC_X9_62_PRIME_239V2.x,
205159919d1cStb 		.y = _EC_X9_62_PRIME_239V2.y,
205259919d1cStb 		.order = _EC_X9_62_PRIME_239V2.order,
205359919d1cStb 		.cofactor = 1,
2054978dd0cbStb 	},
2055978dd0cbStb 	{
205659919d1cStb 		.comment = "X9.62 curve over a 239 bit prime field",
2057978dd0cbStb 		.nid = NID_X9_62_prime239v3,
205859919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_239V3.seed),
205959919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_239V3.p),
206059919d1cStb 		.seed = _EC_X9_62_PRIME_239V3.seed,
206159919d1cStb 		.p = _EC_X9_62_PRIME_239V3.p,
206259919d1cStb 		.a = _EC_X9_62_PRIME_239V3.a,
206359919d1cStb 		.b = _EC_X9_62_PRIME_239V3.b,
206459919d1cStb 		.x = _EC_X9_62_PRIME_239V3.x,
206559919d1cStb 		.y = _EC_X9_62_PRIME_239V3.y,
206659919d1cStb 		.order = _EC_X9_62_PRIME_239V3.order,
206759919d1cStb 		.cofactor = 1,
2068978dd0cbStb 	},
2069978dd0cbStb 	{
2070978dd0cbStb 		.comment = "X9.62/SECG curve over a 256 bit prime field",
207159919d1cStb 		.nid = NID_X9_62_prime256v1,
207259919d1cStb 		.seed_len = sizeof(_EC_X9_62_PRIME_256V1.seed),
207359919d1cStb 		.param_len = sizeof(_EC_X9_62_PRIME_256V1.p),
207459919d1cStb 		.seed = _EC_X9_62_PRIME_256V1.seed,
207559919d1cStb 		.p = _EC_X9_62_PRIME_256V1.p,
207659919d1cStb 		.a = _EC_X9_62_PRIME_256V1.a,
207759919d1cStb 		.b = _EC_X9_62_PRIME_256V1.b,
207859919d1cStb 		.x = _EC_X9_62_PRIME_256V1.x,
207959919d1cStb 		.y = _EC_X9_62_PRIME_256V1.y,
208059919d1cStb 		.order = _EC_X9_62_PRIME_256V1.order,
208159919d1cStb 		.cofactor = 1,
2082978dd0cbStb 	},
2083978dd0cbStb 	{
2084978dd0cbStb 		.comment = "SECG/WTLS curve over a 112 bit prime field",
208559919d1cStb 		.nid = NID_wap_wsg_idm_ecid_wtls6,
208659919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_112R1.seed),
208759919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_112R1.p),
208859919d1cStb 		.seed = _EC_SECG_PRIME_112R1.seed,
208959919d1cStb 		.p = _EC_SECG_PRIME_112R1.p,
209059919d1cStb 		.a = _EC_SECG_PRIME_112R1.a,
209159919d1cStb 		.b = _EC_SECG_PRIME_112R1.b,
209259919d1cStb 		.x = _EC_SECG_PRIME_112R1.x,
209359919d1cStb 		.y = _EC_SECG_PRIME_112R1.y,
209459919d1cStb 		.order = _EC_SECG_PRIME_112R1.order,
209559919d1cStb 		.cofactor = 1,
2096978dd0cbStb 	},
2097978dd0cbStb 	{
2098978dd0cbStb 		.comment = "SECG/WTLS curve over a 160 bit prime field",
209959919d1cStb 		.nid = NID_wap_wsg_idm_ecid_wtls7,
210059919d1cStb 		.seed_len = sizeof(_EC_SECG_PRIME_160R2.seed),
210159919d1cStb 		.param_len = sizeof(_EC_SECG_PRIME_160R2.p),
210259919d1cStb 		.seed = _EC_SECG_PRIME_160R2.seed,
210359919d1cStb 		.p = _EC_SECG_PRIME_160R2.p,
210459919d1cStb 		.a = _EC_SECG_PRIME_160R2.a,
210559919d1cStb 		.b = _EC_SECG_PRIME_160R2.b,
210659919d1cStb 		.x = _EC_SECG_PRIME_160R2.x,
210759919d1cStb 		.y = _EC_SECG_PRIME_160R2.y,
210859919d1cStb 		.order = _EC_SECG_PRIME_160R2.order,
210959919d1cStb 		.cofactor = 1,
2110978dd0cbStb 	},
2111978dd0cbStb 	{
2112978dd0cbStb 		.comment = "WTLS curve over a 112 bit prime field",
211359919d1cStb 		.nid = NID_wap_wsg_idm_ecid_wtls8,
211459919d1cStb 		.param_len = sizeof(_EC_WTLS_8.p),
211559919d1cStb 		.p = _EC_WTLS_8.p,
211659919d1cStb 		.a = _EC_WTLS_8.a,
211759919d1cStb 		.b = _EC_WTLS_8.b,
211859919d1cStb 		.x = _EC_WTLS_8.x,
211959919d1cStb 		.y = _EC_WTLS_8.y,
212059919d1cStb 		.order = _EC_WTLS_8.order,
212159919d1cStb 		.cofactor = 1,
2122978dd0cbStb 	},
2123978dd0cbStb 	{
2124978dd0cbStb 		.comment = "WTLS curve over a 160 bit prime field",
212559919d1cStb 		.nid = NID_wap_wsg_idm_ecid_wtls9,
212659919d1cStb 		.param_len = sizeof(_EC_WTLS_9.p),
212759919d1cStb 		.p = _EC_WTLS_9.p,
212859919d1cStb 		.a = _EC_WTLS_9.a,
212959919d1cStb 		.b = _EC_WTLS_9.b,
213059919d1cStb 		.x = _EC_WTLS_9.x,
213159919d1cStb 		.y = _EC_WTLS_9.y,
213259919d1cStb 		.order = _EC_WTLS_9.order,
213359919d1cStb 		.cofactor = 1,
2134978dd0cbStb 	},
2135978dd0cbStb 	{
2136978dd0cbStb 		.comment = "WTLS curve over a 224 bit prime field",
213759919d1cStb 		.nid = NID_wap_wsg_idm_ecid_wtls12,
213859919d1cStb 		.param_len = sizeof(_EC_WTLS_12.p),
213959919d1cStb 		.p = _EC_WTLS_12.p,
214059919d1cStb 		.a = _EC_WTLS_12.a,
214159919d1cStb 		.b = _EC_WTLS_12.b,
214259919d1cStb 		.x = _EC_WTLS_12.x,
214359919d1cStb 		.y = _EC_WTLS_12.y,
214459919d1cStb 		.order = _EC_WTLS_12.order,
214559919d1cStb 		.cofactor = 1,
2146978dd0cbStb 	},
21479caf19c3Smiod 	/* RFC 5639 curves */
2148978dd0cbStb 	{
214959919d1cStb 		.comment = "RFC 5639 curve over a 160 bit prime field",
2150978dd0cbStb 		.nid = NID_brainpoolP160r1,
215159919d1cStb 		.param_len = sizeof(_EC_brainpoolP160r1.p),
215259919d1cStb 		.p = _EC_brainpoolP160r1.p,
215359919d1cStb 		.a = _EC_brainpoolP160r1.a,
215459919d1cStb 		.b = _EC_brainpoolP160r1.b,
215559919d1cStb 		.x = _EC_brainpoolP160r1.x,
215659919d1cStb 		.y = _EC_brainpoolP160r1.y,
215759919d1cStb 		.order = _EC_brainpoolP160r1.order,
215859919d1cStb 		.cofactor = 1,
2159978dd0cbStb 	},
2160978dd0cbStb 	{
216159919d1cStb 		.comment = "RFC 5639 curve over a 160 bit prime field",
2162978dd0cbStb 		.nid = NID_brainpoolP160t1,
216359919d1cStb 		.param_len = sizeof(_EC_brainpoolP160t1.p),
216459919d1cStb 		.p = _EC_brainpoolP160t1.p,
216559919d1cStb 		.a = _EC_brainpoolP160t1.a,
216659919d1cStb 		.b = _EC_brainpoolP160t1.b,
216759919d1cStb 		.x = _EC_brainpoolP160t1.x,
216859919d1cStb 		.y = _EC_brainpoolP160t1.y,
216959919d1cStb 		.order = _EC_brainpoolP160t1.order,
217059919d1cStb 		.cofactor = 1,
2171978dd0cbStb 	},
2172978dd0cbStb 	{
217359919d1cStb 		.comment = "RFC 5639 curve over a 192 bit prime field",
2174978dd0cbStb 		.nid = NID_brainpoolP192r1,
217559919d1cStb 		.param_len = sizeof(_EC_brainpoolP192r1.p),
217659919d1cStb 		.p = _EC_brainpoolP192r1.p,
217759919d1cStb 		.a = _EC_brainpoolP192r1.a,
217859919d1cStb 		.b = _EC_brainpoolP192r1.b,
217959919d1cStb 		.x = _EC_brainpoolP192r1.x,
218059919d1cStb 		.y = _EC_brainpoolP192r1.y,
218159919d1cStb 		.order = _EC_brainpoolP192r1.order,
218259919d1cStb 		.cofactor = 1,
2183978dd0cbStb 	},
2184978dd0cbStb 	{
218559919d1cStb 		.comment = "RFC 5639 curve over a 192 bit prime field",
2186978dd0cbStb 		.nid = NID_brainpoolP192t1,
218759919d1cStb 		.param_len = sizeof(_EC_brainpoolP192t1.p),
218859919d1cStb 		.p = _EC_brainpoolP192t1.p,
218959919d1cStb 		.a = _EC_brainpoolP192t1.a,
219059919d1cStb 		.b = _EC_brainpoolP192t1.b,
219159919d1cStb 		.x = _EC_brainpoolP192t1.x,
219259919d1cStb 		.y = _EC_brainpoolP192t1.y,
219359919d1cStb 		.order = _EC_brainpoolP192t1.order,
219459919d1cStb 		.cofactor = 1,
2195978dd0cbStb 	},
2196978dd0cbStb 	{
219759919d1cStb 		.comment = "RFC 5639 curve over a 224 bit prime field",
2198978dd0cbStb 		.nid = NID_brainpoolP224r1,
219959919d1cStb 		.param_len = sizeof(_EC_brainpoolP224r1.p),
220059919d1cStb 		.p = _EC_brainpoolP224r1.p,
220159919d1cStb 		.a = _EC_brainpoolP224r1.a,
220259919d1cStb 		.b = _EC_brainpoolP224r1.b,
220359919d1cStb 		.x = _EC_brainpoolP224r1.x,
220459919d1cStb 		.y = _EC_brainpoolP224r1.y,
220559919d1cStb 		.order = _EC_brainpoolP224r1.order,
220659919d1cStb 		.cofactor = 1,
2207978dd0cbStb 	},
2208978dd0cbStb 	{
220959919d1cStb 		.comment = "RFC 5639 curve over a 224 bit prime field",
2210978dd0cbStb 		.nid = NID_brainpoolP224t1,
221159919d1cStb 		.param_len = sizeof(_EC_brainpoolP224t1.p),
221259919d1cStb 		.p = _EC_brainpoolP224t1.p,
221359919d1cStb 		.a = _EC_brainpoolP224t1.a,
221459919d1cStb 		.b = _EC_brainpoolP224t1.b,
221559919d1cStb 		.x = _EC_brainpoolP224t1.x,
221659919d1cStb 		.y = _EC_brainpoolP224t1.y,
221759919d1cStb 		.order = _EC_brainpoolP224t1.order,
221859919d1cStb 		.cofactor = 1,
2219978dd0cbStb 	},
2220978dd0cbStb 	{
222159919d1cStb 		.comment = "RFC 5639 curve over a 256 bit prime field",
2222978dd0cbStb 		.nid = NID_brainpoolP256r1,
222359919d1cStb 		.param_len = sizeof(_EC_brainpoolP256r1.p),
222459919d1cStb 		.p = _EC_brainpoolP256r1.p,
222559919d1cStb 		.a = _EC_brainpoolP256r1.a,
222659919d1cStb 		.b = _EC_brainpoolP256r1.b,
222759919d1cStb 		.x = _EC_brainpoolP256r1.x,
222859919d1cStb 		.y = _EC_brainpoolP256r1.y,
222959919d1cStb 		.order = _EC_brainpoolP256r1.order,
223059919d1cStb 		.cofactor = 1,
2231978dd0cbStb 	},
2232978dd0cbStb 	{
223359919d1cStb 		.comment = "RFC 5639 curve over a 256 bit prime field",
2234978dd0cbStb 		.nid = NID_brainpoolP256t1,
223559919d1cStb 		.param_len = sizeof(_EC_brainpoolP256t1.p),
223659919d1cStb 		.p = _EC_brainpoolP256t1.p,
223759919d1cStb 		.a = _EC_brainpoolP256t1.a,
223859919d1cStb 		.b = _EC_brainpoolP256t1.b,
223959919d1cStb 		.x = _EC_brainpoolP256t1.x,
224059919d1cStb 		.y = _EC_brainpoolP256t1.y,
224159919d1cStb 		.order = _EC_brainpoolP256t1.order,
224259919d1cStb 		.cofactor = 1,
2243978dd0cbStb 	},
2244978dd0cbStb 	{
224559919d1cStb 		.comment = "RFC 5639 curve over a 320 bit prime field",
2246978dd0cbStb 		.nid = NID_brainpoolP320r1,
224759919d1cStb 		.param_len = sizeof(_EC_brainpoolP320r1.p),
224859919d1cStb 		.p = _EC_brainpoolP320r1.p,
224959919d1cStb 		.a = _EC_brainpoolP320r1.a,
225059919d1cStb 		.b = _EC_brainpoolP320r1.b,
225159919d1cStb 		.x = _EC_brainpoolP320r1.x,
225259919d1cStb 		.y = _EC_brainpoolP320r1.y,
225359919d1cStb 		.order = _EC_brainpoolP320r1.order,
225459919d1cStb 		.cofactor = 1,
2255978dd0cbStb 	},
2256978dd0cbStb 	{
225759919d1cStb 		.comment = "RFC 5639 curve over a 320 bit prime field",
2258978dd0cbStb 		.nid = NID_brainpoolP320t1,
225959919d1cStb 		.param_len = sizeof(_EC_brainpoolP320t1.p),
226059919d1cStb 		.p = _EC_brainpoolP320t1.p,
226159919d1cStb 		.a = _EC_brainpoolP320t1.a,
226259919d1cStb 		.b = _EC_brainpoolP320t1.b,
226359919d1cStb 		.x = _EC_brainpoolP320t1.x,
226459919d1cStb 		.y = _EC_brainpoolP320t1.y,
226559919d1cStb 		.order = _EC_brainpoolP320t1.order,
226659919d1cStb 		.cofactor = 1,
2267978dd0cbStb 	},
2268978dd0cbStb 	{
226959919d1cStb 		.comment = "RFC 5639 curve over a 384 bit prime field",
2270978dd0cbStb 		.nid = NID_brainpoolP384r1,
227159919d1cStb 		.param_len = sizeof(_EC_brainpoolP384r1.p),
227259919d1cStb 		.p = _EC_brainpoolP384r1.p,
227359919d1cStb 		.a = _EC_brainpoolP384r1.a,
227459919d1cStb 		.b = _EC_brainpoolP384r1.b,
227559919d1cStb 		.x = _EC_brainpoolP384r1.x,
227659919d1cStb 		.y = _EC_brainpoolP384r1.y,
227759919d1cStb 		.order = _EC_brainpoolP384r1.order,
227859919d1cStb 		.cofactor = 1,
2279978dd0cbStb 	},
2280978dd0cbStb 	{
228159919d1cStb 		.comment = "RFC 5639 curve over a 384 bit prime field",
2282978dd0cbStb 		.nid = NID_brainpoolP384t1,
228359919d1cStb 		.param_len = sizeof(_EC_brainpoolP384t1.p),
228459919d1cStb 		.p = _EC_brainpoolP384t1.p,
228559919d1cStb 		.a = _EC_brainpoolP384t1.a,
228659919d1cStb 		.b = _EC_brainpoolP384t1.b,
228759919d1cStb 		.x = _EC_brainpoolP384t1.x,
228859919d1cStb 		.y = _EC_brainpoolP384t1.y,
228959919d1cStb 		.order = _EC_brainpoolP384t1.order,
229059919d1cStb 		.cofactor = 1,
2291978dd0cbStb 	},
2292978dd0cbStb 	{
229359919d1cStb 		.comment = "RFC 5639 curve over a 512 bit prime field",
2294978dd0cbStb 		.nid = NID_brainpoolP512r1,
229559919d1cStb 		.param_len = sizeof(_EC_brainpoolP512r1.p),
229659919d1cStb 		.p = _EC_brainpoolP512r1.p,
229759919d1cStb 		.a = _EC_brainpoolP512r1.a,
229859919d1cStb 		.b = _EC_brainpoolP512r1.b,
229959919d1cStb 		.x = _EC_brainpoolP512r1.x,
230059919d1cStb 		.y = _EC_brainpoolP512r1.y,
230159919d1cStb 		.order = _EC_brainpoolP512r1.order,
230259919d1cStb 		.cofactor = 1,
2303978dd0cbStb 	},
2304978dd0cbStb 	{
2305978dd0cbStb 		.comment = "RFC 5639 curve over a 512 bit prime field",
230659919d1cStb 		.nid = NID_brainpoolP512t1,
230759919d1cStb 		.param_len = sizeof(_EC_brainpoolP512t1.p),
230859919d1cStb 		.p = _EC_brainpoolP512t1.p,
230959919d1cStb 		.a = _EC_brainpoolP512t1.a,
231059919d1cStb 		.b = _EC_brainpoolP512t1.b,
231159919d1cStb 		.x = _EC_brainpoolP512t1.x,
231259919d1cStb 		.y = _EC_brainpoolP512t1.y,
231359919d1cStb 		.order = _EC_brainpoolP512t1.order,
231459919d1cStb 		.cofactor = 1,
2315978dd0cbStb 	},
2316f9a1f7bbSmiod 	/* ANSSI */
2317978dd0cbStb 	{
2318978dd0cbStb 		.comment = "FRP256v1",
231959919d1cStb 		.nid = NID_FRP256v1,
232059919d1cStb 		.param_len = sizeof(_EC_FRP256v1.p),
232159919d1cStb 		.p = _EC_FRP256v1.p,
232259919d1cStb 		.a = _EC_FRP256v1.a,
232359919d1cStb 		.b = _EC_FRP256v1.b,
232459919d1cStb 		.x = _EC_FRP256v1.x,
232559919d1cStb 		.y = _EC_FRP256v1.y,
232659919d1cStb 		.order = _EC_FRP256v1.order,
232759919d1cStb 		.cofactor = 1,
2328978dd0cbStb 	},
23295650a0e1Sdjm };
23305650a0e1Sdjm 
2331f51c83a1Stb #define CURVE_LIST_LENGTH (sizeof(curve_list) / sizeof(curve_list[0]))
23325650a0e1Sdjm 
2333f67ac449Stedu static EC_GROUP *
ec_group_new_from_data(const struct ec_list_element * curve)233459919d1cStb ec_group_new_from_data(const struct ec_list_element *curve)
23355650a0e1Sdjm {
2336b1c4c349Stb 	EC_GROUP *group = NULL, *ret = NULL;
23375b63a848Stb 	EC_POINT *generator = NULL;
23385650a0e1Sdjm 	BN_CTX *ctx = NULL;
2339e3e151efStb 	BIGNUM *p, *a, *b, *x, *y, *order, *cofactor;
23405650a0e1Sdjm 
2341f67ac449Stedu 	if ((ctx = BN_CTX_new()) == NULL) {
23425067ae9fSbeck 		ECerror(ERR_R_MALLOC_FAILURE);
23435650a0e1Sdjm 		goto err;
23445650a0e1Sdjm 	}
2345e3e151efStb 	BN_CTX_start(ctx);
2346e3e151efStb 
2347e3e151efStb 	if ((p = BN_CTX_get(ctx)) == NULL) {
2348e3e151efStb 		ECerror(ERR_R_BN_LIB);
2349e3e151efStb 		goto err;
2350e3e151efStb 	}
2351e3e151efStb 	if ((a = BN_CTX_get(ctx)) == NULL) {
2352e3e151efStb 		ECerror(ERR_R_BN_LIB);
2353e3e151efStb 		goto err;
2354e3e151efStb 	}
2355e3e151efStb 	if ((b = BN_CTX_get(ctx)) == NULL) {
2356e3e151efStb 		ECerror(ERR_R_BN_LIB);
2357e3e151efStb 		goto err;
2358e3e151efStb 	}
2359e3e151efStb 	if ((x = BN_CTX_get(ctx)) == NULL) {
2360e3e151efStb 		ECerror(ERR_R_BN_LIB);
2361e3e151efStb 		goto err;
2362e3e151efStb 	}
2363e3e151efStb 	if ((y = BN_CTX_get(ctx)) == NULL) {
2364e3e151efStb 		ECerror(ERR_R_BN_LIB);
2365e3e151efStb 		goto err;
2366e3e151efStb 	}
2367e3e151efStb 	if ((order = BN_CTX_get(ctx)) == NULL) {
2368e3e151efStb 		ECerror(ERR_R_BN_LIB);
2369e3e151efStb 		goto err;
2370e3e151efStb 	}
2371e3e151efStb 	if ((cofactor = BN_CTX_get(ctx)) == NULL) {
2372e3e151efStb 		ECerror(ERR_R_BN_LIB);
2373e3e151efStb 		goto err;
2374e3e151efStb 	}
2375e3e151efStb 
237659919d1cStb 	if (BN_bin2bn(curve->p, curve->param_len, p) == NULL) {
2377e3e151efStb 		ECerror(ERR_R_BN_LIB);
2378e3e151efStb 		goto err;
2379e3e151efStb 	}
238059919d1cStb 	if (BN_bin2bn(curve->a, curve->param_len, a) == NULL) {
2381e3e151efStb 		ECerror(ERR_R_BN_LIB);
2382e3e151efStb 		goto err;
2383e3e151efStb 	}
238459919d1cStb 	if (BN_bin2bn(curve->b, curve->param_len, b) == NULL) {
23855067ae9fSbeck 		ECerror(ERR_R_BN_LIB);
23865650a0e1Sdjm 		goto err;
23875650a0e1Sdjm 	}
2388f67ac449Stedu 	if ((group = EC_GROUP_new_curve_GFp(p, a, b, ctx)) == NULL) {
23895067ae9fSbeck 		ECerror(ERR_R_EC_LIB);
23905650a0e1Sdjm 		goto err;
23915650a0e1Sdjm 	}
2392b1c4c349Stb 	EC_GROUP_set_curve_name(group, curve->nid);
23935650a0e1Sdjm 
23945b63a848Stb 	if ((generator = EC_POINT_new(group)) == NULL) {
23955067ae9fSbeck 		ECerror(ERR_R_EC_LIB);
23965650a0e1Sdjm 		goto err;
23975650a0e1Sdjm 	}
239859919d1cStb 	if (BN_bin2bn(curve->x, curve->param_len, x) == NULL) {
2399e3e151efStb 		ECerror(ERR_R_BN_LIB);
2400e3e151efStb 		goto err;
2401e3e151efStb 	}
240259919d1cStb 	if (BN_bin2bn(curve->y, curve->param_len, y) == NULL) {
24035067ae9fSbeck 		ECerror(ERR_R_BN_LIB);
24045650a0e1Sdjm 		goto err;
24055650a0e1Sdjm 	}
24065b63a848Stb 	if (!EC_POINT_set_affine_coordinates(group, generator, x, y, ctx)) {
24075067ae9fSbeck 		ECerror(ERR_R_EC_LIB);
24085650a0e1Sdjm 		goto err;
24095650a0e1Sdjm 	}
241059919d1cStb 	if (BN_bin2bn(curve->order, curve->param_len, order) == NULL) {
241159919d1cStb 		ECerror(ERR_R_EC_LIB);
24125650a0e1Sdjm 		goto err;
24135650a0e1Sdjm 	}
241459919d1cStb 	if (!BN_set_word(cofactor, curve->cofactor)) {
2415e3e151efStb 		ECerror(ERR_R_BN_LIB);
2416e3e151efStb 		goto err;
2417e3e151efStb 	}
24185b63a848Stb 	if (!EC_GROUP_set_generator(group, generator, order, cofactor)) {
24195067ae9fSbeck 		ECerror(ERR_R_EC_LIB);
24205650a0e1Sdjm 		goto err;
24215650a0e1Sdjm 	}
2422b1c4c349Stb 
242359919d1cStb 	if (curve->seed != NULL) {
242459919d1cStb 		if (!EC_GROUP_set_seed(group, curve->seed, curve->seed_len)) {
24255067ae9fSbeck 			ECerror(ERR_R_EC_LIB);
24265650a0e1Sdjm 			goto err;
24275650a0e1Sdjm 		}
24285650a0e1Sdjm 	}
2429b1c4c349Stb 
2430b1c4c349Stb 	ret = group;
24315650a0e1Sdjm 	group = NULL;
2432b1c4c349Stb 
2433b1c4c349Stb  err:
2434b1c4c349Stb 	EC_GROUP_free(group);
24355b63a848Stb 	EC_POINT_free(generator);
2436e3e151efStb 	BN_CTX_end(ctx);
24375650a0e1Sdjm 	BN_CTX_free(ctx);
2438e3e151efStb 
2439b1c4c349Stb 	return ret;
24405650a0e1Sdjm }
24415650a0e1Sdjm 
2442f67ac449Stedu EC_GROUP *
EC_GROUP_new_by_curve_name(int nid)2443f67ac449Stedu EC_GROUP_new_by_curve_name(int nid)
24445650a0e1Sdjm {
24455650a0e1Sdjm 	size_t i;
24465650a0e1Sdjm 
24475650a0e1Sdjm 	if (nid <= 0)
24485650a0e1Sdjm 		return NULL;
24495650a0e1Sdjm 
24501594ffa5Stb 	for (i = 0; i < CURVE_LIST_LENGTH; i++) {
2451b1c4c349Stb 		if (curve_list[i].nid == nid)
2452b1c4c349Stb 			return ec_group_new_from_data(&curve_list[i]);
24535650a0e1Sdjm 	}
2454b1c4c349Stb 
24555067ae9fSbeck 	ECerror(EC_R_UNKNOWN_GROUP);
24565650a0e1Sdjm 	return NULL;
24575650a0e1Sdjm }
2458ea2baf45Sbeck LCRYPTO_ALIAS(EC_GROUP_new_by_curve_name);
24595650a0e1Sdjm 
2460f67ac449Stedu size_t
EC_get_builtin_curves(EC_builtin_curve * r,size_t nitems)2461f67ac449Stedu EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems)
24625650a0e1Sdjm {
24635650a0e1Sdjm 	size_t i, min;
24645650a0e1Sdjm 
24655650a0e1Sdjm 	if (r == NULL || nitems == 0)
2466f51c83a1Stb 		return CURVE_LIST_LENGTH;
24675650a0e1Sdjm 
2468f51c83a1Stb 	min = nitems < CURVE_LIST_LENGTH ? nitems : CURVE_LIST_LENGTH;
24695650a0e1Sdjm 
2470f67ac449Stedu 	for (i = 0; i < min; i++) {
24715650a0e1Sdjm 		r[i].nid = curve_list[i].nid;
2472f1535dc8Sdjm 		r[i].comment = curve_list[i].comment;
24735650a0e1Sdjm 	}
24745650a0e1Sdjm 
2475f51c83a1Stb 	return CURVE_LIST_LENGTH;
24765650a0e1Sdjm }
2477ea2baf45Sbeck LCRYPTO_ALIAS(EC_get_builtin_curves);
2478bdb7dc21Sjsing 
2479034a9b39Stb static const struct {
2480034a9b39Stb 	const char *name;
2481034a9b39Stb 	int nid;
2482034a9b39Stb } nist_curves[] = {
2483bdb7dc21Sjsing 	{ "B-163", NID_sect163r2 },
2484bdb7dc21Sjsing 	{ "B-233", NID_sect233r1 },
2485bdb7dc21Sjsing 	{ "B-283", NID_sect283r1 },
2486bdb7dc21Sjsing 	{ "B-409", NID_sect409r1 },
2487bdb7dc21Sjsing 	{ "B-571", NID_sect571r1 },
2488bdb7dc21Sjsing 	{ "K-163", NID_sect163k1 },
2489bdb7dc21Sjsing 	{ "K-233", NID_sect233k1 },
2490bdb7dc21Sjsing 	{ "K-283", NID_sect283k1 },
2491bdb7dc21Sjsing 	{ "K-409", NID_sect409k1 },
2492bdb7dc21Sjsing 	{ "K-571", NID_sect571k1 },
2493bdb7dc21Sjsing 	{ "P-192", NID_X9_62_prime192v1 },
2494bdb7dc21Sjsing 	{ "P-224", NID_secp224r1 },
2495bdb7dc21Sjsing 	{ "P-256", NID_X9_62_prime256v1 },
2496bdb7dc21Sjsing 	{ "P-384", NID_secp384r1 },
2497bdb7dc21Sjsing 	{ "P-521", NID_secp521r1 }
2498bdb7dc21Sjsing };
2499bdb7dc21Sjsing 
2500bdb7dc21Sjsing const char *
EC_curve_nid2nist(int nid)2501bdb7dc21Sjsing EC_curve_nid2nist(int nid)
2502bdb7dc21Sjsing {
2503bdb7dc21Sjsing 	size_t i;
2504bdb7dc21Sjsing 
2505034a9b39Stb 	for (i = 0; i < sizeof(nist_curves) / sizeof(nist_curves[0]); i++) {
2506bdb7dc21Sjsing 		if (nist_curves[i].nid == nid)
2507034a9b39Stb 			return nist_curves[i].name;
2508bdb7dc21Sjsing 	}
2509034a9b39Stb 
2510034a9b39Stb 	return NULL;
2511bdb7dc21Sjsing }
2512ea2baf45Sbeck LCRYPTO_ALIAS(EC_curve_nid2nist);
2513bdb7dc21Sjsing 
2514bdb7dc21Sjsing int
EC_curve_nist2nid(const char * name)2515bdb7dc21Sjsing EC_curve_nist2nid(const char *name)
2516bdb7dc21Sjsing {
2517bdb7dc21Sjsing 	size_t i;
2518bdb7dc21Sjsing 
2519034a9b39Stb 	for (i = 0; i < sizeof(nist_curves) / sizeof(nist_curves[0]); i++) {
2520034a9b39Stb 		if (strcmp(nist_curves[i].name, name) == 0)
2521034a9b39Stb 			return nist_curves[i].nid;
2522bdb7dc21Sjsing 	}
2523034a9b39Stb 
2524034a9b39Stb 	return NID_undef;
2525bdb7dc21Sjsing }
2526ea2baf45Sbeck LCRYPTO_ALIAS(EC_curve_nist2nid);
2527