1*f9fbec18Smcpowers /* 2*f9fbec18Smcpowers * ***** BEGIN LICENSE BLOCK ***** 3*f9fbec18Smcpowers * Version: MPL 1.1/GPL 2.0/LGPL 2.1 4*f9fbec18Smcpowers * 5*f9fbec18Smcpowers * The contents of this file are subject to the Mozilla Public License Version 6*f9fbec18Smcpowers * 1.1 (the "License"); you may not use this file except in compliance with 7*f9fbec18Smcpowers * the License. You may obtain a copy of the License at 8*f9fbec18Smcpowers * http://www.mozilla.org/MPL/ 9*f9fbec18Smcpowers * 10*f9fbec18Smcpowers * Software distributed under the License is distributed on an "AS IS" basis, 11*f9fbec18Smcpowers * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 12*f9fbec18Smcpowers * for the specific language governing rights and limitations under the 13*f9fbec18Smcpowers * License. 14*f9fbec18Smcpowers * 15*f9fbec18Smcpowers * The Original Code is the elliptic curve math library. 16*f9fbec18Smcpowers * 17*f9fbec18Smcpowers * The Initial Developer of the Original Code is 18*f9fbec18Smcpowers * Sun Microsystems, Inc. 19*f9fbec18Smcpowers * Portions created by the Initial Developer are Copyright (C) 2003 20*f9fbec18Smcpowers * the Initial Developer. All Rights Reserved. 21*f9fbec18Smcpowers * 22*f9fbec18Smcpowers * Contributor(s): 23*f9fbec18Smcpowers * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories 24*f9fbec18Smcpowers * 25*f9fbec18Smcpowers * Alternatively, the contents of this file may be used under the terms of 26*f9fbec18Smcpowers * either the GNU General Public License Version 2 or later (the "GPL"), or 27*f9fbec18Smcpowers * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), 28*f9fbec18Smcpowers * in which case the provisions of the GPL or the LGPL are applicable instead 29*f9fbec18Smcpowers * of those above. If you wish to allow use of your version of this file only 30*f9fbec18Smcpowers * under the terms of either the GPL or the LGPL, and not to allow others to 31*f9fbec18Smcpowers * use your version of this file under the terms of the MPL, indicate your 32*f9fbec18Smcpowers * decision by deleting the provisions above and replace them with the notice 33*f9fbec18Smcpowers * and other provisions required by the GPL or the LGPL. If you do not delete 34*f9fbec18Smcpowers * the provisions above, a recipient may use your version of this file under 35*f9fbec18Smcpowers * the terms of any one of the MPL, the GPL or the LGPL. 36*f9fbec18Smcpowers * 37*f9fbec18Smcpowers * ***** END LICENSE BLOCK ***** */ 38*f9fbec18Smcpowers /* 39*f9fbec18Smcpowers * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 40*f9fbec18Smcpowers * Use is subject to license terms. 41*f9fbec18Smcpowers * 42*f9fbec18Smcpowers * Sun elects to use this software under the MPL license. 43*f9fbec18Smcpowers */ 44*f9fbec18Smcpowers 45*f9fbec18Smcpowers #ifndef _ECL_EXP_H 46*f9fbec18Smcpowers #define _ECL_EXP_H 47*f9fbec18Smcpowers 48*f9fbec18Smcpowers #pragma ident "%Z%%M% %I% %E% SMI" 49*f9fbec18Smcpowers 50*f9fbec18Smcpowers /* Curve field type */ 51*f9fbec18Smcpowers typedef enum { 52*f9fbec18Smcpowers ECField_GFp, 53*f9fbec18Smcpowers ECField_GF2m 54*f9fbec18Smcpowers } ECField; 55*f9fbec18Smcpowers 56*f9fbec18Smcpowers /* Hexadecimal encoding of curve parameters */ 57*f9fbec18Smcpowers struct ECCurveParamsStr { 58*f9fbec18Smcpowers char *text; 59*f9fbec18Smcpowers ECField field; 60*f9fbec18Smcpowers unsigned int size; 61*f9fbec18Smcpowers char *irr; 62*f9fbec18Smcpowers char *curvea; 63*f9fbec18Smcpowers char *curveb; 64*f9fbec18Smcpowers char *genx; 65*f9fbec18Smcpowers char *geny; 66*f9fbec18Smcpowers char *order; 67*f9fbec18Smcpowers int cofactor; 68*f9fbec18Smcpowers }; 69*f9fbec18Smcpowers typedef struct ECCurveParamsStr ECCurveParams; 70*f9fbec18Smcpowers 71*f9fbec18Smcpowers /* Named curve parameters */ 72*f9fbec18Smcpowers typedef enum { 73*f9fbec18Smcpowers 74*f9fbec18Smcpowers ECCurve_noName = 0, 75*f9fbec18Smcpowers 76*f9fbec18Smcpowers /* NIST prime curves */ 77*f9fbec18Smcpowers ECCurve_NIST_P192, 78*f9fbec18Smcpowers ECCurve_NIST_P224, 79*f9fbec18Smcpowers ECCurve_NIST_P256, 80*f9fbec18Smcpowers ECCurve_NIST_P384, 81*f9fbec18Smcpowers ECCurve_NIST_P521, 82*f9fbec18Smcpowers 83*f9fbec18Smcpowers /* NIST binary curves */ 84*f9fbec18Smcpowers ECCurve_NIST_K163, 85*f9fbec18Smcpowers ECCurve_NIST_B163, 86*f9fbec18Smcpowers ECCurve_NIST_K233, 87*f9fbec18Smcpowers ECCurve_NIST_B233, 88*f9fbec18Smcpowers ECCurve_NIST_K283, 89*f9fbec18Smcpowers ECCurve_NIST_B283, 90*f9fbec18Smcpowers ECCurve_NIST_K409, 91*f9fbec18Smcpowers ECCurve_NIST_B409, 92*f9fbec18Smcpowers ECCurve_NIST_K571, 93*f9fbec18Smcpowers ECCurve_NIST_B571, 94*f9fbec18Smcpowers 95*f9fbec18Smcpowers /* ANSI X9.62 prime curves */ 96*f9fbec18Smcpowers /* ECCurve_X9_62_PRIME_192V1 == ECCurve_NIST_P192 */ 97*f9fbec18Smcpowers ECCurve_X9_62_PRIME_192V2, 98*f9fbec18Smcpowers ECCurve_X9_62_PRIME_192V3, 99*f9fbec18Smcpowers ECCurve_X9_62_PRIME_239V1, 100*f9fbec18Smcpowers ECCurve_X9_62_PRIME_239V2, 101*f9fbec18Smcpowers ECCurve_X9_62_PRIME_239V3, 102*f9fbec18Smcpowers /* ECCurve_X9_62_PRIME_256V1 == ECCurve_NIST_P256 */ 103*f9fbec18Smcpowers 104*f9fbec18Smcpowers /* ANSI X9.62 binary curves */ 105*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_PNB163V1, 106*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_PNB163V2, 107*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_PNB163V3, 108*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_PNB176V1, 109*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_TNB191V1, 110*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_TNB191V2, 111*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_TNB191V3, 112*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_PNB208W1, 113*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_TNB239V1, 114*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_TNB239V2, 115*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_TNB239V3, 116*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_PNB272W1, 117*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_PNB304W1, 118*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_TNB359V1, 119*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_PNB368W1, 120*f9fbec18Smcpowers ECCurve_X9_62_CHAR2_TNB431R1, 121*f9fbec18Smcpowers 122*f9fbec18Smcpowers /* SEC2 prime curves */ 123*f9fbec18Smcpowers ECCurve_SECG_PRIME_112R1, 124*f9fbec18Smcpowers ECCurve_SECG_PRIME_112R2, 125*f9fbec18Smcpowers ECCurve_SECG_PRIME_128R1, 126*f9fbec18Smcpowers ECCurve_SECG_PRIME_128R2, 127*f9fbec18Smcpowers ECCurve_SECG_PRIME_160K1, 128*f9fbec18Smcpowers ECCurve_SECG_PRIME_160R1, 129*f9fbec18Smcpowers ECCurve_SECG_PRIME_160R2, 130*f9fbec18Smcpowers ECCurve_SECG_PRIME_192K1, 131*f9fbec18Smcpowers /* ECCurve_SECG_PRIME_192R1 == ECCurve_NIST_P192 */ 132*f9fbec18Smcpowers ECCurve_SECG_PRIME_224K1, 133*f9fbec18Smcpowers /* ECCurve_SECG_PRIME_224R1 == ECCurve_NIST_P224 */ 134*f9fbec18Smcpowers ECCurve_SECG_PRIME_256K1, 135*f9fbec18Smcpowers /* ECCurve_SECG_PRIME_256R1 == ECCurve_NIST_P256 */ 136*f9fbec18Smcpowers /* ECCurve_SECG_PRIME_384R1 == ECCurve_NIST_P384 */ 137*f9fbec18Smcpowers /* ECCurve_SECG_PRIME_521R1 == ECCurve_NIST_P521 */ 138*f9fbec18Smcpowers 139*f9fbec18Smcpowers /* SEC2 binary curves */ 140*f9fbec18Smcpowers ECCurve_SECG_CHAR2_113R1, 141*f9fbec18Smcpowers ECCurve_SECG_CHAR2_113R2, 142*f9fbec18Smcpowers ECCurve_SECG_CHAR2_131R1, 143*f9fbec18Smcpowers ECCurve_SECG_CHAR2_131R2, 144*f9fbec18Smcpowers /* ECCurve_SECG_CHAR2_163K1 == ECCurve_NIST_K163 */ 145*f9fbec18Smcpowers ECCurve_SECG_CHAR2_163R1, 146*f9fbec18Smcpowers /* ECCurve_SECG_CHAR2_163R2 == ECCurve_NIST_B163 */ 147*f9fbec18Smcpowers ECCurve_SECG_CHAR2_193R1, 148*f9fbec18Smcpowers ECCurve_SECG_CHAR2_193R2, 149*f9fbec18Smcpowers /* ECCurve_SECG_CHAR2_233K1 == ECCurve_NIST_K233 */ 150*f9fbec18Smcpowers /* ECCurve_SECG_CHAR2_233R1 == ECCurve_NIST_B233 */ 151*f9fbec18Smcpowers ECCurve_SECG_CHAR2_239K1, 152*f9fbec18Smcpowers /* ECCurve_SECG_CHAR2_283K1 == ECCurve_NIST_K283 */ 153*f9fbec18Smcpowers /* ECCurve_SECG_CHAR2_283R1 == ECCurve_NIST_B283 */ 154*f9fbec18Smcpowers /* ECCurve_SECG_CHAR2_409K1 == ECCurve_NIST_K409 */ 155*f9fbec18Smcpowers /* ECCurve_SECG_CHAR2_409R1 == ECCurve_NIST_B409 */ 156*f9fbec18Smcpowers /* ECCurve_SECG_CHAR2_571K1 == ECCurve_NIST_K571 */ 157*f9fbec18Smcpowers /* ECCurve_SECG_CHAR2_571R1 == ECCurve_NIST_B571 */ 158*f9fbec18Smcpowers 159*f9fbec18Smcpowers /* WTLS curves */ 160*f9fbec18Smcpowers ECCurve_WTLS_1, 161*f9fbec18Smcpowers /* there is no WTLS 2 curve */ 162*f9fbec18Smcpowers /* ECCurve_WTLS_3 == ECCurve_NIST_K163 */ 163*f9fbec18Smcpowers /* ECCurve_WTLS_4 == ECCurve_SECG_CHAR2_113R1 */ 164*f9fbec18Smcpowers /* ECCurve_WTLS_5 == ECCurve_X9_62_CHAR2_PNB163V1 */ 165*f9fbec18Smcpowers /* ECCurve_WTLS_6 == ECCurve_SECG_PRIME_112R1 */ 166*f9fbec18Smcpowers /* ECCurve_WTLS_7 == ECCurve_SECG_PRIME_160R1 */ 167*f9fbec18Smcpowers ECCurve_WTLS_8, 168*f9fbec18Smcpowers ECCurve_WTLS_9, 169*f9fbec18Smcpowers /* ECCurve_WTLS_10 == ECCurve_NIST_K233 */ 170*f9fbec18Smcpowers /* ECCurve_WTLS_11 == ECCurve_NIST_B233 */ 171*f9fbec18Smcpowers /* ECCurve_WTLS_12 == ECCurve_NIST_P224 */ 172*f9fbec18Smcpowers 173*f9fbec18Smcpowers ECCurve_pastLastCurve 174*f9fbec18Smcpowers } ECCurveName; 175*f9fbec18Smcpowers 176*f9fbec18Smcpowers /* Aliased named curves */ 177*f9fbec18Smcpowers 178*f9fbec18Smcpowers #define ECCurve_X9_62_PRIME_192V1 ECCurve_NIST_P192 179*f9fbec18Smcpowers #define ECCurve_X9_62_PRIME_256V1 ECCurve_NIST_P256 180*f9fbec18Smcpowers #define ECCurve_SECG_PRIME_192R1 ECCurve_NIST_P192 181*f9fbec18Smcpowers #define ECCurve_SECG_PRIME_224R1 ECCurve_NIST_P224 182*f9fbec18Smcpowers #define ECCurve_SECG_PRIME_256R1 ECCurve_NIST_P256 183*f9fbec18Smcpowers #define ECCurve_SECG_PRIME_384R1 ECCurve_NIST_P384 184*f9fbec18Smcpowers #define ECCurve_SECG_PRIME_521R1 ECCurve_NIST_P521 185*f9fbec18Smcpowers #define ECCurve_SECG_CHAR2_163K1 ECCurve_NIST_K163 186*f9fbec18Smcpowers #define ECCurve_SECG_CHAR2_163R2 ECCurve_NIST_B163 187*f9fbec18Smcpowers #define ECCurve_SECG_CHAR2_233K1 ECCurve_NIST_K233 188*f9fbec18Smcpowers #define ECCurve_SECG_CHAR2_233R1 ECCurve_NIST_B233 189*f9fbec18Smcpowers #define ECCurve_SECG_CHAR2_283K1 ECCurve_NIST_K283 190*f9fbec18Smcpowers #define ECCurve_SECG_CHAR2_283R1 ECCurve_NIST_B283 191*f9fbec18Smcpowers #define ECCurve_SECG_CHAR2_409K1 ECCurve_NIST_K409 192*f9fbec18Smcpowers #define ECCurve_SECG_CHAR2_409R1 ECCurve_NIST_B409 193*f9fbec18Smcpowers #define ECCurve_SECG_CHAR2_571K1 ECCurve_NIST_K571 194*f9fbec18Smcpowers #define ECCurve_SECG_CHAR2_571R1 ECCurve_NIST_B571 195*f9fbec18Smcpowers #define ECCurve_WTLS_3 ECCurve_NIST_K163 196*f9fbec18Smcpowers #define ECCurve_WTLS_4 ECCurve_SECG_CHAR2_113R1 197*f9fbec18Smcpowers #define ECCurve_WTLS_5 ECCurve_X9_62_CHAR2_PNB163V1 198*f9fbec18Smcpowers #define ECCurve_WTLS_6 ECCurve_SECG_PRIME_112R1 199*f9fbec18Smcpowers #define ECCurve_WTLS_7 ECCurve_SECG_PRIME_160R1 200*f9fbec18Smcpowers #define ECCurve_WTLS_10 ECCurve_NIST_K233 201*f9fbec18Smcpowers #define ECCurve_WTLS_11 ECCurve_NIST_B233 202*f9fbec18Smcpowers #define ECCurve_WTLS_12 ECCurve_NIST_P224 203*f9fbec18Smcpowers 204*f9fbec18Smcpowers #endif /* _ECL_EXP_H */ 205