I added more detail to the `Authentication failed at PuTTY X11
[u/mdw/putty] / sshbn.c
diff --git a/sshbn.c b/sshbn.c
index 3742227..7fe0309 100644 (file)
--- 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;
 }