chiark / gitweb /
progs/perftest.c: Add performance test for Poly1305.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 26 May 2016 08:26:09 +0000 (09:26 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 7 Apr 2017 10:33:35 +0000 (11:33 +0100)
progs/perftest.c

index 072ab3186169733ceb66cb22ba4bac254a20a201..e6f7ddf0021c4da5a7b67b7375e74c763bd6690b 100644 (file)
@@ -67,6 +67,7 @@
 #include "gcipher.h"
 #include "ghash.h"
 #include "gmac.h"
+#include "poly1305.h"
 
 #include "ectab.h"
 #include "ptab.h"
@@ -430,6 +431,40 @@ static void hash_run(void *cc)
   GH_DESTROY(h);
 }
 
+/* --- Poly1305 --- */
+
+typedef struct poly1305_jobctx {
+  poly1305_key k;
+  octet s[POLY1305_MASKSZ];
+  octet *m;
+  size_t sz;
+  size_t n;
+} poly1305_jobctx;
+
+static void *poly1305_jobinit(opts *o)
+{
+  octet k[POLY1305_KEYSZ];
+  poly1305_jobctx *c = CREATE(poly1305_jobctx);
+  rand_get(RAND_GLOBAL, k, sizeof(k));
+  poly1305_keyinit(&c->k, k, sizeof(k));
+  rand_get(RAND_GLOBAL, c->s, sizeof(c->s));
+  c->sz = o->gbits ? o->gbits : 65536;
+  c->n = o->n ? o->n : 16;
+  c->m = xmalloc(c->sz);
+  return (c);
+}
+
+static void poly1305_jobrun(void *cc)
+{
+  poly1305_jobctx *c = cc;
+  poly1305_ctx ctx;
+  octet t[POLY1305_TAGSZ];
+  size_t i;
+  poly1305_macinit(&ctx, &c->k, c->s);
+  for (i = 0; i < c->n; i++) poly1305_hash(&ctx, c->m, c->sz);
+  poly1305_done(&ctx, t);
+}
+
 /* --- Job table --- */
 
 typedef struct jobops {
@@ -453,6 +488,7 @@ static const jobops jobtab[] = {
   { "ksched",                  ksched_init,            ksched_run },
   { "enc",                     enc_init,               enc_run },
   { "hash",                    hash_init,              hash_run },
+  { "poly1305",                        poly1305_jobinit,       poly1305_jobrun },
   { 0,                         0,                      0 }
 };