1 #include <libecc/lib_ecc_config.h> 2 #ifdef WITH_CURVE_BIGN512V1 3 4 #ifndef __EC_PARAMS_BIGN512V1_H__ 5 #define __EC_PARAMS_BIGN512V1_H__ 6 #include <libecc/curves/known/ec_params_external.h> 7 static const u8 bign512v1_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(bign512v1_p); 19 20 #define CURVE_BIGN512V1_P_BITLEN 512 21 static const u8 bign512v1_p_bitlen[] = { 22 0x02, 0x00, 23 }; 24 25 TO_EC_STR_PARAM(bign512v1_p_bitlen); 26 27 #if (WORD_BYTES == 8) /* 64-bit words */ 28 static const u8 bign512v1_r[] = { 29 0x02, 0x39, 30 }; 31 32 TO_EC_STR_PARAM(bign512v1_r); 33 34 static const u8 bign512v1_r_square[] = { 35 0x04, 0xf0, 0xb1, 36 }; 37 38 TO_EC_STR_PARAM(bign512v1_r_square); 39 40 static const u8 bign512v1_mpinv[] = { 41 0x58, 0xa1, 0xf7, 0xe6, 0xce, 0x0f, 0x4c, 0x09, 42 }; 43 44 TO_EC_STR_PARAM(bign512v1_mpinv); 45 46 static const u8 bign512v1_p_shift[] = { 47 0x00, 48 }; 49 50 TO_EC_STR_PARAM(bign512v1_p_shift); 51 52 static const u8 bign512v1_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(bign512v1_p_normalized); 64 65 static const u8 bign512v1_p_reciprocal[] = { 66 0x00, 67 }; 68 69 TO_EC_STR_PARAM(bign512v1_p_reciprocal); 70 71 #elif (WORD_BYTES == 4) /* 32-bit words */ 72 static const u8 bign512v1_r[] = { 73 0x02, 0x39, 74 }; 75 76 TO_EC_STR_PARAM(bign512v1_r); 77 78 static const u8 bign512v1_r_square[] = { 79 0x04, 0xf0, 0xb1, 80 }; 81 82 TO_EC_STR_PARAM(bign512v1_r_square); 83 84 static const u8 bign512v1_mpinv[] = { 85 0xce, 0x0f, 0x4c, 0x09, 86 }; 87 88 TO_EC_STR_PARAM(bign512v1_mpinv); 89 90 static const u8 bign512v1_p_shift[] = { 91 0x00, 92 }; 93 94 TO_EC_STR_PARAM(bign512v1_p_shift); 95 96 static const u8 bign512v1_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(bign512v1_p_normalized); 108 109 static const u8 bign512v1_p_reciprocal[] = { 110 0x00, 111 }; 112 113 TO_EC_STR_PARAM(bign512v1_p_reciprocal); 114 115 #elif (WORD_BYTES == 2) /* 16-bit words */ 116 static const u8 bign512v1_r[] = { 117 0x02, 0x39, 118 }; 119 120 TO_EC_STR_PARAM(bign512v1_r); 121 122 static const u8 bign512v1_r_square[] = { 123 0x04, 0xf0, 0xb1, 124 }; 125 126 TO_EC_STR_PARAM(bign512v1_r_square); 127 128 static const u8 bign512v1_mpinv[] = { 129 0x4c, 0x09, 130 }; 131 132 TO_EC_STR_PARAM(bign512v1_mpinv); 133 134 static const u8 bign512v1_p_shift[] = { 135 0x00, 136 }; 137 138 TO_EC_STR_PARAM(bign512v1_p_shift); 139 140 static const u8 bign512v1_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(bign512v1_p_normalized); 152 153 static const u8 bign512v1_p_reciprocal[] = { 154 0x00, 155 }; 156 157 TO_EC_STR_PARAM(bign512v1_p_reciprocal); 158 159 #else /* unknown word size */ 160 #error "Unsupported word size" 161 #endif 162 163 static const u8 bign512v1_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(bign512v1_a); 175 176 static const u8 bign512v1_b[] = { 177 0x6c, 0xb4, 0x59, 0x44, 0x93, 0x3b, 0x8c, 0x43, 178 0xd8, 0x8c, 0x5d, 0x6a, 0x60, 0xfd, 0x58, 0x89, 179 0x5b, 0xc6, 0xa9, 0xee, 0xdd, 0x5d, 0x25, 0x51, 180 0x17, 0xce, 0x13, 0xe3, 0xda, 0xad, 0xb0, 0x88, 181 0x27, 0x11, 0xdc, 0xb5, 0xc4, 0x24, 0x5e, 0x95, 182 0x29, 0x33, 0x00, 0x8c, 0x87, 0xac, 0xa2, 0x43, 183 0xea, 0x86, 0x22, 0x27, 0x3a, 0x49, 0xa2, 0x7a, 184 0x09, 0x34, 0x69, 0x98, 0xd6, 0x13, 0x9c, 0x90, 185 }; 186 187 TO_EC_STR_PARAM(bign512v1_b); 188 189 #define CURVE_BIGN512V1_CURVE_ORDER_BITLEN 512 190 static const u8 bign512v1_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 0xb2, 0xc0, 0x09, 0x2c, 0x01, 0x98, 0x00, 0x4e, 196 0xf2, 0x6b, 0xeb, 0xb0, 0x2e, 0x21, 0x13, 0xf4, 197 0x36, 0x1b, 0xca, 0xe5, 0x95, 0x56, 0xdf, 0x32, 198 0xdc, 0xff, 0xad, 0x49, 0x0d, 0x06, 0x8e, 0xf1, 199 }; 200 201 TO_EC_STR_PARAM(bign512v1_curve_order); 202 203 static const u8 bign512v1_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, 0x00, 212 }; 213 214 TO_EC_STR_PARAM(bign512v1_gx); 215 216 static const u8 bign512v1_gy[] = { 217 0xa8, 0x26, 0xff, 0x7a, 0xe4, 0x03, 0x76, 0x81, 218 0xb1, 0x82, 0xe6, 0xf7, 0xa0, 0xd1, 0x8f, 0xab, 219 0xb0, 0xab, 0x41, 0xb3, 0xb3, 0x61, 0xbc, 0xe2, 220 0xd2, 0xed, 0xf8, 0x1b, 0x00, 0xcc, 0xca, 0xda, 221 0x69, 0x73, 0xdd, 0xe2, 0x0e, 0xfa, 0x6f, 0xd2, 222 0xff, 0x77, 0x73, 0x95, 0xee, 0xe8, 0x22, 0x61, 223 0x67, 0xaa, 0x83, 0xb9, 0xc9, 0x4c, 0x0d, 0x04, 224 0xb7, 0x92, 0xae, 0x6f, 0xce, 0xef, 0xed, 0xbd, 225 }; 226 227 TO_EC_STR_PARAM(bign512v1_gy); 228 229 static const u8 bign512v1_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(bign512v1_gz); 241 242 static const u8 bign512v1_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 0xb2, 0xc0, 0x09, 0x2c, 0x01, 0x98, 0x00, 0x4e, 248 0xf2, 0x6b, 0xeb, 0xb0, 0x2e, 0x21, 0x13, 0xf4, 249 0x36, 0x1b, 0xca, 0xe5, 0x95, 0x56, 0xdf, 0x32, 250 0xdc, 0xff, 0xad, 0x49, 0x0d, 0x06, 0x8e, 0xf1, 251 }; 252 253 TO_EC_STR_PARAM(bign512v1_gen_order); 254 255 #define CURVE_BIGN512V1_Q_BITLEN 512 256 static const u8 bign512v1_gen_order_bitlen[] = { 257 0x02, 0x00, 258 }; 259 260 TO_EC_STR_PARAM(bign512v1_gen_order_bitlen); 261 262 static const u8 bign512v1_cofactor[] = { 263 0x01, 264 }; 265 266 TO_EC_STR_PARAM(bign512v1_cofactor); 267 268 static const u8 bign512v1_alpha_montgomery[] = { 269 0x00, 270 }; 271 TO_EC_STR_PARAM_FIXED_SIZE(bign512v1_alpha_montgomery, 0); 272 273 static const u8 bign512v1_gamma_montgomery[] = { 274 0x00, 275 }; 276 TO_EC_STR_PARAM_FIXED_SIZE(bign512v1_gamma_montgomery, 0); 277 278 static const u8 bign512v1_alpha_edwards[] = { 279 0x00, 280 }; 281 TO_EC_STR_PARAM_FIXED_SIZE(bign512v1_alpha_edwards, 0); 282 283 static const u8 bign512v1_name[] = "BIGN512V1"; 284 TO_EC_STR_PARAM(bign512v1_name); 285 286 static const u8 bign512v1_oid[] = "1.2.112.0.2.0.34.101.45.3.3"; 287 TO_EC_STR_PARAM(bign512v1_oid); 288 289 static const ec_str_params bign512v1_str_params = { 290 .p = &bign512v1_p_str_param, 291 .p_bitlen = &bign512v1_p_bitlen_str_param, 292 .r = &bign512v1_r_str_param, 293 .r_square = &bign512v1_r_square_str_param, 294 .mpinv = &bign512v1_mpinv_str_param, 295 .p_shift = &bign512v1_p_shift_str_param, 296 .p_normalized = &bign512v1_p_normalized_str_param, 297 .p_reciprocal = &bign512v1_p_reciprocal_str_param, 298 .a = &bign512v1_a_str_param, 299 .b = &bign512v1_b_str_param, 300 .curve_order = &bign512v1_curve_order_str_param, 301 .gx = &bign512v1_gx_str_param, 302 .gy = &bign512v1_gy_str_param, 303 .gz = &bign512v1_gz_str_param, 304 .gen_order = &bign512v1_gen_order_str_param, 305 .gen_order_bitlen = &bign512v1_gen_order_bitlen_str_param, 306 .cofactor = &bign512v1_cofactor_str_param, 307 .alpha_montgomery = &bign512v1_alpha_montgomery_str_param, 308 .gamma_montgomery = &bign512v1_gamma_montgomery_str_param, 309 .alpha_edwards = &bign512v1_alpha_edwards_str_param, 310 .oid = &bign512v1_oid_str_param, 311 .name = &bign512v1_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_BIGN512V1_P_BITLEN) 321 #undef CURVES_MAX_P_BIT_LEN 322 #define CURVES_MAX_P_BIT_LEN CURVE_BIGN512V1_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_BIGN512V1_Q_BITLEN) 328 #undef CURVES_MAX_Q_BIT_LEN 329 #define CURVES_MAX_Q_BIT_LEN CURVE_BIGN512V1_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_BIGN512V1_CURVE_ORDER_BITLEN) 335 #undef CURVES_MAX_CURVE_ORDER_BIT_LEN 336 #define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BIGN512V1_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 < 1) 349 #undef MAX_CURVE_OID_LEN 350 #define MAX_CURVE_OID_LEN 1 351 #endif 352 #if (MAX_CURVE_NAME_LEN < 23) 353 #undef MAX_CURVE_NAME_LEN 354 #define MAX_CURVE_NAME_LEN 23 355 #endif 356 357 #endif /* __EC_PARAMS_BIGN512V1_H__ */ 358 359 #endif /* WITH_CURVE_BIGN512V1 */ 360