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_BRAINPOOLP192R1 18 19 #ifndef __EC_PARAMS_BRAINPOOLP192R1_H__ 20 #define __EC_PARAMS_BRAINPOOLP192R1_H__ 21 #include <libecc/curves/known/ec_params_external.h> 22 static const u8 brainpoolp192r1_p[] = { 23 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 24 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, 25 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, 26 }; 27 28 TO_EC_STR_PARAM(brainpoolp192r1_p); 29 30 #define CURVE_BRAINPOOLP192R1_P_BITLEN 192 31 static const u8 brainpoolp192r1_p_bitlen[] = { 32 0xc0, 33 }; 34 35 TO_EC_STR_PARAM(brainpoolp192r1_p_bitlen); 36 37 #if (WORD_BYTES == 8) /* 64-bit words */ 38 static const u8 brainpoolp192r1_r[] = { 39 0x3c, 0xfd, 0x0b, 0xe2, 0x6c, 0xd5, 0xc9, 0x32, 40 0x58, 0x5c, 0xb9, 0xcf, 0x6c, 0x2e, 0x72, 0x48, 41 0x70, 0x31, 0xb8, 0x92, 0x1e, 0x57, 0x9d, 0x69, 42 }; 43 44 TO_EC_STR_PARAM(brainpoolp192r1_r); 45 46 static const u8 brainpoolp192r1_r_square[] = { 47 0xb6, 0x22, 0x51, 0x26, 0xee, 0xd3, 0x4f, 0x10, 48 0x33, 0xbf, 0x48, 0x46, 0x02, 0xc3, 0xfe, 0x69, 49 0xe2, 0x47, 0x4c, 0x69, 0x72, 0xc7, 0xb2, 0x1a, 50 }; 51 52 TO_EC_STR_PARAM(brainpoolp192r1_r_square); 53 54 static const u8 brainpoolp192r1_mpinv[] = { 55 0xe0, 0x84, 0x96, 0xdb, 0x56, 0xa2, 0xc2, 0xd9, 56 }; 57 58 TO_EC_STR_PARAM(brainpoolp192r1_mpinv); 59 60 static const u8 brainpoolp192r1_p_shift[] = { 61 0x00, 62 }; 63 64 TO_EC_STR_PARAM(brainpoolp192r1_p_shift); 65 66 static const u8 brainpoolp192r1_p_normalized[] = { 67 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 68 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, 69 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, 70 }; 71 72 TO_EC_STR_PARAM(brainpoolp192r1_p_normalized); 73 74 static const u8 brainpoolp192r1_p_reciprocal[] = { 75 0x50, 0x0f, 0xea, 0x39, 0xff, 0x17, 0x28, 0xc8, 76 }; 77 78 TO_EC_STR_PARAM(brainpoolp192r1_p_reciprocal); 79 80 #elif (WORD_BYTES == 4) /* 32-bit words */ 81 static const u8 brainpoolp192r1_r[] = { 82 0x3c, 0xfd, 0x0b, 0xe2, 0x6c, 0xd5, 0xc9, 0x32, 83 0x58, 0x5c, 0xb9, 0xcf, 0x6c, 0x2e, 0x72, 0x48, 84 0x70, 0x31, 0xb8, 0x92, 0x1e, 0x57, 0x9d, 0x69, 85 }; 86 87 TO_EC_STR_PARAM(brainpoolp192r1_r); 88 89 static const u8 brainpoolp192r1_r_square[] = { 90 0xb6, 0x22, 0x51, 0x26, 0xee, 0xd3, 0x4f, 0x10, 91 0x33, 0xbf, 0x48, 0x46, 0x02, 0xc3, 0xfe, 0x69, 92 0xe2, 0x47, 0x4c, 0x69, 0x72, 0xc7, 0xb2, 0x1a, 93 }; 94 95 TO_EC_STR_PARAM(brainpoolp192r1_r_square); 96 97 static const u8 brainpoolp192r1_mpinv[] = { 98 0x56, 0xa2, 0xc2, 0xd9, 99 }; 100 101 TO_EC_STR_PARAM(brainpoolp192r1_mpinv); 102 103 static const u8 brainpoolp192r1_p_shift[] = { 104 0x00, 105 }; 106 107 TO_EC_STR_PARAM(brainpoolp192r1_p_shift); 108 109 static const u8 brainpoolp192r1_p_normalized[] = { 110 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 111 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, 112 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, 113 }; 114 115 TO_EC_STR_PARAM(brainpoolp192r1_p_normalized); 116 117 static const u8 brainpoolp192r1_p_reciprocal[] = { 118 0x50, 0x0f, 0xea, 0x39, 119 }; 120 121 TO_EC_STR_PARAM(brainpoolp192r1_p_reciprocal); 122 123 #elif (WORD_BYTES == 2) /* 16-bit words */ 124 static const u8 brainpoolp192r1_r[] = { 125 0x3c, 0xfd, 0x0b, 0xe2, 0x6c, 0xd5, 0xc9, 0x32, 126 0x58, 0x5c, 0xb9, 0xcf, 0x6c, 0x2e, 0x72, 0x48, 127 0x70, 0x31, 0xb8, 0x92, 0x1e, 0x57, 0x9d, 0x69, 128 }; 129 130 TO_EC_STR_PARAM(brainpoolp192r1_r); 131 132 static const u8 brainpoolp192r1_r_square[] = { 133 0xb6, 0x22, 0x51, 0x26, 0xee, 0xd3, 0x4f, 0x10, 134 0x33, 0xbf, 0x48, 0x46, 0x02, 0xc3, 0xfe, 0x69, 135 0xe2, 0x47, 0x4c, 0x69, 0x72, 0xc7, 0xb2, 0x1a, 136 }; 137 138 TO_EC_STR_PARAM(brainpoolp192r1_r_square); 139 140 static const u8 brainpoolp192r1_mpinv[] = { 141 0xc2, 0xd9, 142 }; 143 144 TO_EC_STR_PARAM(brainpoolp192r1_mpinv); 145 146 static const u8 brainpoolp192r1_p_shift[] = { 147 0x00, 148 }; 149 150 TO_EC_STR_PARAM(brainpoolp192r1_p_shift); 151 152 static const u8 brainpoolp192r1_p_normalized[] = { 153 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 154 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, 155 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, 156 }; 157 158 TO_EC_STR_PARAM(brainpoolp192r1_p_normalized); 159 160 static const u8 brainpoolp192r1_p_reciprocal[] = { 161 0x50, 0x0f, 162 }; 163 164 TO_EC_STR_PARAM(brainpoolp192r1_p_reciprocal); 165 166 #else /* unknown word size */ 167 #error "Unsupported word size" 168 #endif 169 170 static const u8 brainpoolp192r1_a[] = { 171 0x6a, 0x91, 0x17, 0x40, 0x76, 0xb1, 0xe0, 0xe1, 172 0x9c, 0x39, 0xc0, 0x31, 0xfe, 0x86, 0x85, 0xc1, 173 0xca, 0xe0, 0x40, 0xe5, 0xc6, 0x9a, 0x28, 0xef, 174 }; 175 176 TO_EC_STR_PARAM(brainpoolp192r1_a); 177 178 static const u8 brainpoolp192r1_b[] = { 179 0x46, 0x9a, 0x28, 0xef, 0x7c, 0x28, 0xcc, 0xa3, 180 0xdc, 0x72, 0x1d, 0x04, 0x4f, 0x44, 0x96, 0xbc, 181 0xca, 0x7e, 0xf4, 0x14, 0x6f, 0xbf, 0x25, 0xc9, 182 }; 183 184 TO_EC_STR_PARAM(brainpoolp192r1_b); 185 186 #define CURVE_BRAINPOOLP192R1_CURVE_ORDER_BITLEN 192 187 static const u8 brainpoolp192r1_curve_order[] = { 188 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 189 0xa7, 0xa3, 0x46, 0x2f, 0x9e, 0x9e, 0x91, 0x6b, 190 0x5b, 0xe8, 0xf1, 0x02, 0x9a, 0xc4, 0xac, 0xc1, 191 }; 192 193 TO_EC_STR_PARAM(brainpoolp192r1_curve_order); 194 195 static const u8 brainpoolp192r1_gx[] = { 196 0xc0, 0xa0, 0x64, 0x7e, 0xaa, 0xb6, 0xa4, 0x87, 197 0x53, 0xb0, 0x33, 0xc5, 0x6c, 0xb0, 0xf0, 0x90, 198 0x0a, 0x2f, 0x5c, 0x48, 0x53, 0x37, 0x5f, 0xd6, 199 }; 200 201 TO_EC_STR_PARAM(brainpoolp192r1_gx); 202 203 static const u8 brainpoolp192r1_gy[] = { 204 0x14, 0xb6, 0x90, 0x86, 0x6a, 0xbd, 0x5b, 0xb8, 205 0x8b, 0x5f, 0x48, 0x28, 0xc1, 0x49, 0x00, 0x02, 206 0xe6, 0x77, 0x3f, 0xa2, 0xfa, 0x29, 0x9b, 0x8f, 207 }; 208 209 TO_EC_STR_PARAM(brainpoolp192r1_gy); 210 211 static const u8 brainpoolp192r1_gz[] = { 212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 213 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 215 }; 216 217 TO_EC_STR_PARAM(brainpoolp192r1_gz); 218 219 static const u8 brainpoolp192r1_gen_order[] = { 220 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, 221 0xa7, 0xa3, 0x46, 0x2f, 0x9e, 0x9e, 0x91, 0x6b, 222 0x5b, 0xe8, 0xf1, 0x02, 0x9a, 0xc4, 0xac, 0xc1, 223 }; 224 225 TO_EC_STR_PARAM(brainpoolp192r1_gen_order); 226 227 #define CURVE_BRAINPOOLP192R1_Q_BITLEN 192 228 static const u8 brainpoolp192r1_gen_order_bitlen[] = { 229 0xc0, 230 }; 231 232 TO_EC_STR_PARAM(brainpoolp192r1_gen_order_bitlen); 233 234 static const u8 brainpoolp192r1_cofactor[] = { 235 0x01, 236 }; 237 238 TO_EC_STR_PARAM(brainpoolp192r1_cofactor); 239 240 static const u8 brainpoolp192r1_alpha_montgomery[] = { 241 0x00, 242 }; 243 244 TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp192r1_alpha_montgomery, 0); 245 246 static const u8 brainpoolp192r1_gamma_montgomery[] = { 247 0x00, 248 }; 249 250 TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp192r1_gamma_montgomery, 0); 251 252 static const u8 brainpoolp192r1_alpha_edwards[] = { 253 0x00, 254 }; 255 256 TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp192r1_alpha_edwards, 0); 257 258 static const u8 brainpoolp192r1_name[] = "BRAINPOOLP192R1"; 259 TO_EC_STR_PARAM(brainpoolp192r1_name); 260 261 static const u8 brainpoolp192r1_oid[] = "1.3.36.3.3.2.8.1.1.3"; 262 TO_EC_STR_PARAM(brainpoolp192r1_oid); 263 264 static const ec_str_params brainpoolp192r1_str_params = { 265 .p = &brainpoolp192r1_p_str_param, 266 .p_bitlen = &brainpoolp192r1_p_bitlen_str_param, 267 .r = &brainpoolp192r1_r_str_param, 268 .r_square = &brainpoolp192r1_r_square_str_param, 269 .mpinv = &brainpoolp192r1_mpinv_str_param, 270 .p_shift = &brainpoolp192r1_p_shift_str_param, 271 .p_normalized = &brainpoolp192r1_p_normalized_str_param, 272 .p_reciprocal = &brainpoolp192r1_p_reciprocal_str_param, 273 .a = &brainpoolp192r1_a_str_param, 274 .b = &brainpoolp192r1_b_str_param, 275 .curve_order = &brainpoolp192r1_curve_order_str_param, 276 .gx = &brainpoolp192r1_gx_str_param, 277 .gy = &brainpoolp192r1_gy_str_param, 278 .gz = &brainpoolp192r1_gz_str_param, 279 .gen_order = &brainpoolp192r1_gen_order_str_param, 280 .gen_order_bitlen = &brainpoolp192r1_gen_order_bitlen_str_param, 281 .cofactor = &brainpoolp192r1_cofactor_str_param, 282 .alpha_montgomery = &brainpoolp192r1_alpha_montgomery_str_param, 283 .gamma_montgomery = &brainpoolp192r1_gamma_montgomery_str_param, 284 .alpha_edwards = &brainpoolp192r1_alpha_edwards_str_param, 285 .oid = &brainpoolp192r1_oid_str_param, 286 .name = &brainpoolp192r1_name_str_param, 287 }; 288 289 /* 290 * Compute max bit length of all curves for p and q 291 */ 292 #ifndef CURVES_MAX_P_BIT_LEN 293 #define CURVES_MAX_P_BIT_LEN 0 294 #endif 295 #if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP192R1_P_BITLEN) 296 #undef CURVES_MAX_P_BIT_LEN 297 #define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP192R1_P_BITLEN 298 #endif 299 #ifndef CURVES_MAX_Q_BIT_LEN 300 #define CURVES_MAX_Q_BIT_LEN 0 301 #endif 302 #if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP192R1_Q_BITLEN) 303 #undef CURVES_MAX_Q_BIT_LEN 304 #define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP192R1_Q_BITLEN 305 #endif 306 #ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN 307 #define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 308 #endif 309 #if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP192R1_CURVE_ORDER_BITLEN) 310 #undef CURVES_MAX_CURVE_ORDER_BIT_LEN 311 #define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP192R1_CURVE_ORDER_BITLEN 312 #endif 313 314 /* 315 * Compute and adapt max name and oid length 316 */ 317 #ifndef MAX_CURVE_OID_LEN 318 #define MAX_CURVE_OID_LEN 0 319 #endif 320 #ifndef MAX_CURVE_NAME_LEN 321 #define MAX_CURVE_NAME_LEN 0 322 #endif 323 #if (MAX_CURVE_OID_LEN < 1) 324 #undef MAX_CURVE_OID_LEN 325 #define MAX_CURVE_OID_LEN 1 326 #endif 327 #if (MAX_CURVE_NAME_LEN < 28) 328 #undef MAX_CURVE_NAME_LEN 329 #define MAX_CURVE_NAME_LEN 28 330 #endif 331 332 #endif /* __EC_PARAMS_BRAINPOOLP192R1_H__ */ 333 334 #endif /* WITH_CURVE_BRAINPOOLP192R1 */ 335