From ef7cf21d686245593220769a5f80a9bb75d62769 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Thu, 26 May 2016 09:26:09 +0100 Subject: [PATCH] progs/perftest.c: Add performance test for Poly1305. --- progs/perftest.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/progs/perftest.c b/progs/perftest.c index 072ab318..e6f7ddf0 100644 --- a/progs/perftest.c +++ b/progs/perftest.c @@ -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 } }; -- 2.11.0