File: ecdsa.c

package info (click to toggle)
putty 0.83-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 13,216 kB
  • sloc: ansic: 148,476; python: 8,466; perl: 1,830; makefile: 128; sh: 117
file content (37 lines) | stat: -rw-r--r-- 916 bytes parent folder | download | duplicates (2)
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;
}