xref: /freebsd/crypto/libecc/include/libecc/curves/known/ec_params_secp224k1.h (revision f0865ec9906d5a18fa2a3b61381f22ce16e606ad)
1 #include <libecc/lib_ecc_config.h>
2 #ifdef WITH_CURVE_SECP224K1
3 
4 #ifndef __EC_PARAMS_SECP224K1_H__
5 #define __EC_PARAMS_SECP224K1_H__
6 #include <libecc/curves/known/ec_params_external.h>
7 static const u8 secp224k1_p[] = {
8 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
11 	0xff, 0xff, 0xe5, 0x6d,
12 };
13 
14 TO_EC_STR_PARAM(secp224k1_p);
15 
16 #define CURVE_SECP224K1_P_BITLEN 224
17 static const u8 secp224k1_p_bitlen[] = {
18 	0xe0,
19 };
20 
21 TO_EC_STR_PARAM(secp224k1_p_bitlen);
22 
23 #if (WORD_BYTES == 8)     /* 64-bit words */
24 static const u8 secp224k1_r[] = {
25 	0x01, 0x00, 0x00, 0x1a, 0x93, 0x00, 0x00, 0x00,
26 	0x00,
27 };
28 
29 TO_EC_STR_PARAM(secp224k1_r);
30 
31 static const u8 secp224k1_r_square[] = {
32 	0x01, 0x00, 0x00, 0x35, 0x26, 0x02, 0xc2, 0x30,
33 	0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34 	0x00,
35 };
36 
37 TO_EC_STR_PARAM(secp224k1_r_square);
38 
39 static const u8 secp224k1_mpinv[] = {
40 	0x5a, 0x92, 0xa0, 0x0a, 0x19, 0x8d, 0x13, 0x9b,
41 };
42 
43 TO_EC_STR_PARAM(secp224k1_mpinv);
44 
45 static const u8 secp224k1_p_shift[] = {
46 	0x20,
47 };
48 
49 TO_EC_STR_PARAM(secp224k1_p_shift);
50 
51 static const u8 secp224k1_p_normalized[] = {
52 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
53 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
54 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
55 	0xff, 0xff, 0xe5, 0x6d, 0x00, 0x00, 0x00, 0x00,
56 };
57 
58 TO_EC_STR_PARAM(secp224k1_p_normalized);
59 
60 static const u8 secp224k1_p_reciprocal[] = {
61 	0x00,
62 };
63 
64 TO_EC_STR_PARAM(secp224k1_p_reciprocal);
65 
66 #elif (WORD_BYTES == 4)   /* 32-bit words */
67 static const u8 secp224k1_r[] = {
68 	0x01, 0x00, 0x00, 0x1a, 0x93,
69 };
70 
71 TO_EC_STR_PARAM(secp224k1_r);
72 
73 static const u8 secp224k1_r_square[] = {
74 	0x01, 0x00, 0x00, 0x35, 0x26, 0x02, 0xc2, 0x30,
75 	0x69,
76 };
77 
78 TO_EC_STR_PARAM(secp224k1_r_square);
79 
80 static const u8 secp224k1_mpinv[] = {
81 	0x19, 0x8d, 0x13, 0x9b,
82 };
83 
84 TO_EC_STR_PARAM(secp224k1_mpinv);
85 
86 static const u8 secp224k1_p_shift[] = {
87 	0x00,
88 };
89 
90 TO_EC_STR_PARAM(secp224k1_p_shift);
91 
92 static const u8 secp224k1_p_normalized[] = {
93 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
94 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
95 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
96 	0xff, 0xff, 0xe5, 0x6d,
97 };
98 
99 TO_EC_STR_PARAM(secp224k1_p_normalized);
100 
101 static const u8 secp224k1_p_reciprocal[] = {
102 	0x00,
103 };
104 
105 TO_EC_STR_PARAM(secp224k1_p_reciprocal);
106 
107 #elif (WORD_BYTES == 2)   /* 16-bit words */
108 static const u8 secp224k1_r[] = {
109 	0x01, 0x00, 0x00, 0x1a, 0x93,
110 };
111 
112 TO_EC_STR_PARAM(secp224k1_r);
113 
114 static const u8 secp224k1_r_square[] = {
115 	0x01, 0x00, 0x00, 0x35, 0x26, 0x02, 0xc2, 0x30,
116 	0x69,
117 };
118 
119 TO_EC_STR_PARAM(secp224k1_r_square);
120 
121 static const u8 secp224k1_mpinv[] = {
122 	0x13, 0x9b,
123 };
124 
125 TO_EC_STR_PARAM(secp224k1_mpinv);
126 
127 static const u8 secp224k1_p_shift[] = {
128 	0x00,
129 };
130 
131 TO_EC_STR_PARAM(secp224k1_p_shift);
132 
133 static const u8 secp224k1_p_normalized[] = {
134 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
135 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
136 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
137 	0xff, 0xff, 0xe5, 0x6d,
138 };
139 
140 TO_EC_STR_PARAM(secp224k1_p_normalized);
141 
142 static const u8 secp224k1_p_reciprocal[] = {
143 	0x00,
144 };
145 
146 TO_EC_STR_PARAM(secp224k1_p_reciprocal);
147 
148 #else                     /* unknown word size */
149 #error "Unsupported word size"
150 #endif
151 
152 static const u8 secp224k1_a[] = {
153 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
154 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
155 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
156 	0x00, 0x00, 0x00, 0x00,
157 };
158 
159 TO_EC_STR_PARAM(secp224k1_a);
160 
161 static const u8 secp224k1_b[] = {
162 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
164 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
165 	0x00, 0x00, 0x00, 0x05,
166 };
167 
168 TO_EC_STR_PARAM(secp224k1_b);
169 
170 #define CURVE_SECP224K1_CURVE_ORDER_BITLEN 225
171 static const u8 secp224k1_curve_order[] = {
172 	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
173 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdc,
174 	0xe8, 0xd2, 0xec, 0x61, 0x84, 0xca, 0xf0, 0xa9,
175 	0x71, 0x76, 0x9f, 0xb1, 0xf7,
176 };
177 
178 TO_EC_STR_PARAM(secp224k1_curve_order);
179 
180 static const u8 secp224k1_gx[] = {
181 	0xa1, 0x45, 0x5b, 0x33, 0x4d, 0xf0, 0x99, 0xdf,
182 	0x30, 0xfc, 0x28, 0xa1, 0x69, 0xa4, 0x67, 0xe9,
183 	0xe4, 0x70, 0x75, 0xa9, 0x0f, 0x7e, 0x65, 0x0e,
184 	0xb6, 0xb7, 0xa4, 0x5c,
185 };
186 
187 TO_EC_STR_PARAM(secp224k1_gx);
188 
189 static const u8 secp224k1_gy[] = {
190 	0x7e, 0x08, 0x9f, 0xed, 0x7f, 0xba, 0x34, 0x42,
191 	0x82, 0xca, 0xfb, 0xd6, 0xf7, 0xe3, 0x19, 0xf7,
192 	0xc0, 0xb0, 0xbd, 0x59, 0xe2, 0xca, 0x4b, 0xdb,
193 	0x55, 0x6d, 0x61, 0xa5,
194 };
195 
196 TO_EC_STR_PARAM(secp224k1_gy);
197 
198 static const u8 secp224k1_gz[] = {
199 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
200 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
201 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
202 	0x00, 0x00, 0x00, 0x01,
203 };
204 
205 TO_EC_STR_PARAM(secp224k1_gz);
206 
207 static const u8 secp224k1_gen_order[] = {
208 	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
209 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdc,
210 	0xe8, 0xd2, 0xec, 0x61, 0x84, 0xca, 0xf0, 0xa9,
211 	0x71, 0x76, 0x9f, 0xb1, 0xf7,
212 };
213 
214 TO_EC_STR_PARAM(secp224k1_gen_order);
215 
216 #define CURVE_SECP224K1_Q_BITLEN 225
217 static const u8 secp224k1_gen_order_bitlen[] = {
218 	0xe1,
219 };
220 
221 TO_EC_STR_PARAM(secp224k1_gen_order_bitlen);
222 
223 static const u8 secp224k1_cofactor[] = {
224 	0x01,
225 };
226 
227 TO_EC_STR_PARAM(secp224k1_cofactor);
228 
229 static const u8 secp224k1_alpha_montgomery[] = {
230 	0x00,
231 };
232 TO_EC_STR_PARAM_FIXED_SIZE(secp224k1_alpha_montgomery, 0);
233 
234 static const u8 secp224k1_gamma_montgomery[] = {
235 	0x00,
236 };
237 TO_EC_STR_PARAM_FIXED_SIZE(secp224k1_gamma_montgomery, 0);
238 
239 static const u8 secp224k1_alpha_edwards[] = {
240 	0x00,
241 };
242 TO_EC_STR_PARAM_FIXED_SIZE(secp224k1_alpha_edwards, 0);
243 
244 static const u8 secp224k1_name[] = "SECP224K1";
245 TO_EC_STR_PARAM(secp224k1_name);
246 
247 static const u8 secp224k1_oid[] = "1.3.132.0.32";
248 TO_EC_STR_PARAM(secp224k1_oid);
249 
250 static const ec_str_params secp224k1_str_params = {
251 	.p = &secp224k1_p_str_param,
252 	.p_bitlen = &secp224k1_p_bitlen_str_param,
253 	.r = &secp224k1_r_str_param,
254 	.r_square = &secp224k1_r_square_str_param,
255 	.mpinv = &secp224k1_mpinv_str_param,
256 	.p_shift = &secp224k1_p_shift_str_param,
257 	.p_normalized = &secp224k1_p_normalized_str_param,
258 	.p_reciprocal = &secp224k1_p_reciprocal_str_param,
259 	.a = &secp224k1_a_str_param,
260 	.b = &secp224k1_b_str_param,
261 	.curve_order = &secp224k1_curve_order_str_param,
262 	.gx = &secp224k1_gx_str_param,
263 	.gy = &secp224k1_gy_str_param,
264 	.gz = &secp224k1_gz_str_param,
265 	.gen_order = &secp224k1_gen_order_str_param,
266 	.gen_order_bitlen = &secp224k1_gen_order_bitlen_str_param,
267 	.cofactor = &secp224k1_cofactor_str_param,
268 	.alpha_montgomery = &secp224k1_alpha_montgomery_str_param,
269 	.gamma_montgomery = &secp224k1_gamma_montgomery_str_param,
270 	.alpha_edwards = &secp224k1_alpha_edwards_str_param,
271 	.oid = &secp224k1_oid_str_param,
272 	.name = &secp224k1_name_str_param,
273 };
274 
275 /*
276  * Compute max bit length of all curves for p and q
277  */
278 #ifndef CURVES_MAX_P_BIT_LEN
279 #define CURVES_MAX_P_BIT_LEN    0
280 #endif
281 #if (CURVES_MAX_P_BIT_LEN < CURVE_SECP224K1_P_BITLEN)
282 #undef CURVES_MAX_P_BIT_LEN
283 #define CURVES_MAX_P_BIT_LEN CURVE_SECP224K1_P_BITLEN
284 #endif
285 #ifndef CURVES_MAX_Q_BIT_LEN
286 #define CURVES_MAX_Q_BIT_LEN    0
287 #endif
288 #if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP224K1_Q_BITLEN)
289 #undef CURVES_MAX_Q_BIT_LEN
290 #define CURVES_MAX_Q_BIT_LEN CURVE_SECP224K1_Q_BITLEN
291 #endif
292 #ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN
293 #define CURVES_MAX_CURVE_ORDER_BIT_LEN    0
294 #endif
295 #if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP224K1_CURVE_ORDER_BITLEN)
296 #undef CURVES_MAX_CURVE_ORDER_BIT_LEN
297 #define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP224K1_CURVE_ORDER_BITLEN
298 #endif
299 
300 /*
301  * Compute and adapt max name and oid length
302  */
303 #ifndef MAX_CURVE_OID_LEN
304 #define MAX_CURVE_OID_LEN 0
305 #endif
306 #ifndef MAX_CURVE_NAME_LEN
307 #define MAX_CURVE_NAME_LEN 0
308 #endif
309 #if (MAX_CURVE_OID_LEN < 1)
310 #undef MAX_CURVE_OID_LEN
311 #define MAX_CURVE_OID_LEN 1
312 #endif
313 #if (MAX_CURVE_NAME_LEN < 23)
314 #undef MAX_CURVE_NAME_LEN
315 #define MAX_CURVE_NAME_LEN 23
316 #endif
317 
318 #endif /* __EC_PARAMS_SECP224K1_H__ */
319 
320 #endif /* WITH_CURVE_SECP224K1 */
321