xref: /freebsd/crypto/libecc/include/libecc/curves/known/ec_params_frp256v1.h (revision f0865ec9906d5a18fa2a3b61381f22ce16e606ad)
1 /*
2  *  Copyright (C) 2017 - This file is part of libecc project
3  *
4  *  Authors:
5  *      Ryad BENADJILA <ryadbenadjila@gmail.com>
6  *      Arnaud EBALARD <arnaud.ebalard@ssi.gouv.fr>
7  *      Jean-Pierre FLORI <jean-pierre.flori@ssi.gouv.fr>
8  *
9  *  Contributors:
10  *      Nicolas VIVET <nicolas.vivet@ssi.gouv.fr>
11  *      Karim KHALFALLAH <karim.khalfallah@ssi.gouv.fr>
12  *
13  *  This software is licensed under a dual BSD and GPL v2 license.
14  *  See LICENSE file at the root folder of the project.
15  */
16 #include <libecc/lib_ecc_config.h>
17 #ifdef WITH_CURVE_FRP256V1
18 
19 #ifndef __EC_PARAMS_FRP256V1_H__
20 #define __EC_PARAMS_FRP256V1_H__
21 #include "ec_params_external.h"
22 
23 static const u8 frp256v1_p[] = {
24 	0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f,
25 	0x10, 0x12, 0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b,
26 	0x39, 0x61, 0xad, 0xbc, 0xab, 0xc8, 0xca, 0x6d,
27 	0xe8, 0xfc, 0xf3, 0x53, 0xd8, 0x6e, 0x9c, 0x03
28 };
29 
30 TO_EC_STR_PARAM(frp256v1_p);
31 
32 #define CURVE_FRP256V1_P_BITLEN 256
33 static const u8 frp256v1_p_bitlen[] = { 0x01, 0x00 };
34 
35 TO_EC_STR_PARAM(frp256v1_p_bitlen);
36 
37 static const u8 frp256v1_r[] = {
38 	0x0e, 0x02, 0xe8, 0x73, 0xf4, 0xc5, 0x2a, 0x70,
39 	0xef, 0xed, 0x92, 0x17, 0x31, 0xbd, 0xbc, 0xa4,
40 	0xc6, 0x9e, 0x52, 0x43, 0x54, 0x37, 0x35, 0x92,
41 	0x17, 0x03, 0x0c, 0xac, 0x27, 0x91, 0x63, 0xfd
42 };
43 
44 TO_EC_STR_PARAM(frp256v1_r);
45 
46 static const u8 frp256v1_r_square[] = {
47 	0xb0, 0x2c, 0x8f, 0x9f, 0x88, 0xeb, 0x98, 0xac,
48 	0x62, 0xb7, 0x01, 0x2f, 0xce, 0x13, 0x7e, 0xee,
49 	0x84, 0x6f, 0x80, 0x83, 0x0c, 0x96, 0x0f, 0x92,
50 	0xb0, 0xc2, 0x4e, 0x77, 0xc9, 0x9f, 0x15, 0x13
51 };
52 
53 TO_EC_STR_PARAM(frp256v1_r_square);
54 
55 static const u8 frp256v1_mpinv[] = {
56 	0xc7, 0x97, 0x48, 0x3a, 0x16, 0x4e, 0x11, 0x55
57 };
58 
59 TO_EC_STR_PARAM(frp256v1_mpinv);
60 
61 static const u8 frp256v1_p_shift[] = {
62 	0x00
63 };
64 
65 TO_EC_STR_PARAM(frp256v1_p_shift);
66 
67 #if (WORD_BYTES == 8)		/* 64-bit words */
68 static const u8 frp256v1_p_reciprocal[] = {
69 	0x0e, 0xd2, 0x97, 0xdc, 0xc7, 0xd2, 0xb0, 0x40
70 };
71 #elif (WORD_BYTES == 4)		/* 32-bit words */
72 static const u8 frp256v1_p_reciprocal[] = {
73 	0x0e, 0xd2, 0x97, 0xdc
74 };
75 #elif (WORD_BYTES == 2)		/* 16-bit words */
76 static const u8 frp256v1_p_reciprocal[] = {
77 	0x0e, 0xd2
78 };
79 #else /* unknown word size */
80 #error "Unsupported word size"
81 #endif
82 TO_EC_STR_PARAM(frp256v1_p_reciprocal);
83 
84 static const u8 frp256v1_a[] = {
85 	0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f,
86 	0x10, 0x12, 0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b,
87 	0x39, 0x61, 0xad, 0xbc, 0xab, 0xc8, 0xca, 0x6d,
88 	0xe8, 0xfc, 0xf3, 0x53, 0xd8, 0x6e, 0x9c, 0x00
89 };
90 
91 TO_EC_STR_PARAM(frp256v1_a);
92 
93 static const u8 frp256v1_b[] = {
94 	0xee, 0x35, 0x3f, 0xca, 0x54, 0x28, 0xa9, 0x30,
95 	0x0d, 0x4a, 0xba, 0x75, 0x4a, 0x44, 0xc0, 0x0f,
96 	0xdf, 0xec, 0x0c, 0x9a, 0xe4, 0xb1, 0xa1, 0x80,
97 	0x30, 0x75, 0xed, 0x96, 0x7b, 0x7b, 0xb7, 0x3f
98 };
99 
100 TO_EC_STR_PARAM(frp256v1_b);
101 
102 #define CURVE_FRP256V1_CURVE_ORDER_BITLEN 256
103 static const u8 frp256v1_curve_order[] = {
104 	0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f,
105 	0x10, 0x12, 0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b,
106 	0x53, 0xdc, 0x67, 0xe1, 0x40, 0xd2, 0xbf, 0x94,
107 	0x1f, 0xfd, 0xd4, 0x59, 0xc6, 0xd6, 0x55, 0xe1
108 };
109 
110 TO_EC_STR_PARAM(frp256v1_curve_order);
111 
112 static const u8 frp256v1_gx[] = {
113 	0xb6, 0xb3, 0xd4, 0xc3, 0x56, 0xc1, 0x39, 0xeb,
114 	0x31, 0x18, 0x3d, 0x47, 0x49, 0xd4, 0x23, 0x95,
115 	0x8c, 0x27, 0xd2, 0xdc, 0xaf, 0x98, 0xb7, 0x01,
116 	0x64, 0xc9, 0x7a, 0x2d, 0xd9, 0x8f, 0x5c, 0xff
117 };
118 
119 TO_EC_STR_PARAM(frp256v1_gx);
120 
121 static const u8 frp256v1_gy[] = {
122 	0x61, 0x42, 0xe0, 0xf7, 0xc8, 0xb2, 0x04, 0x91,
123 	0x1f, 0x92, 0x71, 0xf0, 0xf3, 0xec, 0xef, 0x8c,
124 	0x27, 0x01, 0xc3, 0x07, 0xe8, 0xe4, 0xc9, 0xe1,
125 	0x83, 0x11, 0x5a, 0x15, 0x54, 0x06, 0x2c, 0xfb
126 };
127 
128 TO_EC_STR_PARAM(frp256v1_gy);
129 
130 static const u8 frp256v1_gz[] = {
131 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
132 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
135 };
136 
137 TO_EC_STR_PARAM(frp256v1_gz);
138 
139 static const u8 frp256v1_gen_order[] = {
140 	0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f,
141 	0x10, 0x12, 0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b,
142 	0x53, 0xdc, 0x67, 0xe1, 0x40, 0xd2, 0xbf, 0x94,
143 	0x1f, 0xfd, 0xd4, 0x59, 0xc6, 0xd6, 0x55, 0xe1
144 };
145 
146 TO_EC_STR_PARAM(frp256v1_gen_order);
147 
148 #define CURVE_FRP256V1_Q_BITLEN 256
149 static const u8 frp256v1_gen_order_bitlen[] = { 0x01, 0x00 };
150 
151 TO_EC_STR_PARAM(frp256v1_gen_order_bitlen);
152 
153 static const u8 frp256v1_cofactor[] = { 0x01 };
154 
155 TO_EC_STR_PARAM(frp256v1_cofactor);
156 
157 static const u8 frp256v1_alpha_montgomery[] = {
158 	0x00,
159 };
160 
161 TO_EC_STR_PARAM_FIXED_SIZE(frp256v1_alpha_montgomery, 0);
162 
163 static const u8 frp256v1_gamma_montgomery[] = {
164 	0x00,
165 };
166 
167 TO_EC_STR_PARAM_FIXED_SIZE(frp256v1_gamma_montgomery, 0);
168 
169 static const u8 frp256v1_alpha_edwards[] = {
170 	0x00,
171 };
172 
173 TO_EC_STR_PARAM_FIXED_SIZE(frp256v1_alpha_edwards, 0);
174 
175 static const u8 frp256v1_oid[] = "1.2.250.1.223.101.256.1";
176 TO_EC_STR_PARAM(frp256v1_oid);
177 
178 static const u8 frp256v1_name[] = "FRP256V1";
179 TO_EC_STR_PARAM(frp256v1_name);
180 
181 static const ec_str_params frp256v1_str_params = {
182 	.p = &frp256v1_p_str_param,
183 	.p_bitlen = &frp256v1_p_bitlen_str_param,
184 	.r = &frp256v1_r_str_param,
185 	.r_square = &frp256v1_r_square_str_param,
186 	.mpinv = &frp256v1_mpinv_str_param,
187 	.p_shift = &frp256v1_p_shift_str_param,
188 	.p_normalized = &frp256v1_p_str_param,
189 	.p_reciprocal = &frp256v1_p_reciprocal_str_param,
190 	.a = &frp256v1_a_str_param,
191 	.b = &frp256v1_b_str_param,
192 	.curve_order = &frp256v1_curve_order_str_param,
193 	.gx = &frp256v1_gx_str_param,
194 	.gy = &frp256v1_gy_str_param,
195 	.gz = &frp256v1_gz_str_param,
196 	.gen_order = &frp256v1_gen_order_str_param,
197 	.gen_order_bitlen = &frp256v1_gen_order_bitlen_str_param,
198 	.cofactor = &frp256v1_cofactor_str_param,
199 	.alpha_montgomery = &frp256v1_alpha_montgomery_str_param,
200 	.gamma_montgomery = &frp256v1_gamma_montgomery_str_param,
201 	.alpha_edwards = &frp256v1_alpha_edwards_str_param,
202 	.oid = &frp256v1_oid_str_param,
203 	.name = &frp256v1_name_str_param,
204 };
205 
206 /*
207  * Compute max bit length of all curves for p and q
208  */
209 #ifndef CURVES_MAX_P_BIT_LEN
210 #define CURVES_MAX_P_BIT_LEN	0
211 #endif
212 #if (CURVES_MAX_P_BIT_LEN < CURVE_FRP256V1_P_BITLEN)
213 #undef CURVES_MAX_P_BIT_LEN
214 #define CURVES_MAX_P_BIT_LEN CURVE_FRP256V1_P_BITLEN
215 #endif
216 #ifndef CURVES_MAX_Q_BIT_LEN
217 #define CURVES_MAX_Q_BIT_LEN	0
218 #endif
219 #if (CURVES_MAX_Q_BIT_LEN < CURVE_FRP256V1_Q_BITLEN)
220 #undef CURVES_MAX_Q_BIT_LEN
221 #define CURVES_MAX_Q_BIT_LEN CURVE_FRP256V1_Q_BITLEN
222 #endif
223 #ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN
224 #define CURVES_MAX_CURVE_ORDER_BIT_LEN	0
225 #endif
226 #if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_FRP256V1_CURVE_ORDER_BITLEN)
227 #undef CURVES_MAX_CURVE_ORDER_BIT_LEN
228 #define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_FRP256V1_CURVE_ORDER_BITLEN
229 #endif
230 
231 #endif /* __EC_PARAMS_FRP256V1_H__ */
232 
233 #endif /* WITH_CURVE_FRP256V1 */
234