X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/25f673625c9f2d3a323fed185f4b0c4b4a241976..d56fd9d102115283485493dbe56b0d320ac99097:/progs/key.c diff --git a/progs/key.c b/progs/key.c index 79c78ae7..b2b90800 100644 --- a/progs/key.c +++ b/progs/key.c @@ -70,6 +70,7 @@ #include "ptab.h" #include "rsa.h" #include "x25519.h" +#include "ed25519.h" #include "cc.h" #include "sha-mgf.h" @@ -955,6 +956,24 @@ static void alg_x25519(keyopts *k) key_setkeydata(k->kf, k->k, kd); } +static void alg_ed25519(keyopts *k) +{ + key_data *kd, *kkd; + octet priv[ED25519_KEYSZ], pub[ED25519_PUBSZ]; + + copyparam(k, 0); + k->r->ops->fill(k->r, priv, sizeof(priv)); + ed25519_pubkey(pub, priv, sizeof(priv)); + kkd = key_newstruct(); + key_structsteal(kkd, "priv", + key_newbinary(KCAT_PRIV | KF_BURN, priv, sizeof(priv))); + kd = key_newstruct(); + key_structsteal(kd, "private", kkd); + key_structsteal(kd, "pub", key_newbinary(KCAT_PUB, pub, sizeof(pub))); + + key_setkeydata(k->kf, k->k, kd); +} + /* --- The algorithm tables --- */ typedef struct keyalg { @@ -977,6 +996,7 @@ static keyalg algtab[] = { { "ec-param", alg_ecparam, "Elliptic curve parameters" }, { "ec", alg_ec, "Elliptic curve crypto" }, { "x25519", alg_x25519, "X25519 key exchange" }, + { "ed25519", alg_ed25519, "Ed25519 digital signatures" }, { "empty", alg_empty, "Empty parametrs-only key" }, { 0, 0 } };