X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=sshrsa.c;h=25f9cf7e63b9a6cf8c2fa49a3387f77d06337cfa;hb=cc66c86e7311c97db09da989c340ba3108c9e14f;hp=fb0bcaa9d1d022986e8a8a50b16e67dc147c5649;hpb=cb1df53360b3402096f67d8dd317046c401e3eca;p=PuTTY.git diff --git a/sshrsa.c b/sshrsa.c index fb0bcaa9..25f9cf7e 100644 --- a/sshrsa.c +++ b/sshrsa.c @@ -264,6 +264,7 @@ static Bignum rsa_privkey_op(Bignum input, struct RSAKey *key) bitsleft--; bignum_set_bit(random, bits, v); } + bn_restore_invariant(random); /* * Now check that this number is strictly greater than @@ -561,6 +562,8 @@ static Bignum getmp(char **data, int *datalen) return b; } +static void rsa2_freekey(void *key); /* forward reference */ + static void *rsa2_newkey(char *data, int len) { char *p; @@ -580,6 +583,11 @@ static void *rsa2_newkey(char *data, int len) rsa->p = rsa->q = rsa->iqmp = NULL; rsa->comment = NULL; + if (!rsa->exponent || !rsa->modulus) { + rsa2_freekey(rsa); + return NULL; + } + return rsa; }