xref: /illumos-gate/usr/src/common/crypto/ecc/ecl-exp.h (revision f9fbec18f5b458b560ecf45d3db8e8bd56bf6942)
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