#include "x25519.h"
#include "x448.h"
#include "ed25519.h"
+#include "ed448.h"
#include "cc.h"
#include "gcipher.h"
ed25519_verify(c->K, c->m, sizeof(c->m), c->sig);
}
+/* --- Ed448 --- */
+
+typedef struct ed448_signctx {
+ octet k[ED448_KEYSZ];
+ octet K[ED448_PUBSZ];
+ octet m[64];
+} ed448_signctx;
+
+typedef struct ed448_vrfctx {
+ octet K[ED448_PUBSZ];
+ octet m[64];
+ octet sig[ED448_SIGSZ];
+} ed448_vrfctx;
+
+static void *ed448_signinit(opts *o)
+{
+ ed448_signctx *c = CREATE(ed448_signctx);
+
+ rand_get(RAND_GLOBAL, c->k, sizeof(c->k));
+ rand_get(RAND_GLOBAL, c->m, sizeof(c->m));
+ ed448_pubkey(c->K, c->k, sizeof(c->k));
+ return (c);
+}
+
+static void ed448_signrun(void *cc)
+{
+ ed448_signctx *c = cc;
+ octet sig[ED448_SIGSZ];
+
+ ed448_sign(sig, c->k, sizeof(c->k), c->K, 0, 0, 0, c->m, sizeof(c->m));
+}
+
+static void *ed448_vrfinit(opts *o)
+{
+ octet k[ED448_KEYSZ];
+ ed448_vrfctx *c = CREATE(ed448_vrfctx);
+
+ rand_get(RAND_GLOBAL, k, sizeof(k));
+ rand_get(RAND_GLOBAL, c->m, sizeof(c->m));
+ ed448_pubkey(c->K, k, sizeof(k));
+ ed448_sign(c->sig, k, sizeof(k), c->K, 0, 0, 0, c->m, sizeof(c->m));
+ return (c);
+}
+
+static void ed448_vrfrun(void *cc)
+{
+ ed448_vrfctx *c = cc;
+ ed448_verify(c->K, 0, 0, 0, c->m, sizeof(c->m), c->sig);
+}
+
/* --- RSA --- */
typedef struct rsapriv_ctx {
{ "x448", x448_jobinit, x448_jobrun },
{ "ed25519-sign", ed25519_signinit, ed25519_signrun },
{ "ed25519-vrf", ed25519_vrfinit, ed25519_vrfrun },
+ { "ed448-sign", ed448_signinit, ed448_signrun },
+ { "ed448-vrf", ed448_vrfinit, ed448_vrfrun },
{ "ksched", ksched_init, ksched_run },
{ "enc", enc_init, enc_run },
{ "hash", hash_init, hash_run },
-q, --no-check Don't check field/group for validity.\n\
-B, --group-bits Group size for g-prime; key size for ksched;\n\
data size for enc and hash.\n\
--n, --factors=COUNT Number of factors for {exp,mul}-sim.\n\
+-n, --factors=COUNT Number of factors for {exp,mul}-sim;\n\
+ inner iterations for enc and hash.\n\
-i, --intervals=COUNT Number of intervals to run for. [0; forever]\n\
-t, --time=TIME Length of an interval in seconds. [1]\n\
");