diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2021-04-26 14:33:38 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-04-26 14:33:38 +0200 |
| commit | 074b33bf16b8dc047a94d615c24f40d2ba9ead46 (patch) | |
| tree | 02cefa26509caeda392b8b33df646ad439d1436a | |
| parent | 6b69ab68b47d0933f8b4a1d7ed8460274a736a5f (diff) | |
| download | busybox-w32-074b33bf16b8dc047a94d615c24f40d2ba9ead46.tar.gz busybox-w32-074b33bf16b8dc047a94d615c24f40d2ba9ead46.tar.bz2 busybox-w32-074b33bf16b8dc047a94d615c24f40d2ba9ead46.zip | |
tls: simplify sp_256_ecc_gen_k_10, cosmetic changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| -rw-r--r-- | networking/tls.h | 6 | ||||
| -rw-r--r-- | networking/tls_sp_c32.c | 184 |
2 files changed, 52 insertions, 138 deletions
diff --git a/networking/tls.h b/networking/tls.h index 154e9b2fb..215e92b02 100644 --- a/networking/tls.h +++ b/networking/tls.h | |||
| @@ -111,9 +111,9 @@ void xorbuf_aligned_AES_BLOCK_SIZE(void* buf, const void* mask) FAST_FUNC; | |||
| 111 | #define CURVE25519_KEYSIZE 32 | 111 | #define CURVE25519_KEYSIZE 32 |
| 112 | 112 | ||
| 113 | void curve_x25519_compute_pubkey_and_premaster( | 113 | void curve_x25519_compute_pubkey_and_premaster( |
| 114 | uint8_t *pubkey, uint8_t *premaster, | 114 | uint8_t *pubkey32, uint8_t *premaster32, |
| 115 | const uint8_t *peerkey32) FAST_FUNC; | 115 | const uint8_t *peerkey32) FAST_FUNC; |
| 116 | 116 | ||
| 117 | void curve_P256_compute_pubkey_and_premaster( | 117 | void curve_P256_compute_pubkey_and_premaster( |
| 118 | uint8_t *pubkey, uint8_t *premaster, | 118 | uint8_t *pubkey2x32, uint8_t *premaster32, |
| 119 | const uint8_t *peerkey32) FAST_FUNC; | 119 | const uint8_t *peerkey2x32) FAST_FUNC; |
diff --git a/networking/tls_sp_c32.c b/networking/tls_sp_c32.c index e7667de73..b4e14deac 100644 --- a/networking/tls_sp_c32.c +++ b/networking/tls_sp_c32.c | |||
| @@ -57,7 +57,6 @@ typedef int32_t sp_digit; | |||
| 57 | 57 | ||
| 58 | /* Implementation by Sean Parkinson. */ | 58 | /* Implementation by Sean Parkinson. */ |
| 59 | 59 | ||
| 60 | /* Point structure to use. */ | ||
| 61 | typedef struct sp_point { | 60 | typedef struct sp_point { |
| 62 | sp_digit x[2 * 10]; | 61 | sp_digit x[2 * 10]; |
| 63 | sp_digit y[2 * 10]; | 62 | sp_digit y[2 * 10]; |
| @@ -165,8 +164,6 @@ static void sp_256_point_from_bin2x32(sp_point* p, const uint8_t *bin2x32) | |||
| 165 | 164 | ||
| 166 | /* Compare a with b in constant time. | 165 | /* Compare a with b in constant time. |
| 167 | * | 166 | * |
| 168 | * a A single precision integer. | ||
| 169 | * b A single precision integer. | ||
| 170 | * return -ve, 0 or +ve if a is less than, equal to or greater than b | 167 | * return -ve, 0 or +ve if a is less than, equal to or greater than b |
| 171 | * respectively. | 168 | * respectively. |
| 172 | */ | 169 | */ |
| @@ -181,8 +178,6 @@ static sp_digit sp_256_cmp_10(const sp_digit* a, const sp_digit* b) | |||
| 181 | 178 | ||
| 182 | /* Compare two numbers to determine if they are equal. | 179 | /* Compare two numbers to determine if they are equal. |
| 183 | * | 180 | * |
| 184 | * a First number to compare. | ||
| 185 | * b Second number to compare. | ||
| 186 | * return 1 when equal and 0 otherwise. | 181 | * return 1 when equal and 0 otherwise. |
| 187 | */ | 182 | */ |
| 188 | static int sp_256_cmp_equal_10(const sp_digit* a, const sp_digit* b) | 183 | static int sp_256_cmp_equal_10(const sp_digit* a, const sp_digit* b) |
| @@ -198,10 +193,7 @@ static int sp_256_cmp_equal_10(const sp_digit* a, const sp_digit* b) | |||
| 198 | #endif | 193 | #endif |
| 199 | } | 194 | } |
| 200 | 195 | ||
| 201 | /* Normalize the values in each word to 26. | 196 | /* Normalize the values in each word to 26 bits. */ |
| 202 | * | ||
| 203 | * a Array of sp_digit to normalize. | ||
| 204 | */ | ||
| 205 | static void sp_256_norm_10(sp_digit* a) | 197 | static void sp_256_norm_10(sp_digit* a) |
| 206 | { | 198 | { |
| 207 | int i; | 199 | int i; |
| @@ -211,12 +203,7 @@ static void sp_256_norm_10(sp_digit* a) | |||
| 211 | } | 203 | } |
| 212 | } | 204 | } |
| 213 | 205 | ||
| 214 | /* Add b to a into r. (r = a + b) | 206 | /* Add b to a into r. (r = a + b) */ |
| 215 | * | ||
| 216 | * r A single precision integer. | ||
| 217 | * a A single precision integer. | ||
| 218 | * b A single precision integer. | ||
| 219 | */ | ||
| 220 | static void sp_256_add_10(sp_digit* r, const sp_digit* a, const sp_digit* b) | 207 | static void sp_256_add_10(sp_digit* r, const sp_digit* a, const sp_digit* b) |
| 221 | { | 208 | { |
| 222 | int i; | 209 | int i; |
| @@ -226,11 +213,6 @@ static void sp_256_add_10(sp_digit* r, const sp_digit* a, const sp_digit* b) | |||
| 226 | 213 | ||
| 227 | /* Conditionally add a and b using the mask m. | 214 | /* Conditionally add a and b using the mask m. |
| 228 | * m is -1 to add and 0 when not. | 215 | * m is -1 to add and 0 when not. |
| 229 | * | ||
| 230 | * r A single precision number representing conditional add result. | ||
| 231 | * a A single precision number to add with. | ||
| 232 | * b A single precision number to add. | ||
| 233 | * m Mask value to apply. | ||
| 234 | */ | 216 | */ |
| 235 | static void sp_256_cond_add_10(sp_digit* r, const sp_digit* a, | 217 | static void sp_256_cond_add_10(sp_digit* r, const sp_digit* a, |
| 236 | const sp_digit* b, const sp_digit m) | 218 | const sp_digit* b, const sp_digit m) |
| @@ -242,11 +224,6 @@ static void sp_256_cond_add_10(sp_digit* r, const sp_digit* a, | |||
| 242 | 224 | ||
| 243 | /* Conditionally subtract b from a using the mask m. | 225 | /* Conditionally subtract b from a using the mask m. |
| 244 | * m is -1 to subtract and 0 when not. | 226 | * m is -1 to subtract and 0 when not. |
| 245 | * | ||
| 246 | * r A single precision number representing condition subtract result. | ||
| 247 | * a A single precision number to subtract from. | ||
| 248 | * b A single precision number to subtract. | ||
| 249 | * m Mask value to apply. | ||
| 250 | */ | 227 | */ |
| 251 | static void sp_256_cond_sub_10(sp_digit* r, const sp_digit* a, | 228 | static void sp_256_cond_sub_10(sp_digit* r, const sp_digit* a, |
| 252 | const sp_digit* b, const sp_digit m) | 229 | const sp_digit* b, const sp_digit m) |
| @@ -256,23 +233,7 @@ static void sp_256_cond_sub_10(sp_digit* r, const sp_digit* a, | |||
| 256 | r[i] = a[i] - (b[i] & m); | 233 | r[i] = a[i] - (b[i] & m); |
| 257 | } | 234 | } |
| 258 | 235 | ||
| 259 | /* Add 1 to a. (a = a + 1) | 236 | /* Shift number left one bit. Bottom bit is lost. */ |
| 260 | * | ||
| 261 | * r A single precision integer. | ||
| 262 | * a A single precision integer. | ||
| 263 | */ | ||
| 264 | static void sp_256_add_one_10(sp_digit* a) | ||
| 265 | { | ||
| 266 | a[0]++; | ||
| 267 | sp_256_norm_10(a); | ||
| 268 | } | ||
| 269 | |||
| 270 | /* Shift number left one bit. | ||
| 271 | * Bottom bit is lost. | ||
| 272 | * | ||
| 273 | * r Result of shift. | ||
| 274 | * a Number to shift. | ||
| 275 | */ | ||
| 276 | static void sp_256_rshift1_10(sp_digit* r, sp_digit* a) | 237 | static void sp_256_rshift1_10(sp_digit* r, sp_digit* a) |
| 277 | { | 238 | { |
| 278 | int i; | 239 | int i; |
| @@ -381,14 +342,8 @@ static void sp_256_mod_mul_norm_10(sp_digit* r, const sp_digit* a) | |||
| 381 | r[9] = (sp_digit)(t[7] >> 10); | 342 | r[9] = (sp_digit)(t[7] >> 10); |
| 382 | } | 343 | } |
| 383 | 344 | ||
| 384 | /* Mul a by scalar b and add into r. (r += a * b) | 345 | /* Mul a by scalar b and add into r. (r += a * b) */ |
| 385 | * | 346 | static void sp_256_mul_add_10(sp_digit* r, const sp_digit* a, sp_digit b) |
| 386 | * r A single precision integer. | ||
| 387 | * a A single precision integer. | ||
| 388 | * b A scalar. | ||
| 389 | */ | ||
| 390 | static void sp_256_mul_add_10(sp_digit* r, const sp_digit* a, | ||
| 391 | const sp_digit b) | ||
| 392 | { | 347 | { |
| 393 | int64_t tb = b; | 348 | int64_t tb = b; |
| 394 | int64_t t = 0; | 349 | int64_t t = 0; |
| @@ -402,12 +357,7 @@ static void sp_256_mul_add_10(sp_digit* r, const sp_digit* a, | |||
| 402 | r[10] += t; | 357 | r[10] += t; |
| 403 | } | 358 | } |
| 404 | 359 | ||
| 405 | /* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m) | 360 | /* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m) */ |
| 406 | * | ||
| 407 | * r Result of division by 2. | ||
| 408 | * a Number to divide. | ||
| 409 | * m Modulus (prime). | ||
| 410 | */ | ||
| 411 | static void sp_256_div2_10(sp_digit* r, const sp_digit* a, const sp_digit* m) | 361 | static void sp_256_div2_10(sp_digit* r, const sp_digit* a, const sp_digit* m) |
| 412 | { | 362 | { |
| 413 | sp_256_cond_add_10(r, a, m, 0 - (a[0] & 1)); | 363 | sp_256_cond_add_10(r, a, m, 0 - (a[0] & 1)); |
| @@ -415,11 +365,7 @@ static void sp_256_div2_10(sp_digit* r, const sp_digit* a, const sp_digit* m) | |||
| 415 | sp_256_rshift1_10(r, r); | 365 | sp_256_rshift1_10(r, r); |
| 416 | } | 366 | } |
| 417 | 367 | ||
| 418 | /* Shift the result in the high 256 bits down to the bottom. | 368 | /* Shift the result in the high 256 bits down to the bottom. */ |
| 419 | * | ||
| 420 | * r A single precision number. | ||
| 421 | * a A single precision number. | ||
| 422 | */ | ||
| 423 | static void sp_256_mont_shift_10(sp_digit* r, const sp_digit* a) | 369 | static void sp_256_mont_shift_10(sp_digit* r, const sp_digit* a) |
| 424 | { | 370 | { |
| 425 | int i; | 371 | int i; |
| @@ -438,13 +384,7 @@ static void sp_256_mont_shift_10(sp_digit* r, const sp_digit* a) | |||
| 438 | memset(&r[10], 0, sizeof(*r) * 10); | 384 | memset(&r[10], 0, sizeof(*r) * 10); |
| 439 | } | 385 | } |
| 440 | 386 | ||
| 441 | /* Add two Montgomery form numbers (r = a + b % m). | 387 | /* Add two Montgomery form numbers (r = a + b % m) */ |
| 442 | * | ||
| 443 | * r Result of addition. | ||
| 444 | * a First number to add in Montogmery form. | ||
| 445 | * b Second number to add in Montogmery form. | ||
| 446 | * m Modulus (prime). | ||
| 447 | */ | ||
| 448 | static void sp_256_mont_add_10(sp_digit* r, const sp_digit* a, const sp_digit* b, | 388 | static void sp_256_mont_add_10(sp_digit* r, const sp_digit* a, const sp_digit* b, |
| 449 | const sp_digit* m) | 389 | const sp_digit* m) |
| 450 | { | 390 | { |
| @@ -454,12 +394,7 @@ static void sp_256_mont_add_10(sp_digit* r, const sp_digit* a, const sp_digit* b | |||
| 454 | sp_256_norm_10(r); | 394 | sp_256_norm_10(r); |
| 455 | } | 395 | } |
| 456 | 396 | ||
| 457 | /* Double a Montgomery form number (r = a + a % m). | 397 | /* Double a Montgomery form number (r = a + a % m) */ |
| 458 | * | ||
| 459 | * r Result of doubling. | ||
| 460 | * a Number to double in Montogmery form. | ||
| 461 | * m Modulus (prime). | ||
| 462 | */ | ||
| 463 | static void sp_256_mont_dbl_10(sp_digit* r, const sp_digit* a, const sp_digit* m) | 398 | static void sp_256_mont_dbl_10(sp_digit* r, const sp_digit* a, const sp_digit* m) |
| 464 | { | 399 | { |
| 465 | sp_256_add_10(r, a, a); | 400 | sp_256_add_10(r, a, a); |
| @@ -468,12 +403,7 @@ static void sp_256_mont_dbl_10(sp_digit* r, const sp_digit* a, const sp_digit* m | |||
| 468 | sp_256_norm_10(r); | 403 | sp_256_norm_10(r); |
| 469 | } | 404 | } |
| 470 | 405 | ||
| 471 | /* Triple a Montgomery form number (r = a + a + a % m). | 406 | /* Triple a Montgomery form number (r = a + a + a % m) */ |
| 472 | * | ||
| 473 | * r Result of Tripling. | ||
| 474 | * a Number to triple in Montogmery form. | ||
| 475 | * m Modulus (prime). | ||
| 476 | */ | ||
| 477 | static void sp_256_mont_tpl_10(sp_digit* r, const sp_digit* a, const sp_digit* m) | 407 | static void sp_256_mont_tpl_10(sp_digit* r, const sp_digit* a, const sp_digit* m) |
| 478 | { | 408 | { |
| 479 | sp_256_add_10(r, a, a); | 409 | sp_256_add_10(r, a, a); |
| @@ -486,27 +416,15 @@ static void sp_256_mont_tpl_10(sp_digit* r, const sp_digit* a, const sp_digit* m | |||
| 486 | sp_256_norm_10(r); | 416 | sp_256_norm_10(r); |
| 487 | } | 417 | } |
| 488 | 418 | ||
| 489 | /* Sub b from a into r. (r = a - b) | 419 | /* Sub b from a into r. (r = a - b) */ |
| 490 | * | 420 | static void sp_256_sub_10(sp_digit* r, const sp_digit* a, const sp_digit* b) |
| 491 | * r A single precision integer. | ||
| 492 | * a A single precision integer. | ||
| 493 | * b A single precision integer. | ||
| 494 | */ | ||
| 495 | static void sp_256_sub_10(sp_digit* r, const sp_digit* a, | ||
| 496 | const sp_digit* b) | ||
| 497 | { | 421 | { |
| 498 | int i; | 422 | int i; |
| 499 | for (i = 0; i < 10; i++) | 423 | for (i = 0; i < 10; i++) |
| 500 | r[i] = a[i] - b[i]; | 424 | r[i] = a[i] - b[i]; |
| 501 | } | 425 | } |
| 502 | 426 | ||
| 503 | /* Subtract two Montgomery form numbers (r = a - b % m). | 427 | /* Subtract two Montgomery form numbers (r = a - b % m) */ |
| 504 | * | ||
| 505 | * r Result of subtration. | ||
| 506 | * a Number to subtract from in Montogmery form. | ||
| 507 | * b Number to subtract with in Montogmery form. | ||
| 508 | * m Modulus (prime). | ||
| 509 | */ | ||
| 510 | static void sp_256_mont_sub_10(sp_digit* r, const sp_digit* a, const sp_digit* b, | 428 | static void sp_256_mont_sub_10(sp_digit* r, const sp_digit* a, const sp_digit* b, |
| 511 | const sp_digit* m) | 429 | const sp_digit* m) |
| 512 | { | 430 | { |
| @@ -554,12 +472,7 @@ static void sp_256_mont_reduce_10(sp_digit* a, const sp_digit* m, sp_digit mp) | |||
| 554 | sp_256_norm_10(a); | 472 | sp_256_norm_10(a); |
| 555 | } | 473 | } |
| 556 | 474 | ||
| 557 | /* Multiply a and b into r. (r = a * b) | 475 | /* Multiply a and b into r. (r = a * b) */ |
| 558 | * | ||
| 559 | * r A single precision integer. | ||
| 560 | * a A single precision integer. | ||
| 561 | * b A single precision integer. | ||
| 562 | */ | ||
| 563 | static void sp_256_mul_10(sp_digit* r, const sp_digit* a, const sp_digit* b) | 476 | static void sp_256_mul_10(sp_digit* r, const sp_digit* a, const sp_digit* b) |
| 564 | { | 477 | { |
| 565 | int i, j, k; | 478 | int i, j, k; |
| @@ -600,11 +513,7 @@ static void sp_256_mont_mul_10(sp_digit* r, const sp_digit* a, const sp_digit* b | |||
| 600 | sp_256_mont_reduce_10(r, m, mp); | 513 | sp_256_mont_reduce_10(r, m, mp); |
| 601 | } | 514 | } |
| 602 | 515 | ||
| 603 | /* Square a and put result in r. (r = a * a) | 516 | /* Square a and put result in r. (r = a * a) */ |
| 604 | * | ||
| 605 | * r A single precision integer. | ||
| 606 | * a A single precision integer. | ||
| 607 | */ | ||
| 608 | static void sp_256_sqr_10(sp_digit* r, const sp_digit* a) | 517 | static void sp_256_sqr_10(sp_digit* r, const sp_digit* a) |
| 609 | { | 518 | { |
| 610 | int i, j, k; | 519 | int i, j, k; |
| @@ -937,8 +846,8 @@ static void sp_256_ecc_mulmod_10(sp_point* r, const sp_point* g, const sp_digit* | |||
| 937 | else | 846 | else |
| 938 | memcpy(r, t[0], sizeof(sp_point)); | 847 | memcpy(r, t[0], sizeof(sp_point)); |
| 939 | 848 | ||
| 940 | memset(tmp, 0, sizeof(tmp)); | 849 | memset(tmp, 0, sizeof(tmp)); //paranoia |
| 941 | memset(td, 0, sizeof(td)); | 850 | memset(td, 0, sizeof(td)); //paranoia |
| 942 | } | 851 | } |
| 943 | 852 | ||
| 944 | /* Multiply the base point of P256 by the scalar and return the result. | 853 | /* Multiply the base point of P256 by the scalar and return the result. |
| @@ -956,20 +865,20 @@ static void sp_256_ecc_mulmod_base_10(sp_point* r, sp_digit* k /*, int map*/) | |||
| 956 | * The number is 0 padded to maximum size on output. | 865 | * The number is 0 padded to maximum size on output. |
| 957 | * | 866 | * |
| 958 | * priv Scalar to multiply the point by. | 867 | * priv Scalar to multiply the point by. |
| 959 | * peerkey2x32 Point to multiply. | 868 | * pub2x32 Point to multiply. |
| 960 | * out Buffer to hold X ordinate. | 869 | * out32 Buffer to hold X ordinate. |
| 961 | */ | 870 | */ |
| 962 | static void sp_ecc_secret_gen_256(sp_digit priv[10], const uint8_t *peerkey2x32, uint8_t* out32) | 871 | static void sp_ecc_secret_gen_256(sp_digit priv[10], const uint8_t *pub2x32, uint8_t* out32) |
| 963 | { | 872 | { |
| 964 | sp_point point[1]; | 873 | sp_point point[1]; |
| 965 | 874 | ||
| 966 | #if FIXED_PEER_PUBKEY | 875 | #if FIXED_PEER_PUBKEY |
| 967 | memset((void*)peerkey32, 0x55, 64); | 876 | memset((void*)pub2x32, 0x55, 64); |
| 968 | #endif | 877 | #endif |
| 969 | dump_hex("peerkey32 %s\n", peerkey2x32, 32); | 878 | dump_hex("peerkey %s\n", pub2x32, 32); /* in TLS, this is peer's public key */ |
| 970 | dump_hex(" %s\n", peerkey2x32 + 32, 32); | 879 | dump_hex(" %s\n", pub2x32 + 32, 32); |
| 971 | 880 | ||
| 972 | sp_256_point_from_bin2x32(point, peerkey2x32); | 881 | sp_256_point_from_bin2x32(point, pub2x32); |
| 973 | dump_hex("point->x %s\n", point->x, sizeof(point->x)); | 882 | dump_hex("point->x %s\n", point->x, sizeof(point->x)); |
| 974 | dump_hex("point->y %s\n", point->y, sizeof(point->y)); | 883 | dump_hex("point->y %s\n", point->y, sizeof(point->y)); |
| 975 | 884 | ||
| @@ -979,14 +888,18 @@ static void sp_ecc_secret_gen_256(sp_digit priv[10], const uint8_t *peerkey2x32, | |||
| 979 | dump_hex("out32: %s\n", out32, 32); | 888 | dump_hex("out32: %s\n", out32, 32); |
| 980 | } | 889 | } |
| 981 | 890 | ||
| 982 | /* Generates a scalar that is in the range 1..order-1. | 891 | /* Generates a scalar that is in the range 1..order-1. */ |
| 983 | * | 892 | #define SIMPLIFY 1 |
| 984 | * rng Random number generator. | 893 | /* Add 1 to a. (a = a + 1) */ |
| 985 | * k Scalar value. | 894 | #if !SIMPLIFY |
| 986 | */ | 895 | static void sp_256_add_one_10(sp_digit* a) |
| 896 | { | ||
| 897 | a[0]++; | ||
| 898 | sp_256_norm_10(a); | ||
| 899 | } | ||
| 900 | #endif | ||
| 987 | static void sp_256_ecc_gen_k_10(sp_digit k[10]) | 901 | static void sp_256_ecc_gen_k_10(sp_digit k[10]) |
| 988 | { | 902 | { |
| 989 | #define SIMPLIFY 1 | ||
| 990 | #if !SIMPLIFY | 903 | #if !SIMPLIFY |
| 991 | /* The order of the curve P256 minus 2. */ | 904 | /* The order of the curve P256 minus 2. */ |
| 992 | static const sp_digit p256_order2[10] = { | 905 | static const sp_digit p256_order2[10] = { |
| @@ -1007,7 +920,7 @@ static void sp_256_ecc_gen_k_10(sp_digit k[10]) | |||
| 1007 | break; | 920 | break; |
| 1008 | #else | 921 | #else |
| 1009 | /* non-loopy version (and not needing p256_order2[]): | 922 | /* non-loopy version (and not needing p256_order2[]): |
| 1010 | * if most-significant word seems that it can be larger | 923 | * if most-significant word seems that k can be larger |
| 1011 | * than p256_order2, fix it up: | 924 | * than p256_order2, fix it up: |
| 1012 | */ | 925 | */ |
| 1013 | if (k[9] >= 0x03fffff) | 926 | if (k[9] >= 0x03fffff) |
| @@ -1015,21 +928,22 @@ static void sp_256_ecc_gen_k_10(sp_digit k[10]) | |||
| 1015 | break; | 928 | break; |
| 1016 | #endif | 929 | #endif |
| 1017 | } | 930 | } |
| 931 | #if !SIMPLIFY | ||
| 1018 | sp_256_add_one_10(k); | 932 | sp_256_add_one_10(k); |
| 933 | #else | ||
| 934 | if (k[0] == 0) | ||
| 935 | k[0] = 1; | ||
| 936 | #endif | ||
| 1019 | #undef SIMPLIFY | 937 | #undef SIMPLIFY |
| 1020 | } | 938 | } |
| 1021 | 939 | ||
| 1022 | /* Makes a random EC key pair. | 940 | /* Makes a random EC key pair. */ |
| 1023 | * | 941 | static void sp_ecc_make_key_256(sp_digit privkey[10], uint8_t *pubkey) |
| 1024 | * priv Generated private value. | ||
| 1025 | * pubkey Generated public point. | ||
| 1026 | */ | ||
| 1027 | static void sp_ecc_make_key_256(sp_digit k[10], uint8_t *pubkey) | ||
| 1028 | { | 942 | { |
| 1029 | sp_point point[1]; | 943 | sp_point point[1]; |
| 1030 | 944 | ||
| 1031 | sp_256_ecc_gen_k_10(k); | 945 | sp_256_ecc_gen_k_10(privkey); |
| 1032 | sp_256_ecc_mulmod_base_10(point, k); | 946 | sp_256_ecc_mulmod_base_10(point, privkey); |
| 1033 | sp_256_to_bin(point->x, pubkey); | 947 | sp_256_to_bin(point->x, pubkey); |
| 1034 | sp_256_to_bin(point->y, pubkey + 32); | 948 | sp_256_to_bin(point->y, pubkey + 32); |
| 1035 | 949 | ||
| @@ -1037,16 +951,16 @@ static void sp_ecc_make_key_256(sp_digit k[10], uint8_t *pubkey) | |||
| 1037 | } | 951 | } |
| 1038 | 952 | ||
| 1039 | void FAST_FUNC curve_P256_compute_pubkey_and_premaster( | 953 | void FAST_FUNC curve_P256_compute_pubkey_and_premaster( |
| 1040 | uint8_t *pubkey, uint8_t *premaster32, | 954 | uint8_t *pubkey2x32, uint8_t *premaster32, |
| 1041 | const uint8_t *peerkey2x32) | 955 | const uint8_t *peerkey2x32) |
| 1042 | { | 956 | { |
| 1043 | sp_digit privkey[10]; | 957 | sp_digit privkey[10]; |
| 1044 | 958 | ||
| 1045 | sp_ecc_make_key_256(privkey, pubkey); | 959 | sp_ecc_make_key_256(privkey, pubkey2x32); |
| 1046 | dump_hex("pubkey: %s\n", pubkey, 32); | 960 | dump_hex("pubkey: %s\n", pubkey2x32, 32); |
| 1047 | dump_hex(" %s\n", pubkey + 32, 32); | 961 | dump_hex(" %s\n", pubkey2x32 + 32, 32); |
| 1048 | 962 | ||
| 1049 | /* Combine our privkey and peerkey32 to generate premaster */ | 963 | /* Combine our privkey and peer's public key to generate premaster */ |
| 1050 | sp_ecc_secret_gen_256(privkey, /*x,y:*/peerkey2x32, premaster32); | 964 | sp_ecc_secret_gen_256(privkey, /*x,y:*/peerkey2x32, premaster32); |
| 1051 | dump_hex("premaster: %s\n", premaster32, 32); | 965 | dump_hex("premaster: %s\n", premaster32, 32); |
| 1052 | } | 966 | } |
