X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=cmdgen.c;h=42772aa365ec2813217fcaddb89ad2c02991b987;hb=a10edf435b5609d0a6859b41a48a846990c8a8a3;hp=2f0fdc1dafbd392fd734033afbb3a1ca314d1718;hpb=72083d11ac1881644df01b697d7abce776ea3082;p=PuTTY.git diff --git a/cmdgen.c b/cmdgen.c index 2f0fdc1d..42772aa3 100644 --- a/cmdgen.c +++ b/cmdgen.c @@ -616,7 +616,7 @@ int main(int argc, char **argv) else strftime(default_comment, 30, "rsa-key-%Y%m%d", tm); - random_init(); + random_ref(); entropy = get_random_data(bits / 8); random_add_heavynoise(entropy, bits / 8); memset(entropy, 0, bits/8); @@ -686,14 +686,26 @@ int main(int argc, char **argv) if (!load_encrypted) { void *vblob; char *blob; - int n, bloblen; + int n, l, bloblen; ret = rsakey_pubblob(&infilename, &vblob, &bloblen, &error); blob = (char *)vblob; n = 4; /* skip modulus bits */ - n += ssh1_read_bignum(blob + n, &ssh1key->exponent); - n += ssh1_read_bignum(blob + n, &ssh1key->modulus); + + l = ssh1_read_bignum(blob + n, bloblen - n, + &ssh1key->exponent); + if (l < 0) { + error = "SSH1 public key blob was too short"; + } else { + n += l; + l = ssh1_read_bignum(blob + n, bloblen - n, + &ssh1key->modulus); + if (l < 0) { + error = "SSH1 public key blob was too short"; + } else + n += l; + } ssh1key->comment = NULL; ssh1key->private_exponent = NULL; } else { @@ -730,7 +742,7 @@ int main(int argc, char **argv) case SSH_KEYTYPE_OPENSSH: case SSH_KEYTYPE_SSHCOM: ssh2key = import_ssh2(&infilename, intype, passphrase); - if (ssh2key) + if (ssh2key && ssh2key != SSH2_WRONG_PASSPHRASE) error = NULL; else if (!error) { if (ssh2key == SSH2_WRONG_PASSPHRASE)