Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ecdsa.c « keygen - github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 28a723b2d7f0319e2b982ff7e1ae581d3ae37c35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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;
}