vars.am: Don't build the test programs for installation.
[catacomb] / progs / perftest.c
index 80f060a..8b7d3d2 100644 (file)
@@ -67,6 +67,7 @@
 #include "x25519.h"
 #include "x448.h"
 #include "ed25519.h"
+#include "ed448.h"
 
 #include "cc.h"
 #include "gcipher.h"
@@ -361,6 +362,56 @@ static void ed25519_vrfrun(void *cc)
   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 {
@@ -584,6 +635,8 @@ static const jobops jobtab[] = {
   { "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 },
@@ -623,7 +676,8 @@ Options:\n\
 -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\
 ");