X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/a47e8bba76c3b1826d62c000b707b285e70e1e78..a5dd84675905dfc4274cf45424e6f3a9e385e1a7:/sshbn.c diff --git a/sshbn.c b/sshbn.c index 37422271..7fe0309a 100644 --- a/sshbn.c +++ b/sshbn.c @@ -133,7 +133,7 @@ static void internal_add_shifted(BignumInt *number, int bshift = shift % BIGNUM_INT_BITS; BignumDblInt addend; - addend = n << bshift; + addend = (BignumDblInt)n << bshift; while (addend) { addend += number[word]; @@ -729,6 +729,7 @@ Bignum bigmuladd(Bignum a, Bignum b, Bignum addend) } ret[0] = maxspot; + sfree(workspace); return ret; } @@ -814,7 +815,7 @@ unsigned short bignum_mod_short(Bignum number, unsigned short modulus) r = 0; mod = modulus; for (i = number[0]; i > 0; i--) - r = (r * 65536 + number[i]) % mod; + r = (r * (BIGNUM_TOP_BIT % mod) * 2 + number[i] % mod) % mod; return (unsigned short) r; } @@ -908,6 +909,7 @@ Bignum modinv(Bignum number, Bignum modulus) x = bigmuladd(q, xp, t); sign = -sign; freebn(t); + freebn(q); } freebn(b); @@ -1009,5 +1011,6 @@ char *bignum_decimal(Bignum x) /* * Done. */ + sfree(workspace); return ret; }