mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-02 03:52:49 -05:00
Move key-generation code into its own subdir.
Including mpunsafe.{h,c}, which should be an extra defence against inadvertently using it outside the keygen library.
This commit is contained in:
37
keygen/ecdsa.c
Normal file
37
keygen/ecdsa.c
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* EC key generation.
|
||||
*/
|
||||
|
||||
#include "ssh.h"
|
||||
#include "sshkeygen.h"
|
||||
#include "mpint.h"
|
||||
|
||||
int ecdsa_generate(struct ecdsa_key *ek, int bits)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
Reference in New Issue
Block a user