xref: /freebsd/crypto/libecc/include/libecc/curves/known/ec_params_secp192k1.h (revision f0865ec9906d5a18fa2a3b61381f22ce16e606ad)
1 #include <libecc/lib_ecc_config.h>
2 #ifdef WITH_CURVE_SECP192K1
3 
4 #ifndef __EC_PARAMS_SECP192K1_H__
5 #define __EC_PARAMS_SECP192K1_H__
6 #include <libecc/curves/known/ec_params_external.h>
7 static const u8 secp192k1_p[] = {
8 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10 	0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37,
11 };
12 
13 TO_EC_STR_PARAM(secp192k1_p);
14 
15 #define CURVE_SECP192K1_P_BITLEN 192
16 static const u8 secp192k1_p_bitlen[] = {
17 	0xc0,
18 };
19 
20 TO_EC_STR_PARAM(secp192k1_p_bitlen);
21 
22 #if (WORD_BYTES == 8)     /* 64-bit words */
23 static const u8 secp192k1_r[] = {
24 	0x01, 0x00, 0x00, 0x11, 0xc9,
25 };
26 
27 TO_EC_STR_PARAM(secp192k1_r);
28 
29 static const u8 secp192k1_r_square[] = {
30 	0x01, 0x00, 0x00, 0x23, 0x92, 0x01, 0x3c, 0x4f,
31 	0xd1,
32 };
33 
34 TO_EC_STR_PARAM(secp192k1_r_square);
35 
36 static const u8 secp192k1_mpinv[] = {
37 	0xf2, 0x7a, 0xe5, 0x5b, 0x74, 0x46, 0xd8, 0x79,
38 };
39 
40 TO_EC_STR_PARAM(secp192k1_mpinv);
41 
42 static const u8 secp192k1_p_shift[] = {
43 	0x00,
44 };
45 
46 TO_EC_STR_PARAM(secp192k1_p_shift);
47 
48 static const u8 secp192k1_p_normalized[] = {
49 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
50 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
51 	0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37,
52 };
53 
54 TO_EC_STR_PARAM(secp192k1_p_normalized);
55 
56 static const u8 secp192k1_p_reciprocal[] = {
57 	0x00,
58 };
59 
60 TO_EC_STR_PARAM(secp192k1_p_reciprocal);
61 
62 #elif (WORD_BYTES == 4)   /* 32-bit words */
63 static const u8 secp192k1_r[] = {
64 	0x01, 0x00, 0x00, 0x11, 0xc9,
65 };
66 
67 TO_EC_STR_PARAM(secp192k1_r);
68 
69 static const u8 secp192k1_r_square[] = {
70 	0x01, 0x00, 0x00, 0x23, 0x92, 0x01, 0x3c, 0x4f,
71 	0xd1,
72 };
73 
74 TO_EC_STR_PARAM(secp192k1_r_square);
75 
76 static const u8 secp192k1_mpinv[] = {
77 	0x74, 0x46, 0xd8, 0x79,
78 };
79 
80 TO_EC_STR_PARAM(secp192k1_mpinv);
81 
82 static const u8 secp192k1_p_shift[] = {
83 	0x00,
84 };
85 
86 TO_EC_STR_PARAM(secp192k1_p_shift);
87 
88 static const u8 secp192k1_p_normalized[] = {
89 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
90 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
91 	0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37,
92 };
93 
94 TO_EC_STR_PARAM(secp192k1_p_normalized);
95 
96 static const u8 secp192k1_p_reciprocal[] = {
97 	0x00,
98 };
99 
100 TO_EC_STR_PARAM(secp192k1_p_reciprocal);
101 
102 #elif (WORD_BYTES == 2)   /* 16-bit words */
103 static const u8 secp192k1_r[] = {
104 	0x01, 0x00, 0x00, 0x11, 0xc9,
105 };
106 
107 TO_EC_STR_PARAM(secp192k1_r);
108 
109 static const u8 secp192k1_r_square[] = {
110 	0x01, 0x00, 0x00, 0x23, 0x92, 0x01, 0x3c, 0x4f,
111 	0xd1,
112 };
113 
114 TO_EC_STR_PARAM(secp192k1_r_square);
115 
116 static const u8 secp192k1_mpinv[] = {
117 	0xd8, 0x79,
118 };
119 
120 TO_EC_STR_PARAM(secp192k1_mpinv);
121 
122 static const u8 secp192k1_p_shift[] = {
123 	0x00,
124 };
125 
126 TO_EC_STR_PARAM(secp192k1_p_shift);
127 
128 static const u8 secp192k1_p_normalized[] = {
129 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
130 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
131 	0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37,
132 };
133 
134 TO_EC_STR_PARAM(secp192k1_p_normalized);
135 
136 static const u8 secp192k1_p_reciprocal[] = {
137 	0x00,
138 };
139 
140 TO_EC_STR_PARAM(secp192k1_p_reciprocal);
141 
142 #else                     /* unknown word size */
143 #error "Unsupported word size"
144 #endif
145 
146 static const u8 secp192k1_a[] = {
147 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150 };
151 
152 TO_EC_STR_PARAM(secp192k1_a);
153 
154 static const u8 secp192k1_b[] = {
155 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
156 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
157 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
158 };
159 
160 TO_EC_STR_PARAM(secp192k1_b);
161 
162 #define CURVE_SECP192K1_CURVE_ORDER_BITLEN 192
163 static const u8 secp192k1_curve_order[] = {
164 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
165 	0xff, 0xff, 0xff, 0xfe, 0x26, 0xf2, 0xfc, 0x17,
166 	0x0f, 0x69, 0x46, 0x6a, 0x74, 0xde, 0xfd, 0x8d,
167 };
168 
169 TO_EC_STR_PARAM(secp192k1_curve_order);
170 
171 static const u8 secp192k1_gx[] = {
172 	0xdb, 0x4f, 0xf1, 0x0e, 0xc0, 0x57, 0xe9, 0xae,
173 	0x26, 0xb0, 0x7d, 0x02, 0x80, 0xb7, 0xf4, 0x34,
174 	0x1d, 0xa5, 0xd1, 0xb1, 0xea, 0xe0, 0x6c, 0x7d,
175 };
176 
177 TO_EC_STR_PARAM(secp192k1_gx);
178 
179 static const u8 secp192k1_gy[] = {
180 	0x9b, 0x2f, 0x2f, 0x6d, 0x9c, 0x56, 0x28, 0xa7,
181 	0x84, 0x41, 0x63, 0xd0, 0x15, 0xbe, 0x86, 0x34,
182 	0x40, 0x82, 0xaa, 0x88, 0xd9, 0x5e, 0x2f, 0x9d,
183 };
184 
185 TO_EC_STR_PARAM(secp192k1_gy);
186 
187 static const u8 secp192k1_gz[] = {
188 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
190 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
191 };
192 
193 TO_EC_STR_PARAM(secp192k1_gz);
194 
195 static const u8 secp192k1_gen_order[] = {
196 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
197 	0xff, 0xff, 0xff, 0xfe, 0x26, 0xf2, 0xfc, 0x17,
198 	0x0f, 0x69, 0x46, 0x6a, 0x74, 0xde, 0xfd, 0x8d,
199 };
200 
201 TO_EC_STR_PARAM(secp192k1_gen_order);
202 
203 #define CURVE_SECP192K1_Q_BITLEN 192
204 static const u8 secp192k1_gen_order_bitlen[] = {
205 	0xc0,
206 };
207 
208 TO_EC_STR_PARAM(secp192k1_gen_order_bitlen);
209 
210 static const u8 secp192k1_cofactor[] = {
211 	0x01,
212 };
213 
214 TO_EC_STR_PARAM(secp192k1_cofactor);
215 
216 static const u8 secp192k1_alpha_montgomery[] = {
217 	0x00,
218 };
219 TO_EC_STR_PARAM_FIXED_SIZE(secp192k1_alpha_montgomery, 0);
220 
221 static const u8 secp192k1_gamma_montgomery[] = {
222 	0x00,
223 };
224 TO_EC_STR_PARAM_FIXED_SIZE(secp192k1_gamma_montgomery, 0);
225 
226 static const u8 secp192k1_alpha_edwards[] = {
227 	0x00,
228 };
229 TO_EC_STR_PARAM_FIXED_SIZE(secp192k1_alpha_edwards, 0);
230 
231 static const u8 secp192k1_name[] = "SECP192K1";
232 TO_EC_STR_PARAM(secp192k1_name);
233 
234 static const u8 secp192k1_oid[] = "1.3.132.0.31";
235 TO_EC_STR_PARAM(secp192k1_oid);
236 
237 static const ec_str_params secp192k1_str_params = {
238 	.p = &secp192k1_p_str_param,
239 	.p_bitlen = &secp192k1_p_bitlen_str_param,
240 	.r = &secp192k1_r_str_param,
241 	.r_square = &secp192k1_r_square_str_param,
242 	.mpinv = &secp192k1_mpinv_str_param,
243 	.p_shift = &secp192k1_p_shift_str_param,
244 	.p_normalized = &secp192k1_p_normalized_str_param,
245 	.p_reciprocal = &secp192k1_p_reciprocal_str_param,
246 	.a = &secp192k1_a_str_param,
247 	.b = &secp192k1_b_str_param,
248 	.curve_order = &secp192k1_curve_order_str_param,
249 	.gx = &secp192k1_gx_str_param,
250 	.gy = &secp192k1_gy_str_param,
251 	.gz = &secp192k1_gz_str_param,
252 	.gen_order = &secp192k1_gen_order_str_param,
253 	.gen_order_bitlen = &secp192k1_gen_order_bitlen_str_param,
254 	.cofactor = &secp192k1_cofactor_str_param,
255 	.alpha_montgomery = &secp192k1_alpha_montgomery_str_param,
256 	.gamma_montgomery = &secp192k1_gamma_montgomery_str_param,
257 	.alpha_edwards = &secp192k1_alpha_edwards_str_param,
258 	.oid = &secp192k1_oid_str_param,
259 	.name = &secp192k1_name_str_param,
260 };
261 
262 /*
263  * Compute max bit length of all curves for p and q
264  */
265 #ifndef CURVES_MAX_P_BIT_LEN
266 #define CURVES_MAX_P_BIT_LEN    0
267 #endif
268 #if (CURVES_MAX_P_BIT_LEN < CURVE_SECP192K1_P_BITLEN)
269 #undef CURVES_MAX_P_BIT_LEN
270 #define CURVES_MAX_P_BIT_LEN CURVE_SECP192K1_P_BITLEN
271 #endif
272 #ifndef CURVES_MAX_Q_BIT_LEN
273 #define CURVES_MAX_Q_BIT_LEN    0
274 #endif
275 #if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP192K1_Q_BITLEN)
276 #undef CURVES_MAX_Q_BIT_LEN
277 #define CURVES_MAX_Q_BIT_LEN CURVE_SECP192K1_Q_BITLEN
278 #endif
279 #ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN
280 #define CURVES_MAX_CURVE_ORDER_BIT_LEN    0
281 #endif
282 #if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP192K1_CURVE_ORDER_BITLEN)
283 #undef CURVES_MAX_CURVE_ORDER_BIT_LEN
284 #define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP192K1_CURVE_ORDER_BITLEN
285 #endif
286 
287 /*
288  * Compute and adapt max name and oid length
289  */
290 #ifndef MAX_CURVE_OID_LEN
291 #define MAX_CURVE_OID_LEN 0
292 #endif
293 #ifndef MAX_CURVE_NAME_LEN
294 #define MAX_CURVE_NAME_LEN 0
295 #endif
296 #if (MAX_CURVE_OID_LEN < 1)
297 #undef MAX_CURVE_OID_LEN
298 #define MAX_CURVE_OID_LEN 1
299 #endif
300 #if (MAX_CURVE_NAME_LEN < 23)
301 #undef MAX_CURVE_NAME_LEN
302 #define MAX_CURVE_NAME_LEN 23
303 #endif
304 
305 #endif /* __EC_PARAMS_SECP192K1_H__ */
306 
307 #endif /* WITH_CURVE_SECP192K1 */
308