1 #include <libecc/lib_ecc_config.h> 2 #ifdef WITH_CURVE_SECP192K1 3 4 #ifndef __EC_PARAMS_SECP192K1_H__ 5 #define __EC_PARAMS_SECP192K1_H__ 6 #include <libecc/curves/known/ec_params_external.h> 7 static const u8 secp192k1_p[] = { 8 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 9 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 10 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37, 11 }; 12 13 TO_EC_STR_PARAM(secp192k1_p); 14 15 #define CURVE_SECP192K1_P_BITLEN 192 16 static const u8 secp192k1_p_bitlen[] = { 17 0xc0, 18 }; 19 20 TO_EC_STR_PARAM(secp192k1_p_bitlen); 21 22 #if (WORD_BYTES == 8) /* 64-bit words */ 23 static const u8 secp192k1_r[] = { 24 0x01, 0x00, 0x00, 0x11, 0xc9, 25 }; 26 27 TO_EC_STR_PARAM(secp192k1_r); 28 29 static const u8 secp192k1_r_square[] = { 30 0x01, 0x00, 0x00, 0x23, 0x92, 0x01, 0x3c, 0x4f, 31 0xd1, 32 }; 33 34 TO_EC_STR_PARAM(secp192k1_r_square); 35 36 static const u8 secp192k1_mpinv[] = { 37 0xf2, 0x7a, 0xe5, 0x5b, 0x74, 0x46, 0xd8, 0x79, 38 }; 39 40 TO_EC_STR_PARAM(secp192k1_mpinv); 41 42 static const u8 secp192k1_p_shift[] = { 43 0x00, 44 }; 45 46 TO_EC_STR_PARAM(secp192k1_p_shift); 47 48 static const u8 secp192k1_p_normalized[] = { 49 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 50 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 51 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37, 52 }; 53 54 TO_EC_STR_PARAM(secp192k1_p_normalized); 55 56 static const u8 secp192k1_p_reciprocal[] = { 57 0x00, 58 }; 59 60 TO_EC_STR_PARAM(secp192k1_p_reciprocal); 61 62 #elif (WORD_BYTES == 4) /* 32-bit words */ 63 static const u8 secp192k1_r[] = { 64 0x01, 0x00, 0x00, 0x11, 0xc9, 65 }; 66 67 TO_EC_STR_PARAM(secp192k1_r); 68 69 static const u8 secp192k1_r_square[] = { 70 0x01, 0x00, 0x00, 0x23, 0x92, 0x01, 0x3c, 0x4f, 71 0xd1, 72 }; 73 74 TO_EC_STR_PARAM(secp192k1_r_square); 75 76 static const u8 secp192k1_mpinv[] = { 77 0x74, 0x46, 0xd8, 0x79, 78 }; 79 80 TO_EC_STR_PARAM(secp192k1_mpinv); 81 82 static const u8 secp192k1_p_shift[] = { 83 0x00, 84 }; 85 86 TO_EC_STR_PARAM(secp192k1_p_shift); 87 88 static const u8 secp192k1_p_normalized[] = { 89 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 90 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 91 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37, 92 }; 93 94 TO_EC_STR_PARAM(secp192k1_p_normalized); 95 96 static const u8 secp192k1_p_reciprocal[] = { 97 0x00, 98 }; 99 100 TO_EC_STR_PARAM(secp192k1_p_reciprocal); 101 102 #elif (WORD_BYTES == 2) /* 16-bit words */ 103 static const u8 secp192k1_r[] = { 104 0x01, 0x00, 0x00, 0x11, 0xc9, 105 }; 106 107 TO_EC_STR_PARAM(secp192k1_r); 108 109 static const u8 secp192k1_r_square[] = { 110 0x01, 0x00, 0x00, 0x23, 0x92, 0x01, 0x3c, 0x4f, 111 0xd1, 112 }; 113 114 TO_EC_STR_PARAM(secp192k1_r_square); 115 116 static const u8 secp192k1_mpinv[] = { 117 0xd8, 0x79, 118 }; 119 120 TO_EC_STR_PARAM(secp192k1_mpinv); 121 122 static const u8 secp192k1_p_shift[] = { 123 0x00, 124 }; 125 126 TO_EC_STR_PARAM(secp192k1_p_shift); 127 128 static const u8 secp192k1_p_normalized[] = { 129 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 130 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 131 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37, 132 }; 133 134 TO_EC_STR_PARAM(secp192k1_p_normalized); 135 136 static const u8 secp192k1_p_reciprocal[] = { 137 0x00, 138 }; 139 140 TO_EC_STR_PARAM(secp192k1_p_reciprocal); 141 142 #else /* unknown word size */ 143 #error "Unsupported word size" 144 #endif 145 146 static const u8 secp192k1_a[] = { 147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150 }; 151 152 TO_EC_STR_PARAM(secp192k1_a); 153 154 static const u8 secp192k1_b[] = { 155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 158 }; 159 160 TO_EC_STR_PARAM(secp192k1_b); 161 162 #define CURVE_SECP192K1_CURVE_ORDER_BITLEN 192 163 static const u8 secp192k1_curve_order[] = { 164 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 165 0xff, 0xff, 0xff, 0xfe, 0x26, 0xf2, 0xfc, 0x17, 166 0x0f, 0x69, 0x46, 0x6a, 0x74, 0xde, 0xfd, 0x8d, 167 }; 168 169 TO_EC_STR_PARAM(secp192k1_curve_order); 170 171 static const u8 secp192k1_gx[] = { 172 0xdb, 0x4f, 0xf1, 0x0e, 0xc0, 0x57, 0xe9, 0xae, 173 0x26, 0xb0, 0x7d, 0x02, 0x80, 0xb7, 0xf4, 0x34, 174 0x1d, 0xa5, 0xd1, 0xb1, 0xea, 0xe0, 0x6c, 0x7d, 175 }; 176 177 TO_EC_STR_PARAM(secp192k1_gx); 178 179 static const u8 secp192k1_gy[] = { 180 0x9b, 0x2f, 0x2f, 0x6d, 0x9c, 0x56, 0x28, 0xa7, 181 0x84, 0x41, 0x63, 0xd0, 0x15, 0xbe, 0x86, 0x34, 182 0x40, 0x82, 0xaa, 0x88, 0xd9, 0x5e, 0x2f, 0x9d, 183 }; 184 185 TO_EC_STR_PARAM(secp192k1_gy); 186 187 static const u8 secp192k1_gz[] = { 188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 191 }; 192 193 TO_EC_STR_PARAM(secp192k1_gz); 194 195 static const u8 secp192k1_gen_order[] = { 196 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 197 0xff, 0xff, 0xff, 0xfe, 0x26, 0xf2, 0xfc, 0x17, 198 0x0f, 0x69, 0x46, 0x6a, 0x74, 0xde, 0xfd, 0x8d, 199 }; 200 201 TO_EC_STR_PARAM(secp192k1_gen_order); 202 203 #define CURVE_SECP192K1_Q_BITLEN 192 204 static const u8 secp192k1_gen_order_bitlen[] = { 205 0xc0, 206 }; 207 208 TO_EC_STR_PARAM(secp192k1_gen_order_bitlen); 209 210 static const u8 secp192k1_cofactor[] = { 211 0x01, 212 }; 213 214 TO_EC_STR_PARAM(secp192k1_cofactor); 215 216 static const u8 secp192k1_alpha_montgomery[] = { 217 0x00, 218 }; 219 TO_EC_STR_PARAM_FIXED_SIZE(secp192k1_alpha_montgomery, 0); 220 221 static const u8 secp192k1_gamma_montgomery[] = { 222 0x00, 223 }; 224 TO_EC_STR_PARAM_FIXED_SIZE(secp192k1_gamma_montgomery, 0); 225 226 static const u8 secp192k1_alpha_edwards[] = { 227 0x00, 228 }; 229 TO_EC_STR_PARAM_FIXED_SIZE(secp192k1_alpha_edwards, 0); 230 231 static const u8 secp192k1_name[] = "SECP192K1"; 232 TO_EC_STR_PARAM(secp192k1_name); 233 234 static const u8 secp192k1_oid[] = "1.3.132.0.31"; 235 TO_EC_STR_PARAM(secp192k1_oid); 236 237 static const ec_str_params secp192k1_str_params = { 238 .p = &secp192k1_p_str_param, 239 .p_bitlen = &secp192k1_p_bitlen_str_param, 240 .r = &secp192k1_r_str_param, 241 .r_square = &secp192k1_r_square_str_param, 242 .mpinv = &secp192k1_mpinv_str_param, 243 .p_shift = &secp192k1_p_shift_str_param, 244 .p_normalized = &secp192k1_p_normalized_str_param, 245 .p_reciprocal = &secp192k1_p_reciprocal_str_param, 246 .a = &secp192k1_a_str_param, 247 .b = &secp192k1_b_str_param, 248 .curve_order = &secp192k1_curve_order_str_param, 249 .gx = &secp192k1_gx_str_param, 250 .gy = &secp192k1_gy_str_param, 251 .gz = &secp192k1_gz_str_param, 252 .gen_order = &secp192k1_gen_order_str_param, 253 .gen_order_bitlen = &secp192k1_gen_order_bitlen_str_param, 254 .cofactor = &secp192k1_cofactor_str_param, 255 .alpha_montgomery = &secp192k1_alpha_montgomery_str_param, 256 .gamma_montgomery = &secp192k1_gamma_montgomery_str_param, 257 .alpha_edwards = &secp192k1_alpha_edwards_str_param, 258 .oid = &secp192k1_oid_str_param, 259 .name = &secp192k1_name_str_param, 260 }; 261 262 /* 263 * Compute max bit length of all curves for p and q 264 */ 265 #ifndef CURVES_MAX_P_BIT_LEN 266 #define CURVES_MAX_P_BIT_LEN 0 267 #endif 268 #if (CURVES_MAX_P_BIT_LEN < CURVE_SECP192K1_P_BITLEN) 269 #undef CURVES_MAX_P_BIT_LEN 270 #define CURVES_MAX_P_BIT_LEN CURVE_SECP192K1_P_BITLEN 271 #endif 272 #ifndef CURVES_MAX_Q_BIT_LEN 273 #define CURVES_MAX_Q_BIT_LEN 0 274 #endif 275 #if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP192K1_Q_BITLEN) 276 #undef CURVES_MAX_Q_BIT_LEN 277 #define CURVES_MAX_Q_BIT_LEN CURVE_SECP192K1_Q_BITLEN 278 #endif 279 #ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN 280 #define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 281 #endif 282 #if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP192K1_CURVE_ORDER_BITLEN) 283 #undef CURVES_MAX_CURVE_ORDER_BIT_LEN 284 #define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP192K1_CURVE_ORDER_BITLEN 285 #endif 286 287 /* 288 * Compute and adapt max name and oid length 289 */ 290 #ifndef MAX_CURVE_OID_LEN 291 #define MAX_CURVE_OID_LEN 0 292 #endif 293 #ifndef MAX_CURVE_NAME_LEN 294 #define MAX_CURVE_NAME_LEN 0 295 #endif 296 #if (MAX_CURVE_OID_LEN < 1) 297 #undef MAX_CURVE_OID_LEN 298 #define MAX_CURVE_OID_LEN 1 299 #endif 300 #if (MAX_CURVE_NAME_LEN < 23) 301 #undef MAX_CURVE_NAME_LEN 302 #define MAX_CURVE_NAME_LEN 23 303 #endif 304 305 #endif /* __EC_PARAMS_SECP192K1_H__ */ 306 307 #endif /* WITH_CURVE_SECP192K1 */ 308