Merge pull request #4800 from SparkiDev/sp_c_smul

SP C: multiplication of two signed types with overflow is undefined in C
This commit is contained in:
David Garske
2022-01-31 14:29:18 -08:00
committed by GitHub
2 changed files with 82 additions and 82 deletions

View File

@ -1724,11 +1724,11 @@ static void sp_2048_mont_reduce_36(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_2048_norm_36(a + 36); sp_2048_norm_36(a + 36);
for (i=0; i<35; i++) { for (i=0; i<35; i++) {
mu = (a[i] * mp) & 0x1fffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1fffffff;
sp_2048_mul_add_36(a+i, m, mu); sp_2048_mul_add_36(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
} }
mu = (a[i] * mp) & 0x1ffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1ffL;
sp_2048_mul_add_36(a+i, m, mu); sp_2048_mul_add_36(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
a[i] &= 0x1fffffff; a[i] &= 0x1fffffff;
@ -2782,11 +2782,11 @@ static void sp_2048_mont_reduce_72(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<70; i++) { for (i=0; i<70; i++) {
mu = (a[i] * mp) & 0x1fffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1fffffff;
sp_2048_mul_add_72(a+i, m, mu); sp_2048_mul_add_72(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
} }
mu = (a[i] * mp) & 0x3ffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x3ffffL;
sp_2048_mul_add_72(a+i, m, mu); sp_2048_mul_add_72(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
a[i] &= 0x1fffffff; a[i] &= 0x1fffffff;
@ -2804,11 +2804,11 @@ static void sp_2048_mont_reduce_72(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<70; i++) { for (i=0; i<70; i++) {
mu = (a[i] * mp) & 0x1fffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1fffffff;
sp_2048_mul_add_72(a+i, m, mu); sp_2048_mul_add_72(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
} }
mu = (a[i] * mp) & 0x3ffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x3ffffL;
sp_2048_mul_add_72(a+i, m, mu); sp_2048_mul_add_72(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
a[i] &= 0x1fffffff; a[i] &= 0x1fffffff;
@ -5451,11 +5451,11 @@ static void sp_3072_mont_reduce_53(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_3072_norm_53(a + 53); sp_3072_norm_53(a + 53);
for (i=0; i<52; i++) { for (i=0; i<52; i++) {
mu = (a[i] * mp) & 0x1fffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1fffffff;
sp_3072_mul_add_53(a+i, m, mu); sp_3072_mul_add_53(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
} }
mu = (a[i] * mp) & 0xfffffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xfffffffL;
sp_3072_mul_add_53(a+i, m, mu); sp_3072_mul_add_53(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
a[i] &= 0x1fffffff; a[i] &= 0x1fffffff;
@ -6450,11 +6450,11 @@ static void sp_3072_mont_reduce_106(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<105; i++) { for (i=0; i<105; i++) {
mu = (a[i] * mp) & 0x1fffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1fffffff;
sp_3072_mul_add_106(a+i, m, mu); sp_3072_mul_add_106(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
} }
mu = (a[i] * mp) & 0x7ffffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x7ffffffL;
sp_3072_mul_add_106(a+i, m, mu); sp_3072_mul_add_106(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
a[i] &= 0x1fffffff; a[i] &= 0x1fffffff;
@ -6472,11 +6472,11 @@ static void sp_3072_mont_reduce_106(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<105; i++) { for (i=0; i<105; i++) {
mu = (a[i] * mp) & 0x1fffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1fffffff;
sp_3072_mul_add_106(a+i, m, mu); sp_3072_mul_add_106(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
} }
mu = (a[i] * mp) & 0x7ffffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x7ffffffL;
sp_3072_mul_add_106(a+i, m, mu); sp_3072_mul_add_106(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
a[i] &= 0x1fffffff; a[i] &= 0x1fffffff;
@ -9691,11 +9691,11 @@ static void sp_3072_mont_reduce_56(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_3072_norm_56(a + 55); sp_3072_norm_56(a + 55);
for (i=0; i<54; i++) { for (i=0; i<54; i++) {
mu = (a[i] * mp) & 0xfffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xfffffff;
sp_3072_mul_add_56(a+i, m, mu); sp_3072_mul_add_56(a+i, m, mu);
a[i+1] += a[i] >> 28; a[i+1] += a[i] >> 28;
} }
mu = (a[i] * mp) & 0xffffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xffffffL;
sp_3072_mul_add_56(a+i, m, mu); sp_3072_mul_add_56(a+i, m, mu);
a[i+1] += a[i] >> 28; a[i+1] += a[i] >> 28;
a[i] &= 0xfffffff; a[i] &= 0xfffffff;
@ -10617,11 +10617,11 @@ static void sp_3072_mont_reduce_112(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<109; i++) { for (i=0; i<109; i++) {
mu = (a[i] * mp) & 0xfffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xfffffff;
sp_3072_mul_add_112(a+i, m, mu); sp_3072_mul_add_112(a+i, m, mu);
a[i+1] += a[i] >> 28; a[i+1] += a[i] >> 28;
} }
mu = (a[i] * mp) & 0xfffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xfffffL;
sp_3072_mul_add_112(a+i, m, mu); sp_3072_mul_add_112(a+i, m, mu);
a[i+1] += a[i] >> 28; a[i+1] += a[i] >> 28;
a[i] &= 0xfffffff; a[i] &= 0xfffffff;
@ -10639,11 +10639,11 @@ static void sp_3072_mont_reduce_112(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<109; i++) { for (i=0; i<109; i++) {
mu = (a[i] * mp) & 0xfffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xfffffff;
sp_3072_mul_add_112(a+i, m, mu); sp_3072_mul_add_112(a+i, m, mu);
a[i+1] += a[i] >> 28; a[i+1] += a[i] >> 28;
} }
mu = (a[i] * mp) & 0xfffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xfffffL;
sp_3072_mul_add_112(a+i, m, mu); sp_3072_mul_add_112(a+i, m, mu);
a[i+1] += a[i] >> 28; a[i+1] += a[i] >> 28;
a[i] &= 0xfffffff; a[i] &= 0xfffffff;
@ -13267,11 +13267,11 @@ static void sp_4096_mont_reduce_71(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_4096_norm_71(a + 71); sp_4096_norm_71(a + 71);
for (i=0; i<70; i++) { for (i=0; i<70; i++) {
mu = (a[i] * mp) & 0x1fffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1fffffff;
sp_4096_mul_add_71(a+i, m, mu); sp_4096_mul_add_71(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
} }
mu = (a[i] * mp) & 0x3ffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x3ffffL;
sp_4096_mul_add_71(a+i, m, mu); sp_4096_mul_add_71(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
a[i] &= 0x1fffffff; a[i] &= 0x1fffffff;
@ -14267,11 +14267,11 @@ static void sp_4096_mont_reduce_142(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<141; i++) { for (i=0; i<141; i++) {
mu = (a[i] * mp) & 0x1fffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1fffffff;
sp_4096_mul_add_142(a+i, m, mu); sp_4096_mul_add_142(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
} }
mu = (a[i] * mp) & 0x7fL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x7fL;
sp_4096_mul_add_142(a+i, m, mu); sp_4096_mul_add_142(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
a[i] &= 0x1fffffff; a[i] &= 0x1fffffff;
@ -14289,11 +14289,11 @@ static void sp_4096_mont_reduce_142(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<141; i++) { for (i=0; i<141; i++) {
mu = (a[i] * mp) & 0x1fffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1fffffff;
sp_4096_mul_add_142(a+i, m, mu); sp_4096_mul_add_142(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
} }
mu = (a[i] * mp) & 0x7fL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x7fL;
sp_4096_mul_add_142(a+i, m, mu); sp_4096_mul_add_142(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
a[i] &= 0x1fffffff; a[i] &= 0x1fffffff;
@ -17390,11 +17390,11 @@ static void sp_4096_mont_reduce_81(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_4096_norm_81(a + 79); sp_4096_norm_81(a + 79);
for (i=0; i<78; i++) { for (i=0; i<78; i++) {
mu = (a[i] * mp) & 0x3ffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x3ffffff;
sp_4096_mul_add_81(a+i, m, mu); sp_4096_mul_add_81(a+i, m, mu);
a[i+1] += a[i] >> 26; a[i+1] += a[i] >> 26;
} }
mu = (a[i] * mp) & 0xfffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xfffffL;
sp_4096_mul_add_81(a+i, m, mu); sp_4096_mul_add_81(a+i, m, mu);
a[i+1] += a[i] >> 26; a[i+1] += a[i] >> 26;
a[i] &= 0x3ffffff; a[i] &= 0x3ffffff;
@ -18278,11 +18278,11 @@ static void sp_4096_mont_reduce_162(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<157; i++) { for (i=0; i<157; i++) {
mu = (a[i] * mp) & 0x3ffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x3ffffff;
sp_4096_mul_add_162(a+i, m, mu); sp_4096_mul_add_162(a+i, m, mu);
a[i+1] += a[i] >> 26; a[i+1] += a[i] >> 26;
} }
mu = (a[i] * mp) & 0x3fffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x3fffL;
sp_4096_mul_add_162(a+i, m, mu); sp_4096_mul_add_162(a+i, m, mu);
a[i+1] += a[i] >> 26; a[i+1] += a[i] >> 26;
a[i] &= 0x3ffffff; a[i] &= 0x3ffffff;
@ -18300,11 +18300,11 @@ static void sp_4096_mont_reduce_162(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<157; i++) { for (i=0; i<157; i++) {
mu = (a[i] * mp) & 0x3ffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x3ffffff;
sp_4096_mul_add_162(a+i, m, mu); sp_4096_mul_add_162(a+i, m, mu);
a[i+1] += a[i] >> 26; a[i+1] += a[i] >> 26;
} }
mu = (a[i] * mp) & 0x3fffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x3fffL;
sp_4096_mul_add_162(a+i, m, mu); sp_4096_mul_add_162(a+i, m, mu);
a[i+1] += a[i] >> 26; a[i+1] += a[i] >> 26;
a[i] &= 0x3ffffff; a[i] &= 0x3ffffff;
@ -21175,11 +21175,11 @@ static void sp_256_mont_reduce_order_9(sp_digit* a, const sp_digit* m, sp_digit
sp_256_norm_9(a + 9); sp_256_norm_9(a + 9);
for (i=0; i<8; i++) { for (i=0; i<8; i++) {
mu = (a[i] * mp) & 0x1fffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1fffffff;
sp_256_mul_add_9(a+i, m, mu); sp_256_mul_add_9(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
} }
mu = (a[i] * mp) & 0xffffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xffffffL;
sp_256_mul_add_9(a+i, m, mu); sp_256_mul_add_9(a+i, m, mu);
a[i+1] += a[i] >> 29; a[i+1] += a[i] >> 29;
a[i] &= 0x1fffffff; a[i] &= 0x1fffffff;
@ -28373,11 +28373,11 @@ static void sp_384_mont_reduce_order_15(sp_digit* a, const sp_digit* m, sp_digit
sp_384_norm_15(a + 15); sp_384_norm_15(a + 15);
for (i=0; i<14; i++) { for (i=0; i<14; i++) {
mu = (a[i] * mp) & 0x3ffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x3ffffff;
sp_384_mul_add_15(a+i, m, mu); sp_384_mul_add_15(a+i, m, mu);
a[i+1] += a[i] >> 26; a[i+1] += a[i] >> 26;
} }
mu = (a[i] * mp) & 0xfffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xfffffL;
sp_384_mul_add_15(a+i, m, mu); sp_384_mul_add_15(a+i, m, mu);
a[i+1] += a[i] >> 26; a[i+1] += a[i] >> 26;
a[i] &= 0x3ffffff; a[i] &= 0x3ffffff;
@ -36669,11 +36669,11 @@ static void sp_1024_mont_reduce_42(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<40; i++) { for (i=0; i<40; i++) {
mu = (a[i] * mp) & 0x1ffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1ffffff;
sp_1024_mul_add_42(a+i, m, mu); sp_1024_mul_add_42(a+i, m, mu);
a[i+1] += a[i] >> 25; a[i+1] += a[i] >> 25;
} }
mu = (a[i] * mp) & 0xffffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xffffffL;
sp_1024_mul_add_42(a+i, m, mu); sp_1024_mul_add_42(a+i, m, mu);
a[i+1] += a[i] >> 25; a[i+1] += a[i] >> 25;
a[i] &= 0x1ffffff; a[i] &= 0x1ffffff;
@ -36691,11 +36691,11 @@ static void sp_1024_mont_reduce_42(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<40; i++) { for (i=0; i<40; i++) {
mu = (a[i] * mp) & 0x1ffffff; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0x1ffffff;
sp_1024_mul_add_42(a+i, m, mu); sp_1024_mul_add_42(a+i, m, mu);
a[i+1] += a[i] >> 25; a[i+1] += a[i] >> 25;
} }
mu = (a[i] * mp) & 0xffffffL; mu = ((sp_uint32)a[i] * (sp_uint32)mp) & 0xffffffL;
sp_1024_mul_add_42(a+i, m, mu); sp_1024_mul_add_42(a+i, m, mu);
a[i+1] += a[i] >> 25; a[i+1] += a[i] >> 25;
a[i] &= 0x1ffffff; a[i] &= 0x1ffffff;

View File

@ -586,11 +586,11 @@ static void sp_2048_mont_reduce_17(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_2048_norm_17(a + 17); sp_2048_norm_17(a + 17);
for (i=0; i<16; i++) { for (i=0; i<16; i++) {
mu = (a[i] * mp) & 0x1fffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1fffffffffffffffL;
sp_2048_mul_add_17(a+i, m, mu); sp_2048_mul_add_17(a+i, m, mu);
a[i+1] += a[i] >> 61; a[i+1] += a[i] >> 61;
} }
mu = (a[i] * mp) & 0xffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0xffffffffffffL;
sp_2048_mul_add_17(a+i, m, mu); sp_2048_mul_add_17(a+i, m, mu);
a[i+1] += a[i] >> 61; a[i+1] += a[i] >> 61;
a[i] &= 0x1fffffffffffffffL; a[i] &= 0x1fffffffffffffffL;
@ -1699,11 +1699,11 @@ static void sp_2048_mont_reduce_34(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<33; i++) { for (i=0; i<33; i++) {
mu = (a[i] * mp) & 0x1fffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1fffffffffffffffL;
sp_2048_mul_add_34(a+i, m, mu); sp_2048_mul_add_34(a+i, m, mu);
a[i+1] += a[i] >> 61; a[i+1] += a[i] >> 61;
} }
mu = (a[i] * mp) & 0x7ffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7ffffffffL;
sp_2048_mul_add_34(a+i, m, mu); sp_2048_mul_add_34(a+i, m, mu);
a[i+1] += a[i] >> 61; a[i+1] += a[i] >> 61;
a[i] &= 0x1fffffffffffffffL; a[i] &= 0x1fffffffffffffffL;
@ -1721,11 +1721,11 @@ static void sp_2048_mont_reduce_34(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<33; i++) { for (i=0; i<33; i++) {
mu = (a[i] * mp) & 0x1fffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1fffffffffffffffL;
sp_2048_mul_add_34(a+i, m, mu); sp_2048_mul_add_34(a+i, m, mu);
a[i+1] += a[i] >> 61; a[i+1] += a[i] >> 61;
} }
mu = (a[i] * mp) & 0x7ffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7ffffffffL;
sp_2048_mul_add_34(a+i, m, mu); sp_2048_mul_add_34(a+i, m, mu);
a[i+1] += a[i] >> 61; a[i+1] += a[i] >> 61;
a[i] &= 0x1fffffffffffffffL; a[i] &= 0x1fffffffffffffffL;
@ -4581,11 +4581,11 @@ static void sp_2048_mont_reduce_18(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_2048_norm_18(a + 18); sp_2048_norm_18(a + 18);
for (i=0; i<17; i++) { for (i=0; i<17; i++) {
mu = (a[i] * mp) & 0x1ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1ffffffffffffffL;
sp_2048_mul_add_18(a+i, m, mu); sp_2048_mul_add_18(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
} }
mu = (a[i] * mp) & 0x7fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7fffffffffffffL;
sp_2048_mul_add_18(a+i, m, mu); sp_2048_mul_add_18(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
a[i] &= 0x1ffffffffffffffL; a[i] &= 0x1ffffffffffffffL;
@ -5470,11 +5470,11 @@ static void sp_2048_mont_reduce_36(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<35; i++) { for (i=0; i<35; i++) {
mu = (a[i] * mp) & 0x1ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1ffffffffffffffL;
sp_2048_mul_add_36(a+i, m, mu); sp_2048_mul_add_36(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
} }
mu = (a[i] * mp) & 0x1fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1fffffffffffffL;
sp_2048_mul_add_36(a+i, m, mu); sp_2048_mul_add_36(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
a[i] &= 0x1ffffffffffffffL; a[i] &= 0x1ffffffffffffffL;
@ -5492,11 +5492,11 @@ static void sp_2048_mont_reduce_36(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<35; i++) { for (i=0; i<35; i++) {
mu = (a[i] * mp) & 0x1ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1ffffffffffffffL;
sp_2048_mul_add_36(a+i, m, mu); sp_2048_mul_add_36(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
} }
mu = (a[i] * mp) & 0x1fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1fffffffffffffL;
sp_2048_mul_add_36(a+i, m, mu); sp_2048_mul_add_36(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
a[i] &= 0x1ffffffffffffffL; a[i] &= 0x1ffffffffffffffL;
@ -7904,11 +7904,11 @@ static void sp_3072_mont_reduce_26(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_3072_norm_26(a + 26); sp_3072_norm_26(a + 26);
for (i=0; i<25; i++) { for (i=0; i<25; i++) {
mu = (a[i] * mp) & 0xfffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0xfffffffffffffffL;
sp_3072_mul_add_26(a+i, m, mu); sp_3072_mul_add_26(a+i, m, mu);
a[i+1] += a[i] >> 60; a[i+1] += a[i] >> 60;
} }
mu = (a[i] * mp) & 0xfffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0xfffffffffL;
sp_3072_mul_add_26(a+i, m, mu); sp_3072_mul_add_26(a+i, m, mu);
a[i+1] += a[i] >> 60; a[i+1] += a[i] >> 60;
a[i] &= 0xfffffffffffffffL; a[i] &= 0xfffffffffffffffL;
@ -8896,11 +8896,11 @@ static void sp_3072_mont_reduce_52(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<51; i++) { for (i=0; i<51; i++) {
mu = (a[i] * mp) & 0xfffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0xfffffffffffffffL;
sp_3072_mul_add_52(a+i, m, mu); sp_3072_mul_add_52(a+i, m, mu);
a[i+1] += a[i] >> 60; a[i+1] += a[i] >> 60;
} }
mu = (a[i] * mp) & 0xfffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0xfffL;
sp_3072_mul_add_52(a+i, m, mu); sp_3072_mul_add_52(a+i, m, mu);
a[i+1] += a[i] >> 60; a[i+1] += a[i] >> 60;
a[i] &= 0xfffffffffffffffL; a[i] &= 0xfffffffffffffffL;
@ -8918,11 +8918,11 @@ static void sp_3072_mont_reduce_52(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<51; i++) { for (i=0; i<51; i++) {
mu = (a[i] * mp) & 0xfffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0xfffffffffffffffL;
sp_3072_mul_add_52(a+i, m, mu); sp_3072_mul_add_52(a+i, m, mu);
a[i+1] += a[i] >> 60; a[i+1] += a[i] >> 60;
} }
mu = (a[i] * mp) & 0xfffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0xfffL;
sp_3072_mul_add_52(a+i, m, mu); sp_3072_mul_add_52(a+i, m, mu);
a[i+1] += a[i] >> 60; a[i+1] += a[i] >> 60;
a[i] &= 0xfffffffffffffffL; a[i] &= 0xfffffffffffffffL;
@ -11823,11 +11823,11 @@ static void sp_3072_mont_reduce_27(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_3072_norm_27(a + 27); sp_3072_norm_27(a + 27);
for (i=0; i<26; i++) { for (i=0; i<26; i++) {
mu = (a[i] * mp) & 0x1ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1ffffffffffffffL;
sp_3072_mul_add_27(a+i, m, mu); sp_3072_mul_add_27(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
} }
mu = (a[i] * mp) & 0x3fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x3fffffffffffffL;
sp_3072_mul_add_27(a+i, m, mu); sp_3072_mul_add_27(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
a[i] &= 0x1ffffffffffffffL; a[i] &= 0x1ffffffffffffffL;
@ -12724,11 +12724,11 @@ static void sp_3072_mont_reduce_54(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<53; i++) { for (i=0; i<53; i++) {
mu = (a[i] * mp) & 0x1ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1ffffffffffffffL;
sp_3072_mul_add_54(a+i, m, mu); sp_3072_mul_add_54(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
} }
mu = (a[i] * mp) & 0x7ffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7ffffffffffffL;
sp_3072_mul_add_54(a+i, m, mu); sp_3072_mul_add_54(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
a[i] &= 0x1ffffffffffffffL; a[i] &= 0x1ffffffffffffffL;
@ -12746,11 +12746,11 @@ static void sp_3072_mont_reduce_54(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<53; i++) { for (i=0; i<53; i++) {
mu = (a[i] * mp) & 0x1ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1ffffffffffffffL;
sp_3072_mul_add_54(a+i, m, mu); sp_3072_mul_add_54(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
} }
mu = (a[i] * mp) & 0x7ffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7ffffffffffffL;
sp_3072_mul_add_54(a+i, m, mu); sp_3072_mul_add_54(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
a[i] &= 0x1ffffffffffffffL; a[i] &= 0x1ffffffffffffffL;
@ -15204,11 +15204,11 @@ static void sp_4096_mont_reduce_35(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_4096_norm_35(a + 35); sp_4096_norm_35(a + 35);
for (i=0; i<34; i++) { for (i=0; i<34; i++) {
mu = (a[i] * mp) & 0x7ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7ffffffffffffffL;
sp_4096_mul_add_35(a+i, m, mu); sp_4096_mul_add_35(a+i, m, mu);
a[i+1] += a[i] >> 59; a[i+1] += a[i] >> 59;
} }
mu = (a[i] * mp) & 0x3ffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x3ffffffffffL;
sp_4096_mul_add_35(a+i, m, mu); sp_4096_mul_add_35(a+i, m, mu);
a[i+1] += a[i] >> 59; a[i+1] += a[i] >> 59;
a[i] &= 0x7ffffffffffffffL; a[i] &= 0x7ffffffffffffffL;
@ -16151,11 +16151,11 @@ static void sp_4096_mont_reduce_70(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<69; i++) { for (i=0; i<69; i++) {
mu = (a[i] * mp) & 0x7ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7ffffffffffffffL;
sp_4096_mul_add_70(a+i, m, mu); sp_4096_mul_add_70(a+i, m, mu);
a[i+1] += a[i] >> 59; a[i+1] += a[i] >> 59;
} }
mu = (a[i] * mp) & 0x1ffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1ffffffL;
sp_4096_mul_add_70(a+i, m, mu); sp_4096_mul_add_70(a+i, m, mu);
a[i+1] += a[i] >> 59; a[i+1] += a[i] >> 59;
a[i] &= 0x7ffffffffffffffL; a[i] &= 0x7ffffffffffffffL;
@ -16173,11 +16173,11 @@ static void sp_4096_mont_reduce_70(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<69; i++) { for (i=0; i<69; i++) {
mu = (a[i] * mp) & 0x7ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7ffffffffffffffL;
sp_4096_mul_add_70(a+i, m, mu); sp_4096_mul_add_70(a+i, m, mu);
a[i+1] += a[i] >> 59; a[i+1] += a[i] >> 59;
} }
mu = (a[i] * mp) & 0x1ffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1ffffffL;
sp_4096_mul_add_70(a+i, m, mu); sp_4096_mul_add_70(a+i, m, mu);
a[i+1] += a[i] >> 59; a[i+1] += a[i] >> 59;
a[i] &= 0x7ffffffffffffffL; a[i] &= 0x7ffffffffffffffL;
@ -19085,11 +19085,11 @@ static void sp_4096_mont_reduce_39(sp_digit* a, const sp_digit* m, sp_digit mp)
sp_4096_norm_39(a + 39); sp_4096_norm_39(a + 39);
for (i=0; i<38; i++) { for (i=0; i<38; i++) {
mu = (a[i] * mp) & 0x1fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1fffffffffffffL;
sp_4096_mul_add_39(a+i, m, mu); sp_4096_mul_add_39(a+i, m, mu);
a[i+1] += a[i] >> 53; a[i+1] += a[i] >> 53;
} }
mu = (a[i] * mp) & 0x3ffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x3ffffffffL;
sp_4096_mul_add_39(a+i, m, mu); sp_4096_mul_add_39(a+i, m, mu);
a[i+1] += a[i] >> 53; a[i+1] += a[i] >> 53;
a[i] &= 0x1fffffffffffffL; a[i] &= 0x1fffffffffffffL;
@ -19963,11 +19963,11 @@ static void sp_4096_mont_reduce_78(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<77; i++) { for (i=0; i<77; i++) {
mu = (a[i] * mp) & 0x1fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1fffffffffffffL;
sp_4096_mul_add_78(a+i, m, mu); sp_4096_mul_add_78(a+i, m, mu);
a[i+1] += a[i] >> 53; a[i+1] += a[i] >> 53;
} }
mu = (a[i] * mp) & 0x7fffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7fffL;
sp_4096_mul_add_78(a+i, m, mu); sp_4096_mul_add_78(a+i, m, mu);
a[i+1] += a[i] >> 53; a[i+1] += a[i] >> 53;
a[i] &= 0x1fffffffffffffL; a[i] &= 0x1fffffffffffffL;
@ -19985,11 +19985,11 @@ static void sp_4096_mont_reduce_78(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<77; i++) { for (i=0; i<77; i++) {
mu = (a[i] * mp) & 0x1fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1fffffffffffffL;
sp_4096_mul_add_78(a+i, m, mu); sp_4096_mul_add_78(a+i, m, mu);
a[i+1] += a[i] >> 53; a[i+1] += a[i] >> 53;
} }
mu = (a[i] * mp) & 0x7fffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7fffL;
sp_4096_mul_add_78(a+i, m, mu); sp_4096_mul_add_78(a+i, m, mu);
a[i+1] += a[i] >> 53; a[i+1] += a[i] >> 53;
a[i] &= 0x1fffffffffffffL; a[i] &= 0x1fffffffffffffL;
@ -22533,11 +22533,11 @@ static void sp_256_mont_reduce_order_5(sp_digit* a, const sp_digit* m, sp_digit
sp_256_norm_5(a + 5); sp_256_norm_5(a + 5);
for (i=0; i<4; i++) { for (i=0; i<4; i++) {
mu = (a[i] * mp) & 0xfffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0xfffffffffffffL;
sp_256_mul_add_5(a+i, m, mu); sp_256_mul_add_5(a+i, m, mu);
a[i+1] += a[i] >> 52; a[i+1] += a[i] >> 52;
} }
mu = (a[i] * mp) & 0xffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0xffffffffffffL;
sp_256_mul_add_5(a+i, m, mu); sp_256_mul_add_5(a+i, m, mu);
a[i+1] += a[i] >> 52; a[i+1] += a[i] >> 52;
a[i] &= 0xfffffffffffffL; a[i] &= 0xfffffffffffffL;
@ -29252,11 +29252,11 @@ static void sp_384_mont_reduce_order_7(sp_digit* a, const sp_digit* m, sp_digit
sp_384_norm_7(a + 7); sp_384_norm_7(a + 7);
for (i=0; i<6; i++) { for (i=0; i<6; i++) {
mu = (a[i] * mp) & 0x7fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7fffffffffffffL;
sp_384_mul_add_7(a+i, m, mu); sp_384_mul_add_7(a+i, m, mu);
a[i+1] += a[i] >> 55; a[i+1] += a[i] >> 55;
} }
mu = (a[i] * mp) & 0x3fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x3fffffffffffffL;
sp_384_mul_add_7(a+i, m, mu); sp_384_mul_add_7(a+i, m, mu);
a[i+1] += a[i] >> 55; a[i+1] += a[i] >> 55;
a[i] &= 0x7fffffffffffffL; a[i] &= 0x7fffffffffffffL;
@ -37196,11 +37196,11 @@ static void sp_1024_mont_reduce_18(sp_digit* a, const sp_digit* m, sp_digit mp)
#ifdef WOLFSSL_SP_DH #ifdef WOLFSSL_SP_DH
if (mp != 1) { if (mp != 1) {
for (i=0; i<17; i++) { for (i=0; i<17; i++) {
mu = (a[i] * mp) & 0x1ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1ffffffffffffffL;
sp_1024_mul_add_18(a+i, m, mu); sp_1024_mul_add_18(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
} }
mu = (a[i] * mp) & 0x7fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7fffffffffffffL;
sp_1024_mul_add_18(a+i, m, mu); sp_1024_mul_add_18(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
a[i] &= 0x1ffffffffffffffL; a[i] &= 0x1ffffffffffffffL;
@ -37218,11 +37218,11 @@ static void sp_1024_mont_reduce_18(sp_digit* a, const sp_digit* m, sp_digit mp)
} }
#else #else
for (i=0; i<17; i++) { for (i=0; i<17; i++) {
mu = (a[i] * mp) & 0x1ffffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x1ffffffffffffffL;
sp_1024_mul_add_18(a+i, m, mu); sp_1024_mul_add_18(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
} }
mu = (a[i] * mp) & 0x7fffffffffffffL; mu = ((sp_uint64)a[i] * (sp_uint64)mp) & 0x7fffffffffffffL;
sp_1024_mul_add_18(a+i, m, mu); sp_1024_mul_add_18(a+i, m, mu);
a[i+1] += a[i] >> 57; a[i+1] += a[i] >> 57;
a[i] &= 0x1ffffffffffffffL; a[i] &= 0x1ffffffffffffffL;