Also bump the required mLib version to 2.3.0, for <mLib/compiler.h>.
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--------------------------------------------------------------------------
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
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.
--- /dev/null
+/* -*-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 -------------------------------------------------*/
--- /dev/null
+/* -*-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
--- /dev/null
+/* -*-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
--- /dev/null
+/* -*-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
--- /dev/null
+/* -*-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
--- /dev/null
+/* -*-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
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
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;
+}
(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):
'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