1 #include <libecc/lib_ecc_config.h> 2 #ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETA 3 4 #ifndef __EC_PARAMS_GOST_R3410_2012_512_PARAMSETA_H__ 5 #define __EC_PARAMS_GOST_R3410_2012_512_PARAMSETA_H__ 6 #include <libecc/curves/known/ec_params_external.h> 7 static const u8 gost_R3410_2012_512_paramSetA_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, 0xff, 11 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 12 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 13 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 14 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 15 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, 16 }; 17 18 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p); 19 20 #define CURVE_GOST_R3410_2012_512_PARAMSETA_P_BITLEN 512 21 static const u8 gost_R3410_2012_512_paramSetA_p_bitlen[] = { 22 0x02, 0x00, 23 }; 24 25 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_bitlen); 26 27 #if (WORD_BYTES == 8) /* 64-bit words */ 28 static const u8 gost_R3410_2012_512_paramSetA_r[] = { 29 0x02, 0x39, 30 }; 31 32 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r); 33 34 static const u8 gost_R3410_2012_512_paramSetA_r_square[] = { 35 0x04, 0xf0, 0xb1, 36 }; 37 38 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r_square); 39 40 static const u8 gost_R3410_2012_512_paramSetA_mpinv[] = { 41 0x58, 0xa1, 0xf7, 0xe6, 0xce, 0x0f, 0x4c, 0x09, 42 }; 43 44 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_mpinv); 45 46 static const u8 gost_R3410_2012_512_paramSetA_p_shift[] = { 47 0x00, 48 }; 49 50 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_shift); 51 52 static const u8 gost_R3410_2012_512_paramSetA_p_normalized[] = { 53 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 54 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 55 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 56 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 57 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 58 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 59 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 60 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, 61 }; 62 63 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_normalized); 64 65 static const u8 gost_R3410_2012_512_paramSetA_p_reciprocal[] = { 66 0x00, 67 }; 68 69 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_reciprocal); 70 71 #elif (WORD_BYTES == 4) /* 32-bit words */ 72 static const u8 gost_R3410_2012_512_paramSetA_r[] = { 73 0x02, 0x39, 74 }; 75 76 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r); 77 78 static const u8 gost_R3410_2012_512_paramSetA_r_square[] = { 79 0x04, 0xf0, 0xb1, 80 }; 81 82 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r_square); 83 84 static const u8 gost_R3410_2012_512_paramSetA_mpinv[] = { 85 0xce, 0x0f, 0x4c, 0x09, 86 }; 87 88 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_mpinv); 89 90 static const u8 gost_R3410_2012_512_paramSetA_p_shift[] = { 91 0x00, 92 }; 93 94 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_shift); 95 96 static const u8 gost_R3410_2012_512_paramSetA_p_normalized[] = { 97 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 98 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 99 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 100 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 101 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 102 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 103 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 104 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, 105 }; 106 107 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_normalized); 108 109 static const u8 gost_R3410_2012_512_paramSetA_p_reciprocal[] = { 110 0x00, 111 }; 112 113 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_reciprocal); 114 115 #elif (WORD_BYTES == 2) /* 16-bit words */ 116 static const u8 gost_R3410_2012_512_paramSetA_r[] = { 117 0x02, 0x39, 118 }; 119 120 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r); 121 122 static const u8 gost_R3410_2012_512_paramSetA_r_square[] = { 123 0x04, 0xf0, 0xb1, 124 }; 125 126 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r_square); 127 128 static const u8 gost_R3410_2012_512_paramSetA_mpinv[] = { 129 0x4c, 0x09, 130 }; 131 132 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_mpinv); 133 134 static const u8 gost_R3410_2012_512_paramSetA_p_shift[] = { 135 0x00, 136 }; 137 138 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_shift); 139 140 static const u8 gost_R3410_2012_512_paramSetA_p_normalized[] = { 141 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 142 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 143 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 144 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 145 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 146 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 147 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 148 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, 149 }; 150 151 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_normalized); 152 153 static const u8 gost_R3410_2012_512_paramSetA_p_reciprocal[] = { 154 0x00, 155 }; 156 157 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_reciprocal); 158 159 #else /* unknown word size */ 160 #error "Unsupported word size" 161 #endif 162 163 static const u8 gost_R3410_2012_512_paramSetA_a[] = { 164 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 165 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 166 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 167 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 168 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 169 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 170 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 171 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc4, 172 }; 173 174 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_a); 175 176 static const u8 gost_R3410_2012_512_paramSetA_b[] = { 177 0xe8, 0xc2, 0x50, 0x5d, 0xed, 0xfc, 0x86, 0xdd, 178 0xc1, 0xbd, 0x0b, 0x2b, 0x66, 0x67, 0xf1, 0xda, 179 0x34, 0xb8, 0x25, 0x74, 0x76, 0x1c, 0xb0, 0xe8, 180 0x79, 0xbd, 0x08, 0x1c, 0xfd, 0x0b, 0x62, 0x65, 181 0xee, 0x3c, 0xb0, 0x90, 0xf3, 0x0d, 0x27, 0x61, 182 0x4c, 0xb4, 0x57, 0x40, 0x10, 0xda, 0x90, 0xdd, 183 0x86, 0x2e, 0xf9, 0xd4, 0xeb, 0xee, 0x47, 0x61, 184 0x50, 0x31, 0x90, 0x78, 0x5a, 0x71, 0xc7, 0x60, 185 }; 186 187 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_b); 188 189 #define CURVE_GOST_R3410_2012_512_PARAMSETA_CURVE_ORDER_BITLEN 512 190 static const u8 gost_R3410_2012_512_paramSetA_curve_order[] = { 191 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 192 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 193 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 194 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 195 0x27, 0xe6, 0x95, 0x32, 0xf4, 0x8d, 0x89, 0x11, 196 0x6f, 0xf2, 0x2b, 0x8d, 0x4e, 0x05, 0x60, 0x60, 197 0x9b, 0x4b, 0x38, 0xab, 0xfa, 0xd2, 0xb8, 0x5d, 198 0xca, 0xcd, 0xb1, 0x41, 0x1f, 0x10, 0xb2, 0x75, 199 }; 200 201 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_curve_order); 202 203 static const u8 gost_R3410_2012_512_paramSetA_gx[] = { 204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 207 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 208 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 210 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 211 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 212 }; 213 214 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_gx); 215 216 static const u8 gost_R3410_2012_512_paramSetA_gy[] = { 217 0x75, 0x03, 0xcf, 0xe8, 0x7a, 0x83, 0x6a, 0xe3, 218 0xa6, 0x1b, 0x88, 0x16, 0xe2, 0x54, 0x50, 0xe6, 219 0xce, 0x5e, 0x1c, 0x93, 0xac, 0xf1, 0xab, 0xc1, 220 0x77, 0x80, 0x64, 0xfd, 0xcb, 0xef, 0xa9, 0x21, 221 0xdf, 0x16, 0x26, 0xbe, 0x4f, 0xd0, 0x36, 0xe9, 222 0x3d, 0x75, 0xe6, 0xa5, 0x0e, 0x3a, 0x41, 0xe9, 223 0x80, 0x28, 0xfe, 0x5f, 0xc2, 0x35, 0xf5, 0xb8, 224 0x89, 0xa5, 0x89, 0xcb, 0x52, 0x15, 0xf2, 0xa4, 225 }; 226 227 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_gy); 228 229 static const u8 gost_R3410_2012_512_paramSetA_gz[] = { 230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 231 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 232 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 233 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 234 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 235 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 236 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 237 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 238 }; 239 240 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_gz); 241 242 static const u8 gost_R3410_2012_512_paramSetA_gen_order[] = { 243 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 244 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 245 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 246 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 247 0x27, 0xe6, 0x95, 0x32, 0xf4, 0x8d, 0x89, 0x11, 248 0x6f, 0xf2, 0x2b, 0x8d, 0x4e, 0x05, 0x60, 0x60, 249 0x9b, 0x4b, 0x38, 0xab, 0xfa, 0xd2, 0xb8, 0x5d, 250 0xca, 0xcd, 0xb1, 0x41, 0x1f, 0x10, 0xb2, 0x75, 251 }; 252 253 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_gen_order); 254 255 #define CURVE_GOST_R3410_2012_512_PARAMSETA_Q_BITLEN 512 256 static const u8 gost_R3410_2012_512_paramSetA_gen_order_bitlen[] = { 257 0x02, 0x00, 258 }; 259 260 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_gen_order_bitlen); 261 262 static const u8 gost_R3410_2012_512_paramSetA_cofactor[] = { 263 0x01, 264 }; 265 266 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_cofactor); 267 268 static const u8 gost_R3410_2012_512_paramSetA_alpha_montgomery[] = { 269 0x00, 270 }; 271 TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetA_alpha_montgomery, 0); 272 273 static const u8 gost_R3410_2012_512_paramSetA_gamma_montgomery[] = { 274 0x00, 275 }; 276 TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetA_gamma_montgomery, 0); 277 278 static const u8 gost_R3410_2012_512_paramSetA_alpha_edwards[] = { 279 0x00, 280 }; 281 TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetA_alpha_edwards, 0); 282 283 static const u8 gost_R3410_2012_512_paramSetA_name[] = "GOST_R3410_2012_512_PARAMSETA"; 284 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_name); 285 286 static const u8 gost_R3410_2012_512_paramSetA_oid[] = "1.2.643.7.1.2.1.2.1"; 287 TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_oid); 288 289 static const ec_str_params gost_R3410_2012_512_paramSetA_str_params = { 290 .p = &gost_R3410_2012_512_paramSetA_p_str_param, 291 .p_bitlen = &gost_R3410_2012_512_paramSetA_p_bitlen_str_param, 292 .r = &gost_R3410_2012_512_paramSetA_r_str_param, 293 .r_square = &gost_R3410_2012_512_paramSetA_r_square_str_param, 294 .mpinv = &gost_R3410_2012_512_paramSetA_mpinv_str_param, 295 .p_shift = &gost_R3410_2012_512_paramSetA_p_shift_str_param, 296 .p_normalized = &gost_R3410_2012_512_paramSetA_p_normalized_str_param, 297 .p_reciprocal = &gost_R3410_2012_512_paramSetA_p_reciprocal_str_param, 298 .a = &gost_R3410_2012_512_paramSetA_a_str_param, 299 .b = &gost_R3410_2012_512_paramSetA_b_str_param, 300 .curve_order = &gost_R3410_2012_512_paramSetA_curve_order_str_param, 301 .gx = &gost_R3410_2012_512_paramSetA_gx_str_param, 302 .gy = &gost_R3410_2012_512_paramSetA_gy_str_param, 303 .gz = &gost_R3410_2012_512_paramSetA_gz_str_param, 304 .gen_order = &gost_R3410_2012_512_paramSetA_gen_order_str_param, 305 .gen_order_bitlen = &gost_R3410_2012_512_paramSetA_gen_order_bitlen_str_param, 306 .cofactor = &gost_R3410_2012_512_paramSetA_cofactor_str_param, 307 .alpha_montgomery = &gost_R3410_2012_512_paramSetA_alpha_montgomery_str_param, 308 .gamma_montgomery = &gost_R3410_2012_512_paramSetA_gamma_montgomery_str_param, 309 .alpha_edwards = &gost_R3410_2012_512_paramSetA_alpha_edwards_str_param, 310 .oid = &gost_R3410_2012_512_paramSetA_oid_str_param, 311 .name = &gost_R3410_2012_512_paramSetA_name_str_param, 312 }; 313 314 /* 315 * Compute max bit length of all curves for p and q 316 */ 317 #ifndef CURVES_MAX_P_BIT_LEN 318 #define CURVES_MAX_P_BIT_LEN 0 319 #endif 320 #if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETA_P_BITLEN) 321 #undef CURVES_MAX_P_BIT_LEN 322 #define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETA_P_BITLEN 323 #endif 324 #ifndef CURVES_MAX_Q_BIT_LEN 325 #define CURVES_MAX_Q_BIT_LEN 0 326 #endif 327 #if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETA_Q_BITLEN) 328 #undef CURVES_MAX_Q_BIT_LEN 329 #define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETA_Q_BITLEN 330 #endif 331 #ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN 332 #define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 333 #endif 334 #if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETA_CURVE_ORDER_BITLEN) 335 #undef CURVES_MAX_CURVE_ORDER_BIT_LEN 336 #define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETA_CURVE_ORDER_BITLEN 337 #endif 338 339 /* 340 * Compute and adapt max name and oid length 341 */ 342 #ifndef MAX_CURVE_OID_LEN 343 #define MAX_CURVE_OID_LEN 0 344 #endif 345 #ifndef MAX_CURVE_NAME_LEN 346 #define MAX_CURVE_NAME_LEN 0 347 #endif 348 #if (MAX_CURVE_OID_LEN < 20) 349 #undef MAX_CURVE_OID_LEN 350 #define MAX_CURVE_OID_LEN 20 351 #endif 352 #if (MAX_CURVE_NAME_LEN < 50) 353 #undef MAX_CURVE_NAME_LEN 354 #define MAX_CURVE_NAME_LEN 50 355 #endif 356 357 #endif /* __EC_PARAMS_GOST_R3410_2012_512_PARAMSETA_H__ */ 358 359 #endif /* WITH_CURVE_GOST_R3410_2012_512_PARAMSETA */ 360