mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 17:38:00 +00:00
62733a8389
This reverts commit a7bdefb394
.
I had accidentally mashed it together with another commit. I did
actually want to push both of them, but I'd rather push them
separately! So I'm backing out the combined blob, and I'll re-push
them with their proper comments and explanations.
39 lines
991 B
C
39 lines
991 B
C
/*
|
|
* EC key generation.
|
|
*/
|
|
|
|
#include "ssh.h"
|
|
#include "mpint.h"
|
|
|
|
int ecdsa_generate(struct ecdsa_key *ek, int bits,
|
|
progfn_t pfn, void *pfnparam)
|
|
{
|
|
if (!ec_nist_alg_and_curve_by_bits(bits, &ek->curve, &ek->sshk.vt))
|
|
return 0;
|
|
|
|
mp_int *one = mp_from_integer(1);
|
|
ek->privateKey = mp_random_in_range(one, ek->curve->w.G_order);
|
|
mp_free(one);
|
|
|
|
ek->publicKey = ecdsa_public(ek->privateKey, ek->sshk.vt);
|
|
|
|
return 1;
|
|
}
|
|
|
|
int eddsa_generate(struct eddsa_key *ek, int bits,
|
|
progfn_t pfn, void *pfnparam)
|
|
{
|
|
if (!ec_ed_alg_and_curve_by_bits(bits, &ek->curve, &ek->sshk.vt))
|
|
return 0;
|
|
|
|
/* EdDSA secret keys are just 32 bytes of hash preimage; the
|
|
* 64-byte SHA-512 hash of that key will be used when signing,
|
|
* but the form of the key stored on disk is the preimage
|
|
* only. */
|
|
ek->privateKey = mp_random_bits(bits);
|
|
|
|
ek->publicKey = eddsa_public(ek->privateKey, ek->sshk.vt);
|
|
|
|
return 1;
|
|
}
|