X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/36a70e5cb235ac7c3c1e18b535c3b31695785f8c..919e9a53e43da0082f704b860fa70796c83f3c60:/sshdss.c diff --git a/sshdss.c b/sshdss.c index eba03aa8..3ea36952 100644 --- a/sshdss.c +++ b/sshdss.c @@ -268,8 +268,19 @@ static int dss_verifysig(void *key, char *sig, int siglen, } r = get160(&sig, &siglen); s = get160(&sig, &siglen); - if (!r || !s) + if (!r || !s) { + if (r) + freebn(r); + if (s) + freebn(s); return 0; + } + + if (!bignum_cmp(s, Zero)) { + freebn(r); + freebn(s); + return 0; + } /* * Step 1. w <- s^-1 mod q. @@ -624,6 +635,7 @@ static unsigned char *dss_sign(void *key, char *data, int datalen, int *siglen) s = modmul(kinv, hxr, dss->q); /* s = k^-1 * (hash + x*r) mod q */ freebn(hxr); freebn(kinv); + freebn(k); freebn(hash); /*