aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2021-04-26 14:55:46 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-04-26 14:55:46 +0200
commit03ab2a90bbd5970fabe50fcd510730e5e088b923 (patch)
treeb475efaeda2020b16a7dc9884ae2090b8e9f8d64
parent166363f47d74a73a0a3ad1ebbb5aae00752ab8f7 (diff)
downloadbusybox-w32-03ab2a90bbd5970fabe50fcd510730e5e088b923.tar.gz
busybox-w32-03ab2a90bbd5970fabe50fcd510730e5e088b923.tar.bz2
busybox-w32-03ab2a90bbd5970fabe50fcd510730e5e088b923.zip
tls: simplify array manipulations in sp_256_ecc_mulmod_10
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--networking/tls_sp_c32.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/networking/tls_sp_c32.c b/networking/tls_sp_c32.c
index 87d44d5e0..d3bb36a39 100644
--- a/networking/tls_sp_c32.c
+++ b/networking/tls_sp_c32.c
@@ -788,29 +788,25 @@ static void sp_256_proj_point_add_10(sp_point* r, sp_point* p, sp_point* q,
788 * r Resulting point. 788 * r Resulting point.
789 * g Point to multiply. 789 * g Point to multiply.
790 * k Scalar to multiply by. 790 * k Scalar to multiply by.
791 * map Indicates whether to convert result to affine.
791 */ 792 */
792static void sp_256_ecc_mulmod_10(sp_point* r, const sp_point* g, const sp_digit* k /*, int map*/) 793static void sp_256_ecc_mulmod_10(sp_point* r, const sp_point* g, const sp_digit* k /*, int map*/)
793{ 794{
794 enum { map = 1 }; /* we always convert result to affine coordinates */ 795 enum { map = 1 }; /* we always convert result to affine coordinates */
795 sp_point td[3]; 796 sp_point t[3];
796 sp_point* t[3];
797 sp_digit tmp[2 * 10 * 5]; 797 sp_digit tmp[2 * 10 * 5];
798 sp_digit n; 798 sp_digit n;
799 int i; 799 int i;
800 int c, y; 800 int c, y;
801 801
802 memset(td, 0, sizeof(td)); 802 memset(t, 0, sizeof(t));
803
804 t[0] = &td[0];
805 t[1] = &td[1];
806 t[2] = &td[2];
807 803
808 /* t[0] = {0, 0, 1} * norm */ 804 /* t[0] = {0, 0, 1} * norm */
809 t[0]->infinity = 1; 805 t[0].infinity = 1;
810 /* t[1] = {g->x, g->y, g->z} * norm */ 806 /* t[1] = {g->x, g->y, g->z} * norm */
811 sp_256_mod_mul_norm_10(t[1]->x, g->x); 807 sp_256_mod_mul_norm_10(t[1].x, g->x);
812 sp_256_mod_mul_norm_10(t[1]->y, g->y); 808 sp_256_mod_mul_norm_10(t[1].y, g->y);
813 sp_256_mod_mul_norm_10(t[1]->z, g->z); 809 sp_256_mod_mul_norm_10(t[1].z, g->z);
814 810
815 i = 9; 811 i = 9;
816 c = 22; 812 c = 22;
@@ -827,19 +823,21 @@ static void sp_256_ecc_mulmod_10(sp_point* r, const sp_point* g, const sp_digit*
827 y = (n >> 25) & 1; 823 y = (n >> 25) & 1;
828 n <<= 1; 824 n <<= 1;
829 825
830 sp_256_proj_point_add_10(t[y^1], t[0], t[1], tmp); 826//FIXME: what's "tmp" and why do we pass it down?
831 memcpy(t[2], t[y], sizeof(sp_point)); 827//is it scratch space for "sensitive" data, to be memset(0) after we are done?
832 sp_256_proj_point_dbl_10(t[2], t[2], tmp); 828 sp_256_proj_point_add_10(&t[y^1], &t[0], &t[1], tmp);
833 memcpy(t[y], t[2], sizeof(sp_point)); 829 memcpy(&t[2], &t[y], sizeof(sp_point));
830 sp_256_proj_point_dbl_10(&t[2], &t[2], tmp);
831 memcpy(&t[y], &t[2], sizeof(sp_point));
834 } 832 }
835 833
836 if (map) 834 if (map)
837 sp_256_map_10(r, t[0], tmp); 835 sp_256_map_10(r, &t[0], tmp);
838 else 836 else
839 memcpy(r, t[0], sizeof(sp_point)); 837 memcpy(r, &t[0], sizeof(sp_point));
840 838
841 memset(tmp, 0, sizeof(tmp)); //paranoia 839 memset(tmp, 0, sizeof(tmp)); //paranoia
842 memset(td, 0, sizeof(td)); //paranoia 840 memset(t, 0, sizeof(t)); //paranoia
843} 841}
844 842
845/* Multiply the base point of P256 by the scalar and return the result. 843/* Multiply the base point of P256 by the scalar and return the result.
@@ -847,6 +845,7 @@ static void sp_256_ecc_mulmod_10(sp_point* r, const sp_point* g, const sp_digit*
847 * 845 *
848 * r Resulting point. 846 * r Resulting point.
849 * k Scalar to multiply by. 847 * k Scalar to multiply by.
848 * map Indicates whether to convert result to affine.
850 */ 849 */
851static void sp_256_ecc_mulmod_base_10(sp_point* r, sp_digit* k /*, int map*/) 850static void sp_256_ecc_mulmod_base_10(sp_point* r, sp_digit* k /*, int map*/)
852{ 851{