X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/3709bfe9981af43e3cd491c37d300b57e5b26d50..d8770b1245ff0acd81f581c5667563e0d127104a:/sshbn.c diff --git a/sshbn.c b/sshbn.c index aea5a82b..3a5ddc03 100644 --- a/sshbn.c +++ b/sshbn.c @@ -6,6 +6,14 @@ #include #include +#if 0 // use PuTTY main debugging for diagbn() +#include +#include "putty.h" +#define debugprint debug +#else +#define debugprint(x) printf x +#endif + #define BIGNUM_INTERNAL typedef unsigned short *Bignum; @@ -289,7 +297,7 @@ Bignum modmul(Bignum p, Bignum q, Bignum mod) { unsigned short *a, *n, *m, *o; int mshift; - int pqlen, mlen, i, j; + int pqlen, mlen, rlen, i, j; Bignum result; /* Allocate m of size mlen, copy mod to m */ @@ -339,9 +347,10 @@ Bignum modmul(Bignum p, Bignum q, Bignum mod) } /* Copy result to buffer */ - result = newbn(mod[0]); - for (i = 0; i < mlen; i++) - result[result[0] - i] = a[i+2*pqlen-mlen]; + rlen = (mlen < pqlen*2 ? mlen : pqlen*2); + result = newbn(rlen); + for (i = 0; i < rlen; i++) + result[result[0] - i] = a[i+2*pqlen-rlen]; while (result[0] > 1 && result[result[0]] == 0) result[0]--; /* Free temporary arrays */ @@ -713,15 +722,15 @@ void diagbn(char *prefix, Bignum md) { int i, nibbles, morenibbles; static const char hex[] = "0123456789ABCDEF"; - printf("%s0x", prefix ? prefix : ""); + debugprint(("%s0x", prefix ? prefix : "")); nibbles = (3 + ssh1_bignum_bitcount(md))/4; if (nibbles<1) nibbles=1; morenibbles = 4*md[0] - nibbles; - for (i=0; i> (4*(i%2))) & 0xF]); + debugprint(("%c",hex[(bignum_byte(md, i/2) >> (4*(i%2))) & 0xF])); - if (prefix) putchar('\n'); + if (prefix) debugprint(("\n")); } /*