diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2021-04-26 15:21:38 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-04-26 15:21:38 +0200 |
commit | 4d3a5c135cfeab5b462c03b8269a99682d71b4af (patch) | |
tree | 025acc4a33e16a0ce6579f334b75c44137c7fa1b | |
parent | 03ab2a90bbd5970fabe50fcd510730e5e088b923 (diff) | |
download | busybox-w32-4d3a5c135cfeab5b462c03b8269a99682d71b4af.tar.gz busybox-w32-4d3a5c135cfeab5b462c03b8269a99682d71b4af.tar.bz2 busybox-w32-4d3a5c135cfeab5b462c03b8269a99682d71b4af.zip |
tls: simplify sp_256_proj_point_dbl_10
function old new delta
sp_256_proj_point_dbl_10 490 435 -55
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/tls_sp_c32.c | 58 |
1 files changed, 22 insertions, 36 deletions
diff --git a/networking/tls_sp_c32.c b/networking/tls_sp_c32.c index d3bb36a39..ffcb83dcc 100644 --- a/networking/tls_sp_c32.c +++ b/networking/tls_sp_c32.c | |||
@@ -626,68 +626,54 @@ static void sp_256_map_10(sp_point* r, sp_point* p, sp_digit* t) | |||
626 | */ | 626 | */ |
627 | static void sp_256_proj_point_dbl_10(sp_point* r, sp_point* p, sp_digit* t) | 627 | static void sp_256_proj_point_dbl_10(sp_point* r, sp_point* p, sp_digit* t) |
628 | { | 628 | { |
629 | sp_point *rp[2]; | ||
630 | sp_point tp; | 629 | sp_point tp; |
631 | sp_digit* t1 = t; | 630 | sp_digit* t1 = t; |
632 | sp_digit* t2 = t + 2*10; | 631 | sp_digit* t2 = t + 2*10; |
633 | sp_digit* x; | ||
634 | sp_digit* y; | ||
635 | sp_digit* z; | ||
636 | int i; | ||
637 | 632 | ||
638 | /* When infinity don't double point passed in - constant time. */ | 633 | /* Put point to double into result */ |
639 | rp[0] = r; | 634 | if (r != p) |
640 | rp[1] = &tp; | 635 | *r = *p; /* struct copy */ |
641 | x = rp[p->infinity]->x; | ||
642 | y = rp[p->infinity]->y; | ||
643 | z = rp[p->infinity]->z; | ||
644 | /* Put point to double into result - good for infinity. */ | ||
645 | if (r != p) { | ||
646 | for (i = 0; i < 10; i++) | ||
647 | r->x[i] = p->x[i]; | ||
648 | for (i = 0; i < 10; i++) | ||
649 | r->y[i] = p->y[i]; | ||
650 | for (i = 0; i < 10; i++) | ||
651 | r->z[i] = p->z[i]; | ||
652 | r->infinity = p->infinity; | ||
653 | } | ||
654 | 636 | ||
637 | if (r->infinity) { | ||
638 | /* If infinity, don't double (work on dummy value) */ | ||
639 | r = &tp; | ||
640 | } | ||
655 | /* T1 = Z * Z */ | 641 | /* T1 = Z * Z */ |
656 | sp_256_mont_sqr_10(t1, z, p256_mod, p256_mp_mod); | 642 | sp_256_mont_sqr_10(t1, r->z, p256_mod, p256_mp_mod); |
657 | /* Z = Y * Z */ | 643 | /* Z = Y * Z */ |
658 | sp_256_mont_mul_10(z, y, z, p256_mod, p256_mp_mod); | 644 | sp_256_mont_mul_10(r->z, r->y, r->z, p256_mod, p256_mp_mod); |
659 | /* Z = 2Z */ | 645 | /* Z = 2Z */ |
660 | sp_256_mont_dbl_10(z, z, p256_mod); | 646 | sp_256_mont_dbl_10(r->z, r->z, p256_mod); |
661 | /* T2 = X - T1 */ | 647 | /* T2 = X - T1 */ |
662 | sp_256_mont_sub_10(t2, x, t1, p256_mod); | 648 | sp_256_mont_sub_10(t2, r->x, t1, p256_mod); |
663 | /* T1 = X + T1 */ | 649 | /* T1 = X + T1 */ |
664 | sp_256_mont_add_10(t1, x, t1, p256_mod); | 650 | sp_256_mont_add_10(t1, r->x, t1, p256_mod); |
665 | /* T2 = T1 * T2 */ | 651 | /* T2 = T1 * T2 */ |
666 | sp_256_mont_mul_10(t2, t1, t2, p256_mod, p256_mp_mod); | 652 | sp_256_mont_mul_10(t2, t1, t2, p256_mod, p256_mp_mod); |
667 | /* T1 = 3T2 */ | 653 | /* T1 = 3T2 */ |
668 | sp_256_mont_tpl_10(t1, t2, p256_mod); | 654 | sp_256_mont_tpl_10(t1, t2, p256_mod); |
669 | /* Y = 2Y */ | 655 | /* Y = 2Y */ |
670 | sp_256_mont_dbl_10(y, y, p256_mod); | 656 | sp_256_mont_dbl_10(r->y, r->y, p256_mod); |
671 | /* Y = Y * Y */ | 657 | /* Y = Y * Y */ |
672 | sp_256_mont_sqr_10(y, y, p256_mod, p256_mp_mod); | 658 | sp_256_mont_sqr_10(r->y, r->y, p256_mod, p256_mp_mod); |
673 | /* T2 = Y * Y */ | 659 | /* T2 = Y * Y */ |
674 | sp_256_mont_sqr_10(t2, y, p256_mod, p256_mp_mod); | 660 | sp_256_mont_sqr_10(t2, r->y, p256_mod, p256_mp_mod); |
675 | /* T2 = T2/2 */ | 661 | /* T2 = T2/2 */ |
676 | sp_256_div2_10(t2, t2, p256_mod); | 662 | sp_256_div2_10(t2, t2, p256_mod); |
677 | /* Y = Y * X */ | 663 | /* Y = Y * X */ |
678 | sp_256_mont_mul_10(y, y, x, p256_mod, p256_mp_mod); | 664 | sp_256_mont_mul_10(r->y, r->y, r->x, p256_mod, p256_mp_mod); |
679 | /* X = T1 * T1 */ | 665 | /* X = T1 * T1 */ |
680 | sp_256_mont_mul_10(x, t1, t1, p256_mod, p256_mp_mod); | 666 | sp_256_mont_mul_10(r->x, t1, t1, p256_mod, p256_mp_mod); |
681 | /* X = X - Y */ | 667 | /* X = X - Y */ |
682 | sp_256_mont_sub_10(x, x, y, p256_mod); | 668 | sp_256_mont_sub_10(r->x, r->x, r->y, p256_mod); |
683 | /* X = X - Y */ | 669 | /* X = X - Y */ |
684 | sp_256_mont_sub_10(x, x, y, p256_mod); | 670 | sp_256_mont_sub_10(r->x, r->x, r->y, p256_mod); |
685 | /* Y = Y - X */ | 671 | /* Y = Y - X */ |
686 | sp_256_mont_sub_10(y, y, x, p256_mod); | 672 | sp_256_mont_sub_10(r->y, r->y, r->x, p256_mod); |
687 | /* Y = Y * T1 */ | 673 | /* Y = Y * T1 */ |
688 | sp_256_mont_mul_10(y, y, t1, p256_mod, p256_mp_mod); | 674 | sp_256_mont_mul_10(r->y, r->y, t1, p256_mod, p256_mp_mod); |
689 | /* Y = Y - T2 */ | 675 | /* Y = Y - T2 */ |
690 | sp_256_mont_sub_10(y, y, t2, p256_mod); | 676 | sp_256_mont_sub_10(r->y, r->y, t2, p256_mod); |
691 | } | 677 | } |
692 | 678 | ||
693 | /* Add two Montgomery form projective points. | 679 | /* Add two Montgomery form projective points. |