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