symm/ocb1.h, symm/pmac1.h, ...: Implement PMAC1 and OCB1.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 2 Nov 2018 22:15:14 +0000 (22:15 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 5 Sep 2019 00:36:07 +0000 (01:36 +0100)
Also bump the required mLib version to 2.3.0, for <mLib/compiler.h>.

32 files changed:
configure.ac
debian/control
symm/Makefile.am
symm/ocb.c [new file with mode: 0644]
symm/ocb.h [new file with mode: 0644]
symm/ocb1-def.h [new file with mode: 0644]
symm/ocb1.h [new file with mode: 0644]
symm/pmac1-def.h [new file with mode: 0644]
symm/pmac1.h [new file with mode: 0644]
symm/t/blowfish
symm/t/cast128
symm/t/cast256.local
symm/t/des
symm/t/des3
symm/t/desx
symm/t/idea
symm/t/mars.local
symm/t/noekeon
symm/t/rc2
symm/t/rc5
symm/t/rijndael.local
symm/t/rijndael192
symm/t/rijndael256
symm/t/safer
symm/t/safersk
symm/t/serpent.local
symm/t/skipjack
symm/t/square
symm/t/tea
symm/t/twofish.local
symm/t/xtea
utils/advmodes

index a2af5bf..db098dc 100644 (file)
@@ -403,7 +403,7 @@ dnl Set the master libraries we need.
 AC_SUBST([CATACOMB_LIBS])
 
 dnl Necessary support libraries.
-PKG_CHECK_MODULES([mLib], [mLib >= 2.2.2.1])
+PKG_CHECK_MODULES([mLib], [mLib >= 2.3.0])
 AM_CFLAGS="$AM_CFLAGS $mLib_CFLAGS"
 
 dnl--------------------------------------------------------------------------
index 52437a9..4401de1 100644 (file)
@@ -2,7 +2,7 @@ Source: catacomb
 Section: libs
 Priority: extra
 Build-Depends: debhelper (>= 9), python, valgrind, pkg-config,
- mlib-dev (>= 2.2.2.1)
+ mlib-dev (>= 2.3.0)
 Maintainer: Mark Wooding <mdw@distorted.org.uk>
 Standards-Version: 3.1.1
 
index 1aa18c0..887cbf4 100644 (file)
@@ -317,11 +317,12 @@ BLKCCIPHERMODES           += cbc cfb ecb ofb
 BLKCCIPHERMODES                += counter
 
 ## CMAC mode.
-BLKCMACMODES           += cmac
+BLKCMACMODES           += cmac pmac1
 
 ## Various AEAD modes.
-BLKCAEADMODES          += ccm eax gcm
-libsymm_la_SOURCES     += ccm.c gcm.c
+pkginclude_HEADERS     += ocb.h
+BLKCAEADMODES          += ccm eax gcm ocb1
+libsymm_la_SOURCES     += ccm.c gcm.c ocb.c
 
 ###--------------------------------------------------------------------------
 ### Hash functions.
diff --git a/symm/ocb.c b/symm/ocb.c
new file mode 100644 (file)
index 0000000..1c97215
--- /dev/null
@@ -0,0 +1,73 @@
+/* -*-c-*-
+ *
+ * Common definitions for OCB and related modes
+ *
+ * (c) 2018 Straylight/Edgeware
+ */
+
+/*----- Licensing notice --------------------------------------------------*
+ *
+ * This file is part of Catacomb.
+ *
+ * Catacomb is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Catacomb is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with Catacomb.  If not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+/*----- Header files ------------------------------------------------------*/
+
+#include "config.h"
+
+#include "ocb.h"
+
+/*----- Main code ---------------------------------------------------------*/
+
+/* --- @ocb_ctz@, @ocb_ctzl@ --- *
+ *
+ * Arguments:  @unsigned i@ or @unsigned long i@ = operand, assumed nonzero
+ *
+ * Returns:    The number of trailing zero bits in @i@, or nonsense if
+ *             %$i = 0$%.
+ */
+
+unsigned ocb_ctz(unsigned i)
+{
+  unsigned n = 0;
+
+  if (!(i&0x00ff)) { n +=  8; i >>=  8; }
+  if (!(i&0x000f)) { n +=  4; i >>=  4; }
+  if (!(i&0x0003)) { n +=  2; i >>=  2; }
+  if (!(i&0x0001)) { n +=  1; i >>=  1; }
+  return (n);
+}
+
+unsigned ocb_ctzl(unsigned long i)
+{
+  unsigned n = 0;
+
+#if ULONG_BITS > 64
+  while (!(i&0xfffffffffffffffful)) { n += 64; i >>= 64; }
+#endif
+#if ULONG_BITS > 32
+  if (!(i&0xffffffff)) { n += 32; i >>= 32; }
+#endif
+  if (!(i&0xffff)) { n += 16; i >>= 16; }
+  if (!(i&0x00ff)) { n +=  8; i >>=  8; }
+  if (!(i&0x000f)) { n +=  4; i >>=  4; }
+  if (!(i&0x0003)) { n +=  2; i >>=  2; }
+  if (!(i&0x0001)) { n +=  1; i >>=  1; }
+  return (n);
+}
+
+/*----- That's all, folks -------------------------------------------------*/
diff --git a/symm/ocb.h b/symm/ocb.h
new file mode 100644 (file)
index 0000000..d87aed3
--- /dev/null
@@ -0,0 +1,117 @@
+/* -*-c-*-
+ *
+ * Common definitions for OCB and related modes
+ *
+ * (c) 2018 Straylight/Edgeware
+ */
+
+/*----- Licensing notice --------------------------------------------------*
+ *
+ * This file is part of Catacomb.
+ *
+ * Catacomb is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Catacomb is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with Catacomb.  If not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+#ifndef CATACOMB_OCB_H
+#define CATACOMB_OCB_H
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+/*----- Header files ------------------------------------------------------*/
+
+#include <stddef.h>
+
+#include <mLib/bits.h>
+#include <mLib/compiler.h>
+
+/*----- Constants ---------------------------------------------------------*/
+
+/* The number of offsets to maintain.  Rather than calculate and store all
+ * possible offset values in advance, or calculate new ones on demand (and
+ * have to allocate space for them), we calculate a number in advance, and
+ * determine any others every time they're needed.  If we calculate the first
+ * %$n$% offsets only, then we spend %$i - n + 1$% time calculating offset
+ * %$L_i$% when %$i \ge n$%.  But the offset %$L_i$% is used only for a
+ * %$2^{-i-1}$% fraction of the blocks.  Summing up this geometric series
+ * shows us that we add only a small constant overhead, and save storage
+ * space for many offsets.
+ */
+#define OCB_NCALC 16
+#define OCB_CALCMASK ((1ul << OCB_NCALC) - 1)
+
+/*----- Functions provided ------------------------------------------------*/
+
+/* --- @ocb_ctz@, @ocb_ctzl@ --- *
+ *
+ * Arguments:  @unsigned i@ or @unsigned long i@ = operand, assumed nonzero
+ *
+ * Returns:    The number of trailing zero bits in @i@, or nonsense if
+ *             %$i = 0$%.
+ */
+
+extern unsigned ocb_ctz(unsigned /*i*/);
+extern unsigned ocb_ctzl(unsigned long /*i*/);
+
+#if GCC_VERSION_P(3, 4)
+#  define OCB_CTZ(i) __builtin_ctz(i)
+#  define OCB_CTZL(i) __builtin_ctzl(i)
+#else
+#  define OCB_CTZ(i) ocb_ctz(i)
+#  define OCB_CTZL(i) ocb_ctzl(i)
+#endif
+
+/* --- @OCB_OFFSET@ --- *
+ *
+ * Arguments:  @PRE@ = block cipher prefix
+ *             @uint32 *o@ = pointer to offset accumulator
+ *             @uint32 (*l)[PRE_BLKSZ]@ = pointer to offset mask table
+ *             @unsigned long i@ = block index
+ *
+ * Returns:    ---
+ *
+ * Use:                Update the per-block offset for Grey-code-based OCB
+ *             variants.  On entry, @o@ is assumed to hold the offset for
+ *             block @i - 1@; on exit @o@ is updated to hold the offset for
+ *             block @i@.
+ */
+
+#define OCB_OFFSET(PRE, o, l, i) do {                                  \
+  uint32 (*_l)[PRE##_BLKSZ/4] = (l);                                   \
+  uint32 *_o = (o);                                                    \
+  unsigned long _i = (i);                                              \
+  unsigned _j;                                                         \
+                                                                       \
+  if (_i&OCB_CALCMASK) {                                               \
+    _j = OCB_CTZ(_i);                                                  \
+    BLKC_XMOVE(PRE, _o, _l[_j]);                                       \
+  } else {                                                             \
+    uint32 _t[PRE##_BLKSZ];                                            \
+    _j = OCB_CTZL(_i) - OCB_NCALC;                                     \
+    BLKC_BLSHIFT(PRE, IRRED, _t, _l[OCB_NCALC - 1]);                   \
+    while (_j--) BLKC_BLSHIFT(PRE, IRRED, _t, _t);                     \
+    BLKC_XMOVE(PRE, _t, _l[_j]);                                       \
+  }                                                                    \
+} while (0)
+
+/*----- That's all, folks -------------------------------------------------*/
+
+#ifdef __cplusplus
+  }
+#endif
+
+#endif
diff --git a/symm/ocb1-def.h b/symm/ocb1-def.h
new file mode 100644 (file)
index 0000000..7c7eb29
--- /dev/null
@@ -0,0 +1,670 @@
+/* -*-c-*-
+ *
+ * The OCB1 authenticated encryption mode
+ *
+ * (c) 2018 Straylight/Edgeware
+ */
+
+/*----- Licensing notice --------------------------------------------------*
+ *
+ * This file is part of Catacomb.
+ *
+ * Catacomb is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Catacomb is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with Catacomb.  If not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+#ifndef CATACOMB_OCB1_DEF_H
+#define CATACOMB_OCB1_DEF_H
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+/*----- Header files ------------------------------------------------------*/
+
+#include <string.h>
+
+#include <mLib/bits.h>
+#include <mLib/sub.h>
+
+#ifndef CATACOMB_ARENA_H
+#  include "arena.h"
+#endif
+
+#ifndef CATACOMB_BLKC_H
+#  include "blkc.h"
+#endif
+
+#ifndef CATACOMB_CT_H
+#  include "ct.h"
+#endif
+
+#ifndef CATACOMB_KEYSZ_H
+#  include "keysz.h"
+#endif
+
+#ifndef CATACOMB_PARANOIA_H
+#  include "paranoia.h"
+#endif
+
+/*----- Macros ------------------------------------------------------------*/
+
+/* --- @OCB1_DEF@ --- *
+ *
+ * Arguments:  @PRE@, @pre@ = prefixes for the underlying block cipher
+ *
+ * Use:                Creates an implementation for the OCB1 authenticated-
+ *             encryption mode.
+ */
+
+#define OCB1_DEF(PRE, pre) OCB1_DEFX(PRE, pre, #pre, #pre)
+
+#define OCB1_DEFX(PRE, pre, name, fname)                               \
+                                                                       \
+const octet                                                            \
+  pre##_ocb1noncesz[] = { KSZ_SET, PRE##_BLKSZ, 0 },                   \
+  pre##_ocb1tagsz[] = { KSZ_RANGE, PRE##_BLKSZ, 0, PRE##_BLKSZ, 1 };   \
+                                                                       \
+/* --- @pre_ocb1init@ --- *                                            \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to OCB1 context            \
+ *             @const pre_ocb1key *key@ = pointer to key block         \
+ *             @const void *n@ = pointer to nonce                      \
+ *             @size_t nsz@ = size of nonce                            \
+ *                                                                     \
+ * Returns:    Zero on success, @-1@ if the nonce length is bad.       \
+ *                                                                     \
+ * Use:                Initialize an OCB1 operation context with a given key.  \
+ *                                                                     \
+ *             The original key needn't be kept around any more.       \
+ */                                                                    \
+                                                                       \
+int pre##_ocb1init(pre##_ocb1ctx *ctx, const pre##_ocb1key *k,         \
+                   const void *n, size_t nsz)                          \
+  { ctx->k = *k; return (pre##_ocb1reinit(ctx, n, nsz)); }             \
+                                                                       \
+/* --- @pre_ocb1reinit@ --- *                                          \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to OCB1 context            \
+ *             @const void *n@ = pointer to nonce                      \
+ *             @size_t nsz@ = size of nonce                            \
+ *                                                                     \
+ * Returns:    Zero on success, @-1@ if the nonce length is bad.       \
+ *                                                                     \
+ * Use:                Reinitialize an OCB1 operation context, changing the    \
+ *             nonce.                                                  \
+ */                                                                    \
+                                                                       \
+int pre##_ocb1reinit(pre##_ocb1ctx *ctx, const void *n, size_t nsz)    \
+{                                                                      \
+  if (nsz != PRE##_BLKSZ) return (-1);                                 \
+  ctx->off = 0; BLKC_ZERO(PRE, ctx->a);                                        \
+  BLKC_LOAD(PRE, ctx->o, n); BLKC_XMOVE(PRE, ctx->o, ctx->k.lmask[0]); \
+  pre##_eblk(&ctx->k.ctx, ctx->o, ctx->o); ctx->i = 1;                 \
+  return (0);                                                          \
+}                                                                      \
+                                                                       \
+/* --- @pre_ocb1encrypt@ --- *                                         \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to OCB1 operation context  \
+ *             @const void *src@ = pointer to plaintext message chunk  \
+ *             @size_t sz@ = size of the plaintext                     \
+ *             @buf *dst@ = a buffer to write the ciphertext to        \
+ *                                                                     \
+ * Returns:    Zero on success; @-1@ on failure.                       \
+ *                                                                     \
+ * Use:                Encrypts a chunk of a plaintext message, writing a      \
+ *             chunk of ciphertext to the output buffer and updating   \
+ *             the operation state.                                    \
+ *                                                                     \
+ *             Note that OCB1 delays output if its input is not a      \
+ *             whole number of blocks.  This means that the output     \
+ *             might be smaller or larger the input by up to the block \
+ *             size.                                                   \
+ */                                                                    \
+                                                                       \
+int pre##_ocb1encrypt(pre##_ocb1ctx *ctx,                              \
+                     const void *src, size_t sz, buf *dst)             \
+{                                                                      \
+  rsvr_state st;                                                       \
+  size_t osz;                                                          \
+  uint32 t[PRE##_BLKSZ/4];                                             \
+  const octet *p;                                                      \
+  octet *q;                                                            \
+                                                                       \
+  /* Figure out what we're going to do. */                             \
+  rsvr_setup(&st, &pre##_ocb1policy, ctx->b, &ctx->off, src, sz);      \
+                                                                       \
+  /* Determine the output size and verify that there is enough         \
+   * space.                                                            \
+   */                                                                  \
+  osz = st.plan.from_rsvr + st.plan.from_input;                                \
+  if (!osz) q = 0;                                                     \
+  else { q = buf_get(dst, osz); if (!q) return (-1); }                 \
+                                                                       \
+  /* Process the input in whole blocks at a time. */                   \
+  RSVR_DO(&st) while ((p = RSVR_NEXT(&st, PRE##_BLKSZ)) != 0) {                \
+    OCB_OFFSET(PRE, ctx->o, ctx->k.lmask, ctx->i++);                   \
+    BLKC_LOAD(PRE, t, p); BLKC_XMOVE(PRE, ctx->a, t);                  \
+    BLKC_XMOVE(PRE, t, ctx->o); pre##_eblk(&ctx->k.ctx, t, t);         \
+    BLKC_XSTORE(PRE, q, t, ctx->o); q += PRE##_BLKSZ;                  \
+  }                                                                    \
+                                                                       \
+  /* Done. */                                                          \
+  return (0);                                                          \
+}                                                                      \
+                                                                       \
+/* --- @pre_ocb1decrypt@ --- *                                         \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to OCB1 operation context  \
+ *             @const void *src@ = pointer to ciphertext message chunk \
+ *             @size_t sz@ = size of the ciphertext                    \
+ *             @buf *dst@ = a buffer to write the plaintext to         \
+ *                                                                     \
+ * Returns:    Zero on success; @-1@ on failure.                       \
+ *                                                                     \
+ * Use:                Decrypts a chunk of a ciphertext message, writing a     \
+ *             chunk of plaintext to the output buffer and updating    \
+ *             the operation state.                                    \
+ *                                                                     \
+ *             Note that OCB1 delays output if its input is not a      \
+ *             whole number of blocks.  This means that the output     \
+ *             might be smaller or larger the input by up to the block \
+ *             size.                                                   \
+ */                                                                    \
+                                                                       \
+int pre##_ocb1decrypt(pre##_ocb1ctx *ctx,                              \
+                     const void *src, size_t sz, buf *dst)             \
+{                                                                      \
+  rsvr_state st;                                                       \
+  size_t osz;                                                          \
+  uint32 t[PRE##_BLKSZ/4];                                             \
+  const octet *p;                                                      \
+  octet *q;                                                            \
+                                                                       \
+  /* Figure out what we're going to do. */                             \
+  rsvr_setup(&st, &pre##_ocb1policy, ctx->b, &ctx->off, src, sz);      \
+                                                                       \
+  /* Determine the output size and verify that there is enough         \
+   * space.                                                            \
+   */                                                                  \
+  osz = st.plan.from_rsvr + st.plan.from_input;                                \
+  if (!osz) q = 0;                                                     \
+  else { q = buf_get(dst, osz); if (!q) return (-1); }                 \
+                                                                       \
+  /* Process the input in whole blocks at a time. */                   \
+  RSVR_DO(&st) while ((p = RSVR_NEXT(&st, PRE##_BLKSZ)) != 0) {                \
+    OCB_OFFSET(PRE, ctx->o, ctx->k.lmask, ctx->i++);                   \
+    BLKC_LOAD(PRE, t, p);                                              \
+    BLKC_XMOVE(PRE, t, ctx->o); pre##_dblk(&ctx->k.ctx, t, t);         \
+    BLKC_XMOVE(PRE, t, ctx->o); BLKC_XMOVE(PRE, ctx->a, t);            \
+    BLKC_STORE(PRE, q, t); q += PRE##_BLKSZ;                           \
+  }                                                                    \
+                                                                       \
+  /* Done. */                                                          \
+  return (0);                                                          \
+}                                                                      \
+                                                                       \
+/* --- @pre_ocb1encdecfinal@ --- *                                     \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to an OCB1 context         \
+ *             @const pre_ocb1aadctx *aad@ = pointer to AAD context,   \
+ *                     or null                                         \
+ *             @buf *dst@ = buffer for remaining ciphertext            \
+ *             @int encp@ = nonzero if we're encrypting                \
+ *                                                                     \
+ * Returns:    Zero on success; @-1@ on failure.                       \
+ *                                                                     \
+ * Use:                Common end-of-message handling for encryption and       \
+ *             decryption.  The full-length tag is left in the         \
+ *             context's buffer.                                       \
+ */                                                                    \
+                                                                       \
+static int pre##_ocb1encdecfinal(pre##_ocb1ctx *ctx,                   \
+                                const pre##_ocb1aadctx *aad, buf *dst, \
+                                int encp)                              \
+{                                                                      \
+  octet *q;                                                            \
+                                                                       \
+  /* Arrange space for the final output (if any). */                   \
+  if (!ctx->off) { q = 0; if (!BOK(dst)) return (-1); }                        \
+  else { q = buf_get(dst, ctx->off); if (!q) return (-1); }            \
+                                                                       \
+  /* Calculate the final offset.  Mix it into the checksum before it   \
+   * gets clobbered.                                                   \
+   */                                                                  \
+  OCB_OFFSET(PRE, ctx->o, ctx->k.lmask, ctx->i++);                     \
+  BLKC_XMOVE(PRE, ctx->a, ctx->o);                                     \
+                                                                       \
+  /* Mix the magic final mask and tail length into the offset. */      \
+  BLKC_XMOVE(PRE, ctx->o, ctx->k.lxinv);                               \
+  ctx->o[PRE##_BLKSZ/4 - 1] ^= BLKC_BWORD(PRE, 8*ctx->off);            \
+                                                                       \
+  /* If we're decrypting, then trim the end of the plaintext and fold  \
+   * that into the checksum.                                           \
+   */                                                                  \
+  if (!encp) {                                                         \
+    memset(ctx->b + ctx->off, 0, PRE##_BLKSZ - ctx->off);              \
+    BLKC_XLOAD(PRE, ctx->a, ctx->b);                                   \
+  }                                                                    \
+                                                                       \
+  /* Cycle the block cipher for the last plaintext block. */           \
+  pre##_eblk(&ctx->k.ctx, ctx->o, ctx->o);                             \
+                                                                       \
+  /* Fold this mask into the checksum before it gets clobbered. */     \
+  BLKC_XMOVE(PRE, ctx->a, ctx->o);                                     \
+                                                                       \
+  /* Encrypt the message tail. */                                      \
+  BLKC_XLOAD(PRE, ctx->o, ctx->b);                                     \
+  BLKC_STORE(PRE, ctx->b, ctx->o);                                     \
+  if (ctx->off) memcpy(q, ctx->b, ctx->off);                           \
+                                                                       \
+  /* If we're encrypting, then trim the end of the ciphertext and fold \
+   * that into the checksum.                                           \
+   */                                                                  \
+  if (encp) {                                                          \
+    memset(ctx->b + ctx->off, 0, PRE##_BLKSZ - ctx->off);              \
+    BLKC_XLOAD(PRE, ctx->a, ctx->b);                                   \
+  }                                                                    \
+                                                                       \
+  /* Encrypt the checksum to produce a tag. */                         \
+  pre##_eblk(&ctx->k.ctx, ctx->a, ctx->a);                             \
+                                                                       \
+  /* If there's AAD then mix the PMAC tag in too. */                   \
+  if (aad && aad->off)                                                 \
+    { pre##_ocb1aadtag(aad, ctx->o); BLKC_XMOVE(PRE, ctx->a, ctx->o); } \
+                                                                       \
+  /* Write the final tag. */                                           \
+  BLKC_STORE(PRE, ctx->b, ctx->a);                                     \
+                                                                       \
+  /* Done. */                                                          \
+  return (0);                                                          \
+}                                                                      \
+                                                                       \
+/* --- @pre_ocb1encryptdone@ --- *                                     \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to an OCB1 context         \
+ *             @const pre_ocb1aadctx *aad@ = pointer to AAD context,   \
+ *                     or null                                         \
+ *             @buf *dst@ = buffer for remaining ciphertext            \
+ *             @void *tag@ = where to write the tag                    \
+ *             @size_t tsz@ = length of tag to store                   \
+ *                                                                     \
+ * Returns:    Zero on success; @-1@ on failure.                       \
+ *                                                                     \
+ * Use:                Completes an OCB1 encryption operation.  The @aad@      \
+ *             pointer may be null if there is no additional           \
+ *             authenticated data.  OCB1 delays output, so this will   \
+ *             cause any remaining buffered plaintext to be encrypted  \
+ *             and written to @dst@.  Anyway, the function will fail   \
+ *             if the output buffer is broken.                         \
+ */                                                                    \
+                                                                       \
+int pre##_ocb1encryptdone(pre##_ocb1ctx *ctx,                          \
+                         const pre##_ocb1aadctx *aad, buf *dst,        \
+                         void *tag, size_t tsz)                        \
+{                                                                      \
+  assert(tsz <= PRE##_BLKSZ);                                          \
+  if (pre##_ocb1encdecfinal(ctx, aad, dst, 1)) return (-1);            \
+  memcpy(tag, ctx->b, tsz);                                            \
+  return (0);                                                          \
+}                                                                      \
+                                                                       \
+/* --- @pre_ocb1decryptdone@ --- *                                     \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to an OCB1 context         \
+ *             @const pre_ocb1aadctx *aad@ = pointer to AAD context,   \
+ *                     or null                                         \
+ *             @buf *dst@ = buffer for remaining plaintext             \
+ *             @const void *tag@ = tag to verify                       \
+ *             @size_t tsz@ = length of tag                            \
+ *                                                                     \
+ * Returns:    @+1@ for complete success; @0@ if tag verification      \
+ *             failed; @-1@ for other kinds of errors.                 \
+ *                                                                     \
+ * Use:                Completes an OCB1 decryption operation.  The @aad@      \
+ *             pointer may be null if there is no additional           \
+ *             authenticated data.  OCB1 delays output, so this will   \
+ *             cause any remaining buffered ciphertext to be decrypted \
+ *             and written to @dst@.  Anyway, the function will fail   \
+ *             if the output buffer is broken.                         \
+ */                                                                    \
+                                                                       \
+int pre##_ocb1decryptdone(pre##_ocb1ctx *ctx,                          \
+                         const pre##_ocb1aadctx *aad, buf *dst,        \
+                         const void *tag, size_t tsz)                  \
+{                                                                      \
+  assert(tsz <= PRE##_BLKSZ);                                          \
+  if (pre##_ocb1encdecfinal(ctx, aad, dst, 0)) return (-1);            \
+  else if (ct_memeq(tag, ctx->b, tsz)) return (+1);                    \
+  else return (0);                                                     \
+}                                                                      \
+                                                                       \
+/* --- Generic AEAD interface --- */                                   \
+                                                                       \
+typedef struct gactx {                                                 \
+  gaead_aad a;                                                         \
+  pre##_ocb1aadctx aad;                                                        \
+} gactx;                                                               \
+                                                                       \
+static gaead_aad *gadup(const gaead_aad *a)                                    \
+  { gactx *aad = S_CREATE(gactx); *aad = *(gactx *)a; return (&aad->a); } \
+                                                                       \
+static void gahash(gaead_aad *a, const void *h, size_t hsz)            \
+  { gactx *aad = (gactx *)a; pre##_ocb1aadhash(&aad->aad, h, hsz); }   \
+                                                                       \
+static void gadestroy(gaead_aad *a)                                    \
+  { gactx *aad = (gactx *)a; BURN(*aad); S_DESTROY(aad); }             \
+                                                                       \
+static const gaead_aadops gaops =                                      \
+  { &pre##_ocb1, gadup, gahash, gadestroy };                           \
+                                                                       \
+static gaead_aad *gaad(const pre##_ocb1key *k)                         \
+{                                                                      \
+  gactx *aad = S_CREATE(gactx);                                                \
+  aad->a.ops = &gaops;                                                 \
+  pre##_ocb1aadinit(&aad->aad, k);                                     \
+  return (&aad->a);                                                    \
+}                                                                      \
+                                                                       \
+typedef struct gectx {                                                 \
+  gaead_enc e;                                                         \
+  pre##_ocb1ctx ctx;                                                   \
+} gectx;                                                               \
+                                                                       \
+static gaead_aad *geaad(gaead_enc *e)                                  \
+  { gectx *enc = (gectx *)e; return (gaad(&enc->ctx.k)); }             \
+                                                                       \
+static int gereinit(gaead_enc *e, const void *n, size_t nsz,           \
+                    size_t hsz, size_t msz, size_t tsz)                \
+{                                                                      \
+  gectx *enc = (gectx *)e;                                             \
+  return (pre##_ocb1reinit(&enc->ctx, n, nsz));                                \
+}                                                                      \
+                                                                       \
+static int geenc(gaead_enc *e, const void *m, size_t msz, buf *b)      \
+{                                                                      \
+  gectx *enc = (gectx *)e;                                             \
+  return (pre##_ocb1encrypt(&enc->ctx, m, msz, b));                    \
+}                                                                      \
+                                                                       \
+static int gedone(gaead_enc *e, const gaead_aad *a,                    \
+                 buf *b, void *t, size_t tsz)                          \
+{                                                                      \
+  gectx *enc = (gectx *)e; gactx *aad = (gactx *)a;                    \
+  assert(!a || a->ops == &gaops);                                      \
+  return (pre##_ocb1encryptdone(&enc->ctx, a ? &aad->aad : 0, b, t, tsz)); \
+}                                                                      \
+                                                                       \
+static void gedestroy(gaead_enc *e)                                    \
+  { gectx *enc = (gectx *)e; BURN(*enc); S_DESTROY(enc); }             \
+                                                                       \
+static const gaead_encops geops =                                      \
+  { &pre##_ocb1, geaad, gereinit, geenc, gedone, gedestroy };          \
+                                                                       \
+typedef struct gdctx {                                                 \
+  gaead_dec d;                                                         \
+  pre##_ocb1ctx ctx;                                                   \
+} gdctx;                                                               \
+                                                                       \
+static gaead_aad *gdaad(gaead_dec *d)                                  \
+  { gdctx *dec = (gdctx *)d; return (gaad(&dec->ctx.k)); }             \
+                                                                       \
+static int gdreinit(gaead_dec *d, const void *n, size_t nsz,           \
+                    size_t hsz, size_t csz, size_t tsz)                \
+{                                                                      \
+  gdctx *dec = (gdctx *)d;                                             \
+  return (pre##_ocb1reinit(&dec->ctx, n, nsz));                                \
+}                                                                      \
+                                                                       \
+static int gddec(gaead_dec *d, const void *c, size_t csz, buf *b)      \
+{                                                                      \
+  gdctx *dec = (gdctx *)d;                                             \
+  return (pre##_ocb1decrypt(&dec->ctx, c, csz, b));                    \
+}                                                                      \
+                                                                       \
+static int gddone(gaead_dec *d, const gaead_aad *a,                    \
+                 buf *b, const void *t, size_t tsz)                    \
+{                                                                      \
+  gdctx *dec = (gdctx *)d; gactx *aad = (gactx *)a;                    \
+  assert(!a || a->ops == &gaops);                                      \
+  return (pre##_ocb1decryptdone(&dec->ctx, a ? &aad->aad : 0, b, t, tsz)); \
+}                                                                      \
+                                                                       \
+static void gddestroy(gaead_dec *d)                                    \
+  { gdctx *dec = (gdctx *)d; BURN(*dec); S_DESTROY(dec); }             \
+                                                                       \
+static const gaead_decops gdops =                                      \
+  { &pre##_ocb1, gdaad, gdreinit, gddec, gddone, gddestroy };          \
+                                                                       \
+typedef struct gkctx {                                                 \
+  gaead_key k;                                                         \
+  pre##_ocb1key key;                                                   \
+} gkctx;                                                               \
+                                                                       \
+static gaead_aad *gkaad(const gaead_key *k)                            \
+  { gkctx *key = (gkctx *)k; return (gaad(&key->key)); }               \
+                                                                       \
+static gaead_enc *gkenc(const gaead_key *k, const void *n, size_t nsz, \
+                       size_t hsz, size_t msz, size_t tsz)             \
+{                                                                      \
+  gkctx *key = (gkctx *)k;                                             \
+  gectx *enc = S_CREATE(gectx);                                                \
+                                                                       \
+  enc->e.ops = &geops;                                                 \
+  if (pre##_ocb1init(&enc->ctx, &key->key, n, nsz))                    \
+    { gedestroy(&enc->e); return (0); }                                        \
+  return (&enc->e);                                                    \
+}                                                                      \
+                                                                       \
+static gaead_dec *gkdec(const gaead_key *k, const void *n, size_t nsz, \
+                       size_t hsz, size_t csz, size_t tsz)             \
+{                                                                      \
+  gkctx *key = (gkctx *)k;                                             \
+  gdctx *dec = S_CREATE(gdctx);                                                \
+                                                                       \
+  dec->d.ops = &gdops;                                                 \
+  if (pre##_ocb1init(&dec->ctx, &key->key, n, nsz))                    \
+    { gddestroy(&dec->d); return (0); }                                        \
+  return (&dec->d);                                                    \
+}                                                                      \
+                                                                       \
+static void gkdestroy(gaead_key *k)                                    \
+  { gkctx *key = (gkctx *)k; BURN(*key); S_DESTROY(key); }             \
+                                                                       \
+static const gaead_keyops gkops =                                      \
+  { &pre##_ocb1, gkaad, gkenc, gkdec, gkdestroy };                     \
+                                                                       \
+static gaead_key *gckey(const void *k, size_t ksz)                     \
+{                                                                      \
+  gkctx *key = S_CREATE(gkctx);                                                \
+  key->k.ops = &gkops;                                                 \
+  pre##_ocb1setkey(&key->key, k, ksz);                                 \
+  return (&key->k);                                                    \
+}                                                                      \
+                                                                       \
+const gcaead pre##_ocb1 = {                                            \
+  name "-ocb1",                                                                \
+  pre##_keysz, pre##_ocb1noncesz, pre##_ocb1tagsz,                     \
+  PRE##_BLKSZ, PRE##_BLKSZ, 0, 0,                                      \
+  gckey                                                                        \
+};                                                                     \
+                                                                       \
+OCB1_TESTX(PRE, pre, name, fname)
+
+/*----- Test rig ----------------------------------------------------------*/
+
+#define OCB1_TEST(PRE, pre) OCB1_TESTX(PRE, pre, #pre, #pre)
+
+/* --- @OCB1_TEST@ --- *
+ *
+ * Arguments:  @PRE, pre@ = prefixes for the underlying block cipher
+ *
+ * Use:                Standard test rig for OCB1 functions.
+ */
+
+#ifdef TEST_RIG
+
+#include <stdio.h>
+
+#include <mLib/dstr.h>
+#include <mLib/quis.h>
+#include <mLib/testrig.h>
+
+#define OCB1_TESTX(PRE, pre, name, fname)                              \
+                                                                       \
+static int ocb1verify(dstr *v)                                         \
+{                                                                      \
+  pre##_ocb1key key;                                                   \
+  pre##_ocb1aadctx aad;                                                        \
+  pre##_ocb1ctx ctx;                                                   \
+  int ok = 1, win;                                                     \
+  int i;                                                               \
+  octet *p;                                                            \
+  int szs[] = { 1, 7, 192, -1, 0 }, *ip;                               \
+  size_t hsz, msz;                                                     \
+  dstr d = DSTR_INIT, t = DSTR_INIT;                                   \
+  buf b;                                                               \
+                                                                       \
+  dstr_ensure(&d, v[4].len > v[3].len ? v[4].len : v[3].len);          \
+  dstr_ensure(&t, v[5].len); t.len = v[5].len;                         \
+                                                                       \
+  pre##_ocb1setkey(&key, v[0].buf, v[0].len);                          \
+                                                                       \
+  for (ip = szs; *ip; ip++) {                                          \
+                                                                       \
+    pre##_ocb1init(&ctx, &key, (octet *)v[1].buf, v[1].len);           \
+                                                                       \
+    i = *ip;                                                           \
+    hsz = v[2].len;                                                    \
+    if (i == -1) i = hsz;                                              \
+    if (i > hsz) continue;                                             \
+    p = (octet *)v[2].buf;                                             \
+    pre##_ocb1aadinit(&aad, &key);                                     \
+    while (hsz) {                                                      \
+      if (i > hsz) i = hsz;                                            \
+      pre##_ocb1aadhash(&aad, p, i);                                   \
+      p += i; hsz -= i;                                                        \
+    }                                                                  \
+                                                                       \
+    buf_init(&b, d.buf, d.sz);                                         \
+    i = *ip;                                                           \
+    msz = v[3].len;                                                    \
+    if (i == -1) i = msz;                                              \
+    if (i > msz) continue;                                             \
+    p = (octet *)v[3].buf;                                             \
+    while (msz) {                                                      \
+      if (i > msz) i = msz;                                            \
+      if (pre##_ocb1encrypt(&ctx, p, i, &b)) {                         \
+       puts("!! ocb1encrypt reports failure");                         \
+       goto fail_enc;                                                  \
+      }                                                                        \
+      p += i; msz -= i;                                                        \
+    }                                                                  \
+                                                                       \
+    if (pre##_ocb1encryptdone(&ctx, &aad, &b, (octet *)t.buf, t.len)) {        \
+      puts("!! ocb1encryptdone reports failure");                      \
+      goto fail_enc;                                                   \
+    }                                                                  \
+    d.len = BLEN(&b);                                                  \
+                                                                       \
+    if (d.len != v[4].len ||                                           \
+       memcmp(d.buf, v[4].buf, v[4].len) != 0 ||                       \
+       memcmp(t.buf, v[5].buf, v[5].len) != 0) {                       \
+    fail_enc:                                                          \
+      printf("\nfail encrypt:\n\tstep = %i", *ip);                     \
+      fputs("\n\tkey = ", stdout); type_hex.dump(&v[0], stdout);       \
+      fputs("\n\tnonce = ", stdout); type_hex.dump(&v[1], stdout);     \
+      fputs("\n\theader = ", stdout); type_hex.dump(&v[2], stdout);    \
+      fputs("\n\tmessage = ", stdout); type_hex.dump(&v[3], stdout);   \
+      fputs("\n\texp ct = ", stdout); type_hex.dump(&v[4], stdout);    \
+      fputs("\n\tcalc ct = ", stdout); type_hex.dump(&d, stdout);      \
+      fputs("\n\texp tag = ", stdout); type_hex.dump(&v[5], stdout);   \
+      fputs("\n\tcalc tag = ", stdout); type_hex.dump(&t, stdout);     \
+      putchar('\n');                                                   \
+      ok = 0;                                                          \
+    }                                                                  \
+                                                                       \
+    pre##_ocb1init(&ctx, &key, (octet *)v[1].buf, v[1].len);           \
+                                                                       \
+    buf_init(&b, d.buf, d.sz);                                         \
+    i = *ip;                                                           \
+    msz = v[4].len;                                                    \
+    if (i == -1) i = msz;                                              \
+    if (i > msz) continue;                                             \
+    p = (octet *)v[4].buf;                                             \
+    while (msz) {                                                      \
+      if (i > msz) i = msz;                                            \
+      if (pre##_ocb1decrypt(&ctx, p, i, &b)) {                         \
+       puts("!! ocb1decrypt reports failure");                         \
+       win = 0; goto fail_dec;                                         \
+      }                                                                        \
+      p += i; msz -= i;                                                        \
+    }                                                                  \
+                                                                       \
+    win = pre##_ocb1decryptdone(&ctx, &aad, &b,                                \
+                              (octet *)v[5].buf, v[5].len);            \
+    if (win < 0) {                                                     \
+      puts("!! ocb1decryptdone reports failure");                      \
+      goto fail_dec;                                                   \
+    }                                                                  \
+    d.len = BLEN(&b);                                                  \
+                                                                       \
+    if (d.len != v[3].len || !win ||                                   \
+       memcmp(d.buf, v[3].buf, v[3].len) != 0) {                       \
+    fail_dec:                                                          \
+      printf("\nfail decrypt:\n\tstep = %i", *ip);                     \
+      fputs("\n\tkey = ", stdout); type_hex.dump(&v[0], stdout);       \
+      fputs("\n\tnonce = ", stdout); type_hex.dump(&v[1], stdout);     \
+      fputs("\n\theader = ", stdout); type_hex.dump(&v[2], stdout);    \
+      fputs("\n\tciphertext = ", stdout); type_hex.dump(&v[4], stdout);        \
+      fputs("\n\texp pt = ", stdout); type_hex.dump(&v[3], stdout);    \
+      fputs("\n\tcalc pt = ", stdout); type_hex.dump(&d, stdout);      \
+      fputs("\n\ttag = ", stdout); type_hex.dump(&v[5], stdout);       \
+      printf("\n\tverify %s", win ? "ok" : "FAILED");                  \
+      putchar('\n');                                                   \
+      ok = 0;                                                          \
+    }                                                                  \
+  }                                                                    \
+                                                                       \
+  dstr_destroy(&d); dstr_destroy(&t);                                  \
+  return (ok);                                                         \
+}                                                                      \
+                                                                       \
+static test_chunk aeaddefs[] = {                                       \
+  { name "-ocb1", ocb1verify,                                          \
+    { &type_hex, &type_hex, &type_hex, &type_hex,                      \
+      &type_hex, &type_hex, 0 } },                                     \
+  { 0, 0, { 0 } }                                                      \
+};                                                                     \
+                                                                       \
+int main(int argc, char *argv[])                                       \
+{                                                                      \
+  ego(argv[0]);                                                                \
+  test_run(argc, argv, aeaddefs, SRCDIR"/t/" fname);                   \
+  return (0);                                                          \
+}
+
+#else
+#  define OCB1_TESTX(PRE, pre, name, fname)
+#endif
+
+/*----- That's all, folks -------------------------------------------------*/
+
+#ifdef __cplusplus
+  }
+#endif
+
+#endif
diff --git a/symm/ocb1.h b/symm/ocb1.h
new file mode 100644 (file)
index 0000000..42cfb81
--- /dev/null
@@ -0,0 +1,345 @@
+/* -*-c-*-
+ *
+ * The OCB1 authenticated encryption mode
+ *
+ * (c) 2018 Straylight/Edgeware
+ */
+
+/*----- Licensing notice --------------------------------------------------*
+ *
+ * This file is part of Catacomb.
+ *
+ * Catacomb is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Catacomb is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with Catacomb.  If not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+/*----- Notes on OCB1 -----------------------------------------------------*
+ *
+ * OCB was designed in 2001 by Phillip Rogaway, with Mihir Bellare and John
+ * Black, as a blockcipher-based authenticated encryption scheme which can
+ * operate on multiple message blocks in parallel and requires only a single
+ * blockcipher application per message block.  It refines Charanjit Jutla's
+ * earlier IAPM, which was the first such mode to be proven secure.  This
+ * version implements the `OCB.PMAC' mode described by Rogaway in 2002, which
+ * combines the original OCB with PMAC (Rogaway and Black, 2002) into a
+ * single authenticated-encryption with associated-data (AEAD) scheme.
+ *
+ * The patent situation on these efficient authenticated encryption schemes
+ * is fraught.  IBM hold two patents on Jutla's pioneering work on `IACBC'
+ * and `IAPM' which can apply (a third was filed at least six years too
+ * late), and Virgil Gligor and Pompiliu Donescu hold patents on their `XECB'
+ * and `XCBC' modes; these may or may not apply to OCB.  Rogaway himself
+ * holds US patents on various versions of OCB, but has issued free licences
+ * for free (`open source') software, and for all non-military use.  I think
+ * Catacomb's implementation of OCB falls within the scope of the former
+ * licence.
+ *
+ * Confusingly, Rogaway's 2004 paper `Efficient Instantiations of Tweakable
+ * Blockciphers and Refinements to Modes OCB and PMAC' named the new versions
+ * of those modes `OCB1' and `PMAC1'.  The 2011 paper by Krovetz and Rogaway,
+ * `The Software Performance of Authenticated-Encryption Modes' renamed the
+ * original 2001 version of OCB as `OCB1', and the 2004 version `OCB2', and
+ * introduced a new `OCB3'.  I've decided to follow and extend the 2011
+ * naming, so `OCB1' refers to the 2001 OCB; the 2004 version would be
+ * `OCB2'.
+ *
+ * The OCB specification is clear about how OCB applies to arbitrary block
+ * sizes.
+ *
+ * OCB1 is a fairly well-behaved AEAD mode.  It doesn't require
+ * precommentment to any lengths, and allows header data to be processed
+ * independently of any message.  On the other hand, it only accepts nonces
+ * the same size as the underlying blockcipher's block size, and it buffers
+ * up to a whole block's worth of data internally, which somewhat complicates
+ * streaming.
+ */
+
+#ifndef CATACOMB_OCB1_H
+#define CATACOMB_OCB1_H
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+/*----- Header files ------------------------------------------------------*/
+
+#include <stddef.h>
+
+#include <mLib/bits.h>
+#include <mLib/buf.h>
+
+#ifndef CATACOMB_GAEAD_H
+#  include "gaead.h"
+#endif
+
+#ifndef CATACOMB_OCB_H
+#  include "ocb.h"
+#endif
+
+#ifndef CATACOMB_RSVR_H
+#  include "rsvr.h"
+#endif
+
+/*----- Macros ------------------------------------------------------------*/
+
+/* --- @OCB1_DECL@ --- *
+ *
+ * Arguments:  @PRE@, @pre@ = prefixes for the underlying block cipher
+ *
+ * Use:                Creates declarations for OCB1 message-authentication mode.
+ */
+
+#define OCB1_STRUCTS(PRE, pre, keyty, aadty)                           \
+                                                                       \
+typedef struct keyty {                                                 \
+  pre##_ctx ctx;                       /* Underlying cipher context */ \
+  uint32 lxinv[PRE##_BLKSZ/4];         /* Final-block mask */          \
+  uint32 lmask[OCB_NCALC][PRE##_BLKSZ/4]; /* Precalculated masks */    \
+} keyty;                                                               \
+                                                                       \
+typedef struct aadty {                                                 \
+  keyty k;                             /* Processed key material */    \
+  uint32 o[PRE##_BLKSZ/4];             /* Current offset */            \
+  uint32 a[PRE##_BLKSZ/4];             /* Accumulator state */         \
+  octet b[PRE##_BLKSZ];                        /* Input buffer */              \
+  unsigned long i;                     /* Block counter */             \
+  unsigned off;                                /* Offset into buffered data */ \
+} aadty;
+
+#define OCB1_DECL(PRE, pre)                                            \
+                                                                       \
+OCB1_STRUCTS(PRE, pre, pre##_ocb1key, pre##_ocb1aadctx)                        \
+                                                                       \
+typedef struct pre##_ocb1ctx {                                         \
+  /* This is the same as @pre_ocb1aadctx@ above, but the two are       \
+   * logically distinct and shouldn't be muddled up.                   \
+   */                                                                  \
+                                                                       \
+  pre##_ocb1key k;                     /* Processed key material */    \
+  uint32 o[PRE##_BLKSZ/4];             /* Current offset */            \
+  uint32 a[PRE##_BLKSZ/4];             /* Accumulator state */         \
+  octet b[PRE##_BLKSZ];                        /* Input buffer */              \
+  unsigned long i;                     /* Block counter */             \
+  unsigned off;                                /* Offset into buffered data */ \
+} pre##_ocb1ctx;                                                       \
+                                                                       \
+extern const rsvr_policy pre##_ocb1policy;                             \
+                                                                       \
+extern const octet pre##_ocb1noncesz[], pre##_ocb1tagsz[];             \
+                                                                       \
+/* --- @pre_ocb1setkey@ --- *                                          \
+ *                                                                     \
+ * Arguments:  @pre_ocb1key *key@ = pointer to key block to fill in    \
+ *             @const void *k@ = pointer to key material               \
+ *             @size_t ksz@ = size of key material                     \
+ *                                                                     \
+ * Returns:    ---                                                     \
+ *                                                                     \
+ * Use:                Initializes an OCB1 key block.                          \
+ */                                                                    \
+                                                                       \
+extern void pre##_ocb1setkey(pre##_ocb1key */*key*/,                   \
+                            const void */*k*/, size_t /*ksz*/);        \
+                                                                       \
+/* --- @pre_ocb1aadinit@ --- *                                         \
+ *                                                                     \
+ * Arguments:  @pre_ocb1aadctx *aad@ = pointer to AAD context          \
+ *             @const pre_ocb1key *key@ = pointer to key block         \
+ *                                                                     \
+ * Returns:    ---                                                     \
+ *                                                                     \
+ * Use:                Initializes an OCB1 AAD (`additional authenticated      \
+ *             data') context associated with a given key.  AAD        \
+ *             contexts can be copied and/or reused, saving time if    \
+ *             the AAD for number of messages has a common prefix.     \
+ *                                                                     \
+ *             The @key@ doesn't need to be kept around, though        \
+ *             usually there'll at least be another copy in some OCB1  \
+ *             operation context because the AAD on its own isn't much \
+ *             good.                                                   \
+ */                                                                    \
+                                                                       \
+extern void pre##_ocb1aadinit(pre##_ocb1aadctx */*aad*/,               \
+                             const pre##_ocb1key */*key*/);            \
+                                                                       \
+/* --- @pre_ocb1aadhash@ --- *                                         \
+ *                                                                     \
+ * Arguments:  @pre_ocb1aadctx *aad@ = pointer to AAD context          \
+ *             @const void *p@ = pointer to AAD material               \
+ *             @size_t sz@ = length of AAD material                    \
+ *                                                                     \
+ * Returns:    ---                                                     \
+ *                                                                     \
+ * Use:                Feeds AAD into the context.                             \
+ */                                                                    \
+                                                                       \
+extern void pre##_ocb1aadhash(pre##_ocb1aadctx */*aad*/,               \
+                             const void */*p*/, size_t /*sz*/);        \
+                                                                       \
+/* --- @pre_ocb1aadtag@ --- *                                          \
+ *                                                                     \
+ * Arguments:  @const pre_ocb1aadctx *aad@ = pointer to context block  \
+ *             @uint32 *u@ = where to write the tag                    \
+ *                                                                     \
+ * Returns:    ---                                                     \
+ *                                                                     \
+ * Use:                Finishes processing AAD and produces a tag which can be \
+ *             mixed with an OCB1 checksum.  This function is exposed  \
+ *             for internal reasons and is not expected to be          \
+ *             generally useful.                                       \
+ */                                                                    \
+                                                                       \
+extern void pre##_ocb1aadtag(const pre##_ocb1aadctx */*aad*/,          \
+                            uint32 */*t*/);                            \
+                                                                       \
+/* --- @pre_ocb1init@ --- *                                            \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to OCB1 context            \
+ *             @const pre_ocb1key *key@ = pointer to key block         \
+ *             @const void *n@ = pointer to nonce                      \
+ *             @size_t nsz@ = size of nonce                            \
+ *                                                                     \
+ * Returns:    Zero on success, @-1@ if the nonce length is bad.       \
+ *                                                                     \
+ * Use:                Initialize an OCB1 operation context with a given key.  \
+ *                                                                     \
+ *             The original key needn't be kept around any more.       \
+ */                                                                    \
+                                                                       \
+extern int pre##_ocb1init(pre##_ocb1ctx */*ctx*/,                      \
+                         const pre##_ocb1key */*k*/,                   \
+                         const void */*n*/, size_t /*nsz*/);           \
+                                                                       \
+/* --- @pre_ocb1reinit@ --- *                                          \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to OCB1 context            \
+ *             @const void *n@ = pointer to nonce                      \
+ *             @size_t nsz@ = size of nonce                            \
+ *                                                                     \
+ * Returns:    Zero on success, @-1@ if the nonce length is bad.       \
+ *                                                                     \
+ * Use:                Reinitialize an OCB1 operation context, changing the    \
+ *             nonce.                                                  \
+ */                                                                    \
+                                                                       \
+extern int pre##_ocb1reinit(pre##_ocb1ctx */*ctx*/,                    \
+                           const void */*n*/, size_t /*nsz*/);         \
+                                                                       \
+/* --- @pre_ocb1encrypt@ --- *                                         \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to OCB1 operation context  \
+ *             @const void *src@ = pointer to plaintext message chunk  \
+ *             @size_t sz@ = size of the plaintext                     \
+ *             @buf *dst@ = a buffer to write the ciphertext to        \
+ *                                                                     \
+ * Returns:    Zero on success; @-1@ on failure.                       \
+ *                                                                     \
+ * Use:                Encrypts a chunk of a plaintext message, writing a      \
+ *             chunk of ciphertext to the output buffer and updating   \
+ *             the operation state.                                    \
+ *                                                                     \
+ *             Note that OCB1 delays output if its input is not a      \
+ *             whole number of blocks.  This means that the output     \
+ *             might be smaller or larger the input by up to the block \
+ *             size.                                                   \
+ */                                                                    \
+                                                                       \
+extern int pre##_ocb1encrypt(pre##_ocb1ctx */*ctx*/,                   \
+                            const void */*src*/, size_t /*sz*/,        \
+                            buf */*dst*/);                             \
+                                                                       \
+/* --- @pre_ocb1decrypt@ --- *                                         \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to OCB1 operation context  \
+ *             @const void *src@ = pointer to ciphertext message chunk \
+ *             @size_t sz@ = size of the ciphertext                    \
+ *             @buf *dst@ = a buffer to write the plaintext to         \
+ *                                                                     \
+ * Returns:    Zero on success; @-1@ on failure.                       \
+ *                                                                     \
+ * Use:                Decrypts a chunk of a ciphertext message, writing a     \
+ *             chunk of plaintext to the output buffer and updating    \
+ *             the operation state.                                    \
+ *                                                                     \
+ *             Note that OCB1 delays output if its input is not a      \
+ *             whole number of blocks.  This means that the output     \
+ *             might be smaller or larger the input by up to the block \
+ *             size.                                                   \
+ */                                                                    \
+                                                                       \
+extern int pre##_ocb1decrypt(pre##_ocb1ctx */*ctx*/,                   \
+                            const void */*src*/, size_t /*sz*/,        \
+                            buf */*dst*/);                             \
+                                                                       \
+/* --- @pre_ocb1encryptdone@ --- *                                     \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to an OCB1 context         \
+ *             @const pre_ocb1aadctx *aad@ = pointer to AAD context,   \
+ *                     or null                                         \
+ *             @buf *dst@ = buffer for remaining ciphertext            \
+ *             @void *tag@ = where to write the tag                    \
+ *             @size_t tsz@ = length of tag to store                   \
+ *                                                                     \
+ * Returns:    Zero on success; @-1@ on failure.                       \
+ *                                                                     \
+ * Use:                Completes an OCB1 encryption operation.  The @aad@      \
+ *             pointer may be null if there is no additional           \
+ *             authenticated data.  OCB1 delays output, so this will   \
+ *             cause any remaining buffered plaintext to be encrypted  \
+ *             and written to @dst@.  Anyway, the function will fail   \
+ *             if the output buffer is broken.                         \
+ */                                                                    \
+                                                                       \
+extern int pre##_ocb1encryptdone(pre##_ocb1ctx */*ctx*/,               \
+                                const pre##_ocb1aadctx */*aad*/,       \
+                                buf */*dst*/,                          \
+                                void */*tag*/, size_t /*tsz*/);        \
+                                                                       \
+/* --- @pre_ocb1decryptdone@ --- *                                     \
+ *                                                                     \
+ * Arguments:  @pre_ocb1ctx *ctx@ = pointer to an OCB1 context         \
+ *             @const pre_ocb1aadctx *aad@ = pointer to AAD context,   \
+ *                     or null                                         \
+ *             @buf *dst@ = buffer for remaining plaintext             \
+ *             @const void *tag@ = tag to verify                       \
+ *             @size_t tsz@ = length of tag                            \
+ *                                                                     \
+ * Returns:    @+1@ for complete success; @0@ if tag verification      \
+ *             failed; @-1@ for other kinds of errors.                 \
+ *                                                                     \
+ * Use:                Completes an OCB1 decryption operation.  The @aad@      \
+ *             pointer may be null if there is no additional           \
+ *             authenticated data.  OCB1 delays output, so this will   \
+ *             cause any remaining buffered ciphertext to be decrypted \
+ *             and written to @dst@.  Anyway, the function will fail   \
+ *             if the output buffer is broken.                         \
+ */                                                                    \
+                                                                       \
+extern int pre##_ocb1decryptdone(pre##_ocb1ctx */*ctx*/,               \
+                                const pre##_ocb1aadctx */*aad*/,       \
+                                buf */*dst*/,                          \
+                                const void */*tag*/, size_t /*tsz*/);  \
+                                                                       \
+/* --- Generic AEAD interface --- */                                   \
+                                                                       \
+extern const gcaead pre##_ocb1;
+
+/*----- That's all, folks -------------------------------------------------*/
+
+#ifdef __cplusplus
+  }
+#endif
+
+#endif
diff --git a/symm/pmac1-def.h b/symm/pmac1-def.h
new file mode 100644 (file)
index 0000000..4b0da04
--- /dev/null
@@ -0,0 +1,371 @@
+/* -*-c-*-
+ *
+ * The PMAC1 message authentication mode
+ *
+ * (c) 2018 Straylight/Edgeware
+ */
+
+/*----- Licensing notice --------------------------------------------------*
+ *
+ * This file is part of Catacomb.
+ *
+ * Catacomb is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Catacomb is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with Catacomb.  If not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+#ifndef CATACOMB_PMAC1_DEF_H
+#define CATACOMB_PMAC1_DEF_H
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+/*----- Header files ------------------------------------------------------*/
+
+#include <stddef.h>
+
+#include <mLib/bits.h>
+#include <mLib/sub.h>
+
+#ifndef CATACOMB_ARENA_H
+#  include "arena.h"
+#endif
+
+#ifndef CATACOMB_BLKC_H
+#  include "blkc.h"
+#endif
+
+#ifndef CATACOMB_PARANOIA_H
+#  include "paranoia.h"
+#endif
+
+#ifndef CATACOMB_RSVR_H
+#  include "rsvr.h"
+#endif
+
+/*----- Macros ------------------------------------------------------------*/
+
+/* --- @PMAC1_DEF@ --- *
+ *
+ * Arguments:  @PRE@, @pre@ = prefixes for the underlying block cipher
+ *
+ * Use:                Creates an implementation for the PMAC1 message-
+ *             authentication mode.
+ */
+
+#define PMAC1_DEF(PRE, pre) PMAC1_DEFX(PRE, pre, #pre, #pre)
+
+#define PMAC1_DEFX(PRE, pre, name, fname)                              \
+                                                                       \
+OCB1_DECL(PRE, pre)                                                    \
+                                                                       \
+const rsvr_policy pre##_ocb1policy =                                   \
+  { RSVRF_FULL, PRE##_BLKSZ, PRE##_BLKSZ };                            \
+                                                                       \
+/* --- @pre_ocb1setkey@, @pre_pmac1setkey@ --- *                       \
+ *                                                                     \
+ * Arguments:  @pre_ocb1key *key@ = pointer to OCB1/PMAC1 key block    \
+ *             @ocnst void *k@ = pointer to key material               \
+ *             @size_t ksz@ = size of key material                     \
+ *                                                                     \
+ * Returns:    ---                                                     \
+ *                                                                     \
+ * Use:                Initializes a OCB1/PMAC1 key.  This can be used for     \
+ *             several encryption and/or MAC operations.               \
+ */                                                                    \
+                                                                       \
+void pre##_ocb1setkey(pre##_ocb1key *key, const void *k, size_t ksz)   \
+{                                                                      \
+  unsigned i;                                                          \
+                                                                       \
+  pre##_init(&key->ctx, k, ksz);                                       \
+  BLKC_ZERO(PRE, key->lmask[0]);                                       \
+  pre##_eblk(&key->ctx, key->lmask[0], key->lmask[0]);                 \
+  BLKC_BRSHIFT(PRE, IRRED, key->lxinv, key->lmask[0]);                 \
+  for (i = 1; i < OCB_NCALC; i++)                                      \
+    BLKC_BLSHIFT(PRE, IRRED, key->lmask[i], key->lmask[i - 1]);                \
+}                                                                      \
+void pre##_pmac1setkey(pre##_pmac1key *key, const void *k, size_t ksz) \
+  { pre##_ocb1setkey((pre##_ocb1key *)key, k, ksz); }                  \
+                                                                       \
+/* --- @pre_ocb1aadinit@, @pre_pmac1init --- *                         \
+ *                                                                     \
+ * Arguments:  @pre_ocb1aadctx *aad@ = pointer to context block        \
+ *             @pre_ocb1key *k@ = key block                            \
+ *                                                                     \
+ * Returns:    ---                                                     \
+ *                                                                     \
+ * Use:                Initializes an OCB1 AAD (`additional authenticated      \
+ *             data') or PMAC1 context associated witha a given key.   \
+ *             AAD contexts can be copied and/or reused, saving time   \
+ *             if the AAD for a number of messages has a common        \
+ *             prefix.                                                 \
+ *                                                                     \
+ *             The @key@ doesn't need to be kept around.               \
+ */                                                                    \
+                                                                       \
+void pre##_ocb1aadinit(pre##_ocb1aadctx *aad, const pre##_ocb1key *k)  \
+{                                                                      \
+  aad->k = *k;                                                         \
+  aad->off = 0; aad->i = 1;                                            \
+  BLKC_ZERO(PRE, aad->a);                                              \
+  BLKC_ZERO(PRE, aad->o);                                              \
+}                                                                      \
+void pre##_pmac1init(pre##_pmac1ctx *ctx, const pre##_pmac1key *k)     \
+  { pre##_ocb1aadinit((pre##_ocb1aadctx *)ctx, (pre##_ocb1key *)k); }  \
+                                                                       \
+/* --- @pre_ocb1aadhash@, @pre_pmac1hash@ --- *                                \
+ *                                                                     \
+ * Arguments:  @pre_ocb1aadctx *aad@ = pointer to context block        \
+ *             @ocnst void *p@ = pointer to message buffer             \
+ *             @size_t sz@ = size of message buffer                    \
+ *                                                                     \
+ * Returns:    ---                                                     \
+ *                                                                     \
+ * Use:                Hashes some AAD input data.                             \
+ */                                                                    \
+                                                                       \
+void pre##_ocb1aadhash(pre##_ocb1aadctx *aad, const void *p, size_t sz)        \
+{                                                                      \
+  rsvr_state st;                                                       \
+  uint32 t[PRE##_BLKSZ/4];                                             \
+  const octet *q;                                                      \
+                                                                       \
+  rsvr_setup(&st, &pre##_ocb1policy, aad->b, &aad->off, p, sz);                \
+  RSVR_DO(&st) while ((q = RSVR_NEXT(&st, PRE##_BLKSZ)) != 0) {                \
+    OCB_OFFSET(PRE, aad->o, aad->k.lmask, aad->i++);                   \
+    BLKC_LOAD(PRE, t, q); BLKC_XMOVE(PRE, t, aad->o);                  \
+    pre##_eblk(&aad->k.ctx, t, t);                                     \
+    BLKC_XMOVE(PRE, aad->a, t);                                                \
+  }                                                                    \
+}                                                                      \
+void pre##_pmac1hash(pre##_pmac1ctx *ctx, const void *p, size_t sz)    \
+  { pre##_ocb1aadhash((pre##_ocb1aadctx *)ctx, p, sz); }               \
+                                                                       \
+/* --- @pre_ocb1aadtag@ --- *                                          \
+ *                                                                     \
+ * Arguments:  @const pre_ocb1aadctx *aad@ = pointer to context block  \
+ *             @uint32 *u@ = where to write the tag                    \
+ *                                                                     \
+ * Returns:    ---                                                     \
+ *                                                                     \
+ * Use:                Finishes processing AAD and produces a tag which can be \
+ *             mixed with an OCB1 checksum.  This function is exposed  \
+ *             for internal reasons and is not expected to be          \
+ *             generally useful.                                       \
+ */                                                                    \
+                                                                       \
+void pre##_ocb1aadtag(const pre##_ocb1aadctx *aad, uint32 *t)          \
+{                                                                      \
+  octet b[PRE##_BLKSZ];                                                        \
+                                                                       \
+  BLKC_MOVE(PRE, t, aad->a);                                           \
+  if (aad->off == PRE##_BLKSZ) {                                       \
+    BLKC_XLOAD(PRE, t, aad->b);                                                \
+    BLKC_XMOVE(PRE, t, aad->k.lxinv);                                  \
+  } else {                                                             \
+    memcpy(b, aad->b, aad->off); b[aad->off] = 0x80;                   \
+    memset(b + aad->off + 1, 0, PRE##_BLKSZ - aad->off - 1);           \
+    BLKC_XLOAD(PRE, t, b);                                             \
+  }                                                                    \
+  pre##_eblk(&aad->k.ctx, t, t);                                       \
+}                                                                      \
+                                                                       \
+/* --- @pre_pmac1done@ --- *                                           \
+ *                                                                     \
+ * Arguments:  @pre_pmac1ctx *ctx@ = pointer to context block          \
+ *             @void *t@ = where to write the tag                      \
+ *                                                                     \
+ * Returns:    ---                                                     \
+ *                                                                     \
+ * Use:                Finishes a MAC operation and produces the tag.  The     \
+ *             context is clobbered and can't be used for anything     \
+ *             useful any more.                                        \
+ */                                                                    \
+                                                                       \
+void pre##_pmac1done(pre##_pmac1ctx *ctx, void *t)                     \
+{                                                                      \
+  uint32 u[PRE##_BLKSZ];                                               \
+  pre##_ocb1aadtag((pre##_ocb1aadctx *)ctx, u); BLKC_STORE(PRE, t, u); \
+}                                                                      \
+                                                                       \
+/* --- Generic MAC interface --- */                                    \
+                                                                       \
+static const gmac_ops gkops;                                           \
+static const ghash_ops gops;                                           \
+                                                                       \
+typedef struct gkctx {                                                 \
+  gmac m;                                                              \
+  pre##_pmac1key k;                                                    \
+} gkctx;                                                               \
+                                                                       \
+typedef struct gctx {                                                  \
+  ghash h;                                                             \
+  pre##_pmac1ctx c;                                                    \
+  octet buf[PRE##_BLKSZ];                                              \
+} gctx;                                                                        \
+                                                                       \
+static ghash *gkinit(gmac *m)                                          \
+{                                                                      \
+  gkctx *gk = (gkctx *)m;                                              \
+  gctx *g = S_CREATE(gctx);                                            \
+  g->h.ops = &gops;                                                    \
+  pre##_pmac1init(&g->c, &gk->k);                                      \
+  return (&g->h);                                                      \
+}                                                                      \
+                                                                       \
+static gmac *gkey(const void *k, size_t sz)                            \
+{                                                                      \
+  gkctx *gk = S_CREATE(gkctx);                                         \
+  gk->m.ops = &gkops;                                                  \
+  pre##_pmac1setkey(&gk->k, k, sz);                                    \
+  return (&gk->m);                                                     \
+}                                                                      \
+                                                                       \
+static void ghhash(ghash *h, const void *p, size_t sz)                 \
+  { gctx *g = (gctx *)h; pre##_pmac1hash(&g->c, p, sz); }              \
+                                                                       \
+static octet *ghdone(ghash *h, void *buf)                              \
+{                                                                      \
+  gctx *g = (gctx *)h;                                                 \
+  if (!buf) buf = g->buf;                                              \
+  pre##_pmac1done(&g->c, buf);                                         \
+  return (buf);                                                                \
+}                                                                      \
+                                                                       \
+static ghash *ghcopy(ghash *h)                                         \
+{                                                                      \
+  gctx *g = (gctx *)h;                                                 \
+  gctx *gg = S_CREATE(gctx);                                           \
+  memcpy(gg, g, sizeof(gctx));                                         \
+  return (&gg->h);                                                     \
+}                                                                      \
+                                                                       \
+static void ghdestroy(ghash *h)                                                \
+  { gctx *g = (gctx *)h; BURN(*g); S_DESTROY(g); }                     \
+                                                                       \
+static void gkdestroy(gmac *m)                                         \
+  { gkctx *gk = (gkctx *)m; BURN(*gk); S_DESTROY(gk); }                        \
+                                                                       \
+static ghash *ghinit(void)                                             \
+{                                                                      \
+  assert(((void)"Attempt to instantiate an unkeyed MAC", 0));          \
+  return (0);                                                          \
+}                                                                      \
+                                                                       \
+const gcmac pre##_pmac1 =                                              \
+  { name "-pmac1", PRE##_BLKSZ, pre##_keysz, gkey };                   \
+static const gmac_ops gkops = { &pre##_pmac1, gkinit, gkdestroy };     \
+static const gchash gch = { name "-pmac1", PRE##_BLKSZ, ghinit };      \
+static const ghash_ops gops =                                          \
+  { &gch, ghhash, ghdone, ghdestroy, ghcopy };                         \
+                                                                       \
+PMAC1_TESTX(PRE, pre, name, fname)
+
+#define PMAC1_TEST(PRE, pre) HMAC_TESTX(PRE, pre, #pre, #pre)
+
+/* --- @PMAC1_TEST@ --- *
+ *
+ * Arguments:  @PRE@, @pre@ = prefixes for the underlying block cipher
+ *
+ * Use:                Standard test rig for PMAC1 functions.
+ */
+
+#ifdef TEST_RIG
+
+#include <stdio.h>
+
+#include <mLib/dstr.h>
+#include <mLib/quis.h>
+#include <mLib/testrig.h>
+
+#define PMAC1_TESTX(PRE, pre, name, fname)                             \
+                                                                       \
+static int macverify(dstr *v)                                          \
+{                                                                      \
+  pre##_pmac1ctx cctx;                                                 \
+  pre##_pmac1key ckey;                                                 \
+  int ok = 1;                                                          \
+  int i;                                                               \
+  octet *p;                                                            \
+  int szs[] = { 1, 7, 192, -1, 0 }, *ip;                               \
+  size_t csz;                                                          \
+  dstr d;                                                              \
+                                                                       \
+  dstr_create(&d);                                                     \
+  dstr_ensure(&d, PRE##_BLKSZ);                                                \
+  d.len = PRE##_BLKSZ;                                                 \
+                                                                       \
+  pre##_pmac1setkey(&ckey, v[0].buf, v[0].len);                                \
+                                                                       \
+  for (ip = szs; *ip; ip++) {                                          \
+    i = *ip;                                                           \
+    csz = v[1].len;                                                    \
+    if (i == -1)                                                       \
+      i = csz;                                                         \
+    if (i > csz)                                                       \
+      continue;                                                                \
+    p = (octet *)v[1].buf;                                             \
+    pre##_pmac1init(&cctx, &ckey);                                     \
+    while (csz) {                                                      \
+      if (i > csz)                                                     \
+       i = csz;                                                        \
+      pre##_pmac1hash(&cctx, p, i);                                    \
+      p += i;                                                          \
+      csz -= i;                                                                \
+    }                                                                  \
+    pre##_pmac1done(&cctx, d.buf);                                     \
+    if (memcmp(d.buf, v[2].buf, PRE##_BLKSZ) != 0) {                   \
+      printf("\nfail:\n\tstep = %i\n\tkey = ", *ip);                   \
+      type_hex.dump(&v[0], stdout);                                    \
+      fputs("\n\tinput = ", stdout);                                   \
+      type_hex.dump(&v[1], stdout);                                    \
+      fputs("\n\texpected = ", stdout);                                        \
+      type_hex.dump(&v[2], stdout);                                    \
+      fputs("\n\tcomputed = ", stdout);                                        \
+      type_hex.dump(&d, stdout);                                       \
+      putchar('\n');                                                   \
+      ok = 0;                                                          \
+    }                                                                  \
+  }                                                                    \
+                                                                       \
+  dstr_destroy(&d);                                                    \
+  return (ok);                                                         \
+}                                                                      \
+                                                                       \
+static test_chunk macdefs[] = {                                                \
+  { name "-pmac1", macverify,                                          \
+    { &type_hex, &type_hex, &type_hex, 0 } },                          \
+  { 0, 0, { 0 } }                                                      \
+};                                                                     \
+                                                                       \
+int main(int argc, char *argv[])                                       \
+{                                                                      \
+  ego(argv[0]);                                                                \
+  test_run(argc, argv, macdefs, SRCDIR"/t/" fname);                    \
+  return (0);                                                          \
+}
+
+#else
+#  define PMAC1_TESTX(PRE, pre, name, fname)
+#endif
+
+/*----- That's all, folks -------------------------------------------------*/
+
+#ifdef __cplusplus
+  }
+#endif
+
+#endif
diff --git a/symm/pmac1.h b/symm/pmac1.h
new file mode 100644 (file)
index 0000000..88827bb
--- /dev/null
@@ -0,0 +1,119 @@
+/* -*-c-*-
+ *
+ * The PMAC1 message authentication mode
+ *
+ * (c) 2018 Straylight/Edgeware
+ */
+
+/*----- Licensing notice --------------------------------------------------*
+ *
+ * This file is part of Catacomb.
+ *
+ * Catacomb is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Catacomb is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with Catacomb.  If not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+/*----- Notes on PMAC1 ----------------------------------------------------*
+ *
+ * PMAC was designed in 2002 by John Black and Phillip Rogaway as a
+ * blockcipher-based MAC which can operate on multiple message blocks in
+ * parallel.  Unfortunately, Rogaway applied for patents on PMAC, and as a
+ * result it saw limited adoption.  Rogaway has since abandoned the patent
+ * applications, and PMAC is free for all uses.
+ *
+ * Confusingly, Rogaway's 2004 paper `Efficient Instantiations of Tweakable
+ * Blockciphers and Refinements to Modes OCB and PMAC' named the new versions
+ * of those modes `OCB1' and `PMAC1'.  The 2011 paper by Krovetz and Rogaway,
+ * `The Software Performance of Authenticated-Encryption Modes' renamed the
+ * original 2001 version of OCB as `OCB1', and the 2004 version `OCB2', and
+ * introduced a new `OCB3', but does not mention PMAC.  (PMAC is used as-is
+ * in the 2001 and 2004 versions of OCB, to process header data; the header
+ * processing in the 2011 version of OCB is not a secure standalone MAC, so
+ * there is no PMAC3.)  I've decided to follow and extend the 2011 naming, so
+ * `PMAC1' refers to the 2002 PMAC; the 2004 version would be `PMAC2'.
+ *
+ * This implementation does not currently attempt to process blocks in
+ * parallel, though this is a possible future improvement.
+ */
+
+#ifndef CATACOMB_PMAC1_H
+#define CATACOMB_PMAC1_H
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+/*----- Header files ------------------------------------------------------*/
+
+#include <stddef.h>
+
+#include <mLib/bits.h>
+
+#ifndef CATACOMB_GMAC_H
+#  include "gmac.h"
+#endif
+
+#ifndef CATACOMB_OCB1_H
+#  include "ocb1.h"
+#endif
+
+/*----- Macros ------------------------------------------------------------*/
+
+/* --- @PMAC1_DECL@ --- *
+ *
+ * Arguments:  @PRE@, @pre@ = prefixes for the underlying block cipher
+ *
+ * Use:                Creates declarations for PMAC1 message-authentication mode.
+ *
+ *             Most of these are aliases for OCB1 operations: see
+ *             <catacomb/ocb1.h> for their documentation.
+ */
+
+#define PMAC1_DECL(PRE, pre)                                           \
+                                                                       \
+OCB1_STRUCTS(PRE, pre, pre##_pmac1key, pre##_pmac1ctx)                 \
+                                                                       \
+extern void pre##_pmac1setkey(pre##_pmac1key */*key*/,                 \
+                             const void */*k*/, size_t /*ksz*/);       \
+                                                                       \
+extern void pre##_pmac1init(pre##_pmac1ctx */*ctx*/,                   \
+                           const pre##_pmac1key */*k*/);               \
+                                                                       \
+extern void pre##_pmac1hash(pre##_pmac1ctx */*ctx*/,                   \
+                           const void */*p*/, size_t /*sz*/);          \
+                                                                       \
+/* --- @pre_pmac1done@ --- *                                           \
+ *                                                                     \
+ * Arguments:  @pre_pmac1ctx *ctx@ = pointer to PMAC1 context block    \
+ *             @void *t@ = where to write the tag                      \
+ *                                                                     \
+ * Returns:    ---                                                     \
+ *                                                                     \
+ * Use:                Finishes a MAC operation and produces the tag.          \
+ */                                                                    \
+                                                                       \
+extern void pre##_pmac1done(pre##_pmac1ctx */*ctx*/, void */*t*/);     \
+                                                                       \
+/* --- Generic MAC interface --- */                                    \
+                                                                       \
+extern const gcmac pre##_pmac1;
+
+/*----- That's all, folks -------------------------------------------------*/
+
+#ifdef __cplusplus
+  }
+#endif
+
+#endif
index dcc3834..778a7f2 100644 (file)
@@ -609,3 +609,225 @@ blowfish-gcm {
     3bf9da6973a8dc56cebcb99962a74dc8638d11f4cb1d932162cd63136e
     ff4072c9c5180f17;
 }
+
+blowfish-ocb1 {
+  60d7bcda163547d348b7551195e77022907dd1dff7dac5c9941d26d0c6eb14ad568f86edd1dc9268eeee533285a6ed810c9b689daaa906
+    0d2d4b6003062365
+    ""
+    ""
+    ""
+    5f3f51e08130263d;
+  b0a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d
+    27a4ba234085406a
+    61
+    ""
+    ""
+    8de51300e0d17d9d;
+  36512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9269029df3e6057acc87638f508046733d9ff61cdbd
+    a3b3e9878731ebfe
+    ""
+    dd
+    11
+    1baa12d5cdfeeee5;
+  4705e505da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa45072
+    7a9b542cde52ebfd
+    ""
+    a19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030
+    c1901311bcbe5d48115af605ce28802572f30dff577e27ec
+    330d726cadffef1c;
+  370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe2b69ac26afa3349829b94586306f
+    ed54154f8f28523c
+    03d4de1600157846b710ee72807a2219bfb474fd71d891f2
+    4bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df
+    0a2dd79bb802baad38fb7e60e979c30bbbbcae5e5bfe515d
+    0ee0e2a8987f11b4;
+  9fcbaca48b77dba189196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689aef66f5306ceb0c6b08ac
+    8b0a22260c571b4a
+    ""
+    42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c03
+    0f42a8f34bf068232057195d449b9414f3bb33a692bff50f90f86b2d83
+    6cfb2c8b4b3ac1f8;
+  7ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b09c063c46f88de9fd41e72d7b97e23e6eabdff3b
+    cd211499268878db
+    f30f1dad89d4b9b12012e4713df46795630e79
+    52d22bb02d7100b8b649377d20a8f083455b663e4ee1315f3c8f2aebfa
+    eda7fb91f70e24d3ac9751e7132f6b104e41392dac28bf4f0e5daaa2b6
+    04f7c455e5d023ab;
+  921451dcd1af5813b70d30
+    ce2f1fef6ef315d0
+    ""
+    ""
+    ""
+    4a33cb478b8f393b;
+  798391805da08da3aefc5f
+    8584b7c5e617669c
+    0f
+    ""
+    ""
+    8745d6a0c38b7bb0;
+  16e39815d4e9cfce3ed1ec
+    df3d264a7f16cb16
+    ""
+    c2
+    3c
+    20ab4fe539c6b1ef;
+  e815f422cdf0c8e30308be
+    3c31e6bc58c0b7ca
+    ""
+    dcb658b970e47479a684b5aefa69a4cd52147ed12ca98698
+    bc0a5d98e5825c5e804c67213a1d820e29ef7dfddab70a5f
+    40854bd91c065d0d;
+  1a874498ad0abef8bc4fcb
+    70e27e98ef1f0446
+    b42fb144d44b6d00f06dc188d472a784e0c6f21195a3b9f4
+    ae985511265febd11c164720eef9eb1c8dd0b00951f28464
+    1a2ad5ef98fce431c6e9e85fdd057e59d2954f8e96bbadc8
+    979de99c867f2951;
+  9016ed00456331854bc78b
+    f43966eb0cfa9138
+    ""
+    ddc39908445608fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d1
+    78687a94824bb12dfe6e650544f042524ead2780a8bb4dde09d3621ec4
+    d8dd93d379eb140f;
+  26b807e6daa089c3f9099c
+    5ffb824173d7634c
+    04226f30cbb7f0e4a973a8cd190107314717a7
+    7456f3ff669c732b58db8f48af65f7cc9e3fb90e1721b730374ffc9bc5
+    b58e5fed2f88013418795c660e6e4b5ae3262382a534d79656c02a42f1
+    7391763bfa5e91d1;
+  97f56ccbb2
+    f294b38766fc69f6
+    ""
+    ""
+    ""
+    de47841b0e181038;
+  a9f2c0945f
+    fd505003cc0cae9c
+    e0
+    ""
+    ""
+    9e1855698acdf3f7;
+  21a5f1fa4f
+    fa91544485f1a125
+    ""
+    8b
+    46
+    279f95fd345d8d07;
+  2b9b8f0911
+    e32d65cc1770a18c
+    ""
+    bfe6effd1ff6778554acf1270485b203a3c1c4c967c0a458
+    6abecbf72aed482a6f80d57b236c40d316e20362f5561ff6
+    cc8e958357592f6f;
+  cb948bdd40
+    9b687fa3a6827b48
+    0aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a3e
+    8128f8743d16687b7bb8deb9bd205b70e04c091d205cdad9
+    322b60b89783b356ffcddc812e11459c1841d1540a91057d
+    48feb980547cfd06;
+  e9a79b1abf
+    91b0851e5ca605ac
+    ""
+    8451399587011677508a15dde524af3e2bee0646541a42c2ecccb44d65
+    735b81e7bf11cb6e02de6657d638e735c41336f7d021d1e6b07c8aaa69
+    f21aba6b029d81a5;
+  bad397abfa
+    f529ee41cf9a05c7
+    efedef3401539c51d2a90bbf7f1bfc338ab0ef
+    5746ea8fdcccd213e33f7e8a5718fd25014107c8e7d715a92add9589d1
+    094621285cf10b55b5c7ac0287f2267a8b4f9fecdd2e4107a88c16bd91
+    0a2c24953366e55d;
+  f5c054b2d983514605ec590294a319b9802068a9f891bc
+    5ba5afabf8c3122d
+    ""
+    ""
+    ""
+    c9a161d460c36f70;
+  12d7ff3c41122d70d17d4569eaff59a332ba58d5d5589b
+    fe079753ee1a957e
+    b6
+    ""
+    ""
+    60dd373e888b983a;
+  d6699e6b7ea2725cb2dac07ecde95759ac46fee6dda7ab
+    c8ad68daac90cfe2
+    ""
+    2d
+    34
+    f2b20b2e78622af4;
+  2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d98
+    0398bd94e66eb456
+    ""
+    3d405e51881e99027b8ab9aea3ccf860b0009740763d9683
+    1d2773587c73b701d3cc8beb604ce8f285046e6879e5c0e5
+    ba34965f7a472a8f;
+  6c5f87b95460938de1288c69d80ea12ff4bb5f069b8a2e
+    86041c1b9fc214e9
+    ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa6c
+    36800d9645563a308ba60076817523bd2abf1261b089d8f2
+    b0d06d7557017e3cd08c88a3a3d744ec0d7d964e72197911
+    9de86854fdf00689;
+  3a9c2835076a23faac2cdd67771cc667a8331f0a170b66
+    283e4f834a06148f
+    ""
+    302c3973accd56f6f24e33958b8c2e2352fd61e4fa8fec816ac861a8b3
+    f91ee277a3c2b93ce6c8df23263fd829225d66ff7f8bba9612230e8bf1
+    d2c7d587cbddcddd;
+  3779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2
+    b94b0820cab383a8
+    cffeea7c486315799dc875fba578c8ec483789
+    8a92142b5b0677da1ac273117b45bcfff5d5f8b6fde2893232a9f81d14
+    00e25b2c5fdee0b87cd2c66474f852256a4e3b6239ef6ba512af0f74c0
+    5711f23d4b34df7f;
+}
+
+blowfish-pmac1 {
+  60d7bcda163547d348b7551195e77022907dd1dff7dac5c9941d26d0c6eb14ad568f86edd1dc9268eeee533285a6ed810c9b689daaa906
+    ""
+    db56f7585ef1b3ea;
+  0d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d
+    1f
+    fe51530be20f5059;
+  337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9269029df3e
+    6057acc87638f508046733d9ff61cdbda3b3e9878731ebfe
+    370a72ba02c69145;
+  dd4705e505da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450
+    727a9b542cde52ebfda19d0ccc520f215eb57b
+    b31c99831d7ad455;
+  b3a4f3ebbbb18ac6c95a97
+    ""
+    41939f3db560fdb4;
+  a48030370c33d090c54215
+    ab
+    d56476908d8efe7a;
+  d6b3ad54efc9a38378c5b9
+    3bf4f2aad2605faee2b03fb648e27fff63102758fe2b69ac
+    7f864cbc1bee3343;
+  26afa3349829b94586306f
+    ed54154f8f28523c03d4de1600157846b710ee
+    a344715c78dc0063;
+  72807a2219
+    ""
+    78e276b95d095a71;
+  bfb474fd71
+    d8
+    9b5c25004d486060;
+  91f24bb65d
+    1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbac
+    1d4dbe26bc70c6bc;
+  a48b77dba1
+    89196d1ebba10b0467cb9fc2712a199e533fa9
+    3b97fb336799efbd;
+  156308cdec3f768281e040a9b9a222bd689aef66f5306c
+    ""
+    cc20b90115cd712c;
+  eb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb
+    0b
+    eb75059c3f5ccc65;
+  ad7d95214ade49cb3b6f5fe8368131115c037ba323fe1d
+    c8151784873f0eb5b647da6794c18b5337685a96ed65b9ac
+    f0576e12bc1af195;
+  a338527ef19b09c063c46f88de9fd41e72d7b97e23e6ea
+    bdff3bcd211499268878dbf30f1dad89d4b9b1
+    e193575442a800ab;
+}
index aef585a..e871e0c 100644 (file)
@@ -505,3 +505,225 @@ cast128-gcm {
     3c6ea417e98fd5ed2874ef3b1d8b512fbbe5449541a8912afce6b85441
     6c1dcdd2eef63a3e;
 }
+
+cast128-ocb1 {
+  60d7bcda163547d348b7551195
+    e77022907dd1dff7
+    ""
+    ""
+    ""
+    35fcd5e38e3b51ae;
+  dac5c9941d26d0c6eb14ad568f
+    86edd1dc9268eeee
+    53
+    ""
+    ""
+    9750a7c045cb5fa6;
+  3285a6ed810c9b689daaa9060d
+    2d4b6003062365b0
+    ""
+    a5
+    70
+    2007ad9ceaa910e8;
+  4364c76c160f11896c4794846e
+    cfa14a7130c9f137
+    ""
+    120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d
+    1d6fefbc39046f96c95a8e6a1b9dee24838ae0538c73cc2b
+    367e4bd46fea6528;
+  1f337f29549e6b0d27a4ba2340
+    85406a6136512061
+    f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a
+    21635c6d62c9269029df3e6057acc87638f508046733d9ff
+    0754a41170bb62612e1224d955d5c65fb33c4331487b17fc
+    bf7b46ca9365175f;
+  61cdbda3b3e9878731ebfedd47
+    05e505da1435dcea
+    ""
+    a7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb6
+    491c578a12863680495817bbb1be6bb5cd068da6c097a4d7454c4e8da0
+    d255ace5711af8ae;
+  21b7f65b000961040ef2f9b2fc
+    5fa450727a9b542c
+    de52ebfda19d0ccc520f215eb57bb3a4f3ebbb
+    b18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b9
+    97a20b90075f6b8cd05b2c101043d92167fd921a71668f63a3c1115b0f
+    202da1820f237005;
+  3bf4f2aad2605f
+    aee2b03fb648e27f
+    ""
+    ""
+    ""
+    31e566cec6e241d7;
+  ff63102758fe2b
+    69ac26afa3349829
+    b9
+    ""
+    ""
+    ca2c2e57da61fa0b;
+  4586306fed5415
+    4f8f28523c03d4de
+    ""
+    16
+    5d
+    85b6fa491dfc6955;
+  00157846b710ee
+    72807a2219bfb474
+    ""
+    fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d
+    737de7976152fc336878cbbb9ede5469e5cc5d970933fd65
+    8f8227129780dd53;
+  42f70800df9fcb
+    aca48b77dba18919
+    6d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f76
+    8281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22
+    f2320eca3b003b64b91066ab2de93cdd408517d8a9728db9
+    538a1fa6a7597e50;
+  260c571b4a42bb
+    8fdb233bfa6a5cfb
+    ""
+    0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc815178487
+    20c12e9ba584a56f7768fe92d9111a7eae80e149386c93d17f7904a41a
+    48e10cd0a8be13c9;
+  3f0eb5b647da67
+    94c18b5337685a96
+    ed65b9aca338527ef19b09c063c46f88de9fd4
+    1e72d7b97e23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012
+    55e5fad364bb32f3fa056d496f84874281576e690d72fa33be655966e4
+    a0b5a442a7297a49;
+  e4713df46795630e7952
+    d22bb02d7100b8b6
+    ""
+    ""
+    ""
+    940a9694d41abe63;
+  49377d20a8f083455b66
+    3e4ee1315f3c8f2a
+    eb
+    ""
+    ""
+    7b6cad447bf0e593;
+  fa921451dcd1af5813b7
+    0d30ce2f1fef6ef3
+    ""
+    15
+    30
+    536c60f6f1d83c94;
+  d0798391805da08da3ae
+    fc5f8584b7c5e617
+    ""
+    669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e8
+    1c485850e9c9b37abb599a800973920b660fd62c31d374a4
+    3b5a7524db68ca3d;
+  15f422cdf0c8e30308be
+    3c31e6bc58c0b7ca
+    dcb658b970e47479a684b5aefa69a4cd52147ed12ca98698
+    1a874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d4
+    097c9f86dc5ed84b2c4302fa4b10719337a1ee8feed7d101
+    8f642bc221b793b9;
+  4b6d00f06dc188d472a7
+    84e0c6f21195a3b9
+    ""
+    f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00
+    98a5dafa75c301e74727ecbba6a5047ed29491a660cef05ba70e74eaf4
+    eb2ef400c45349a9;
+  456331854bc78bf43966
+    eb0cfa9138ddc399
+    08445608fe95e81c2533e31c9c1a9851bc2810
+    d858cbbc8424d126b807e6daa089c3f9099c5ffb824173d7634c04226f
+    b43644eaaa9f3060a3a2d0eb7b10f8829f2769eb4ceaed6b712550e71c
+    fb0381cb9425f488;
+  30cbb7f0e4a973a8cd
+    190107314717a774
+    ""
+    ""
+    ""
+    a084a9815a7601a4;
+  56f3ff669c732b58db
+    8f48af65f7cc9e3f
+    b9
+    ""
+    ""
+    2ee2f881784c0227;
+  0e1721b730374ffc9b
+    c597f56ccbb2f294
+    ""
+    b3
+    05
+    683231980af7d491;
+  8766fc69f6a9f2c094
+    5ffd505003cc0cae
+    ""
+    9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65
+    e4f05c8136721b99369335ba402941018889f1fe75f9cb76
+    88de859ee4e6c912;
+  cc1770a18cbfe6effd
+    1ff6778554acf127
+    0485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b
+    480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a
+    db871dcb9e6624a931cef6ffcbe61ebc77c8b60f19550476
+    a74df4d69c389e3e;
+  3e8128f8743d16687b
+    7bb8deb9bd205b70
+    ""
+    e04c091d205cdad9e9a79b1abf91b0851e5ca605ac8451399587011677
+    922755c3a636a359fcf8fbeda42c8de7d32d109c3d1e2bc6b7f7094e9b
+    f18c36d8b0f0d64b;
+  508a15dde524af3e2b
+    ee0646541a42c2ec
+    ccb44d65bad397abfaf529ee41cf9a05c7efed
+    ef3401539c51d2a90bbf7f1bfc338ab0ef5746ea8fdcccd213e33f7e8a
+    c06849ccf2b34ffd7b497fd8936add1cb570227aa304c345092739d18b
+    326e341574bedb1f;
+}
+
+cast128-pmac1 {
+  60d7bcda163547d348b7551195
+    ""
+    9908603f8e4ed537;
+  e77022907dd1dff7dac5c9941d
+    26
+    ab2e2df52a4ffd51;
+  d0c6eb14ad568f86edd1dc9268
+    eeee533285a6ed810c9b689daaa9060d2d4b6003062365b0
+    3400ed5412e2c9f7;
+  a54364c76c160f11896c479484
+    6ecfa14a7130c9f137120634c9519848a877ff
+    0f106ec05825e141;
+  77bf79192a5b50
+    ""
+    536bca927005ffd1;
+  ade5d9cd739a3d
+    1f
+    f69b33db8f802d6e;
+  337f29549e6b0d
+    27a4ba234085406a6136512061f7080cc07df0591d8fa21f
+    0b99429b96428cb3;
+  2dd88374d8cde8
+    e160ad10997a21635c6d62c9269029df3e6057
+    0098d1d07d912367;
+  acc87638f508046733d9
+    ""
+    da9779d1609cb9e1;
+  ff61cdbda3b3e9878731
+    eb
+    00096e5430e6e2bd;
+  fedd4705e505da1435dc
+    eaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533
+    a91e29d999936af2;
+  966f27043eb621b7f65b
+    000961040ef2f9b2fc5fa450727a9b542cde52
+    1df06f8b2c0f4c39;
+  ebfda19d0ccc520f21
+    ""
+    78b9f4bb116ef26b;
+  5eb57bb3a4f3ebbbb1
+    8a
+    57afa587a9a123d5;
+  c6c95a97a48030370c
+    33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad260
+    d32f3f141a62efe1;
+  5faee2b03fb648e27f
+    ff63102758fe2b69ac26afa3349829b9458630
+    cab1db46326dab8b;
+}
index 2768387..c2d6067 100644 (file)
@@ -467,3 +467,225 @@ cast256-gcm {
     992b8af618edee3cfc8554dff63c15cb2767f995be01271c2cfd8fd552ba9736e3b40674bd386359c6ad649bd6ec0259891bdfdfcd
     b50c46ca1142d5d4c72930495fa48515;
 }
+
+cast256-ocb1 {
+  60d7bcda163547d348b7551195
+    e77022907dd1dff7dac5c9941d26d0c6
+    ""
+    ""
+    ""
+    f4e4aa5505f37af61a5a972c9fddc162;
+  eb14ad568f86edd1dc9268eeee
+    533285a6ed810c9b689daaa9060d2d4b
+    60
+    ""
+    ""
+    584463e75d3ac1157672be951d0055a0;
+  03062365b0a54364c76c160f11
+    896c4794846ecfa14a7130c9f1371206
+    ""
+    34
+    5c
+    b394bb4ab2b10e6e8cf2367e54a31532;
+  c9519848a877ff77bf79192a5b
+    50ade5d9cd739a3d1f337f29549e6b0d
+    ""
+    27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9269029df3e
+    5e5c6671bcd32b508fcdf1290a9270f30ac874189f9e647431527ad1e4ff12bd82060a376c2668bbaa4716e80bbc9884
+    baeb21b394d13ec32b91057c7bf09405;
+  6057acc87638f508046733d9ff
+    61cdbda3b3e9878731ebfedd4705e505
+    da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5f
+    a450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54
+    04f1f1082ac15c13cce9ec3c1fcbe8691ac8c736973073538f54a2cbc387064256e8add5a710c2102f0230773d54e1a7
+    6e9c01e8e1cb63e1e545a84f84280577;
+  efc9a38378c5b93bf4f2aad260
+    5faee2b03fb648e27fff63102758fe2b
+    ""
+    69ac26afa3349829b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9e
+    ffd476af7d1a5f68a96ecdfb466048936ba4d8c91e81057b23305c0d3120a0f30bfa23abcb7d3497912ceb161471933582a715b3ab
+    1d3aa8cb71b538852d3e674e5bf3615d;
+  b53b571ea629c54d57dd2d42f7
+    0800df9fcbaca48b77dba189196d1ebb
+    a10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b
+    0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da67
+    4d82601ad1a7e07573bed65ed8da86942029c74dc50df0e0f80b00bf3745f4266652f1e017340a07e94f96333f3333d61d0d940e5a
+    34184bf2c44520892ed7e493d2af584a;
+  94c18b5337685a96ed65b9ac
+    a338527ef19b09c063c46f88de9fd41e
+    ""
+    ""
+    ""
+    09b578e0b6e9577963d2995dcd8f0bd5;
+  72d7b97e23e6eabdff3bcd21
+    1499268878dbf30f1dad89d4b9b12012
+    e4
+    ""
+    ""
+    80b1ce3d1a2d08a260dcffd4a9f16abf;
+  713df46795630e7952d22bb0
+    2d7100b8b649377d20a8f083455b663e
+    ""
+    4e
+    ce
+    afd445d169a181a0d3ab494c21e853e0;
+  e1315f3c8f2aebfa921451dc
+    d1af5813b70d30ce2f1fef6ef315d079
+    ""
+    8391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e303
+    4e1f0bbef82b78b779df16313c391c02bd6f7345ce682a14b23b2abb89a2096e54a1de1109e918c370716ebdc875b2d4
+    dffb8a8a04a9255086211180d478d1b7;
+  08be3c31e6bc58c0b7cadcb6
+    58b970e47479a684b5aefa69a4cd5214
+    7ed12ca986981a874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d44b6d00f06dc188d472a784e0c6f21195a3b9
+    f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc39908
+    499f455e969ad8bc52698430481a1c43a6cb786edb33fcde2407be7a18c6477d35d59eee05c523f870918e68500b78cd
+    0d448fdf7f32a1b4ea521a182677dd36;
+  445608fe95e81c2533e31c9c
+    1a9851bc2810d858cbbc8424d126b807
+    ""
+    e6daa089c3f9099c5ffb824173d7634c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3f
+    5d96f90a43251e531c7932bb2bd9b281f8281589ba1c490ddf3c57a32516eba4bd0eb418af024566da98156a0f83def4b51b2bb90f
+    43fecf4cb095b89844141707fd0d2643;
+  b90e1721b730374ffc9bc597
+    f56ccbb2f294b38766fc69f6a9f2c094
+    5ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65cc1770a18cbfe6effd1ff6
+    778554acf1270485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f
+    ca44fbee713e258d9aea6a41b419530669e861a4c0beadc5653841d50680ab7fed4ad201ed83833d26e8afa66b8a91173eae53bc59
+    82a696e7b8a54d2cbdceedfae2d7182b;
+  9a3e8128f8743d16
+    687b7bb8deb9bd205b70e04c091d205c
+    ""
+    ""
+    ""
+    d92ad5b9acbcf8fb954dbb262344b172;
+  dad9e9a79b1abf91
+    b0851e5ca605ac845139958701167750
+    8a
+    ""
+    ""
+    e5e0cdba48ea323b69c3fd7873c61ac8;
+  15dde524af3e2bee
+    0646541a42c2ecccb44d65bad397abfa
+    ""
+    f5
+    29
+    989ebeaeb57f545955d5c2b8a76a5457;
+  29ee41cf9a05c7ef
+    edef3401539c51d2a90bbf7f1bfc338a
+    ""
+    b0ef5746ea8fdcccd213e33f7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2d983514605ec590294a319b980
+    f5017b00265a7b059589fe8549cd0d622805099dcf5d466a35dff3c0acbf40c1116ca692ec2388ec1fdbffdbfcc727f1
+    e00724826deae7efecaff58c6ff8dc4f;
+  2068a9f891bc5ba5
+    afabf8c3122d12d7ff3c41122d70d17d
+    4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d6699e6b7ea2725cb2dac07ecde95759ac46fee6dda7abc8ad68
+    daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4563d405e51881e99027b8ab9
+    38e8e939b456444e7a6dd8dd56c53376dfa8896e37a9cd10b16c5a5a2daa0ee885a2d3df7925fe71b8ad09d35e722a8c
+    81f8c645830a84009214a06300fc2feb;
+  aea3ccf860b00097
+    40763d96836c5f87b95460938de1288c
+    ""
+    69d80ea12ff4bb5f069b8a2e86041c1b9fc214e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa6c36800d9645563a308b
+    a7e718049be63223f6fcf229b7f907650bf6e10e8f53425f395df8b8aedf0658b001e1b1e717e75ba1b3750c9fa03714dbc5efeffa
+    e9fb84545896f7a672652dab4176b86b;
+  a60076817523bd2a
+    bf1261b089d8f23a9c2835076a23faac
+    2cdd67771cc667a8331f0a170b66283e4f834a06148f302c3973accd56f6f24e33958b8c2e2352fd61e4fa
+    8fec816ac861a8b33779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2b94b0820cab383a8cffeea7c486315799dc875fba578
+    e8f501b22016ada9cbfef68407a289863b7d3880603c3da8ea796352253441971cdd0171e8b57dcb32c58a078d439d523f36e17889
+    2b2a2e481234b511a0fee70c0924f67c;
+  c8ec4837898a92142b5b0677da1ac27311
+    7b45bcfff5d5f8b6fde2893232a9f81d
+    ""
+    ""
+    ""
+    c1cab79fe94cbf28ab64b07b34396c84;
+  14517ffae475f6b94a43a67b3d380d2f9a
+    aafe2dd721c0095c8808847689211450
+    ba
+    ""
+    ""
+    743df0e8509186cfb6ce313315f591df;
+  8095ffab1eaadf66fd22ac1976063e113a
+    b61f813e28a1397a7974a1d7f4220c78
+    ""
+    5f
+    26
+    503f2efabf0d67ef1e3ad58f79d6f17d;
+  e426a5a0e80f678d404147842941feeffd
+    c2eb44dc8c0d5e8f444f7f4e0c893959
+    ""
+    b74dc23a7bb40e7e0013e5150686d2301b43a15a84e81d7f5cedaa49e2414ebf47970e560475cff206877de69146acc3
+    1e06a0e13fc9f0db0a30711b19af2ec7eaa3927ec5338711ceb30b6610c76e473b7a3668ece81dc0f73253a516413982
+    53954399118d5578d98e208d426b0366;
+  ab6cf8556b7aa776945948d1b8834df219
+    6c92ec1718dcdeee0d52d9539726d281
+    0391b3f9d10c39b07ae8f08ce7cee4758a386a9943e97dedfbe61e737882cd09c2b9a80f34c0fde11c2481b11fc76bfa
+    4dbf710a9e544e0c536ca1e040f9ad5b04140d98edabe08485290a4d87d13b07398a1458c2c6b61dbdbc1cccada8c1a0
+    a4d6895902d47c9ef748ad8517e2d12561e2c068f16250af0fed5f2e2ae5afbd7f207ba0511039c9ae5562d230a2fac4
+    1ead7569ca82cb5cfd6b06fe6956c91e;
+  a9aabb6c4e3c3554f8fb1ef61614c27029
+    5dfc0ca6551ca4bdb75359f91cb9d921
+    ""
+    056b7de74fc9a9b37154ce6c0b396179d31f06a1dd5982cbc0d7cb23841da1ae8f4ae480cda98ad6cf2bacf6f9fd3f821330c43f3d
+    0a97b9588a0aff4d72af4e22c74f318a40355d94e0e0b200a0f8d06d5bd9d54728665f613e0bba43618f384303c3332e7bb746ec9c
+    99bb95cd33b76350d1b7de4543001f0e;
+  f6c2b3fac7cbcf96523d4723f91801325e
+    b8553236651c96788d73d192ee53b3f3
+    ebd66ddd98cedbe88e245de25b1593b70f8601562d90a9b59ed034a867642d25d54756fa5c47f16f64b837
+    bb4926214211a1c696ba172010abb433922a22d9fd881519165eb9d85197a21cc34ac0d5ae7be8dbf98e4ffed2cf6b1372a5aa47b5
+    a3a36df6117ba70650188e6b240237f97b545f08ad010f9eff2cc0a7ced297c38c495ac0f293cd4a6d9f56d96e31b17f64c7bcf949
+    6bab5e7330a0c1f6a651f0a33e17327f;
+}
+
+cast256-pmac1 {
+  60d7bcda163547d348b7551195
+    ""
+    e8bbe6976040b637c5730cead91a9243;
+  e77022907dd1dff7dac5c9941d
+    26
+    afcd96681e4a0ed5af47bb8b17d41497;
+  d0c6eb14ad568f86edd1dc9268
+    eeee533285a6ed810c9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f1371206
+    b584d84fe844382627cede2f7c6e5299;
+  34c9519848a877ff77bf79192a
+    5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd8
+    b232cc4c44afe1700f942c996e05e589;
+  8374d8cde8e160ad10997a21
+    ""
+    f0389f03e4cfb0f88b4016b8a96703bb;
+  635c6d62c9269029df3e6057
+    ac
+    754f863997eb465cc5ada5e2febd22a7;
+  c87638f508046733d9ff61cd
+    bda3b3e9878731ebfedd4705e505da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb6
+    407841bdebb8eb02d282ef5890f76dbf;
+  21b7f65b000961040ef2f9b2
+    fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c5
+    0ee25678e76d4bfd0bd892417f3a4aeb;
+  4215abd6b3ad54ef
+    ""
+    d31ba003e87b06c6f0eb3c9e93090855;
+  c9a38378c5b93bf4
+    f2
+    cd4ec1c2080823a36b6a223b15c6f9db;
+  aad2605faee2b03f
+    b648e27fff63102758fe2b69ac26afa3349829b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219
+    8c621081c3ad80573f0003d5ed7b7ca8;
+  bfb474fd71d891f2
+    4bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9f
+    a61047ab500558a62e494702a55f0426;
+  c2712a199e533fa9156308cdec3f768281
+    ""
+    d7db14580abbffd94087bd893c44bb9c;
+  e040a9b9a222bd689aef66f5306ceb0c6b
+    08
+    f30bab211ce253887d48d7788411a8fd;
+  ac8b0a22260c571b4a42bb8fdb233bfa6a
+    5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65
+    e7cb4245e3ce926311a964eaff43f853;
+  b9aca338527ef19b09c063c46f88de9fd4
+    1e72d7b97e23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012e4713df46795630e7952d22bb02d
+    37e48b490fc5476f6a317210987af58c;
+}
index e3eee4a..6b2c1b0 100644 (file)
@@ -312,3 +312,117 @@ des-gcm {
     c34cf61443b0c83d4120ed5e4ffd2469382732dfb776bc2ce6771cfaf6
     346dc157ce8660d5;
 }
+
+des-ocb1 {
+  bef260d7bcda1635
+    47d348b7551195e7
+    ""
+    ""
+    ""
+    1e777d9a35a9e879;
+  7022907dd1dff7da
+    c5c9941d26d0c6eb
+    14
+    ""
+    ""
+    90dff887c781b59b;
+  ad568f86edd1dc92
+    68eeee533285a6ed
+    ""
+    81
+    55
+    5c9be7f28d9f3021;
+  0c9b689daaa9060d
+    2d4b6003062365b0
+    ""
+    a54364c76c160f11896c4794846ecfa14a7130c9f1371206
+    98fabe1568fd4a31b60b6b90cc58dee9852314abdf9f4d89
+    32bf6f1f094d55d1;
+  34c9519848a877ff
+    77bf79192a5b50ad
+    e5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136
+    512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad
+    ec6d227abc440c6ece3ba42013676031c0fb2960d0d65985
+    485047e83b3b11af;
+  10997a21635c6d62
+    c9269029df3e6057
+    ""
+    acc87638f508046733d9ff61cdbda3b3e9878731ebfedd4705e505da14
+    1b7100307ae4b3ca2e3f973e2ccd11be6245f9b081a36cc023801d9a8f
+    5e2e02663e595bc7;
+  35dceaa7b1cc49ae
+    1d50c38201a89447
+    6b3f102b752eb9529533966f27043eb621b7f6
+    5b000961040ef2f9b2fc5fa450727a9b542cde52ebfda19d0ccc520f21
+    23ba63682d64c1e2ed3c14de44c492cf82ac3c63b1e85ae1d5905c1577
+    a2786c37e5b03355;
+  5eb57bb3a4f3eb
+    bbb18ac6c95a97a4
+    ""
+    ""
+    ""
+    846708610518ffc4;
+  8030370c33d090
+    c54215abd6b3ad54
+    ef
+    ""
+    ""
+    152246d59c398d68;
+  c9a38378c5b93b
+    f4f2aad2605faee2
+    ""
+    b0
+    79
+    d74b0529249254f2;
+  3fb648e27fff63
+    102758fe2b69ac26
+    ""
+    afa3349829b94586306fed54154f8f28523c03d4de160015
+    90d6861b964eed693b629e01188d4e50fcd236e71ccdc734
+    0611bd11e7649655;
+  7846b710ee7280
+    7a2219bfb474fd71
+    d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42f7
+    0800df9fcbaca48b77dba189196d1ebba10b0467cb9fc271
+    9fb915d584569a6bc699706d225c9f131bed57d39b7bb4e3
+    fdc4da4d6d428967;
+  2a199e533fa915
+    6308cdec3f768281
+    ""
+    e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22260c571b4a42bb
+    78e88cc7c809ee0d77e4550e3ba943fa3390b0e035bb4569fff7bc58ce
+    821ba4f7ffd7cc02;
+  8fdb233bfa6a5c
+    fb0bad7d95214ade
+    49cb3b6f5fe8368131115c037ba323fe1dc815
+    1784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b09
+    e6b1c822199a5821020dea58a059635e7ceaa997c3bf8338bade196e39
+    417dceee9a662328;
+}
+
+des-pmac1 {
+  bef260d7bcda1635
+    ""
+    87398f9b84eacbd3;
+  47d348b7551195e7
+    70
+    c4a6d220ebf7ce9e;
+  22907dd1dff7dac5
+    c9941d26d0c6eb14ad568f86edd1dc9268eeee533285a6ed
+    9847df50037cb1ba;
+  810c9b689daaa906
+    0d2d4b6003062365b0a54364c76c160f11896c
+    fe45499fb92b19ae;
+  4794846ecfa14a
+    ""
+    c7fc008258249c34;
+  7130c9f1371206
+    34
+    5d742a297938a8a1;
+  c9519848a877ff
+    77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4
+    7cfba1467a3d156a;
+  ba234085406a61
+    36512061f7080cc07df0591d8fa21f2dd88374
+    0b547da65d93cc08;
+}
index 32945cb..868dfd0 100644 (file)
@@ -560,3 +560,225 @@ des3-gcm {
     fc2c1515c5fc3f727fb3e98ba249a076c3da8668f5e89db6e7956de064
     a2411e499cacffef;
 }
+
+des3-ocb1 {
+  60d7bcda163547d348b7551195e7
+    7022907dd1dff7da
+    ""
+    ""
+    ""
+    cbd24ffb264f16ad;
+  c5c9941d26d0c6eb14ad568f86ed
+    d1dc9268eeee5332
+    85
+    ""
+    ""
+    a6e1ad4b16d8d99b;
+  a6ed810c9b689daaa9060d2d4b60
+    03062365b0a54364
+    ""
+    c7
+    a2
+    df1618790e682c74;
+  6c160f11896c4794846ecfa14a71
+    30c9f137120634c9
+    ""
+    519848a877ff77bf79192a5b50ade5d9cd739a3d1f337f29
+    51d9c953558e88ed892717edb5839471bab17ebda859fa2d
+    673b34362686d614;
+  549e6b0d27a4ba234085406a6136
+    512061f7080cc07d
+    f0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62
+    c9269029df3e6057acc87638f508046733d9ff61cdbda3b3
+    9e9db1333c288d89f1d852453679fd4a9df932ee424b56e6
+    0e15cfad6c6299f4;
+  e9878731ebfedd4705e505da1435
+    dceaa7b1cc49ae1d
+    ""
+    50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b0009
+    79f213b6e9d3b4a233652364a0741f0a3905112cdcc65fc6a1f02b20e1
+    fb385d47f056ea7a;
+  61040ef2f9b2fc5fa450727a9b54
+    2cde52ebfda19d0c
+    cc520f215eb57bb3a4f3ebbbb18ac6c95a97a4
+    8030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605f
+    1b7e1e5164841c4478deb10a87cc07f70db15af1b12790fb9f8ea16d79
+    e0d1715f5e9373c7;
+  aee2b03fb648e27f
+    ff63102758fe2b69
+    ""
+    ""
+    ""
+    4b884a39fbc7c745;
+  ac26afa3349829b9
+    4586306fed54154f
+    8f
+    ""
+    ""
+    d445ece0ef590e55;
+  28523c03d4de1600
+    157846b710ee7280
+    ""
+    7a
+    0e
+    020e28ecb1a51fd3;
+  2219bfb474fd71d8
+    91f24bb65d156325
+    ""
+    9f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77
+    a683ff420e8f9ea9467dd595afc344a0d25d20ea01c93b21
+    2748703cfe3e8226;
+  dba189196d1ebba1
+    0b0467cb9fc2712a
+    199e533fa9156308cdec3f768281e040a9b9a222bd689aef
+    66f5306ceb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa
+    aad5b6cbb6216005d17943984bb41bc4b6ba873ca43cb46b
+    d2c66cd04f05868e;
+  6a5cfb0bad7d9521
+    4ade49cb3b6f5fe8
+    ""
+    368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b533768
+    db8d34944ff3c0cdda5436416fb627c58f9b02d925b59a9b68fbbeda2a
+    06b84a7b2c9665a4;
+  5a96ed65b9aca338
+    527ef19b09c063c4
+    6f88de9fd41e72d7b97e23e6eabdff3bcd2114
+    99268878dbf30f1dad89d4b9b12012e4713df46795630e7952d22bb02d
+    db5cd9c16b245b3b5078d900f5d270cb81567d73703c2c95925a7237d3
+    eef56cad5b7f2ed2;
+  7100b8b649377d20a8f083455b663e4e
+    e1315f3c8f2aebfa
+    ""
+    ""
+    ""
+    56ad76ec7f013571;
+  921451dcd1af5813b70d30ce2f1fef6e
+    f315d0798391805d
+    a0
+    ""
+    ""
+    6542ea8693b8cd18;
+  8da3aefc5f8584b7c5e617669c0f16e3
+    9815d4e9cfce3ed1
+    ""
+    ec
+    35
+    90d173ba8349a22b;
+  df3d264a7f16cb16c2e815f422cdf0c8
+    e30308be3c31e6bc
+    ""
+    58c0b7cadcb658b970e47479a684b5aefa69a4cd52147ed1
+    64348fc5f46a28edab91b5d41e27ab352fa8ca90d322b603
+    b894f7a0cf918ae2;
+  2ca986981a874498ad0abef8bc4fcb70
+    e27e98ef1f0446b4
+    2fb144d44b6d00f06dc188d472a784e0c6f21195a3b9f4ae
+    985511265febd11c164720eef9eb1c8dd0b00951f2846490
+    dc70ae429c73fd871a49ab5aea8ed37196a151ad8d09dc3c
+    f76847ab0c01c5bd;
+  16ed00456331854bc78bf43966eb0cfa
+    9138ddc399084456
+    ""
+    08fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d126b807e6daa0
+    7fcb46d49d63ecf4d49c4578841b1cc435362eb989098c8729fa7c8b7c
+    170621267d144a86;
+  89c3f9099c5ffb824173d7634c04226f
+    30cbb7f0e4a973a8
+    cd190107314717a77456f3ff669c732b58db8f
+    48af65f7cc9e3fb90e1721b730374ffc9bc597f56ccbb2f294b38766fc
+    b0ecb19f5804122fb10b38ce2354dd1b9001c8e4f96d9f3a8b054ef79b
+    e3cfbcf2b101c897;
+  69f6a9f2c0945ffd505003cc0cae9ce021a5f1fa4f
+    fa91544485f1a125
+    ""
+    ""
+    ""
+    efc673f15d727525;
+  8b2b9b8f0911e32d65cc1770a18cbfe6effd1ff677
+    8554acf1270485b2
+    03
+    ""
+    ""
+    4be4ef9aa08e493e;
+  a3c1c4c967c0a458cb948bdd409b687fa3a6827b48
+    0aa3a4c84cef64f6
+    ""
+    c9
+    60
+    3c76403cf147a5a0;
+  b53bf8f957f4b03cf43e89957f9a3e8128f8743d16
+    687b7bb8deb9bd20
+    ""
+    5b70e04c091d205cdad9e9a79b1abf91b0851e5ca605ac84
+    6a5f5444d206a359b01efa29f51c6d3f13c050b663f1ea32
+    4ed8de43ccd151ef;
+  51399587011677508a15dde524af3e2bee0646541a
+    42c2ecccb44d65ba
+    d397abfaf529ee41cf9a05c7efedef3401539c51d2a90bbf
+    7f1bfc338ab0ef5746ea8fdcccd213e33f7e8a5718fd2501
+    db5dbdd217bb8761aea78de2a51b9ab2bcb9559bfae22dfa
+    002834c8f3b3d2f1;
+  4107c8e7d715a92add9589d1f5c054b2d983514605
+    ec590294a319b980
+    ""
+    2068a9f891bc5ba5afabf8c3122d12d7ff3c41122d70d17d4569eaff59
+    9a6b4f24093acdff2a03f9a40494e1e6dd2ed10be75cdf9fb4381f7a1e
+    c492487046c80434;
+  a332ba58d5d5589bfe079753ee1a957eb6d6699e6b
+    7ea2725cb2dac07e
+    cde95759ac46fee6dda7abc8ad68daac90cfe2
+    2d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e6
+    14bc7ec21221fab0d0a55be9d505c315ef5ef5a01c9a5d8c71c6a8a569
+    598c7a7659a4ece7;
+}
+
+des3-pmac1 {
+  60d7bcda163547d348b7551195e7
+    ""
+    4ee97adb08a4f1ca;
+  7022907dd1dff7dac5c9941d26d0
+    c6
+    9280792119f1c90a;
+  eb14ad568f86edd1dc9268eeee53
+    3285a6ed810c9b689daaa9060d2d4b6003062365b0a54364
+    d3b9cda12ef855c9;
+  c76c160f11896c4794846ecfa14a
+    7130c9f137120634c9519848a877ff77bf7919
+    ccb225988c72647f;
+  2a5b50ade5d9cd73
+    ""
+    29b6cbd6a39de3ea;
+  9a3d1f337f29549e
+    6b
+    a44255ba14c7c82e;
+  0d27a4ba23408540
+    6a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8
+    4ae6eee38bf7dfc3;
+  e160ad10997a2163
+    5c6d62c9269029df3e6057acc87638f5080467
+    de786269abfb7dce;
+  33d9ff61cdbda3b3e9878731ebfedd47
+    ""
+    8e4e4d58688d0661;
+  05e505da1435dceaa7b1cc49ae1d50c3
+    82
+    1eb3af80bd877e09;
+  01a894476b3f102b752eb9529533966f
+    27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b54
+    ba1f17ab53c77f9c;
+  2cde52ebfda19d0ccc520f215eb57bb3
+    a4f3ebbbb18ac6c95a97a48030370c33d090c5
+    614b8997f580de04;
+  4215abd6b3ad54efc9a38378c5b93bf4f2aad2605f
+    ""
+    79469a20ba34f900;
+  aee2b03fb648e27fff63102758fe2b69ac26afa334
+    98
+    69f377b3ea8e925c;
+  29b94586306fed54154f8f28523c03d4de16001578
+    46b710ee72807a2219bfb474fd71d891f24bb65d1563259f
+    6e0adaf190bd2ea1;
+  9eb53b571ea629c54d57dd2d42f70800df9fcbaca4
+    8b77dba189196d1ebba10b0467cb9fc2712a19
+    129deaeec0e03d30;
+}
index 14b8e31..bbc1f67 100644 (file)
@@ -512,3 +512,225 @@ desx-gcm {
     e6bc35974509d938a953ad32ae829a5cced3f2846e756fbc99247ae1d5
     623e465c7913e6b2;
 }
+
+desx-ocb1 {
+  60d7bcda163547d348b7551195e770
+    22907dd1dff7dac5
+    ""
+    ""
+    ""
+    caa9db9c2fd96b20;
+  c9941d26d0c6eb14ad568f86edd1dc
+    9268eeee533285a6
+    ed
+    ""
+    ""
+    e3f19e04d004771a;
+  810c9b689daaa9060d2d4b60030623
+    65b0a54364c76c16
+    ""
+    0f
+    ce
+    274fa8d10ec38416;
+  11896c4794846ecfa14a7130c9f137
+    120634c9519848a8
+    ""
+    77ff77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d
+    286bf711ca2f9d9e6e3ea11390d46225834d56c3cadef9f3
+    8a3e9e27a8bd1267;
+  27a4ba234085406a6136512061f708
+    0cc07df0591d8fa2
+    1f2dd88374d8cde8e160ad10997a21635c6d62c9269029df
+    3e6057acc87638f508046733d9ff61cdbda3b3e9878731eb
+    e9a1c82381cb138e2b635f58ec9ad77e81eee97cb9b725cf
+    2c08bbda5c67ae28;
+  fedd4705e505da1435dceaa7b1cc49
+    ae1d50c38201a894
+    ""
+    476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2
+    77c71af12f7e75599be17868608c1e66a767d5324a43d136777c8298f2
+    da3b49f25c22648f;
+  fc5fa450727a9b542cde52ebfda19d
+    0ccc520f215eb57b
+    b3a4f3ebbbb18ac6c95a97a48030370c33d090
+    c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e2
+    e93425b446b6e0ee7622d56eb8781430e61c0b79fbf75b5129e66be0df
+    aaae9e5df22ffd66;
+  7fff63102758fe2b
+    69ac26afa3349829
+    ""
+    ""
+    ""
+    2454c6d4af0543c6;
+  b94586306fed5415
+    4f8f28523c03d4de
+    16
+    ""
+    ""
+    57f09f05b22aed2a;
+  00157846b710ee72
+    807a2219bfb474fd
+    ""
+    71
+    07
+    98a03e06427d6c6e;
+  d891f24bb65d1563
+    259f9eb53b571ea6
+    ""
+    29c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebb
+    79bc018164ccf90123ed426c5e261171c67c69512e8f41b1
+    d83eb8863b890872;
+  a10b0467cb9fc271
+    2a199e533fa91563
+    08cdec3f768281e040a9b9a222bd689aef66f5306ceb0c6b
+    08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95
+    2b050493ae97a338a539cf0a46f443a137a90bce681c3cf7
+    cca806fe40ecdf0d;
+  214ade49cb3b6f5f
+    e8368131115c037b
+    ""
+    a323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65b9aca3
+    49d25f8e34f3dfac53f8409552f42c89167889d2cbe2af5ba0ba4c2dfc
+    7051575c9d170e37;
+  38527ef19b09c063
+    c46f88de9fd41e72
+    d7b97e23e6eabdff3bcd211499268878dbf30f
+    1dad89d4b9b12012e4713df46795630e7952d22bb02d7100b8b649377d
+    bfe9acab806680bdc205fdaf72e274eeec6698801454fc94a8c0c16262
+    4f53c9ecfbb5f758;
+  20a8f083455b663e4ee1315f3c8f2aeb
+    fa921451dcd1af58
+    ""
+    ""
+    ""
+    0230f537d84fad83;
+  13b70d30ce2f1fef6ef315d079839180
+    5da08da3aefc5f85
+    84
+    ""
+    ""
+    03faa4ac602dc7ed;
+  b7c5e617669c0f16e39815d4e9cfce3e
+    d1ecdf3d264a7f16
+    ""
+    cb
+    18
+    a514a198a9c98049;
+  16c2e815f422cdf0c8e30308be3c31e6
+    bc58c0b7cadcb658
+    ""
+    b970e47479a684b5aefa69a4cd52147ed12ca986981a8744
+    7fb1ffb913b75f8d4c7ea6e84a9f2fc911380d1b8ee343f6
+    2a496d014b16a40a;
+  98ad0abef8bc4fcb70e27e98ef1f0446
+    b42fb144d44b6d00
+    f06dc188d472a784e0c6f21195a3b9f4ae985511265febd1
+    1c164720eef9eb1c8dd0b00951f284649016ed0045633185
+    722aa22fa02f13d32187730cb051fa3b49fcd9a308a9d453
+    c59459ba824bc1a5;
+  4bc78bf43966eb0cfa9138ddc3990844
+    5608fe95e81c2533
+    ""
+    e31c9c1a9851bc2810d858cbbc8424d126b807e6daa089c3f9099c5ffb
+    86c1f74d4db77a90398574f168f83e6de15e6a2b7b2afa621590dc0404
+    4543ce1f721609f4;
+  824173d7634c04226f30cbb7f0e4a973
+    a8cd190107314717
+    a77456f3ff669c732b58db8f48af65f7cc9e3f
+    b90e1721b730374ffc9bc597f56ccbb2f294b38766fc69f6a9f2c0945f
+    cfa9cfeddbc593bd6812352a35fa31e2a53b1840ea430ee8e2085d60da
+    90bfab3707b05a6a;
+  fd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b
+    2b9b8f0911e32d65
+    ""
+    ""
+    ""
+    7a861a7d3af428f9;
+  cc1770a18cbfe6effd1ff6778554acf1270485b203a3c1
+    c4c967c0a458cb94
+    8b
+    ""
+    ""
+    ff1c4c7bc330ef39;
+  dd409b687fa3a6827b480aa3a4c84cef64f6c9b53bf8f9
+    57f4b03cf43e8995
+    ""
+    7f
+    d2
+    b1cb7d2102d5c32c;
+  9a3e8128f8743d16687b7bb8deb9bd205b70e04c091d20
+    5cdad9e9a79b1abf
+    ""
+    91b0851e5ca605ac8451399587011677508a15dde524af3e
+    9bdb27bbfc7389090471f3cb7051cb8d1fd530005e21a93f
+    3bd9da825a402482;
+  2bee0646541a42c2ecccb44d65bad397abfaf529ee41cf
+    9a05c7efedef3401
+    539c51d2a90bbf7f1bfc338ab0ef5746ea8fdcccd213e33f
+    7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2d9
+    b569d836ce07d26017bdecdc06938abe11f29988e2ee4eaa
+    7c12ae284dab4140;
+  83514605ec590294a319b9802068a9f891bc5ba5afabf8
+    c3122d12d7ff3c41
+    ""
+    122d70d17d4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d669
+    c893ff49cfec7dfa04b6c966ff8e2de2dbca702ed6cd0416b4d1e12b2a
+    4f6e8bdaed610893;
+  9e6b7ea2725cb2dac07ecde95759ac46fee6dda7abc8ad
+    68daac90cfe22d2f
+    1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6
+    254d980398bd94e66eb4563d405e51881e99027b8ab9aea3ccf860b000
+    e5977138d0d737d7b616047aa523dc1b7d5b5fb6fd20e26831a2f34bb8
+    6e42e08c54165845;
+}
+
+desx-pmac1 {
+  60d7bcda163547d348b7551195e770
+    ""
+    4af29214a7b8f451;
+  22907dd1dff7dac5c9941d26d0c6eb
+    14
+    497e34853501b17c;
+  ad568f86edd1dc9268eeee533285a6
+    ed810c9b689daaa9060d2d4b6003062365b0a54364c76c16
+    be4cb7dd9428ff3f;
+  0f11896c4794846ecfa14a7130c9f1
+    37120634c9519848a877ff77bf79192a5b50ad
+    bd394b556e88691a;
+  e5d9cd739a3d1f33
+    ""
+    cf37166cf40c5a63;
+  7f29549e6b0d27a4
+    ba
+    36f50dc5278f6d48;
+  234085406a613651
+    2061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10
+    afa0c00f1d78a165;
+  997a21635c6d62c9
+    269029df3e6057acc87638f508046733d9ff61
+    0cb5b03ffdf32b7e;
+  cdbda3b3e9878731ebfedd4705e505da
+    ""
+    12307602abf4cd83;
+  1435dceaa7b1cc49ae1d50c38201a894
+    47
+    7b6c2a63bc1599df;
+  6b3f102b752eb9529533966f27043eb6
+    21b7f65b000961040ef2f9b2fc5fa450727a9b542cde52eb
+    ec16536d65cbf867;
+  fda19d0ccc520f215eb57bb3a4f3ebbb
+    b18ac6c95a97a48030370c33d090c54215abd6
+    b0548570d2b43e37;
+  b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648
+    ""
+    1e5b6857738e4db7;
+  e27fff63102758fe2b69ac26afa3349829b94586306fed
+    54
+    3739adab4d52a786;
+  154f8f28523c03d4de1600157846b710ee72807a2219bf
+    b474fd71d891f24bb65d1563259f9eb53b571ea629c54d57
+    54f3e5fc1458f0a3;
+  dd2d42f70800df9fcbaca48b77dba189196d1ebba10b04
+    67cb9fc2712a199e533fa9156308cdec3f7682
+    462473f2102f3c1d;
+}
index a77126b..0ab9140 100644 (file)
@@ -156,3 +156,63 @@ idea-gcm {
     8508e77f69eba79e7dd8b644ed31dba2f0eba90d09b1170ec17caf72ee
     6c86db8654126e19;
 }
+
+idea-ocb1 {
+  e4bef260d7bcda163547d348b7551195
+    e77022907dd1dff7
+    ""
+    ""
+    ""
+    6c1f67d06c352235;
+  dac5c9941d26d0c6eb14ad568f86edd1
+    dc9268eeee533285
+    a6
+    ""
+    ""
+    461d68824249a125;
+  ed810c9b689daaa9060d2d4b60030623
+    65b0a54364c76c16
+    ""
+    0f
+    a4
+    f29d06f84026383d;
+  11896c4794846ecfa14a7130c9f13712
+    0634c9519848a877
+    ""
+    ff77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27
+    02d1b52db3743fe74199d2d47c7b9a5b40be540fd3305c63
+    95db9f9e14cc4137;
+  a4ba234085406a6136512061f7080cc0
+    7df0591d8fa21f2d
+    d88374d8cde8e160ad10997a21635c6d62c9269029df3e60
+    57acc87638f508046733d9ff61cdbda3b3e9878731ebfedd
+    16241a876ecaa1787050ae161dc95e08b3c9f3f32f4c28e6
+    4c3a1cbf28420f74;
+  4705e505da1435dceaa7b1cc49ae1d50
+    c38201a894476b3f
+    ""
+    102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa4
+    fc37976d31a17e5c9184a761ade81acb146791248da7073854564e80e2
+    69afdd038f3f443c;
+  50727a9b542cde52ebfda19d0ccc520f
+    215eb57bb3a4f3eb
+    bbb18ac6c95a97a48030370c33d090c54215ab
+    d6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff6310
+    ca23f10e82cad6a83e29296f3040d728e2c19d8a70da3c85bfd6392e83
+    13a82d59cedb63ae;
+}
+
+idea-pmac1 {
+  e4bef260d7bcda163547d348b7551195
+    ""
+    487cb8bbd49fdf9f;
+  e77022907dd1dff7dac5c9941d26d0c6
+    eb
+    61e71d184211ae2e;
+  14ad568f86edd1dc9268eeee533285a6
+    ed810c9b689daaa9060d2d4b6003062365b0a54364c76c16
+    2a59b4037636f6e9;
+  0f11896c4794846ecfa14a7130c9f137
+    120634c9519848a877ff77bf79192a5b50ade5
+    64b5b29952d302fd;
+}
index 2b0dcb4..a597758 100644 (file)
@@ -491,3 +491,225 @@ mars-gcm {
     9f02629363a56a6e8067f76d0df265f5d1d4774c129186fd96e0826e4d5a6fd643b6fc7e484caa72575f7774f8d7d55529c816b3a8
     77d7548dfeed0ca41810c69586ef999d;
 }
+
+mars-ocb1 {
+  60d7bcda163547d348b75511
+    95e77022907dd1dff7dac5c9941d26d0
+    ""
+    ""
+    ""
+    4653e79c83c9692f680b6ab67aa4cb1c;
+  c6eb14ad568f86edd1dc9268
+    eeee533285a6ed810c9b689daaa9060d
+    2d
+    ""
+    ""
+    9cf228b3a0a873d910ef08325178c9ce;
+  4b6003062365b0a54364c76c
+    160f11896c4794846ecfa14a7130c9f1
+    ""
+    37
+    7f
+    3194ce1f7b3c055b5c465e9449713d73;
+  120634c9519848a877ff77bf
+    79192a5b50ade5d9cd739a3d1f337f29
+    ""
+    549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c926
+    da19eb03799876ac0c7f25bbb54e051149623d839822c5305b2348306fb687a95debfb6d8463b8f61eff55879a8e4854
+    c9315ab551796c3230de8d1b783e41c6;
+  9029df3e6057acc87638f508
+    046733d9ff61cdbda3b3e9878731ebfe
+    dd4705e505da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040e
+    f2f9b2fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215
+    e6fffaeff62574ca11871e98539b5d6252724476ceaf2e6f7649e25df4c7fa2d1168bc6913bfcabbeb65cc7673d64445
+    aba7309b9f99d4d595029cb68eb9dfef;
+  abd6b3ad54efc9a38378c5b9
+    3bf4f2aad2605faee2b03fb648e27fff
+    ""
+    63102758fe2b69ac26afa3349829b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb6
+    41d2c5f2747177da8fb403142b15976849d6092a1f30a00a7dd86dfeae5e9a4d37a2b63ab07ee4ef461bb0c5a0ccce42767d08bf87
+    a5990263e713d60c619a4c8e15b6b3c4;
+  5d1563259f9eb53b571ea629
+    c54d57dd2d42f70800df9fcbaca48b77
+    dba189196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689aef66f530
+    6ceb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc815178487
+    996f3de0c448f6bcc7a05966caf6b55b9a6e89038b7b1dcf0e227940a481c7d01a8deb9ab18c66e6e40f77673084abf2237348d737
+    12639c6038c9de5dac44e56672cb55aa;
+  3f0eb5b647da6794c18b5337685a96ed65b9aca3
+    38527ef19b09c063c46f88de9fd41e72
+    ""
+    ""
+    ""
+    2a302865877be6802bf265563679f4a6;
+  d7b97e23e6eabdff3bcd211499268878dbf30f1d
+    ad89d4b9b12012e4713df46795630e79
+    52
+    ""
+    ""
+    e504301acfb3dd72388b857ee7030835;
+  d22bb02d7100b8b649377d20a8f083455b663e4e
+    e1315f3c8f2aebfa921451dcd1af5813
+    ""
+    b7
+    ae
+    e2242b2d76d0f58177d422c14007837b;
+  0d30ce2f1fef6ef315d0798391805da08da3aefc
+    5f8584b7c5e617669c0f16e39815d4e9
+    ""
+    cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb658b970e47479a684b5aefa69a4
+    289ee6d05f1e2afadef55a9be57142c9434db665577e5e471466dcf0cd8dcee27b8337966c5f1a45a88f87801fc4ec61
+    de6956f5723d140cb3147978cdaaded2;
+  cd52147ed12ca986981a874498ad0abef8bc4fcb
+    70e27e98ef1f0446b42fb144d44b6d00
+    f06dc188d472a784e0c6f21195a3b9f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed0045633185
+    4bc78bf43966eb0cfa9138ddc39908445608fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d126b807e6daa089c3
+    6887543c971afe587132ed940556ec6275f8e92d4f94bcc8f31ed297ebaa6757c4353fdc1f6bdb1a870c22336f825a96
+    abce9a9e9c6f5d09e99c93d7eadfede3;
+  f9099c5ffb824173d7634c04226f30cbb7f0e4a9
+    73a8cd190107314717a77456f3ff669c
+    ""
+    732b58db8f48af65f7cc9e3fb90e1721b730374ffc9bc597f56ccbb2f294b38766fc69f6a9f2c0945ffd505003cc0cae9ce021a5f1
+    f449b1339ac9985a1c4b342d1b0a5c41f15b8b2aca90c12846c792ae42057b3fd7b41111c8db756adf5a2ef5e1546e57fa0243cfb7
+    ba66681acccec14ef865b02f3c39b3f6;
+  fa4ffa91544485f1a1258b2b9b8f0911e32d65cc
+    1770a18cbfe6effd1ff6778554acf127
+    0485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b480aa3a4c84cef64f6c9b53bf8f957f4b03cf4
+    3e89957f9a3e8128f8743d16687b7bb8deb9bd205b70e04c091d205cdad9e9a79b1abf91b0851e5ca605ac8451399587011677508a
+    7e1008b868fc1e9839963cd536e425796a5a83fbabd727f72bdf86fef8cf16929a5d491a4657a4228a19e366a213f820cda50268b2
+    3f0cd60dee1bf4bedd8415232e0e5a2f;
+  15dde524af3e2bee
+    0646541a42c2ecccb44d65bad397abfa
+    ""
+    ""
+    ""
+    158bc7dac7095b407e95a345ec6362d3;
+  f529ee41cf9a05c7
+    efedef3401539c51d2a90bbf7f1bfc33
+    8a
+    ""
+    ""
+    8bef95789b98fffc2e3a3324237b03c4;
+  b0ef5746ea8fdccc
+    d213e33f7e8a5718fd25014107c8e7d7
+    ""
+    15
+    bd
+    a88cd72e0e1e676c5c011dcbc14d2e46;
+  a92add9589d1f5c0
+    54b2d983514605ec590294a319b98020
+    ""
+    68a9f891bc5ba5afabf8c3122d12d7ff3c41122d70d17d4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d6699e
+    6ed48f6abe15219da489442825e579452118ad3fef19d76292398eaea3a27d2cf358a5a1dfc1810c68b5e17db646d4d3
+    b19f3b616690535f642ae58f4263880c;
+  6b7ea2725cb2dac0
+    7ecde95759ac46fee6dda7abc8ad68da
+    ac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4563d405e51881e99027b8ab9ae
+    a3ccf860b0009740763d96836c5f87b95460938de1288c69d80ea12ff4bb5f069b8a2e86041c1b9fc214e9ca2186ddf1
+    f5c8dd655912fff44348c17cc0a0178fc55bbb12f4af3a017bc8db8b27c168d1feb19bcdd00b8f738adb541425412da2
+    820fbdee601293312a0756571cdd2389;
+  f6a7a3aa7e740da9
+    67828e3604b35b15ffaa6c36800d9645
+    ""
+    563a308ba60076817523bd2abf1261b089d8f23a9c2835076a23faac2cdd67771cc667a8331f0a170b66283e4f834a06148f302c39
+    201b87f6e406e13217b302fb759395dc0aa43b22b175472f45de5349ad46fd04c6fe85eb5c553432dd49fc279f668562f705ca3aa3
+    f7b7990d4d35c703d03b18b009bd6a6c;
+  73accd56f6f24e33
+    958b8c2e2352fd61e4fa8fec816ac861
+    a8b33779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2b94b0820cab383a8cffeea7c486315799dc8
+    75fba578c8ec4837898a92142b5b0677da1ac273117b45bcfff5d5f8b6fde2893232a9f81d14517ffae475f6b94a43a67b3d380d2f
+    1bc1cc2a9d971ffd42de07dfe98a00df3e83baf24c8a7b658eaaad1b61726d6b9aa527fadebb284414e9d75eadd23274710de7818f
+    294968c6ea337be16fa4b02cdfa33e50;
+  9aaafe2dd721c0095c8808847689211450ba8095ffab1eaadf66fd22ac1976063e113ab6
+    1f813e28a1397a7974a1d7f4220c785f
+    ""
+    ""
+    ""
+    91db1563a8a1d0f60253be719e1e41f1;
+  e426a5a0e80f678d404147842941feeffdc2eb44dc8c0d5e8f444f7f4e0c893959b74dc2
+    3a7bb40e7e0013e5150686d2301b43a1
+    5a
+    ""
+    ""
+    83e94ddd60fb2b811905035945907c5d;
+  84e81d7f5cedaa49e2414ebf47970e560475cff206877de69146acc3ab6cf8556b7aa776
+    945948d1b8834df2196c92ec1718dcde
+    ""
+    ee
+    b2
+    0d56aa6e43ad24239efcfcd726927fc1;
+  0d52d9539726d2810391b3f9d10c39b07ae8f08ce7cee4758a386a9943e97dedfbe61e73
+    7882cd09c2b9a80f34c0fde11c2481b1
+    ""
+    1fc76bfa4dbf710a9e544e0c536ca1e040f9ad5b04140d98edabe08485290a4d87d13b07398a1458c2c6b61dbdbc1ccc
+    b8b85de994a54ef5dbcbd85f5eaa88e2b2464262a53859300232029741b167876b6d3195c95957d5600e31de5f275da6
+    e69278334c8133c3710564526e2016f0;
+  ada8c1a0a9aabb6c4e3c3554f8fb1ef61614c270295dfc0ca6551ca4bdb75359f91cb9d9
+    21056b7de74fc9a9b37154ce6c0b3961
+    79d31f06a1dd5982cbc0d7cb23841da1ae8f4ae480cda98ad6cf2bacf6f9fd3f821330c43f3df6c2b3fac7cbcf96523d
+    4723f91801325eb8553236651c96788d73d192ee53b3f3ebd66ddd98cedbe88e245de25b1593b70f8601562d90a9b59e
+    9e1e7295f6bb0cf520a77dc6bf4cae9411c79bf4d9e6a2a862efd982f4525bdd026b7ce5bb28b46bdf4bc4eb3e8e9675
+    d5ca1cd9e51f5441912d15626930b798;
+  d034a867642d25d54756fa5c47f16f64b837bb4926214211a1c696ba172010abb433922a
+    22d9fd881519165eb9d85197a21cc34a
+    ""
+    c0d5ae7be8dbf98e4ffed2cf6b1372a5aa47b54fd9d70c70e117bf1cae71b3a56f0e7d839ea59cc783443d64f2ed6a29b96856beca
+    33c0fb24bcc9948f79e7257d8816767fd83a862643e0e31b1ecde6dfc39523dbb29b396435eae70c7658cbb9442c457805713c45da
+    b0b7b3760231dd8ddd9a6378e27fadc0;
+  34fd6544bcf86b799e2a1681160ccf055f0fd3001da597a1406d465b7b1419ea51cf858f
+    938f6daafbd656445a09898eaa96ffc3
+    d1d2e31e4e34c94b8bfae64825ecd75a66d88eedb969ffe07669845ebb7a24c69f13d099f47166edf54538
+    e88fbf433a7ff212085179e79771f6eee7283ab178ef2b800d7b969da05780ffc1ba78c70dda7a4ca2a25e771702fb1901ecfc8a95
+    da25756b3f6d874af5fc62eb4d23153e0f42f476f6ef83622e6b704eac2b1c0ffe419780e789c457c51fddfda8c999b9a4eba0ae59
+    8c06ff6ecbcc83696b7a3ceb00819fef;
+}
+
+mars-pmac1 {
+  60d7bcda163547d348b75511
+    ""
+    88349068f0361feb5ab861422204a1fb;
+  95e77022907dd1dff7dac5c9
+    94
+    68e53c106eac08332168b9710686bde0;
+  1d26d0c6eb14ad568f86edd1
+    dc9268eeee533285a6ed810c9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f1
+    e73b3d7d64f57c88e3d08c79531304db;
+  37120634c9519848a877ff77
+    bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8f
+    155e94d935999190f3c4707830a1627b;
+  a21f2dd88374d8cde8e160ad10997a21635c6d62
+    ""
+    25767cba62b028dc2b28890f20b71457;
+  c9269029df3e6057acc87638f508046733d9ff61
+    cd
+    8e847f813725a45c86f09bbdf9d3984f;
+  bda3b3e9878731ebfedd4705e505da1435dceaa7
+    b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b54
+    0f6d60ece48580fae8d7914ab7194ccd;
+  2cde52ebfda19d0ccc520f215eb57bb3a4f3ebbb
+    b18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e2
+    922c357cc72223d59ef79018aa0fce6d;
+  7fff63102758fe2b
+    ""
+    0b46ed47aa8b8d1c15b9a1be5116955a;
+  69ac26afa3349829
+    b9
+    779d971e639e3f8c5e8d280d78a56a14;
+  4586306fed54154f
+    8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42
+    9594bd5550eddba1050516976565ee32;
+  f70800df9fcbaca4
+    8b77dba189196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689aef66
+    3f3100f026a9b5c53df1ef563f2e2b96;
+  f5306ceb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b
+    ""
+    a9fdd55b4c5ff6687cd49667d60d525e;
+  6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65
+    b9
+    09210b235e15e9984f6d728f4d266cc3;
+  aca338527ef19b09c063c46f88de9fd41e72d7b97e23e6eabdff3bcd211499268878dbf3
+    0f1dad89d4b9b12012e4713df46795630e7952d22bb02d7100b8b649377d20a8f083455b663e4ee1315f3c8f2aebfa92
+    1ea465d576f919265add525cc88c6cca;
+  1451dcd1af5813b70d30ce2f1fef6ef315d0798391805da08da3aefc5f8584b7c5e61766
+    9c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb6
+    b4e1b487ca7856e1a27ae343a761962f;
+}
index 91fd76a..0ab37b9 100644 (file)
@@ -140,3 +140,63 @@ noekeon-gcm {
     3e98ad97b1901fa089ddb06696ad688a3de2274b81d49c3198c17b2c1bd19556d0679d64d61f034880c89f111631bf78c4512599d7
     5942a749a90e4af467a8a5782590dc69;
 }
+
+noekeon-ocb1 {
+  e4bef260d7bcda163547d348b7551195
+    e77022907dd1dff7dac5c9941d26d0c6
+    ""
+    ""
+    ""
+    5081208cd2d5472d061211afba47e43a;
+  eb14ad568f86edd1dc9268eeee533285
+    a6ed810c9b689daaa9060d2d4b600306
+    23
+    ""
+    ""
+    e7162034dc92f809d9d9e7e41d9018bc;
+  65b0a54364c76c160f11896c4794846e
+    cfa14a7130c9f137120634c9519848a8
+    ""
+    77
+    59
+    fb7d568a9d2b0d8d33ca41930bd73d3f;
+  ff77bf79192a5b50ade5d9cd739a3d1f
+    337f29549e6b0d27a4ba234085406a61
+    ""
+    36512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9269029df3e6057acc87638f50804
+    86ec994914704bd64a4a2b519d43c2efd4554cd0e7cc41a91f25137ac94218e5622df9670340515ef947f90cfe6c0484
+    e72bacd856c8262a0d0bfc10ffb9fdd4;
+  6733d9ff61cdbda3b3e9878731ebfedd
+    4705e505da1435dceaa7b1cc49ae1d50
+    c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b542cde52ebfda1
+    9d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2
+    83eac3304197940d9942306411887d6809d9f04a4bdcea111a877f2579779bbb9dcc0738ea8e05cfd3aa48823ca8abd8
+    76d9c5343a98b1a9e90c8ce4978efd2b;
+  605faee2b03fb648e27fff63102758fe
+    2b69ac26afa3349829b94586306fed54
+    ""
+    154f8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42f70800
+    18adeeddc2d0656141002e939240aa51080969442d958a78b499fb587f585c6688fed54c528603e75c756c490fa9f1486775a01514
+    1974d395a27da8b706de45c0821c6e68;
+  df9fcbaca48b77dba189196d1ebba10b
+    0467cb9fc2712a199e533fa9156308cd
+    ec3f768281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb0b
+    ad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b
+    8c38ca85e4711e354e2662ff977da8ed51aca92d50c1fc40e21fde2e481f93e5c9fc454881eea55c8b6758ce6bf6adff18e01825af
+    cbe1c75a2354cf5dc1df8a6eb6ede687;
+}
+
+noekeon-pmac1 {
+  e4bef260d7bcda163547d348b7551195
+    ""
+    12679e29381d4258973a3d59f3405ec9;
+  e77022907dd1dff7dac5c9941d26d0c6
+    eb
+    a8cf4e78783c841939afff131c3b0b42;
+  14ad568f86edd1dc9268eeee533285a6
+    ed810c9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9519848a8
+    1b01bbe2a8cbae52485e4d410f94ce1e;
+  77ff77bf79192a5b50ade5d9cd739a3d
+    1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10
+    35b9675a79680b83422e4282cc260583;
+}
index 476eec3..46200b2 100644 (file)
@@ -503,3 +503,225 @@ rc2-gcm {
     a1a0fe6856d107a0b49d164b72c0102a06bfc6ea17723f7587fab4808c
     d797a4abd2ac973e;
 }
+
+rc2-ocb1 {
+  60d7bcda163547d348b7551195e77022907dd1dff7dac5c9941d26d0c6eb14ad568f86edd1dc9268ee
+    ee533285a6ed810c
+    ""
+    ""
+    ""
+    1a9b5d9930de70b3;
+  9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9
+    519848a877ff77bf
+    79
+    ""
+    ""
+    c8a18423542f2476;
+  192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8f
+    a21f2dd88374d8cd
+    ""
+    e8
+    65
+    1ad7745b69b0db1f;
+  e160ad10997a21635c6d62c9269029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731ebfe
+    dd4705e505da1435
+    ""
+    dceaa7b1cc49ae1d50c38201a894476b3f102b752eb95295
+    702a8f6236f63b37d12754e285b48acd278a5dd319781c47
+    4aed0840ec1cbc36;
+  33966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b542cde52ebfda19d0ccc520f215eb5
+    7bb3a4f3ebbbb18a
+    c6c95a97a48030370c33d090c54215abd6b3ad54efc9a383
+    78c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe
+    63872e8fa08cbc02a9b67199cf4f8e805df8021d7dc7b857
+    7dc44cfa7b6a75c1;
+  2b69ac26afa3349829b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219bfb474
+    fd71d891f24bb65d
+    ""
+    1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba1
+    0e8b2f665c8e05920b18889a94a59262da8d5511e504ff00740151570d
+    aa8fbbd1631944b9;
+  89196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689aef66f530
+    6ceb0c6b08ac8b0a
+    22260c571b4a42bb8fdb233bfa6a5cfb0bad7d
+    95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5
+    fa9b97df764582e8b06700b70f488912e52bb40512b7e82546c98beea3
+    6125dbe65becfe77;
+  b647da6794c18b5337685a96ed65b9aca338527ef19b09c063c46f88de9fd41e72d7b97e23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012e4713df46795630e7952d22bb02d7100b8b649377d20a8f083455b663e4ee1315f3c8f2aebfa921451dcd1af5813b70d30ce2f1fef6ef315d07983
+    91805da08da3aefc
+    ""
+    ""
+    ""
+    201550d036fd21c4;
+  5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb658b970e47479a684b5aefa69a4cd52147ed12ca986981a874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d44b6d00f06dc188d472a784e0c6f21195a3b9f4ae9855
+    11265febd11c1647
+    20
+    ""
+    ""
+    980aada67611e269;
+  eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc39908445608fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d126b807e6daa089c3f9099c5ffb824173d7634c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3fb90e17
+    21b730374ffc9bc5
+    ""
+    97
+    a0
+    772be2781de4d5f1;
+  f56ccbb2f294b38766fc69f6a9f2c0945ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65cc1770a18cbfe6effd1ff6778554acf1270485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a3e8128f8743d
+    16687b7bb8deb9bd
+    ""
+    205b70e04c091d205cdad9e9a79b1abf91b0851e5ca605ac
+    935c1246b3c54e88b1612b1ae91add5d006c1da2eee504bf
+    cb750259096356be;
+  8451399587011677508a15dde524af3e2bee0646541a42c2ecccb44d65bad397abfaf529ee41cf9a05c7efedef3401539c51d2a90bbf7f1bfc338ab0ef5746ea8fdcccd213e33f7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2d983514605ec590294a319b9802068a9f891bc5ba5afabf8c3
+    122d12d7ff3c4112
+    2d70d17d4569eaff59a332ba58d5d5589bfe079753ee1a95
+    7eb6d6699e6b7ea2725cb2dac07ecde95759ac46fee6dda7
+    e934e27dfd22901f7dee3fbdbd8380d67e381b1b0a969ef5
+    00818ef2133898d7;
+  abc8ad68daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4563d405e51881e99027b8ab9aea3ccf860b0009740763d96836c5f87b95460938de1288c69d80ea12ff4bb5f069b8a2e86041c1b9fc214e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa
+    6c36800d9645563a
+    ""
+    308ba60076817523bd2abf1261b089d8f23a9c2835076a23faac2cdd67
+    2d45ecd08b4263bcdcde76394694aadf336f30ba6b70a6109cc0c01041
+    e1d92d792d66bbd0;
+  771cc667a8331f0a170b66283e4f834a06148f302c3973accd56f6f24e33958b8c2e2352fd61e4fa8fec816ac861a8b33779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2b94b0820cab383a8cffeea7c486315799dc875fba578c8ec4837898a92142b5b0677da1ac273117b45bcfff5d5f8b6fd
+    e2893232a9f81d14
+    517ffae475f6b94a43a67b3d380d2f9aaafe2d
+    d721c0095c8808847689211450ba8095ffab1eaadf66fd22ac1976063e
+    801610881c1b88c3db1db411c93abbac039ff78a579e99226ebecc9b95
+    21d1073d1325dd61;
+  113ab61f813e28a1397a7974a1d7f4220c785f
+    e426a5a0e80f678d
+    ""
+    ""
+    ""
+    4366d16a510e7a2d;
+  404147842941feeffdc2eb44dc8c0d5e8f444f
+    7f4e0c893959b74d
+    c2
+    ""
+    ""
+    71128105ccb95e0c;
+  3a7bb40e7e0013e5150686d2301b43a15a84e8
+    1d7f5cedaa49e241
+    ""
+    4e
+    7b
+    2f6c2965368d5936;
+  bf47970e560475cff206877de69146acc3ab6c
+    f8556b7aa7769459
+    ""
+    48d1b8834df2196c92ec1718dcdeee0d52d9539726d28103
+    3ab97a491b334616b5320f00b70e5e3620d36e5286b74ca3
+    d3584dde26228442;
+  91b3f9d10c39b07ae8f08ce7cee4758a386a99
+    43e97dedfbe61e73
+    7882cd09c2b9a80f34c0fde11c2481b11fc76bfa4dbf710a
+    9e544e0c536ca1e040f9ad5b04140d98edabe08485290a4d
+    d9fe5001eec9f51d5650f640a1acd392b3eb4cb1edde5d31
+    b9c26d9e3edb786f;
+  87d13b07398a1458c2c6b61dbdbc1cccada8c1
+    a0a9aabb6c4e3c35
+    ""
+    54f8fb1ef61614c270295dfc0ca6551ca4bdb75359f91cb9d921056b7d
+    3a35872aae6ecc5f2db7d75ba96b45d22646c61c41ecaa1be26c4685d0
+    9f54725515309904;
+  e74fc9a9b37154ce6c0b396179d31f06a1dd59
+    82cbc0d7cb23841d
+    a1ae8f4ae480cda98ad6cf2bacf6f9fd3f8213
+    30c43f3df6c2b3fac7cbcf96523d4723f91801325eb8553236651c9678
+    595e1b17cf4e6f603f4f37c5cc9f95960010ab062be907ea011276f6cc
+    6cd3322bc4f3e0ec;
+  8d73d192ee53b3f3ebd66ddd98cedbe88e245de25b1593b70f8601
+    562d90a9b59ed034
+    ""
+    ""
+    ""
+    39204a02c689b225;
+  a867642d25d54756fa5c47f16f64b837bb4926214211a1c696ba17
+    2010abb433922a22
+    d9
+    ""
+    ""
+    050a3b74030d78b6;
+  fd881519165eb9d85197a21cc34ac0d5ae7be8dbf98e4ffed2cf6b
+    1372a5aa47b54fd9
+    ""
+    d7
+    f7
+    c80142d220c7ce79;
+  0c70e117bf1cae71b3a56f0e7d839ea59cc783443d64f2ed6a29b9
+    6856beca34fd6544
+    ""
+    bcf86b799e2a1681160ccf055f0fd3001da597a1406d465b
+    a317166b0030c8c02542e56149c7169f92667fa0f1825571
+    e1f6c6acb9532013;
+  7b1419ea51cf858f938f6daafbd656445a09898eaa96ffc3d1d2e3
+    1e4e34c94b8bfae6
+    4825ecd75a66d88eedb969ffe07669845ebb7a24c69f13d0
+    99f47166edf54538e88fbf433a7ff212085179e79771f6ee
+    bf9a3249cfaef471b99720132fe379a074cc10927ed689fc
+    f60b7355eb51cac1;
+  e7283ab178ef2b800d7b969da05780ffc1ba78c70dda7a4ca2a25e
+    771702fb1901ecfc
+    ""
+    8a959cb8e75079bb018ccc8c54f31b450e88f8e9002926ad0284c738f4
+    287fa9c3540fc7adbfaf8a35cb932dbf3ec8be9b1c40ab18d34b1f82bf
+    a1789324aa8ffae5;
+  cb0f58a1e34c8b15ad930c1b627235a2cb84241986c251f5b70be2
+    367f047265264e0d
+    a72efe8995e6c932a17eab511eddb8e4ba463c
+    663035a6ae8a7a899e4279d54d03f0e0f3e961dcfd40088d5be74088e4
+    f2433dd6f072fe804e258d6facf08e8798a615510c1cd0f1283f7b172b
+    b4cee725242787cd;
+}
+
+rc2-pmac1 {
+  60d7bcda163547d348b7551195e77022907dd1dff7dac5c9941d26d0c6eb14ad568f86edd1dc9268ee
+    ""
+    0e2341b111c8fa18;
+  ee533285a6ed810c9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a71
+    30
+    73e15def05b8727d;
+  c9f137120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085
+    406a6136512061f7080cc07df0591d8fa21f2dd88374d8cd
+    9a5cf16bab880541;
+  e8e160ad10997a21635c6d62c9269029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731eb
+    fedd4705e505da1435dceaa7b1cc49ae1d50c3
+    0573bcdf6c429f04;
+  8201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe2b69ac26afa33498
+    ""
+    5fc03971d7234498;
+  29b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a
+    22
+    d334d7d0dd6b420b;
+  260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b09c063c46f88de9fd41e72d7b97e23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012e4713df46795630e7952d22b
+    b02d7100b8b649377d20a8f083455b663e4ee1315f3c8f2a
+    51b4652c5715fba8;
+  ebfa921451dcd1af5813b70d30ce2f1fef6ef315d0798391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb658b970e47479a684b5aefa69a4cd52147ed12ca986981a874498ad0abef8bc4fcb70e27e98
+    ef1f0446b42fb144d44b6d00f06dc188d472a7
+    c288ffba6c151611;
+  84e0c6f21195a3b9f4ae985511265febd11c16
+    ""
+    2787117c93c78272;
+  4720eef9eb1c8dd0b00951f284649016ed0045
+    63
+    b9f64461b055f56d;
+  31854bc78bf43966eb0cfa9138ddc399084456
+    08fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d126
+    dec9356cff25fd20;
+  b807e6daa089c3f9099c5ffb824173d7634c04
+    226f30cbb7f0e4a973a8cd190107314717a774
+    f7be51b3498189d3;
+  56f3ff669c732b58db8f48af65f7cc9e3fb90e1721b730374ffc9b
+    ""
+    69b721838992f955;
+  c597f56ccbb2f294b38766fc69f6a9f2c0945ffd505003cc0cae9c
+    e0
+    27583a3b6ce6eca6;
+  21a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65cc1770a18c
+    bfe6effd1ff6778554acf1270485b203a3c1c4c967c0a458
+    03e79dfa55f427b3;
+  cb948bdd409b687fa3a6827b480aa3a4c84cef64f6c9b53bf8f957
+    f4b03cf43e89957f9a3e8128f8743d16687b7b
+    2eb16505976b0bf1;
+}
index f574d6b..a70cc1b 100644 (file)
@@ -505,3 +505,225 @@ rc5-gcm {
     7a28b08624230f3c25eac43abc77e6525efd4ccf45b72033af74c47021
     70cf57e5e7d02c97;
 }
+
+rc5-ocb1 {
+  60d7bcda163547d348b7551195e77022907dd1dff7dac5c9941d26d0c6eb14ad568f86edd1dc9268eeee533285a6ed810c9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9269029df3e6057
+    acc87638f5080467
+    ""
+    ""
+    ""
+    aa54e91505bc3ec6;
+  33d9ff61cdbda3b3e9878731ebfedd4705e505da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe2b69ac26afa3349829b94586306fed54154f8f28523c03d4de
+    1600157846b710ee
+    72
+    ""
+    ""
+    5e23eb9cc063fb52;
+  807a2219bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b09c063c46f
+    88de9fd41e72d7b9
+    ""
+    7e
+    14
+    8086d6e7472314d3;
+  23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012e4713df46795630e7952d22bb02d7100b8b649377d20a8f083455b663e4ee1315f3c8f2aebfa921451dcd1af5813b70d30ce2f1fef6ef315d0798391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb658b970e47479a684b5aefa69a4cd52147ed12ca986981a874498
+    ad0abef8bc4fcb70
+    ""
+    e27e98ef1f0446b42fb144d44b6d00f06dc188d472a784e0
+    ace115dc9234795ceda92323b7555d9b7088d5f03851f5a8
+    ad07550f521cb01d;
+  c6f21195a3b9f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc39908445608fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d126b807e6daa089c3f9099c5ffb824173d7634c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3fb90e1721b730374ffc9bc597f56ccbb2f294b38766fc69f6a9f2c0945ffd505003
+    cc0cae9ce021a5f1
+    fa4ffa91544485f1a1258b2b9b8f0911e32d65cc1770a18c
+    bfe6effd1ff6778554acf1270485b203a3c1c4c967c0a458
+    9ef4ec1d3bd29e3da733811d8d32183a38e0c77c4fa209f4
+    e2244052d820e90f;
+  cb948bdd409b687fa3a6827b480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a3e8128f8743d16687b7bb8deb9bd205b70e04c091d205cdad9e9a79b1abf91b0851e5ca605ac8451399587011677508a15dde524af3e2bee0646541a42c2ecccb44d65bad397abfaf529ee41cf9a05c7efedef3401539c51d2a90bbf7f1bfc338ab0ef5746ea8fdcccd213e33f7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2
+    d983514605ec5902
+    ""
+    94a319b9802068a9f891bc5ba5afabf8c3122d12d7ff3c41122d70d17d
+    568ebf6a8b3c3aa4bb11dfe4794a9b2dce157fc51ea99119a0b680fba6
+    a7720c81e5980c76;
+  4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d6699e6b7ea2725cb2dac07ecde95759ac46fee6dda7abc8ad68daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4563d405e51881e99027b8ab9aea3ccf860b0009740763d96836c5f87b95460938de1288c69d80ea12ff4bb5f069b8a2e86041c1b9fc214e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa6c36800d96
+    45563a308ba60076
+    817523bd2abf1261b089d8f23a9c2835076a23
+    faac2cdd67771cc667a8331f0a170b66283e4f834a06148f302c3973ac
+    b3118f057e88cb0db02cdb8fac8f78723937c596e56beeda7f56cc4098
+    90496eb2b1214b4c;
+  cd56f6f24e33958b8c2e2352fd61e4fa8fec816ac861a8b33779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2b94b0820cab383a8cffeea7c486315799dc875fba578c8ec4837898a92142b5b0677da1ac273117b45bcfff5d5f8b6fde2893232a9f81d14517ffae475f6b94a43a67b3d380d2f9aaafe2dd721c0095c8808847689211450ba8095ffab1eaadf66fd22ac1976063e113ab61f813e28a1397a7974a1d7f4220c785fe426a5a0e80f678d404147842941feeffdc2eb44dc8c0d5e8f444f7f4e0c893959b74dc23a7bb40e7e0013e5150686d2301b43
+    a15a84e81d7f5ced
+    ""
+    ""
+    ""
+    c80dc735b4b0d91c;
+  aa49e2414ebf47970e560475cff206877de69146acc3ab6cf8556b7aa776945948d1b8834df2196c92ec1718dcdeee0d52d9539726d2810391b3f9d10c39b07ae8f08ce7cee4758a386a9943e97dedfbe61e737882cd09c2b9a80f34c0fde11c2481b11fc76bfa4dbf710a9e544e0c536ca1e040f9ad5b04140d98edabe08485290a4d87d13b07398a1458c2c6b61dbdbc1cccada8c1a0a9aabb6c4e3c3554f8fb1ef61614c270295dfc0ca6551ca4bdb75359f91cb9d921056b7de74fc9a9b37154ce6c0b396179d31f06a1dd5982cbc0d7cb23841da1ae8f4ae480cd
+    a98ad6cf2bacf6f9
+    fd
+    ""
+    ""
+    e90954047fa57813;
+  3f821330c43f3df6c2b3fac7cbcf96523d4723f91801325eb8553236651c96788d73d192ee53b3f3ebd66ddd98cedbe88e245de25b1593b70f8601562d90a9b59ed034a867642d25d54756fa5c47f16f64b837bb4926214211a1c696ba172010abb433922a22d9fd881519165eb9d85197a21cc34ac0d5ae7be8dbf98e4ffed2cf6b1372a5aa47b54fd9d70c70e117bf1cae71b3a56f0e7d839ea59cc783443d64f2ed6a29b96856beca34fd6544bcf86b799e2a1681160ccf055f0fd3001da597a1406d465b7b1419ea51cf858f938f6daafbd656445a09898eaa96ff
+    c3d1d2e31e4e34c9
+    ""
+    4b
+    b5
+    baf615ac4d6842ea;
+  8bfae64825ecd75a66d88eedb969ffe07669845ebb7a24c69f13d099f47166edf54538e88fbf433a7ff212085179e79771f6eee7283ab178ef2b800d7b969da05780ffc1ba78c70dda7a4ca2a25e771702fb1901ecfc8a959cb8e75079bb018ccc8c54f31b450e88f8e9002926ad0284c738f4cb0f58a1e34c8b15ad930c1b627235a2cb84241986c251f5b70be2367f047265264e0da72efe8995e6c932a17eab511eddb8e4ba463c663035a6ae8a7a899e4279d54d03f0e0f3e961dcfd40088d5be74088e4097efb0368c7e2f431ee6988cf2a0e9ebeb3de79c4f86c
+    9e4fba61339d6d90
+    ""
+    7eab7707ca48ff5ba1ae93d16225d469de5747bc1addf574
+    757d492944cb37a370da05afd0734e35c6bc4a0f970843ed
+    33e2b21461d5dd3d;
+  8729720a320fe14fd29cfc59314fe2079c0a2535ded56112d6e3d33dcf7c71cd7d130323794e3da84a9df69703a9caf02d2a8f57ac71e554a6850d55882f8c7ae6994fc8528bd18c374fc43581d2f72a89584a2404a059f7f99c7241a0c879d6d4455b382a9ce757b3e7a1d07585ad9d7ea9c7c9cf54f3bc6d94238ab56d738e02abd651477cd726d6f3ebcd6fadeab50906642a7de6496247060e7be3632ed9bd94bb42f45a8733b2cd2df9d1d905cfdb29983050d6bcdb686a0c897031ad09a5b8fa687ec3bad8e18dc2ad361f1e226e78876cd35f86c639733c5cd8
+    4aed8aaebabb7e0f
+    24edfd9710b7bca91b612ea37fc5cc09f7f62f66b423fcd2
+    dec5de24d264f2c839839c1b06319f687dbc68d9f07fd41c
+    aefcbff3659b393a7cf6952eb2fd4ad464d1be5c0c13b79b
+    1ba057a604a1b599;
+  cb4f8cde8de201ec2680332bbded4883deea0b58b54bdd13c17ef292b0ded3caeb5e57fd21df10bc6186265ee6ea45907de6cb822fb2ef953aea358a03e0fce2e1b9511bd332c86e67f123377a8f0256b8dcc73ae1b3c6cd3f104e3cb24284cfed17811d64d492d39ea7496993a25b072945d83f923e66b0a6689cf0969c003a8fca80e322a4b1bf050c1220450433efb6b6d8a2d820cf27a64b9d47f636845dac557bb3e75f3a18fb8e173416867fcd0ee78ddd9236beec76d55ed58b10f91d07a037791ab96e83c4bf2fb5b205e592c172a5cbc19456c95c1bea6079
+    f3867e52d663cb38
+    ""
+    84b2a0a8ff825df752423f3179bfeb89eca385f20ddce5f1f23564672e
+    19b818cf69f0e92cd5a9f539f91e73dc543141acde903d98a24e1234c8
+    a41bbb9bbe7c82db;
+  370ffc37d400a31e8aac1d426ce10df73c5ee478b3b63d91024780e974a8a2a0e7a36f84ab1286b627e7d01b38a84a6de738721ed80fd0d7f69fa658abb5a440d304128719b541a9451cead18e4c61d93d1f8fcc53574427767396322b3bf7d02cec05093696cec07591ada462271b1d1519eedde0df37a330fe8c22ebd77705917b7e32ae88f45a34a8ba3037235e19a394be4d26ce47317d8087684456b4cfc5555e925e3e7b2ebc829b2d0505ea617b0ca9531bcdb96040d39040e632d562643ccb64286303040fcaf679e914eaddc05af8843ce6a427b99a5dc266
+    de31c09165237eee
+    fe4b58cc034b9f099f04678c2a9da898b39324
+    cd3087a651014f6796f9c4881d89e127e62221e47e57badd678d490c2f
+    f2bc32f9e6d98d55aa5631671de574e5b6e0e0e17a59f20f418d3555f8
+    6a92cb246769b913;
+  320ff8fb1c42761bd439f3e96dc0ed1d5b2169912af1a4e2c533c52ba3e8c71c23a089e231480a
+    a63c484fb34bd522
+    ""
+    ""
+    ""
+    6dcc9a87c6b58479;
+  397f102cb8ecf4f64e329884fe73be257a753b38200bc23f94a079bde2dd98d813655dafa15b85
+    419d15c41a5153cc
+    e5
+    ""
+    ""
+    62692c7d1e45c739;
+  d0e8c8702db2ba11927589678d4f7b8fcfad4818c411f15f452300903874f9a532ee46496ae753
+    a2340af7b91f9632
+    ""
+    fc
+    e3
+    bd2bbcb67cb7a71b;
+  5ae71ae18b40de751ab6b6761ca16434a9935e466e11c1cb072f32a59c313dba3db646ae909a09
+    6697d9a7b0556463
+    ""
+    ff1126ebc43263391424d02739d0787e804d8f1dccf6c897
+    4a7b3da4e48db3ad461bce3fa4e1eb8bfe3d5415b80884f8
+    e8e7fdcdb5bd4809;
+  a8a48431324324041b5302ccd501b538bd03d5cb5c90d1fd3f7d2be187a787032c79ed900764ee
+    4ce1d3fc042c084f
+    7d8c0c48ad7d6f1eabd0fd1ec24a88f26734d5c8d92dbd87
+    3a8fe113090d401bea4d28ff49f10ff593adc258e091abd3
+    7f77bf26d0ccc5527ce3a51a3802d09ea7817507df9dbaeb
+    64cd828bd8c60820;
+  1b62dd1735158f98765970acc6602da063aae01a2a199d3a4f37a5f062d216d2053a83b5d3a048
+    8ab0d2df631b2892
+    ""
+    cdfcf9fdd0f37de9ed67179aeae82fe00009428b297b553230a6d917fa
+    220fc76c73b6b558f327d88b2ceb3c28b23e09ab5b15757d041a66548f
+    99c4bfbe566dbede;
+  0c1a233c9ebc8a4cba45b20543c540fc1b9dbce078b87a1534acf03897b95a3f372e9f6c5a5f2a
+    e44a7dbce9ba43a3
+    9089de20de70d0544b5151db0a16e9769e8f2f
+    c12c7f839fab269a0056284a697ffd4113a1cf43b5d5bdce2d86dead83
+    129f452d3b69b5c33ce6507970c4f36352a7c4bf4e3d621185fa8ef09a
+    c7267b667c9d44bd;
+  f5a356e9106bedf908db61f1119f9700260ea9379cc7232184d217158fee8ca42e75614739e9007f234fbcd86b0ad8f641a0449b6d9b0f99d1cb4a57a4d6f987feb0ade90aa1d81c4f497b3734
+    be301da3e25fe692
+    ""
+    ""
+    ""
+    d59834fe604f12e2;
+  629db57311f422f3a1573f9e0553a23e96265e4326fa532d7136863e5b4bc6c99ade3d4eb23cacdf6e42ad8ca13187eba1532920ba31582b3793b05fa65e9f80c5814b91f4d3c581c7b16c46b4
+    84859c6d19eebaf1
+    24
+    ""
+    ""
+    0c9a3b106bc9bca6;
+  681aa3be9943307fa4ef095ef8e7e50b703dc0420e74227c9351366ef8e98e1e24b48aa989dbb8d0f10471ae5428a6012fbe4f5cb2dab2863e574842cc0b3774e00dcfa63b0db1716c7e916a26
+    fc2e198f8db63ab5
+    ""
+    99
+    87
+    2b28f9babe659513;
+  55989497782f16c5816270ef3fbe4ea22f484ddc12ec8f4bdbd6ebdfbafb21fcf5427dbee5f95b53a0b4cb6d7c128b79f4657895f4b0ba518dd61436140f20d40224baac3a602da83cb254a7e0
+    3f052c63c1f3f00f
+    ""
+    301cc944a1789133bb8048f07dc123f2ca7e20c83988e4bf
+    8be72ebd52cb194d6b0e4fc423bb898f655d938d11985432
+    0564db4049183242;
+  ea6d561ab5aea542db544a14376d5d52f7265c7a8d2fc4feef99b9dba89eb472f71d8eb5affe900d776e4cf74e52b6c86db981143082735c6473a86a5da3d2e8cbb8602ebbaf08bf9315fba15f
+    46714bfd2c8312fb
+    5744dfe84615ddb93f15360161f2efb1fc39b8b6ad97427d
+    caa0435bee7f3a5c11fd01b9c120aa6004f84bcba838a1c3
+    49ac4c21db7bcf9453e935aadb85d304afe6fa4bb10002a0
+    9a90ed7bab6f9d86;
+  3beb4087719135b355dce9ffd6fd639f192e4c2c9a2752bf74a3f63408d3b27df51f44ed5537bfb0162f05edbad1b2c36ceec1dc407475b8e05fcb5ee66c7205f21804c3b73451dc9a3aed7667
+    c6342c8355ff66b9
+    ""
+    1eeffa115cf118eef301f2c93fda303878f7987116dba62d93a7da7027
+    a3c938b621c4032adbd7b5bfeedff1eaa471ddefb2f396290902c00d59
+    d682d2ff660fa862;
+  4ffe5a6506e4e1439de76cc9d332ab03510df3c7d35dc526b5b7785400f53d34b5d55fcac5fbeadd81456bbe6bcedb015be40bfbda656483b32fc4d0a9dc2d7a68b134919d79de5268d7d2ce37
+    2a8a386aa718d09e
+    19612f3d10fe569863bbd3ad42903905058b93
+    4eb213aa037de4e26cd4ceff7490353b5e7621d67ee3ddfb2584e1e12d
+    c494267b5ee0e2bd32b3c4e93b70ddfef6985a4d8360ed32e45209192f
+    32e85181b5d1d655;
+}
+
+rc5-pmac1 {
+  60d7bcda163547d348b7551195e77022907dd1dff7dac5c9941d26d0c6eb14ad568f86edd1dc9268eeee533285a6ed810c9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9269029df3e6057
+    ""
+    25f3e24d8ae10215;
+  acc87638f508046733d9ff61cdbda3b3e9878731ebfedd4705e505da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe2b69ac26afa3349829b94586306fed5415
+    4f
+    f7da3d0334f4ad55;
+  8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a
+    96ed65b9aca338527ef19b09c063c46f88de9fd41e72d7b9
+    5d24a4c29b90fa71;
+  7e23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012e4713df46795630e7952d22bb02d7100b8b649377d20a8f083455b663e4ee1315f3c8f2aebfa921451dcd1af5813b70d30ce2f1fef6ef315d0798391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb658b970e47479a684b5aefa69a4cd52147ed12ca986981a8744
+    98ad0abef8bc4fcb70e27e98ef1f0446b42fb1
+    ca50a7dd104238aa;
+  44d44b6d00f06dc188d472a784e0c6f21195a3b9f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc39908445608fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d126b807e6daa089c3f9099c5ffb824173d7634c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3fb90e1721b730374ffc9bc597f56ccbb2f294b38766fc69f6a9f2c0945ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65cc1770a18cbfe6effd1ff677
+    ""
+    dfde25eb32b74a23;
+  8554acf1270485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a3e8128f8743d16687b7bb8deb9bd205b70e04c091d205cdad9e9a79b1abf91b0851e5ca605ac8451399587011677508a15dde524af3e2bee0646541a42c2ecccb44d65bad397abfaf529ee41cf9a05c7efedef3401539c51d2a90bbf7f1bfc338ab0ef5746ea8fdcccd213e33f7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2d983514605ec590294a319b9802068a9f891bc5ba5afabf8c3122d12d7ff3c41122d70d1
+    7d
+    58afcfd1b2ec5cca;
+  4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d6699e6b7ea2725cb2dac07ecde95759ac46fee6dda7abc8ad68daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4563d405e51881e99027b8ab9aea3ccf860b0009740763d96836c5f87b95460938de1288c69d80ea12ff4bb5f069b8a2e86041c1b9fc214e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa6c36800d9645563a308ba60076817523bd2abf1261b089d8f23a9c2835076a23faac2cdd67771cc667a8331f0a170b66283e4f834a06148f302c
+    3973accd56f6f24e33958b8c2e2352fd61e4fa8fec816ac8
+    3a50ecc246becae2;
+  61a8b33779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2b94b0820cab383a8cffeea7c486315799dc875fba578c8ec4837898a92142b5b0677da1ac273117b45bcfff5d5f8b6fde2893232a9f81d14517ffae475f6b94a43a67b3d380d2f9aaafe2dd721c0095c8808847689211450ba8095ffab1eaadf66fd22ac1976063e113ab61f813e28a1397a7974a1d7f4220c785fe426a5a0e80f678d404147842941feeffdc2eb44dc8c0d5e8f444f7f4e0c893959b74dc23a7bb40e7e0013e5150686d2301b43a15a84e81d7f5cedaa49e2414ebf47970e560475cf
+    f206877de69146acc3ab6cf8556b7aa7769459
+    ce6c1f810be61bf6;
+  48d1b8834df2196c92ec1718dcdeee0d52d9539726d2810391b3f9d10c39b07ae8f08ce7cee475
+    ""
+    497b2f55a33bed03;
+  8a386a9943e97dedfbe61e737882cd09c2b9a80f34c0fde11c2481b11fc76bfa4dbf710a9e544e
+    0c
+    616706b07020fd1b;
+  536ca1e040f9ad5b04140d98edabe08485290a4d87d13b07398a1458c2c6b61dbdbc1cccada8c1
+    a0a9aabb6c4e3c3554f8fb1ef61614c270295dfc0ca6551c
+    af712aca3c532277;
+  a4bdb75359f91cb9d921056b7de74fc9a9b37154ce6c0b396179d31f06a1dd5982cbc0d7cb2384
+    1da1ae8f4ae480cda98ad6cf2bacf6f9fd3f82
+    d47974ebfc5228ef;
+  1330c43f3df6c2b3fac7cbcf96523d4723f91801325eb8553236651c96788d73d192ee53b3f3ebd66ddd98cedbe88e245de25b1593b70f8601562d90a9b59ed034a867642d25d54756fa5c47f1
+    ""
+    ee84e75847026484;
+  6f64b837bb4926214211a1c696ba172010abb433922a22d9fd881519165eb9d85197a21cc34ac0d5ae7be8dbf98e4ffed2cf6b1372a5aa47b54fd9d70c70e117bf1cae71b3a56f0e7d839ea59c
+    c7
+    5605efcbb6e07489;
+  83443d64f2ed6a29b96856beca34fd6544bcf86b799e2a1681160ccf055f0fd3001da597a1406d465b7b1419ea51cf858f938f6daafbd656445a09898eaa96ffc3d1d2e31e4e34c94b8bfae648
+    25ecd75a66d88eedb969ffe07669845ebb7a24c69f13d099
+    6182d51653af224a;
+  f47166edf54538e88fbf433a7ff212085179e79771f6eee7283ab178ef2b800d7b969da05780ffc1ba78c70dda7a4ca2a25e771702fb1901ecfc8a959cb8e75079bb018ccc8c54f31b450e88f8
+    e9002926ad0284c738f4cb0f58a1e34c8b15ad
+    27da50a416aca31c;
+}
index 3060c55..d0b337a 100644 (file)
@@ -1138,3 +1138,434 @@ rijndael-gcm {
     502ab4639cc0336813c1e56e627ca9fd05ae8a04bb2b5a5dd7c03a5a4fc64ec1b9222fb965ee6c675f52bf3815a88d8a0ab837ad7b
     66578408dd93abb230ea3124f859308d;
 }
+
+rijndael-ocb1 {
+  ## Rogaway's tests, from http://web.cs.ucdavis.edu/~rogaway/ocb/ocb-test.htm
+  000102030405060708090a0b0c0d0e0f
+    00000000000000000000000000000001
+    ""
+    ""
+    ""
+    15d37dd7c890d5d6acab927bc0dc60ee;
+  000102030405060708090a0b0c0d0e0f
+    00000000000000000000000000000001
+    ""
+    000102
+    fcd37d
+    02254739a5e3565ae2dcd62c659746ba;
+  000102030405060708090a0b0c0d0e0f
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f
+    37df8ce15b489bf31d0fc44da1faf6d6
+    dfb763ebdb5f0e719c7b4161808004df;
+  000102030405060708090a0b0c0d0e0f
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f10111213
+    01a075f0d815b1a4e9c881a1bcffc3eb7003eb55
+    753084144eb63b770b063c2e23cda0bb;
+  000102030405060708090a0b0c0d0e0f
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    01a075f0d815b1a4e9c881a1bcffc3eb4afcbb7fedc08ca8654c6d304d1612fa
+    c14cbf2c1a1f1c3c137eadea1f2f2fcf;
+  000102030405060708090a0b0c0d0e0f
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021
+    01a075f0d815b1a4e9c881a1bcffc3ebd4903dd0025ba4aa837c74f121b0260fa95d
+    cf8341bb10820ccf14bdec56b8d7d6ab;
+  000102030405060708090a0b0c0d0e0f
+    00000000000000000000000000000001
+    ""
+    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+    4c9b676705ff2df05503872aa3d9e9b122c6b0ec060819146d9c887bad494417b63b4b2b3d9c3a4cd156856564c4a31be812a95d43e76ccf9811cc3a7613b0567bbcabf1a0f64f5245098c239ca7935765a7d402b01b671f1c600bc9a6823025c370a32da44a86911dce981ccaa7e3e720552bf8dd83918d8688e2347ba8691457bc25ab99a51a4388c3c7fad8a71e0c25fa185d2aa710dd9bb93cf2185ac950380732eef63549adcd451e70a0275b070fe1f9e338321aa57de832e1893f5febc0b2f0a6221d1aa187b9f152d20c259ed105c1a4be374993f4963074ef2676621109a03e628286124aefc8a3038b65103aa628f3e6bd6e1659ea0508185679d9a03b0794b914850cb4528293f7e992895a3e80337c23dbc95be1d3502cb9f8961e7dbe22898dc97b75fefaa75b4b3115969af05f54850489e007ce003d8023f490e37845f54d3c6dc3521fae9c34365091393f21139c96be6101a2bdc9dbc36902b5bd19686768154b011270157882f32dfef2a272be3cbf7e5d90ec1b6e374b4a4b806d83913e3df933e8caf5e02b1093b2a2991b34f98a41824a15b26a04a18f287024240d5347a2f3501546aac9c5b6e3f5010d9e2036c415d093892303050eaea499256eb83cba3ad4249537cbc250505024fe413965db1c41a77456711d50933249c63bd006716c4cc6ebf59c03c25a3ac3d06d7713c752f415f9ef59571885f38468c3f11bfd8111f839f080f544cb0c5ab9f87606287e314afe655510ceb8a62abcaef4e65e314f45b10e9858a175207356e9a8ac093f469ee587c18396f8965ce52e894b0bd29011b22f1e67abc16dcb948be141693fe31db635487285eeb4f8b4d5d13e511218759941850cd71fc898f8ba4cf1a4c23b3588dbf1e3e7c86efb113c8820e338a5d90d30c7d854a9ad7582d853d39cd3649cb67e3308c70bc75b732ae744aa126811034ff893829e554af51c83e1f004c3b7c9d0432978be459beaef6824b9cc5f370aa47b8d9edf583c3c84ef695705c95d59a428a675c5c788339ca737f2ec1cb6e83288b5bbfb6d1f81f47659f8f44118d76e900bdbc8094baa4bd950647abe22516a50bc85ea94410f985519076e34696b238262a00ebe889d58b09b81ee1f0b31f864a26978046ac24f1332559b6c5edc24748407e19f169c32d5d3f8ca6f71e4a5c2f72add2185857fde5749d5fd63f5b3658daa3dbaa1b0844fea3c8d2eb5e17febcfbfe44f4cf931129431ff51d6acce7e05107d6c055ad27beb185f7349ea060440a508b40186ec9732f84d21ae158969b671ac0d2ab823399220d75ec7cb50c29de3df974ae1e8c2465e3ecc207160c593443e424a57aaaee3c884632d979ccd0b6a239e1c3fdf777aa556a3c8815c2f8d1496a60048e2b971
+    ab335f725475e33e90ab8c1e4891596d;
+
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    00000000000000000000000000000001
+    ""
+    ""
+    ""
+    b6e92be21127830a690f443f5ce8546d;
+
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    00000000000000000000000000000001
+    ""
+    000102
+    c21ef1
+    09474d786d4640e823f52ff63ec5359a;
+
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f
+    3a709f22daf4c1bcf09cf1c2a0f5beff
+    98d49eb3468988d06d7cb32c438f1f23;
+
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f10111213
+    8e951e2a2fb4ede0397cec6ba5dad5b22137f07d
+    305767a31bc9e344f7f79843d1a268b1;
+
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    8e951e2a2fb4ede0397cec6ba5dad5b247ff19f214fd464e821c63c26e4a11e9
+    63cea28204ef06e5a21a8780ea05050d;
+
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021
+    8e951e2a2fb4ede0397cec6ba5dad5b235e6b8a5dcb0bd0017bfe98111352d3edf3a
+    dfec4b4ed2f95c305d59d79edbf62833;
+
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    00000000000000000000000000000001
+    ""
+    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+    1c97d826583970d083cca433773b02c34c0e6b7127d2258435bac13100c8672db6084c02171ba72b9937b1daccd14d0db1c322c708cc2da13486d772d82d93d12b69874a220573fc25fc05922700228c475ddeae653855a2c6d5f563f6e0724b7b2fe0fa066cba3223e010c5d1a51301a2ae1047409ae88c2779967283d50aa40ebb93e07dbde704f39c76c20cd1e1970bab196eacebab67b076bf901b4ed6f6ff066e230b540737d6856472ac02dce8b7a92aaa8890a47a13fc01bbce7ff902e3a7ede4685cd9bb926fecc27e915ad900f248d7ddd3cb9bff1b589196740c35ecf330e3812a6e0fcd2fd32212b0f0515629e7165cfe64857ec5ca2ad5c6eed654e27508a2c012b726e6931c4edc1fc00dd1d609f8659b24c0b4157f43fc33761d0a9b1fb1389068b600ce2f04cf475fb4483d32902b559cc40a589e97a82417241b92199595c6597dbd0e8dc08db9b6c0323a1d07812908be90c7785c66d1b295ab772793dc7e9725ef19da40b935c6ce10e404165388db6437621ffb08246f32b85a7ee9ca8bec10e3e973136c0b99552d8713bc6c892938ad72f79341f16eaaa7c8adfe45e2c627314c256bf0554dc1651ca77a80d79603cec892ffa58b092b5134c61d6dfba2a2132c75ce56db8cb1d852330a5c4a615645281457c2020391351f8dfa1297d45da234c0549991046d888b52175e1ed2ed3619474b5b270d6b5dcdd94e1a3f20594da51c8bd564e9694cb8b498eedd7a83569da5a209ba34e0fb29c43793097437fecc07e7709c8d64f15197b241ee930652872558c7ccb8c2a0e61e40637d1d587422d5f9f8f8eb25e44f7997058c051c4288356e5dd47e6022176f83c963eac7512cabc7fc8c408d448177e1b1671c82569a2318db142f8b94a60fe5b581c6895e03397a4d9b6f117fb534ad644ef7fafab3fe34c36b5d1544df4567fa94ba7a501ed20032d567bfea10f943170e5bf9b1aac21c0e25ae5f9b98272c75a401ba0185e46ff0c9b29caeb2314a507e2664df2208beb8a5c78563f68b49c3b59b650d18eb75a22296d06943b99239521c59736a10404d458e80ed9288879545c1f9b997036b9eb76c5d75afcd494736971dd27c3f0cbdc15e8cf8337c63417f861a15c324b44fc8b3e4ef6a1924f470aefd0abb6a965451d13835e8a8d9ef94add1d2a41f42c6ebc55045d7a1c6bb0ea3af9560220180fa7b623cc2c44d5cace341746e80289e0b7321178d770e2043a5b02560328c1a01ec4ab64ff98de111c5be5516657cff2f88d3a02643a587903f28a7f9d76cceca8a03671eeecdb2aa81e59de1171e5aaae08415533ceee30aa3ec4fbd551990c074d05c390dfbb1e5d1318e869be9e8417d49ccdaf801ebd42b0309718c36deb2965311710b6d26494a
+    d28b89f5339444767d637e8f1687d204;
+
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    00000000000000000000000000000001
+    ""
+    ""
+    ""
+    796b5fd2716b066932371c17993dcb5a;
+
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    00000000000000000000000000000001
+    ""
+    000102
+    a214d8
+    e31b3449bd1b85b257b404a76b5b86f2;
+
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f
+    8ed0923f5b2c650f31a5dd422463377f
+    794904f519ab5376a30cf7771548e319;
+
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f10111213
+    6512529248df82feb506a7aeab3874f7201b6f79
+    042ac0fd6956c2b0b4205dba0b889699;
+
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    6512529248df82feb506a7aeab3874f7742c85da9d0d6cc91293ce0b333e0343
+    6a91a07cb0bf508fee08b27b5fd9f80d;
+
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    00000000000000000000000000000001
+    ""
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021
+    6512529248df82feb506a7aeab3874f7ae809e2f4f88d6a6088f8d0122a7b9e723a5
+    3ba0661c8a716b550150c9effe3b773c;
+
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    00000000000000000000000000000001
+    ""
+    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+    1464d49f9ead864d5e77ed99198302409e459f2af179c73d2f0d0855d51591cbd9555d9a8542014e2b995e5399c1f804addaff1a2c4b5afe07fd88b7095d1129cbf93f9dad20c625fab0e63788ec4634f0ae06b6fc5c56bfe1b05860e03dc3284d7e2b3190eacee799f523677f942dee5192cfc6b5dddf09a16e2ae13055e9d1ee1d159b7fcea386133de34b92743caddef8c457884a7c5034a53ee23e08aa90086824401c25646561af0d594114b1ccb6627bff630fb17a6021b4f54942ed06f06326e54408019caba8f7231200d30dc548f8ec2c80e06b13d8ebe462c1cdf1c54065afabdb97ac8d8e5a1d065c59795fb55336f01e35a6f7cf8ddbf944e31a24717977c2f9f89aba3ca1ab7559a4f732d301b678ac63c9d5388665b1f9bc56bd67b80fe21f0d6ce4973c078213456b23700725174037fe8426503b0170ce5adda0dedc80f1e5d6701384951bbed58e6ec5912cd20429c5d85c61484136caa00c5f92763414e9f1bb50efc59c834142e5fbbab07f624f28fdee284c2b7322cf3e0682731f764a049fedf2ee8486e60bbd11de998f1dfde848999c806ef779bab0468b674d395883400cc6c05cdf5b51c5fbb181690502914edc42cd4752d9c5fb524adb37149c3199f2329ecaa92006047761f01581eafb96003491fef9ccdbf637c972842645b052ece338e02b6417e25f4f93aa808ec44d8b6efdd774ebac19a1756014a9bb71da38e7743d1617e44bae076f3183c7e50f5c0fd5488cb325edd500ad5e794c469b83a4655c95289dc520797f94cd04e834b1842f769236522cf79ae63ad4664b4745316142bc74ab27be915194eff2a2a1d740c83bffe28b8fe6cd1382ca8de806365275ed05baca90484b03ee87624f072905b69587c05be58aefd4e367257aa95ce3a6d0f65a5e7221c8f729727e3bd66f3d9e33f0d7b8f03ad31e62c837599e062a4c8681ec3276c31d58f2f3f2dd018b3c579fe50d7f911f8665bc064a08ae8ff6d87440e088b2162733ea6066ac70309600819f3f429232bb26376303fc82cd198dfc92382cfb3c8bc245984b845c51e6b5da8a9669e1d961f7182d0bb9757a99c0d72d4c037df2ca29661faf0db89fdce75bfb67031522096ce88f1ca6740f3dbbfd65fdf674a547d82d331abaaf1c5f0742a25c6f5ee0cfe288fb93e76d2fab4fde4904c2967303fcf2adb8bbd333b33728aca04b60dabdd08e0acafaffa97b02cb011db94687afa7bed3157d3a90814eb00e55b39cabfe9ef35bae62c80ad225cc34a0d7cce13c55ac107d00d7b37562222ac5d94cb73ff20d8947fb8ec63735280c0ce31aaca8fee02666f7a6fb2b44f1ebe0f090050f1036877ddb6705b1b622dbd1742f8ed2d985a5aeab4cd2a0e68d1ec3c6c1fec66446150d44
+    826d7f68f3ce28e1e98191e92b23ab0a;
+
+  ## Homemade tests made with my toy implementation.
+  60d7bcda163547d348b7551195e77022
+    907dd1dff7dac5c9941d26d0c6eb14ad
+    ""
+    ""
+    ""
+    bbdd78ab7b6ed33bfbaf8438bf9df7ee;
+  568f86edd1dc9268eeee533285a6ed81
+    0c9b689daaa9060d2d4b6003062365b0
+    a5
+    ""
+    ""
+    f7922af46325a139e69abfbb9b999c4f;
+  4364c76c160f11896c4794846ecfa14a
+    7130c9f137120634c9519848a877ff77
+    ""
+    bf
+    98
+    8c5a791452eb9c1f37d7ab1bf637c432;
+  79192a5b50ade5d9cd739a3d1f337f29
+    549e6b0d27a4ba234085406a61365120
+    ""
+    61f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9269029df3e6057acc87638f508046733d9
+    bed87d0e2b6ab736c20081f2041691cdcaedfff9cdb08f5ff2b443fbb4990690a9bb03b8b801d3562f037c61c6d40929
+    bd5b4d2c9aeae8e9dd6baf02c53cc96d;
+  ff61cdbda3b3e9878731ebfedd4705e5
+    05da1435dceaa7b1cc49ae1d50c38201
+    a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b542cde52ebfda19d0ccc
+    520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605fae
+    b6cbe859f09a407e4a0e376a41b18a84eb07874e1b280fa3cdffa733c207c4b67ace2b90a406b1df6a2389593134796d
+    f370bf6c86cae4c4248040d74c191392;
+  e2b03fb648e27fff63102758fe2b69ac
+    26afa3349829b94586306fed54154f8f
+    ""
+    28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcb
+    2ca95a4a033cd358788f8ffd43bbf820dc0982dfee8583eead310d571cb87e4472331362ff6820abf76cab3b4f405b41ad167f864d
+    e20d6b13e4691b43b82d5e16f77366b9;
+  aca48b77dba189196d1ebba10b0467cb
+    9fc2712a199e533fa9156308cdec3f76
+    8281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95
+    214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b09c063
+    8c3ebaaf931dd282e77df4bf8c242a81593282df72cf91df24dc0bd8f6559f404058b9885529821083839944713def901330eebe75
+    2d965094a4c93d801be22ba3faa198d9;
+  c46f88de9fd41e72d7b97e23e6eabdff3bcd2114
+    99268878dbf30f1dad89d4b9b12012e4
+    ""
+    ""
+    ""
+    8d524a5f17704ae5983de23c8c09fe82;
+  713df46795630e7952d22bb02d7100b8b649377d
+    20a8f083455b663e4ee1315f3c8f2aeb
+    fa
+    ""
+    ""
+    9ea050885c272134d9056a4a94dba2dc;
+  921451dcd1af5813b70d30ce2f1fef6ef315d079
+    8391805da08da3aefc5f8584b7c5e617
+    ""
+    66
+    93
+    813637682fa8878156badce86a0243fa;
+  9c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb
+    16c2e815f422cdf0c8e30308be3c31e6
+    ""
+    bc58c0b7cadcb658b970e47479a684b5aefa69a4cd52147ed12ca986981a874498ad0abef8bc4fcb70e27e98ef1f0446
+    dd538bb0839a0a7925c5a2aaf2cac28de820d307023f2ab4f2ffa04cef224b155ab948ad399e65a9ea8477aea35f29e2
+    e00806f1d623829ca51eeda7493528e9;
+  b42fb144d44b6d00f06dc188d472a784e0c6f211
+    95a3b9f4ae985511265febd11c164720
+    eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc39908445608fe95e81c2533e31c9c1a
+    9851bc2810d858cbbc8424d126b807e6daa089c3f9099c5ffb824173d7634c04226f30cbb7f0e4a973a8cd1901073147
+    4a2e9698c0d7ac74177739a07570f0f6afd2e3f3b6e9badbdbd95fdfc747dbbc7c1c8bceb40e423e1b2fa560ed2da50d
+    f13efea41ebf09ce14655687cb20a908;
+  17a77456f3ff669c732b58db8f48af65f7cc9e3f
+    b90e1721b730374ffc9bc597f56ccbb2
+    ""
+    f294b38766fc69f6a9f2c0945ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65cc1770a18cbfe6effd
+    672edb9395d87cc48fab9727017091e7a6d09f7977fbbfe77f9669485aaeca7a4d54662565aae03033ae925528e9880d33766cafcf
+    a8ff24657308e7d34115b33ff27ff795;
+  1ff6778554acf1270485b203a3c1c4c967c0a458
+    cb948bdd409b687fa3a6827b480aa3a4
+    c84cef64f6c9b53bf8f957f4b03cf43e89957f9a3e8128f8743d16687b7bb8deb9bd205b70e04c091d205c
+    dad9e9a79b1abf91b0851e5ca605ac8451399587011677508a15dde524af3e2bee0646541a42c2ecccb44d65bad397abfaf529ee41
+    367a16e4adbc471e15eed3d0415714c61a67e93f44b5890d17f9d29991bae8406d317e7064c765278d7370f6534462f6eb2db66b23
+    79a7bbc9be788ebb4b94fe94f3f74439;
+  cf9a05c7efedef3401539c51d2a90bbf7f1bfc338ab0ef5746ea8fdc
+    ccd213e33f7e8a5718fd25014107c8e7
+    ""
+    ""
+    ""
+    12f235dbf2dc24a51ec9211ba16494bd;
+  d715a92add9589d1f5c054b2d983514605ec590294a319b9802068a9
+    f891bc5ba5afabf8c3122d12d7ff3c41
+    12
+    ""
+    ""
+    eb5d7e61788af1e2d62a0023cbee8ce8;
+  2d70d17d4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d669
+    9e6b7ea2725cb2dac07ecde95759ac46
+    ""
+    fe
+    65
+    80cbf647b155069f455e35ce699db1b6;
+  e6dda7abc8ad68daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9
+    cf44bbc8c6254d980398bd94e66eb456
+    ""
+    3d405e51881e99027b8ab9aea3ccf860b0009740763d96836c5f87b95460938de1288c69d80ea12ff4bb5f069b8a2e86
+    5b2913b5bd5d4155174de957631d366c398a890cdcdef62c8a7882229522d3b944a1b0cc2d958910469f001ff60f4d05
+    fd4cff3dc0c58f0743b0bd9bc4e7b346;
+  041c1b9fc214e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15
+    ffaa6c36800d9645563a308ba6007681
+    7523bd2abf1261b089d8f23a9c2835076a23faac2cdd67771cc667a8331f0a170b66283e4f834a06148f302c3973accd
+    56f6f24e33958b8c2e2352fd61e4fa8fec816ac861a8b33779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2b94b
+    79b025b6d15120b9cc79ceb62cfe0479248b47f4b6318deeffe7ff11688460479331326370bac61dbec32ba5571d65d8
+    ce1ea3a0bfda4a072c98376f259ed0d3;
+  0820cab383a8cffeea7c486315799dc875fba578c8ec4837898a9214
+    2b5b0677da1ac273117b45bcfff5d5f8
+    ""
+    b6fde2893232a9f81d14517ffae475f6b94a43a67b3d380d2f9aaafe2dd721c0095c8808847689211450ba8095ffab1eaadf66fd22
+    42075fba1b912e07c6f10e6356f6ccc84c60f34ea054dec4e4cdc39eb8f5066218b61d9cd799d28281e84d2d5f0138c944f1074b2a
+    2889c19baf58c2061aa386bb60bf5c94;
+  ac1976063e113ab61f813e28a1397a7974a1d7f4220c785fe426a5a0
+    e80f678d404147842941feeffdc2eb44
+    dc8c0d5e8f444f7f4e0c893959b74dc23a7bb40e7e0013e5150686d2301b43a15a84e81d7f5cedaa49e241
+    4ebf47970e560475cff206877de69146acc3ab6cf8556b7aa776945948d1b8834df2196c92ec1718dcdeee0d52d9539726d2810391
+    b270a45c7bb349e1dfbc9226da556d1916cb8eee0acc23671a875ba1bab176be7067e6ac38c492bef6c908881eed86e3fa34ba13bf
+    dd48047480fa2218d080933718dfa7dc;
+  b3f9d10c39b07ae8f08ce7ce
+    e4758a386a9943e97dedfbe61e737882
+    ""
+    ""
+    ""
+    aec3dd3d7d4d41c121f6da813bc52c6f;
+  cd09c2b9a80f34c0fde11c24
+    81b11fc76bfa4dbf710a9e544e0c536c
+    a1
+    ""
+    ""
+    1fb81cfb59ee9a075fc17a01fb0acb9e;
+  e040f9ad5b04140d98edabe0
+    8485290a4d87d13b07398a1458c2c6b6
+    ""
+    1d
+    cc
+    2efc465c99ba1057c7dce6bf82f04a7d;
+  bdbc1cccada8c1a0a9aabb6c
+    4e3c3554f8fb1ef61614c270295dfc0c
+    ""
+    a6551ca4bdb75359f91cb9d921056b7de74fc9a9b37154ce6c0b396179d31f06a1dd5982cbc0d7cb23841da1ae8f4ae4
+    c5b165d12e4f62edf355fad299ca25ee317c7c65deea43e27c93f43f66d87364b7dc60d20d5bcfde11e982c9275b2ebc
+    5536fc1ce20b189e094233fed7a3da05;
+  80cda98ad6cf2bacf6f9fd3f
+    821330c43f3df6c2b3fac7cbcf96523d
+    4723f91801325eb8553236651c96788d73d192ee53b3f3ebd66ddd98cedbe88e245de25b1593b70f8601562d90a9b59e
+    d034a867642d25d54756fa5c47f16f64b837bb4926214211a1c696ba172010abb433922a22d9fd881519165eb9d85197
+    03cf2190ef314c60a1b51ab9c6d6cf1613779e05cb1f6dd1b54b16f1cebf6b964ee6f21a606b72e5751723d5ad6e284b
+    7eb35f7458437efd2a95c97817396485;
+  a21cc34ac0d5ae7be8dbf98e
+    4ffed2cf6b1372a5aa47b54fd9d70c70
+    ""
+    e117bf1cae71b3a56f0e7d839ea59cc783443d64f2ed6a29b96856beca34fd6544bcf86b799e2a1681160ccf055f0fd3001da597a1
+    8a8f9e2516855b74721de0ee915f1759ae9aa036c52d9cbe43111de9015eb6bd353bef5bb4df325f466d8e2bd09303f912bc0576be
+    c67bc656ea1b155208501e080120205b;
+  406d465b7b1419ea51cf858f
+    938f6daafbd656445a09898eaa96ffc3
+    d1d2e31e4e34c94b8bfae64825ecd75a66d88eedb969ffe07669845ebb7a24c69f13d099f47166edf54538
+    e88fbf433a7ff212085179e79771f6eee7283ab178ef2b800d7b969da05780ffc1ba78c70dda7a4ca2a25e771702fb1901ecfc8a95
+    15d8d8bfdd4b5fbe0885d060fc15bb2763c2d4aad2d18df548ed258db51d9cfd866b4e7798650061e447291f45ebe5da37635d468d
+    329d67984dc92e926bf2c0698fba9e2b;
+}
+
+rijndael-pmac1 {
+  ## Rogaway's tests, from http://web.cs.ucdavis.edu/~rogaway/ocb/pmac-test.htm
+  000102030405060708090a0b0c0d0e0f
+    ""
+    4399572cd6ea5341b8d35876a7098af7;
+  000102030405060708090a0b0c0d0e0f
+    000102
+    256ba5193c1b991b4df0c51f388a9e27;
+  000102030405060708090a0b0c0d0e0f
+    000102030405060708090a0b0c0d0e0f
+    ebbd822fa458daf6dfdad7c27da76338;
+  000102030405060708090a0b0c0d0e0f
+    000102030405060708090a0b0c0d0e0f10111213
+    0412ca150bbf79058d8c75a58c993f55;
+  000102030405060708090a0b0c0d0e0f
+   000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    e97ac04e9e5e3399ce5355cd7407bc75;
+  000102030405060708090a0b0c0d0e0f
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021
+    5cba7d5eb24f7c86ccc54604e53d5512;
+  000102030405060708090a0b0c0d0e0f
+    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+    c2c9fa1d9985f6f0d2aff915a0e8d910;
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    ""
+    0d63b2b2c276de9306b2f37e36dabe49;
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    000102
+    5b1cbc4340752742d8828a7aa2c3197d;
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    000102030405060708090a0b0c0d0e0f
+    0787415737989bc1a2e124c991e400e1;
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    000102030405060708090a0b0c0d0e0f10111213
+    156a7c21121cc773a731e05ab618c6bb;
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    654a145904dc97da9f68318b180970b9;
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021
+    b5ff2016878e834438aa1ff624bfa09c;
+  000102030405060708090a0b0c0d0e0f1011121314151617
+    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+    d3aec29036298bc11a2905f53773ff50;
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    ""
+    e620f52fe75bbe87ab758c0624943d8b;
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    000102
+    ffe124cc152cfb2bf1ef5409333c1c9a;
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    000102030405060708090a0b0c0d0e0f
+    853fdbf3f91dcd36380d698a64770bab;
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    000102030405060708090a0b0c0d0e0f10111213
+    7711395fbe9dec19861aeb96e052cd1b;
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    08fa25c28678c84d383130653e77f4c0;
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021
+    edd8a05f4b66761f9eee4feb4ed0c3a1;
+  000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+    69aa77f231eb0cdff960f5561d29a96e;
+
+  ## Homemade tests made with my toy implementation.
+  60d7bcda163547d348b7551195e77022
+    ""
+    f179b2c8e7020f9992e161128568d833;
+  907dd1dff7dac5c9941d26d0c6eb14ad
+    56
+    335ab1737aaadac9f7d949ab7dc22fb5;
+  8f86edd1dc9268eeee533285a6ed810c
+    9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9519848a877ff77
+    bb8edccea3819962f3207d2494d63229;
+  bf79192a5b50ade5d9cd739a3d1f337f
+    29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21
+    2ecd8200722cfe2378e956131b67d64e;
+  635c6d62c9269029df3e6057acc87638f5080467
+    ""
+    5defdf6083418cf3d45824aa490a4d81;
+  33d9ff61cdbda3b3e9878731ebfedd4705e505da
+    14
+    6c60b9db748a6bdda7823422ed13e4cb;
+  35dceaa7b1cc49ae1d50c38201a894476b3f102b
+    752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3
+    c20cac43be40631325f8d7c9e65991ad;
+  a4f3ebbbb18ac6c95a97a48030370c33d090c542
+    15abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe2b69ac26afa3349829
+    3c963d5d3230ef4dc33ebd19f63965d9;
+  b94586306fed54154f8f28523c03d4de1600157846b710ee72807a22
+    ""
+    050092b5cc9a2d131ea4450c057bbf3d;
+  19bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d
+    42
+    16501f8ba884f8ace15138cefd2639a7;
+  f70800df9fcbaca48b77dba189196d1ebba10b0467cb9fc2712a199e
+    533fa9156308cdec3f768281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5c
+    9738377d0ead6012bac60ae10ac4e5f7;
+  fb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc81517
+    84873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b09c063c46f88de9fd41e72d7b97e23e6
+    709f56ce90034a8882bebbfe453452c7;
+  eabdff3bcd211499268878db
+    ""
+    697879320c2ee020acf13693df75c31d;
+  f30f1dad89d4b9b12012e471
+    3d
+    453c840a1c34bfeff73a653ad97150b4;
+  f46795630e7952d22bb02d71
+    00b8b649377d20a8f083455b663e4ee1315f3c8f2aebfa921451dcd1af5813b70d30ce2f1fef6ef315d0798391805da0
+    aef316f092694e691d9fba0324d8397a;
+  8da3aefc5f8584b7c5e61766
+    9c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb6
+    0638371148ba4e00b0cf138e026a7740;
+}
index 248cbc3..e4f98a7 100644 (file)
@@ -3374,3 +3374,225 @@ rijndael192-gcm {
     0b9e340c141493f9676c99eaa36b0463639b3db40dce5e2bb48c3222a1b82595be0ae12890f61bdc22f71a07b8ad0136d395221c57e12ca7f8184d3adbf82497f5c6ac105b1545d433a9baf50f
     b24035d9900bc75dc879617502f0f9891a2428fa9d6d472d;
 }
+
+rijndael192-ocb1 {
+  60d7bcda163547d348b7551195e77022
+    907dd1dff7dac5c9941d26d0c6eb14ad568f86edd1dc9268
+    ""
+    ""
+    ""
+    13b24e23a3819cb4d7bf3ca036241de7b3420a061b6d62d3;
+  eeee533285a6ed810c9b689daaa9060d
+    2d4b6003062365b0a54364c76c160f11896c4794846ecfa1
+    4a
+    ""
+    ""
+    cdea5e7be1867fe4017045e85df90d80eab16117019cb8d6;
+  7130c9f137120634c9519848a877ff77
+    bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba
+    ""
+    23
+    82
+    b32646848740cec0d5c5a20e2d56c34d455d9574159fc509;
+  4085406a6136512061f7080cc07df059
+    1d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c926
+    ""
+    9029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731ebfedd4705e505da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b00
+    5f7a353fa6c23af6ae6afcd8fae5637d8ac4edb01faa216d94a8b31628140de88e741c1acd085a5e98d64f69090556f641d8f1c813fb1b3675a35aad57f6f48ebb0b7a8270df4216
+    76df452b066d18894a564d78abd6d0c649602bc325f73595;
+  0961040ef2f9b2fc5fa450727a9b542c
+    de52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a
+    97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe2b69ac26afa3349829b94586306fed54154f8f28523c03d4de1600
+    157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9fc2712a199e533fa91563
+    6ed78c4004e5960f34017f9272ef3f237d5fd83076668683183dbc0b62201d1223550af95841dc4ac72f0bc0ce36f014237d026518a6b1bd0ce01e56e87bfa9c42f4651365f65b8c
+    dbfa943531e52ab36828c47f5e21fb22ea0452f0a45395ac;
+  08cdec3f768281e040a9b9a222bd689a
+    ef66f5306ceb0c6b08ac8b0a22260c571b4a42bb8fdb233b
+    ""
+    fa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b09c063c46f88de9fd41e72d7b97e23e6eabdff
+    74751fe7898b6a9c7e28c4e3132fccaf4b9af8ceb80ceebc88672c05c49d5286724ddc6bd3dee79921cdf0a0265277d43048c588e5d707488d1dfd90808d6b74337d1e88aac9618ddf181c1653
+    dd9c6625bb9d22266087655b51efc0a2d8cb642f6c40c6d7;
+  3bcd211499268878dbf30f1dad89d4b9
+    b12012e4713df46795630e7952d22bb02d7100b8b649377d
+    20a8f083455b663e4ee1315f3c8f2aebfa921451dcd1af5813b70d30ce2f1fef6ef315d0798391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ec
+    df3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb658b970e47479a684b5aefa69a4cd52147ed12ca986981a874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d44b
+    bfecbe5ee869f7c5b4bcc3282963ed6dae5755c25a070c40b4d6a8dfb74670bc440d0af7abc018642d36a946d8488aaab9eabc0c7cf4ec6d2f8a9a738c131188af47d7e791c3f7e6a34d26724d
+    5dfee1b1d0a1ebd94737ef267a755fddd2092bfd35e7a238;
+  6d00f06dc188d472a784e0c6f21195a3b9f4ae98
+    5511265febd11c164720eef9eb1c8dd0b00951f284649016
+    ""
+    ""
+    ""
+    6c1ae06b473969bf8d4abf8890f91ccba11f094b316d82cf;
+  ed00456331854bc78bf43966eb0cfa9138ddc399
+    08445608fe95e81c2533e31c9c1a9851bc2810d858cbbc84
+    24
+    ""
+    ""
+    7025cfe14177506ac341239746234c80533c6fac1b94afd8;
+  d126b807e6daa089c3f9099c5ffb824173d7634c
+    04226f30cbb7f0e4a973a8cd190107314717a77456f3ff66
+    ""
+    9c
+    f2
+    91c9a9506104ca20249008a5210a18e972aa0865d8c083c7;
+  732b58db8f48af65f7cc9e3fb90e1721b730374f
+    fc9bc597f56ccbb2f294b38766fc69f6a9f2c0945ffd5050
+    ""
+    03cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65cc1770a18cbfe6effd1ff6778554acf1270485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b480aa3
+    5c8a44ab82a0c2efc66e6e039e7c70a611991b5901b7578c55f4716fb7bd37f55c4bdc962f7f1ed93e14804b4d41695d639b3b5b1725c9129a47ae9542d11787064051cffca20611
+    acb050737b017b0b4c10a120a4d740a2ef33d5e26e7251bf;
+  a4c84cef64f6c9b53bf8f957f4b03cf43e89957f
+    9a3e8128f8743d16687b7bb8deb9bd205b70e04c091d205c
+    dad9e9a79b1abf91b0851e5ca605ac8451399587011677508a15dde524af3e2bee0646541a42c2ecccb44d65bad397abfaf529ee41cf9a05c7efedef3401539c51d2a90bbf7f1bfc
+    338ab0ef5746ea8fdcccd213e33f7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2d983514605ec590294a319b9802068a9f891bc5ba5afabf8c3122d12d7ff3c41122d70
+    77b5382bf3a2e0f3545f398ec08d94825572da0ec6bee8d16a98d42f246eaaa8d049499dcbb872e5d751e700b3d2edff7264c1eaf2f0a0c8987932a53e171e62c2364212f3ef3405
+    87c558d944a7c325965931188213f6a37719581ade0d0561;
+  d17d4569eaff59a332ba58d5d5589bfe079753ee
+    1a957eb6d6699e6b7ea2725cb2dac07ecde95759ac46fee6
+    ""
+    dda7abc8ad68daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4563d405e51881e99027b8ab9aea3ccf860b0009740763d96836c5f87b95460938de128
+    0f50a0d3b7e41c19a9ed4c679ae42b4ba5055d3e9c60652c07daa390cea5c499787ffd7dbb1cdcfe095ac7549db82c3068e053bb2fe3fd8a5749d653be84a5ffadbc1dcfa6a400006f6badaa62
+    14270e56d692e540aa7cb92b1b285eaf00c6e183c6f03341;
+  8c69d80ea12ff4bb5f069b8a2e86041c1b9fc214
+    e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa
+    6c36800d9645563a308ba60076817523bd2abf1261b089d8f23a9c2835076a23faac2cdd67771cc667a8331f0a170b66283e4f834a06148f302c3973accd56f6f24e33
+    958b8c2e2352fd61e4fa8fec816ac861a8b33779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2b94b0820cab383a8cffeea7c486315799dc875fba578c8ec4837898a92142b5b0677da1a
+    d9933fb77ae951691f9b11b7eb9a949191c1a39d09e4bc78a0be75bc8c101ad281eff87a1f5da724d79235e949a589b39125d0a91025a9e126054d980307b934a590687c64e457991a88895367
+    03e5dddeb49ab69f6a062242f8c1a0d1d2efb55895e03a83;
+  c273117b45bcfff5d5f8b6fde2893232a9f81d14517ffae475f6b94a
+    43a67b3d380d2f9aaafe2dd721c0095c8808847689211450
+    ""
+    ""
+    ""
+    ccc44a234758478dbf8787d423d646f61b0cda1598fca3bc;
+  ba8095ffab1eaadf66fd22ac1976063e113ab61f813e28a1397a7974
+    a1d7f4220c785fe426a5a0e80f678d404147842941feeffd
+    c2
+    ""
+    ""
+    49e97ec66094c4bc5ab035aeaf6cc43dacae0f582021e584;
+  eb44dc8c0d5e8f444f7f4e0c893959b74dc23a7bb40e7e0013e51506
+    86d2301b43a15a84e81d7f5cedaa49e2414ebf47970e5604
+    ""
+    75
+    48
+    8128cb7db1a943e0cca309d9204164fbd9c34ca6c07f784c;
+  cff206877de69146acc3ab6cf8556b7aa776945948d1b8834df2196c
+    92ec1718dcdeee0d52d9539726d2810391b3f9d10c39b07a
+    ""
+    e8f08ce7cee4758a386a9943e97dedfbe61e737882cd09c2b9a80f34c0fde11c2481b11fc76bfa4dbf710a9e544e0c536ca1e040f9ad5b04140d98edabe08485290a4d87d13b0739
+    f8e281d776b2fe8726809be7abdd62c22c4b523b7613a5858be2a07021ed3dee1945f62bb37cc0be1de3b1e475ed5828ba13a26f34e2651da980ca02602c5e58c8834ba9e8cb5e5d
+    97fb24449e5402189c30187aedf9627577f0397158331735;
+  8a1458c2c6b61dbdbc1cccada8c1a0a9aabb6c4e3c3554f8fb1ef616
+    14c270295dfc0ca6551ca4bdb75359f91cb9d921056b7de7
+    4fc9a9b37154ce6c0b396179d31f06a1dd5982cbc0d7cb23841da1ae8f4ae480cda98ad6cf2bacf6f9fd3f821330c43f3df6c2b3fac7cbcf96523d4723f91801325eb8553236651c
+    96788d73d192ee53b3f3ebd66ddd98cedbe88e245de25b1593b70f8601562d90a9b59ed034a867642d25d54756fa5c47f16f64b837bb4926214211a1c696ba172010abb433922a22
+    bcfa139e6fdf6e5bcf96a5c29f8e0145c1d613edd25b9653bf6772d21bc6ae69fa71eae2029716605cf398247b7f2e5a97c5886d94fd674c40b5d42218c2adc7f84770e7288fab36
+    c92aa7646695a597df47a2c686ba2abe2b0d20caa4052185;
+  d9fd881519165eb9d85197a21cc34ac0d5ae7be8dbf98e4ffed2cf6b
+    1372a5aa47b54fd9d70c70e117bf1cae71b3a56f0e7d839e
+    ""
+    a59cc783443d64f2ed6a29b96856beca34fd6544bcf86b799e2a1681160ccf055f0fd3001da597a1406d465b7b1419ea51cf858f938f6daafbd656445a09898eaa96ffc3d1d2e31e4e34c94b8b
+    2cc3069cc00db4c51fb54ccb6ed44217a5169eeba4d3fae16878af2b0f969d5ed42da3fe8901645369768e0ca33cdec8cd422a0442c798d8a214fdbec4564b09d70666884ced9a0e64bc9eb3d5
+    d9a32a67db1fefa016cd7961df3e0a9e9949168242a2181a;
+  fae64825ecd75a66d88eedb969ffe07669845ebb7a24c69f13d099f4
+    7166edf54538e88fbf433a7ff212085179e79771f6eee728
+    3ab178ef2b800d7b969da05780ffc1ba78c70dda7a4ca2a25e771702fb1901ecfc8a959cb8e75079bb018ccc8c54f31b450e88f8e9002926ad0284c738f4cb0f58a1e3
+    4c8b15ad930c1b627235a2cb84241986c251f5b70be2367f047265264e0da72efe8995e6c932a17eab511eddb8e4ba463c663035a6ae8a7a899e4279d54d03f0e0f3e961dcfd40088d5be74088
+    c077af8264ca4bd0902dfe7c6f43dc4232c619bae8d151f9be98caf39527e373efec0dc9fa55b62f207b533724b78935255a608e9ac32da258e8f4549d473b95b9057900b2f715425d19804801
+    125a60f3f7f0913f203632d93f4f2cc70e76ca59cfda9a57;
+  e4097efb0368c7e2f431ee69
+    88cf2a0e9ebeb3de79c4f86c9e4fba61339d6d907eab7707
+    ""
+    ""
+    ""
+    d040e427a7ea51019b49c65a9c38a803bdffe3635357b8e3;
+  ca48ff5ba1ae93d16225d469
+    de5747bc1addf5748729720a320fe14fd29cfc59314fe207
+    9c
+    ""
+    ""
+    2bd8090e45ccb18c92e3c133a19e0a3d3bca6dcdc4f5d591;
+  0a2535ded56112d6e3d33dcf
+    7c71cd7d130323794e3da84a9df69703a9caf02d2a8f57ac
+    ""
+    71
+    fb
+    bdb4cda8932cacfa59b5e1635a394ffae6a03ba034759e86;
+  e554a6850d55882f8c7ae699
+    4fc8528bd18c374fc43581d2f72a89584a2404a059f7f99c
+    ""
+    7241a0c879d6d4455b382a9ce757b3e7a1d07585ad9d7ea9c7c9cf54f3bc6d94238ab56d738e02abd651477cd726d6f3ebcd6fadeab50906642a7de6496247060e7be3632ed9bd94
+    b29f37bc84835d3cead667fda5bcaef6a0b93a0e1e79169f94d0111d28e0374fe7cc4a2f9ac274c3f31121d2a1058094b6ac1707f92c87a45301cc2451eebd8501d63a8f561d2f86
+    40f807380b82f25a620597ef741e74638ccb5a7a58e4bad4;
+  bb42f45a8733b2cd2df9d1d9
+    05cfdb29983050d6bcdb686a0c897031ad09a5b8fa687ec3
+    bad8e18dc2ad361f1e226e78876cd35f86c639733c5cd84aed8aaebabb7e0f24edfd9710b7bca91b612ea37fc5cc09f7f62f66b423fcd2dec5de24d264f2c839839c1b06319f687d
+    bc68d9f07fd41ccb4f8cde8de201ec2680332bbded4883deea0b58b54bdd13c17ef292b0ded3caeb5e57fd21df10bc6186265ee6ea45907de6cb822fb2ef953aea358a03e0fce2e1
+    d3445b37b2ee6f261baf94fd09ba0121b1ef9a8dacddacff5ed3bf46c36cfd1f2a5e9a1e35b73299bd31137a2a7746c8b46eeda7fec1662842934d0d1b41d240a40886e17f3733d1
+    2f65d5e606ea39bd566246b137733278aa2942ace8edc2fb;
+  b9511bd332c86e67f123377a
+    8f0256b8dcc73ae1b3c6cd3f104e3cb24284cfed17811d64
+    ""
+    d492d39ea7496993a25b072945d83f923e66b0a6689cf0969c003a8fca80e322a4b1bf050c1220450433efb6b6d8a2d820cf27a64b9d47f636845dac557bb3e75f3a18fb8e173416867fcd0ee7
+    65bb74fac682e5422c376f255b91a383334486c836f5f5d578b276ef240206a1761e2dc66109d2b11c4b2d25411c5e0a86316501a1a22a779ed2be816b7b84ebbf1c0cbb41a332dcc43a8d0912
+    0023df18856b33924dbab9d86440a7fd289d314aa17a282c;
+  8ddd9236beec76d55ed58b10
+    f91d07a037791ab96e83c4bf2fb5b205e592c172a5cbc194
+    56c95c1bea6079f3867e52d663cb3884b2a0a8ff825df752423f3179bfeb89eca385f20ddce5f1f23564672e370ffc37d400a31e8aac1d426ce10df73c5ee478b3b63d
+    91024780e974a8a2a0e7a36f84ab1286b627e7d01b38a84a6de738721ed80fd0d7f69fa658abb5a440d304128719b541a9451cead18e4c61d93d1f8fcc53574427767396322b3bf7d02cec0509
+    b58b1c9dc465be8b7159c9f7c4b8ce39c251d39792eda3da5be8ef7b887114bc1b5af143be79983b37a11a0d96082c924d0308999a39734d0d6eee63e651be9a2cb1cb2fc8aa6db22bb146ee53
+    210b175366af46c07715847dfd494cbad171f2d8ea711f9c;
+}
+
+rijndael192-pmac1 {
+  60d7bcda163547d348b7551195e77022
+    ""
+    a2de3f1a78f51e79b270024ef181a3c7866c4901882d8f2b;
+  907dd1dff7dac5c9941d26d0c6eb14ad
+    56
+    a69a6414d3476b1fe006cd01597794cdd6f335aa776941db;
+  8f86edd1dc9268eeee533285a6ed810c
+    9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba
+    8cadcc0f2b6f103713f1875836da1fec0d2492e592969018;
+  234085406a6136512061f7080cc07df0
+    591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9269029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731ebfedd4705e505da1435dceaa7b1cc49
+    5fb116908156463f1b1f698e9cecf1e6ba99c5292359e8ce;
+  ae1d50c38201a894476b3f102b752eb952953396
+    ""
+    9590db354fa1be8edc4f4464d0e292ddc6c38614cd7a8d9f;
+  6f27043eb621b7f65b000961040ef2f9b2fc5fa4
+    50
+    d4354854bd0f842a2d7d2d1ba28362a1ceea024ee706eb41;
+  727a9b542cde52ebfda19d0ccc520f215eb57bb3
+    a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe2b69ac26afa3349829b94586306fed54154f
+    979f0fbf31f2afcafed5d59414bbbc8629c5c1451ca52f3b;
+  8f28523c03d4de1600157846b710ee72807a2219
+    bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f7682
+    9b980aca9bdbb8333cacfd8a76c8bd57e1862136831e194a;
+  81e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22260c571b4a
+    ""
+    2e46bc43892089f8eba2108812c2cc5c4ec74ae390223bac;
+  42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c
+    03
+    e7cf293a42d599e87773781f8abd4a303f2967de3a36b17b;
+  7ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65b9
+    aca338527ef19b09c063c46f88de9fd41e72d7b97e23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012e4713df46795630e7952d22bb02d7100b8b649377d20a8f083455b
+    c190a80eb16dea538d732bad5c1d06decbc09ee1a4eee891;
+  663e4ee1315f3c8f2aebfa921451dcd1af5813b70d30ce2f1fef6ef3
+    15d0798391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb658b970e4
+    54fde6333577613aebc01d5de58556aec8dc6911983a136f;
+  7479a684b5aefa69a4cd5214
+    ""
+    1d0a9120f17311d23b4babcdb18d1225ec90fa3276f35054;
+  7ed12ca986981a874498ad0a
+    be
+    34750cd4fc57273de4b5858c39bf05da2b0156496adec2b3;
+  f8bc4fcb70e27e98ef1f0446
+    b42fb144d44b6d00f06dc188d472a784e0c6f21195a3b9f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc3990844
+    22e6ac9f6fa50e49f0e24e710d62c83fdb6ade50f102bc31;
+  5608fe95e81c2533e31c9c1a
+    9851bc2810d858cbbc8424d126b807e6daa089c3f9099c5ffb824173d7634c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e
+    d3653df2ff5ca70439d6f154551ba9ff27c5ead8db7af2a9;
+}
index a4cd638..fc5a33e 100644 (file)
@@ -3387,3 +3387,225 @@ rijndael256-gcm {
     4c8ecebea3c8b010464c18f765a3e100014f564146cfb6382d1e60f5727f37bcfd18f0227c1cc3817fdac6aa202fb93606338616cd140f999d57c36cbfcfd3eb38fb4c4cf5e34a9f0a16b703d268c428e4b3a2b26b4d3a19b08b5468632020ae7cf98a5b6a
     305e9c670143f7d88cefabee533e27ad48988b607be91f0aa2f17649d629b688;
 }
+
+rijndael256-ocb1 {
+  60d7bcda163547d348b7551195e77022
+    907dd1dff7dac5c9941d26d0c6eb14ad568f86edd1dc9268eeee533285a6ed81
+    ""
+    ""
+    ""
+    ed3e1a85a9f92797e1fecc6ea6840a3e0474ce6a9698a720d3df978f3528e06b;
+  0c9b689daaa9060d2d4b6003062365b0
+    a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9519848a877ff
+    77
+    ""
+    ""
+    dfb76cec6a750934ea46b81a7e789faca6d7dfb9da0476a03762f15639df77d3;
+  bf79192a5b50ade5d9cd739a3d1f337f
+    29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd883
+    ""
+    74
+    c4
+    d5bf8b3be61be60645f84da4eeaf832f082a8c0d6ffc3cc3dcbe0b59bee9de13;
+  d8cde8e160ad10997a21635c6d62c926
+    9029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731ebfedd4705e5
+    ""
+    05da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad
+    a0403a115ebc9ec954f8e240c84a2c9c41241258c510be90585ac99233ae5283d3761b07c48c4c6ed2d445d16d5db78c50e54f9866ba1d5259a887eed0f2efd3c93d77945b1c03f8cb8e30ac431175dbb47f03d3643708aae7f0a329eb433b58
+    a26972939b8f37a37fbb8444db5fe6689b857b639d7b54246144435926e265a7;
+  54efc9a38378c5b93bf4f2aad2605fae
+    e2b03fb648e27fff63102758fe2b69ac26afa3349829b94586306fed54154f8f
+    28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689a
+    ef66f5306ceb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b09c063c46f88de9fd41e72d7b97e
+    dcdb20cd5e1952a7585ea1a5982f5f52fa76a949f615460c564c1f19106a7d06c5b1b194d64d000a368d353e255edb34e405639298630f6dd09210b7218ddbd701c8d29996da07df9ea188c3a58f8f924cae99a9a04822d148b39e396eae384d
+    4e7b366cc5683e7f8687281003d4c70f2167371aa3cedb3aea7c7b8a3a4bb8c5;
+  23e6eabdff3bcd211499268878dbf30f
+    1dad89d4b9b12012e4713df46795630e7952d22bb02d7100b8b649377d20a8f0
+    ""
+    83455b663e4ee1315f3c8f2aebfa921451dcd1af5813b70d30ce2f1fef6ef315d0798391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb658b970e47479a6
+    158feb4340d051637c994afa715876f75eb2f49e832bf4a3d8e7f2d7268f4050406b13952ec6aa85123767375335c65e2651fb803c3399c5f51278c0381b942c575470ef2f2d7a3a003fc174d62c38d4eabcb7108adf2e2eaaf6c74e13b759f37fead1fdcc
+    aaee630716b5f9a791a7941b640408defde3f1747b50bdecde2bf82723fbe523;
+  84b5aefa69a4cd52147ed12ca986981a
+    874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d44b6d00f06dc188d472
+    a784e0c6f21195a3b9f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc39908445608fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d126b807e6daa089c3f9
+    099c5ffb824173d7634c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3fb90e1721b730374ffc9bc597f56ccbb2f294b38766fc69f6a9f2c0945ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b
+    374a36cca45ec0f3ea9cc9bc1fb67b6c07a8ab781d118ce9d56988904518f853d2f7551f61b0d87e5afc19c5e732dc0c7d7aea114bb3d7af88cbcd21cb7d06a22eea30921d1277e4e4577152497ff59ff72e55156262bdde9729721c2dc467afb977e5ee63
+    ccbfaf10e2aeade3c72d7f465c271105ca36369bb2644d6da6706702fc8601bf;
+  8f0911e32d65cc1770a18cbfe6effd1ff6778554
+    acf1270485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b480aa3a4c8
+    ""
+    ""
+    ""
+    acf282a61dd79a7e99740e531b665b12c199e0f66bc3f11f4a08d8fcee8fb713;
+  4cef64f6c9b53bf8f957f4b03cf43e89957f9a3e
+    8128f8743d16687b7bb8deb9bd205b70e04c091d205cdad9e9a79b1abf91b085
+    1e
+    ""
+    ""
+    86c6f639096f603555766a0a95549f99fd21ee543f9fad5b44d644c96114e172;
+  5ca605ac8451399587011677508a15dde524af3e
+    2bee0646541a42c2ecccb44d65bad397abfaf529ee41cf9a05c7efedef340153
+    ""
+    9c
+    8f
+    51df0841f87c0475e6a8995ff30422fcebc313107123f17dba67767e0dcff519;
+  51d2a90bbf7f1bfc338ab0ef5746ea8fdcccd213
+    e33f7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2d983514605ec59
+    ""
+    0294a319b9802068a9f891bc5ba5afabf8c3122d12d7ff3c41122d70d17d4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d6699e6b7ea2725cb2dac07ecde95759ac46fee6dda7abc8ad68daac90cfe22d2f1f2968cc42fa8b669ed3bb
+    0a74784147a1986b028e29a9b9ab25645be3d7cb0774e9e5acfbaba28742a47196bb5297b70ddfbf10ce5f1517abddcb29d0fd5b715601a795af85d5503033a19bd63c2533fd50f3bab3c18fbbd7894242f15adad0f1583a5a63ab9745dc712a
+    9f1f55ba4cb8865c9b9f839183519a3b3c0bb4ecc294e1ea248be64aa7f48f08;
+  3542a9cf44bbc8c6254d980398bd94e66eb4563d
+    405e51881e99027b8ab9aea3ccf860b0009740763d96836c5f87b95460938de1
+    288c69d80ea12ff4bb5f069b8a2e86041c1b9fc214e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa6c36800d9645563a308ba60076817523bd2abf1261b089d8f23a9c2835076a23faac2cdd67771cc667a8331f0a170b66283e4f
+    834a06148f302c3973accd56f6f24e33958b8c2e2352fd61e4fa8fec816ac861a8b33779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2b94b0820cab383a8cffeea7c486315799dc875fba578c8ec4837898a92142b5b0677da1ac27311
+    882bc55429939372f9123390b69f5ce58d26d439fef94063f8b2e96ee4dd8fabd4e9d886e1a1362ea2f95e6e9691c0ddced94c5ecc54893643ed0e75660d43a19a2dff771b1154c860b40d50d68f514c94ee102a17dd347f81954c6ba2266cfd
+    dff24d1115cd7f5f41e72a4709896297a9cc05dade73cb71ae7b26254faf70da;
+  7b45bcfff5d5f8b6fde2893232a9f81d14517ffa
+    e475f6b94a43a67b3d380d2f9aaafe2dd721c0095c8808847689211450ba8095
+    ""
+    ffab1eaadf66fd22ac1976063e113ab61f813e28a1397a7974a1d7f4220c785fe426a5a0e80f678d404147842941feeffdc2eb44dc8c0d5e8f444f7f4e0c893959b74dc23a7bb40e7e0013e5150686d2301b43a15a84e81d7f5cedaa49e2414ebf47970e56
+    d96d78f641edc2bf6b208202b51ec76d956f5df89026a9f64d9266a2353dbb708b28e63a6999c6adcc265ff3d348d648196d3583e5af294a9bfb31e310f151d70ba5c9735224d768ec4f9400aafcad9aaecf25fd4cd392e35e7c00fe2fd8787deb07f44d00
+    94837daba7fa8fd70cb03d138e2f493e3db5c9388cadc8e5a6612075fe49b300;
+  0475cff206877de69146acc3ab6cf8556b7aa776
+    945948d1b8834df2196c92ec1718dcdeee0d52d9539726d2810391b3f9d10c39
+    b07ae8f08ce7cee4758a386a9943e97dedfbe61e737882cd09c2b9a80f34c0fde11c2481b11fc76bfa4dbf710a9e544e0c536ca1e040f9ad5b04140d98edabe08485290a4d87d13b07398a1458c2c6b61dbdbc1cccada8c1a0a9aa
+    bb6c4e3c3554f8fb1ef61614c270295dfc0ca6551ca4bdb75359f91cb9d921056b7de74fc9a9b37154ce6c0b396179d31f06a1dd5982cbc0d7cb23841da1ae8f4ae480cda98ad6cf2bacf6f9fd3f821330c43f3df6c2b3fac7cbcf96523d4723f91801325e
+    af41f07118ec731dca9ce6df290baa0e5000c68a380a9572679c32437509525919c9b04362bece8721d10aaf0fa8dd9a5fa9f3770c5d5ec1a0deae996255b61fb81f894a521f939cca36fbd9f730ab0d0c17d0689f8c1ee78d4707a36c219a0a60c3fa2def
+    db0e21f651cb6892563f22ec7d4e04c8ab46c22221819f3060f64c5736ee06a6;
+  b8553236651c96788d73d192ee53b3f3ebd66ddd98cedbe88e245de2
+    5b1593b70f8601562d90a9b59ed034a867642d25d54756fa5c47f16f64b837bb
+    ""
+    ""
+    ""
+    9f736b72141985c5a64c5888c112a3c872497e54cb822ec3790fc73055d5ee58;
+  4926214211a1c696ba172010abb433922a22d9fd881519165eb9d851
+    97a21cc34ac0d5ae7be8dbf98e4ffed2cf6b1372a5aa47b54fd9d70c70e117bf
+    1c
+    ""
+    ""
+    e7b0f52d7adf83fe817103f61ac846a02e957786c5e605057e41fe4dfa552948;
+  ae71b3a56f0e7d839ea59cc783443d64f2ed6a29b96856beca34fd65
+    44bcf86b799e2a1681160ccf055f0fd3001da597a1406d465b7b1419ea51cf85
+    ""
+    8f
+    2c
+    c93c329ab8f440bb37247f60a5370b34d34ad7decec8e6b2d160acd4c1d12410;
+  938f6daafbd656445a09898eaa96ffc3d1d2e31e4e34c94b8bfae648
+    25ecd75a66d88eedb969ffe07669845ebb7a24c69f13d099f47166edf54538e8
+    ""
+    8fbf433a7ff212085179e79771f6eee7283ab178ef2b800d7b969da05780ffc1ba78c70dda7a4ca2a25e771702fb1901ecfc8a959cb8e75079bb018ccc8c54f31b450e88f8e9002926ad0284c738f4cb0f58a1e34c8b15ad930c1b627235a2cb
+    a213a44a04d450838aa1eff21b53902349c2af2ef7e104af43fcc781b42c9ba22cf484ff71dec347a3f15c73eb2e644fd119297807f96eb604e32bfc76a2dfc2ad53c2ea3842a06e625954689df48ee180d465a55d5df9f2caf89ff7583e6a6e
+    d09e13109159cbee4f1a32379ea1daf61be14ef11778514d79a403df22b3873b;
+  84241986c251f5b70be2367f047265264e0da72efe8995e6c932a17e
+    ab511eddb8e4ba463c663035a6ae8a7a899e4279d54d03f0e0f3e961dcfd4008
+    8d5be74088e4097efb0368c7e2f431ee6988cf2a0e9ebeb3de79c4f86c9e4fba61339d6d907eab7707ca48ff5ba1ae93d16225d469de5747bc1addf5748729720a320fe14fd29cfc59314fe2079c0a2535ded56112d6e3d33dcf7c71cd7d1303
+    23794e3da84a9df69703a9caf02d2a8f57ac71e554a6850d55882f8c7ae6994fc8528bd18c374fc43581d2f72a89584a2404a059f7f99c7241a0c879d6d4455b382a9ce757b3e7a1d07585ad9d7ea9c7c9cf54f3bc6d94238ab56d738e02abd6
+    fcc7943e60d8714fb6070f0bf3db4215b5bad60d25f36aec66ad4ab1c8512b26e5075077d4685495da25e954e00972df8f01ee3e9a6a29ee9d27f45bef2a2d975fa0e2736b59f7273df0489bc440883bdfdf55cceb03bbaac41c4b92bfe099c7
+    72230dfc699fa95374349b8ab1e55f95234d8f8ffb80eb193157746d5e28f670;
+  51477cd726d6f3ebcd6fadeab50906642a7de6496247060e7be3632e
+    d9bd94bb42f45a8733b2cd2df9d1d905cfdb29983050d6bcdb686a0c897031ad
+    ""
+    09a5b8fa687ec3bad8e18dc2ad361f1e226e78876cd35f86c639733c5cd84aed8aaebabb7e0f24edfd9710b7bca91b612ea37fc5cc09f7f62f66b423fcd2dec5de24d264f2c839839c1b06319f687dbc68d9f07fd41ccb4f8cde8de201ec2680332bbded48
+    1c4d9a95f9cf85283b59197b0449fa65429a7de12cfb25453f01b0f7afcc5534fd6faa80ecbfc8607fe7980370d3042421385d7c684ccf71d4170db54359fcb4cff4d2d6126b587fd6b2b50279ca190f605c740546b2a0a75055c0cb2cae2506a5fd23be2c
+    fccd1e6489cf18fed4f745338cb06d0a61a6c692d72bbab24b3fa0ee9e9e2a88;
+  83deea0b58b54bdd13c17ef292b0ded3caeb5e57fd21df10bc618626
+    5ee6ea45907de6cb822fb2ef953aea358a03e0fce2e1b9511bd332c86e67f123
+    377a8f0256b8dcc73ae1b3c6cd3f104e3cb24284cfed17811d64d492d39ea7496993a25b072945d83f923e66b0a6689cf0969c003a8fca80e322a4b1bf050c1220450433efb6b6d8a2d820cf27a64b9d47f636845dac557bb3e75f
+    3a18fb8e173416867fcd0ee78ddd9236beec76d55ed58b10f91d07a037791ab96e83c4bf2fb5b205e592c172a5cbc19456c95c1bea6079f3867e52d663cb3884b2a0a8ff825df752423f3179bfeb89eca385f20ddce5f1f23564672e370ffc37d400a31e8a
+    277fd76c5b58942c48687f4153c8d8aa6521902cff09bab07145801225bb2823fe4e112fcd11726bc62da7864baa800905c9392017a574d966aca87da54d481e320934c4d5b8858bb53c9f91170e96edf3e3b6a583677e2eb0f6e876162ebc2d9f9d5f59d9
+    af850a26c1eaa2af0c507d84542fd2a5dfda7ad3f6bbd94d7202716f0bd83b66;
+  ac1d426ce10df73c5ee478b3
+    b63d91024780e974a8a2a0e7a36f84ab1286b627e7d01b38a84a6de738721ed8
+    ""
+    ""
+    ""
+    1a65a7de04f027cc7ee41a321985a03044b009409ea0a04a6ef4f268a40d647c;
+  0fd0d7f69fa658abb5a440d3
+    04128719b541a9451cead18e4c61d93d1f8fcc53574427767396322b3bf7d02c
+    ec
+    ""
+    ""
+    2257228003251d6931be43f6f65654859ae865666736fc80b7ce6feb69cf8c4d;
+  05093696cec07591ada46227
+    1b1d1519eedde0df37a330fe8c22ebd77705917b7e32ae88f45a34a8ba303723
+    ""
+    5e
+    44
+    d4ef8d10bc4dfc028117bf6b79fadd4498eee972464c390c38cdd44837eb3a8c;
+  19a394be4d26ce47317d8087
+    684456b4cfc5555e925e3e7b2ebc829b2d0505ea617b0ca9531bcdb96040d390
+    ""
+    40e632d562643ccb64286303040fcaf679e914eaddc05af8843ce6a427b99a5dc266de31c09165237eeefe4b58cc034b9f099f04678c2a9da898b39324cd3087a651014f6796f9c4881d89e127e62221e47e57badd678d490c2f320ff8fb1c42
+    2702a4cc524f8c7eaad3198222eb31272dcbd5885798ecd2767a8e9292550feef8f1a6ce4c615967cc154def805d429a2964b5202955972c106deee2444df7dc0a3ba8940bff435cde364f1a43e4e5081d6bc4296ffcc3f907152b1e01e892ea
+    37ede9a353c66446268a96e3101e6716b5a0875413bf2cc714720277885cf14d;
+  761bd439f3e96dc0ed1d5b21
+    69912af1a4e2c533c52ba3e8c71c23a089e231480aa63c484fb34bd522397f10
+    2cb8ecf4f64e329884fe73be257a753b38200bc23f94a079bde2dd98d813655dafa15b85419d15c41a5153cce5d0e8c8702db2ba11927589678d4f7b8fcfad4818c411f15f452300903874f9a532ee46496ae753a2340af7b91f9632fc5ae71a
+    e18b40de751ab6b6761ca16434a9935e466e11c1cb072f32a59c313dba3db646ae909a096697d9a7b0556463ff1126ebc43263391424d02739d0787e804d8f1dccf6c897a8a48431324324041b5302ccd501b538bd03d5cb5c90d1fd3f7d2be1
+    f03d990fa20cea58d5d15c20a6a8479f8a2650c245da7d5e8505e2e32c924d6332b7e8cb40139bb17a2b6b95a200c1f4cbf967ec5ca8bbd04db6f70a767067d46fcbc066aeac04f2a3f9e647b290d31f3de21a9dd0e757274c1623319d1f98bb
+    129dc99b2b2d0335f5453ba882fa4469e4617169fa9f3394fbfeb4a9fb68925a;
+  87a787032c79ed900764ee4c
+    e1d3fc042c084f7d8c0c48ad7d6f1eabd0fd1ec24a88f26734d5c8d92dbd873a
+    ""
+    8fe113090d401bea4d28ff49f10ff593adc258e091abd31b62dd1735158f98765970acc6602da063aae01a2a199d3a4f37a5f062d216d2053a83b5d3a0488ab0d2df631b2892cdfcf9fdd0f37de9ed67179aeae82fe00009428b297b553230a6d917fa0c1a
+    7e3a6085662512c823d6d9929dbcca2e1833f6589a38fba924c2e16d6a1d050b7442fbbc2dfd750c76235c96aef4d0d9388c457c5c368c58325aa09623297e6c4a5f19b668ec3ace50bad6c64824ccbb0ba3c72fdc5041ec93d3f231321f687906e3ebd93b
+    54e6538ecb2b4903cb6f375cb5956c92de38b1584b08cff45916a3c4b1f5ac84;
+  233c9ebc8a4cba45b20543c5
+    40fc1b9dbce078b87a1534acf03897b95a3f372e9f6c5a5f2ae44a7dbce9ba43
+    a39089de20de70d0544b5151db0a16e9769e8f2fc12c7f839fab269a0056284a697ffd4113a1cf43b5d5bdce2d86dead83f5a356e9106bedf908db61f1119f9700260ea9379cc7232184d217158fee8ca42e75614739e9007f234f
+    bcd86b0ad8f641a0449b6d9b0f99d1cb4a57a4d6f987feb0ade90aa1d81c4f497b3734be301da3e25fe692629db57311f422f3a1573f9e0553a23e96265e4326fa532d7136863e5b4bc6c99ade3d4eb23cacdf6e42ad8ca13187eba1532920ba31582b3793
+    c65596e9c53e56de712143c2be771a3707bce914410b2e32fe484f74a6210d6ccc48122d4df80f2fdf5b3da056b8742ef07b5ed7c038d18d61da0f5e6584c6af306d1e11ed69ced0594202b10cde788cfe963d38846daa71158909e5fc051dcd0b11b2a8c3
+    e450cf5a72fbfbc72c1249de355a6c3fd6efbb4bf28f68c48b286266a7a2ec6e;
+}
+
+rijndael256-pmac1 {
+  60d7bcda163547d348b7551195e77022
+    ""
+    932f0d9371e20b910a772eabeed12feef4f4859c0c0d15200b2060df6a3cb6a2;
+  907dd1dff7dac5c9941d26d0c6eb14ad
+    56
+    9a97ebc929e438b9781ce3263e5f78f07fc74cf685c00cc7e16977985459a03d;
+  8f86edd1dc9268eeee533285a6ed810c
+    9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd883
+    27ce94c2d0af1899c43ec264b5ae7ead31b2dd65f45f3fe0e95cc0ac6576f672;
+  74d8cde8e160ad10997a21635c6d62c9
+    269029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731ebfedd4705e505da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a9b542cde52
+    571b59ffd88f5aac558bf81218c3cb2fdd9e800b3326401c649e53bd5a406f57;
+  ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6
+    ""
+    2efae48af6eabef0778e76390430974fbaaf244c3fc6bbdb1e58b13bcb580fb7;
+  c95a97a48030370c33d090c54215abd6b3ad54ef
+    c9
+    4aee747efed92d046967d15c7fa52ad582133e03a0a177ac602ab5666e5c23cb;
+  a38378c5b93bf4f2aad2605faee2b03fb648e27f
+    ff63102758fe2b69ac26afa3349829b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9fc2
+    e5afbb13c8243b7c984eeaa0307277e7092658217292fbf05e8d0a56e3fc1b21;
+  712a199e533fa9156308cdec3f768281e040a9b9
+    a222bd689aef66f5306ceb0c6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b09c063c4
+    913f5198775e26d1e0f6c2a2d05e26b280f7ddcf117f19afaba1ee0da1426e70;
+  6f88de9fd41e72d7b97e23e6eabdff3bcd211499268878dbf30f1dad
+    ""
+    1f93abf128d33b355c0a88df509ac50535f22ab4fb12799f703517544aa9acb9;
+  89d4b9b12012e4713df46795630e7952d22bb02d7100b8b649377d20
+    a8
+    3f86edb2b064d7d351daf60764c151d2f8759968ece6d3f000b792f6c3c92faf;
+  f083455b663e4ee1315f3c8f2aebfa921451dcd1af5813b70d30ce2f
+    1fef6ef315d0798391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb658b970e47479a684b5aefa69a4cd52147ed12ca986981a874498ad0abe
+    27080744f866bf654524ac485f602841ee45bda2e22542f55ebee2e275952bff;
+  f8bc4fcb70e27e98ef1f0446b42fb144d44b6d00f06dc188d472a784
+    e0c6f21195a3b9f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc39908445608fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d126b807e6daa089c3f9099c
+    17313b005c8ed5153fe443e60220e8f21373fccd865532655f15d74393767da0;
+  5ffb824173d7634c04226f30
+    ""
+    f4a17475609b3057cf1af06d015538a527b56fb849c986850c224ace1775cbab;
+  cbb7f0e4a973a8cd19010731
+    47
+    74a4cd7ca684aa5015445562c68f2c4dbdf63d4ac5fb0f392eaf16b533fb0304;
+  17a77456f3ff669c732b58db
+    8f48af65f7cc9e3fb90e1721b730374ffc9bc597f56ccbb2f294b38766fc69f6a9f2c0945ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65cc1770a18cbfe6effd1ff6778554acf1270485b203a3c1c4c967c0a4
+    83b54ce5e25f2c786bf25fe30336fd71900040f048dba6e99d175ac195510fac;
+  58cb948bdd409b687fa3a682
+    7b480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a3e8128f8743d16687b7bb8deb9bd205b70e04c091d205cdad9e9a79b1abf91b0851e5ca605ac8451399587011677508a15dde524af3e2bee0646541a42c2ecccb44d
+    631ff4d45f8f6536dbc36c29a857d440c7769e87829b468e051e0de73f82940a;
+}
index c4abf0b..6735928 100644 (file)
@@ -263,3 +263,117 @@ safer-gcm {
     cac8eef1be089b75a8ddb79ca8588436e6e9bac025a6d89bac100dc284
     d41ff215540bd48c;
 }
+
+safer-ocb1 {
+  bef260d7bcda163547d348b7551195e7
+    7022907dd1dff7da
+    ""
+    ""
+    ""
+    e2e419f8cec4dcb3;
+  c5c9941d26d0c6eb14ad568f86edd1dc
+    9268eeee533285a6
+    ed
+    ""
+    ""
+    aba50e2dfc553b0e;
+  810c9b689daaa9060d2d4b6003062365
+    b0a54364c76c160f
+    ""
+    11
+    c4
+    4586e65f8c86dd50;
+  896c4794846ecfa14a7130c9f1371206
+    34c9519848a877ff
+    ""
+    77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4
+    07f19e04df183fe463e0f8d408918e4e90d5fa7c1fcbf997
+    8248b794a7bd1a4e;
+  ba234085406a6136512061f7080cc07d
+    f0591d8fa21f2dd8
+    8374d8cde8e160ad10997a21635c6d62c9269029df3e6057
+    acc87638f508046733d9ff61cdbda3b3e9878731ebfedd47
+    4f53021f22a68a8d47c855e163a27226b624dd712fab3e2a
+    ff7aaeba71e97e88;
+  05e505da1435dceaa7b1cc49ae1d50c3
+    8201a894476b3f10
+    ""
+    2b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450
+    34d295b915f6715a7aac820be272519ed925b11bf0f86145df35751dae
+    9f185db0d5f8cc21;
+  727a9b542cde52ebfda19d0ccc520f21
+    5eb57bb3a4f3ebbb
+    b18ac6c95a97a48030370c33d090c54215abd6
+    b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff631027
+    2efe1a659d7d670d28fbe822b399e07290be6934f6cec51e8eb0362c7d
+    f9c31f6c694772d0;
+  58fe2b69ac26afa3
+    349829b94586306f
+    ""
+    ""
+    ""
+    88301767ee937c29;
+  ed54154f8f28523c
+    03d4de1600157846
+    b7
+    ""
+    ""
+    e4b7676fbd808aa7;
+  10ee72807a2219bf
+    b474fd71d891f24b
+    ""
+    b6
+    a2
+    fab55a01a7ce028e;
+  5d1563259f9eb53b
+    571ea629c54d57dd
+    ""
+    2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb
+    b690481d25e3f847a804a19814c1290205ce9cbb4b61c233
+    87e5815156bfa03b;
+  9fc2712a199e533f
+    a9156308cdec3f76
+    8281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22
+    260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb
+    dc2c2adba08e9ba7418ffc99171134a1581b124c03877cd1
+    220cc3fa8f48fdd3;
+  3b6f5fe836813111
+    5c037ba323fe1dc8
+    ""
+    151784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b
+    b8aefb9157f020717f5afd56802e8c489aa69a4ebbfd1a5c4e05ee4dca
+    91762112616e9ad2;
+  09c063c46f88de9f
+    d41e72d7b97e23e6
+    eabdff3bcd211499268878dbf30f1dad89d4b9
+    b12012e4713df46795630e7952d22bb02d7100b8b649377d20a8f08345
+    236430169ce67a46cf7a2b31e20aff1d656863550b2cbed9feb213bebd
+    641bc761257b4572;
+}
+
+safer-pmac1 {
+  bef260d7bcda163547d348b7551195e7
+    ""
+    061d742fa0b5e9fb;
+  7022907dd1dff7dac5c9941d26d0c6eb
+    14
+    496f756150b24f97;
+  ad568f86edd1dc9268eeee533285a6ed
+    810c9b689daaa9060d2d4b6003062365b0a54364c76c160f
+    659f6109ebea03e4;
+  11896c4794846ecfa14a7130c9f13712
+    0634c9519848a877ff77bf79192a5b50ade5d9
+    169f91020e2bfa02;
+  cd739a3d1f337f29
+    ""
+    bcb4bfd69665cfac;
+  549e6b0d27a4ba23
+    40
+    1e041b274662fca9;
+  85406a6136512061
+    f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a
+    8b6e6d10707bb048;
+  21635c6d62c92690
+    29df3e6057acc87638f508046733d9ff61cdbd
+    8ca64eea215c495b;
+}
index 92cddeb..c58739e 100644 (file)
@@ -251,3 +251,117 @@ safersk-gcm {
     0d4082f666ad6a4d337a93564bc648f4b09e2332d656aeebefd722a7ec
     4322ea279fd752dc;
 }
+
+safersk-ocb1 {
+  bef260d7bcda163547d348b7551195e7
+    7022907dd1dff7da
+    ""
+    ""
+    ""
+    02524b8ee7329780;
+  c5c9941d26d0c6eb14ad568f86edd1dc
+    9268eeee533285a6
+    ed
+    ""
+    ""
+    aa1f6928e1b81e20;
+  810c9b689daaa9060d2d4b6003062365
+    b0a54364c76c160f
+    ""
+    11
+    07
+    cc863f9f86e79df5;
+  896c4794846ecfa14a7130c9f1371206
+    34c9519848a877ff
+    ""
+    77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4
+    0a622ec626cf3be0c96a8fcabfa824949c81cf57656e3fcc
+    4b897d5463f508df;
+  ba234085406a6136512061f7080cc07d
+    f0591d8fa21f2dd8
+    8374d8cde8e160ad10997a21635c6d62c9269029df3e6057
+    acc87638f508046733d9ff61cdbda3b3e9878731ebfedd47
+    ceaa0608044abe172e762b8a66a026b6aa231a60e32b8852
+    383b6f426f78e95d;
+  05e505da1435dceaa7b1cc49ae1d50c3
+    8201a894476b3f10
+    ""
+    2b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450
+    e9d6111a98647e1da68ba0bdfb386b3575c20aba3fff9bb7d5e52e5717
+    f432ded708b7e826;
+  727a9b542cde52ebfda19d0ccc520f21
+    5eb57bb3a4f3ebbb
+    b18ac6c95a97a48030370c33d090c54215abd6
+    b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff631027
+    58a7612db1435cc3b8b7ab586fd3475674faa6192c47cf940061b38ad0
+    ee64360a85eb7957;
+  58fe2b69ac26afa3
+    349829b94586306f
+    ""
+    ""
+    ""
+    bffcea16dd9830d2;
+  ed54154f8f28523c
+    03d4de1600157846
+    b7
+    ""
+    ""
+    9d9d3268ed1e6af0;
+  10ee72807a2219bf
+    b474fd71d891f24b
+    ""
+    b6
+    55
+    7cc85e98d653ac98;
+  5d1563259f9eb53b
+    571ea629c54d57dd
+    ""
+    2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb
+    69fd708caa761fa04396ba9f94bb916e5a11679b3bad9cf0
+    8c94cf5b2249afa6;
+  9fc2712a199e533f
+    a9156308cdec3f76
+    8281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22
+    260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb
+    c9e3275788dcac045ae1478a44aac8061f02bc7e56e516cc
+    8adfde6b3cd647c5;
+  3b6f5fe836813111
+    5c037ba323fe1dc8
+    ""
+    151784873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b
+    f1493455c6ef6dfb73ba4b35b25ecef1d967614169fd0db3162575f20c
+    533087817a013891;
+  09c063c46f88de9f
+    d41e72d7b97e23e6
+    eabdff3bcd211499268878dbf30f1dad89d4b9
+    b12012e4713df46795630e7952d22bb02d7100b8b649377d20a8f08345
+    f89081f88fa58ddd7f1974ffc3fb676fc8855e74c7b85d6e308e2c3096
+    b0c2845962f040ff;
+}
+
+safersk-pmac1 {
+  bef260d7bcda163547d348b7551195e7
+    ""
+    6dd75ab7922413b1;
+  7022907dd1dff7dac5c9941d26d0c6eb
+    14
+    7f4d03871ad27bda;
+  ad568f86edd1dc9268eeee533285a6ed
+    810c9b689daaa9060d2d4b6003062365b0a54364c76c160f
+    3f48cfbe20527417;
+  11896c4794846ecfa14a7130c9f13712
+    0634c9519848a877ff77bf79192a5b50ade5d9
+    25fb410e71c6553d;
+  cd739a3d1f337f29
+    ""
+    af55847d75152f93;
+  549e6b0d27a4ba23
+    40
+    b24dc9bbdbe4b417;
+  85406a6136512061
+    f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a
+    9e119f41d7bf7b13;
+  21635c6d62c92690
+    29df3e6057acc87638f508046733d9ff61cdbd
+    9f8f71cddf2bf6dd;
+}
index 30f4006..42eb27a 100644 (file)
@@ -555,3 +555,225 @@ serpent-gcm {
     100ee38a4070af0c2e7ea43836fcfa78a65278a09ab122bdcdba11d93b63c2965341b19ff4be55ced558fa76d5c3fcb0227e037572
     cec6a5923cedad5ad0bc6551a039ed2d;
 }
+
+serpent-ocb1 {
+  60d7bcda163547d348b7551195
+    e77022907dd1dff7dac5c9941d26d0c6
+    ""
+    ""
+    ""
+    686b0aac51a25d6f2878b1e50e2badbe;
+  eb14ad568f86edd1dc9268eeee
+    533285a6ed810c9b689daaa9060d2d4b
+    60
+    ""
+    ""
+    2811539055c7b5c0e10cabfd66d63d09;
+  03062365b0a54364c76c160f11
+    896c4794846ecfa14a7130c9f1371206
+    ""
+    34
+    b7
+    736d9cb5d0427f0eea7a387136323745;
+  c9519848a877ff77bf79192a5b
+    50ade5d9cd739a3d1f337f29549e6b0d
+    ""
+    27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9269029df3e
+    c3b13eaa510c580acba8cba253b30f944b369f12002ddefee96ff13f3e7daa0e9836f355b08a055f75839883f3ae65a3
+    81f7d94ad9ffd90dbfaef2d3643f1470;
+  6057acc87638f508046733d9ff
+    61cdbda3b3e9878731ebfedd4705e505
+    da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5f
+    a450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54
+    6f6ee0f2bfb91b2eaafde0609efb27f9df091d396cc5932c67c3989439a21fd0528a27da02e746de3bd96e6692f8bfc8
+    05aeefe7a4a38c082ec19f1ab2404541;
+  efc9a38378c5b93bf4f2aad260
+    5faee2b03fb648e27fff63102758fe2b
+    ""
+    69ac26afa3349829b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9e
+    2fa135d2df5aa9ed43e094bba67d692edefd217d7d8f2c64a0f8a2c728176ddd7e699e8ff6681e2508ab05b1014bf461fc21d13f14
+    ba576b55bfc099c9cf4db5c28e90b761;
+  b53b571ea629c54d57dd2d42f7
+    0800df9fcbaca48b77dba189196d1ebb
+    a10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b
+    0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da67
+    ee27f377eff38f2464b289b25dee0a73b9a803fbf821ec328a488dce759e240625a7b3103d49c590858da2771988d0c66c21f12884
+    54ef913069c3dd1c9685f2472b7fc3f4;
+  94c18b5337685a96ed65b9ac
+    a338527ef19b09c063c46f88de9fd41e
+    ""
+    ""
+    ""
+    c4b88fee21ecbc1ffbf6ea083a080716;
+  72d7b97e23e6eabdff3bcd21
+    1499268878dbf30f1dad89d4b9b12012
+    e4
+    ""
+    ""
+    8e5107d4d70c8a727e44b79fbce267ef;
+  713df46795630e7952d22bb0
+    2d7100b8b649377d20a8f083455b663e
+    ""
+    4e
+    f2
+    fade84801d77de290eb960862c98d943;
+  e1315f3c8f2aebfa921451dc
+    d1af5813b70d30ce2f1fef6ef315d079
+    ""
+    8391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e303
+    48a4a77a5651db3c1dd8baae2ce157c1411d1e70c22826da41446890d00ef14467c0439f1f0d10ed95ab8ee0f624f64c
+    d2c05303138ae9ec11f3320c4a9fc1fa;
+  08be3c31e6bc58c0b7cadcb6
+    58b970e47479a684b5aefa69a4cd5214
+    7ed12ca986981a874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d44b6d00f06dc188d472a784e0c6f21195a3b9
+    f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc39908
+    402444f7ccf9e0aa13173b33afe0bb1e38c233ade7ff56f92a24bd8d17cb137ad49475b39cf3c34a56d074faa7449405
+    67924f31b67c3fc19ed79b5df55e286a;
+  445608fe95e81c2533e31c9c
+    1a9851bc2810d858cbbc8424d126b807
+    ""
+    e6daa089c3f9099c5ffb824173d7634c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3f
+    5fee9263e96affb3166ef4f393ad28c9baac39c0bcd021025d930e9c4ae105ed386f4664d28857b8d29c83f377590385c8252bbbac
+    3ec53f10d421ae13299f734e4c33c5c4;
+  b90e1721b730374ffc9bc597
+    f56ccbb2f294b38766fc69f6a9f2c094
+    5ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65cc1770a18cbfe6effd1ff6
+    778554acf1270485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f
+    613d48844e3ff8fd0fa43fe6356b519c8e851d8b70f90d4bbb82905ac14e77e4ce53fb727b8c408bda29425856f06d722308628b27
+    2e3f1daa8e87557852dbb4d5a9f0e978;
+  9a3e8128f8743d16
+    687b7bb8deb9bd205b70e04c091d205c
+    ""
+    ""
+    ""
+    595360839f7632d4470fad88b88bcb17;
+  dad9e9a79b1abf91
+    b0851e5ca605ac845139958701167750
+    8a
+    ""
+    ""
+    446bce84dfdd94177e90e9bae6bfc1c5;
+  15dde524af3e2bee
+    0646541a42c2ecccb44d65bad397abfa
+    ""
+    f5
+    d6
+    1c8be9521e25a947fb8bcea3f3e095cb;
+  29ee41cf9a05c7ef
+    edef3401539c51d2a90bbf7f1bfc338a
+    ""
+    b0ef5746ea8fdcccd213e33f7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2d983514605ec590294a319b980
+    3f68fd5d2677fb15a8c99b65baf1e8aedb5a71b8756fd5326567128473762ae4498809325d9f2d1a031e58b9f181266f
+    723cde60d1e536a1e076650f3261f473;
+  2068a9f891bc5ba5
+    afabf8c3122d12d7ff3c41122d70d17d
+    4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d6699e6b7ea2725cb2dac07ecde95759ac46fee6dda7abc8ad68
+    daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4563d405e51881e99027b8ab9
+    9f5e2d1dd5454687873145ef6970fe06636195562fabbad9a3a76bf0dce03732a32ed87a326e3e8e9b1c5d0f41bcda54
+    802ccadfb7baaf0b6cf6579eca51f720;
+  aea3ccf860b00097
+    40763d96836c5f87b95460938de1288c
+    ""
+    69d80ea12ff4bb5f069b8a2e86041c1b9fc214e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa6c36800d9645563a308b
+    fb81a3b2a097da78f981bbb53b2623f6271fd097fb6d126851ff942038904f0fb2cf4e265448c30df6a94559ae260d00a81af76545
+    d9290c98d01f6032bf110b61657e165d;
+  a60076817523bd2a
+    bf1261b089d8f23a9c2835076a23faac
+    2cdd67771cc667a8331f0a170b66283e4f834a06148f302c3973accd56f6f24e33958b8c2e2352fd61e4fa
+    8fec816ac861a8b33779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2b94b0820cab383a8cffeea7c486315799dc875fba578
+    cee153d3db504d8bb1d7050124952705e0eb9150cd5806e0b40f104eb15167512699f11b129604f7f36915159f592171dbb89b5604
+    5c96b8868aafbcb195e23f9335d73535;
+  c8ec4837898a92142b5b0677da1ac27311
+    7b45bcfff5d5f8b6fde2893232a9f81d
+    ""
+    ""
+    ""
+    b71d7a6b4f83e6276400173ddaeb0be8;
+  14517ffae475f6b94a43a67b3d380d2f9a
+    aafe2dd721c0095c8808847689211450
+    ba
+    ""
+    ""
+    7c5df02df2e106fed4414626ae5b5315;
+  8095ffab1eaadf66fd22ac1976063e113a
+    b61f813e28a1397a7974a1d7f4220c78
+    ""
+    5f
+    86
+    6a7d0527c06c781aea0a6b0389048b08;
+  e426a5a0e80f678d404147842941feeffd
+    c2eb44dc8c0d5e8f444f7f4e0c893959
+    ""
+    b74dc23a7bb40e7e0013e5150686d2301b43a15a84e81d7f5cedaa49e2414ebf47970e560475cff206877de69146acc3
+    b6c017318dda6d2389ab13ae89849c2944a151d982f0490074e38594c6f6a819c3ed133cca4493d84434228645dd47f7
+    6eebac1b2230b2fca6daefff666d4cd3;
+  ab6cf8556b7aa776945948d1b8834df219
+    6c92ec1718dcdeee0d52d9539726d281
+    0391b3f9d10c39b07ae8f08ce7cee4758a386a9943e97dedfbe61e737882cd09c2b9a80f34c0fde11c2481b11fc76bfa
+    4dbf710a9e544e0c536ca1e040f9ad5b04140d98edabe08485290a4d87d13b07398a1458c2c6b61dbdbc1cccada8c1a0
+    b1493269b6bc9b0c2a95e3b26c0df50fd48c5505c85d0f1cc545cb8ee4b9aa1917e71d2f8628a3b38d6282fa23d4021d
+    a6fe44618a21904fb885560b2dca9e2f;
+  a9aabb6c4e3c3554f8fb1ef61614c27029
+    5dfc0ca6551ca4bdb75359f91cb9d921
+    ""
+    056b7de74fc9a9b37154ce6c0b396179d31f06a1dd5982cbc0d7cb23841da1ae8f4ae480cda98ad6cf2bacf6f9fd3f821330c43f3d
+    5ad848d7910c43775ad95850550e36ed4f51a9180a1558752ef9043d53d15b7328f82cf31dd6e89fde07890019b7cba632600d6c87
+    58f508482940235912a6955d16d75ac4;
+  f6c2b3fac7cbcf96523d4723f91801325e
+    b8553236651c96788d73d192ee53b3f3
+    ebd66ddd98cedbe88e245de25b1593b70f8601562d90a9b59ed034a867642d25d54756fa5c47f16f64b837
+    bb4926214211a1c696ba172010abb433922a22d9fd881519165eb9d85197a21cc34ac0d5ae7be8dbf98e4ffed2cf6b1372a5aa47b5
+    8450286f64f58e3f5cd1d62c28db59591ddf05384d3eaf824acdd8febc6f56595d91eb32d608beabe8f31117a5b42e8d38863be19d
+    cd0ddc15fdb0b43ab9c1da27dab961e9;
+}
+
+serpent-pmac1 {
+  60d7bcda163547d348b7551195
+    ""
+    86802543a1d8ca8f65b1bb3e0d31d221;
+  e77022907dd1dff7dac5c9941d
+    26
+    dbe75897dbb97ea7a0545fe684170ede;
+  d0c6eb14ad568f86edd1dc9268
+    eeee533285a6ed810c9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f1371206
+    13c3430e93df53d7da7833282eee3c25;
+  34c9519848a877ff77bf79192a
+    5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd8
+    3af04cadceba44ec5a6897e499e82f51;
+  8374d8cde8e160ad10997a21
+    ""
+    1d72b61bfec2412d29f3f0ecad5d04c8;
+  635c6d62c9269029df3e6057
+    ac
+    3441e6813346f41a8f780f9921ccf0ea;
+  c87638f508046733d9ff61cd
+    bda3b3e9878731ebfedd4705e505da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb6
+    297ec48558af83ac8ebcb3e442fcfc8d;
+  21b7f65b000961040ef2f9b2
+    fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c5
+    1c6db42246e98e9eaa43a287e5c7161c;
+  4215abd6b3ad54ef
+    ""
+    e79dc50690f53356f567c3fe1845e31f;
+  c9a38378c5b93bf4
+    f2
+    01c74df5d34de8442b6e0dea2f43cfcd;
+  aad2605faee2b03f
+    b648e27fff63102758fe2b69ac26afa3349829b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219
+    e36a0ed637bc357b41d7ca57834fe1cd;
+  bfb474fd71d891f2
+    4bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9f
+    1f2abc9e954b1e7d282ef8c3ee00fea4;
+  c2712a199e533fa9156308cdec3f768281
+    ""
+    b498a64086f85b98d362950e079b3624;
+  e040a9b9a222bd689aef66f5306ceb0c6b
+    08
+    febb2df39da1126d67fa08e337c430d1;
+  ac8b0a22260c571b4a42bb8fdb233bfa6a
+    5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65
+    7f8f5f88f99a29146523eec2910448f5;
+  b9aca338527ef19b09c063c46f88de9fd4
+    1e72d7b97e23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012e4713df46795630e7952d22bb02d
+    0c21a0dd3a264c1ef7cfeebd6aa8c2c8;
+}
index 5053129..d544da1 100644 (file)
@@ -231,3 +231,63 @@ skipjack-gcm {
     b96e1e6d2db5000c5bbbd06e86ab26c3a2a060b3eeeb1899793a743bc9
     74694b07f5866d80;
 }
+
+skipjack-ocb1 {
+  e4bef260d7bcda163547
+    d348b7551195e770
+    ""
+    ""
+    ""
+    28afba7b57208bb2;
+  22907dd1dff7dac5c994
+    1d26d0c6eb14ad56
+    8f
+    ""
+    ""
+    62f000b7bdb0d1dc;
+  86edd1dc9268eeee5332
+    85a6ed810c9b689d
+    ""
+    aa
+    84
+    c92bec4a841eab50;
+  a9060d2d4b6003062365
+    b0a54364c76c160f
+    ""
+    11896c4794846ecfa14a7130c9f137120634c9519848a877
+    50d328a84a166d75e1574aafc3a6847451f766a4e5b1d506
+    c155363b2c86bd70;
+  ff77bf79192a5b50ade5
+    d9cd739a3d1f337f
+    29549e6b0d27a4ba234085406a6136512061f7080cc07df0
+    591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9
+    b9f8bca7a0f1024a232217f4d9acd0187997bdb2348287f9
+    d8d3f45231b59769;
+  269029df3e6057acc876
+    38f508046733d9ff
+    ""
+    61cdbda3b3e9878731ebfedd4705e505da1435dceaa7b1cc49ae1d50c3
+    3b5a6606907f297d26827ab95798171debff551df36e0ae8f6f29026f8
+    24734c1d6c3da996;
+  8201a894476b3f102b75
+    2eb9529533966f27
+    043eb621b7f65b000961040ef2f9b2fc5fa450
+    727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a
+    694a1412b0ab1b6fb698a9eb920fd2910c7625b68558fbe9ffda426f55
+    19c658ead145b558;
+}
+
+skipjack-pmac1 {
+  e4bef260d7bcda163547
+    ""
+    b663da5674ffc5d1;
+  d348b7551195e7702290
+    7d
+    554a2fb9de2d30ae;
+  d1dff7dac5c9941d26d0
+    c6eb14ad568f86edd1dc9268eeee533285a6ed810c9b689d
+    0318df96a103a2f1;
+  aaa9060d2d4b60030623
+    65b0a54364c76c160f11896c4794846ecfa14a
+    b3a737b39bf1c95d;
+}
index de1c6db..d9c5fb8 100644 (file)
@@ -893,3 +893,171 @@ square-gcm {
     58a997404e629f9e9d5652bd076188c9bd4a631d3e2486a944151f3cf29edbfc62e3910c0b341052b475d623f2339488c9983e0990
     1762e398f8582d72954ed718af4f677a;
 }
+
+square-ocb1 {
+  f260d7bc
+    da163547d348b7551195e77022907dd1
+    ""
+    ""
+    ""
+    4ec5c312526c730e41458aca324ae0a0;
+  dff7dac5
+    c9941d26d0c6eb14ad568f86edd1dc92
+    68
+    ""
+    ""
+    d0cc24f9084261cdaf4393e7b250701b;
+  eeee5332
+    85a6ed810c9b689daaa9060d2d4b6003
+    ""
+    06
+    72
+    1e1671f47f5bd8b32ebb09c019105281;
+  2365b0a5
+    4364c76c160f11896c4794846ecfa14a
+    ""
+    7130c9f137120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a613651
+    11e134a63441fc0951b37098764822d6eaa47187fe96a2f3658563cc612c857f0dd5d4e056c820a3670828dd7f5a9d1c
+    86893621402b0a64fded1b34d47504fb;
+  2061f708
+    0cc07df0591d8fa21f2dd88374d8cde8
+    e160ad10997a21635c6d62c9269029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731ebfedd4705e505da14
+    35dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450
+    1599b31480519c999bbc9fd4fb1a24676071040c16ff4a6834cdaf46c51ccbb9522cfde0e2df2867871cabd4aa73c33a
+    e8e411a4ac803610a4f2a8e1b6aabba9;
+  727a9b54
+    2cde52ebfda19d0ccc520f215eb57bb3
+    ""
+    a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758
+    384781d5a43f9e0d692787efd9cbbff3f8cc6e154544695653e495e63b3da9730b781b214f5c8f6d940542c76c24f0acacfcf099c0
+    5fa2cade7fa22e8df91b9f91593f9d3a;
+  fe2b69ac
+    26afa3349829b94586306fed54154f8f
+    28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9eb53b571ea629c54d
+    57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689a
+    4c8c3874f73c8504b64bbe612589c103a462720d244c3092221b6c7b31a162aebefaea934d2ac8eb9e03f8f480aa1407d58a8a8e0f
+    03fa1ede942984e0ae4f30946f7e0201;
+  ef66f5306ceb0c6b08ac8b0a
+    22260c571b4a42bb8fdb233bfa6a5cfb
+    ""
+    ""
+    ""
+    ae26bcd1fc7065f659ec2e37cdbb4d06;
+  0bad7d95214ade49cb3b6f5f
+    e8368131115c037ba323fe1dc8151784
+    87
+    ""
+    ""
+    9f5a8cdf70fc430a52be4efbe40903b5;
+  3f0eb5b647da6794c18b5337
+    685a96ed65b9aca338527ef19b09c063
+    ""
+    c4
+    b1
+    5358be539c81b8af364ee06a6d510baf;
+  6f88de9fd41e72d7b97e23e6
+    eabdff3bcd211499268878dbf30f1dad
+    ""
+    89d4b9b12012e4713df46795630e7952d22bb02d7100b8b649377d20a8f083455b663e4ee1315f3c8f2aebfa921451dc
+    6a33c5e3320001aceef2ddb9eb101bc7a44cbbbe05a3a4fffe25cc658d1a5834701a2fd135d964d2aafa112d45c44727
+    a1b70c95ccff432cd7ffac9fcfc36d4b;
+  d1af5813b70d30ce2f1fef6e
+    f315d0798391805da08da3aefc5f8584
+    b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb6
+    58b970e47479a684b5aefa69a4cd52147ed12ca986981a874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d44b6d
+    92a2d4564bf2ce07ddfc07a4c61b642f82e07603156c3e67a21fc29958ae1ab0f11689b5361185a5e36e11f8764939c2
+    f4f96b643edc928c53440ca84037253d;
+  00f06dc188d472a784e0c6f2
+    1195a3b9f4ae985511265febd11c1647
+    ""
+    20eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc39908445608fe95e81c2533e31c9c1a9851bc28
+    6850774629192af796f0a661a429cfd5a235499b4f839206ab9a23dbeed0566217317c51538556edf394c8d83dffedfa381222d7f6
+    bf6ea195e668f32372ecce468c963344;
+  10d858cbbc8424d126b807e6
+    daa089c3f9099c5ffb824173d7634c04
+    226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3fb90e1721b73037
+    4ffc9bc597f56ccbb2f294b38766fc69f6a9f2c0945ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65
+    5016f4b0746fe26e4c8ff63a0fb3a3af5070ba789900e4b69b90c42331d2bef65a6d520ed660c6b8b21180a3e0706e57b6f8e99680
+    5336c139328f5e30663524991bca106e;
+  cc1770a18cbfe6ef
+    fd1ff6778554acf1270485b203a3c1c4
+    ""
+    ""
+    ""
+    68289e95ba9adc986ec25334e9821681;
+  c967c0a458cb948b
+    dd409b687fa3a6827b480aa3a4c84cef
+    64
+    ""
+    ""
+    c3fd1e84842901c9030c844f1cf2a037;
+  f6c9b53bf8f957f4
+    b03cf43e89957f9a3e8128f8743d1668
+    ""
+    7b
+    4d
+    65211e0de7d279e5ecde8793097d5217;
+  7bb8deb9bd205b70
+    e04c091d205cdad9e9a79b1abf91b085
+    ""
+    1e5ca605ac8451399587011677508a15dde524af3e2bee0646541a42c2ecccb44d65bad397abfaf529ee41cf9a05c7ef
+    8cdbd696f4e8b357c8077fd749e4bb0a0f24c8b95deebd0174708f13d6656315c47a9fe9cf561d4afb4e48ab68249248
+    ba46b27e9799540b1f2fed90f8404169;
+  edef3401539c51d2
+    a90bbf7f1bfc338ab0ef5746ea8fdccc
+    d213e33f7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2d983514605ec590294a319b9802068a9f891bc5ba5
+    afabf8c3122d12d7ff3c41122d70d17d4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d6699e6b7ea2725cb2da
+    f227e7487fe14220150b10fa5456bf655b53c2b3cd2200ee882b912d9ad71146f8a937eae0ac4fbdcc99602783caf769
+    0d78408bce85318de6bcfd8cdc7579ff;
+  c07ecde95759ac46
+    fee6dda7abc8ad68daac90cfe22d2f1f
+    ""
+    2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4563d405e51881e99027b8ab9aea3ccf860b0009740763d9683
+    88e08b26d8c6c245d09dedb7a2b2482f0a5816940b89e87ed5c3a0ca573d2b8be39e18d252d84b4d9aad35fc54dbc57306c45676c9
+    2d9921c55910b5fd930615d61dde717a;
+  6c5f87b95460938d
+    e1288c69d80ea12ff4bb5f069b8a2e86
+    041c1b9fc214e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa6c36800d9645563a308ba60076
+    817523bd2abf1261b089d8f23a9c2835076a23faac2cdd67771cc667a8331f0a170b66283e4f834a06148f302c3973accd56f6f24e
+    a450198ec39d53163f8db0c90b59a3b5d02dd4ae0c5c800e9b30bb747082e383ffaf85cae517a18ce337b064f74286cf8d843e0696
+    5a40990ae1dfae2c5cd30d9b32c794c5;
+}
+
+square-pmac1 {
+  f260d7bc
+    ""
+    aec43cacfa9e76ed9f6c0176974d1111;
+  da163547
+    d3
+    38e2ce3d69f8fb21ed28599d77607fe8;
+  48b75511
+    95e77022907dd1dff7dac5c9941d26d0c6eb14ad568f86edd1dc9268eeee533285a6ed810c9b689daaa9060d2d4b6003
+    7c8785ab3dcb7d71ba3d6fcf7ba32376;
+  062365b0
+    a54364c76c160f11896c4794846ecfa14a7130c9f137120634c9519848a877ff77bf79192a5b50ade5d9cd
+    b21eb39143554c29a104eb7ca8d10ca8;
+  739a3d1f337f29549e6b0d27
+    ""
+    8a5016e4834fa9fe8ef64746a89189ce;
+  a4ba234085406a6136512061
+    f7
+    21e70bad22188fa3845c86a33d466528;
+  080cc07df0591d8fa21f2dd8
+    8374d8cde8e160ad10997a21635c6d62c9269029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731ebfedd47
+    fdb16c9e5914268aa7dca6ee20efb72e;
+  05e505da1435dceaa7b1cc49
+    ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5fa450727a
+    c69607969a66a1f0e09c40a8b8e7b303;
+  9b542cde52ebfda1
+    ""
+    718839aeaf776c252d578376fe739e46;
+  9d0ccc520f215eb5
+    7b
+    4830cb31ec114ff8704f183f95d06200;
+  b3a4f3ebbbb18ac6
+    c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe2b
+    c5aa56a0bf29d192de4e3db9174b1b9a;
+  69ac26afa3349829
+    b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d156325
+    e6d24bd14f25e2fe8909354cdac337f5;
+}
index a7d03d5..9d8e552 100644 (file)
@@ -564,3 +564,225 @@ tea-gcm {
     ee503d12aef7e05140a33551f93a02eb6631e56e47a61f61b5357a4636
     4f584686113ded23;
 }
+
+tea-ocb1 {
+  60d7bcda163547d348b7551195
+    e77022907dd1dff7
+    ""
+    ""
+    ""
+    0282d13eb3775978;
+  dac5c9941d26d0c6eb14ad568f
+    86edd1dc9268eeee
+    53
+    ""
+    ""
+    9b0cdcfa8c04a747;
+  3285a6ed810c9b689daaa9060d
+    2d4b6003062365b0
+    ""
+    a5
+    3b
+    cdfabcc04b5d33e6;
+  4364c76c160f11896c4794846e
+    cfa14a7130c9f137
+    ""
+    120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d
+    68cf0d4fc52e5f441683c80bdaac28743382b75271027f73
+    10e9f17c3d7446da;
+  1f337f29549e6b0d27a4ba2340
+    85406a6136512061
+    f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a
+    21635c6d62c9269029df3e6057acc87638f508046733d9ff
+    f5899357e4d68a1947927de3a88c20b0a372611945f68d3a
+    172008bf86d64904;
+  61cdbda3b3e9878731ebfedd47
+    05e505da1435dcea
+    ""
+    a7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb6
+    1871ca08dc9d4856d3181c8a16b9a5284e727cc4c21ee458e65a7ede72
+    400b866405f8cca1;
+  21b7f65b000961040ef2f9b2fc
+    5fa450727a9b542c
+    de52ebfda19d0ccc520f215eb57bb3a4f3ebbb
+    b18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b9
+    8845244bc553c66cbcd7398a529004c22b7bc44b8c12ee1cdae4b9964f
+    11437ce8e831d965;
+  3bf4f2aad2605f
+    aee2b03fb648e27f
+    ""
+    ""
+    ""
+    b24fea9cbe55c7cf;
+  ff63102758fe2b
+    69ac26afa3349829
+    b9
+    ""
+    ""
+    172ba721b939b9e3;
+  4586306fed5415
+    4f8f28523c03d4de
+    ""
+    16
+    56
+    8f3914c03d77623e;
+  00157846b710ee
+    72807a2219bfb474
+    ""
+    fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d
+    1f489e532c4895221fb87757559418ebdbb80731a4d433ca
+    aee9886723bcf8c2;
+  42f70800df9fcb
+    aca48b77dba18919
+    6d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f76
+    8281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22
+    003b1897c5b5c2a68a1061f67ab282ba4f5bc1d5b69dff33
+    d5d03c8ceb5dedad;
+  260c571b4a42bb
+    8fdb233bfa6a5cfb
+    ""
+    0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc815178487
+    616c9b723ce2dbf6582926c0082396983b36136650dbe54d4034e80c81
+    f272e48012ecedb1;
+  3f0eb5b647da67
+    94c18b5337685a96
+    ed65b9aca338527ef19b09c063c46f88de9fd4
+    1e72d7b97e23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012
+    61107d0d71b63c91fc60d6981a7b027175f951198ead98054f3c891a56
+    f0b7270b5db81fec;
+  e4713df46795630e7952
+    d22bb02d7100b8b6
+    ""
+    ""
+    ""
+    8ec34345774654fe;
+  49377d20a8f083455b66
+    3e4ee1315f3c8f2a
+    eb
+    ""
+    ""
+    9752407ae0186131;
+  fa921451dcd1af5813b7
+    0d30ce2f1fef6ef3
+    ""
+    15
+    81
+    1beb2958c9f181a1;
+  d0798391805da08da3ae
+    fc5f8584b7c5e617
+    ""
+    669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e8
+    76b4c7ff71df213ad4bacdd80c69f7e6dea704bfc63d27ba
+    dbdc98bafb6d3cd3;
+  15f422cdf0c8e30308be
+    3c31e6bc58c0b7ca
+    dcb658b970e47479a684b5aefa69a4cd52147ed12ca98698
+    1a874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d4
+    aff8e168c9ca00f7a3686535f2c3a87b87554ef97829cfdc
+    5a0258fedb40c24f;
+  4b6d00f06dc188d472a7
+    84e0c6f21195a3b9
+    ""
+    f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00
+    b9d9161aaec022635a134ed7847aec38d0c8903ef455fa741bf671369b
+    625dbf5d69c3e31e;
+  456331854bc78bf43966
+    eb0cfa9138ddc399
+    08445608fe95e81c2533e31c9c1a9851bc2810
+    d858cbbc8424d126b807e6daa089c3f9099c5ffb824173d7634c04226f
+    8a2521cc4a159578267a2501822161dab72ff8663eeb7c0216e8e372cb
+    74098a7f405219bd;
+  30cbb7f0e4a973a8cd
+    190107314717a774
+    ""
+    ""
+    ""
+    ea4da20a4cb1c61f;
+  56f3ff669c732b58db
+    8f48af65f7cc9e3f
+    b9
+    ""
+    ""
+    0db86f6d6832d301;
+  0e1721b730374ffc9b
+    c597f56ccbb2f294
+    ""
+    b3
+    32
+    7275eb9aee00342a;
+  8766fc69f6a9f2c094
+    5ffd505003cc0cae
+    ""
+    9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65
+    d09b91ddba2620cd1a4a7fe88de8c22ef06be7a9b1627b4b
+    b37e8c04b73654d2;
+  cc1770a18cbfe6effd
+    1ff6778554acf127
+    0485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b
+    480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a
+    962273e83ac507e225ed07a9fce44bf2dbaad409592ebd49
+    0a77a4eaf298a242;
+  3e8128f8743d16687b
+    7bb8deb9bd205b70
+    ""
+    e04c091d205cdad9e9a79b1abf91b0851e5ca605ac8451399587011677
+    795b6ec2108ac4cbda8b87ede294541cfdb7240cfae8ff7a4d9a474ea5
+    798360c72cf9d7d0;
+  508a15dde524af3e2b
+    ee0646541a42c2ec
+    ccb44d65bad397abfaf529ee41cf9a05c7efed
+    ef3401539c51d2a90bbf7f1bfc338ab0ef5746ea8fdcccd213e33f7e8a
+    f0d9c8a507a51d66a13e9cd477b177773ff6f94dbda67dbf07003162ab
+    70ddae5e6ffa478f;
+}
+
+tea-pmac1 {
+  60d7bcda163547d348b7551195
+    ""
+    25bca2fe99e75c4b;
+  e77022907dd1dff7dac5c9941d
+    26
+    5b87dc7b2acac1be;
+  d0c6eb14ad568f86edd1dc9268
+    eeee533285a6ed810c9b689daaa9060d2d4b6003062365b0
+    6889c9fb6030676d;
+  a54364c76c160f11896c479484
+    6ecfa14a7130c9f137120634c9519848a877ff
+    453581670da49ebe;
+  77bf79192a5b50
+    ""
+    613c5d3427421aa4;
+  ade5d9cd739a3d
+    1f
+    39649926ad4cd68d;
+  337f29549e6b0d
+    27a4ba234085406a6136512061f7080cc07df0591d8fa21f
+    24043405966f7f84;
+  2dd88374d8cde8
+    e160ad10997a21635c6d62c9269029df3e6057
+    8242433c45487ffe;
+  acc87638f508046733d9
+    ""
+    f24ce66e0a3a63d2;
+  ff61cdbda3b3e9878731
+    eb
+    8bdfb1992aed4edf;
+  fedd4705e505da1435dc
+    eaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533
+    ee6d2bd9a43a054a;
+  966f27043eb621b7f65b
+    000961040ef2f9b2fc5fa450727a9b542cde52
+    936eb156c9146198;
+  ebfda19d0ccc520f21
+    ""
+    c33c9c35b8f3836e;
+  5eb57bb3a4f3ebbbb1
+    8a
+    ac3f52785c36bf6f;
+  c6c95a97a48030370c
+    33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad260
+    1a935b87b899b277;
+  5faee2b03fb648e27f
+    ff63102758fe2b69ac26afa3349829b9458630
+    df79e3c4601f609a;
+}
index b8c6ebd..f840c2e 100644 (file)
@@ -491,3 +491,225 @@ twofish-gcm {
     365bec4034b390949b707acfee0545eb79e0b47d87cdb901af6c3e964a997fe8c0faa678fa214c8ec5887e250c0d3007b2f1e29a93
     2fc6d2d214bcad3f502b9bf292029e1c;
 }
+
+twofish-ocb1 {
+  60d7bcda163547d348b7551195
+    e77022907dd1dff7dac5c9941d26d0c6
+    ""
+    ""
+    ""
+    8d1cfee1984c2e05a4a9b88de25d0b03;
+  eb14ad568f86edd1dc9268eeee
+    533285a6ed810c9b689daaa9060d2d4b
+    60
+    ""
+    ""
+    71a0344b8fa6bcb38a5dcd91fe1ea7f4;
+  03062365b0a54364c76c160f11
+    896c4794846ecfa14a7130c9f1371206
+    ""
+    34
+    79
+    7ad05aa4fccea98135597fed29e12041;
+  c9519848a877ff77bf79192a5b
+    50ade5d9cd739a3d1f337f29549e6b0d
+    ""
+    27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21635c6d62c9269029df3e
+    bd4d3d7b5c177d602a76b0d30f94b746925a97ac08dbed466c21f623133b3b4a07a0cb3122bb409131b91e4891b4ad23
+    8184dd419c0d7f3c10ae44312fdf5223;
+  6057acc87638f508046733d9ff
+    61cdbda3b3e9878731ebfedd4705e505
+    da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb621b7f65b000961040ef2f9b2fc5f
+    a450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54
+    90126eb72fa9923afc3d8381c787206cc21e1c0310b3aed18859d30dcccbebf00a040d6dc4127e8993eabc5d302aea03
+    2b753135ff0238a472730691c382446b;
+  efc9a38378c5b93bf4f2aad260
+    5faee2b03fb648e27fff63102758fe2b
+    ""
+    69ac26afa3349829b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9e
+    261413d3a72447a6d5ffce0583f1b4af32e7203b82f5d6e8686ab8c21873e4741a9dff70ab872edffdbe7a795a7b4b7f469f3a6de5
+    eb7184fda3922f373e8bcd6ca37d4042;
+  b53b571ea629c54d57dd2d42f7
+    0800df9fcbaca48b77dba189196d1ebb
+    a10b0467cb9fc2712a199e533fa9156308cdec3f768281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b
+    0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da67
+    c7a8156ec4894b7015e422efd4f9030c74e9e217ff1f15c02897a105a5c154391dac634298996cc30a8b383964cee203325787172e
+    646143dc04f96fe66f7b7e10e2d956c2;
+  94c18b5337685a96ed65b9ac
+    a338527ef19b09c063c46f88de9fd41e
+    ""
+    ""
+    ""
+    0298067ddb8e8ad3a35c06d9aaa23012;
+  72d7b97e23e6eabdff3bcd21
+    1499268878dbf30f1dad89d4b9b12012
+    e4
+    ""
+    ""
+    26caf5aed4068af4fcdbf0aab49387c5;
+  713df46795630e7952d22bb0
+    2d7100b8b649377d20a8f083455b663e
+    ""
+    4e
+    de
+    147491a865a55479e7820b48d65cfe86;
+  e1315f3c8f2aebfa921451dc
+    d1af5813b70d30ce2f1fef6ef315d079
+    ""
+    8391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e303
+    a9ba8b1b3a7f68575146960578aaec63e43366c7ae57e481739749d32bddde3c33c7b4c5e096c8c0a96e2cbf5adecd17
+    0eab7b499f15026215627b43e0b9c17a;
+  08be3c31e6bc58c0b7cadcb6
+    58b970e47479a684b5aefa69a4cd5214
+    7ed12ca986981a874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d44b6d00f06dc188d472a784e0c6f21195a3b9
+    f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc39908
+    0dee60335c90fde30d3e167df72c778839a69219947fcafa74f9bc6c21e32904b4298c20484c010e3aee5a032e33d3c9
+    9a199af39e93cb1225d112e9c0f01d61;
+  445608fe95e81c2533e31c9c
+    1a9851bc2810d858cbbc8424d126b807
+    ""
+    e6daa089c3f9099c5ffb824173d7634c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3f
+    e2a3d6365b19a3761fd7be55731c5b3dbce322f528a322b8c5b24453cb6a22656c944a6e304f5b3fb4b7cffdd5f87e17fe54664f5e
+    8af45bd468a49b9fb4af7dee23301b73;
+  b90e1721b730374ffc9bc597
+    f56ccbb2f294b38766fc69f6a9f2c094
+    5ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65cc1770a18cbfe6effd1ff6
+    778554acf1270485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f
+    9736fd0b0e9860bfb50e7d81301a7cec617bb1783e531a6708db5c790c5ffc287ce2e0f79d9a763bfff28182787061828fc2ed02fc
+    a00c4e76ab4c35fd8801455c627d2b9a;
+  9a3e8128f8743d16
+    687b7bb8deb9bd205b70e04c091d205c
+    ""
+    ""
+    ""
+    5f6ea6b0475400a164944c4a31a7547f;
+  dad9e9a79b1abf91
+    b0851e5ca605ac845139958701167750
+    8a
+    ""
+    ""
+    e55c85fb82289b89250fd9f463b50b74;
+  15dde524af3e2bee
+    0646541a42c2ecccb44d65bad397abfa
+    ""
+    f5
+    98
+    82d904459d8811b4f0907618d0215d93;
+  29ee41cf9a05c7ef
+    edef3401539c51d2a90bbf7f1bfc338a
+    ""
+    b0ef5746ea8fdcccd213e33f7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2d983514605ec590294a319b980
+    ff802a1e6113b0aac88c7a76f0338e3c95fc70c98801be1476af39a21b8bc15f5cfdf6c5643a716ab23091a187014eb2
+    3b80083b38ba73e4d4bab2799e93b59b;
+  2068a9f891bc5ba5
+    afabf8c3122d12d7ff3c41122d70d17d
+    4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d6699e6b7ea2725cb2dac07ecde95759ac46fee6dda7abc8ad68
+    daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4563d405e51881e99027b8ab9
+    e0d20e66b71e3a13aedd139a71c5823d4fbee0d3a59e3c6414b562999b2948ee764542cfa3e846d92d2afc1f4374034d
+    379db2c942b5aae433f382256bec565e;
+  aea3ccf860b00097
+    40763d96836c5f87b95460938de1288c
+    ""
+    69d80ea12ff4bb5f069b8a2e86041c1b9fc214e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa6c36800d9645563a308b
+    be3aa26f73e11ecc3bc58559bcdb8b6e1fa772bf51cddfbcf1bda58fa77945b735ede1d04f1b0b3d9b732ce7852082e8ed98b9e63c
+    f5d209e5468ccc2e7988a33924daf18f;
+  a60076817523bd2a
+    bf1261b089d8f23a9c2835076a23faac
+    2cdd67771cc667a8331f0a170b66283e4f834a06148f302c3973accd56f6f24e33958b8c2e2352fd61e4fa
+    8fec816ac861a8b33779f09e7a10fc02a8f48afa3080ee119a52a9a817e4f2b94b0820cab383a8cffeea7c486315799dc875fba578
+    4bfc4201c557734332bd6162fcc0527136cd4ba9b3ea9dd265a3901551abc061862e1e1643a6fa6ae23cfce273204557d56e9e05ca
+    8c085a22b651c7c3e54710d958570722;
+  c8ec4837898a92142b5b0677da1ac27311
+    7b45bcfff5d5f8b6fde2893232a9f81d
+    ""
+    ""
+    ""
+    cc01d47fcdd2ebfd7fc167351b89c25c;
+  14517ffae475f6b94a43a67b3d380d2f9a
+    aafe2dd721c0095c8808847689211450
+    ba
+    ""
+    ""
+    b604e266d82e05f040dfa3e55dca1544;
+  8095ffab1eaadf66fd22ac1976063e113a
+    b61f813e28a1397a7974a1d7f4220c78
+    ""
+    5f
+    68
+    87c774626abd1daca5cddd7c8dcba032;
+  e426a5a0e80f678d404147842941feeffd
+    c2eb44dc8c0d5e8f444f7f4e0c893959
+    ""
+    b74dc23a7bb40e7e0013e5150686d2301b43a15a84e81d7f5cedaa49e2414ebf47970e560475cff206877de69146acc3
+    1f0dfa5f0c07208cf7d6e19d3b49c4335b63416bdf67eb3667d2642bcf8d8639f03c58ab865cce0f068b222eac1b3ad8
+    f580549f5cce1fae5e1df61bfd49c97a;
+  ab6cf8556b7aa776945948d1b8834df219
+    6c92ec1718dcdeee0d52d9539726d281
+    0391b3f9d10c39b07ae8f08ce7cee4758a386a9943e97dedfbe61e737882cd09c2b9a80f34c0fde11c2481b11fc76bfa
+    4dbf710a9e544e0c536ca1e040f9ad5b04140d98edabe08485290a4d87d13b07398a1458c2c6b61dbdbc1cccada8c1a0
+    0efa3388b0f1344526b97696cd61d5974dd9339a37fdfd020ef6687384208deb99fb2c79a91bfcf57135ad36f60aeabd
+    12c3060b6d5cd360d29a9f8ee62bb1cb;
+  a9aabb6c4e3c3554f8fb1ef61614c27029
+    5dfc0ca6551ca4bdb75359f91cb9d921
+    ""
+    056b7de74fc9a9b37154ce6c0b396179d31f06a1dd5982cbc0d7cb23841da1ae8f4ae480cda98ad6cf2bacf6f9fd3f821330c43f3d
+    e2c8468063ab076373bf2c088a0a7a9acc80937ac2f29036a733b089f5214311bf48de59cca31051ad6eeca19f34154412d3e4acbb
+    887f83fd9a8db0d28cd849e7ec0cd72d;
+  f6c2b3fac7cbcf96523d4723f91801325e
+    b8553236651c96788d73d192ee53b3f3
+    ebd66ddd98cedbe88e245de25b1593b70f8601562d90a9b59ed034a867642d25d54756fa5c47f16f64b837
+    bb4926214211a1c696ba172010abb433922a22d9fd881519165eb9d85197a21cc34ac0d5ae7be8dbf98e4ffed2cf6b1372a5aa47b5
+    6ce7de9f52ff4f4fc21a63423b6d084752f7f7dc7b4e2c7d781a7fc6c468d2ad5a694156b41e8033ef66a59606919b13435453b037
+    ef0d9a53c0eadbb12806aab80d24d67d;
+}
+
+twofish-pmac1 {
+  60d7bcda163547d348b7551195
+    ""
+    b9898ea028d9c1fb8192e585467aeff7;
+  e77022907dd1dff7dac5c9941d
+    26
+    d2547a3fa161edf4427ac2523c0e12f4;
+  d0c6eb14ad568f86edd1dc9268
+    eeee533285a6ed810c9b689daaa9060d2d4b6003062365b0a54364c76c160f11896c4794846ecfa14a7130c9f1371206
+    629a79b85d3c132fa98b11bd247ae22a;
+  34c9519848a877ff77bf79192a
+    5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd8
+    78a88c6c5a799d4bf7276ef82681502b;
+  8374d8cde8e160ad10997a21
+    ""
+    142ab85c8da67eb03c02351267ac528f;
+  635c6d62c9269029df3e6057
+    ac
+    97ef82a6ab463b32b3c6de3b8858e703;
+  c87638f508046733d9ff61cd
+    bda3b3e9878731ebfedd4705e505da1435dceaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb6
+    13e0efe3390a5696584ff6f095c9d866;
+  21b7f65b000961040ef2f9b2
+    fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c5
+    550b74f7ec72626368a2c58ce23bb008;
+  4215abd6b3ad54ef
+    ""
+    f5dd9becdd3d3fbecc3dee067bb06ff6;
+  c9a38378c5b93bf4
+    f2
+    51c108d4abf0343491d7ec7b74e35736;
+  aad2605faee2b03f
+    b648e27fff63102758fe2b69ac26afa3349829b94586306fed54154f8f28523c03d4de1600157846b710ee72807a2219
+    1939152c1f82c19cc084a681ccdfbd3e;
+  bfb474fd71d891f2
+    4bb65d1563259f9eb53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9f
+    cdd10d315afef9594ea2d5be06e2e839;
+  c2712a199e533fa9156308cdec3f768281
+    ""
+    ba9d8b182c751b42b9796bae5985d048;
+  e040a9b9a222bd689aef66f5306ceb0c6b
+    08
+    b504bad203181c0281e60284b1e93cd3;
+  ac8b0a22260c571b4a42bb8fdb233bfa6a
+    5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da6794c18b5337685a96ed65
+    a23f906ae8ec8b99ff2344d2f22c953c;
+  b9aca338527ef19b09c063c46f88de9fd4
+    1e72d7b97e23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012e4713df46795630e7952d22bb02d
+    e8dc0b7392f193529199018bd6939012;
+}
index a9b1ab3..76ac4ac 100644 (file)
@@ -560,3 +560,225 @@ xtea-gcm {
     ae7ea2a80ef6b2ec3b48f32be277ce5f984f50af216261f69bc2e65c2c
     db4d7130d6508aa8;
 }
+
+xtea-ocb1 {
+  60d7bcda163547d348b7551195
+    e77022907dd1dff7
+    ""
+    ""
+    ""
+    07bef2af9ee05be5;
+  dac5c9941d26d0c6eb14ad568f
+    86edd1dc9268eeee
+    53
+    ""
+    ""
+    f772f8da875c6c16;
+  3285a6ed810c9b689daaa9060d
+    2d4b6003062365b0
+    ""
+    a5
+    09
+    ae03c614cee35738;
+  4364c76c160f11896c4794846e
+    cfa14a7130c9f137
+    ""
+    120634c9519848a877ff77bf79192a5b50ade5d9cd739a3d
+    667c317875cb68a2df759151a2340d3b90c7652e0a4cfcb1
+    93e92f0eef1160fb;
+  1f337f29549e6b0d27a4ba2340
+    85406a6136512061
+    f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a
+    21635c6d62c9269029df3e6057acc87638f508046733d9ff
+    6f5d6a11b04cb03f734de83608675ca8cbb718197d5e6dae
+    e69dd7ec56052187;
+  61cdbda3b3e9878731ebfedd47
+    05e505da1435dcea
+    ""
+    a7b1cc49ae1d50c38201a894476b3f102b752eb9529533966f27043eb6
+    b2404d623b8994262e27a6e4e735dee18349a90f530e2a3f636d7c5f71
+    ef92c0c42a1911fb;
+  21b7f65b000961040ef2f9b2fc
+    5fa450727a9b542c
+    de52ebfda19d0ccc520f215eb57bb3a4f3ebbb
+    b18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b9
+    b3c350ff78424273c10f103bbda2de658e037d6a35632be78052c55b53
+    131383b16016457a;
+  3bf4f2aad2605f
+    aee2b03fb648e27f
+    ""
+    ""
+    ""
+    7080c42bba62492f;
+  ff63102758fe2b
+    69ac26afa3349829
+    b9
+    ""
+    ""
+    a4e5b67ccd313289;
+  4586306fed5415
+    4f8f28523c03d4de
+    ""
+    16
+    00
+    d86ee5c4829dba67;
+  00157846b710ee
+    72807a2219bfb474
+    ""
+    fd71d891f24bb65d1563259f9eb53b571ea629c54d57dd2d
+    5a963f2a946fc9b06c9c9949f50eb85c1f3b54e009ea3950
+    43d5535e5b6fc923;
+  42f70800df9fcb
+    aca48b77dba18919
+    6d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f76
+    8281e040a9b9a222bd689aef66f5306ceb0c6b08ac8b0a22
+    fc5846409e369e01687535ae0373827734da2375afab9ad3
+    fb2bf11df41a072f;
+  260c571b4a42bb
+    8fdb233bfa6a5cfb
+    ""
+    0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc815178487
+    b7abf514a519880bcf9a1dd906236193181274945f26eeea26de9a4480
+    0a4c5b3dea189c9f;
+  3f0eb5b647da67
+    94c18b5337685a96
+    ed65b9aca338527ef19b09c063c46f88de9fd4
+    1e72d7b97e23e6eabdff3bcd211499268878dbf30f1dad89d4b9b12012
+    abb5a85ee34c20c9ac26d5b84fb2079b949508c3a6c248aef713c7e3c8
+    66f1833b4afd2bd8;
+  e4713df46795630e7952
+    d22bb02d7100b8b6
+    ""
+    ""
+    ""
+    be24074b27f49059;
+  49377d20a8f083455b66
+    3e4ee1315f3c8f2a
+    eb
+    ""
+    ""
+    ee190cc6ecad475c;
+  fa921451dcd1af5813b7
+    0d30ce2f1fef6ef3
+    ""
+    15
+    bb
+    5a83e24c3f3d84e9;
+  d0798391805da08da3ae
+    fc5f8584b7c5e617
+    ""
+    669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e8
+    a573de0fdef866acaa2ebd0be9a101af7f8e4ce6d9f33a2a
+    f3acd5608b4d8863;
+  15f422cdf0c8e30308be
+    3c31e6bc58c0b7ca
+    dcb658b970e47479a684b5aefa69a4cd52147ed12ca98698
+    1a874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d4
+    acb6678d5dcfe7373c937b1b743ac60d7b039ee405cc184d
+    426f814ef7af424d;
+  4b6d00f06dc188d472a7
+    84e0c6f21195a3b9
+    ""
+    f4ae985511265febd11c164720eef9eb1c8dd0b00951f284649016ed00
+    6b9981f8864012346d4faa801dc7d0aa35703d3a19fcbfd65c79509cc1
+    4b2c765518bd12b4;
+  456331854bc78bf43966
+    eb0cfa9138ddc399
+    08445608fe95e81c2533e31c9c1a9851bc2810
+    d858cbbc8424d126b807e6daa089c3f9099c5ffb824173d7634c04226f
+    ade2fa7115805e2fe9464340d7b5a7c97c093ded512f5c7cec815ff278
+    af6dddac99d6a024;
+  30cbb7f0e4a973a8cd
+    190107314717a774
+    ""
+    ""
+    ""
+    1bf75ebfe2f2c874;
+  56f3ff669c732b58db
+    8f48af65f7cc9e3f
+    b9
+    ""
+    ""
+    b5e6cebf8f565eb4;
+  0e1721b730374ffc9b
+    c597f56ccbb2f294
+    ""
+    b3
+    18
+    feee3b50ee01bc04;
+  8766fc69f6a9f2c094
+    5ffd505003cc0cae
+    ""
+    9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e32d65
+    e918a45ec5088f385ab211351a06495693bfb81dcd0d7749
+    9a6e716945055b00;
+  cc1770a18cbfe6effd
+    1ff6778554acf127
+    0485b203a3c1c4c967c0a458cb948bdd409b687fa3a6827b
+    480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a
+    b25ea7ed37027181c51ab3d374c9f2cf8dc6a5c275c93b11
+    6b72bcad7a2cc4a4;
+  3e8128f8743d16687b
+    7bb8deb9bd205b70
+    ""
+    e04c091d205cdad9e9a79b1abf91b0851e5ca605ac8451399587011677
+    45c3c8686b2cd92247a8afc0ca13a832de78417abbd11d3e7a687bc4cc
+    6247cc4284c11080;
+  508a15dde524af3e2b
+    ee0646541a42c2ec
+    ccb44d65bad397abfaf529ee41cf9a05c7efed
+    ef3401539c51d2a90bbf7f1bfc338ab0ef5746ea8fdcccd213e33f7e8a
+    be2975c04e206859c47b5380c0e22d177563ce76c47538d89ae0be19f9
+    9cc636850cbc148f;
+}
+
+xtea-pmac1 {
+  60d7bcda163547d348b7551195
+    ""
+    5afaac6a8b1d8747;
+  e77022907dd1dff7dac5c9941d
+    26
+    586ad5dfb39d35c5;
+  d0c6eb14ad568f86edd1dc9268
+    eeee533285a6ed810c9b689daaa9060d2d4b6003062365b0
+    e6a7ee16109f3b0d;
+  a54364c76c160f11896c479484
+    6ecfa14a7130c9f137120634c9519848a877ff
+    320631d3f31f8840;
+  77bf79192a5b50
+    ""
+    eeb3c7cb0d072322;
+  ade5d9cd739a3d
+    1f
+    377efb6339f47074;
+  337f29549e6b0d
+    27a4ba234085406a6136512061f7080cc07df0591d8fa21f
+    23266ff9052777ea;
+  2dd88374d8cde8
+    e160ad10997a21635c6d62c9269029df3e6057
+    387edca755c71aa8;
+  acc87638f508046733d9
+    ""
+    f88c2d9748aafff6;
+  ff61cdbda3b3e9878731
+    eb
+    5502443fc2d9e373;
+  fedd4705e505da1435dc
+    eaa7b1cc49ae1d50c38201a894476b3f102b752eb9529533
+    722b4728cbe72195;
+  966f27043eb621b7f65b
+    000961040ef2f9b2fc5fa450727a9b542cde52
+    c4d4788b5aaaba15;
+  ebfda19d0ccc520f21
+    ""
+    df7b7666d395d55c;
+  5eb57bb3a4f3ebbbb1
+    8a
+    28c63dbfb924352f;
+  c6c95a97a48030370c
+    33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad260
+    df15e66620945a9d;
+  5faee2b03fb648e27f
+    ff63102758fe2b69ac26afa3349829b9458630
+    5017699c228b645c;
+}
index 62b4cde..e0dd386 100755 (executable)
@@ -522,6 +522,140 @@ def eaxgen(bc):
           (bc.blksz - 1, 3*bc.blksz - 5, 3*bc.blksz + 5)]
 
 ###--------------------------------------------------------------------------
+### PMAC.
+
+def ocb_masks(E):
+  blksz = E.__class__.blksz
+  p = poly(8*blksz)
+  x = C.GF(2); xinv = p.modinv(x)
+  z = Z(blksz)
+  L = E.encrypt(z)
+  Lxinv = mul_blk_gf(L, xinv, p)
+  Lgamma = 66*[L]
+  for i in xrange(1, len(Lgamma)):
+    Lgamma[i] = mul_blk_gf(Lgamma[i - 1], x, p)
+  return Lgamma, Lxinv
+
+def dump_ocb(E):
+  Lgamma, Lxinv = ocb_masks(E)
+  print 'L x^-1 = %s' % hex(Lxinv)
+  for i, lg in enumerate(Lgamma[:16]):
+    print 'L x^%d = %s' % (i, hex(lg))
+
+def pmac1(E, m):
+  blksz = E.__class__.blksz
+  Lgamma, Lxinv = ocb_masks(E)
+  a = o = Z(blksz)
+  i = 0
+  v, tl = blocks(m, blksz)
+  for x in v:
+    i += 1
+    b = ntz(i)
+    o ^= Lgamma[b]
+    a ^= E.encrypt(x ^ o)
+    if VERBOSE:
+      print 'Z[%d]: %d -> %s' % (i, b, hex(o))
+      print 'A[%d]: %s' % (i, hex(a))
+  if len(tl) == blksz: a ^= tl ^ Lxinv
+  else: a ^= pad10star(tl, blksz)
+  return E.encrypt(a)
+
+def pmac1_pub(E, m):
+  if VERBOSE: dump_ocb(E)
+  return pmac1(E, m),
+
+def pmacgen(bc):
+  return [(0,), (1,),
+          (3*bc.blksz,),
+          (3*bc.blksz - 5,)]
+
+###--------------------------------------------------------------------------
+### OCB.
+
+def ocb1enc(E, n, h, m, tsz = None):
+  ## This is OCB1.PMAC1 from Rogaway's `Authenticated-Encryption with
+  ## Associated-Data'.
+  blksz = E.__class__.blksz
+  if VERBOSE: dump_ocb(E)
+  Lgamma, Lxinv = ocb_masks(E)
+  if tsz is None: tsz = blksz
+  a = Z(blksz)
+  o = E.encrypt(n ^ Lgamma[0])
+  if VERBOSE: print 'R = %s' % hex(o)
+  i = 0
+  y = C.WriteBuffer()
+  v, tl = blocks(m, blksz)
+  for x in v:
+    i += 1
+    b = ntz(i)
+    o ^= Lgamma[b]
+    a ^= x
+    if VERBOSE:
+      print 'Z[%d]: %d -> %s' % (i, b, hex(o))
+      print 'A[%d]: %s' % (i, hex(a))
+    y.put(E.encrypt(x ^ o) ^ o)
+  i += 1
+  b = ntz(i)
+  o ^= Lgamma[b]
+  n = len(tl)
+  if VERBOSE:
+    print 'Z[%d]: %d -> %s' % (i, b, hex(o))
+    print 'LEN = %s' % hex(C.MP(8*n).storeb(blksz))
+  yfinal = E.encrypt(C.MP(8*n).storeb(blksz) ^ Lxinv ^ o)
+  cfinal = tl ^ yfinal[:n]
+  a ^= o ^ (tl + yfinal[n:])
+  y.put(cfinal)
+  t = E.encrypt(a)
+  if h: t ^= pmac1(E, h)
+  return C.ByteString(y), C.ByteString(t[:tsz])
+
+def ocb1dec(E, n, h, y, t):
+  ## This is OCB1.PMAC1 from Rogaway's `Authenticated-Encryption with
+  ## Associated-Data'.
+  blksz = E.__class__.blksz
+  if VERBOSE: dump_ocb(E)
+  Lgamma, Lxinv = ocb_masks(E)
+  a = Z(blksz)
+  o = E.encrypt(n ^ Lgamma[0])
+  if VERBOSE: print 'R = %s' % hex(o)
+  i = 0
+  m = C.WriteBuffer()
+  v, tl = blocks(y, blksz)
+  for x in v:
+    i += 1
+    b = ntz(i)
+    o ^= Lgamma[b]
+    if VERBOSE:
+      print 'Z[%d]: %d -> %s' % (i, b, hex(o))
+      print 'A[%d]: %s' % (i, hex(a))
+    u = E.decrypt(x ^ o) ^ o
+    m.put(u)
+    a ^= u
+  i += 1
+  b = ntz(i)
+  o ^= Lgamma[b]
+  n = len(tl)
+  if VERBOSE:
+    print 'Z[%d]: %d -> %s' % (i, b, hex(o))
+    print 'LEN = %s' % hex(C.MP(8*n).storeb(blksz))
+  yfinal = E.encrypt(C.MP(8*n).storeb(blksz) ^ Lxinv ^ o)
+  mfinal = tl ^ yfinal[:n]
+  a ^= o ^ (mfinal + yfinal[n:])
+  m.put(mfinal)
+  u = E.encrypt(a)
+  if h: u ^= pmac1(E, h)
+  if t == u[:len(t)]: return C.ByteString(m),
+  else: return None,
+
+def ocbgen(bc):
+  w = bc.blksz
+  return [(w, 0, 0), (w, 1, 0), (w, 0, 1),
+          (w, 0, 3*w),
+          (w, 3*w, 3*w),
+          (w, 0, 3*w + 5),
+          (w, 3*w - 5, 3*w + 5)]
+
+###--------------------------------------------------------------------------
 ### Main program.
 
 class struct (object):
@@ -537,7 +671,10 @@ MODEMAP = { 'eax-enc': (eaxgen, 3*[binarg] + [intarg], eaxenc),
             'ccm-dec': (dummygen, 4*[binarg], ccmdec),
             'cmac': (cmacgen, [binarg], cmac),
             'gcm-enc': (gcmgen, 3*[binarg] + [intarg], gcmenc),
-            'gcm-dec': (dummygen, 4*[binarg], gcmdec) }
+            'gcm-dec': (dummygen, 4*[binarg], gcmdec),
+            'ocb1-enc': (ocbgen, 3*[binarg] + [intarg], ocb1enc),
+            'ocb1-dec': (dummygen, 4*[binarg], ocb1dec),
+            'pmac1': (pmacgen, [binarg], pmac1_pub) }
 
 mode = argv[1]
 bc = None