1 #include <libecc/lib_ecc_config.h> 2 #ifdef WITH_CURVE_BRAINPOOLP384T1 3 4 #ifndef __EC_PARAMS_BRAINPOOLP384T1_H__ 5 #define __EC_PARAMS_BRAINPOOLP384T1_H__ 6 #include <libecc/curves/known/ec_params_external.h> 7 static const u8 brainpoolp384t1_p[] = { 8 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 9 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 10 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4, 11 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23, 12 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71, 13 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53, 14 }; 15 16 TO_EC_STR_PARAM(brainpoolp384t1_p); 17 18 #define CURVE_BRAINPOOLP384T1_P_BITLEN 384 19 static const u8 brainpoolp384t1_p_bitlen[] = { 20 0x01, 0x80, 21 }; 22 23 TO_EC_STR_PARAM(brainpoolp384t1_p_bitlen); 24 25 #if (WORD_BYTES == 8) /* 64-bit words */ 26 static const u8 brainpoolp384t1_r[] = { 27 0x73, 0x46, 0xe1, 0x7d, 0x5c, 0xc7, 0x92, 0xd7, 28 0xf0, 0xa2, 0x90, 0x81, 0xaf, 0x19, 0xbe, 0x20, 29 0xea, 0xd0, 0x8e, 0xf6, 0x12, 0xab, 0xa9, 0x4b, 30 0xed, 0x4e, 0x25, 0xe6, 0x80, 0x48, 0xee, 0xdc, 31 0x53, 0x2c, 0x58, 0xd6, 0x6f, 0xe2, 0xe5, 0x8e, 32 0x78, 0xb8, 0xff, 0xec, 0xce, 0xf8, 0x13, 0xad, 33 }; 34 35 TO_EC_STR_PARAM(brainpoolp384t1_r); 36 37 static const u8 brainpoolp384t1_r_square[] = { 38 0x36, 0xbf, 0x68, 0x83, 0x17, 0x8d, 0xf8, 0x42, 39 0xd5, 0xc6, 0xef, 0x3b, 0xa5, 0x7e, 0x05, 0x2c, 40 0x62, 0x14, 0x01, 0x91, 0x99, 0x18, 0xd5, 0xaf, 41 0x8e, 0x28, 0xf9, 0x9c, 0xc9, 0x94, 0x08, 0x99, 42 0x53, 0x52, 0x83, 0x34, 0x3d, 0x7f, 0xd9, 0x65, 43 0x08, 0x7c, 0xef, 0xff, 0x40, 0xb6, 0x4b, 0xde, 44 }; 45 46 TO_EC_STR_PARAM(brainpoolp384t1_r_square); 47 48 static const u8 brainpoolp384t1_mpinv[] = { 49 0x9a, 0x6e, 0xa9, 0x6c, 0xea, 0x9e, 0xc8, 0x25, 50 }; 51 52 TO_EC_STR_PARAM(brainpoolp384t1_mpinv); 53 54 static const u8 brainpoolp384t1_p_shift[] = { 55 0x00, 56 }; 57 58 TO_EC_STR_PARAM(brainpoolp384t1_p_shift); 59 60 static const u8 brainpoolp384t1_p_normalized[] = { 61 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 62 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 63 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4, 64 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23, 65 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71, 66 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53, 67 }; 68 69 TO_EC_STR_PARAM(brainpoolp384t1_p_normalized); 70 71 static const u8 brainpoolp384t1_p_reciprocal[] = { 72 0xd1, 0xb5, 0x75, 0xb1, 0x6d, 0x8e, 0xc6, 0xb8, 73 }; 74 75 TO_EC_STR_PARAM(brainpoolp384t1_p_reciprocal); 76 77 #elif (WORD_BYTES == 4) /* 32-bit words */ 78 static const u8 brainpoolp384t1_r[] = { 79 0x73, 0x46, 0xe1, 0x7d, 0x5c, 0xc7, 0x92, 0xd7, 80 0xf0, 0xa2, 0x90, 0x81, 0xaf, 0x19, 0xbe, 0x20, 81 0xea, 0xd0, 0x8e, 0xf6, 0x12, 0xab, 0xa9, 0x4b, 82 0xed, 0x4e, 0x25, 0xe6, 0x80, 0x48, 0xee, 0xdc, 83 0x53, 0x2c, 0x58, 0xd6, 0x6f, 0xe2, 0xe5, 0x8e, 84 0x78, 0xb8, 0xff, 0xec, 0xce, 0xf8, 0x13, 0xad, 85 }; 86 87 TO_EC_STR_PARAM(brainpoolp384t1_r); 88 89 static const u8 brainpoolp384t1_r_square[] = { 90 0x36, 0xbf, 0x68, 0x83, 0x17, 0x8d, 0xf8, 0x42, 91 0xd5, 0xc6, 0xef, 0x3b, 0xa5, 0x7e, 0x05, 0x2c, 92 0x62, 0x14, 0x01, 0x91, 0x99, 0x18, 0xd5, 0xaf, 93 0x8e, 0x28, 0xf9, 0x9c, 0xc9, 0x94, 0x08, 0x99, 94 0x53, 0x52, 0x83, 0x34, 0x3d, 0x7f, 0xd9, 0x65, 95 0x08, 0x7c, 0xef, 0xff, 0x40, 0xb6, 0x4b, 0xde, 96 }; 97 98 TO_EC_STR_PARAM(brainpoolp384t1_r_square); 99 100 static const u8 brainpoolp384t1_mpinv[] = { 101 0xea, 0x9e, 0xc8, 0x25, 102 }; 103 104 TO_EC_STR_PARAM(brainpoolp384t1_mpinv); 105 106 static const u8 brainpoolp384t1_p_shift[] = { 107 0x00, 108 }; 109 110 TO_EC_STR_PARAM(brainpoolp384t1_p_shift); 111 112 static const u8 brainpoolp384t1_p_normalized[] = { 113 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 114 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 115 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4, 116 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23, 117 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71, 118 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53, 119 }; 120 121 TO_EC_STR_PARAM(brainpoolp384t1_p_normalized); 122 123 static const u8 brainpoolp384t1_p_reciprocal[] = { 124 0xd1, 0xb5, 0x75, 0xb1, 125 }; 126 127 TO_EC_STR_PARAM(brainpoolp384t1_p_reciprocal); 128 129 #elif (WORD_BYTES == 2) /* 16-bit words */ 130 static const u8 brainpoolp384t1_r[] = { 131 0x73, 0x46, 0xe1, 0x7d, 0x5c, 0xc7, 0x92, 0xd7, 132 0xf0, 0xa2, 0x90, 0x81, 0xaf, 0x19, 0xbe, 0x20, 133 0xea, 0xd0, 0x8e, 0xf6, 0x12, 0xab, 0xa9, 0x4b, 134 0xed, 0x4e, 0x25, 0xe6, 0x80, 0x48, 0xee, 0xdc, 135 0x53, 0x2c, 0x58, 0xd6, 0x6f, 0xe2, 0xe5, 0x8e, 136 0x78, 0xb8, 0xff, 0xec, 0xce, 0xf8, 0x13, 0xad, 137 }; 138 139 TO_EC_STR_PARAM(brainpoolp384t1_r); 140 141 static const u8 brainpoolp384t1_r_square[] = { 142 0x36, 0xbf, 0x68, 0x83, 0x17, 0x8d, 0xf8, 0x42, 143 0xd5, 0xc6, 0xef, 0x3b, 0xa5, 0x7e, 0x05, 0x2c, 144 0x62, 0x14, 0x01, 0x91, 0x99, 0x18, 0xd5, 0xaf, 145 0x8e, 0x28, 0xf9, 0x9c, 0xc9, 0x94, 0x08, 0x99, 146 0x53, 0x52, 0x83, 0x34, 0x3d, 0x7f, 0xd9, 0x65, 147 0x08, 0x7c, 0xef, 0xff, 0x40, 0xb6, 0x4b, 0xde, 148 }; 149 150 TO_EC_STR_PARAM(brainpoolp384t1_r_square); 151 152 static const u8 brainpoolp384t1_mpinv[] = { 153 0xc8, 0x25, 154 }; 155 156 TO_EC_STR_PARAM(brainpoolp384t1_mpinv); 157 158 static const u8 brainpoolp384t1_p_shift[] = { 159 0x00, 160 }; 161 162 TO_EC_STR_PARAM(brainpoolp384t1_p_shift); 163 164 static const u8 brainpoolp384t1_p_normalized[] = { 165 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 166 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 167 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4, 168 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23, 169 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71, 170 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53, 171 }; 172 173 TO_EC_STR_PARAM(brainpoolp384t1_p_normalized); 174 175 static const u8 brainpoolp384t1_p_reciprocal[] = { 176 0xd1, 0xb5, 177 }; 178 179 TO_EC_STR_PARAM(brainpoolp384t1_p_reciprocal); 180 181 #else /* unknown word size */ 182 #error "Unsupported word size" 183 #endif 184 185 static const u8 brainpoolp384t1_a[] = { 186 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 187 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 188 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4, 189 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23, 190 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71, 191 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x50, 192 }; 193 194 TO_EC_STR_PARAM(brainpoolp384t1_a); 195 196 static const u8 brainpoolp384t1_b[] = { 197 0x7f, 0x51, 0x9e, 0xad, 0xa7, 0xbd, 0xa8, 0x1b, 198 0xd8, 0x26, 0xdb, 0xa6, 0x47, 0x91, 0x0f, 0x8c, 199 0x4b, 0x93, 0x46, 0xed, 0x8c, 0xcd, 0xc6, 0x4e, 200 0x4b, 0x1a, 0xbd, 0x11, 0x75, 0x6d, 0xce, 0x1d, 201 0x20, 0x74, 0xaa, 0x26, 0x3b, 0x88, 0x80, 0x5c, 202 0xed, 0x70, 0x35, 0x5a, 0x33, 0xb4, 0x71, 0xee, 203 }; 204 205 TO_EC_STR_PARAM(brainpoolp384t1_b); 206 207 #define CURVE_BRAINPOOLP384T1_CURVE_ORDER_BITLEN 384 208 static const u8 brainpoolp384t1_curve_order[] = { 209 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 210 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 211 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb3, 212 0x1f, 0x16, 0x6e, 0x6c, 0xac, 0x04, 0x25, 0xa7, 213 0xcf, 0x3a, 0xb6, 0xaf, 0x6b, 0x7f, 0xc3, 0x10, 214 0x3b, 0x88, 0x32, 0x02, 0xe9, 0x04, 0x65, 0x65, 215 }; 216 217 TO_EC_STR_PARAM(brainpoolp384t1_curve_order); 218 219 static const u8 brainpoolp384t1_gx[] = { 220 0x18, 0xde, 0x98, 0xb0, 0x2d, 0xb9, 0xa3, 0x06, 221 0xf2, 0xaf, 0xcd, 0x72, 0x35, 0xf7, 0x2a, 0x81, 222 0x9b, 0x80, 0xab, 0x12, 0xeb, 0xd6, 0x53, 0x17, 223 0x24, 0x76, 0xfe, 0xcd, 0x46, 0x2a, 0xab, 0xff, 224 0xc4, 0xff, 0x19, 0x1b, 0x94, 0x6a, 0x5f, 0x54, 225 0xd8, 0xd0, 0xaa, 0x2f, 0x41, 0x88, 0x08, 0xcc, 226 }; 227 228 TO_EC_STR_PARAM(brainpoolp384t1_gx); 229 230 static const u8 brainpoolp384t1_gy[] = { 231 0x25, 0xab, 0x05, 0x69, 0x62, 0xd3, 0x06, 0x51, 232 0xa1, 0x14, 0xaf, 0xd2, 0x75, 0x5a, 0xd3, 0x36, 233 0x74, 0x7f, 0x93, 0x47, 0x5b, 0x7a, 0x1f, 0xca, 234 0x3b, 0x88, 0xf2, 0xb6, 0xa2, 0x08, 0xcc, 0xfe, 235 0x46, 0x94, 0x08, 0x58, 0x4d, 0xc2, 0xb2, 0x91, 236 0x26, 0x75, 0xbf, 0x5b, 0x9e, 0x58, 0x29, 0x28, 237 }; 238 239 TO_EC_STR_PARAM(brainpoolp384t1_gy); 240 241 static const u8 brainpoolp384t1_gz[] = { 242 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 243 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 244 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 246 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 248 }; 249 250 TO_EC_STR_PARAM(brainpoolp384t1_gz); 251 252 static const u8 brainpoolp384t1_gen_order[] = { 253 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, 254 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, 255 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb3, 256 0x1f, 0x16, 0x6e, 0x6c, 0xac, 0x04, 0x25, 0xa7, 257 0xcf, 0x3a, 0xb6, 0xaf, 0x6b, 0x7f, 0xc3, 0x10, 258 0x3b, 0x88, 0x32, 0x02, 0xe9, 0x04, 0x65, 0x65, 259 }; 260 261 TO_EC_STR_PARAM(brainpoolp384t1_gen_order); 262 263 #define CURVE_BRAINPOOLP384T1_Q_BITLEN 384 264 static const u8 brainpoolp384t1_gen_order_bitlen[] = { 265 0x01, 0x80, 266 }; 267 268 TO_EC_STR_PARAM(brainpoolp384t1_gen_order_bitlen); 269 270 static const u8 brainpoolp384t1_cofactor[] = { 271 0x01, 272 }; 273 274 TO_EC_STR_PARAM(brainpoolp384t1_cofactor); 275 276 static const u8 brainpoolp384t1_alpha_montgomery[] = { 277 0x00, 278 }; 279 TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp384t1_alpha_montgomery, 0); 280 281 static const u8 brainpoolp384t1_gamma_montgomery[] = { 282 0x00, 283 }; 284 TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp384t1_gamma_montgomery, 0); 285 286 static const u8 brainpoolp384t1_alpha_edwards[] = { 287 0x00, 288 }; 289 TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp384t1_alpha_edwards, 0); 290 291 static const u8 brainpoolp384t1_name[] = "BRAINPOOLP384T1"; 292 TO_EC_STR_PARAM(brainpoolp384t1_name); 293 294 static const u8 brainpoolp384t1_oid[] = "1.3.36.3.3.2.8.1.1.12"; 295 TO_EC_STR_PARAM(brainpoolp384t1_oid); 296 297 static const ec_str_params brainpoolp384t1_str_params = { 298 .p = &brainpoolp384t1_p_str_param, 299 .p_bitlen = &brainpoolp384t1_p_bitlen_str_param, 300 .r = &brainpoolp384t1_r_str_param, 301 .r_square = &brainpoolp384t1_r_square_str_param, 302 .mpinv = &brainpoolp384t1_mpinv_str_param, 303 .p_shift = &brainpoolp384t1_p_shift_str_param, 304 .p_normalized = &brainpoolp384t1_p_normalized_str_param, 305 .p_reciprocal = &brainpoolp384t1_p_reciprocal_str_param, 306 .a = &brainpoolp384t1_a_str_param, 307 .b = &brainpoolp384t1_b_str_param, 308 .curve_order = &brainpoolp384t1_curve_order_str_param, 309 .gx = &brainpoolp384t1_gx_str_param, 310 .gy = &brainpoolp384t1_gy_str_param, 311 .gz = &brainpoolp384t1_gz_str_param, 312 .gen_order = &brainpoolp384t1_gen_order_str_param, 313 .gen_order_bitlen = &brainpoolp384t1_gen_order_bitlen_str_param, 314 .cofactor = &brainpoolp384t1_cofactor_str_param, 315 .alpha_montgomery = &brainpoolp384t1_alpha_montgomery_str_param, 316 .gamma_montgomery = &brainpoolp384t1_gamma_montgomery_str_param, 317 .alpha_edwards = &brainpoolp384t1_alpha_edwards_str_param, 318 .oid = &brainpoolp384t1_oid_str_param, 319 .name = &brainpoolp384t1_name_str_param, 320 }; 321 322 /* 323 * Compute max bit length of all curves for p and q 324 */ 325 #ifndef CURVES_MAX_P_BIT_LEN 326 #define CURVES_MAX_P_BIT_LEN 0 327 #endif 328 #if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP384T1_P_BITLEN) 329 #undef CURVES_MAX_P_BIT_LEN 330 #define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP384T1_P_BITLEN 331 #endif 332 #ifndef CURVES_MAX_Q_BIT_LEN 333 #define CURVES_MAX_Q_BIT_LEN 0 334 #endif 335 #if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP384T1_Q_BITLEN) 336 #undef CURVES_MAX_Q_BIT_LEN 337 #define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP384T1_Q_BITLEN 338 #endif 339 #ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN 340 #define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 341 #endif 342 #if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP384T1_CURVE_ORDER_BITLEN) 343 #undef CURVES_MAX_CURVE_ORDER_BIT_LEN 344 #define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP384T1_CURVE_ORDER_BITLEN 345 #endif 346 347 /* 348 * Compute and adapt max name and oid length 349 */ 350 #ifndef MAX_CURVE_OID_LEN 351 #define MAX_CURVE_OID_LEN 0 352 #endif 353 #ifndef MAX_CURVE_NAME_LEN 354 #define MAX_CURVE_NAME_LEN 0 355 #endif 356 #if (MAX_CURVE_OID_LEN < 1) 357 #undef MAX_CURVE_OID_LEN 358 #define MAX_CURVE_OID_LEN 1 359 #endif 360 #if (MAX_CURVE_NAME_LEN < 29) 361 #undef MAX_CURVE_NAME_LEN 362 #define MAX_CURVE_NAME_LEN 29 363 #endif 364 365 #endif /* __EC_PARAMS_BRAINPOOLP384T1_H__ */ 366 367 #endif /* WITH_CURVE_BRAINPOOLP384T1 */ 368