#include "ptab.h"
#include "rsa.h"
#include "x25519.h"
+#include "ed25519.h"
#include "cc.h"
#include "sha-mgf.h"
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 {
{ "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 }
};