1160814Ssimon/* crypto/ec/ec_curve.c */
2160814Ssimon/*
3160814Ssimon * Written by Nils Larsch for the OpenSSL project.
4160814Ssimon */
5160814Ssimon/* ====================================================================
6238405Sjkim * Copyright (c) 1998-2010 The OpenSSL Project.  All rights reserved.
7160814Ssimon *
8160814Ssimon * Redistribution and use in source and binary forms, with or without
9160814Ssimon * modification, are permitted provided that the following conditions
10160814Ssimon * are met:
11160814Ssimon *
12160814Ssimon * 1. Redistributions of source code must retain the above copyright
13280304Sjkim *    notice, this list of conditions and the following disclaimer.
14160814Ssimon *
15160814Ssimon * 2. Redistributions in binary form must reproduce the above copyright
16160814Ssimon *    notice, this list of conditions and the following disclaimer in
17160814Ssimon *    the documentation and/or other materials provided with the
18160814Ssimon *    distribution.
19160814Ssimon *
20160814Ssimon * 3. All advertising materials mentioning features or use of this
21160814Ssimon *    software must display the following acknowledgment:
22160814Ssimon *    "This product includes software developed by the OpenSSL Project
23160814Ssimon *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
24160814Ssimon *
25160814Ssimon * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26160814Ssimon *    endorse or promote products derived from this software without
27160814Ssimon *    prior written permission. For written permission, please contact
28160814Ssimon *    openssl-core@openssl.org.
29160814Ssimon *
30160814Ssimon * 5. Products derived from this software may not be called "OpenSSL"
31160814Ssimon *    nor may "OpenSSL" appear in their names without prior written
32160814Ssimon *    permission of the OpenSSL Project.
33160814Ssimon *
34160814Ssimon * 6. Redistributions of any form whatsoever must retain the following
35160814Ssimon *    acknowledgment:
36160814Ssimon *    "This product includes software developed by the OpenSSL Project
37160814Ssimon *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
38160814Ssimon *
39160814Ssimon * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40160814Ssimon * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41160814Ssimon * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42160814Ssimon * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
43160814Ssimon * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44160814Ssimon * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45160814Ssimon * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46160814Ssimon * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47160814Ssimon * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48160814Ssimon * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49160814Ssimon * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50160814Ssimon * OF THE POSSIBILITY OF SUCH DAMAGE.
51160814Ssimon * ====================================================================
52160814Ssimon *
53160814Ssimon * This product includes cryptographic software written by Eric Young
54160814Ssimon * (eay@cryptsoft.com).  This product includes software written by Tim
55160814Ssimon * Hudson (tjh@cryptsoft.com).
56160814Ssimon *
57160814Ssimon */
58160814Ssimon/* ====================================================================
59160814Ssimon * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
60160814Ssimon *
61280304Sjkim * Portions of the attached software ("Contribution") are developed by
62160814Ssimon * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
63160814Ssimon *
64160814Ssimon * The Contribution is licensed pursuant to the OpenSSL open source
65160814Ssimon * license provided above.
66160814Ssimon *
67280304Sjkim * The elliptic curve binary polynomial software is originally written by
68160814Ssimon * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
69160814Ssimon *
70160814Ssimon */
71160814Ssimon
72160814Ssimon#include "ec_lcl.h"
73160814Ssimon#include <openssl/err.h>
74160814Ssimon#include <openssl/obj_mac.h>
75238405Sjkim#include <openssl/opensslconf.h>
76160814Ssimon
77238405Sjkimtypedef struct {
78280304Sjkim    int field_type,             /* either NID_X9_62_prime_field or
79280304Sjkim                                 * NID_X9_62_characteristic_two_field */
80280304Sjkim     seed_len, param_len;
81280304Sjkim    unsigned int cofactor;      /* promoted to BN_ULONG */
82160814Ssimon} EC_CURVE_DATA;
83160814Ssimon
84160814Ssimon/* the nist prime curves */
85280304Sjkimstatic const struct {
86280304Sjkim    EC_CURVE_DATA h;
87280304Sjkim    unsigned char data[20 + 24 * 6];
88280304Sjkim} _EC_NIST_PRIME_192 = {
89280304Sjkim    {
90280304Sjkim        NID_X9_62_prime_field, 20, 24, 1
91280304Sjkim    },
92280304Sjkim    {
93280304Sjkim        /* seed */
94280304Sjkim        0x30, 0x45, 0xAE, 0x6F, 0xC8, 0x42, 0x2F, 0x64, 0xED, 0x57, 0x95, 0x28,
95280304Sjkim        0xD3, 0x81, 0x20, 0xEA, 0xE1, 0x21, 0x96, 0xD5,
96280304Sjkim        /* p */
97280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
98280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
99280304Sjkim        /* a */
100280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
101280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
102280304Sjkim        /* b */
103280304Sjkim        0x64, 0x21, 0x05, 0x19, 0xE5, 0x9C, 0x80, 0xE7, 0x0F, 0xA7, 0xE9, 0xAB,
104280304Sjkim        0x72, 0x24, 0x30, 0x49, 0xFE, 0xB8, 0xDE, 0xEC, 0xC1, 0x46, 0xB9, 0xB1,
105280304Sjkim        /* x */
106280304Sjkim        0x18, 0x8D, 0xA8, 0x0E, 0xB0, 0x30, 0x90, 0xF6, 0x7C, 0xBF, 0x20, 0xEB,
107280304Sjkim        0x43, 0xA1, 0x88, 0x00, 0xF4, 0xFF, 0x0A, 0xFD, 0x82, 0xFF, 0x10, 0x12,
108280304Sjkim        /* y */
109280304Sjkim        0x07, 0x19, 0x2b, 0x95, 0xff, 0xc8, 0xda, 0x78, 0x63, 0x10, 0x11, 0xed,
110280304Sjkim        0x6b, 0x24, 0xcd, 0xd5, 0x73, 0xf9, 0x77, 0xa1, 0x1e, 0x79, 0x48, 0x11,
111280304Sjkim        /* order */
112280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
113280304Sjkim        0x99, 0xDE, 0xF8, 0x36, 0x14, 0x6B, 0xC9, 0xB1, 0xB4, 0xD2, 0x28, 0x31
114280304Sjkim    }
115280304Sjkim};
116238405Sjkim
117280304Sjkimstatic const struct {
118280304Sjkim    EC_CURVE_DATA h;
119280304Sjkim    unsigned char data[20 + 28 * 6];
120280304Sjkim} _EC_NIST_PRIME_224 = {
121280304Sjkim    {
122280304Sjkim        NID_X9_62_prime_field, 20, 28, 1
123280304Sjkim    },
124280304Sjkim    {
125280304Sjkim        /* seed */
126280304Sjkim        0xBD, 0x71, 0x34, 0x47, 0x99, 0xD5, 0xC7, 0xFC, 0xDC, 0x45, 0xB5, 0x9F,
127280304Sjkim        0xA3, 0xB9, 0xAB, 0x8F, 0x6A, 0x94, 0x8B, 0xC5,
128280304Sjkim        /* p */
129280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
130280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131280304Sjkim        0x00, 0x00, 0x00, 0x01,
132280304Sjkim        /* a */
133280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
134280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
135280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE,
136280304Sjkim        /* b */
137280304Sjkim        0xB4, 0x05, 0x0A, 0x85, 0x0C, 0x04, 0xB3, 0xAB, 0xF5, 0x41, 0x32, 0x56,
138280304Sjkim        0x50, 0x44, 0xB0, 0xB7, 0xD7, 0xBF, 0xD8, 0xBA, 0x27, 0x0B, 0x39, 0x43,
139280304Sjkim        0x23, 0x55, 0xFF, 0xB4,
140280304Sjkim        /* x */
141280304Sjkim        0xB7, 0x0E, 0x0C, 0xBD, 0x6B, 0xB4, 0xBF, 0x7F, 0x32, 0x13, 0x90, 0xB9,
142280304Sjkim        0x4A, 0x03, 0xC1, 0xD3, 0x56, 0xC2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xD6,
143280304Sjkim        0x11, 0x5C, 0x1D, 0x21,
144280304Sjkim        /* y */
145280304Sjkim        0xbd, 0x37, 0x63, 0x88, 0xb5, 0xf7, 0x23, 0xfb, 0x4c, 0x22, 0xdf, 0xe6,
146280304Sjkim        0xcd, 0x43, 0x75, 0xa0, 0x5a, 0x07, 0x47, 0x64, 0x44, 0xd5, 0x81, 0x99,
147280304Sjkim        0x85, 0x00, 0x7e, 0x34,
148280304Sjkim        /* order */
149280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
150280304Sjkim        0xFF, 0xFF, 0x16, 0xA2, 0xE0, 0xB8, 0xF0, 0x3E, 0x13, 0xDD, 0x29, 0x45,
151280304Sjkim        0x5C, 0x5C, 0x2A, 0x3D
152280304Sjkim    }
153280304Sjkim};
154160814Ssimon
155280304Sjkimstatic const struct {
156280304Sjkim    EC_CURVE_DATA h;
157280304Sjkim    unsigned char data[20 + 48 * 6];
158280304Sjkim} _EC_NIST_PRIME_384 = {
159280304Sjkim    {
160280304Sjkim        NID_X9_62_prime_field, 20, 48, 1
161280304Sjkim    },
162280304Sjkim    {
163280304Sjkim        /* seed */
164280304Sjkim        0xA3, 0x35, 0x92, 0x6A, 0xA3, 0x19, 0xA2, 0x7A, 0x1D, 0x00, 0x89, 0x6A,
165280304Sjkim        0x67, 0x73, 0xA4, 0x82, 0x7A, 0xCD, 0xAC, 0x73,
166280304Sjkim        /* p */
167280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
168280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
169280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
170280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
171280304Sjkim        /* a */
172280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
173280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
174280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
175280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC,
176280304Sjkim        /* b */
177280304Sjkim        0xB3, 0x31, 0x2F, 0xA7, 0xE2, 0x3E, 0xE7, 0xE4, 0x98, 0x8E, 0x05, 0x6B,
178280304Sjkim        0xE3, 0xF8, 0x2D, 0x19, 0x18, 0x1D, 0x9C, 0x6E, 0xFE, 0x81, 0x41, 0x12,
179280304Sjkim        0x03, 0x14, 0x08, 0x8F, 0x50, 0x13, 0x87, 0x5A, 0xC6, 0x56, 0x39, 0x8D,
180280304Sjkim        0x8A, 0x2E, 0xD1, 0x9D, 0x2A, 0x85, 0xC8, 0xED, 0xD3, 0xEC, 0x2A, 0xEF,
181280304Sjkim        /* x */
182280304Sjkim        0xAA, 0x87, 0xCA, 0x22, 0xBE, 0x8B, 0x05, 0x37, 0x8E, 0xB1, 0xC7, 0x1E,
183280304Sjkim        0xF3, 0x20, 0xAD, 0x74, 0x6E, 0x1D, 0x3B, 0x62, 0x8B, 0xA7, 0x9B, 0x98,
184280304Sjkim        0x59, 0xF7, 0x41, 0xE0, 0x82, 0x54, 0x2A, 0x38, 0x55, 0x02, 0xF2, 0x5D,
185280304Sjkim        0xBF, 0x55, 0x29, 0x6C, 0x3A, 0x54, 0x5E, 0x38, 0x72, 0x76, 0x0A, 0xB7,
186280304Sjkim        /* y */
187280304Sjkim        0x36, 0x17, 0xde, 0x4a, 0x96, 0x26, 0x2c, 0x6f, 0x5d, 0x9e, 0x98, 0xbf,
188280304Sjkim        0x92, 0x92, 0xdc, 0x29, 0xf8, 0xf4, 0x1d, 0xbd, 0x28, 0x9a, 0x14, 0x7c,
189280304Sjkim        0xe9, 0xda, 0x31, 0x13, 0xb5, 0xf0, 0xb8, 0xc0, 0x0a, 0x60, 0xb1, 0xce,
190280304Sjkim        0x1d, 0x7e, 0x81, 0x9d, 0x7a, 0x43, 0x1d, 0x7c, 0x90, 0xea, 0x0e, 0x5f,
191280304Sjkim        /* order */
192280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
193280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
194280304Sjkim        0xC7, 0x63, 0x4D, 0x81, 0xF4, 0x37, 0x2D, 0xDF, 0x58, 0x1A, 0x0D, 0xB2,
195280304Sjkim        0x48, 0xB0, 0xA7, 0x7A, 0xEC, 0xEC, 0x19, 0x6A, 0xCC, 0xC5, 0x29, 0x73
196280304Sjkim    }
197280304Sjkim};
198238405Sjkim
199280304Sjkimstatic const struct {
200280304Sjkim    EC_CURVE_DATA h;
201280304Sjkim    unsigned char data[20 + 66 * 6];
202280304Sjkim} _EC_NIST_PRIME_521 = {
203280304Sjkim    {
204280304Sjkim        NID_X9_62_prime_field, 20, 66, 1
205280304Sjkim    },
206280304Sjkim    {
207280304Sjkim        /* seed */
208280304Sjkim        0xD0, 0x9E, 0x88, 0x00, 0x29, 0x1C, 0xB8, 0x53, 0x96, 0xCC, 0x67, 0x17,
209280304Sjkim        0x39, 0x32, 0x84, 0xAA, 0xA0, 0xDA, 0x64, 0xBA,
210280304Sjkim        /* p */
211280304Sjkim        0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
212280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
213280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
214280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
215280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
216280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
217280304Sjkim        /* a */
218280304Sjkim        0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
219280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
220280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
221280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
222280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
223280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
224280304Sjkim        /* b */
225280304Sjkim        0x00, 0x51, 0x95, 0x3E, 0xB9, 0x61, 0x8E, 0x1C, 0x9A, 0x1F, 0x92, 0x9A,
226280304Sjkim        0x21, 0xA0, 0xB6, 0x85, 0x40, 0xEE, 0xA2, 0xDA, 0x72, 0x5B, 0x99, 0xB3,
227280304Sjkim        0x15, 0xF3, 0xB8, 0xB4, 0x89, 0x91, 0x8E, 0xF1, 0x09, 0xE1, 0x56, 0x19,
228280304Sjkim        0x39, 0x51, 0xEC, 0x7E, 0x93, 0x7B, 0x16, 0x52, 0xC0, 0xBD, 0x3B, 0xB1,
229280304Sjkim        0xBF, 0x07, 0x35, 0x73, 0xDF, 0x88, 0x3D, 0x2C, 0x34, 0xF1, 0xEF, 0x45,
230280304Sjkim        0x1F, 0xD4, 0x6B, 0x50, 0x3F, 0x00,
231280304Sjkim        /* x */
232280304Sjkim        0x00, 0xC6, 0x85, 0x8E, 0x06, 0xB7, 0x04, 0x04, 0xE9, 0xCD, 0x9E, 0x3E,
233280304Sjkim        0xCB, 0x66, 0x23, 0x95, 0xB4, 0x42, 0x9C, 0x64, 0x81, 0x39, 0x05, 0x3F,
234280304Sjkim        0xB5, 0x21, 0xF8, 0x28, 0xAF, 0x60, 0x6B, 0x4D, 0x3D, 0xBA, 0xA1, 0x4B,
235280304Sjkim        0x5E, 0x77, 0xEF, 0xE7, 0x59, 0x28, 0xFE, 0x1D, 0xC1, 0x27, 0xA2, 0xFF,
236280304Sjkim        0xA8, 0xDE, 0x33, 0x48, 0xB3, 0xC1, 0x85, 0x6A, 0x42, 0x9B, 0xF9, 0x7E,
237280304Sjkim        0x7E, 0x31, 0xC2, 0xE5, 0xBD, 0x66,
238280304Sjkim        /* y */
239280304Sjkim        0x01, 0x18, 0x39, 0x29, 0x6a, 0x78, 0x9a, 0x3b, 0xc0, 0x04, 0x5c, 0x8a,
240280304Sjkim        0x5f, 0xb4, 0x2c, 0x7d, 0x1b, 0xd9, 0x98, 0xf5, 0x44, 0x49, 0x57, 0x9b,
241280304Sjkim        0x44, 0x68, 0x17, 0xaf, 0xbd, 0x17, 0x27, 0x3e, 0x66, 0x2c, 0x97, 0xee,
242280304Sjkim        0x72, 0x99, 0x5e, 0xf4, 0x26, 0x40, 0xc5, 0x50, 0xb9, 0x01, 0x3f, 0xad,
243280304Sjkim        0x07, 0x61, 0x35, 0x3c, 0x70, 0x86, 0xa2, 0x72, 0xc2, 0x40, 0x88, 0xbe,
244280304Sjkim        0x94, 0x76, 0x9f, 0xd1, 0x66, 0x50,
245280304Sjkim        /* order */
246280304Sjkim        0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
247280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
248280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0x51, 0x86,
249280304Sjkim        0x87, 0x83, 0xBF, 0x2F, 0x96, 0x6B, 0x7F, 0xCC, 0x01, 0x48, 0xF7, 0x09,
250280304Sjkim        0xA5, 0xD0, 0x3B, 0xB5, 0xC9, 0xB8, 0x89, 0x9C, 0x47, 0xAE, 0xBB, 0x6F,
251280304Sjkim        0xB7, 0x1E, 0x91, 0x38, 0x64, 0x09
252280304Sjkim    }
253280304Sjkim};
254160814Ssimon
255160814Ssimon/* the x9.62 prime curves (minus the nist prime curves) */
256280304Sjkimstatic const struct {
257280304Sjkim    EC_CURVE_DATA h;
258280304Sjkim    unsigned char data[20 + 24 * 6];
259280304Sjkim} _EC_X9_62_PRIME_192V2 = {
260280304Sjkim    {
261280304Sjkim        NID_X9_62_prime_field, 20, 24, 1
262280304Sjkim    },
263280304Sjkim    {
264280304Sjkim        /* seed */
265280304Sjkim        0x31, 0xA9, 0x2E, 0xE2, 0x02, 0x9F, 0xD1, 0x0D, 0x90, 0x1B, 0x11, 0x3E,
266280304Sjkim        0x99, 0x07, 0x10, 0xF0, 0xD2, 0x1A, 0xC6, 0xB6,
267280304Sjkim        /* p */
268280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
269280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
270280304Sjkim        /* a */
271280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
272280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
273280304Sjkim        /* b */
274280304Sjkim        0xCC, 0x22, 0xD6, 0xDF, 0xB9, 0x5C, 0x6B, 0x25, 0xE4, 0x9C, 0x0D, 0x63,
275280304Sjkim        0x64, 0xA4, 0xE5, 0x98, 0x0C, 0x39, 0x3A, 0xA2, 0x16, 0x68, 0xD9, 0x53,
276280304Sjkim        /* x */
277280304Sjkim        0xEE, 0xA2, 0xBA, 0xE7, 0xE1, 0x49, 0x78, 0x42, 0xF2, 0xDE, 0x77, 0x69,
278280304Sjkim        0xCF, 0xE9, 0xC9, 0x89, 0xC0, 0x72, 0xAD, 0x69, 0x6F, 0x48, 0x03, 0x4A,
279280304Sjkim        /* y */
280280304Sjkim        0x65, 0x74, 0xd1, 0x1d, 0x69, 0xb6, 0xec, 0x7a, 0x67, 0x2b, 0xb8, 0x2a,
281280304Sjkim        0x08, 0x3d, 0xf2, 0xf2, 0xb0, 0x84, 0x7d, 0xe9, 0x70, 0xb2, 0xde, 0x15,
282280304Sjkim        /* order */
283280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
284280304Sjkim        0x5F, 0xB1, 0xA7, 0x24, 0xDC, 0x80, 0x41, 0x86, 0x48, 0xD8, 0xDD, 0x31
285280304Sjkim    }
286280304Sjkim};
287238405Sjkim
288280304Sjkimstatic const struct {
289280304Sjkim    EC_CURVE_DATA h;
290280304Sjkim    unsigned char data[20 + 24 * 6];
291280304Sjkim} _EC_X9_62_PRIME_192V3 = {
292280304Sjkim    {
293280304Sjkim        NID_X9_62_prime_field, 20, 24, 1
294280304Sjkim    },
295280304Sjkim    {
296280304Sjkim        /* seed */
297280304Sjkim        0xC4, 0x69, 0x68, 0x44, 0x35, 0xDE, 0xB3, 0x78, 0xC4, 0xB6, 0x5C, 0xA9,
298280304Sjkim        0x59, 0x1E, 0x2A, 0x57, 0x63, 0x05, 0x9A, 0x2E,
299280304Sjkim        /* p */
300280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
301280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
302280304Sjkim        /* a */
303280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
304280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
305280304Sjkim        /* b */
306280304Sjkim        0x22, 0x12, 0x3D, 0xC2, 0x39, 0x5A, 0x05, 0xCA, 0xA7, 0x42, 0x3D, 0xAE,
307280304Sjkim        0xCC, 0xC9, 0x47, 0x60, 0xA7, 0xD4, 0x62, 0x25, 0x6B, 0xD5, 0x69, 0x16,
308280304Sjkim        /* x */
309280304Sjkim        0x7D, 0x29, 0x77, 0x81, 0x00, 0xC6, 0x5A, 0x1D, 0xA1, 0x78, 0x37, 0x16,
310280304Sjkim        0x58, 0x8D, 0xCE, 0x2B, 0x8B, 0x4A, 0xEE, 0x8E, 0x22, 0x8F, 0x18, 0x96,
311280304Sjkim        /* y */
312280304Sjkim        0x38, 0xa9, 0x0f, 0x22, 0x63, 0x73, 0x37, 0x33, 0x4b, 0x49, 0xdc, 0xb6,
313280304Sjkim        0x6a, 0x6d, 0xc8, 0xf9, 0x97, 0x8a, 0xca, 0x76, 0x48, 0xa9, 0x43, 0xb0,
314280304Sjkim        /* order */
315280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
316280304Sjkim        0x7A, 0x62, 0xD0, 0x31, 0xC8, 0x3F, 0x42, 0x94, 0xF6, 0x40, 0xEC, 0x13
317280304Sjkim    }
318280304Sjkim};
319160814Ssimon
320280304Sjkimstatic const struct {
321280304Sjkim    EC_CURVE_DATA h;
322280304Sjkim    unsigned char data[20 + 30 * 6];
323280304Sjkim} _EC_X9_62_PRIME_239V1 = {
324280304Sjkim    {
325280304Sjkim        NID_X9_62_prime_field, 20, 30, 1
326280304Sjkim    },
327280304Sjkim    {
328280304Sjkim        /* seed */
329280304Sjkim        0xE4, 0x3B, 0xB4, 0x60, 0xF0, 0xB8, 0x0C, 0xC0, 0xC0, 0xB0, 0x75, 0x79,
330280304Sjkim        0x8E, 0x94, 0x80, 0x60, 0xF8, 0x32, 0x1B, 0x7D,
331280304Sjkim        /* p */
332280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
333280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
334280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
335280304Sjkim        /* a */
336280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
337280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
338280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
339280304Sjkim        /* b */
340280304Sjkim        0x6B, 0x01, 0x6C, 0x3B, 0xDC, 0xF1, 0x89, 0x41, 0xD0, 0xD6, 0x54, 0x92,
341280304Sjkim        0x14, 0x75, 0xCA, 0x71, 0xA9, 0xDB, 0x2F, 0xB2, 0x7D, 0x1D, 0x37, 0x79,
342280304Sjkim        0x61, 0x85, 0xC2, 0x94, 0x2C, 0x0A,
343280304Sjkim        /* x */
344280304Sjkim        0x0F, 0xFA, 0x96, 0x3C, 0xDC, 0xA8, 0x81, 0x6C, 0xCC, 0x33, 0xB8, 0x64,
345280304Sjkim        0x2B, 0xED, 0xF9, 0x05, 0xC3, 0xD3, 0x58, 0x57, 0x3D, 0x3F, 0x27, 0xFB,
346280304Sjkim        0xBD, 0x3B, 0x3C, 0xB9, 0xAA, 0xAF,
347280304Sjkim        /* y */
348280304Sjkim        0x7d, 0xeb, 0xe8, 0xe4, 0xe9, 0x0a, 0x5d, 0xae, 0x6e, 0x40, 0x54, 0xca,
349280304Sjkim        0x53, 0x0b, 0xa0, 0x46, 0x54, 0xb3, 0x68, 0x18, 0xce, 0x22, 0x6b, 0x39,
350280304Sjkim        0xfc, 0xcb, 0x7b, 0x02, 0xf1, 0xae,
351280304Sjkim        /* order */
352280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
353280304Sjkim        0x7F, 0xFF, 0xFF, 0x9E, 0x5E, 0x9A, 0x9F, 0x5D, 0x90, 0x71, 0xFB, 0xD1,
354280304Sjkim        0x52, 0x26, 0x88, 0x90, 0x9D, 0x0B
355280304Sjkim    }
356280304Sjkim};
357238405Sjkim
358280304Sjkimstatic const struct {
359280304Sjkim    EC_CURVE_DATA h;
360280304Sjkim    unsigned char data[20 + 30 * 6];
361280304Sjkim} _EC_X9_62_PRIME_239V2 = {
362280304Sjkim    {
363280304Sjkim        NID_X9_62_prime_field, 20, 30, 1
364280304Sjkim    },
365280304Sjkim    {
366280304Sjkim        /* seed */
367280304Sjkim        0xE8, 0xB4, 0x01, 0x16, 0x04, 0x09, 0x53, 0x03, 0xCA, 0x3B, 0x80, 0x99,
368280304Sjkim        0x98, 0x2B, 0xE0, 0x9F, 0xCB, 0x9A, 0xE6, 0x16,
369280304Sjkim        /* p */
370280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
371280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
372280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
373280304Sjkim        /* a */
374280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
375280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
376280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
377280304Sjkim        /* b */
378280304Sjkim        0x61, 0x7F, 0xAB, 0x68, 0x32, 0x57, 0x6C, 0xBB, 0xFE, 0xD5, 0x0D, 0x99,
379280304Sjkim        0xF0, 0x24, 0x9C, 0x3F, 0xEE, 0x58, 0xB9, 0x4B, 0xA0, 0x03, 0x8C, 0x7A,
380280304Sjkim        0xE8, 0x4C, 0x8C, 0x83, 0x2F, 0x2C,
381280304Sjkim        /* x */
382280304Sjkim        0x38, 0xAF, 0x09, 0xD9, 0x87, 0x27, 0x70, 0x51, 0x20, 0xC9, 0x21, 0xBB,
383280304Sjkim        0x5E, 0x9E, 0x26, 0x29, 0x6A, 0x3C, 0xDC, 0xF2, 0xF3, 0x57, 0x57, 0xA0,
384280304Sjkim        0xEA, 0xFD, 0x87, 0xB8, 0x30, 0xE7,
385280304Sjkim        /* y */
386280304Sjkim        0x5b, 0x01, 0x25, 0xe4, 0xdb, 0xea, 0x0e, 0xc7, 0x20, 0x6d, 0xa0, 0xfc,
387280304Sjkim        0x01, 0xd9, 0xb0, 0x81, 0x32, 0x9f, 0xb5, 0x55, 0xde, 0x6e, 0xf4, 0x60,
388280304Sjkim        0x23, 0x7d, 0xff, 0x8b, 0xe4, 0xba,
389280304Sjkim        /* order */
390280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
391280304Sjkim        0x80, 0x00, 0x00, 0xCF, 0xA7, 0xE8, 0x59, 0x43, 0x77, 0xD4, 0x14, 0xC0,
392280304Sjkim        0x38, 0x21, 0xBC, 0x58, 0x20, 0x63
393280304Sjkim    }
394280304Sjkim};
395160814Ssimon
396280304Sjkimstatic const struct {
397280304Sjkim    EC_CURVE_DATA h;
398280304Sjkim    unsigned char data[20 + 30 * 6];
399280304Sjkim} _EC_X9_62_PRIME_239V3 = {
400280304Sjkim    {
401280304Sjkim        NID_X9_62_prime_field, 20, 30, 1
402280304Sjkim    },
403280304Sjkim    {
404280304Sjkim        /* seed */
405280304Sjkim        0x7D, 0x73, 0x74, 0x16, 0x8F, 0xFE, 0x34, 0x71, 0xB6, 0x0A, 0x85, 0x76,
406280304Sjkim        0x86, 0xA1, 0x94, 0x75, 0xD3, 0xBF, 0xA2, 0xFF,
407280304Sjkim        /* p */
408280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
409280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
410280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
411280304Sjkim        /* a */
412280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
413280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
414280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
415280304Sjkim        /* b */
416280304Sjkim        0x25, 0x57, 0x05, 0xFA, 0x2A, 0x30, 0x66, 0x54, 0xB1, 0xF4, 0xCB, 0x03,
417280304Sjkim        0xD6, 0xA7, 0x50, 0xA3, 0x0C, 0x25, 0x01, 0x02, 0xD4, 0x98, 0x87, 0x17,
418280304Sjkim        0xD9, 0xBA, 0x15, 0xAB, 0x6D, 0x3E,
419280304Sjkim        /* x */
420280304Sjkim        0x67, 0x68, 0xAE, 0x8E, 0x18, 0xBB, 0x92, 0xCF, 0xCF, 0x00, 0x5C, 0x94,
421280304Sjkim        0x9A, 0xA2, 0xC6, 0xD9, 0x48, 0x53, 0xD0, 0xE6, 0x60, 0xBB, 0xF8, 0x54,
422280304Sjkim        0xB1, 0xC9, 0x50, 0x5F, 0xE9, 0x5A,
423280304Sjkim        /* y */
424280304Sjkim        0x16, 0x07, 0xe6, 0x89, 0x8f, 0x39, 0x0c, 0x06, 0xbc, 0x1d, 0x55, 0x2b,
425280304Sjkim        0xad, 0x22, 0x6f, 0x3b, 0x6f, 0xcf, 0xe4, 0x8b, 0x6e, 0x81, 0x84, 0x99,
426280304Sjkim        0xaf, 0x18, 0xe3, 0xed, 0x6c, 0xf3,
427280304Sjkim        /* order */
428280304Sjkim        0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
429280304Sjkim        0x7F, 0xFF, 0xFF, 0x97, 0x5D, 0xEB, 0x41, 0xB3, 0xA6, 0x05, 0x7C, 0x3C,
430280304Sjkim        0x43, 0x21, 0x46, 0x52, 0x65, 0x51
431280304Sjkim    }
432280304Sjkim};
433238405Sjkim
434280304Sjkimstatic const struct {
435280304Sjkim    EC_CURVE_DATA h;
436280304Sjkim    unsigned char data[20 + 32 * 6];
437280304Sjkim} _EC_X9_62_PRIME_256V1 = {
438280304Sjkim    {
439280304Sjkim        NID_X9_62_prime_field, 20, 32, 1
440280304Sjkim    },
441280304Sjkim    {
442280304Sjkim        /* seed */
443280304Sjkim        0xC4, 0x9D, 0x36, 0x08, 0x86, 0xE7, 0x04, 0x93, 0x6A, 0x66, 0x78, 0xE1,
444280304Sjkim        0x13, 0x9D, 0x26, 0xB7, 0x81, 0x9F, 0x7E, 0x90,
445280304Sjkim        /* p */
446280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
447280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
448280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
449280304Sjkim        /* a */
450280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
451280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
452280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
453280304Sjkim        /* b */
454280304Sjkim        0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7, 0xB3, 0xEB, 0xBD, 0x55,
455280304Sjkim        0x76, 0x98, 0x86, 0xBC, 0x65, 0x1D, 0x06, 0xB0, 0xCC, 0x53, 0xB0, 0xF6,
456280304Sjkim        0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B,
457280304Sjkim        /* x */
458280304Sjkim        0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47, 0xF8, 0xBC, 0xE6, 0xE5,
459280304Sjkim        0x63, 0xA4, 0x40, 0xF2, 0x77, 0x03, 0x7D, 0x81, 0x2D, 0xEB, 0x33, 0xA0,
460280304Sjkim        0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96,
461280304Sjkim        /* y */
462280304Sjkim        0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b, 0x8e, 0xe7, 0xeb, 0x4a,
463280304Sjkim        0x7c, 0x0f, 0x9e, 0x16, 0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce,
464280304Sjkim        0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5,
465280304Sjkim        /* order */
466280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
467280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84,
468280304Sjkim        0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51
469280304Sjkim    }
470280304Sjkim};
471238405Sjkim
472160814Ssimon/* the secg prime curves (minus the nist and x9.62 prime curves) */
473280304Sjkimstatic const struct {
474280304Sjkim    EC_CURVE_DATA h;
475280304Sjkim    unsigned char data[20 + 14 * 6];
476280304Sjkim} _EC_SECG_PRIME_112R1 = {
477280304Sjkim    {
478280304Sjkim        NID_X9_62_prime_field, 20, 14, 1
479280304Sjkim    },
480280304Sjkim    {
481280304Sjkim        /* seed */
482280304Sjkim        0x00, 0xF5, 0x0B, 0x02, 0x8E, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61,
483280304Sjkim        0x51, 0x75, 0x29, 0x04, 0x72, 0x78, 0x3F, 0xB1,
484280304Sjkim        /* p */
485280304Sjkim        0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x66, 0x80, 0x76, 0xBE, 0xAD,
486280304Sjkim        0x20, 0x8B,
487280304Sjkim        /* a */
488280304Sjkim        0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x66, 0x80, 0x76, 0xBE, 0xAD,
489280304Sjkim        0x20, 0x88,
490280304Sjkim        /* b */
491280304Sjkim        0x65, 0x9E, 0xF8, 0xBA, 0x04, 0x39, 0x16, 0xEE, 0xDE, 0x89, 0x11, 0x70,
492280304Sjkim        0x2B, 0x22,
493280304Sjkim        /* x */
494280304Sjkim        0x09, 0x48, 0x72, 0x39, 0x99, 0x5A, 0x5E, 0xE7, 0x6B, 0x55, 0xF9, 0xC2,
495280304Sjkim        0xF0, 0x98,
496280304Sjkim        /* y */
497280304Sjkim        0xa8, 0x9c, 0xe5, 0xaf, 0x87, 0x24, 0xc0, 0xa2, 0x3e, 0x0e, 0x0f, 0xf7,
498280304Sjkim        0x75, 0x00,
499280304Sjkim        /* order */
500280304Sjkim        0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x76, 0x28, 0xDF, 0xAC, 0x65,
501280304Sjkim        0x61, 0xC5
502280304Sjkim    }
503280304Sjkim};
504238405Sjkim
505280304Sjkimstatic const struct {
506280304Sjkim    EC_CURVE_DATA h;
507280304Sjkim    unsigned char data[20 + 14 * 6];
508280304Sjkim} _EC_SECG_PRIME_112R2 = {
509280304Sjkim    {
510280304Sjkim        NID_X9_62_prime_field, 20, 14, 4
511280304Sjkim    },
512280304Sjkim    {
513280304Sjkim        /* seed */
514280304Sjkim        0x00, 0x27, 0x57, 0xA1, 0x11, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61,
515280304Sjkim        0x51, 0x75, 0x53, 0x16, 0xC0, 0x5E, 0x0B, 0xD4,
516280304Sjkim        /* p */
517280304Sjkim        0xDB, 0x7C, 0x2A, 0xBF, 0x62, 0xE3, 0x5E, 0x66, 0x80, 0x76, 0xBE, 0xAD,
518280304Sjkim        0x20, 0x8B,
519280304Sjkim        /* a */
520280304Sjkim        0x61, 0x27, 0xC2, 0x4C, 0x05, 0xF3, 0x8A, 0x0A, 0xAA, 0xF6, 0x5C, 0x0E,
521280304Sjkim        0xF0, 0x2C,
522280304Sjkim        /* b */
523280304Sjkim        0x51, 0xDE, 0xF1, 0x81, 0x5D, 0xB5, 0xED, 0x74, 0xFC, 0xC3, 0x4C, 0x85,
524280304Sjkim        0xD7, 0x09,
525280304Sjkim        /* x */
526280304Sjkim        0x4B, 0xA3, 0x0A, 0xB5, 0xE8, 0x92, 0xB4, 0xE1, 0x64, 0x9D, 0xD0, 0x92,
527280304Sjkim        0x86, 0x43,
528280304Sjkim        /* y */
529280304Sjkim        0xad, 0xcd, 0x46, 0xf5, 0x88, 0x2e, 0x37, 0x47, 0xde, 0xf3, 0x6e, 0x95,
530280304Sjkim        0x6e, 0x97,
531280304Sjkim        /* order */
532280304Sjkim        0x36, 0xDF, 0x0A, 0xAF, 0xD8, 0xB8, 0xD7, 0x59, 0x7C, 0xA1, 0x05, 0x20,
533280304Sjkim        0xD0, 0x4B
534280304Sjkim    }
535280304Sjkim};
536160814Ssimon
537280304Sjkimstatic const struct {
538280304Sjkim    EC_CURVE_DATA h;
539280304Sjkim    unsigned char data[20 + 16 * 6];
540280304Sjkim} _EC_SECG_PRIME_128R1 = {
541280304Sjkim    {
542280304Sjkim        NID_X9_62_prime_field, 20, 16, 1
543280304Sjkim    },
544280304Sjkim    {
545280304Sjkim        /* seed */
546280304Sjkim        0x00, 0x0E, 0x0D, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75,
547280304Sjkim        0x0C, 0xC0, 0x3A, 0x44, 0x73, 0xD0, 0x36, 0x79,
548280304Sjkim        /* p */
549280304Sjkim        0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
550280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF,
551280304Sjkim        /* a */
552280304Sjkim        0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
553280304Sjkim        0xFF, 0xFF, 0xFF, 0xFC,
554280304Sjkim        /* b */
555280304Sjkim        0xE8, 0x75, 0x79, 0xC1, 0x10, 0x79, 0xF4, 0x3D, 0xD8, 0x24, 0x99, 0x3C,
556280304Sjkim        0x2C, 0xEE, 0x5E, 0xD3,
557280304Sjkim        /* x */
558280304Sjkim        0x16, 0x1F, 0xF7, 0x52, 0x8B, 0x89, 0x9B, 0x2D, 0x0C, 0x28, 0x60, 0x7C,
559280304Sjkim        0xA5, 0x2C, 0x5B, 0x86,
560280304Sjkim        /* y */
561280304Sjkim        0xcf, 0x5a, 0xc8, 0x39, 0x5b, 0xaf, 0xeb, 0x13, 0xc0, 0x2d, 0xa2, 0x92,
562280304Sjkim        0xdd, 0xed, 0x7a, 0x83,
563280304Sjkim        /* order */
564280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x75, 0xA3, 0x0D, 0x1B,
565280304Sjkim        0x90, 0x38, 0xA1, 0x15
566280304Sjkim    }
567280304Sjkim};
568238405Sjkim
569280304Sjkimstatic const struct {
570280304Sjkim    EC_CURVE_DATA h;
571280304Sjkim    unsigned char data[20 + 16 * 6];
572280304Sjkim} _EC_SECG_PRIME_128R2 = {
573280304Sjkim    {
574280304Sjkim        NID_X9_62_prime_field, 20, 16, 4
575280304Sjkim    },
576280304Sjkim    {
577280304Sjkim        /* seed */
578280304Sjkim        0x00, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75, 0x12, 0xD8,
579280304Sjkim        0xF0, 0x34, 0x31, 0xFC, 0xE6, 0x3B, 0x88, 0xF4,
580280304Sjkim        /* p */
581280304Sjkim        0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
582280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF,
583280304Sjkim        /* a */
584280304Sjkim        0xD6, 0x03, 0x19, 0x98, 0xD1, 0xB3, 0xBB, 0xFE, 0xBF, 0x59, 0xCC, 0x9B,
585280304Sjkim        0xBF, 0xF9, 0xAE, 0xE1,
586280304Sjkim        /* b */
587280304Sjkim        0x5E, 0xEE, 0xFC, 0xA3, 0x80, 0xD0, 0x29, 0x19, 0xDC, 0x2C, 0x65, 0x58,
588280304Sjkim        0xBB, 0x6D, 0x8A, 0x5D,
589280304Sjkim        /* x */
590280304Sjkim        0x7B, 0x6A, 0xA5, 0xD8, 0x5E, 0x57, 0x29, 0x83, 0xE6, 0xFB, 0x32, 0xA7,
591280304Sjkim        0xCD, 0xEB, 0xC1, 0x40,
592280304Sjkim        /* y */
593280304Sjkim        0x27, 0xb6, 0x91, 0x6a, 0x89, 0x4d, 0x3a, 0xee, 0x71, 0x06, 0xfe, 0x80,
594280304Sjkim        0x5f, 0xc3, 0x4b, 0x44,
595280304Sjkim        /* order */
596280304Sjkim        0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xBE, 0x00, 0x24, 0x72,
597280304Sjkim        0x06, 0x13, 0xB5, 0xA3
598280304Sjkim    }
599280304Sjkim};
600160814Ssimon
601280304Sjkimstatic const struct {
602280304Sjkim    EC_CURVE_DATA h;
603280304Sjkim    unsigned char data[0 + 21 * 6];
604280304Sjkim} _EC_SECG_PRIME_160K1 = {
605280304Sjkim    {
606280304Sjkim        NID_X9_62_prime_field, 0, 21, 1
607280304Sjkim    },
608280304Sjkim    {
609280304Sjkim        /* no seed */
610280304Sjkim        /* p */
611280304Sjkim        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
612280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xAC, 0x73,
613280304Sjkim        /* a */
614280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
615280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
616280304Sjkim        /* b */
617280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
618280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
619280304Sjkim        /* x */
620280304Sjkim        0x00, 0x3B, 0x4C, 0x38, 0x2C, 0xE3, 0x7A, 0xA1, 0x92, 0xA4, 0x01, 0x9E,
621280304Sjkim        0x76, 0x30, 0x36, 0xF4, 0xF5, 0xDD, 0x4D, 0x7E, 0xBB,
622280304Sjkim        /* y */
623280304Sjkim        0x00, 0x93, 0x8c, 0xf9, 0x35, 0x31, 0x8f, 0xdc, 0xed, 0x6b, 0xc2, 0x82,
624280304Sjkim        0x86, 0x53, 0x17, 0x33, 0xc3, 0xf0, 0x3c, 0x4f, 0xee,
625280304Sjkim        /* order */
626280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xB8,
627280304Sjkim        0xFA, 0x16, 0xDF, 0xAB, 0x9A, 0xCA, 0x16, 0xB6, 0xB3
628280304Sjkim    }
629280304Sjkim};
630238405Sjkim
631280304Sjkimstatic const struct {
632280304Sjkim    EC_CURVE_DATA h;
633280304Sjkim    unsigned char data[20 + 21 * 6];
634280304Sjkim} _EC_SECG_PRIME_160R1 = {
635280304Sjkim    {
636280304Sjkim        NID_X9_62_prime_field, 20, 21, 1
637280304Sjkim    },
638280304Sjkim    {
639280304Sjkim        /* seed */
640280304Sjkim        0x10, 0x53, 0xCD, 0xE4, 0x2C, 0x14, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
641280304Sjkim        0x15, 0x17, 0x53, 0x3B, 0xF3, 0xF8, 0x33, 0x45,
642280304Sjkim        /* p */
643280304Sjkim        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
644280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
645280304Sjkim        /* a */
646280304Sjkim        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
647280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFC,
648280304Sjkim        /* b */
649280304Sjkim        0x00, 0x1C, 0x97, 0xBE, 0xFC, 0x54, 0xBD, 0x7A, 0x8B, 0x65, 0xAC, 0xF8,
650280304Sjkim        0x9F, 0x81, 0xD4, 0xD4, 0xAD, 0xC5, 0x65, 0xFA, 0x45,
651280304Sjkim        /* x */
652280304Sjkim        0x00, 0x4A, 0x96, 0xB5, 0x68, 0x8E, 0xF5, 0x73, 0x28, 0x46, 0x64, 0x69,
653280304Sjkim        0x89, 0x68, 0xC3, 0x8B, 0xB9, 0x13, 0xCB, 0xFC, 0x82,
654280304Sjkim        /* y */
655280304Sjkim        0x00, 0x23, 0xa6, 0x28, 0x55, 0x31, 0x68, 0x94, 0x7d, 0x59, 0xdc, 0xc9,
656280304Sjkim        0x12, 0x04, 0x23, 0x51, 0x37, 0x7a, 0xc5, 0xfb, 0x32,
657280304Sjkim        /* order */
658280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF4,
659280304Sjkim        0xC8, 0xF9, 0x27, 0xAE, 0xD3, 0xCA, 0x75, 0x22, 0x57
660280304Sjkim    }
661280304Sjkim};
662160814Ssimon
663280304Sjkimstatic const struct {
664280304Sjkim    EC_CURVE_DATA h;
665280304Sjkim    unsigned char data[20 + 21 * 6];
666280304Sjkim} _EC_SECG_PRIME_160R2 = {
667280304Sjkim    {
668280304Sjkim        NID_X9_62_prime_field, 20, 21, 1
669280304Sjkim    },
670280304Sjkim    {
671280304Sjkim        /* seed */
672280304Sjkim        0xB9, 0x9B, 0x99, 0xB0, 0x99, 0xB3, 0x23, 0xE0, 0x27, 0x09, 0xA4, 0xD6,
673280304Sjkim        0x96, 0xE6, 0x76, 0x87, 0x56, 0x15, 0x17, 0x51,
674280304Sjkim        /* p */
675280304Sjkim        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
676280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xAC, 0x73,
677280304Sjkim        /* a */
678280304Sjkim        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
679280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xAC, 0x70,
680280304Sjkim        /* b */
681280304Sjkim        0x00, 0xB4, 0xE1, 0x34, 0xD3, 0xFB, 0x59, 0xEB, 0x8B, 0xAB, 0x57, 0x27,
682280304Sjkim        0x49, 0x04, 0x66, 0x4D, 0x5A, 0xF5, 0x03, 0x88, 0xBA,
683280304Sjkim        /* x */
684280304Sjkim        0x00, 0x52, 0xDC, 0xB0, 0x34, 0x29, 0x3A, 0x11, 0x7E, 0x1F, 0x4F, 0xF1,
685280304Sjkim        0x1B, 0x30, 0xF7, 0x19, 0x9D, 0x31, 0x44, 0xCE, 0x6D,
686280304Sjkim        /* y */
687280304Sjkim        0x00, 0xfe, 0xaf, 0xfe, 0xf2, 0xe3, 0x31, 0xf2, 0x96, 0xe0, 0x71, 0xfa,
688280304Sjkim        0x0d, 0xf9, 0x98, 0x2c, 0xfe, 0xa7, 0xd4, 0x3f, 0x2e,
689280304Sjkim        /* order */
690280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35,
691280304Sjkim        0x1E, 0xE7, 0x86, 0xA8, 0x18, 0xF3, 0xA1, 0xA1, 0x6B
692280304Sjkim    }
693280304Sjkim};
694238405Sjkim
695280304Sjkimstatic const struct {
696280304Sjkim    EC_CURVE_DATA h;
697280304Sjkim    unsigned char data[0 + 24 * 6];
698280304Sjkim} _EC_SECG_PRIME_192K1 = {
699280304Sjkim    {
700280304Sjkim        NID_X9_62_prime_field, 0, 24, 1
701280304Sjkim    },
702280304Sjkim    {
703280304Sjkim        /* no seed */
704280304Sjkim        /* p */
705280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
706280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xEE, 0x37,
707280304Sjkim        /* a */
708280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
709280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
710280304Sjkim        /* b */
711280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
712280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
713280304Sjkim        /* x */
714280304Sjkim        0xDB, 0x4F, 0xF1, 0x0E, 0xC0, 0x57, 0xE9, 0xAE, 0x26, 0xB0, 0x7D, 0x02,
715280304Sjkim        0x80, 0xB7, 0xF4, 0x34, 0x1D, 0xA5, 0xD1, 0xB1, 0xEA, 0xE0, 0x6C, 0x7D,
716280304Sjkim        /* y */
717280304Sjkim        0x9b, 0x2f, 0x2f, 0x6d, 0x9c, 0x56, 0x28, 0xa7, 0x84, 0x41, 0x63, 0xd0,
718280304Sjkim        0x15, 0xbe, 0x86, 0x34, 0x40, 0x82, 0xaa, 0x88, 0xd9, 0x5e, 0x2f, 0x9d,
719280304Sjkim        /* order */
720280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
721280304Sjkim        0x26, 0xF2, 0xFC, 0x17, 0x0F, 0x69, 0x46, 0x6A, 0x74, 0xDE, 0xFD, 0x8D
722280304Sjkim    }
723280304Sjkim};
724160814Ssimon
725280304Sjkimstatic const struct {
726280304Sjkim    EC_CURVE_DATA h;
727280304Sjkim    unsigned char data[0 + 29 * 6];
728280304Sjkim} _EC_SECG_PRIME_224K1 = {
729280304Sjkim    {
730280304Sjkim        NID_X9_62_prime_field, 0, 29, 1
731280304Sjkim    },
732280304Sjkim    {
733280304Sjkim        /* no seed */
734280304Sjkim        /* p */
735280304Sjkim        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
736280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
737280304Sjkim        0xFE, 0xFF, 0xFF, 0xE5, 0x6D,
738280304Sjkim        /* a */
739280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
740280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
741280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00,
742280304Sjkim        /* b */
743280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
744280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
745280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x05,
746280304Sjkim        /* x */
747280304Sjkim        0x00, 0xA1, 0x45, 0x5B, 0x33, 0x4D, 0xF0, 0x99, 0xDF, 0x30, 0xFC, 0x28,
748280304Sjkim        0xA1, 0x69, 0xA4, 0x67, 0xE9, 0xE4, 0x70, 0x75, 0xA9, 0x0F, 0x7E, 0x65,
749280304Sjkim        0x0E, 0xB6, 0xB7, 0xA4, 0x5C,
750280304Sjkim        /* y */
751280304Sjkim        0x00, 0x7e, 0x08, 0x9f, 0xed, 0x7f, 0xba, 0x34, 0x42, 0x82, 0xca, 0xfb,
752280304Sjkim        0xd6, 0xf7, 0xe3, 0x19, 0xf7, 0xc0, 0xb0, 0xbd, 0x59, 0xe2, 0xca, 0x4b,
753280304Sjkim        0xdb, 0x55, 0x6d, 0x61, 0xa5,
754280304Sjkim        /* order */
755280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
756280304Sjkim        0x00, 0x00, 0x01, 0xDC, 0xE8, 0xD2, 0xEC, 0x61, 0x84, 0xCA, 0xF0, 0xA9,
757280304Sjkim        0x71, 0x76, 0x9F, 0xB1, 0xF7
758280304Sjkim    }
759280304Sjkim};
760160814Ssimon
761280304Sjkimstatic const struct {
762280304Sjkim    EC_CURVE_DATA h;
763280304Sjkim    unsigned char data[0 + 32 * 6];
764280304Sjkim} _EC_SECG_PRIME_256K1 = {
765280304Sjkim    {
766280304Sjkim        NID_X9_62_prime_field, 0, 32, 1
767280304Sjkim    },
768280304Sjkim    {
769280304Sjkim        /* no seed */
770280304Sjkim        /* p */
771280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
772280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
773280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0x2F,
774280304Sjkim        /* a */
775280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
776280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
777280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
778280304Sjkim        /* b */
779280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
780280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
781280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
782280304Sjkim        /* x */
783280304Sjkim        0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, 0x55, 0xA0, 0x62, 0x95,
784280304Sjkim        0xCE, 0x87, 0x0B, 0x07, 0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9,
785280304Sjkim        0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, 0x98,
786280304Sjkim        /* y */
787280304Sjkim        0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc,
788280304Sjkim        0x0e, 0x11, 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19,
789280304Sjkim        0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, 0xd4, 0xb8,
790280304Sjkim        /* order */
791280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
792280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B,
793280304Sjkim        0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41
794280304Sjkim    }
795280304Sjkim};
796238405Sjkim
797160814Ssimon/* some wap/wtls curves */
798280304Sjkimstatic const struct {
799280304Sjkim    EC_CURVE_DATA h;
800280304Sjkim    unsigned char data[0 + 15 * 6];
801280304Sjkim} _EC_WTLS_8 = {
802280304Sjkim    {
803280304Sjkim        NID_X9_62_prime_field, 0, 15, 1
804280304Sjkim    },
805280304Sjkim    {
806280304Sjkim        /* no seed */
807280304Sjkim        /* p */
808280304Sjkim        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
809280304Sjkim        0xFF, 0xFD, 0xE7,
810280304Sjkim        /* a */
811280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
812280304Sjkim        0x00, 0x00, 0x00,
813280304Sjkim        /* b */
814280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
815280304Sjkim        0x00, 0x00, 0x03,
816280304Sjkim        /* x */
817280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
818280304Sjkim        0x00, 0x00, 0x01,
819280304Sjkim        /* y */
820280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
821280304Sjkim        0x00, 0x00, 0x02,
822280304Sjkim        /* order */
823280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xEC, 0xEA, 0x55, 0x1A,
824280304Sjkim        0xD8, 0x37, 0xE9
825280304Sjkim    }
826280304Sjkim};
827160814Ssimon
828280304Sjkimstatic const struct {
829280304Sjkim    EC_CURVE_DATA h;
830280304Sjkim    unsigned char data[0 + 21 * 6];
831280304Sjkim} _EC_WTLS_9 = {
832280304Sjkim    {
833280304Sjkim        NID_X9_62_prime_field, 0, 21, 1
834280304Sjkim    },
835280304Sjkim    {
836280304Sjkim        /* no seed */
837280304Sjkim        /* p */
838280304Sjkim        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
839280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x80, 0x8F,
840280304Sjkim        /* a */
841280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
842280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
843280304Sjkim        /* b */
844280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
845280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
846280304Sjkim        /* x */
847280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
848280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
849280304Sjkim        /* y */
850280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
851280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
852280304Sjkim        /* order */
853280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xCD,
854280304Sjkim        0xC9, 0x8A, 0xE0, 0xE2, 0xDE, 0x57, 0x4A, 0xBF, 0x33
855280304Sjkim    }
856280304Sjkim};
857160814Ssimon
858280304Sjkimstatic const struct {
859280304Sjkim    EC_CURVE_DATA h;
860280304Sjkim    unsigned char data[0 + 28 * 6];
861280304Sjkim} _EC_WTLS_12 = {
862280304Sjkim    {
863280304Sjkim        NID_X9_62_prime_field, 0, 28, 1
864280304Sjkim    },
865280304Sjkim    {
866280304Sjkim        /* no seed */
867280304Sjkim        /* p */
868280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
869280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
870280304Sjkim        0x00, 0x00, 0x00, 0x01,
871280304Sjkim        /* a */
872280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
873280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
874280304Sjkim        0xFF, 0xFF, 0xFF, 0xFE,
875280304Sjkim        /* b */
876280304Sjkim        0xB4, 0x05, 0x0A, 0x85, 0x0C, 0x04, 0xB3, 0xAB, 0xF5, 0x41, 0x32, 0x56,
877280304Sjkim        0x50, 0x44, 0xB0, 0xB7, 0xD7, 0xBF, 0xD8, 0xBA, 0x27, 0x0B, 0x39, 0x43,
878280304Sjkim        0x23, 0x55, 0xFF, 0xB4,
879280304Sjkim        /* x */
880280304Sjkim        0xB7, 0x0E, 0x0C, 0xBD, 0x6B, 0xB4, 0xBF, 0x7F, 0x32, 0x13, 0x90, 0xB9,
881280304Sjkim        0x4A, 0x03, 0xC1, 0xD3, 0x56, 0xC2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xD6,
882280304Sjkim        0x11, 0x5C, 0x1D, 0x21,
883280304Sjkim        /* y */
884280304Sjkim        0xbd, 0x37, 0x63, 0x88, 0xb5, 0xf7, 0x23, 0xfb, 0x4c, 0x22, 0xdf, 0xe6,
885280304Sjkim        0xcd, 0x43, 0x75, 0xa0, 0x5a, 0x07, 0x47, 0x64, 0x44, 0xd5, 0x81, 0x99,
886280304Sjkim        0x85, 0x00, 0x7e, 0x34,
887280304Sjkim        /* order */
888280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
889280304Sjkim        0xFF, 0xFF, 0x16, 0xA2, 0xE0, 0xB8, 0xF0, 0x3E, 0x13, 0xDD, 0x29, 0x45,
890280304Sjkim        0x5C, 0x5C, 0x2A, 0x3D
891280304Sjkim    }
892280304Sjkim};
893160814Ssimon
894238405Sjkim#ifndef OPENSSL_NO_EC2M
895238405Sjkim
896160814Ssimon/* characteristic two curves */
897280304Sjkimstatic const struct {
898280304Sjkim    EC_CURVE_DATA h;
899280304Sjkim    unsigned char data[20 + 15 * 6];
900280304Sjkim} _EC_SECG_CHAR2_113R1 = {
901280304Sjkim    {
902280304Sjkim        NID_X9_62_characteristic_two_field, 20, 15, 2
903280304Sjkim    },
904280304Sjkim    {
905280304Sjkim        /* seed */
906280304Sjkim        0x10, 0xE7, 0x23, 0xAB, 0x14, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56, 0x15,
907280304Sjkim        0x17, 0x56, 0xFE, 0xBF, 0x8F, 0xCB, 0x49, 0xA9,
908280304Sjkim        /* p */
909280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
910280304Sjkim        0x00, 0x02, 0x01,
911280304Sjkim        /* a */
912280304Sjkim        0x00, 0x30, 0x88, 0x25, 0x0C, 0xA6, 0xE7, 0xC7, 0xFE, 0x64, 0x9C, 0xE8,
913280304Sjkim        0x58, 0x20, 0xF7,
914280304Sjkim        /* b */
915280304Sjkim        0x00, 0xE8, 0xBE, 0xE4, 0xD3, 0xE2, 0x26, 0x07, 0x44, 0x18, 0x8B, 0xE0,
916280304Sjkim        0xE9, 0xC7, 0x23,
917280304Sjkim        /* x */
918280304Sjkim        0x00, 0x9D, 0x73, 0x61, 0x6F, 0x35, 0xF4, 0xAB, 0x14, 0x07, 0xD7, 0x35,
919280304Sjkim        0x62, 0xC1, 0x0F,
920280304Sjkim        /* y */
921280304Sjkim        0x00, 0xA5, 0x28, 0x30, 0x27, 0x79, 0x58, 0xEE, 0x84, 0xD1, 0x31, 0x5E,
922280304Sjkim        0xD3, 0x18, 0x86,
923280304Sjkim        /* order */
924280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xCC, 0xEC, 0x8A,
925280304Sjkim        0x39, 0xE5, 0x6F
926280304Sjkim    }
927280304Sjkim};
928238405Sjkim
929280304Sjkimstatic const struct {
930280304Sjkim    EC_CURVE_DATA h;
931280304Sjkim    unsigned char data[20 + 15 * 6];
932280304Sjkim} _EC_SECG_CHAR2_113R2 = {
933280304Sjkim    {
934280304Sjkim        NID_X9_62_characteristic_two_field, 20, 15, 2
935280304Sjkim    },
936280304Sjkim    {
937280304Sjkim        /* seed */
938280304Sjkim        0x10, 0xC0, 0xFB, 0x15, 0x76, 0x08, 0x60, 0xDE, 0xF1, 0xEE, 0xF4, 0xD6,
939280304Sjkim        0x96, 0xE6, 0x76, 0x87, 0x56, 0x15, 0x17, 0x5D,
940280304Sjkim        /* p */
941280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
942280304Sjkim        0x00, 0x02, 0x01,
943280304Sjkim        /* a */
944280304Sjkim        0x00, 0x68, 0x99, 0x18, 0xDB, 0xEC, 0x7E, 0x5A, 0x0D, 0xD6, 0xDF, 0xC0,
945280304Sjkim        0xAA, 0x55, 0xC7,
946280304Sjkim        /* b */
947280304Sjkim        0x00, 0x95, 0xE9, 0xA9, 0xEC, 0x9B, 0x29, 0x7B, 0xD4, 0xBF, 0x36, 0xE0,
948280304Sjkim        0x59, 0x18, 0x4F,
949280304Sjkim        /* x */
950280304Sjkim        0x01, 0xA5, 0x7A, 0x6A, 0x7B, 0x26, 0xCA, 0x5E, 0xF5, 0x2F, 0xCD, 0xB8,
951280304Sjkim        0x16, 0x47, 0x97,
952280304Sjkim        /* y */
953280304Sjkim        0x00, 0xB3, 0xAD, 0xC9, 0x4E, 0xD1, 0xFE, 0x67, 0x4C, 0x06, 0xE6, 0x95,
954280304Sjkim        0xBA, 0xBA, 0x1D,
955280304Sjkim        /* order */
956280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x78, 0x9B, 0x24,
957280304Sjkim        0x96, 0xAF, 0x93
958280304Sjkim    }
959280304Sjkim};
960160814Ssimon
961280304Sjkimstatic const struct {
962280304Sjkim    EC_CURVE_DATA h;
963280304Sjkim    unsigned char data[20 + 17 * 6];
964280304Sjkim} _EC_SECG_CHAR2_131R1 = {
965280304Sjkim    {
966280304Sjkim        NID_X9_62_characteristic_two_field, 20, 17, 2
967280304Sjkim    },
968280304Sjkim    {
969280304Sjkim        /* seed */
970280304Sjkim        0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75, 0x98, 0x5B, 0xD3,
971280304Sjkim        0xAD, 0xBA, 0xDA, 0x21, 0xB4, 0x3A, 0x97, 0xE2,
972280304Sjkim        /* p */
973280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
974280304Sjkim        0x00, 0x00, 0x00, 0x01, 0x0D,
975280304Sjkim        /* a */
976280304Sjkim        0x07, 0xA1, 0x1B, 0x09, 0xA7, 0x6B, 0x56, 0x21, 0x44, 0x41, 0x8F, 0xF3,
977280304Sjkim        0xFF, 0x8C, 0x25, 0x70, 0xB8,
978280304Sjkim        /* b */
979280304Sjkim        0x02, 0x17, 0xC0, 0x56, 0x10, 0x88, 0x4B, 0x63, 0xB9, 0xC6, 0xC7, 0x29,
980280304Sjkim        0x16, 0x78, 0xF9, 0xD3, 0x41,
981280304Sjkim        /* x */
982280304Sjkim        0x00, 0x81, 0xBA, 0xF9, 0x1F, 0xDF, 0x98, 0x33, 0xC4, 0x0F, 0x9C, 0x18,
983280304Sjkim        0x13, 0x43, 0x63, 0x83, 0x99,
984280304Sjkim        /* y */
985280304Sjkim        0x07, 0x8C, 0x6E, 0x7E, 0xA3, 0x8C, 0x00, 0x1F, 0x73, 0xC8, 0x13, 0x4B,
986280304Sjkim        0x1B, 0x4E, 0xF9, 0xE1, 0x50,
987280304Sjkim        /* order */
988280304Sjkim        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x31, 0x23, 0x95,
989280304Sjkim        0x3A, 0x94, 0x64, 0xB5, 0x4D
990280304Sjkim    }
991280304Sjkim};
992238405Sjkim
993280304Sjkimstatic const struct {
994280304Sjkim    EC_CURVE_DATA h;
995280304Sjkim    unsigned char data[20 + 17 * 6];
996280304Sjkim} _EC_SECG_CHAR2_131R2 = {
997280304Sjkim    {
998280304Sjkim        NID_X9_62_characteristic_two_field, 20, 17, 2
999280304Sjkim    },
1000280304Sjkim    {
1001280304Sjkim        /* seed */
1002280304Sjkim        0x98, 0x5B, 0xD3, 0xAD, 0xBA, 0xD4, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1003280304Sjkim        0x15, 0x17, 0x5A, 0x21, 0xB4, 0x3A, 0x97, 0xE3,
1004280304Sjkim        /* p */
1005280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1006280304Sjkim        0x00, 0x00, 0x00, 0x01, 0x0D,
1007280304Sjkim        /* a */
1008280304Sjkim        0x03, 0xE5, 0xA8, 0x89, 0x19, 0xD7, 0xCA, 0xFC, 0xBF, 0x41, 0x5F, 0x07,
1009280304Sjkim        0xC2, 0x17, 0x65, 0x73, 0xB2,
1010280304Sjkim        /* b */
1011280304Sjkim        0x04, 0xB8, 0x26, 0x6A, 0x46, 0xC5, 0x56, 0x57, 0xAC, 0x73, 0x4C, 0xE3,
1012280304Sjkim        0x8F, 0x01, 0x8F, 0x21, 0x92,
1013280304Sjkim        /* x */
1014280304Sjkim        0x03, 0x56, 0xDC, 0xD8, 0xF2, 0xF9, 0x50, 0x31, 0xAD, 0x65, 0x2D, 0x23,
1015280304Sjkim        0x95, 0x1B, 0xB3, 0x66, 0xA8,
1016280304Sjkim        /* y */
1017280304Sjkim        0x06, 0x48, 0xF0, 0x6D, 0x86, 0x79, 0x40, 0xA5, 0x36, 0x6D, 0x9E, 0x26,
1018280304Sjkim        0x5D, 0xE9, 0xEB, 0x24, 0x0F,
1019280304Sjkim        /* order */
1020280304Sjkim        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x69, 0x54, 0xA2,
1021280304Sjkim        0x33, 0x04, 0x9B, 0xA9, 0x8F
1022280304Sjkim    }
1023280304Sjkim};
1024160814Ssimon
1025280304Sjkimstatic const struct {
1026280304Sjkim    EC_CURVE_DATA h;
1027280304Sjkim    unsigned char data[0 + 21 * 6];
1028280304Sjkim} _EC_NIST_CHAR2_163K = {
1029280304Sjkim    {
1030280304Sjkim        NID_X9_62_characteristic_two_field, 0, 21, 2
1031280304Sjkim    },
1032280304Sjkim    {
1033280304Sjkim        /* no seed */
1034280304Sjkim        /* p */
1035280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1036280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9,
1037280304Sjkim        /* a */
1038280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1039280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1040280304Sjkim        /* b */
1041280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1042280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1043280304Sjkim        /* x */
1044280304Sjkim        0x02, 0xFE, 0x13, 0xC0, 0x53, 0x7B, 0xBC, 0x11, 0xAC, 0xAA, 0x07, 0xD7,
1045280304Sjkim        0x93, 0xDE, 0x4E, 0x6D, 0x5E, 0x5C, 0x94, 0xEE, 0xE8,
1046280304Sjkim        /* y */
1047280304Sjkim        0x02, 0x89, 0x07, 0x0F, 0xB0, 0x5D, 0x38, 0xFF, 0x58, 0x32, 0x1F, 0x2E,
1048280304Sjkim        0x80, 0x05, 0x36, 0xD5, 0x38, 0xCC, 0xDA, 0xA3, 0xD9,
1049280304Sjkim        /* order */
1050280304Sjkim        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
1051280304Sjkim        0x08, 0xA2, 0xE0, 0xCC, 0x0D, 0x99, 0xF8, 0xA5, 0xEF
1052280304Sjkim    }
1053280304Sjkim};
1054238405Sjkim
1055280304Sjkimstatic const struct {
1056280304Sjkim    EC_CURVE_DATA h;
1057280304Sjkim    unsigned char data[0 + 21 * 6];
1058280304Sjkim} _EC_SECG_CHAR2_163R1 = {
1059280304Sjkim    {
1060280304Sjkim        NID_X9_62_characteristic_two_field, 0, 21, 2
1061280304Sjkim    },
1062280304Sjkim    {
1063280304Sjkim        /* no seed */
1064280304Sjkim# if 0
1065280304Sjkim        /*
1066280304Sjkim        * The algorithm used to derive the curve parameters from the seed
1067280304Sjkim        * used here is slightly different than the algorithm described in
1068280304Sjkim        * X9.62 .
1069280304Sjkim        */
1070280304Sjkim        0x24, 0xB7, 0xB1, 0x37, 0xC8, 0xA1, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75,
1071280304Sjkim        0x61, 0x51, 0x75, 0x6F, 0xD0, 0xDA, 0x2E, 0x5C,
1072280304Sjkim# endif
1073280304Sjkim        /* p */
1074280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1075280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9,
1076280304Sjkim        /* a */
1077280304Sjkim        0x07, 0xB6, 0x88, 0x2C, 0xAA, 0xEF, 0xA8, 0x4F, 0x95, 0x54, 0xFF, 0x84,
1078280304Sjkim        0x28, 0xBD, 0x88, 0xE2, 0x46, 0xD2, 0x78, 0x2A, 0xE2,
1079280304Sjkim        /* b */
1080280304Sjkim        0x07, 0x13, 0x61, 0x2D, 0xCD, 0xDC, 0xB4, 0x0A, 0xAB, 0x94, 0x6B, 0xDA,
1081280304Sjkim        0x29, 0xCA, 0x91, 0xF7, 0x3A, 0xF9, 0x58, 0xAF, 0xD9,
1082280304Sjkim        /* x */
1083280304Sjkim        0x03, 0x69, 0x97, 0x96, 0x97, 0xAB, 0x43, 0x89, 0x77, 0x89, 0x56, 0x67,
1084280304Sjkim        0x89, 0x56, 0x7F, 0x78, 0x7A, 0x78, 0x76, 0xA6, 0x54,
1085280304Sjkim        /* y */
1086280304Sjkim        0x00, 0x43, 0x5E, 0xDB, 0x42, 0xEF, 0xAF, 0xB2, 0x98, 0x9D, 0x51, 0xFE,
1087280304Sjkim        0xFC, 0xE3, 0xC8, 0x09, 0x88, 0xF4, 0x1F, 0xF8, 0x83,
1088280304Sjkim        /* order */
1089280304Sjkim        0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x48,
1090280304Sjkim        0xAA, 0xB6, 0x89, 0xC2, 0x9C, 0xA7, 0x10, 0x27, 0x9B
1091280304Sjkim    }
1092280304Sjkim};
1093160814Ssimon
1094280304Sjkimstatic const struct {
1095280304Sjkim    EC_CURVE_DATA h;
1096280304Sjkim    unsigned char data[0 + 21 * 6];
1097280304Sjkim} _EC_NIST_CHAR2_163B = {
1098280304Sjkim    {
1099280304Sjkim        NID_X9_62_characteristic_two_field, 0, 21, 2
1100280304Sjkim    },
1101280304Sjkim    {
1102280304Sjkim        /* no seed */
1103280304Sjkim# if 0
1104280304Sjkim        /*
1105280304Sjkim        * The seed here was used to created the curve parameters in normal
1106280304Sjkim        * basis representation (and not the polynomial representation used
1107280304Sjkim        * here)
1108280304Sjkim        */
1109280304Sjkim        0x85, 0xE2, 0x5B, 0xFE, 0x5C, 0x86, 0x22, 0x6C, 0xDB, 0x12, 0x01, 0x6F,
1110280304Sjkim        0x75, 0x53, 0xF9, 0xD0, 0xE6, 0x93, 0xA2, 0x68,
1111280304Sjkim# endif
1112280304Sjkim        /* p */
1113280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1114280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9,
1115280304Sjkim        /* a */
1116280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1117280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1118280304Sjkim        /* b */
1119280304Sjkim        0x02, 0x0A, 0x60, 0x19, 0x07, 0xB8, 0xC9, 0x53, 0xCA, 0x14, 0x81, 0xEB,
1120280304Sjkim        0x10, 0x51, 0x2F, 0x78, 0x74, 0x4A, 0x32, 0x05, 0xFD,
1121280304Sjkim        /* x */
1122280304Sjkim        0x03, 0xF0, 0xEB, 0xA1, 0x62, 0x86, 0xA2, 0xD5, 0x7E, 0xA0, 0x99, 0x11,
1123280304Sjkim        0x68, 0xD4, 0x99, 0x46, 0x37, 0xE8, 0x34, 0x3E, 0x36,
1124280304Sjkim        /* y */
1125280304Sjkim        0x00, 0xD5, 0x1F, 0xBC, 0x6C, 0x71, 0xA0, 0x09, 0x4F, 0xA2, 0xCD, 0xD5,
1126280304Sjkim        0x45, 0xB1, 0x1C, 0x5C, 0x0C, 0x79, 0x73, 0x24, 0xF1,
1127280304Sjkim        /* order */
1128280304Sjkim        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x92,
1129280304Sjkim        0xFE, 0x77, 0xE7, 0x0C, 0x12, 0xA4, 0x23, 0x4C, 0x33
1130280304Sjkim    }
1131280304Sjkim};
1132238405Sjkim
1133280304Sjkimstatic const struct {
1134280304Sjkim    EC_CURVE_DATA h;
1135280304Sjkim    unsigned char data[20 + 25 * 6];
1136280304Sjkim} _EC_SECG_CHAR2_193R1 = {
1137280304Sjkim    {
1138280304Sjkim        NID_X9_62_characteristic_two_field, 20, 25, 2
1139280304Sjkim    },
1140280304Sjkim    {
1141280304Sjkim        /* seed */
1142280304Sjkim        0x10, 0x3F, 0xAE, 0xC7, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51,
1143280304Sjkim        0x75, 0x77, 0x7F, 0xC5, 0xB1, 0x91, 0xEF, 0x30,
1144280304Sjkim        /* p */
1145280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1146280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
1147280304Sjkim        0x01,
1148280304Sjkim        /* a */
1149280304Sjkim        0x00, 0x17, 0x85, 0x8F, 0xEB, 0x7A, 0x98, 0x97, 0x51, 0x69, 0xE1, 0x71,
1150280304Sjkim        0xF7, 0x7B, 0x40, 0x87, 0xDE, 0x09, 0x8A, 0xC8, 0xA9, 0x11, 0xDF, 0x7B,
1151280304Sjkim        0x01,
1152280304Sjkim        /* b */
1153280304Sjkim        0x00, 0xFD, 0xFB, 0x49, 0xBF, 0xE6, 0xC3, 0xA8, 0x9F, 0xAC, 0xAD, 0xAA,
1154280304Sjkim        0x7A, 0x1E, 0x5B, 0xBC, 0x7C, 0xC1, 0xC2, 0xE5, 0xD8, 0x31, 0x47, 0x88,
1155280304Sjkim        0x14,
1156280304Sjkim        /* x */
1157280304Sjkim        0x01, 0xF4, 0x81, 0xBC, 0x5F, 0x0F, 0xF8, 0x4A, 0x74, 0xAD, 0x6C, 0xDF,
1158280304Sjkim        0x6F, 0xDE, 0xF4, 0xBF, 0x61, 0x79, 0x62, 0x53, 0x72, 0xD8, 0xC0, 0xC5,
1159280304Sjkim        0xE1,
1160280304Sjkim        /* y */
1161280304Sjkim        0x00, 0x25, 0xE3, 0x99, 0xF2, 0x90, 0x37, 0x12, 0xCC, 0xF3, 0xEA, 0x9E,
1162280304Sjkim        0x3A, 0x1A, 0xD1, 0x7F, 0xB0, 0xB3, 0x20, 0x1B, 0x6A, 0xF7, 0xCE, 0x1B,
1163280304Sjkim        0x05,
1164280304Sjkim        /* order */
1165280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1166280304Sjkim        0x00, 0xC7, 0xF3, 0x4A, 0x77, 0x8F, 0x44, 0x3A, 0xCC, 0x92, 0x0E, 0xBA,
1167280304Sjkim        0x49
1168280304Sjkim    }
1169280304Sjkim};
1170160814Ssimon
1171280304Sjkimstatic const struct {
1172280304Sjkim    EC_CURVE_DATA h;
1173280304Sjkim    unsigned char data[20 + 25 * 6];
1174280304Sjkim} _EC_SECG_CHAR2_193R2 = {
1175280304Sjkim    {
1176280304Sjkim        NID_X9_62_characteristic_two_field, 20, 25, 2
1177280304Sjkim    },
1178280304Sjkim    {
1179280304Sjkim        /* seed */
1180280304Sjkim        0x10, 0xB7, 0xB4, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56, 0x15, 0x17, 0x51,
1181280304Sjkim        0x37, 0xC8, 0xA1, 0x6F, 0xD0, 0xDA, 0x22, 0x11,
1182280304Sjkim        /* p */
1183280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1184280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
1185280304Sjkim        0x01,
1186280304Sjkim        /* a */
1187280304Sjkim        0x01, 0x63, 0xF3, 0x5A, 0x51, 0x37, 0xC2, 0xCE, 0x3E, 0xA6, 0xED, 0x86,
1188280304Sjkim        0x67, 0x19, 0x0B, 0x0B, 0xC4, 0x3E, 0xCD, 0x69, 0x97, 0x77, 0x02, 0x70,
1189280304Sjkim        0x9B,
1190280304Sjkim        /* b */
1191280304Sjkim        0x00, 0xC9, 0xBB, 0x9E, 0x89, 0x27, 0xD4, 0xD6, 0x4C, 0x37, 0x7E, 0x2A,
1192280304Sjkim        0xB2, 0x85, 0x6A, 0x5B, 0x16, 0xE3, 0xEF, 0xB7, 0xF6, 0x1D, 0x43, 0x16,
1193280304Sjkim        0xAE,
1194280304Sjkim        /* x */
1195280304Sjkim        0x00, 0xD9, 0xB6, 0x7D, 0x19, 0x2E, 0x03, 0x67, 0xC8, 0x03, 0xF3, 0x9E,
1196280304Sjkim        0x1A, 0x7E, 0x82, 0xCA, 0x14, 0xA6, 0x51, 0x35, 0x0A, 0xAE, 0x61, 0x7E,
1197280304Sjkim        0x8F,
1198280304Sjkim        /* y */
1199280304Sjkim        0x01, 0xCE, 0x94, 0x33, 0x56, 0x07, 0xC3, 0x04, 0xAC, 0x29, 0xE7, 0xDE,
1200280304Sjkim        0xFB, 0xD9, 0xCA, 0x01, 0xF5, 0x96, 0xF9, 0x27, 0x22, 0x4C, 0xDE, 0xCF,
1201280304Sjkim        0x6C,
1202280304Sjkim        /* order */
1203280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1204280304Sjkim        0x01, 0x5A, 0xAB, 0x56, 0x1B, 0x00, 0x54, 0x13, 0xCC, 0xD4, 0xEE, 0x99,
1205280304Sjkim        0xD5
1206280304Sjkim    }
1207280304Sjkim};
1208160814Ssimon
1209280304Sjkimstatic const struct {
1210280304Sjkim    EC_CURVE_DATA h;
1211280304Sjkim    unsigned char data[0 + 30 * 6];
1212280304Sjkim} _EC_NIST_CHAR2_233K = {
1213280304Sjkim    {
1214280304Sjkim        NID_X9_62_characteristic_two_field, 0, 30, 4
1215280304Sjkim    },
1216280304Sjkim    {
1217280304Sjkim        /* no seed */
1218280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1219280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
1220280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1221280304Sjkim        /* a */
1222280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1223280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1224280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1225280304Sjkim        /* b */
1226280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1227280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1228280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1229280304Sjkim        /* x */
1230280304Sjkim        0x01, 0x72, 0x32, 0xBA, 0x85, 0x3A, 0x7E, 0x73, 0x1A, 0xF1, 0x29, 0xF2,
1231280304Sjkim        0x2F, 0xF4, 0x14, 0x95, 0x63, 0xA4, 0x19, 0xC2, 0x6B, 0xF5, 0x0A, 0x4C,
1232280304Sjkim        0x9D, 0x6E, 0xEF, 0xAD, 0x61, 0x26,
1233280304Sjkim        /* y */
1234280304Sjkim        0x01, 0xDB, 0x53, 0x7D, 0xEC, 0xE8, 0x19, 0xB7, 0xF7, 0x0F, 0x55, 0x5A,
1235280304Sjkim        0x67, 0xC4, 0x27, 0xA8, 0xCD, 0x9B, 0xF1, 0x8A, 0xEB, 0x9B, 0x56, 0xE0,
1236280304Sjkim        0xC1, 0x10, 0x56, 0xFA, 0xE6, 0xA3,
1237280304Sjkim        /* order */
1238280304Sjkim        0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1239280304Sjkim        0x00, 0x00, 0x00, 0x06, 0x9D, 0x5B, 0xB9, 0x15, 0xBC, 0xD4, 0x6E, 0xFB,
1240280304Sjkim        0x1A, 0xD5, 0xF1, 0x73, 0xAB, 0xDF
1241280304Sjkim    }
1242280304Sjkim};
1243160814Ssimon
1244280304Sjkimstatic const struct {
1245280304Sjkim    EC_CURVE_DATA h;
1246280304Sjkim    unsigned char data[20 + 30 * 6];
1247280304Sjkim} _EC_NIST_CHAR2_233B = {
1248280304Sjkim    {
1249280304Sjkim        NID_X9_62_characteristic_two_field, 20, 30, 2
1250280304Sjkim    },
1251280304Sjkim    {
1252280304Sjkim        /* seed */
1253280304Sjkim        0x74, 0xD5, 0x9F, 0xF0, 0x7F, 0x6B, 0x41, 0x3D, 0x0E, 0xA1, 0x4B, 0x34,
1254280304Sjkim        0x4B, 0x20, 0xA2, 0xDB, 0x04, 0x9B, 0x50, 0xC3,
1255280304Sjkim        /* p */
1256280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1257280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
1258280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1259280304Sjkim        /* a */
1260280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1261280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1262280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1263280304Sjkim        /* b */
1264280304Sjkim        0x00, 0x66, 0x64, 0x7E, 0xDE, 0x6C, 0x33, 0x2C, 0x7F, 0x8C, 0x09, 0x23,
1265280304Sjkim        0xBB, 0x58, 0x21, 0x3B, 0x33, 0x3B, 0x20, 0xE9, 0xCE, 0x42, 0x81, 0xFE,
1266280304Sjkim        0x11, 0x5F, 0x7D, 0x8F, 0x90, 0xAD,
1267280304Sjkim        /* x */
1268280304Sjkim        0x00, 0xFA, 0xC9, 0xDF, 0xCB, 0xAC, 0x83, 0x13, 0xBB, 0x21, 0x39, 0xF1,
1269280304Sjkim        0xBB, 0x75, 0x5F, 0xEF, 0x65, 0xBC, 0x39, 0x1F, 0x8B, 0x36, 0xF8, 0xF8,
1270280304Sjkim        0xEB, 0x73, 0x71, 0xFD, 0x55, 0x8B,
1271280304Sjkim        /* y */
1272280304Sjkim        0x01, 0x00, 0x6A, 0x08, 0xA4, 0x19, 0x03, 0x35, 0x06, 0x78, 0xE5, 0x85,
1273280304Sjkim        0x28, 0xBE, 0xBF, 0x8A, 0x0B, 0xEF, 0xF8, 0x67, 0xA7, 0xCA, 0x36, 0x71,
1274280304Sjkim        0x6F, 0x7E, 0x01, 0xF8, 0x10, 0x52,
1275280304Sjkim        /* order */
1276280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1277280304Sjkim        0x00, 0x00, 0x00, 0x13, 0xE9, 0x74, 0xE7, 0x2F, 0x8A, 0x69, 0x22, 0x03,
1278280304Sjkim        0x1D, 0x26, 0x03, 0xCF, 0xE0, 0xD7
1279280304Sjkim    }
1280280304Sjkim};
1281160814Ssimon
1282280304Sjkimstatic const struct {
1283280304Sjkim    EC_CURVE_DATA h;
1284280304Sjkim    unsigned char data[0 + 30 * 6];
1285280304Sjkim} _EC_SECG_CHAR2_239K1 = {
1286280304Sjkim    {
1287280304Sjkim        NID_X9_62_characteristic_two_field, 0, 30, 4
1288280304Sjkim    },
1289280304Sjkim    {
1290280304Sjkim        /* no seed */
1291280304Sjkim        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
1292280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1293280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1294280304Sjkim        /* a */
1295280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1296280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1297280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1298280304Sjkim        /* b */
1299280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1300280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1301280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1302280304Sjkim        /* x */
1303280304Sjkim        0x29, 0xA0, 0xB6, 0xA8, 0x87, 0xA9, 0x83, 0xE9, 0x73, 0x09, 0x88, 0xA6,
1304280304Sjkim        0x87, 0x27, 0xA8, 0xB2, 0xD1, 0x26, 0xC4, 0x4C, 0xC2, 0xCC, 0x7B, 0x2A,
1305280304Sjkim        0x65, 0x55, 0x19, 0x30, 0x35, 0xDC,
1306280304Sjkim        /* y */
1307280304Sjkim        0x76, 0x31, 0x08, 0x04, 0xF1, 0x2E, 0x54, 0x9B, 0xDB, 0x01, 0x1C, 0x10,
1308280304Sjkim        0x30, 0x89, 0xE7, 0x35, 0x10, 0xAC, 0xB2, 0x75, 0xFC, 0x31, 0x2A, 0x5D,
1309280304Sjkim        0xC6, 0xB7, 0x65, 0x53, 0xF0, 0xCA,
1310280304Sjkim        /* order */
1311280304Sjkim        0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1312280304Sjkim        0x00, 0x00, 0x00, 0x5A, 0x79, 0xFE, 0xC6, 0x7C, 0xB6, 0xE9, 0x1F, 0x1C,
1313280304Sjkim        0x1D, 0xA8, 0x00, 0xE4, 0x78, 0xA5
1314280304Sjkim    }
1315280304Sjkim};
1316238405Sjkim
1317280304Sjkimstatic const struct {
1318280304Sjkim    EC_CURVE_DATA h;
1319280304Sjkim    unsigned char data[0 + 36 * 6];
1320280304Sjkim} _EC_NIST_CHAR2_283K = {
1321280304Sjkim    {
1322280304Sjkim        NID_X9_62_characteristic_two_field, 0, 36, 4
1323280304Sjkim    },
1324280304Sjkim    {
1325280304Sjkim        /* no seed */
1326280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1327280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1328280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA1,
1329280304Sjkim        /* a */
1330280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1331280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1332280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1333280304Sjkim        /* b */
1334280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1335280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1336280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1337280304Sjkim        /* x */
1338280304Sjkim        0x05, 0x03, 0x21, 0x3F, 0x78, 0xCA, 0x44, 0x88, 0x3F, 0x1A, 0x3B, 0x81,
1339280304Sjkim        0x62, 0xF1, 0x88, 0xE5, 0x53, 0xCD, 0x26, 0x5F, 0x23, 0xC1, 0x56, 0x7A,
1340280304Sjkim        0x16, 0x87, 0x69, 0x13, 0xB0, 0xC2, 0xAC, 0x24, 0x58, 0x49, 0x28, 0x36,
1341280304Sjkim        /* y */
1342280304Sjkim        0x01, 0xCC, 0xDA, 0x38, 0x0F, 0x1C, 0x9E, 0x31, 0x8D, 0x90, 0xF9, 0x5D,
1343280304Sjkim        0x07, 0xE5, 0x42, 0x6F, 0xE8, 0x7E, 0x45, 0xC0, 0xE8, 0x18, 0x46, 0x98,
1344280304Sjkim        0xE4, 0x59, 0x62, 0x36, 0x4E, 0x34, 0x11, 0x61, 0x77, 0xDD, 0x22, 0x59,
1345280304Sjkim        /* order */
1346280304Sjkim        0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1347280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE9, 0xAE, 0x2E, 0xD0, 0x75, 0x77,
1348280304Sjkim        0x26, 0x5D, 0xFF, 0x7F, 0x94, 0x45, 0x1E, 0x06, 0x1E, 0x16, 0x3C, 0x61
1349280304Sjkim    }
1350280304Sjkim};
1351160814Ssimon
1352280304Sjkimstatic const struct {
1353280304Sjkim    EC_CURVE_DATA h;
1354280304Sjkim    unsigned char data[20 + 36 * 6];
1355280304Sjkim} _EC_NIST_CHAR2_283B = {
1356280304Sjkim    {
1357280304Sjkim        NID_X9_62_characteristic_two_field, 20, 36, 2
1358280304Sjkim    },
1359280304Sjkim    {
1360280304Sjkim        /* no seed */
1361280304Sjkim        0x77, 0xE2, 0xB0, 0x73, 0x70, 0xEB, 0x0F, 0x83, 0x2A, 0x6D, 0xD5, 0xB6,
1362280304Sjkim        0x2D, 0xFC, 0x88, 0xCD, 0x06, 0xBB, 0x84, 0xBE,
1363280304Sjkim        /* p */
1364280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1365280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1366280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA1,
1367280304Sjkim        /* a */
1368280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1369280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1370280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1371280304Sjkim        /* b */
1372280304Sjkim        0x02, 0x7B, 0x68, 0x0A, 0xC8, 0xB8, 0x59, 0x6D, 0xA5, 0xA4, 0xAF, 0x8A,
1373280304Sjkim        0x19, 0xA0, 0x30, 0x3F, 0xCA, 0x97, 0xFD, 0x76, 0x45, 0x30, 0x9F, 0xA2,
1374280304Sjkim        0xA5, 0x81, 0x48, 0x5A, 0xF6, 0x26, 0x3E, 0x31, 0x3B, 0x79, 0xA2, 0xF5,
1375280304Sjkim        /* x */
1376280304Sjkim        0x05, 0xF9, 0x39, 0x25, 0x8D, 0xB7, 0xDD, 0x90, 0xE1, 0x93, 0x4F, 0x8C,
1377280304Sjkim        0x70, 0xB0, 0xDF, 0xEC, 0x2E, 0xED, 0x25, 0xB8, 0x55, 0x7E, 0xAC, 0x9C,
1378280304Sjkim        0x80, 0xE2, 0xE1, 0x98, 0xF8, 0xCD, 0xBE, 0xCD, 0x86, 0xB1, 0x20, 0x53,
1379280304Sjkim        /* y */
1380280304Sjkim        0x03, 0x67, 0x68, 0x54, 0xFE, 0x24, 0x14, 0x1C, 0xB9, 0x8F, 0xE6, 0xD4,
1381280304Sjkim        0xB2, 0x0D, 0x02, 0xB4, 0x51, 0x6F, 0xF7, 0x02, 0x35, 0x0E, 0xDD, 0xB0,
1382280304Sjkim        0x82, 0x67, 0x79, 0xC8, 0x13, 0xF0, 0xDF, 0x45, 0xBE, 0x81, 0x12, 0xF4,
1383280304Sjkim        /* order */
1384280304Sjkim        0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1385280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x90, 0x39, 0x96, 0x60, 0xFC,
1386280304Sjkim        0x93, 0x8A, 0x90, 0x16, 0x5B, 0x04, 0x2A, 0x7C, 0xEF, 0xAD, 0xB3, 0x07
1387280304Sjkim    }
1388280304Sjkim};
1389238405Sjkim
1390280304Sjkimstatic const struct {
1391280304Sjkim    EC_CURVE_DATA h;
1392280304Sjkim    unsigned char data[0 + 52 * 6];
1393280304Sjkim} _EC_NIST_CHAR2_409K = {
1394280304Sjkim    {
1395280304Sjkim        NID_X9_62_characteristic_two_field, 0, 52, 4
1396280304Sjkim    },
1397280304Sjkim    {
1398280304Sjkim        /* no seed */
1399280304Sjkim        /* p */
1400280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1401280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1402280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1403280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1404280304Sjkim        0x00, 0x00, 0x00, 0x01,
1405280304Sjkim        /* a */
1406280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1407280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1408280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1409280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1410280304Sjkim        0x00, 0x00, 0x00, 0x00,
1411280304Sjkim        /* b */
1412280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1413280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1414280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1415280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1416280304Sjkim        0x00, 0x00, 0x00, 0x01,
1417280304Sjkim        /* x */
1418280304Sjkim        0x00, 0x60, 0xF0, 0x5F, 0x65, 0x8F, 0x49, 0xC1, 0xAD, 0x3A, 0xB1, 0x89,
1419280304Sjkim        0x0F, 0x71, 0x84, 0x21, 0x0E, 0xFD, 0x09, 0x87, 0xE3, 0x07, 0xC8, 0x4C,
1420280304Sjkim        0x27, 0xAC, 0xCF, 0xB8, 0xF9, 0xF6, 0x7C, 0xC2, 0xC4, 0x60, 0x18, 0x9E,
1421280304Sjkim        0xB5, 0xAA, 0xAA, 0x62, 0xEE, 0x22, 0x2E, 0xB1, 0xB3, 0x55, 0x40, 0xCF,
1422280304Sjkim        0xE9, 0x02, 0x37, 0x46,
1423280304Sjkim        /* y */
1424280304Sjkim        0x01, 0xE3, 0x69, 0x05, 0x0B, 0x7C, 0x4E, 0x42, 0xAC, 0xBA, 0x1D, 0xAC,
1425280304Sjkim        0xBF, 0x04, 0x29, 0x9C, 0x34, 0x60, 0x78, 0x2F, 0x91, 0x8E, 0xA4, 0x27,
1426280304Sjkim        0xE6, 0x32, 0x51, 0x65, 0xE9, 0xEA, 0x10, 0xE3, 0xDA, 0x5F, 0x6C, 0x42,
1427280304Sjkim        0xE9, 0xC5, 0x52, 0x15, 0xAA, 0x9C, 0xA2, 0x7A, 0x58, 0x63, 0xEC, 0x48,
1428280304Sjkim        0xD8, 0xE0, 0x28, 0x6B,
1429280304Sjkim        /* order */
1430280304Sjkim        0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1431280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1432280304Sjkim        0xFF, 0xFF, 0xFE, 0x5F, 0x83, 0xB2, 0xD4, 0xEA, 0x20, 0x40, 0x0E, 0xC4,
1433280304Sjkim        0x55, 0x7D, 0x5E, 0xD3, 0xE3, 0xE7, 0xCA, 0x5B, 0x4B, 0x5C, 0x83, 0xB8,
1434280304Sjkim        0xE0, 0x1E, 0x5F, 0xCF
1435280304Sjkim    }
1436280304Sjkim};
1437160814Ssimon
1438280304Sjkimstatic const struct {
1439280304Sjkim    EC_CURVE_DATA h;
1440280304Sjkim    unsigned char data[20 + 52 * 6];
1441280304Sjkim} _EC_NIST_CHAR2_409B = {
1442280304Sjkim    {
1443280304Sjkim        NID_X9_62_characteristic_two_field, 20, 52, 2
1444280304Sjkim    },
1445280304Sjkim    {
1446280304Sjkim        /* seed */
1447280304Sjkim        0x40, 0x99, 0xB5, 0xA4, 0x57, 0xF9, 0xD6, 0x9F, 0x79, 0x21, 0x3D, 0x09,
1448280304Sjkim        0x4C, 0x4B, 0xCD, 0x4D, 0x42, 0x62, 0x21, 0x0B,
1449280304Sjkim        /* p */
1450280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1451280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1452280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1453280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1454280304Sjkim        0x00, 0x00, 0x00, 0x01,
1455280304Sjkim        /* a */
1456280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1457280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1458280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1459280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1460280304Sjkim        0x00, 0x00, 0x00, 0x01,
1461280304Sjkim        /* b */
1462280304Sjkim        0x00, 0x21, 0xA5, 0xC2, 0xC8, 0xEE, 0x9F, 0xEB, 0x5C, 0x4B, 0x9A, 0x75,
1463280304Sjkim        0x3B, 0x7B, 0x47, 0x6B, 0x7F, 0xD6, 0x42, 0x2E, 0xF1, 0xF3, 0xDD, 0x67,
1464280304Sjkim        0x47, 0x61, 0xFA, 0x99, 0xD6, 0xAC, 0x27, 0xC8, 0xA9, 0xA1, 0x97, 0xB2,
1465280304Sjkim        0x72, 0x82, 0x2F, 0x6C, 0xD5, 0x7A, 0x55, 0xAA, 0x4F, 0x50, 0xAE, 0x31,
1466280304Sjkim        0x7B, 0x13, 0x54, 0x5F,
1467280304Sjkim        /* x */
1468280304Sjkim        0x01, 0x5D, 0x48, 0x60, 0xD0, 0x88, 0xDD, 0xB3, 0x49, 0x6B, 0x0C, 0x60,
1469280304Sjkim        0x64, 0x75, 0x62, 0x60, 0x44, 0x1C, 0xDE, 0x4A, 0xF1, 0x77, 0x1D, 0x4D,
1470280304Sjkim        0xB0, 0x1F, 0xFE, 0x5B, 0x34, 0xE5, 0x97, 0x03, 0xDC, 0x25, 0x5A, 0x86,
1471280304Sjkim        0x8A, 0x11, 0x80, 0x51, 0x56, 0x03, 0xAE, 0xAB, 0x60, 0x79, 0x4E, 0x54,
1472280304Sjkim        0xBB, 0x79, 0x96, 0xA7,
1473280304Sjkim        /* y */
1474280304Sjkim        0x00, 0x61, 0xB1, 0xCF, 0xAB, 0x6B, 0xE5, 0xF3, 0x2B, 0xBF, 0xA7, 0x83,
1475280304Sjkim        0x24, 0xED, 0x10, 0x6A, 0x76, 0x36, 0xB9, 0xC5, 0xA7, 0xBD, 0x19, 0x8D,
1476280304Sjkim        0x01, 0x58, 0xAA, 0x4F, 0x54, 0x88, 0xD0, 0x8F, 0x38, 0x51, 0x4F, 0x1F,
1477280304Sjkim        0xDF, 0x4B, 0x4F, 0x40, 0xD2, 0x18, 0x1B, 0x36, 0x81, 0xC3, 0x64, 0xBA,
1478280304Sjkim        0x02, 0x73, 0xC7, 0x06,
1479280304Sjkim        /* order */
1480280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1481280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1482280304Sjkim        0x00, 0x00, 0x01, 0xE2, 0xAA, 0xD6, 0xA6, 0x12, 0xF3, 0x33, 0x07, 0xBE,
1483280304Sjkim        0x5F, 0xA4, 0x7C, 0x3C, 0x9E, 0x05, 0x2F, 0x83, 0x81, 0x64, 0xCD, 0x37,
1484280304Sjkim        0xD9, 0xA2, 0x11, 0x73
1485280304Sjkim    }
1486280304Sjkim};
1487238405Sjkim
1488280304Sjkimstatic const struct {
1489280304Sjkim    EC_CURVE_DATA h;
1490280304Sjkim    unsigned char data[0 + 72 * 6];
1491280304Sjkim} _EC_NIST_CHAR2_571K = {
1492280304Sjkim    {
1493280304Sjkim        NID_X9_62_characteristic_two_field, 0, 72, 4
1494280304Sjkim    },
1495280304Sjkim    {
1496280304Sjkim        /* no seed */
1497280304Sjkim        /* p */
1498280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1499280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1500280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1501280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1502280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1503280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x25,
1504280304Sjkim        /* a */
1505280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1506280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1507280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1508280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1509280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1510280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1511280304Sjkim        /* b */
1512280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1513280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1514280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1515280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1516280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1517280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1518280304Sjkim        /* x */
1519280304Sjkim        0x02, 0x6E, 0xB7, 0xA8, 0x59, 0x92, 0x3F, 0xBC, 0x82, 0x18, 0x96, 0x31,
1520280304Sjkim        0xF8, 0x10, 0x3F, 0xE4, 0xAC, 0x9C, 0xA2, 0x97, 0x00, 0x12, 0xD5, 0xD4,
1521280304Sjkim        0x60, 0x24, 0x80, 0x48, 0x01, 0x84, 0x1C, 0xA4, 0x43, 0x70, 0x95, 0x84,
1522280304Sjkim        0x93, 0xB2, 0x05, 0xE6, 0x47, 0xDA, 0x30, 0x4D, 0xB4, 0xCE, 0xB0, 0x8C,
1523280304Sjkim        0xBB, 0xD1, 0xBA, 0x39, 0x49, 0x47, 0x76, 0xFB, 0x98, 0x8B, 0x47, 0x17,
1524280304Sjkim        0x4D, 0xCA, 0x88, 0xC7, 0xE2, 0x94, 0x52, 0x83, 0xA0, 0x1C, 0x89, 0x72,
1525280304Sjkim        /* y */
1526280304Sjkim        0x03, 0x49, 0xDC, 0x80, 0x7F, 0x4F, 0xBF, 0x37, 0x4F, 0x4A, 0xEA, 0xDE,
1527280304Sjkim        0x3B, 0xCA, 0x95, 0x31, 0x4D, 0xD5, 0x8C, 0xEC, 0x9F, 0x30, 0x7A, 0x54,
1528280304Sjkim        0xFF, 0xC6, 0x1E, 0xFC, 0x00, 0x6D, 0x8A, 0x2C, 0x9D, 0x49, 0x79, 0xC0,
1529280304Sjkim        0xAC, 0x44, 0xAE, 0xA7, 0x4F, 0xBE, 0xBB, 0xB9, 0xF7, 0x72, 0xAE, 0xDC,
1530280304Sjkim        0xB6, 0x20, 0xB0, 0x1A, 0x7B, 0xA7, 0xAF, 0x1B, 0x32, 0x04, 0x30, 0xC8,
1531280304Sjkim        0x59, 0x19, 0x84, 0xF6, 0x01, 0xCD, 0x4C, 0x14, 0x3E, 0xF1, 0xC7, 0xA3,
1532280304Sjkim        /* order */
1533280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1534280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1535280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1536280304Sjkim        0x13, 0x18, 0x50, 0xE1, 0xF1, 0x9A, 0x63, 0xE4, 0xB3, 0x91, 0xA8, 0xDB,
1537280304Sjkim        0x91, 0x7F, 0x41, 0x38, 0xB6, 0x30, 0xD8, 0x4B, 0xE5, 0xD6, 0x39, 0x38,
1538280304Sjkim        0x1E, 0x91, 0xDE, 0xB4, 0x5C, 0xFE, 0x77, 0x8F, 0x63, 0x7C, 0x10, 0x01
1539280304Sjkim    }
1540280304Sjkim};
1541238405Sjkim
1542280304Sjkimstatic const struct {
1543280304Sjkim    EC_CURVE_DATA h;
1544280304Sjkim    unsigned char data[20 + 72 * 6];
1545280304Sjkim} _EC_NIST_CHAR2_571B = {
1546280304Sjkim    {
1547280304Sjkim        NID_X9_62_characteristic_two_field, 20, 72, 2
1548280304Sjkim    },
1549280304Sjkim    {
1550280304Sjkim        /* seed */
1551280304Sjkim        0x2A, 0xA0, 0x58, 0xF7, 0x3A, 0x0E, 0x33, 0xAB, 0x48, 0x6B, 0x0F, 0x61,
1552280304Sjkim        0x04, 0x10, 0xC5, 0x3A, 0x7F, 0x13, 0x23, 0x10,
1553280304Sjkim        /* p */
1554280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1555280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1556280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1557280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1558280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1559280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x25,
1560280304Sjkim        /* a */
1561280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1562280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1563280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1564280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1565280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1566280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1567280304Sjkim        /* b */
1568280304Sjkim        0x02, 0xF4, 0x0E, 0x7E, 0x22, 0x21, 0xF2, 0x95, 0xDE, 0x29, 0x71, 0x17,
1569280304Sjkim        0xB7, 0xF3, 0xD6, 0x2F, 0x5C, 0x6A, 0x97, 0xFF, 0xCB, 0x8C, 0xEF, 0xF1,
1570280304Sjkim        0xCD, 0x6B, 0xA8, 0xCE, 0x4A, 0x9A, 0x18, 0xAD, 0x84, 0xFF, 0xAB, 0xBD,
1571280304Sjkim        0x8E, 0xFA, 0x59, 0x33, 0x2B, 0xE7, 0xAD, 0x67, 0x56, 0xA6, 0x6E, 0x29,
1572280304Sjkim        0x4A, 0xFD, 0x18, 0x5A, 0x78, 0xFF, 0x12, 0xAA, 0x52, 0x0E, 0x4D, 0xE7,
1573280304Sjkim        0x39, 0xBA, 0xCA, 0x0C, 0x7F, 0xFE, 0xFF, 0x7F, 0x29, 0x55, 0x72, 0x7A,
1574280304Sjkim        /* x */
1575280304Sjkim        0x03, 0x03, 0x00, 0x1D, 0x34, 0xB8, 0x56, 0x29, 0x6C, 0x16, 0xC0, 0xD4,
1576280304Sjkim        0x0D, 0x3C, 0xD7, 0x75, 0x0A, 0x93, 0xD1, 0xD2, 0x95, 0x5F, 0xA8, 0x0A,
1577280304Sjkim        0xA5, 0xF4, 0x0F, 0xC8, 0xDB, 0x7B, 0x2A, 0xBD, 0xBD, 0xE5, 0x39, 0x50,
1578280304Sjkim        0xF4, 0xC0, 0xD2, 0x93, 0xCD, 0xD7, 0x11, 0xA3, 0x5B, 0x67, 0xFB, 0x14,
1579280304Sjkim        0x99, 0xAE, 0x60, 0x03, 0x86, 0x14, 0xF1, 0x39, 0x4A, 0xBF, 0xA3, 0xB4,
1580280304Sjkim        0xC8, 0x50, 0xD9, 0x27, 0xE1, 0xE7, 0x76, 0x9C, 0x8E, 0xEC, 0x2D, 0x19,
1581280304Sjkim        /* y */
1582280304Sjkim        0x03, 0x7B, 0xF2, 0x73, 0x42, 0xDA, 0x63, 0x9B, 0x6D, 0xCC, 0xFF, 0xFE,
1583280304Sjkim        0xB7, 0x3D, 0x69, 0xD7, 0x8C, 0x6C, 0x27, 0xA6, 0x00, 0x9C, 0xBB, 0xCA,
1584280304Sjkim        0x19, 0x80, 0xF8, 0x53, 0x39, 0x21, 0xE8, 0xA6, 0x84, 0x42, 0x3E, 0x43,
1585280304Sjkim        0xBA, 0xB0, 0x8A, 0x57, 0x62, 0x91, 0xAF, 0x8F, 0x46, 0x1B, 0xB2, 0xA8,
1586280304Sjkim        0xB3, 0x53, 0x1D, 0x2F, 0x04, 0x85, 0xC1, 0x9B, 0x16, 0xE2, 0xF1, 0x51,
1587280304Sjkim        0x6E, 0x23, 0xDD, 0x3C, 0x1A, 0x48, 0x27, 0xAF, 0x1B, 0x8A, 0xC1, 0x5B,
1588280304Sjkim        /* order */
1589280304Sjkim        0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1590280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1591280304Sjkim        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1592280304Sjkim        0xE6, 0x61, 0xCE, 0x18, 0xFF, 0x55, 0x98, 0x73, 0x08, 0x05, 0x9B, 0x18,
1593280304Sjkim        0x68, 0x23, 0x85, 0x1E, 0xC7, 0xDD, 0x9C, 0xA1, 0x16, 0x1D, 0xE9, 0x3D,
1594280304Sjkim        0x51, 0x74, 0xD6, 0x6E, 0x83, 0x82, 0xE9, 0xBB, 0x2F, 0xE8, 0x4E, 0x47
1595280304Sjkim    }
1596280304Sjkim};
1597238405Sjkim
1598280304Sjkimstatic const struct {
1599280304Sjkim    EC_CURVE_DATA h;
1600280304Sjkim    unsigned char data[20 + 21 * 6];
1601280304Sjkim} _EC_X9_62_CHAR2_163V1 = {
1602280304Sjkim    {
1603280304Sjkim        NID_X9_62_characteristic_two_field, 20, 21, 2
1604280304Sjkim    },
1605280304Sjkim    {
1606280304Sjkim        /* seed */
1607280304Sjkim        0xD2, 0xC0, 0xFB, 0x15, 0x76, 0x08, 0x60, 0xDE, 0xF1, 0xEE, 0xF4, 0xD6,
1608280304Sjkim        0x96, 0xE6, 0x76, 0x87, 0x56, 0x15, 0x17, 0x54,
1609280304Sjkim        /* p */
1610280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1611280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
1612280304Sjkim        /* a */
1613280304Sjkim        0x07, 0x25, 0x46, 0xB5, 0x43, 0x52, 0x34, 0xA4, 0x22, 0xE0, 0x78, 0x96,
1614280304Sjkim        0x75, 0xF4, 0x32, 0xC8, 0x94, 0x35, 0xDE, 0x52, 0x42,
1615280304Sjkim        /* b */
1616280304Sjkim        0x00, 0xC9, 0x51, 0x7D, 0x06, 0xD5, 0x24, 0x0D, 0x3C, 0xFF, 0x38, 0xC7,
1617280304Sjkim        0x4B, 0x20, 0xB6, 0xCD, 0x4D, 0x6F, 0x9D, 0xD4, 0xD9,
1618280304Sjkim        /* x */
1619280304Sjkim        0x07, 0xAF, 0x69, 0x98, 0x95, 0x46, 0x10, 0x3D, 0x79, 0x32, 0x9F, 0xCC,
1620280304Sjkim        0x3D, 0x74, 0x88, 0x0F, 0x33, 0xBB, 0xE8, 0x03, 0xCB,
1621280304Sjkim        /* y */
1622280304Sjkim        0x01, 0xEC, 0x23, 0x21, 0x1B, 0x59, 0x66, 0xAD, 0xEA, 0x1D, 0x3F, 0x87,
1623280304Sjkim        0xF7, 0xEA, 0x58, 0x48, 0xAE, 0xF0, 0xB7, 0xCA, 0x9F,
1624280304Sjkim        /* order */
1625280304Sjkim        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE6,
1626280304Sjkim        0x0F, 0xC8, 0x82, 0x1C, 0xC7, 0x4D, 0xAE, 0xAF, 0xC1
1627280304Sjkim    }
1628280304Sjkim};
1629238405Sjkim
1630280304Sjkimstatic const struct {
1631280304Sjkim    EC_CURVE_DATA h;
1632280304Sjkim    unsigned char data[20 + 21 * 6];
1633280304Sjkim} _EC_X9_62_CHAR2_163V2 = {
1634280304Sjkim    {
1635280304Sjkim        NID_X9_62_characteristic_two_field, 20, 21, 2
1636280304Sjkim    },
1637280304Sjkim    {
1638280304Sjkim        /* seed */
1639280304Sjkim        0x53, 0x81, 0x4C, 0x05, 0x0D, 0x44, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1640280304Sjkim        0x15, 0x17, 0x58, 0x0C, 0xA4, 0xE2, 0x9F, 0xFD,
1641280304Sjkim        /* p */
1642280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1643280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
1644280304Sjkim        /* a */
1645280304Sjkim        0x01, 0x08, 0xB3, 0x9E, 0x77, 0xC4, 0xB1, 0x08, 0xBE, 0xD9, 0x81, 0xED,
1646280304Sjkim        0x0E, 0x89, 0x0E, 0x11, 0x7C, 0x51, 0x1C, 0xF0, 0x72,
1647280304Sjkim        /* b */
1648280304Sjkim        0x06, 0x67, 0xAC, 0xEB, 0x38, 0xAF, 0x4E, 0x48, 0x8C, 0x40, 0x74, 0x33,
1649280304Sjkim        0xFF, 0xAE, 0x4F, 0x1C, 0x81, 0x16, 0x38, 0xDF, 0x20,
1650280304Sjkim        /* x */
1651280304Sjkim        0x00, 0x24, 0x26, 0x6E, 0x4E, 0xB5, 0x10, 0x6D, 0x0A, 0x96, 0x4D, 0x92,
1652280304Sjkim        0xC4, 0x86, 0x0E, 0x26, 0x71, 0xDB, 0x9B, 0x6C, 0xC5,
1653280304Sjkim        /* y */
1654280304Sjkim        0x07, 0x9F, 0x68, 0x4D, 0xDF, 0x66, 0x84, 0xC5, 0xCD, 0x25, 0x8B, 0x38,
1655280304Sjkim        0x90, 0x02, 0x1B, 0x23, 0x86, 0xDF, 0xD1, 0x9F, 0xC5,
1656280304Sjkim        /* order */
1657280304Sjkim        0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF6,
1658280304Sjkim        0x4D, 0xE1, 0x15, 0x1A, 0xDB, 0xB7, 0x8F, 0x10, 0xA7
1659280304Sjkim    }
1660280304Sjkim};
1661238405Sjkim
1662280304Sjkimstatic const struct {
1663280304Sjkim    EC_CURVE_DATA h;
1664280304Sjkim    unsigned char data[20 + 21 * 6];
1665280304Sjkim} _EC_X9_62_CHAR2_163V3 = {
1666280304Sjkim    {
1667280304Sjkim        NID_X9_62_characteristic_two_field, 20, 21, 2
1668280304Sjkim    },
1669280304Sjkim    {
1670280304Sjkim        /* seed */
1671280304Sjkim        0x50, 0xCB, 0xF1, 0xD9, 0x5C, 0xA9, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75,
1672280304Sjkim        0x61, 0x51, 0x75, 0xF1, 0x6A, 0x36, 0xA3, 0xB8,
1673280304Sjkim        /* p */
1674280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1675280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
1676280304Sjkim        /* a */
1677280304Sjkim        0x07, 0xA5, 0x26, 0xC6, 0x3D, 0x3E, 0x25, 0xA2, 0x56, 0xA0, 0x07, 0x69,
1678280304Sjkim        0x9F, 0x54, 0x47, 0xE3, 0x2A, 0xE4, 0x56, 0xB5, 0x0E,
1679280304Sjkim        /* b */
1680280304Sjkim        0x03, 0xF7, 0x06, 0x17, 0x98, 0xEB, 0x99, 0xE2, 0x38, 0xFD, 0x6F, 0x1B,
1681280304Sjkim        0xF9, 0x5B, 0x48, 0xFE, 0xEB, 0x48, 0x54, 0x25, 0x2B,
1682280304Sjkim        /* x */
1683280304Sjkim        0x02, 0xF9, 0xF8, 0x7B, 0x7C, 0x57, 0x4D, 0x0B, 0xDE, 0xCF, 0x8A, 0x22,
1684280304Sjkim        0xE6, 0x52, 0x47, 0x75, 0xF9, 0x8C, 0xDE, 0xBD, 0xCB,
1685280304Sjkim        /* y */
1686280304Sjkim        0x05, 0xB9, 0x35, 0x59, 0x0C, 0x15, 0x5E, 0x17, 0xEA, 0x48, 0xEB, 0x3F,
1687280304Sjkim        0xF3, 0x71, 0x8B, 0x89, 0x3D, 0xF5, 0x9A, 0x05, 0xD0,
1688280304Sjkim        /* order */
1689280304Sjkim        0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1A,
1690280304Sjkim        0xEE, 0x14, 0x0F, 0x11, 0x0A, 0xFF, 0x96, 0x13, 0x09
1691280304Sjkim    }
1692280304Sjkim};
1693160814Ssimon
1694280304Sjkimstatic const struct {
1695280304Sjkim    EC_CURVE_DATA h;
1696280304Sjkim    unsigned char data[0 + 23 * 6];
1697280304Sjkim} _EC_X9_62_CHAR2_176V1 = {
1698280304Sjkim    {
1699280304Sjkim        NID_X9_62_characteristic_two_field, 0, 23, 0xFF6E
1700280304Sjkim    },
1701280304Sjkim    {
1702280304Sjkim        /* no seed */
1703280304Sjkim        /* p */
1704280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1705280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07,
1706280304Sjkim        /* a */
1707280304Sjkim        0x00, 0xE4, 0xE6, 0xDB, 0x29, 0x95, 0x06, 0x5C, 0x40, 0x7D, 0x9D, 0x39,
1708280304Sjkim        0xB8, 0xD0, 0x96, 0x7B, 0x96, 0x70, 0x4B, 0xA8, 0xE9, 0xC9, 0x0B,
1709280304Sjkim        /* b */
1710280304Sjkim        0x00, 0x5D, 0xDA, 0x47, 0x0A, 0xBE, 0x64, 0x14, 0xDE, 0x8E, 0xC1, 0x33,
1711280304Sjkim        0xAE, 0x28, 0xE9, 0xBB, 0xD7, 0xFC, 0xEC, 0x0A, 0xE0, 0xFF, 0xF2,
1712280304Sjkim        /* x */
1713280304Sjkim        0x00, 0x8D, 0x16, 0xC2, 0x86, 0x67, 0x98, 0xB6, 0x00, 0xF9, 0xF0, 0x8B,
1714280304Sjkim        0xB4, 0xA8, 0xE8, 0x60, 0xF3, 0x29, 0x8C, 0xE0, 0x4A, 0x57, 0x98,
1715280304Sjkim        /* y */
1716280304Sjkim        0x00, 0x6F, 0xA4, 0x53, 0x9C, 0x2D, 0xAD, 0xDD, 0xD6, 0xBA, 0xB5, 0x16,
1717280304Sjkim        0x7D, 0x61, 0xB4, 0x36, 0xE1, 0xD9, 0x2B, 0xB1, 0x6A, 0x56, 0x2C,
1718280304Sjkim        /* order */
1719280304Sjkim        0x00, 0x00, 0x01, 0x00, 0x92, 0x53, 0x73, 0x97, 0xEC, 0xA4, 0xF6, 0x14,
1720280304Sjkim        0x57, 0x99, 0xD6, 0x2B, 0x0A, 0x19, 0xCE, 0x06, 0xFE, 0x26, 0xAD
1721280304Sjkim    }
1722280304Sjkim};
1723238405Sjkim
1724280304Sjkimstatic const struct {
1725280304Sjkim    EC_CURVE_DATA h;
1726280304Sjkim    unsigned char data[20 + 24 * 6];
1727280304Sjkim} _EC_X9_62_CHAR2_191V1 = {
1728280304Sjkim    {
1729280304Sjkim        NID_X9_62_characteristic_two_field, 20, 24, 2
1730280304Sjkim    },
1731280304Sjkim    {
1732280304Sjkim        /* seed */
1733280304Sjkim        0x4E, 0x13, 0xCA, 0x54, 0x27, 0x44, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1734280304Sjkim        0x15, 0x17, 0x55, 0x2F, 0x27, 0x9A, 0x8C, 0x84,
1735280304Sjkim        /* p */
1736280304Sjkim        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1737280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
1738280304Sjkim        /* a */
1739280304Sjkim        0x28, 0x66, 0x53, 0x7B, 0x67, 0x67, 0x52, 0x63, 0x6A, 0x68, 0xF5, 0x65,
1740280304Sjkim        0x54, 0xE1, 0x26, 0x40, 0x27, 0x6B, 0x64, 0x9E, 0xF7, 0x52, 0x62, 0x67,
1741280304Sjkim        /* b */
1742280304Sjkim        0x2E, 0x45, 0xEF, 0x57, 0x1F, 0x00, 0x78, 0x6F, 0x67, 0xB0, 0x08, 0x1B,
1743280304Sjkim        0x94, 0x95, 0xA3, 0xD9, 0x54, 0x62, 0xF5, 0xDE, 0x0A, 0xA1, 0x85, 0xEC,
1744280304Sjkim        /* x */
1745280304Sjkim        0x36, 0xB3, 0xDA, 0xF8, 0xA2, 0x32, 0x06, 0xF9, 0xC4, 0xF2, 0x99, 0xD7,
1746280304Sjkim        0xB2, 0x1A, 0x9C, 0x36, 0x91, 0x37, 0xF2, 0xC8, 0x4A, 0xE1, 0xAA, 0x0D,
1747280304Sjkim        /* y */
1748280304Sjkim        0x76, 0x5B, 0xE7, 0x34, 0x33, 0xB3, 0xF9, 0x5E, 0x33, 0x29, 0x32, 0xE7,
1749280304Sjkim        0x0E, 0xA2, 0x45, 0xCA, 0x24, 0x18, 0xEA, 0x0E, 0xF9, 0x80, 0x18, 0xFB,
1750280304Sjkim        /* order */
1751280304Sjkim        0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1752280304Sjkim        0x04, 0xA2, 0x0E, 0x90, 0xC3, 0x90, 0x67, 0xC8, 0x93, 0xBB, 0xB9, 0xA5
1753280304Sjkim    }
1754280304Sjkim};
1755238405Sjkim
1756280304Sjkimstatic const struct {
1757280304Sjkim    EC_CURVE_DATA h;
1758280304Sjkim    unsigned char data[20 + 24 * 6];
1759280304Sjkim} _EC_X9_62_CHAR2_191V2 = {
1760280304Sjkim    {
1761280304Sjkim        NID_X9_62_characteristic_two_field, 20, 24, 4
1762280304Sjkim    },
1763280304Sjkim    {
1764280304Sjkim        /* seed */
1765280304Sjkim        0x08, 0x71, 0xEF, 0x2F, 0xEF, 0x24, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1766280304Sjkim        0x15, 0x17, 0x58, 0xBE, 0xE0, 0xD9, 0x5C, 0x15,
1767280304Sjkim        /* p */
1768280304Sjkim        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1769280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
1770280304Sjkim        /* a */
1771280304Sjkim        0x40, 0x10, 0x28, 0x77, 0x4D, 0x77, 0x77, 0xC7, 0xB7, 0x66, 0x6D, 0x13,
1772280304Sjkim        0x66, 0xEA, 0x43, 0x20, 0x71, 0x27, 0x4F, 0x89, 0xFF, 0x01, 0xE7, 0x18,
1773280304Sjkim        /* b */
1774280304Sjkim        0x06, 0x20, 0x04, 0x8D, 0x28, 0xBC, 0xBD, 0x03, 0xB6, 0x24, 0x9C, 0x99,
1775280304Sjkim        0x18, 0x2B, 0x7C, 0x8C, 0xD1, 0x97, 0x00, 0xC3, 0x62, 0xC4, 0x6A, 0x01,
1776280304Sjkim        /* x */
1777280304Sjkim        0x38, 0x09, 0xB2, 0xB7, 0xCC, 0x1B, 0x28, 0xCC, 0x5A, 0x87, 0x92, 0x6A,
1778280304Sjkim        0xAD, 0x83, 0xFD, 0x28, 0x78, 0x9E, 0x81, 0xE2, 0xC9, 0xE3, 0xBF, 0x10,
1779280304Sjkim        /* y */
1780280304Sjkim        0x17, 0x43, 0x43, 0x86, 0x62, 0x6D, 0x14, 0xF3, 0xDB, 0xF0, 0x17, 0x60,
1781280304Sjkim        0xD9, 0x21, 0x3A, 0x3E, 0x1C, 0xF3, 0x7A, 0xEC, 0x43, 0x7D, 0x66, 0x8A,
1782280304Sjkim        /* order */
1783280304Sjkim        0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1784280304Sjkim        0x50, 0x50, 0x8C, 0xB8, 0x9F, 0x65, 0x28, 0x24, 0xE0, 0x6B, 0x81, 0x73
1785280304Sjkim    }
1786280304Sjkim};
1787238405Sjkim
1788280304Sjkimstatic const struct {
1789280304Sjkim    EC_CURVE_DATA h;
1790280304Sjkim    unsigned char data[20 + 24 * 6];
1791280304Sjkim} _EC_X9_62_CHAR2_191V3 = {
1792280304Sjkim    {
1793280304Sjkim        NID_X9_62_characteristic_two_field, 20, 24, 6
1794280304Sjkim    },
1795280304Sjkim    {
1796280304Sjkim        /* seed */
1797280304Sjkim        0xE0, 0x53, 0x51, 0x2D, 0xC6, 0x84, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1798280304Sjkim        0x15, 0x17, 0x50, 0x67, 0xAE, 0x78, 0x6D, 0x1F,
1799280304Sjkim        /* p */
1800280304Sjkim        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1801280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
1802280304Sjkim        /* a */
1803280304Sjkim        0x6C, 0x01, 0x07, 0x47, 0x56, 0x09, 0x91, 0x22, 0x22, 0x10, 0x56, 0x91,
1804280304Sjkim        0x1C, 0x77, 0xD7, 0x7E, 0x77, 0xA7, 0x77, 0xE7, 0xE7, 0xE7, 0x7F, 0xCB,
1805280304Sjkim        /* b */
1806280304Sjkim        0x71, 0xFE, 0x1A, 0xF9, 0x26, 0xCF, 0x84, 0x79, 0x89, 0xEF, 0xEF, 0x8D,
1807280304Sjkim        0xB4, 0x59, 0xF6, 0x63, 0x94, 0xD9, 0x0F, 0x32, 0xAD, 0x3F, 0x15, 0xE8,
1808280304Sjkim        /* x */
1809280304Sjkim        0x37, 0x5D, 0x4C, 0xE2, 0x4F, 0xDE, 0x43, 0x44, 0x89, 0xDE, 0x87, 0x46,
1810280304Sjkim        0xE7, 0x17, 0x86, 0x01, 0x50, 0x09, 0xE6, 0x6E, 0x38, 0xA9, 0x26, 0xDD,
1811280304Sjkim        /* y */
1812280304Sjkim        0x54, 0x5A, 0x39, 0x17, 0x61, 0x96, 0x57, 0x5D, 0x98, 0x59, 0x99, 0x36,
1813280304Sjkim        0x6E, 0x6A, 0xD3, 0x4C, 0xE0, 0xA7, 0x7C, 0xD7, 0x12, 0x7B, 0x06, 0xBE,
1814280304Sjkim        /* order */
1815280304Sjkim        0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1816280304Sjkim        0x61, 0x0C, 0x0B, 0x19, 0x68, 0x12, 0xBF, 0xB6, 0x28, 0x8A, 0x3E, 0xA3
1817280304Sjkim    }
1818280304Sjkim};
1819238405Sjkim
1820280304Sjkimstatic const struct {
1821280304Sjkim    EC_CURVE_DATA h;
1822280304Sjkim    unsigned char data[0 + 27 * 6];
1823280304Sjkim} _EC_X9_62_CHAR2_208W1 = {
1824280304Sjkim    {
1825280304Sjkim        NID_X9_62_characteristic_two_field, 0, 27, 0xFE48
1826280304Sjkim    },
1827280304Sjkim    {
1828280304Sjkim        /* no seed */
1829280304Sjkim        /* p */
1830280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1831280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1832280304Sjkim        0x00, 0x00, 0x07,
1833280304Sjkim        /* a */
1834280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1835280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1836280304Sjkim        0x00, 0x00, 0x00,
1837280304Sjkim        /* b */
1838280304Sjkim        0x00, 0xC8, 0x61, 0x9E, 0xD4, 0x5A, 0x62, 0xE6, 0x21, 0x2E, 0x11, 0x60,
1839280304Sjkim        0x34, 0x9E, 0x2B, 0xFA, 0x84, 0x44, 0x39, 0xFA, 0xFC, 0x2A, 0x3F, 0xD1,
1840280304Sjkim        0x63, 0x8F, 0x9E,
1841280304Sjkim        /* x */
1842280304Sjkim        0x00, 0x89, 0xFD, 0xFB, 0xE4, 0xAB, 0xE1, 0x93, 0xDF, 0x95, 0x59, 0xEC,
1843280304Sjkim        0xF0, 0x7A, 0xC0, 0xCE, 0x78, 0x55, 0x4E, 0x27, 0x84, 0xEB, 0x8C, 0x1E,
1844280304Sjkim        0xD1, 0xA5, 0x7A,
1845280304Sjkim        /* y */
1846280304Sjkim        0x00, 0x0F, 0x55, 0xB5, 0x1A, 0x06, 0xE7, 0x8E, 0x9A, 0xC3, 0x8A, 0x03,
1847280304Sjkim        0x5F, 0xF5, 0x20, 0xD8, 0xB0, 0x17, 0x81, 0xBE, 0xB1, 0xA6, 0xBB, 0x08,
1848280304Sjkim        0x61, 0x7D, 0xE3,
1849280304Sjkim        /* order */
1850280304Sjkim        0x00, 0x00, 0x01, 0x01, 0xBA, 0xF9, 0x5C, 0x97, 0x23, 0xC5, 0x7B, 0x6C,
1851280304Sjkim        0x21, 0xDA, 0x2E, 0xFF, 0x2D, 0x5E, 0xD5, 0x88, 0xBD, 0xD5, 0x71, 0x7E,
1852280304Sjkim        0x21, 0x2F, 0x9D
1853280304Sjkim    }
1854280304Sjkim};
1855238405Sjkim
1856280304Sjkimstatic const struct {
1857280304Sjkim    EC_CURVE_DATA h;
1858280304Sjkim    unsigned char data[20 + 30 * 6];
1859280304Sjkim} _EC_X9_62_CHAR2_239V1 = {
1860280304Sjkim    {
1861280304Sjkim        NID_X9_62_characteristic_two_field, 20, 30, 4
1862280304Sjkim    },
1863280304Sjkim    {
1864280304Sjkim        /* seed */
1865280304Sjkim        0xD3, 0x4B, 0x9A, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75,
1866280304Sjkim        0xCA, 0x71, 0xB9, 0x20, 0xBF, 0xEF, 0xB0, 0x5D,
1867280304Sjkim        /* p */
1868280304Sjkim        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1869280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1870280304Sjkim        0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
1871280304Sjkim        /* a */
1872280304Sjkim        0x32, 0x01, 0x08, 0x57, 0x07, 0x7C, 0x54, 0x31, 0x12, 0x3A, 0x46, 0xB8,
1873280304Sjkim        0x08, 0x90, 0x67, 0x56, 0xF5, 0x43, 0x42, 0x3E, 0x8D, 0x27, 0x87, 0x75,
1874280304Sjkim        0x78, 0x12, 0x57, 0x78, 0xAC, 0x76,
1875280304Sjkim        /* b */
1876280304Sjkim        0x79, 0x04, 0x08, 0xF2, 0xEE, 0xDA, 0xF3, 0x92, 0xB0, 0x12, 0xED, 0xEF,
1877280304Sjkim        0xB3, 0x39, 0x2F, 0x30, 0xF4, 0x32, 0x7C, 0x0C, 0xA3, 0xF3, 0x1F, 0xC3,
1878280304Sjkim        0x83, 0xC4, 0x22, 0xAA, 0x8C, 0x16,
1879280304Sjkim        /* x */
1880280304Sjkim        0x57, 0x92, 0x70, 0x98, 0xFA, 0x93, 0x2E, 0x7C, 0x0A, 0x96, 0xD3, 0xFD,
1881280304Sjkim        0x5B, 0x70, 0x6E, 0xF7, 0xE5, 0xF5, 0xC1, 0x56, 0xE1, 0x6B, 0x7E, 0x7C,
1882280304Sjkim        0x86, 0x03, 0x85, 0x52, 0xE9, 0x1D,
1883280304Sjkim        /* y */
1884280304Sjkim        0x61, 0xD8, 0xEE, 0x50, 0x77, 0xC3, 0x3F, 0xEC, 0xF6, 0xF1, 0xA1, 0x6B,
1885280304Sjkim        0x26, 0x8D, 0xE4, 0x69, 0xC3, 0xC7, 0x74, 0x4E, 0xA9, 0xA9, 0x71, 0x64,
1886280304Sjkim        0x9F, 0xC7, 0xA9, 0x61, 0x63, 0x05,
1887280304Sjkim        /* order */
1888280304Sjkim        0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1889280304Sjkim        0x00, 0x00, 0x00, 0x0F, 0x4D, 0x42, 0xFF, 0xE1, 0x49, 0x2A, 0x49, 0x93,
1890280304Sjkim        0xF1, 0xCA, 0xD6, 0x66, 0xE4, 0x47
1891280304Sjkim    }
1892280304Sjkim};
1893238405Sjkim
1894280304Sjkimstatic const struct {
1895280304Sjkim    EC_CURVE_DATA h;
1896280304Sjkim    unsigned char data[20 + 30 * 6];
1897280304Sjkim} _EC_X9_62_CHAR2_239V2 = {
1898280304Sjkim    {
1899280304Sjkim        NID_X9_62_characteristic_two_field, 20, 30, 6
1900280304Sjkim    },
1901280304Sjkim    {
1902280304Sjkim        /* seed */
1903280304Sjkim        0x2A, 0xA6, 0x98, 0x2F, 0xDF, 0xA4, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
1904280304Sjkim        0x15, 0x17, 0x5D, 0x26, 0x67, 0x27, 0x27, 0x7D,
1905280304Sjkim        /* p */
1906280304Sjkim        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1907280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1908280304Sjkim        0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
1909280304Sjkim        /* a */
1910280304Sjkim        0x42, 0x30, 0x01, 0x77, 0x57, 0xA7, 0x67, 0xFA, 0xE4, 0x23, 0x98, 0x56,
1911280304Sjkim        0x9B, 0x74, 0x63, 0x25, 0xD4, 0x53, 0x13, 0xAF, 0x07, 0x66, 0x26, 0x64,
1912280304Sjkim        0x79, 0xB7, 0x56, 0x54, 0xE6, 0x5F,
1913280304Sjkim        /* b */
1914280304Sjkim        0x50, 0x37, 0xEA, 0x65, 0x41, 0x96, 0xCF, 0xF0, 0xCD, 0x82, 0xB2, 0xC1,
1915280304Sjkim        0x4A, 0x2F, 0xCF, 0x2E, 0x3F, 0xF8, 0x77, 0x52, 0x85, 0xB5, 0x45, 0x72,
1916280304Sjkim        0x2F, 0x03, 0xEA, 0xCD, 0xB7, 0x4B,
1917280304Sjkim        /* x */
1918280304Sjkim        0x28, 0xF9, 0xD0, 0x4E, 0x90, 0x00, 0x69, 0xC8, 0xDC, 0x47, 0xA0, 0x85,
1919280304Sjkim        0x34, 0xFE, 0x76, 0xD2, 0xB9, 0x00, 0xB7, 0xD7, 0xEF, 0x31, 0xF5, 0x70,
1920280304Sjkim        0x9F, 0x20, 0x0C, 0x4C, 0xA2, 0x05,
1921280304Sjkim        /* y */
1922280304Sjkim        0x56, 0x67, 0x33, 0x4C, 0x45, 0xAF, 0xF3, 0xB5, 0xA0, 0x3B, 0xAD, 0x9D,
1923280304Sjkim        0xD7, 0x5E, 0x2C, 0x71, 0xA9, 0x93, 0x62, 0x56, 0x7D, 0x54, 0x53, 0xF7,
1924280304Sjkim        0xFA, 0x6E, 0x22, 0x7E, 0xC8, 0x33,
1925280304Sjkim        /* order */
1926280304Sjkim        0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1927280304Sjkim        0x55, 0x55, 0x55, 0x3C, 0x6F, 0x28, 0x85, 0x25, 0x9C, 0x31, 0xE3, 0xFC,
1928280304Sjkim        0xDF, 0x15, 0x46, 0x24, 0x52, 0x2D
1929280304Sjkim    }
1930280304Sjkim};
1931160814Ssimon
1932280304Sjkimstatic const struct {
1933280304Sjkim    EC_CURVE_DATA h;
1934280304Sjkim    unsigned char data[20 + 30 * 6];
1935280304Sjkim} _EC_X9_62_CHAR2_239V3 = {
1936280304Sjkim    {
1937280304Sjkim        NID_X9_62_characteristic_two_field, 20, 30, 0xA
1938280304Sjkim    },
1939280304Sjkim    {
1940280304Sjkim        /* seed */
1941280304Sjkim        0x9E, 0x07, 0x6F, 0x4D, 0x69, 0x6E, 0x67, 0x68, 0x75, 0x61, 0x51, 0x75,
1942280304Sjkim        0xE1, 0x1E, 0x9F, 0xDD, 0x77, 0xF9, 0x20, 0x41,
1943280304Sjkim        /* p */
1944280304Sjkim        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1945280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1946280304Sjkim        0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
1947280304Sjkim        /* a */
1948280304Sjkim        0x01, 0x23, 0x87, 0x74, 0x66, 0x6A, 0x67, 0x76, 0x6D, 0x66, 0x76, 0xF7,
1949280304Sjkim        0x78, 0xE6, 0x76, 0xB6, 0x69, 0x99, 0x17, 0x66, 0x66, 0xE6, 0x87, 0x66,
1950280304Sjkim        0x6D, 0x87, 0x66, 0xC6, 0x6A, 0x9F,
1951280304Sjkim        /* b */
1952280304Sjkim        0x6A, 0x94, 0x19, 0x77, 0xBA, 0x9F, 0x6A, 0x43, 0x51, 0x99, 0xAC, 0xFC,
1953280304Sjkim        0x51, 0x06, 0x7E, 0xD5, 0x87, 0xF5, 0x19, 0xC5, 0xEC, 0xB5, 0x41, 0xB8,
1954280304Sjkim        0xE4, 0x41, 0x11, 0xDE, 0x1D, 0x40,
1955280304Sjkim        /* x */
1956280304Sjkim        0x70, 0xF6, 0xE9, 0xD0, 0x4D, 0x28, 0x9C, 0x4E, 0x89, 0x91, 0x3C, 0xE3,
1957280304Sjkim        0x53, 0x0B, 0xFD, 0xE9, 0x03, 0x97, 0x7D, 0x42, 0xB1, 0x46, 0xD5, 0x39,
1958280304Sjkim        0xBF, 0x1B, 0xDE, 0x4E, 0x9C, 0x92,
1959280304Sjkim        /* y */
1960280304Sjkim        0x2E, 0x5A, 0x0E, 0xAF, 0x6E, 0x5E, 0x13, 0x05, 0xB9, 0x00, 0x4D, 0xCE,
1961280304Sjkim        0x5C, 0x0E, 0xD7, 0xFE, 0x59, 0xA3, 0x56, 0x08, 0xF3, 0x38, 0x37, 0xC8,
1962280304Sjkim        0x16, 0xD8, 0x0B, 0x79, 0xF4, 0x61,
1963280304Sjkim        /* order */
1964280304Sjkim        0x0C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
1965280304Sjkim        0xCC, 0xCC, 0xCC, 0xAC, 0x49, 0x12, 0xD2, 0xD9, 0xDF, 0x90, 0x3E, 0xF9,
1966280304Sjkim        0x88, 0x8B, 0x8A, 0x0E, 0x4C, 0xFF
1967280304Sjkim    }
1968280304Sjkim};
1969238405Sjkim
1970280304Sjkimstatic const struct {
1971280304Sjkim    EC_CURVE_DATA h;
1972280304Sjkim    unsigned char data[0 + 35 * 6];
1973280304Sjkim} _EC_X9_62_CHAR2_272W1 = {
1974280304Sjkim    {
1975280304Sjkim        NID_X9_62_characteristic_two_field, 0, 35, 0xFF06
1976280304Sjkim    },
1977280304Sjkim    {
1978280304Sjkim        /* no seed */
1979280304Sjkim        /* p */
1980280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1981280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1982280304Sjkim        0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B,
1983280304Sjkim        /* a */
1984280304Sjkim        0x00, 0x91, 0xA0, 0x91, 0xF0, 0x3B, 0x5F, 0xBA, 0x4A, 0xB2, 0xCC, 0xF4,
1985280304Sjkim        0x9C, 0x4E, 0xDD, 0x22, 0x0F, 0xB0, 0x28, 0x71, 0x2D, 0x42, 0xBE, 0x75,
1986280304Sjkim        0x2B, 0x2C, 0x40, 0x09, 0x4D, 0xBA, 0xCD, 0xB5, 0x86, 0xFB, 0x20,
1987280304Sjkim        /* b */
1988280304Sjkim        0x00, 0x71, 0x67, 0xEF, 0xC9, 0x2B, 0xB2, 0xE3, 0xCE, 0x7C, 0x8A, 0xAA,
1989280304Sjkim        0xFF, 0x34, 0xE1, 0x2A, 0x9C, 0x55, 0x70, 0x03, 0xD7, 0xC7, 0x3A, 0x6F,
1990280304Sjkim        0xAF, 0x00, 0x3F, 0x99, 0xF6, 0xCC, 0x84, 0x82, 0xE5, 0x40, 0xF7,
1991280304Sjkim        /* x */
1992280304Sjkim        0x00, 0x61, 0x08, 0xBA, 0xBB, 0x2C, 0xEE, 0xBC, 0xF7, 0x87, 0x05, 0x8A,
1993280304Sjkim        0x05, 0x6C, 0xBE, 0x0C, 0xFE, 0x62, 0x2D, 0x77, 0x23, 0xA2, 0x89, 0xE0,
1994280304Sjkim        0x8A, 0x07, 0xAE, 0x13, 0xEF, 0x0D, 0x10, 0xD1, 0x71, 0xDD, 0x8D,
1995280304Sjkim        /* y */
1996280304Sjkim        0x00, 0x10, 0xC7, 0x69, 0x57, 0x16, 0x85, 0x1E, 0xEF, 0x6B, 0xA7, 0xF6,
1997280304Sjkim        0x87, 0x2E, 0x61, 0x42, 0xFB, 0xD2, 0x41, 0xB8, 0x30, 0xFF, 0x5E, 0xFC,
1998280304Sjkim        0xAC, 0xEC, 0xCA, 0xB0, 0x5E, 0x02, 0x00, 0x5D, 0xDE, 0x9D, 0x23,
1999280304Sjkim        /* order */
2000280304Sjkim        0x00, 0x00, 0x01, 0x00, 0xFA, 0xF5, 0x13, 0x54, 0xE0, 0xE3, 0x9E, 0x48,
2001280304Sjkim        0x92, 0xDF, 0x6E, 0x31, 0x9C, 0x72, 0xC8, 0x16, 0x16, 0x03, 0xFA, 0x45,
2002280304Sjkim        0xAA, 0x7B, 0x99, 0x8A, 0x16, 0x7B, 0x8F, 0x1E, 0x62, 0x95, 0x21
2003280304Sjkim    }
2004280304Sjkim};
2005238405Sjkim
2006280304Sjkimstatic const struct {
2007280304Sjkim    EC_CURVE_DATA h;
2008280304Sjkim    unsigned char data[0 + 39 * 6];
2009280304Sjkim} _EC_X9_62_CHAR2_304W1 = {
2010280304Sjkim    {
2011280304Sjkim        NID_X9_62_characteristic_two_field, 0, 39, 0xFE2E
2012280304Sjkim    },
2013280304Sjkim    {
2014280304Sjkim        /* no seed */
2015280304Sjkim        /* p */
2016280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2017280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2018280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2019280304Sjkim        0x00, 0x08, 0x07,
2020280304Sjkim        /* a */
2021280304Sjkim        0x00, 0xFD, 0x0D, 0x69, 0x31, 0x49, 0xA1, 0x18, 0xF6, 0x51, 0xE6, 0xDC,
2022280304Sjkim        0xE6, 0x80, 0x20, 0x85, 0x37, 0x7E, 0x5F, 0x88, 0x2D, 0x1B, 0x51, 0x0B,
2023280304Sjkim        0x44, 0x16, 0x00, 0x74, 0xC1, 0x28, 0x80, 0x78, 0x36, 0x5A, 0x03, 0x96,
2024280304Sjkim        0xC8, 0xE6, 0x81,
2025280304Sjkim        /* b */
2026280304Sjkim        0x00, 0xBD, 0xDB, 0x97, 0xE5, 0x55, 0xA5, 0x0A, 0x90, 0x8E, 0x43, 0xB0,
2027280304Sjkim        0x1C, 0x79, 0x8E, 0xA5, 0xDA, 0xA6, 0x78, 0x8F, 0x1E, 0xA2, 0x79, 0x4E,
2028280304Sjkim        0xFC, 0xF5, 0x71, 0x66, 0xB8, 0xC1, 0x40, 0x39, 0x60, 0x1E, 0x55, 0x82,
2029280304Sjkim        0x73, 0x40, 0xBE,
2030280304Sjkim        /* x */
2031280304Sjkim        0x00, 0x19, 0x7B, 0x07, 0x84, 0x5E, 0x9B, 0xE2, 0xD9, 0x6A, 0xDB, 0x0F,
2032280304Sjkim        0x5F, 0x3C, 0x7F, 0x2C, 0xFF, 0xBD, 0x7A, 0x3E, 0xB8, 0xB6, 0xFE, 0xC3,
2033280304Sjkim        0x5C, 0x7F, 0xD6, 0x7F, 0x26, 0xDD, 0xF6, 0x28, 0x5A, 0x64, 0x4F, 0x74,
2034280304Sjkim        0x0A, 0x26, 0x14,
2035280304Sjkim        /* y */
2036280304Sjkim        0x00, 0xE1, 0x9F, 0xBE, 0xB7, 0x6E, 0x0D, 0xA1, 0x71, 0x51, 0x7E, 0xCF,
2037280304Sjkim        0x40, 0x1B, 0x50, 0x28, 0x9B, 0xF0, 0x14, 0x10, 0x32, 0x88, 0x52, 0x7A,
2038280304Sjkim        0x9B, 0x41, 0x6A, 0x10, 0x5E, 0x80, 0x26, 0x0B, 0x54, 0x9F, 0xDC, 0x1B,
2039280304Sjkim        0x92, 0xC0, 0x3B,
2040280304Sjkim        /* order */
2041280304Sjkim        0x00, 0x00, 0x01, 0x01, 0xD5, 0x56, 0x57, 0x2A, 0xAB, 0xAC, 0x80, 0x01,
2042280304Sjkim        0x01, 0xD5, 0x56, 0x57, 0x2A, 0xAB, 0xAC, 0x80, 0x01, 0x02, 0x2D, 0x5C,
2043280304Sjkim        0x91, 0xDD, 0x17, 0x3F, 0x8F, 0xB5, 0x61, 0xDA, 0x68, 0x99, 0x16, 0x44,
2044280304Sjkim        0x43, 0x05, 0x1D
2045280304Sjkim    }
2046280304Sjkim};
2047238405Sjkim
2048280304Sjkimstatic const struct {
2049280304Sjkim    EC_CURVE_DATA h;
2050280304Sjkim    unsigned char data[20 + 45 * 6];
2051280304Sjkim} _EC_X9_62_CHAR2_359V1 = {
2052280304Sjkim    {
2053280304Sjkim        NID_X9_62_characteristic_two_field, 20, 45, 0x4C
2054280304Sjkim    },
2055280304Sjkim    {
2056280304Sjkim        /* seed */
2057280304Sjkim        0x2B, 0x35, 0x49, 0x20, 0xB7, 0x24, 0xD6, 0x96, 0xE6, 0x76, 0x87, 0x56,
2058280304Sjkim        0x15, 0x17, 0x58, 0x5B, 0xA1, 0x33, 0x2D, 0xC6,
2059280304Sjkim        /* p */
2060280304Sjkim        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2061280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2062280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2063280304Sjkim        0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
2064280304Sjkim        /* a */
2065280304Sjkim        0x56, 0x67, 0x67, 0x6A, 0x65, 0x4B, 0x20, 0x75, 0x4F, 0x35, 0x6E, 0xA9,
2066280304Sjkim        0x20, 0x17, 0xD9, 0x46, 0x56, 0x7C, 0x46, 0x67, 0x55, 0x56, 0xF1, 0x95,
2067280304Sjkim        0x56, 0xA0, 0x46, 0x16, 0xB5, 0x67, 0xD2, 0x23, 0xA5, 0xE0, 0x56, 0x56,
2068280304Sjkim        0xFB, 0x54, 0x90, 0x16, 0xA9, 0x66, 0x56, 0xA5, 0x57,
2069280304Sjkim        /* b */
2070280304Sjkim        0x24, 0x72, 0xE2, 0xD0, 0x19, 0x7C, 0x49, 0x36, 0x3F, 0x1F, 0xE7, 0xF5,
2071280304Sjkim        0xB6, 0xDB, 0x07, 0x5D, 0x52, 0xB6, 0x94, 0x7D, 0x13, 0x5D, 0x8C, 0xA4,
2072280304Sjkim        0x45, 0x80, 0x5D, 0x39, 0xBC, 0x34, 0x56, 0x26, 0x08, 0x96, 0x87, 0x74,
2073280304Sjkim        0x2B, 0x63, 0x29, 0xE7, 0x06, 0x80, 0x23, 0x19, 0x88,
2074280304Sjkim        /* x */
2075280304Sjkim        0x3C, 0x25, 0x8E, 0xF3, 0x04, 0x77, 0x67, 0xE7, 0xED, 0xE0, 0xF1, 0xFD,
2076280304Sjkim        0xAA, 0x79, 0xDA, 0xEE, 0x38, 0x41, 0x36, 0x6A, 0x13, 0x2E, 0x16, 0x3A,
2077280304Sjkim        0xCE, 0xD4, 0xED, 0x24, 0x01, 0xDF, 0x9C, 0x6B, 0xDC, 0xDE, 0x98, 0xE8,
2078280304Sjkim        0xE7, 0x07, 0xC0, 0x7A, 0x22, 0x39, 0xB1, 0xB0, 0x97,
2079280304Sjkim        /* y */
2080280304Sjkim        0x53, 0xD7, 0xE0, 0x85, 0x29, 0x54, 0x70, 0x48, 0x12, 0x1E, 0x9C, 0x95,
2081280304Sjkim        0xF3, 0x79, 0x1D, 0xD8, 0x04, 0x96, 0x39, 0x48, 0xF3, 0x4F, 0xAE, 0x7B,
2082280304Sjkim        0xF4, 0x4E, 0xA8, 0x23, 0x65, 0xDC, 0x78, 0x68, 0xFE, 0x57, 0xE4, 0xAE,
2083280304Sjkim        0x2D, 0xE2, 0x11, 0x30, 0x5A, 0x40, 0x71, 0x04, 0xBD,
2084280304Sjkim        /* order */
2085280304Sjkim        0x01, 0xAF, 0x28, 0x6B, 0xCA, 0x1A, 0xF2, 0x86, 0xBC, 0xA1, 0xAF, 0x28,
2086280304Sjkim        0x6B, 0xCA, 0x1A, 0xF2, 0x86, 0xBC, 0xA1, 0xAF, 0x28, 0x6B, 0xC9, 0xFB,
2087280304Sjkim        0x8F, 0x6B, 0x85, 0xC5, 0x56, 0x89, 0x2C, 0x20, 0xA7, 0xEB, 0x96, 0x4F,
2088280304Sjkim        0xE7, 0x71, 0x9E, 0x74, 0xF4, 0x90, 0x75, 0x8D, 0x3B
2089280304Sjkim    }
2090280304Sjkim};
2091238405Sjkim
2092280304Sjkimstatic const struct {
2093280304Sjkim    EC_CURVE_DATA h;
2094280304Sjkim    unsigned char data[0 + 47 * 6];
2095280304Sjkim} _EC_X9_62_CHAR2_368W1 = {
2096280304Sjkim    {
2097280304Sjkim        NID_X9_62_characteristic_two_field, 0, 47, 0xFF70
2098280304Sjkim    },
2099280304Sjkim    {
2100280304Sjkim        /* no seed */
2101280304Sjkim        /* p */
2102280304Sjkim        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2103280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2104280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2105280304Sjkim        0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
2106280304Sjkim        /* a */
2107280304Sjkim        0x00, 0xE0, 0xD2, 0xEE, 0x25, 0x09, 0x52, 0x06, 0xF5, 0xE2, 0xA4, 0xF9,
2108280304Sjkim        0xED, 0x22, 0x9F, 0x1F, 0x25, 0x6E, 0x79, 0xA0, 0xE2, 0xB4, 0x55, 0x97,
2109280304Sjkim        0x0D, 0x8D, 0x0D, 0x86, 0x5B, 0xD9, 0x47, 0x78, 0xC5, 0x76, 0xD6, 0x2F,
2110280304Sjkim        0x0A, 0xB7, 0x51, 0x9C, 0xCD, 0x2A, 0x1A, 0x90, 0x6A, 0xE3, 0x0D,
2111280304Sjkim        /* b */
2112280304Sjkim        0x00, 0xFC, 0x12, 0x17, 0xD4, 0x32, 0x0A, 0x90, 0x45, 0x2C, 0x76, 0x0A,
2113280304Sjkim        0x58, 0xED, 0xCD, 0x30, 0xC8, 0xDD, 0x06, 0x9B, 0x3C, 0x34, 0x45, 0x38,
2114280304Sjkim        0x37, 0xA3, 0x4E, 0xD5, 0x0C, 0xB5, 0x49, 0x17, 0xE1, 0xC2, 0x11, 0x2D,
2115280304Sjkim        0x84, 0xD1, 0x64, 0xF4, 0x44, 0xF8, 0xF7, 0x47, 0x86, 0x04, 0x6A,
2116280304Sjkim        /* x */
2117280304Sjkim        0x00, 0x10, 0x85, 0xE2, 0x75, 0x53, 0x81, 0xDC, 0xCC, 0xE3, 0xC1, 0x55,
2118280304Sjkim        0x7A, 0xFA, 0x10, 0xC2, 0xF0, 0xC0, 0xC2, 0x82, 0x56, 0x46, 0xC5, 0xB3,
2119280304Sjkim        0x4A, 0x39, 0x4C, 0xBC, 0xFA, 0x8B, 0xC1, 0x6B, 0x22, 0xE7, 0xE7, 0x89,
2120280304Sjkim        0xE9, 0x27, 0xBE, 0x21, 0x6F, 0x02, 0xE1, 0xFB, 0x13, 0x6A, 0x5F,
2121280304Sjkim        /* y */
2122280304Sjkim        0x00, 0x7B, 0x3E, 0xB1, 0xBD, 0xDC, 0xBA, 0x62, 0xD5, 0xD8, 0xB2, 0x05,
2123280304Sjkim        0x9B, 0x52, 0x57, 0x97, 0xFC, 0x73, 0x82, 0x2C, 0x59, 0x05, 0x9C, 0x62,
2124280304Sjkim        0x3A, 0x45, 0xFF, 0x38, 0x43, 0xCE, 0xE8, 0xF8, 0x7C, 0xD1, 0x85, 0x5A,
2125280304Sjkim        0xDA, 0xA8, 0x1E, 0x2A, 0x07, 0x50, 0xB8, 0x0F, 0xDA, 0x23, 0x10,
2126280304Sjkim        /* order */
2127280304Sjkim        0x00, 0x00, 0x01, 0x00, 0x90, 0x51, 0x2D, 0xA9, 0xAF, 0x72, 0xB0, 0x83,
2128280304Sjkim        0x49, 0xD9, 0x8A, 0x5D, 0xD4, 0xC7, 0xB0, 0x53, 0x2E, 0xCA, 0x51, 0xCE,
2129280304Sjkim        0x03, 0xE2, 0xD1, 0x0F, 0x3B, 0x7A, 0xC5, 0x79, 0xBD, 0x87, 0xE9, 0x09,
2130280304Sjkim        0xAE, 0x40, 0xA6, 0xF1, 0x31, 0xE9, 0xCF, 0xCE, 0x5B, 0xD9, 0x67
2131280304Sjkim    }
2132280304Sjkim};
2133238405Sjkim
2134280304Sjkimstatic const struct {
2135280304Sjkim    EC_CURVE_DATA h;
2136280304Sjkim    unsigned char data[0 + 54 * 6];
2137280304Sjkim} _EC_X9_62_CHAR2_431R1 = {
2138280304Sjkim    {
2139280304Sjkim        NID_X9_62_characteristic_two_field, 0, 54, 0x2760
2140280304Sjkim    },
2141280304Sjkim    {
2142280304Sjkim        /* no seed */
2143280304Sjkim        /* p */
2144280304Sjkim        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2145280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2146280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2147280304Sjkim        0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2148280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
2149280304Sjkim        /* a */
2150280304Sjkim        0x1A, 0x82, 0x7E, 0xF0, 0x0D, 0xD6, 0xFC, 0x0E, 0x23, 0x4C, 0xAF, 0x04,
2151280304Sjkim        0x6C, 0x6A, 0x5D, 0x8A, 0x85, 0x39, 0x5B, 0x23, 0x6C, 0xC4, 0xAD, 0x2C,
2152280304Sjkim        0xF3, 0x2A, 0x0C, 0xAD, 0xBD, 0xC9, 0xDD, 0xF6, 0x20, 0xB0, 0xEB, 0x99,
2153280304Sjkim        0x06, 0xD0, 0x95, 0x7F, 0x6C, 0x6F, 0xEA, 0xCD, 0x61, 0x54, 0x68, 0xDF,
2154280304Sjkim        0x10, 0x4D, 0xE2, 0x96, 0xCD, 0x8F,
2155280304Sjkim        /* b */
2156280304Sjkim        0x10, 0xD9, 0xB4, 0xA3, 0xD9, 0x04, 0x7D, 0x8B, 0x15, 0x43, 0x59, 0xAB,
2157280304Sjkim        0xFB, 0x1B, 0x7F, 0x54, 0x85, 0xB0, 0x4C, 0xEB, 0x86, 0x82, 0x37, 0xDD,
2158280304Sjkim        0xC9, 0xDE, 0xDA, 0x98, 0x2A, 0x67, 0x9A, 0x5A, 0x91, 0x9B, 0x62, 0x6D,
2159280304Sjkim        0x4E, 0x50, 0xA8, 0xDD, 0x73, 0x1B, 0x10, 0x7A, 0x99, 0x62, 0x38, 0x1F,
2160280304Sjkim        0xB5, 0xD8, 0x07, 0xBF, 0x26, 0x18,
2161280304Sjkim        /* x */
2162280304Sjkim        0x12, 0x0F, 0xC0, 0x5D, 0x3C, 0x67, 0xA9, 0x9D, 0xE1, 0x61, 0xD2, 0xF4,
2163280304Sjkim        0x09, 0x26, 0x22, 0xFE, 0xCA, 0x70, 0x1B, 0xE4, 0xF5, 0x0F, 0x47, 0x58,
2164280304Sjkim        0x71, 0x4E, 0x8A, 0x87, 0xBB, 0xF2, 0xA6, 0x58, 0xEF, 0x8C, 0x21, 0xE7,
2165280304Sjkim        0xC5, 0xEF, 0xE9, 0x65, 0x36, 0x1F, 0x6C, 0x29, 0x99, 0xC0, 0xC2, 0x47,
2166280304Sjkim        0xB0, 0xDB, 0xD7, 0x0C, 0xE6, 0xB7,
2167280304Sjkim        /* y */
2168280304Sjkim        0x20, 0xD0, 0xAF, 0x89, 0x03, 0xA9, 0x6F, 0x8D, 0x5F, 0xA2, 0xC2, 0x55,
2169280304Sjkim        0x74, 0x5D, 0x3C, 0x45, 0x1B, 0x30, 0x2C, 0x93, 0x46, 0xD9, 0xB7, 0xE4,
2170280304Sjkim        0x85, 0xE7, 0xBC, 0xE4, 0x1F, 0x6B, 0x59, 0x1F, 0x3E, 0x8F, 0x6A, 0xDD,
2171280304Sjkim        0xCB, 0xB0, 0xBC, 0x4C, 0x2F, 0x94, 0x7A, 0x7D, 0xE1, 0xA8, 0x9B, 0x62,
2172280304Sjkim        0x5D, 0x6A, 0x59, 0x8B, 0x37, 0x60,
2173280304Sjkim        /* order */
2174280304Sjkim        0x00, 0x03, 0x40, 0x34, 0x03, 0x40, 0x34, 0x03, 0x40, 0x34, 0x03, 0x40,
2175280304Sjkim        0x34, 0x03, 0x40, 0x34, 0x03, 0x40, 0x34, 0x03, 0x40, 0x34, 0x03, 0x40,
2176280304Sjkim        0x34, 0x03, 0x40, 0x34, 0x03, 0x23, 0xC3, 0x13, 0xFA, 0xB5, 0x05, 0x89,
2177280304Sjkim        0x70, 0x3B, 0x5E, 0xC6, 0x8D, 0x35, 0x87, 0xFE, 0xC6, 0x0D, 0x16, 0x1C,
2178280304Sjkim        0xC1, 0x49, 0xC1, 0xAD, 0x4A, 0x91
2179280304Sjkim    }
2180280304Sjkim};
2181160814Ssimon
2182280304Sjkimstatic const struct {
2183280304Sjkim    EC_CURVE_DATA h;
2184280304Sjkim    unsigned char data[0 + 15 * 6];
2185280304Sjkim} _EC_WTLS_1 = {
2186280304Sjkim    {
2187280304Sjkim        NID_X9_62_characteristic_two_field, 0, 15, 2
2188280304Sjkim    },
2189280304Sjkim    {
2190280304Sjkim        /* no seed */
2191280304Sjkim        /* p */
2192280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2193280304Sjkim        0x00, 0x02, 0x01,
2194280304Sjkim        /* a */
2195280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2196280304Sjkim        0x00, 0x00, 0x01,
2197280304Sjkim        /* b */
2198280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2199280304Sjkim        0x00, 0x00, 0x01,
2200280304Sjkim        /* x */
2201280304Sjkim        0x01, 0x66, 0x79, 0x79, 0xA4, 0x0B, 0xA4, 0x97, 0xE5, 0xD5, 0xC2, 0x70,
2202280304Sjkim        0x78, 0x06, 0x17,
2203280304Sjkim        /* y */
2204280304Sjkim        0x00, 0xF4, 0x4B, 0x4A, 0xF1, 0xEC, 0xC2, 0x63, 0x0E, 0x08, 0x78, 0x5C,
2205280304Sjkim        0xEB, 0xCC, 0x15,
2206280304Sjkim        /* order */
2207280304Sjkim        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xBF, 0x91, 0xAF,
2208280304Sjkim        0x6D, 0xEA, 0x73
2209280304Sjkim    }
2210280304Sjkim};
2211160814Ssimon
2212160814Ssimon/* IPSec curves */
2213280304Sjkim/*
2214280304Sjkim * NOTE: The of curves over a extension field of non prime degree is not
2215280304Sjkim * recommended (Weil-descent). As the group order is not a prime this curve
2216280304Sjkim * is not suitable for ECDSA.
2217160814Ssimon */
2218280304Sjkimstatic const struct {
2219280304Sjkim    EC_CURVE_DATA h;
2220280304Sjkim    unsigned char data[0 + 20 * 6];
2221280304Sjkim} _EC_IPSEC_155_ID3 = {
2222280304Sjkim    {
2223280304Sjkim        NID_X9_62_characteristic_two_field, 0, 20, 3
2224280304Sjkim    },
2225280304Sjkim    {
2226280304Sjkim        /* no seed */
2227280304Sjkim        /* p */
2228280304Sjkim        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2229280304Sjkim        0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
2230280304Sjkim        /* a */
2231280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2232280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2233280304Sjkim        /* b */
2234280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2235280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x33, 0x8f,
2236280304Sjkim        /* x */
2237280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2238280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b,
2239280304Sjkim        /* y */
2240280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2241280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc8,
2242280304Sjkim        /* order */
2243280304Sjkim        0x02, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xC7, 0xF3,
2244280304Sjkim        0xC7, 0x88, 0x1B, 0xD0, 0x86, 0x8F, 0xA8, 0x6C
2245280304Sjkim    }
2246280304Sjkim};
2247238405Sjkim
2248280304Sjkim/*
2249280304Sjkim * NOTE: The of curves over a extension field of non prime degree is not
2250280304Sjkim * recommended (Weil-descent). As the group order is not a prime this curve
2251280304Sjkim * is not suitable for ECDSA.
2252160814Ssimon */
2253280304Sjkimstatic const struct {
2254280304Sjkim    EC_CURVE_DATA h;
2255280304Sjkim    unsigned char data[0 + 24 * 6];
2256280304Sjkim} _EC_IPSEC_185_ID4 = {
2257280304Sjkim    {
2258280304Sjkim        NID_X9_62_characteristic_two_field, 0, 24, 2
2259280304Sjkim    },
2260280304Sjkim    {
2261280304Sjkim        /* no seed */
2262280304Sjkim        /* p */
2263280304Sjkim        0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2264280304Sjkim        0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
2265280304Sjkim        /* a */
2266280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2267280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2268280304Sjkim        /* b */
2269280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2270280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xe9,
2271280304Sjkim        /* x */
2272280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2273280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
2274280304Sjkim        /* y */
2275280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2276280304Sjkim        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d,
2277280304Sjkim        /* order */
2278280304Sjkim        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2279280304Sjkim        0xED, 0xF9, 0x7C, 0x44, 0xDB, 0x9F, 0x24, 0x20, 0xBA, 0xFC, 0xA7, 0x5E
2280280304Sjkim    }
2281280304Sjkim};
2282160814Ssimon
2283238405Sjkim#endif
2284238405Sjkim
2285160814Ssimontypedef struct _ec_list_element_st {
2286280304Sjkim    int nid;
2287280304Sjkim    const EC_CURVE_DATA *data;
2288280304Sjkim    const EC_METHOD *(*meth) (void);
2289280304Sjkim    const char *comment;
2290280304Sjkim} ec_list_element;
2291160814Ssimon
2292160814Ssimonstatic const ec_list_element curve_list[] = {
2293280304Sjkim    /* prime field curves */
2294280304Sjkim    /* secg curves */
2295280304Sjkim    {NID_secp112r1, &_EC_SECG_PRIME_112R1.h, 0,
2296280304Sjkim     "SECG/WTLS curve over a 112 bit prime field"},
2297280304Sjkim    {NID_secp112r2, &_EC_SECG_PRIME_112R2.h, 0,
2298280304Sjkim     "SECG curve over a 112 bit prime field"},
2299280304Sjkim    {NID_secp128r1, &_EC_SECG_PRIME_128R1.h, 0,
2300280304Sjkim     "SECG curve over a 128 bit prime field"},
2301280304Sjkim    {NID_secp128r2, &_EC_SECG_PRIME_128R2.h, 0,
2302280304Sjkim     "SECG curve over a 128 bit prime field"},
2303280304Sjkim    {NID_secp160k1, &_EC_SECG_PRIME_160K1.h, 0,
2304280304Sjkim     "SECG curve over a 160 bit prime field"},
2305280304Sjkim    {NID_secp160r1, &_EC_SECG_PRIME_160R1.h, 0,
2306280304Sjkim     "SECG curve over a 160 bit prime field"},
2307280304Sjkim    {NID_secp160r2, &_EC_SECG_PRIME_160R2.h, 0,
2308280304Sjkim     "SECG/WTLS curve over a 160 bit prime field"},
2309280304Sjkim    /* SECG secp192r1 is the same as X9.62 prime192v1 and hence omitted */
2310280304Sjkim    {NID_secp192k1, &_EC_SECG_PRIME_192K1.h, 0,
2311280304Sjkim     "SECG curve over a 192 bit prime field"},
2312280304Sjkim    {NID_secp224k1, &_EC_SECG_PRIME_224K1.h, 0,
2313280304Sjkim     "SECG curve over a 224 bit prime field"},
2314238405Sjkim#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
2315280304Sjkim    {NID_secp224r1, &_EC_NIST_PRIME_224.h, EC_GFp_nistp224_method,
2316280304Sjkim     "NIST/SECG curve over a 224 bit prime field"},
2317238405Sjkim#else
2318280304Sjkim    {NID_secp224r1, &_EC_NIST_PRIME_224.h, 0,
2319280304Sjkim     "NIST/SECG curve over a 224 bit prime field"},
2320238405Sjkim#endif
2321280304Sjkim    {NID_secp256k1, &_EC_SECG_PRIME_256K1.h, 0,
2322280304Sjkim     "SECG curve over a 256 bit prime field"},
2323280304Sjkim    /* SECG secp256r1 is the same as X9.62 prime256v1 and hence omitted */
2324280304Sjkim    {NID_secp384r1, &_EC_NIST_PRIME_384.h, 0,
2325280304Sjkim     "NIST/SECG curve over a 384 bit prime field"},
2326238405Sjkim#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
2327280304Sjkim    {NID_secp521r1, &_EC_NIST_PRIME_521.h, EC_GFp_nistp521_method,
2328280304Sjkim     "NIST/SECG curve over a 521 bit prime field"},
2329238405Sjkim#else
2330280304Sjkim    {NID_secp521r1, &_EC_NIST_PRIME_521.h, 0,
2331280304Sjkim     "NIST/SECG curve over a 521 bit prime field"},
2332238405Sjkim#endif
2333280304Sjkim    /* X9.62 curves */
2334280304Sjkim    {NID_X9_62_prime192v1, &_EC_NIST_PRIME_192.h, 0,
2335280304Sjkim     "NIST/X9.62/SECG curve over a 192 bit prime field"},
2336280304Sjkim    {NID_X9_62_prime192v2, &_EC_X9_62_PRIME_192V2.h, 0,
2337280304Sjkim     "X9.62 curve over a 192 bit prime field"},
2338280304Sjkim    {NID_X9_62_prime192v3, &_EC_X9_62_PRIME_192V3.h, 0,
2339280304Sjkim     "X9.62 curve over a 192 bit prime field"},
2340280304Sjkim    {NID_X9_62_prime239v1, &_EC_X9_62_PRIME_239V1.h, 0,
2341280304Sjkim     "X9.62 curve over a 239 bit prime field"},
2342280304Sjkim    {NID_X9_62_prime239v2, &_EC_X9_62_PRIME_239V2.h, 0,
2343280304Sjkim     "X9.62 curve over a 239 bit prime field"},
2344280304Sjkim    {NID_X9_62_prime239v3, &_EC_X9_62_PRIME_239V3.h, 0,
2345280304Sjkim     "X9.62 curve over a 239 bit prime field"},
2346238405Sjkim#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
2347280304Sjkim    {NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h, EC_GFp_nistp256_method,
2348280304Sjkim     "X9.62/SECG curve over a 256 bit prime field"},
2349238405Sjkim#else
2350280304Sjkim    {NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h, 0,
2351280304Sjkim     "X9.62/SECG curve over a 256 bit prime field"},
2352238405Sjkim#endif
2353238405Sjkim#ifndef OPENSSL_NO_EC2M
2354280304Sjkim    /* characteristic two field curves */
2355280304Sjkim    /* NIST/SECG curves */
2356280304Sjkim    {NID_sect113r1, &_EC_SECG_CHAR2_113R1.h, 0,
2357280304Sjkim     "SECG curve over a 113 bit binary field"},
2358280304Sjkim    {NID_sect113r2, &_EC_SECG_CHAR2_113R2.h, 0,
2359280304Sjkim     "SECG curve over a 113 bit binary field"},
2360280304Sjkim    {NID_sect131r1, &_EC_SECG_CHAR2_131R1.h, 0,
2361280304Sjkim     "SECG/WTLS curve over a 131 bit binary field"},
2362280304Sjkim    {NID_sect131r2, &_EC_SECG_CHAR2_131R2.h, 0,
2363280304Sjkim     "SECG curve over a 131 bit binary field"},
2364280304Sjkim    {NID_sect163k1, &_EC_NIST_CHAR2_163K.h, 0,
2365280304Sjkim     "NIST/SECG/WTLS curve over a 163 bit binary field"},
2366280304Sjkim    {NID_sect163r1, &_EC_SECG_CHAR2_163R1.h, 0,
2367280304Sjkim     "SECG curve over a 163 bit binary field"},
2368280304Sjkim    {NID_sect163r2, &_EC_NIST_CHAR2_163B.h, 0,
2369280304Sjkim     "NIST/SECG curve over a 163 bit binary field"},
2370280304Sjkim    {NID_sect193r1, &_EC_SECG_CHAR2_193R1.h, 0,
2371280304Sjkim     "SECG curve over a 193 bit binary field"},
2372280304Sjkim    {NID_sect193r2, &_EC_SECG_CHAR2_193R2.h, 0,
2373280304Sjkim     "SECG curve over a 193 bit binary field"},
2374280304Sjkim    {NID_sect233k1, &_EC_NIST_CHAR2_233K.h, 0,
2375280304Sjkim     "NIST/SECG/WTLS curve over a 233 bit binary field"},
2376280304Sjkim    {NID_sect233r1, &_EC_NIST_CHAR2_233B.h, 0,
2377280304Sjkim     "NIST/SECG/WTLS curve over a 233 bit binary field"},
2378280304Sjkim    {NID_sect239k1, &_EC_SECG_CHAR2_239K1.h, 0,
2379280304Sjkim     "SECG curve over a 239 bit binary field"},
2380280304Sjkim    {NID_sect283k1, &_EC_NIST_CHAR2_283K.h, 0,
2381280304Sjkim     "NIST/SECG curve over a 283 bit binary field"},
2382280304Sjkim    {NID_sect283r1, &_EC_NIST_CHAR2_283B.h, 0,
2383280304Sjkim     "NIST/SECG curve over a 283 bit binary field"},
2384280304Sjkim    {NID_sect409k1, &_EC_NIST_CHAR2_409K.h, 0,
2385280304Sjkim     "NIST/SECG curve over a 409 bit binary field"},
2386280304Sjkim    {NID_sect409r1, &_EC_NIST_CHAR2_409B.h, 0,
2387280304Sjkim     "NIST/SECG curve over a 409 bit binary field"},
2388280304Sjkim    {NID_sect571k1, &_EC_NIST_CHAR2_571K.h, 0,
2389280304Sjkim     "NIST/SECG curve over a 571 bit binary field"},
2390280304Sjkim    {NID_sect571r1, &_EC_NIST_CHAR2_571B.h, 0,
2391280304Sjkim     "NIST/SECG curve over a 571 bit binary field"},
2392280304Sjkim    /* X9.62 curves */
2393280304Sjkim    {NID_X9_62_c2pnb163v1, &_EC_X9_62_CHAR2_163V1.h, 0,
2394280304Sjkim     "X9.62 curve over a 163 bit binary field"},
2395280304Sjkim    {NID_X9_62_c2pnb163v2, &_EC_X9_62_CHAR2_163V2.h, 0,
2396280304Sjkim     "X9.62 curve over a 163 bit binary field"},
2397280304Sjkim    {NID_X9_62_c2pnb163v3, &_EC_X9_62_CHAR2_163V3.h, 0,
2398280304Sjkim     "X9.62 curve over a 163 bit binary field"},
2399280304Sjkim    {NID_X9_62_c2pnb176v1, &_EC_X9_62_CHAR2_176V1.h, 0,
2400280304Sjkim     "X9.62 curve over a 176 bit binary field"},
2401280304Sjkim    {NID_X9_62_c2tnb191v1, &_EC_X9_62_CHAR2_191V1.h, 0,
2402280304Sjkim     "X9.62 curve over a 191 bit binary field"},
2403280304Sjkim    {NID_X9_62_c2tnb191v2, &_EC_X9_62_CHAR2_191V2.h, 0,
2404280304Sjkim     "X9.62 curve over a 191 bit binary field"},
2405280304Sjkim    {NID_X9_62_c2tnb191v3, &_EC_X9_62_CHAR2_191V3.h, 0,
2406280304Sjkim     "X9.62 curve over a 191 bit binary field"},
2407280304Sjkim    {NID_X9_62_c2pnb208w1, &_EC_X9_62_CHAR2_208W1.h, 0,
2408280304Sjkim     "X9.62 curve over a 208 bit binary field"},
2409280304Sjkim    {NID_X9_62_c2tnb239v1, &_EC_X9_62_CHAR2_239V1.h, 0,
2410280304Sjkim     "X9.62 curve over a 239 bit binary field"},
2411280304Sjkim    {NID_X9_62_c2tnb239v2, &_EC_X9_62_CHAR2_239V2.h, 0,
2412280304Sjkim     "X9.62 curve over a 239 bit binary field"},
2413280304Sjkim    {NID_X9_62_c2tnb239v3, &_EC_X9_62_CHAR2_239V3.h, 0,
2414280304Sjkim     "X9.62 curve over a 239 bit binary field"},
2415280304Sjkim    {NID_X9_62_c2pnb272w1, &_EC_X9_62_CHAR2_272W1.h, 0,
2416280304Sjkim     "X9.62 curve over a 272 bit binary field"},
2417280304Sjkim    {NID_X9_62_c2pnb304w1, &_EC_X9_62_CHAR2_304W1.h, 0,
2418280304Sjkim     "X9.62 curve over a 304 bit binary field"},
2419280304Sjkim    {NID_X9_62_c2tnb359v1, &_EC_X9_62_CHAR2_359V1.h, 0,
2420280304Sjkim     "X9.62 curve over a 359 bit binary field"},
2421280304Sjkim    {NID_X9_62_c2pnb368w1, &_EC_X9_62_CHAR2_368W1.h, 0,
2422280304Sjkim     "X9.62 curve over a 368 bit binary field"},
2423280304Sjkim    {NID_X9_62_c2tnb431r1, &_EC_X9_62_CHAR2_431R1.h, 0,
2424280304Sjkim     "X9.62 curve over a 431 bit binary field"},
2425280304Sjkim    /*
2426280304Sjkim     * the WAP/WTLS curves [unlike SECG, spec has its own OIDs for curves
2427280304Sjkim     * from X9.62]
2428280304Sjkim     */
2429280304Sjkim    {NID_wap_wsg_idm_ecid_wtls1, &_EC_WTLS_1.h, 0,
2430280304Sjkim     "WTLS curve over a 113 bit binary field"},
2431280304Sjkim    {NID_wap_wsg_idm_ecid_wtls3, &_EC_NIST_CHAR2_163K.h, 0,
2432280304Sjkim     "NIST/SECG/WTLS curve over a 163 bit binary field"},
2433280304Sjkim    {NID_wap_wsg_idm_ecid_wtls4, &_EC_SECG_CHAR2_113R1.h, 0,
2434280304Sjkim     "SECG curve over a 113 bit binary field"},
2435280304Sjkim    {NID_wap_wsg_idm_ecid_wtls5, &_EC_X9_62_CHAR2_163V1.h, 0,
2436280304Sjkim     "X9.62 curve over a 163 bit binary field"},
2437238405Sjkim#endif
2438280304Sjkim    {NID_wap_wsg_idm_ecid_wtls6, &_EC_SECG_PRIME_112R1.h, 0,
2439280304Sjkim     "SECG/WTLS curve over a 112 bit prime field"},
2440280304Sjkim    {NID_wap_wsg_idm_ecid_wtls7, &_EC_SECG_PRIME_160R2.h, 0,
2441280304Sjkim     "SECG/WTLS curve over a 160 bit prime field"},
2442280304Sjkim    {NID_wap_wsg_idm_ecid_wtls8, &_EC_WTLS_8.h, 0,
2443280304Sjkim     "WTLS curve over a 112 bit prime field"},
2444280304Sjkim    {NID_wap_wsg_idm_ecid_wtls9, &_EC_WTLS_9.h, 0,
2445280304Sjkim     "WTLS curve over a 160 bit prime field"},
2446238405Sjkim#ifndef OPENSSL_NO_EC2M
2447280304Sjkim    {NID_wap_wsg_idm_ecid_wtls10, &_EC_NIST_CHAR2_233K.h, 0,
2448280304Sjkim     "NIST/SECG/WTLS curve over a 233 bit binary field"},
2449280304Sjkim    {NID_wap_wsg_idm_ecid_wtls11, &_EC_NIST_CHAR2_233B.h, 0,
2450280304Sjkim     "NIST/SECG/WTLS curve over a 233 bit binary field"},
2451238405Sjkim#endif
2452280304Sjkim    {NID_wap_wsg_idm_ecid_wtls12, &_EC_WTLS_12.h, 0,
2453280304Sjkim     "WTLS curvs over a 224 bit prime field"},
2454238405Sjkim#ifndef OPENSSL_NO_EC2M
2455280304Sjkim    /* IPSec curves */
2456280304Sjkim    {NID_ipsec3, &_EC_IPSEC_155_ID3.h, 0,
2457280304Sjkim     "\n\tIPSec/IKE/Oakley curve #3 over a 155 bit binary field.\n"
2458280304Sjkim     "\tNot suitable for ECDSA.\n\tQuestionable extension field!"},
2459280304Sjkim    {NID_ipsec4, &_EC_IPSEC_185_ID4.h, 0,
2460280304Sjkim     "\n\tIPSec/IKE/Oakley curve #4 over a 185 bit binary field.\n"
2461280304Sjkim     "\tNot suitable for ECDSA.\n\tQuestionable extension field!"},
2462238405Sjkim#endif
2463160814Ssimon};
2464160814Ssimon
2465238405Sjkim#define curve_list_length (sizeof(curve_list)/sizeof(ec_list_element))
2466160814Ssimon
2467238405Sjkimstatic EC_GROUP *ec_group_new_from_data(const ec_list_element curve)
2468280304Sjkim{
2469280304Sjkim    EC_GROUP *group = NULL;
2470280304Sjkim    EC_POINT *P = NULL;
2471280304Sjkim    BN_CTX *ctx = NULL;
2472280304Sjkim    BIGNUM *p = NULL, *a = NULL, *b = NULL, *x = NULL, *y = NULL, *order =
2473280304Sjkim        NULL;
2474280304Sjkim    int ok = 0;
2475280304Sjkim    int seed_len, param_len;
2476280304Sjkim    const EC_METHOD *meth;
2477280304Sjkim    const EC_CURVE_DATA *data;
2478280304Sjkim    const unsigned char *params;
2479160814Ssimon
2480280304Sjkim    if ((ctx = BN_CTX_new()) == NULL) {
2481280304Sjkim        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_MALLOC_FAILURE);
2482280304Sjkim        goto err;
2483280304Sjkim    }
2484238405Sjkim
2485280304Sjkim    data = curve.data;
2486280304Sjkim    seed_len = data->seed_len;
2487280304Sjkim    param_len = data->param_len;
2488280304Sjkim    params = (const unsigned char *)(data + 1); /* skip header */
2489280304Sjkim    params += seed_len;         /* skip seed */
2490238405Sjkim
2491280304Sjkim    if (!(p = BN_bin2bn(params + 0 * param_len, param_len, NULL))
2492280304Sjkim        || !(a = BN_bin2bn(params + 1 * param_len, param_len, NULL))
2493280304Sjkim        || !(b = BN_bin2bn(params + 2 * param_len, param_len, NULL))) {
2494280304Sjkim        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
2495280304Sjkim        goto err;
2496280304Sjkim    }
2497160814Ssimon
2498280304Sjkim    if (curve.meth != 0) {
2499280304Sjkim        meth = curve.meth();
2500280304Sjkim        if (((group = EC_GROUP_new(meth)) == NULL) ||
2501280304Sjkim            (!(group->meth->group_set_curve(group, p, a, b, ctx)))) {
2502280304Sjkim            ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2503280304Sjkim            goto err;
2504280304Sjkim        }
2505280304Sjkim    } else if (data->field_type == NID_X9_62_prime_field) {
2506280304Sjkim        if ((group = EC_GROUP_new_curve_GFp(p, a, b, ctx)) == NULL) {
2507280304Sjkim            ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2508280304Sjkim            goto err;
2509280304Sjkim        }
2510280304Sjkim    }
2511238405Sjkim#ifndef OPENSSL_NO_EC2M
2512280304Sjkim    else {                      /* field_type ==
2513280304Sjkim                                 * NID_X9_62_characteristic_two_field */
2514280304Sjkim
2515280304Sjkim        if ((group = EC_GROUP_new_curve_GF2m(p, a, b, ctx)) == NULL) {
2516280304Sjkim            ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2517280304Sjkim            goto err;
2518280304Sjkim        }
2519280304Sjkim    }
2520238405Sjkim#endif
2521160814Ssimon
2522280304Sjkim    if ((P = EC_POINT_new(group)) == NULL) {
2523280304Sjkim        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2524280304Sjkim        goto err;
2525280304Sjkim    }
2526238405Sjkim
2527280304Sjkim    if (!(x = BN_bin2bn(params + 3 * param_len, param_len, NULL))
2528280304Sjkim        || !(y = BN_bin2bn(params + 4 * param_len, param_len, NULL))) {
2529280304Sjkim        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
2530280304Sjkim        goto err;
2531280304Sjkim    }
2532280304Sjkim    if (!EC_POINT_set_affine_coordinates_GFp(group, P, x, y, ctx)) {
2533280304Sjkim        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2534280304Sjkim        goto err;
2535280304Sjkim    }
2536280304Sjkim    if (!(order = BN_bin2bn(params + 5 * param_len, param_len, NULL))
2537280304Sjkim        || !BN_set_word(x, (BN_ULONG)data->cofactor)) {
2538280304Sjkim        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB);
2539280304Sjkim        goto err;
2540280304Sjkim    }
2541280304Sjkim    if (!EC_GROUP_set_generator(group, P, order, x)) {
2542280304Sjkim        ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2543280304Sjkim        goto err;
2544280304Sjkim    }
2545280304Sjkim    if (seed_len) {
2546280304Sjkim        if (!EC_GROUP_set_seed(group, params - seed_len, seed_len)) {
2547280304Sjkim            ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB);
2548280304Sjkim            goto err;
2549280304Sjkim        }
2550280304Sjkim    }
2551280304Sjkim    ok = 1;
2552280304Sjkim err:
2553280304Sjkim    if (!ok) {
2554280304Sjkim        EC_GROUP_free(group);
2555280304Sjkim        group = NULL;
2556280304Sjkim    }
2557280304Sjkim    if (P)
2558280304Sjkim        EC_POINT_free(P);
2559280304Sjkim    if (ctx)
2560280304Sjkim        BN_CTX_free(ctx);
2561280304Sjkim    if (p)
2562280304Sjkim        BN_free(p);
2563280304Sjkim    if (a)
2564280304Sjkim        BN_free(a);
2565280304Sjkim    if (b)
2566280304Sjkim        BN_free(b);
2567280304Sjkim    if (order)
2568280304Sjkim        BN_free(order);
2569280304Sjkim    if (x)
2570280304Sjkim        BN_free(x);
2571280304Sjkim    if (y)
2572280304Sjkim        BN_free(y);
2573280304Sjkim    return group;
2574280304Sjkim}
2575160814Ssimon
2576160814SsimonEC_GROUP *EC_GROUP_new_by_curve_name(int nid)
2577280304Sjkim{
2578280304Sjkim    size_t i;
2579280304Sjkim    EC_GROUP *ret = NULL;
2580160814Ssimon
2581280304Sjkim    if (nid <= 0)
2582280304Sjkim        return NULL;
2583160814Ssimon
2584280304Sjkim    for (i = 0; i < curve_list_length; i++)
2585280304Sjkim        if (curve_list[i].nid == nid) {
2586280304Sjkim            ret = ec_group_new_from_data(curve_list[i]);
2587280304Sjkim            break;
2588280304Sjkim        }
2589160814Ssimon
2590280304Sjkim    if (ret == NULL) {
2591280304Sjkim        ECerr(EC_F_EC_GROUP_NEW_BY_CURVE_NAME, EC_R_UNKNOWN_GROUP);
2592280304Sjkim        return NULL;
2593280304Sjkim    }
2594160814Ssimon
2595280304Sjkim    EC_GROUP_set_curve_name(ret, nid);
2596160814Ssimon
2597280304Sjkim    return ret;
2598280304Sjkim}
2599160814Ssimon
2600160814Ssimonsize_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems)
2601280304Sjkim{
2602280304Sjkim    size_t i, min;
2603160814Ssimon
2604280304Sjkim    if (r == NULL || nitems == 0)
2605280304Sjkim        return curve_list_length;
2606160814Ssimon
2607280304Sjkim    min = nitems < curve_list_length ? nitems : curve_list_length;
2608160814Ssimon
2609280304Sjkim    for (i = 0; i < min; i++) {
2610280304Sjkim        r[i].nid = curve_list[i].nid;
2611280304Sjkim        r[i].comment = curve_list[i].comment;
2612280304Sjkim    }
2613160814Ssimon
2614280304Sjkim    return curve_list_length;
2615280304Sjkim}
2616