aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2021-04-26 15:21:38 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-04-26 15:21:38 +0200
commit4d3a5c135cfeab5b462c03b8269a99682d71b4af (patch)
tree025acc4a33e16a0ce6579f334b75c44137c7fa1b
parent03ab2a90bbd5970fabe50fcd510730e5e088b923 (diff)
downloadbusybox-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.c58
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 */
627static void sp_256_proj_point_dbl_10(sp_point* r, sp_point* p, sp_digit* t) 627static 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.