X-Git-Url: https://www.bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=src%2Fint%2Fi15_modpow2.c;h=4b3211864c5b3bdabc2feeba20bff8f3e10d1258;hp=dce9941e2ceaf54a3b744f06f240387ce888f2f1;hb=d69276c18d55480e1bfa4b4c28b31062a706f6f0;hpb=556e525d62cd5559e74fe4d2777a59d33590a033;ds=inline diff --git a/src/int/i15_modpow2.c b/src/int/i15_modpow2.c index dce9941..4b32118 100644 --- a/src/int/i15_modpow2.c +++ b/src/int/i15_modpow2.c @@ -41,6 +41,7 @@ br_i15_modpow_opt(uint16_t *x, */ mwlen = (m[0] + 31) >> 4; mlen = mwlen * sizeof m[0]; + mwlen += (mwlen & 1); t1 = tmp; t2 = tmp + mwlen; @@ -86,7 +87,7 @@ br_i15_modpow_opt(uint16_t *x, * one word-sized shift. */ br_i15_zero(x, m[0]); - x[mwlen - 1] = 1; + x[(m[0] + 15) >> 4] = 1; br_i15_muladd_small(x, 0, m); /* @@ -133,11 +134,11 @@ br_i15_modpow_opt(uint16_t *x, br_i15_zero(t2, m[0]); base = t2 + mwlen; for (u = 1; u < ((uint32_t)1 << k); u ++) { - uint32_t m; + uint32_t mask; - m = -EQ(u, bits); + mask = -EQ(u, bits); for (v = 1; v < mwlen; v ++) { - t2[v] |= m & base[v]; + t2[v] |= mask & base[v]; } base += mwlen; }