progs/perftest.c: Use from Glibc syscall numbers.
[catacomb] / symm / latinpoly-def.h
index 404098f..885b748 100644 (file)
@@ -91,10 +91,12 @@ extern const octet latinpoly_noncesz[], latinpoly_tagsz[];
 /* AAD methods. */
 extern void latinpoly_aadhash_poly1305(gaead_aad */*a*/,
                                       const void */*h*/, size_t /*hsz*/);
+extern void latinpoly_aadhash_naclbox(gaead_aad */*a*/,
+                                     const void */*h*/, size_t /*hsz*/);
 extern void latinpoly_aaddestroy(gaead_aad */*a*/);
 
 /* Variants. */
-enum { LPVAR_POLY1305 };
+enum { LPVAR_NACLBOX, LPVAR_POLY1305 };
 
 /* --- @latinpoly_tag@ --- *
  *
@@ -146,6 +148,9 @@ static int reinit_##latin(x##latin##_ctx *ctx,      int var,                \
   poly1305_keyinit(&pk, b, POLY1305_KEYSZ);                            \
   poly1305_macinit(ctpoly, &pk, b + POLY1305_KEYSZ);                   \
   switch (var) {                                                       \
+    case LPVAR_NACLBOX:                                                        \
+      aadpoly->count = 0; aadpoly->nbuf = 0;                           \
+      break;                                                           \
     case LPVAR_POLY1305:                                               \
       poly1305_macinit(aadpoly, &pk, b + POLY1305_KEYSZ);              \
       latin##_encrypt(&ctx->s, 0, 0, SALSA20_OUTSZ - sizeof(b));       \
@@ -161,6 +166,8 @@ static int reinit_##latin(x##latin##_ctx *ctx,      int var,                \
 static const gaead_aadops gaops_##latin##_poly1305 =                   \
   { &latin##_poly1305, 0, latinpoly_aadhash_poly1305, latinpoly_aaddestroy }; \
                                                                        \
+static const gaead_aadops gaops_##latin##_naclbox =                    \
+  { &latin##_naclbox, 0, latinpoly_aadhash_naclbox, latinpoly_aaddestroy }; \
                                                                        \
 /* Encryption operations. */                                           \
                                                                        \
@@ -183,6 +190,15 @@ static int gereinit_##latin##_poly1305(gaead_enc *e,                       \
                         &enc->aad.poly, &enc->poly, n, nsz));          \
 }                                                                      \
                                                                        \
+static int gereinit_##latin##_naclbox(gaead_enc *e,                    \
+                                     const void *n, size_t nsz,        \
+                                     size_t hsz, size_t msz, size_t tsz) \
+{                                                                      \
+  gectx_##latin *enc = (gectx_##latin *)e;                             \
+  return (reinit_##latin(&enc->ctx, LPVAR_NACLBOX,                     \
+                        &enc->aad.poly, &enc->poly, n, nsz));          \
+}                                                                      \
+                                                                       \
 static int geenc_##latin(gaead_enc *e,                                 \
                         const void *m, size_t msz, buf *b)             \
 {                                                                      \
@@ -218,6 +234,17 @@ static int gedone_##latin##_poly1305(gaead_enc *e, const gaead_aad *a,     \
   return (0);                                                          \
 }                                                                      \
                                                                        \
+static int gedone_##latin##_naclbox(gaead_enc *e, const gaead_aad *a,  \
+                                   buf *b, void *t, size_t tsz)        \
+{                                                                      \
+  gectx_##latin *enc = (gectx_##latin *)e;                             \
+  const latinpoly_aad *aad = (const latinpoly_aad *)a;                 \
+                                                                       \
+  if (gedone_##latin##_common(enc, aad, b, tsz)) return (-1);          \
+  poly1305_done(&enc->poly, t);                                                \
+  return (0);                                                          \
+}                                                                      \
+                                                                       \
 static void gedestroy_##latin(gaead_enc *e)                            \
   { gectx_##latin *enc = (gectx_##latin *)e; BURN(*enc); S_DESTROY(enc); } \
                                                                        \
@@ -225,6 +252,10 @@ static gaead_encops geops_##latin##_poly1305 =                             \
   { &latin##_poly1305, geaad_##latin, gereinit_##latin##_poly1305,     \
     geenc_##latin, gedone_##latin##_poly1305, gedestroy_##latin };     \
                                                                        \
+static gaead_encops geops_##latin##_naclbox =                          \
+  { &latin##_naclbox, geaad_##latin, gereinit_##latin##_naclbox,       \
+    geenc_##latin, gedone_##latin##_naclbox, gedestroy_##latin };      \
+                                                                       \
 /* Decryption operations. */                                           \
                                                                        \
 typedef struct gdctx_##latin {                                         \
@@ -246,6 +277,15 @@ static int gdreinit_##latin##_poly1305(gaead_dec *d,                       \
                         &dec->aad.poly, &dec->poly, n, nsz));          \
 }                                                                      \
                                                                        \
+static int gdreinit_##latin##_naclbox(gaead_dec *d,                    \
+                                     const void *n, size_t nsz,        \
+                                     size_t hsz, size_t msz, size_t tsz) \
+{                                                                      \
+  gdctx_##latin *dec = (gdctx_##latin *)d;                             \
+  return (reinit_##latin(&dec->ctx, LPVAR_NACLBOX,                     \
+                        &dec->aad.poly, &dec->poly, n, nsz));          \
+}                                                                      \
+                                                                       \
 static int gddec_##latin(gaead_dec *d,                                 \
                         const void *c, size_t csz, buf *b)             \
 {                                                                      \
@@ -283,6 +323,19 @@ static int gddone_##latin##_poly1305(gaead_dec *d, const gaead_aad *a,     \
   else return (0);                                                     \
 }                                                                      \
                                                                        \
+static int gddone_##latin##_naclbox(gaead_dec *d, const gaead_aad *a,  \
+                                   buf *b, const void *t, size_t tsz)  \
+{                                                                      \
+  gdctx_##latin *dec = (gdctx_##latin *)d;                             \
+  const latinpoly_aad *aad = (const latinpoly_aad *)a;                 \
+  octet u[POLY1305_TAGSZ];                                             \
+                                                                       \
+  if (gddone_##latin##_common(dec, aad, b, tsz)) return (-1);          \
+  poly1305_done(&dec->poly, u);                                                \
+  if (ct_memeq(t, u, POLY1305_TAGSZ)) return (+1);                     \
+  else return (0);                                                     \
+}                                                                      \
+                                                                       \
 static void gddestroy_##latin(gaead_dec *d)                            \
   { gdctx_##latin *dec = (gdctx_##latin *)d; BURN(*dec); S_DESTROY(dec); } \
                                                                        \
@@ -290,6 +343,10 @@ static gaead_decops gdops_##latin##_poly1305 =                             \
   { &latin##_poly1305, gdaad_##latin, gdreinit_##latin##_poly1305,     \
     gddec_##latin, gddone_##latin##_poly1305, gddestroy_##latin };     \
                                                                        \
+static gaead_decops gdops_##latin##_naclbox =                          \
+  { &latin##_poly1305, gdaad_##latin, gdreinit_##latin##_naclbox,      \
+    gddec_##latin, gddone_##latin##_naclbox, gddestroy_##latin };      \
+                                                                       \
 /* Key operations. */                                                  \
                                                                        \
 static gaead_enc *gkenc_##latin##_poly1305(const gaead_key *k,         \
@@ -309,6 +366,23 @@ static gaead_enc *gkenc_##latin##_poly1305(const gaead_key *k,             \
   return (&enc->e);                                                    \
 }                                                                      \
                                                                        \
+static gaead_enc *gkenc_##latin##_naclbox(const gaead_key *k,          \
+                                         const void *n, size_t nsz,    \
+                                         size_t hsz, size_t msz,       \
+                                         size_t tsz)                   \
+{                                                                      \
+  latinpoly_key *key = (latinpoly_key *)k;                             \
+  gectx_##latin *enc = S_CREATE(gectx_##latin);                                \
+                                                                       \
+  enc->e.ops = &geops_##latin##_naclbox;                               \
+  enc->aad.a.ops = &gaops_##latin##_naclbox;                           \
+  x##latin##_init(&enc->ctx, key->key, key->ksz, 0);                   \
+  if (reinit_##latin(&enc->ctx, LPVAR_NACLBOX,                         \
+                    &enc->aad.poly, &enc->poly, n, nsz))               \
+    { gedestroy_##latin(&enc->e); return (0); }                                \
+  return (&enc->e);                                                    \
+}                                                                      \
+                                                                       \
 static gaead_dec *gkdec_##latin##_poly1305(const gaead_key *k,         \
                                           const void *n, size_t nsz,   \
                                           size_t hsz, size_t msz,      \
@@ -326,6 +400,23 @@ static gaead_dec *gkdec_##latin##_poly1305(const gaead_key *k,             \
   return (&dec->d);                                                    \
 }                                                                      \
                                                                        \
+static gaead_dec *gkdec_##latin##_naclbox(const gaead_key *k,          \
+                                         const void *n, size_t nsz,    \
+                                         size_t hsz, size_t msz,       \
+                                         size_t tsz)                   \
+{                                                                      \
+  latinpoly_key *key = (latinpoly_key *)k;                             \
+  gdctx_##latin *dec = S_CREATE(gdctx_##latin);                                \
+                                                                       \
+  dec->d.ops = &gdops_##latin##_naclbox;                               \
+  dec->aad.a.ops = &gaops_##latin##_naclbox;                           \
+  x##latin##_init(&dec->ctx, key->key, key->ksz, 0);                   \
+  if (reinit_##latin(&dec->ctx, LPVAR_NACLBOX,                         \
+                    &dec->aad.poly, &dec->poly, n, nsz))               \
+    { gddestroy_##latin(&dec->d); return (0); }                                \
+  return (&dec->d);                                                    \
+}                                                                      \
+                                                                       \
 static void gkdestroy_##latin(gaead_key *k)                            \
   { latinpoly_key *key = (latinpoly_key *)k; BURN(*key); S_DESTROY(key); } \
                                                                        \
@@ -334,6 +425,11 @@ static const gaead_keyops gkops_##latin##_poly1305 =                       \
     gkenc_##latin##_poly1305, gkdec_##latin##_poly1305,                        \
     gkdestroy_##latin };                                               \
                                                                        \
+static const gaead_keyops gkops_##latin##_naclbox =                    \
+  { &latin##_naclbox, 0,                                               \
+    gkenc_##latin##_naclbox, gkdec_##latin##_naclbox,                  \
+    gkdestroy_##latin };                                               \
+                                                                       \
 /* Class definition. */                                                        \
                                                                        \
 static gaead_key *gkey_##latin##_common(const gaead_keyops *ops,       \
@@ -349,10 +445,27 @@ static gaead_key *gkey_##latin##_common(const gaead_keyops *ops,  \
 static gaead_key *gkey_##latin##_poly1305(const void *k, size_t ksz)   \
   { return (gkey_##latin##_common(&gkops_##latin##_poly1305, k, ksz)); } \
                                                                        \
+static int gszok_##latin##_poly1305(size_t nsz, size_t hsz,            \
+                                   size_t msz, size_t tsz)             \
+  { return (gaead_szokcommon(&latin##_poly1305, nsz, hsz, msz, tsz)); }        \
+                                                                       \
+static gaead_key *gkey_##latin##_naclbox(const void *k, size_t ksz)    \
+  { return (gkey_##latin##_common(&gkops_##latin##_naclbox, k, ksz)); }        \
+                                                                       \
+static int gszok_##latin##_naclbox(size_t nsz, size_t hsz,             \
+                                  size_t msz, size_t tsz)              \
+  { return (gaead_szokcommon(&latin##_poly1305, nsz, hsz, msz, tsz)); } \
+                                                                       \
 const gcaead latin##_poly1305 = {                                      \
   name "-poly1305", latin##_keysz, latinpoly_noncesz, latinpoly_tagsz, \
   64, 0, 0, AEADF_AADNDEP,                                             \
-  gkey_##latin##_poly1305                                              \
+  gkey_##latin##_poly1305, gszok_##latin##_poly1305                    \
+};                                                                     \
+                                                                       \
+const gcaead latin##_naclbox = {                                       \
+  name "-naclbox", latin##_keysz, latinpoly_noncesz, latinpoly_tagsz,  \
+  64, 0, 0, AEADF_AADNDEP | AEADF_NOAAD,                               \
+  gkey_##latin##_naclbox, gszok_##latin##_naclbox                      \
 };
 
 /*----- That's all, folks -------------------------------------------------*/