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