From damian.vizar at epfl.ch Thu Feb 2 17:06:52 2017 From: damian.vizar at epfl.ch (Damian Vizar) Date: Thu, 2 Feb 2017 17:06:52 +0100 Subject: IV handling in symmetric modes in libgcrypt Message-ID: <34055b1c-9e65-1875-33ce-8bbefb48847b@epfl.ch> Hi, I have a fairly simple question: for the symmetric blockcipher modes of operation (I am mostly interested in AEAD modes), does the IV have to be re-set manually for every encryption, or is there some mechanism that updates the IV automatically? (E.g. by counter-like incrementation). I tried to figure it out on my own, but I am not familiar with the code of libgcrypt. Thanks, Damian From cvs at cvs.gnupg.org Sat Feb 4 11:54:46 2017 From: cvs at cvs.gnupg.org (by Jussi Kivilinna) Date: Sat, 04 Feb 2017 11:54:46 +0100 Subject: [git] GCRYPT - branch, master, updated. libgcrypt-1.7.3-71-gc67c728 Message-ID: This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "The GNU crypto library". The branch, master has been updated via c67c728478e8f47b6e8296b643fd35d66d4a1052 (commit) via 4b7451d3e8e7b87d8e407fbbd924ad5b13bd0f00 (commit) via 37b537600f33fcf8e1c8dc2c658a142fbba44199 (commit) via 1407317a6112a23d4fec5827a9d74faef4196f66 (commit) via efa9042f82ffed3d076b8e26ac62d29e00bb756a (commit) from e7b941c3de9c9b6319298c02f844cc0cadbf8562 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c67c728478e8f47b6e8296b643fd35d66d4a1052 Author: Jussi Kivilinna Date: Sat Feb 4 12:48:57 2017 +0200 rndhw: add missing "memory" clobbers * random/rndhw.c: (poll_padlock, rdrand_long): Add "memory" to asm clobbers. -- Signed-off-by: Jussi Kivilinna diff --git a/random/rndhw.c b/random/rndhw.c index 063c25a..e3a7861 100644 --- a/random/rndhw.c +++ b/random/rndhw.c @@ -76,7 +76,7 @@ poll_padlock (void (*add)(const void*, size_t, enum random_origins), ".byte 0x0f, 0xa7, 0xc0\n\t" /* XSTORE RNG. */ : "=a" (status) : "g" (p) - : "%rdx", "%rdi", "cc" + : "%rdx", "%rdi", "cc", "memory" ); #else asm volatile @@ -85,7 +85,7 @@ poll_padlock (void (*add)(const void*, size_t, enum random_origins), ".byte 0x0f, 0xa7, 0xc0\n\t" /* XSTORE RNG. */ : "=a" (status) : "g" (p) - : "%edx", "%edi", "cc" + : "%edx", "%edi", "cc", "memory" ); #endif if ((status & (1<<6)) /* RNG still enabled. */ @@ -139,7 +139,7 @@ rdrand_long (volatile unsigned long *v) "2:" : "=r" (ok), "=a" (*v) : "0" (RDRAND_RETRY_LOOPS) - : "cc"); + : "cc", "memory"); return ok; } commit 4b7451d3e8e7b87d8e407fbbd924ad5b13bd0f00 Author: Jussi Kivilinna Date: Sat Jan 28 11:00:35 2017 +0200 Add UNLIKELY and LIKELY macros * src/g10lib.h (LIKELY, UNLIKELY): New. (gcry_assert): Use LIKELY for assert check. (fast_wipememory2_unaligned_head): Use UNLIKELY for unaligned branching. * cipher/bufhelp.h (buf_cpy, buf_xor, buf_xor_1, buf_xor_2dst) (buf_xor_n_copy_2): Ditto. -- Signed-off-by: Jussi Kivilinna diff --git a/cipher/bufhelp.h b/cipher/bufhelp.h index 3110a1d..b854bc0 100644 --- a/cipher/bufhelp.h +++ b/cipher/bufhelp.h @@ -1,5 +1,5 @@ /* bufhelp.h - Some buffer manipulation helpers - * Copyright (C) 2012 Jussi Kivilinna + * Copyright (C) 2012-2017 Jussi Kivilinna * * This file is part of Libgcrypt. * @@ -20,6 +20,7 @@ #define GCRYPT_BUFHELP_H +#include "g10lib.h" #include "bithelp.h" @@ -88,7 +89,7 @@ buf_cpy(void *_dst, const void *_src, size_t len) const unsigned int longmask = sizeof(bufhelp_int_t) - 1; /* Skip fast processing if buffers are unaligned. */ - if (((uintptr_t)dst | (uintptr_t)src) & longmask) + if (UNLIKELY(((uintptr_t)dst | (uintptr_t)src) & longmask)) goto do_bytes; #endif @@ -124,7 +125,7 @@ buf_xor(void *_dst, const void *_src1, const void *_src2, size_t len) const unsigned int longmask = sizeof(bufhelp_int_t) - 1; /* Skip fast processing if buffers are unaligned. */ - if (((uintptr_t)dst | (uintptr_t)src1 | (uintptr_t)src2) & longmask) + if (UNLIKELY(((uintptr_t)dst | (uintptr_t)src1 | (uintptr_t)src2) & longmask)) goto do_bytes; #endif @@ -160,7 +161,7 @@ buf_xor_1(void *_dst, const void *_src, size_t len) const unsigned int longmask = sizeof(bufhelp_int_t) - 1; /* Skip fast processing if buffers are unaligned. */ - if (((uintptr_t)dst | (uintptr_t)src) & longmask) + if (UNLIKELY(((uintptr_t)dst | (uintptr_t)src) & longmask)) goto do_bytes; #endif @@ -196,7 +197,7 @@ buf_xor_2dst(void *_dst1, void *_dst2, const void *_src, size_t len) const unsigned int longmask = sizeof(bufhelp_int_t) - 1; /* Skip fast processing if buffers are unaligned. */ - if (((uintptr_t)src | (uintptr_t)dst1 | (uintptr_t)dst2) & longmask) + if (UNLIKELY(((uintptr_t)src | (uintptr_t)dst1 | (uintptr_t)dst2) & longmask)) goto do_bytes; #endif @@ -238,8 +239,8 @@ buf_xor_n_copy_2(void *_dst_xor, const void *_src_xor, void *_srcdst_cpy, const unsigned int longmask = sizeof(bufhelp_int_t) - 1; /* Skip fast processing if buffers are unaligned. */ - if (((uintptr_t)src_cpy | (uintptr_t)src_xor | (uintptr_t)dst_xor | - (uintptr_t)srcdst_cpy) & longmask) + if (UNLIKELY(((uintptr_t)src_cpy | (uintptr_t)src_xor | (uintptr_t)dst_xor | + (uintptr_t)srcdst_cpy) & longmask)) goto do_bytes; #endif diff --git a/src/g10lib.h b/src/g10lib.h index 8ce84b8..0309a83 100644 --- a/src/g10lib.h +++ b/src/g10lib.h @@ -75,6 +75,14 @@ #define GCC_ATTR_UNUSED #endif +#if __GNUC__ >= 3 +#define LIKELY( expr ) __builtin_expect( !!(expr), 1 ) +#define UNLIKELY( expr ) __builtin_expect( !!(expr), 0 ) +#else +#define LIKELY( expr ) (!!(expr)) +#define UNLIKELY( expr ) (!!(expr)) +#endif + /* Gettext macros. */ #define _(a) _gcry_gettext(a) @@ -165,15 +173,15 @@ int _gcry_log_verbosity( int level ); #ifdef JNLIB_GCC_M_FUNCTION #define BUG() _gcry_bug( __FILE__ , __LINE__, __FUNCTION__ ) -#define gcry_assert(expr) ((expr)? (void)0 \ +#define gcry_assert(expr) (LIKELY(expr)? (void)0 \ : _gcry_assert_failed (STR(expr), __FILE__, __LINE__, __FUNCTION__)) #elif __STDC_VERSION__ >= 199901L #define BUG() _gcry_bug( __FILE__ , __LINE__, __func__ ) -#define gcry_assert(expr) ((expr)? (void)0 \ +#define gcry_assert(expr) (LIKELY(expr)? (void)0 \ : _gcry_assert_failed (STR(expr), __FILE__, __LINE__, __func__)) #else #define BUG() _gcry_bug( __FILE__ , __LINE__ ) -#define gcry_assert(expr) ((expr)? (void)0 \ +#define gcry_assert(expr) (LIKELY(expr)? (void)0 \ : _gcry_assert_failed (STR(expr), __FILE__, __LINE__)) #endif @@ -346,7 +354,7 @@ typedef struct fast_wipememory_s } __attribute__((packed, aligned(1), may_alias)) fast_wipememory_t; #else #define fast_wipememory2_unaligned_head(_vptr,_vset,_vlen) do { \ - while((size_t)(_vptr)&(sizeof(FASTWIPE_T)-1) && _vlen) \ + while(UNLIKELY((size_t)(_vptr)&(sizeof(FASTWIPE_T)-1)) && _vlen) \ { *_vptr=(_vset); _vptr++; _vlen--; } \ } while(0) typedef struct fast_wipememory_s commit 37b537600f33fcf8e1c8dc2c658a142fbba44199 Author: Jussi Kivilinna Date: Sat Jan 28 15:00:28 2017 +0200 rndhw: avoid type-punching * random/rndhw.c (rdrand_long, rdrand_nlong): Add 'volatile' for pointer. (poll_drng): Convert buffer to 'unsigned long[]' and make use of DIM macro. -- Signed-off-by: Jussi Kivilinna diff --git a/random/rndhw.c b/random/rndhw.c index 8e50751..063c25a 100644 --- a/random/rndhw.c +++ b/random/rndhw.c @@ -129,7 +129,7 @@ poll_padlock (void (*add)(const void*, size_t, enum random_origins), # define RDRAND_LONG RDRAND_INT # endif static inline int -rdrand_long (unsigned long *v) +rdrand_long (volatile unsigned long *v) { int ok; asm volatile ("1: " RDRAND_LONG "\n\t" @@ -145,7 +145,7 @@ rdrand_long (unsigned long *v) static inline int -rdrand_nlong (unsigned long *v, int count) +rdrand_nlong (volatile unsigned long *v, int count) { while (count--) if (!rdrand_long(v++)) @@ -157,12 +157,12 @@ rdrand_nlong (unsigned long *v, int count) static size_t poll_drng (add_fn_t add, enum random_origins origin, int fast) { - volatile char buffer[64] __attribute__ ((aligned (8))); + volatile unsigned long buffer[8] __attribute__ ((aligned (8))); unsigned int nbytes = sizeof (buffer); (void)fast; - if (!rdrand_nlong ((unsigned long *)buffer, sizeof(buffer)/sizeof(long))) + if (!rdrand_nlong (buffer, DIM(buffer))) return 0; (*add)((void *)buffer, nbytes, origin); return nbytes; commit 1407317a6112a23d4fec5827a9d74faef4196f66 Author: Jussi Kivilinna Date: Sat Jan 28 14:59:56 2017 +0200 hwf-x86: avoid type-punching * src/hwf-x86.c (detect_x86_gnuc): Use union for vendor_id. -- Signed-off-by: Jussi Kivilinna diff --git a/src/hwf-x86.c b/src/hwf-x86.c index a746ab2..53e00d9 100644 --- a/src/hwf-x86.c +++ b/src/hwf-x86.c @@ -170,7 +170,11 @@ get_xgetbv(void) static unsigned int detect_x86_gnuc (void) { - char vendor_id[12+1]; + union + { + char c[12+1]; + unsigned int ui[3]; + } vendor_id; unsigned int features; unsigned int os_supports_avx_avx2_registers = 0; unsigned int max_cpuid_level; @@ -183,16 +187,14 @@ detect_x86_gnuc (void) if (!is_cpuid_available()) return 0; - get_cpuid(0, &max_cpuid_level, - (unsigned int *)&vendor_id[0], - (unsigned int *)&vendor_id[8], - (unsigned int *)&vendor_id[4]); - vendor_id[12] = 0; + get_cpuid(0, &max_cpuid_level, &vendor_id.ui[0], &vendor_id.ui[2], + &vendor_id.ui[1]); + vendor_id.c[12] = 0; if (0) ; /* Just to make "else if" and ifdef macros look pretty. */ #ifdef ENABLE_PADLOCK_SUPPORT - else if (!strcmp (vendor_id, "CentaurHauls")) + else if (!strcmp (vendor_id.c, "CentaurHauls")) { /* This is a VIA CPU. Check what PadLock features we have. */ @@ -225,12 +227,12 @@ detect_x86_gnuc (void) } } #endif /*ENABLE_PADLOCK_SUPPORT*/ - else if (!strcmp (vendor_id, "GenuineIntel")) + else if (!strcmp (vendor_id.c, "GenuineIntel")) { /* This is an Intel CPU. */ result |= HWF_INTEL_CPU; } - else if (!strcmp (vendor_id, "AuthenticAMD")) + else if (!strcmp (vendor_id.c, "AuthenticAMD")) { /* This is an AMD CPU. */ } commit efa9042f82ffed3d076b8e26ac62d29e00bb756a Author: Jussi Kivilinna Date: Sat Jan 28 10:26:09 2017 +0200 cipher: add explicit blocksize checks to allow better optimization * cipher/cipher-cbc.c (_gcry_cipher_cbc_encrypt) (_gcry_cipher_cbc_decrypt): Add explicit check for cipher blocksize of 64-bit or 128-bit. * cipher/cipher-cfb.c (_gcry_cipher_cfb_encrypt) (_gcry_cipher_cfb_decrypt): Ditto. * cipher/cipher-cmac.c (cmac_write, cmac_generate_subkeys) (cmac_final): Ditto. * cipher/cipher-ctr.c (_gcry_cipher_ctr_encrypt): Ditto. * cipher/cipher-ofb.c (_gcry_cipher_ofb_encrypt): Ditto. -- Signed-off-by: Jussi Kivilinna diff --git a/cipher/cipher-cbc.c b/cipher/cipher-cbc.c index 67814b7..95c49b2 100644 --- a/cipher/cipher-cbc.c +++ b/cipher/cipher-cbc.c @@ -44,6 +44,11 @@ _gcry_cipher_cbc_encrypt (gcry_cipher_hd_t c, size_t nblocks = inbuflen / blocksize; unsigned int burn, nburn; + /* Tell compiler that we require a cipher with a 64bit or 128 bit block + * length, to allow better optimization of this function. */ + if (blocksize > 16 || blocksize < 8 || blocksize & (8 - 1)) + return GPG_ERR_INV_LENGTH; + if (outbuflen < ((c->flags & GCRY_CIPHER_CBC_MAC)? blocksize : inbuflen)) return GPG_ERR_BUFFER_TOO_SHORT; @@ -133,6 +138,11 @@ _gcry_cipher_cbc_decrypt (gcry_cipher_hd_t c, size_t nblocks = inbuflen / blocksize; unsigned int burn, nburn; + /* Tell compiler that we require a cipher with a 64bit or 128 bit block + * length, to allow better optimization of this function. */ + if (blocksize > 16 || blocksize < 8 || blocksize & (8 - 1)) + return GPG_ERR_INV_LENGTH; + if (outbuflen < inbuflen) return GPG_ERR_BUFFER_TOO_SHORT; diff --git a/cipher/cipher-cfb.c b/cipher/cipher-cfb.c index f289ed3..21c81ca 100644 --- a/cipher/cipher-cfb.c +++ b/cipher/cipher-cfb.c @@ -41,6 +41,11 @@ _gcry_cipher_cfb_encrypt (gcry_cipher_hd_t c, size_t blocksize_x_2 = blocksize + blocksize; unsigned int burn, nburn; + /* Tell compiler that we require a cipher with a 64bit or 128 bit block + * length, to allow better optimization of this function. */ + if (blocksize > 16 || blocksize < 8 || blocksize & (8 - 1)) + return GPG_ERR_INV_LENGTH; + if (outbuflen < inbuflen) return GPG_ERR_BUFFER_TOO_SHORT; @@ -138,6 +143,11 @@ _gcry_cipher_cfb_decrypt (gcry_cipher_hd_t c, size_t blocksize_x_2 = blocksize + blocksize; unsigned int burn, nburn; + /* Tell compiler that we require a cipher with a 64bit or 128 bit block + * length, to allow better optimization of this function. */ + if (blocksize > 16 || blocksize < 8 || blocksize & (8 - 1)) + return GPG_ERR_INV_LENGTH; + if (outbuflen < inbuflen) return GPG_ERR_BUFFER_TOO_SHORT; diff --git a/cipher/cipher-cmac.c b/cipher/cipher-cmac.c index eca1c1a..da3ef75 100644 --- a/cipher/cipher-cmac.c +++ b/cipher/cipher-cmac.c @@ -42,6 +42,11 @@ cmac_write (gcry_cipher_hd_t c, const byte * inbuf, size_t inlen) unsigned int burn = 0; unsigned int nblocks; + /* Tell compiler that we require a cipher with a 64bit or 128 bit block + * length, to allow better optimization of this function. */ + if (blocksize > 16 || blocksize < 8 || blocksize & (8 - 1)) + return; + if (!inlen || !inbuf) return; @@ -109,6 +114,11 @@ cmac_generate_subkeys (gcry_cipher_hd_t c) byte buf[MAX_BLOCKSIZE]; } u; + /* Tell compiler that we require a cipher with a 64bit or 128 bit block + * length, to allow better optimization of this function. */ + if (blocksize > 16 || blocksize < 8 || blocksize & (8 - 1)) + return; + if (MAX_BLOCKSIZE < blocksize) BUG (); @@ -149,6 +159,11 @@ cmac_final (gcry_cipher_hd_t c) unsigned int burn; byte *subkey; + /* Tell compiler that we require a cipher with a 64bit or 128 bit block + * length, to allow better optimization of this function. */ + if (blocksize > 16 || blocksize < 8 || blocksize & (8 - 1)) + return; + if (count == blocksize) subkey = c->u_mode.cmac.subkeys[0]; /* K1 */ else diff --git a/cipher/cipher-ctr.c b/cipher/cipher-ctr.c index 4bbfaae..f9cb6b5 100644 --- a/cipher/cipher-ctr.c +++ b/cipher/cipher-ctr.c @@ -42,6 +42,11 @@ _gcry_cipher_ctr_encrypt (gcry_cipher_hd_t c, size_t nblocks; unsigned int burn, nburn; + /* Tell compiler that we require a cipher with a 64bit or 128 bit block + * length, to allow better optimization of this function. */ + if (blocksize > 16 || blocksize < 8 || blocksize & (8 - 1)) + return GPG_ERR_INV_LENGTH; + if (outbuflen < inbuflen) return GPG_ERR_BUFFER_TOO_SHORT; diff --git a/cipher/cipher-ofb.c b/cipher/cipher-ofb.c index 7db7658..f821d1b 100644 --- a/cipher/cipher-ofb.c +++ b/cipher/cipher-ofb.c @@ -40,6 +40,11 @@ _gcry_cipher_ofb_encrypt (gcry_cipher_hd_t c, size_t blocksize = c->spec->blocksize; unsigned int burn, nburn; + /* Tell compiler that we require a cipher with a 64bit or 128 bit block + * length, to allow better optimization of this function. */ + if (blocksize > 16 || blocksize < 8 || blocksize & (8 - 1)) + return GPG_ERR_INV_LENGTH; + if (outbuflen < inbuflen) return GPG_ERR_BUFFER_TOO_SHORT; ----------------------------------------------------------------------- Summary of changes: cipher/bufhelp.h | 15 ++++++++------- cipher/cipher-cbc.c | 10 ++++++++++ cipher/cipher-cfb.c | 10 ++++++++++ cipher/cipher-cmac.c | 15 +++++++++++++++ cipher/cipher-ctr.c | 5 +++++ cipher/cipher-ofb.c | 5 +++++ random/rndhw.c | 14 +++++++------- src/g10lib.h | 16 ++++++++++++---- src/hwf-x86.c | 20 +++++++++++--------- 9 files changed, 83 insertions(+), 27 deletions(-) hooks/post-receive -- The GNU crypto library http://git.gnupg.org _______________________________________________ Gnupg-commits mailing list Gnupg-commits at gnupg.org http://lists.gnupg.org/mailman/listinfo/gnupg-commits From cvs at cvs.gnupg.org Sat Feb 4 12:37:55 2017 From: cvs at cvs.gnupg.org (by Mathias L. Baumann) Date: Sat, 04 Feb 2017 12:37:55 +0100 Subject: [git] GCRYPT - branch, master, updated. libgcrypt-1.7.3-73-gd1ee9a6 Message-ID: This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "The GNU crypto library". The branch, master has been updated via d1ee9a660571ce4a998c9ab2299d4f2419f99127 (commit) via 80bd6195c794a7900791a88b943f371dc480cf07 (commit) from c67c728478e8f47b6e8296b643fd35d66d4a1052 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d1ee9a660571ce4a998c9ab2299d4f2419f99127 Author: Mathias L. Baumann Date: Sat Feb 4 13:30:41 2017 +0200 Implement CFB with 8-bit mode * cipher/cipher-cfb.c (_gcry_cipher_cfb8_encrypt) (_gcry_cipher_cfg8_decrypt): Add 8-bit variants of decrypt/encrypt functions. * cipher/cipher-internal.h (_gcry_cipher_cfb8_encrypt) (_gcry_cipher_cfg8_decrypt): Ditto. * cipher/cipher.c: Adjust code flow to work with GCRY_CIPHER_MODE_CFB8. * tests/basic.c: Add tests for cfb8 with AES and 3DES. -- Signed-off-by: Mathias L. Baumann [JK: edit changelog, fix email malformed patch] Signed-off-by: Jussi Kivilinna diff --git a/cipher/cipher-cfb.c b/cipher/cipher-cfb.c index 21c81ca..cca5c1f 100644 --- a/cipher/cipher-cfb.c +++ b/cipher/cipher-cfb.c @@ -233,3 +233,89 @@ _gcry_cipher_cfb_decrypt (gcry_cipher_hd_t c, return 0; } + + +gcry_err_code_t +_gcry_cipher_cfb8_encrypt (gcry_cipher_hd_t c, + unsigned char *outbuf, size_t outbuflen, + const unsigned char *inbuf, size_t inbuflen) +{ + gcry_cipher_encrypt_t enc_fn = c->spec->encrypt; + size_t blocksize = c->spec->blocksize; + unsigned int burn, nburn; + + if (outbuflen < inbuflen) + return GPG_ERR_BUFFER_TOO_SHORT; + + burn = 0; + + while ( inbuflen > 0) + { + /* Encrypt the IV. */ + nburn = enc_fn ( &c->context.c, c->lastiv, c->u_iv.iv ); + burn = nburn > burn ? nburn : burn; + + outbuf[0] = c->lastiv[0] ^ inbuf[0]; + + /* Bitshift iv by 8 bit to the left */ + for (int i = 0; i < blocksize-1; i++) + c->u_iv.iv[i] = c->u_iv.iv[i+1]; + + /* append cipher text to iv */ + c->u_iv.iv[blocksize-1] = outbuf[0]; + + outbuf += 1; + inbuf += 1; + inbuflen -= 1; + } + + if (burn > 0) + _gcry_burn_stack (burn + 4 * sizeof(void *)); + + return 0; +} + + +gcry_err_code_t +_gcry_cipher_cfb8_decrypt (gcry_cipher_hd_t c, + unsigned char *outbuf, size_t outbuflen, + const unsigned char *inbuf, size_t inbuflen) +{ + gcry_cipher_encrypt_t enc_fn = c->spec->encrypt; + size_t blocksize = c->spec->blocksize; + unsigned int burn, nburn; + unsigned char appendee; + + if (outbuflen < inbuflen) + return GPG_ERR_BUFFER_TOO_SHORT; + + burn = 0; + + while (inbuflen > 0) + { + /* Encrypt the IV. */ + nburn = enc_fn ( &c->context.c, c->lastiv, c->u_iv.iv ); + burn = nburn > burn ? nburn : burn; + + /* inbuf might == outbuf, make sure we keep the value + so we can append it later */ + appendee = inbuf[0]; + + outbuf[0] = inbuf[0] ^ c->lastiv[0]; + + /* Bitshift iv by 8 bit to the left */ + for (int i = 0; i < blocksize-1; i++) + c->u_iv.iv[i] = c->u_iv.iv[i+1]; + + c->u_iv.iv[blocksize-1] = appendee; + + outbuf += 1; + inbuf += 1; + inbuflen -= 1; + } + + if (burn > 0) + _gcry_burn_stack (burn + 4 * sizeof(void *)); + + return 0; +} diff --git a/cipher/cipher-internal.h b/cipher/cipher-internal.h index 33d0629..ea9c33d 100644 --- a/cipher/cipher-internal.h +++ b/cipher/cipher-internal.h @@ -348,6 +348,14 @@ gcry_err_code_t _gcry_cipher_cfb_decrypt /* */ (gcry_cipher_hd_t c, unsigned char *outbuf, size_t outbuflen, const unsigned char *inbuf, size_t inbuflen); +gcry_err_code_t _gcry_cipher_cfb8_encrypt +/* */ (gcry_cipher_hd_t c, + unsigned char *outbuf, size_t outbuflen, + const unsigned char *inbuf, size_t inbuflen); +gcry_err_code_t _gcry_cipher_cfb8_decrypt +/* */ (gcry_cipher_hd_t c, + unsigned char *outbuf, size_t outbuflen, + const unsigned char *inbuf, size_t inbuflen); /*-- cipher-ofb.c --*/ diff --git a/cipher/cipher.c b/cipher/cipher.c index 06ce1da..124700e 100644 --- a/cipher/cipher.c +++ b/cipher/cipher.c @@ -415,6 +415,7 @@ _gcry_cipher_open_internal (gcry_cipher_hd_t *handle, case GCRY_CIPHER_MODE_ECB: case GCRY_CIPHER_MODE_CBC: case GCRY_CIPHER_MODE_CFB: + case GCRY_CIPHER_MODE_CFB8: case GCRY_CIPHER_MODE_OFB: case GCRY_CIPHER_MODE_CTR: case GCRY_CIPHER_MODE_AESWRAP: @@ -902,6 +903,10 @@ cipher_encrypt (gcry_cipher_hd_t c, byte *outbuf, size_t outbuflen, rc = _gcry_cipher_cfb_encrypt (c, outbuf, outbuflen, inbuf, inbuflen); break; + case GCRY_CIPHER_MODE_CFB8: + rc = _gcry_cipher_cfb8_encrypt (c, outbuf, outbuflen, inbuf, inbuflen); + break; + case GCRY_CIPHER_MODE_OFB: rc = _gcry_cipher_ofb_encrypt (c, outbuf, outbuflen, inbuf, inbuflen); break; @@ -1029,6 +1034,10 @@ cipher_decrypt (gcry_cipher_hd_t c, byte *outbuf, size_t outbuflen, rc = _gcry_cipher_cfb_decrypt (c, outbuf, outbuflen, inbuf, inbuflen); break; + case GCRY_CIPHER_MODE_CFB8: + rc = _gcry_cipher_cfb8_decrypt (c, outbuf, outbuflen, inbuf, inbuflen); + break; + case GCRY_CIPHER_MODE_OFB: rc = _gcry_cipher_ofb_encrypt (c, outbuf, outbuflen, inbuf, inbuflen); break; diff --git a/tests/basic.c b/tests/basic.c index 6d086b5..1b61122 100644 --- a/tests/basic.c +++ b/tests/basic.c @@ -893,7 +893,104 @@ check_cfb_cipher (void) 16, "\x75\xa3\x85\x74\x1a\xb9\xce\xf8\x20\x31\x62\x3d\x55\xb1\xe4\x71" } } - } + }, + { GCRY_CIPHER_AES, 1, + "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c", + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f", + { { "\x6b", + 1, + "\x3b"}, + { "\xc1", + 1, + "\x79"}, + { "\xbe", + 1, + "\x42"}, + { "\xe2", + 1, + "\x4c"}, + } + }, + { GCRY_CIPHER_AES192, 1, + "\x8e\x73\xb0\xf7\xda\x0e\x64\x52\xc8\x10\xf3\x2b\x80\x90\x79\xe5" + "\x62\xf8\xea\xd2\x52\x2c\x6b\x7b", + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f", + { { "\x6b", + 1, + "\xcd"}, + { "\xc1", + 1, + "\xa2"}, + { "\xbe", + 1, + "\x52"}, + { "\xe2", + 1, + "\x1e"}, + } + }, + { GCRY_CIPHER_AES256, 1, + "\x60\x3d\xeb\x10\x15\xca\x71\xbe\x2b\x73\xae\xf0\x85\x7d\x77\x81" + "\x1f\x35\x2c\x07\x3b\x61\x08\xd7\x2d\x98\x10\xa3\x09\x14\xdf\xf4", + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f", + { { "\x6b", + 1, + "\xdc"}, + { "\xc1", + 1, + "\x1f"}, + { "\xbe", + 1, + "\x1a"}, + { "\xe2", + 1, + "\x85"}, + } + }, + { GCRY_CIPHER_AES, 1, + "\x3a\x6f\x91\x59\x26\x3f\xa6\xce\xf2\xa0\x75\xca\xfa\xce\x58\x17", + "\x0f\xc2\x36\x62\xb7\xdb\xf7\x38\x27\xf0\xc7\xde\x32\x1c\xa3\x6e", + { { "\x87\xef\xeb\x8d\x55\x9e\xd3\x36\x77\x28", + 10, + "\x8e\x9c\x50\x42\x56\x14\xd5\x40\xce\x11"}, + } + }, + { GCRY_CIPHER_AES192, 1, + "\x53\x7e\x7b\xf6\x61\xfd\x40\x24\xa0\x24\x61\x3f\x15\xb1\x36\x90" + "\xf7\xd0\xc8\x47\xc1\xe1\x89\x65", + "\x3a\x81\xf9\xd9\xd3\xc1\x55\xb0\xca\xad\x5d\x73\x34\x94\x76\xfc", + { { "\xd3\xd8\xb9\xb9\x84\xad\xc2\x42\x37\xee", + 10, + "\x38\x79\xfe\xa7\x2a\xc9\x99\x29\xe5\x3a"}, + } + }, + { GCRY_CIPHER_AES256, 1, + "\xeb\xbb\x45\x66\xb5\xe1\x82\xe0\xf0\x72\x46\x6b\x0b\x31\x1d\xf3" + "\x8f\x91\x75\xbc\x02\x13\xa5\x53\x0b\xce\x2e\xc4\xd7\x4f\x40\x0d", + "\x09\x56\xa4\x8e\x01\x00\x2c\x9e\x16\x37\x6d\x6e\x30\x8d\xba\xd1", + { { "\xb0\xfe\x25\xac\x8d\x3d\x28\xa2\xf4\x71", + 10, + "\x63\x8c\x68\x23\xe7\x25\x6f\xb5\x62\x6e"}, + } + }, + { GCRY_CIPHER_3DES, 1, + "\xe3\x34\x7a\x6b\x0b\xc1\x15\x2c\x64\x2a\x25\xcb\xd3\xbc\x31\xab" + "\xfb\xa1\x62\xa8\x1f\x19\x7c\x15", + "\xb7\x40\xcc\x21\xe9\x25\xe3\xc8", + { { "\xdb\xe9\x15\xfc\xb3\x3b\xca\x18\xef\x14", + 10, + "\xf4\x80\x1a\x8d\x03\x9d\xb4\xca\x8f\xf6"}, + } + }, + { GCRY_CIPHER_3DES, 1, + "\x7c\xa2\x89\x38\xba\x6b\xec\x1f\xfe\xc7\x8f\x7c\xd6\x97\x61\x94" + "\x7c\xa2\x89\x38\xba\x6b\xec\x1f", + "\x95\x38\x96\x58\x6e\x49\xd3\x8f", + { { "\x2e\xa9\x56\xd4\xa2\x11\xdb\x68\x59\xb7", + 10, + "\xf2\x0e\x53\x66\x74\xa6\x6f\xa7\x38\x05"}, + } + }, }; gcry_cipher_hd_t hde, hdd; unsigned char out[MAX_DATA_LEN]; @@ -6179,6 +6276,7 @@ check_ciphers (void) check_one_cipher (algos[i], GCRY_CIPHER_MODE_ECB, 0); check_one_cipher (algos[i], GCRY_CIPHER_MODE_CFB, 0); + check_one_cipher (algos[i], GCRY_CIPHER_MODE_CFB8, 0); check_one_cipher (algos[i], GCRY_CIPHER_MODE_OFB, 0); check_one_cipher (algos[i], GCRY_CIPHER_MODE_CBC, 0); check_one_cipher (algos[i], GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS); commit 80bd6195c794a7900791a88b943f371dc480cf07 Author: Jussi Kivilinna Date: Sat Feb 4 13:29:50 2017 +0200 Register DCO for Mathias L. Baumann -- Signed-off-by: Jussi Kivilinna diff --git a/AUTHORS b/AUTHORS index 25de16c..b80d43e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -168,6 +168,9 @@ Jussi Kivilinna Markus Teich 2014-10-08:20141008180509.GA2770 at trolle: +Mathias L. Baumann +2017-01-30:07c06d79-0828-b564-d604-fd16c7c86ebe at sociomantic.com: + Milan Broz 2014-01-13:52D44CC6.4050707 at gmail.com: ----------------------------------------------------------------------- Summary of changes: AUTHORS | 3 ++ cipher/cipher-cfb.c | 86 ++++++++++++++++++++++++++++++++++++++++ cipher/cipher-internal.h | 8 ++++ cipher/cipher.c | 9 +++++ tests/basic.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 205 insertions(+), 1 deletion(-) hooks/post-receive -- The GNU crypto library http://git.gnupg.org _______________________________________________ Gnupg-commits mailing list Gnupg-commits at gnupg.org http://lists.gnupg.org/mailman/listinfo/gnupg-commits From jussi.kivilinna at iki.fi Sat Feb 4 12:39:18 2017 From: jussi.kivilinna at iki.fi (Jussi Kivilinna) Date: Sat, 4 Feb 2017 13:39:18 +0200 Subject: [PATCH] Implement CFB with 8bit mode In-Reply-To: <6ff7a494-28aa-22be-7aa5-0c2e4efb4c16@sociomantic.com> References: <6ff7a494-28aa-22be-7aa5-0c2e4efb4c16@sociomantic.com> Message-ID: <5addff93-c848-a2f6-1a88-cf03621104ff@iki.fi> Hello, On 30.01.2017 15:47, Mathias L. Baumann wrote: > * cipher/cipher-cfb.c: add 8bit variants of decrypt/encrypt functions > * tests/basic.c: add tests for cfb8 with AES and 3DES > * adjust code flow to work with constant GCRY_CIPHER_MODE_CFB8 > > Signed-off-by: Mathias L. Baumann > Thanks, I committed patch to master branch with minor changes. -Jussi -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 273 bytes Desc: OpenPGP digital signature URL: From cvs at cvs.gnupg.org Tue Feb 7 10:30:24 2017 From: cvs at cvs.gnupg.org (by Justus Winter) Date: Tue, 07 Feb 2017 10:30:24 +0100 Subject: [git] GCRYPT - branch, master, updated. libgcrypt-1.7.3-74-g75d91ff Message-ID: This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "The GNU crypto library". The branch, master has been updated via 75d91ffeaf83098ade325bb3b6b2c8a76eb1f6a6 (commit) from d1ee9a660571ce4a998c9ab2299d4f2419f99127 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 75d91ffeaf83098ade325bb3b6b2c8a76eb1f6a6 Author: Justus Winter Date: Tue Feb 7 10:20:58 2017 +0100 Fix building with a pre C99 compiler. * cipher/cipher-cfb.c (_gcry_cipher_cfb8_encrypt): Move the declaration of 'i' out of the loop. (_gcry_cipher_cfb8_decrypt): Likewise. -- Fixes build on OpenBSD. Fixes-commit: d1ee9a660571ce4a998c9ab2299d4f2419f99127 Signed-off-by: Justus Winter diff --git a/cipher/cipher-cfb.c b/cipher/cipher-cfb.c index cca5c1f..c888e70 100644 --- a/cipher/cipher-cfb.c +++ b/cipher/cipher-cfb.c @@ -251,6 +251,8 @@ _gcry_cipher_cfb8_encrypt (gcry_cipher_hd_t c, while ( inbuflen > 0) { + int i; + /* Encrypt the IV. */ nburn = enc_fn ( &c->context.c, c->lastiv, c->u_iv.iv ); burn = nburn > burn ? nburn : burn; @@ -258,7 +260,7 @@ _gcry_cipher_cfb8_encrypt (gcry_cipher_hd_t c, outbuf[0] = c->lastiv[0] ^ inbuf[0]; /* Bitshift iv by 8 bit to the left */ - for (int i = 0; i < blocksize-1; i++) + for (i = 0; i < blocksize-1; i++) c->u_iv.iv[i] = c->u_iv.iv[i+1]; /* append cipher text to iv */ @@ -293,6 +295,8 @@ _gcry_cipher_cfb8_decrypt (gcry_cipher_hd_t c, while (inbuflen > 0) { + int i; + /* Encrypt the IV. */ nburn = enc_fn ( &c->context.c, c->lastiv, c->u_iv.iv ); burn = nburn > burn ? nburn : burn; @@ -304,7 +308,7 @@ _gcry_cipher_cfb8_decrypt (gcry_cipher_hd_t c, outbuf[0] = inbuf[0] ^ c->lastiv[0]; /* Bitshift iv by 8 bit to the left */ - for (int i = 0; i < blocksize-1; i++) + for (i = 0; i < blocksize-1; i++) c->u_iv.iv[i] = c->u_iv.iv[i+1]; c->u_iv.iv[blocksize-1] = appendee; ----------------------------------------------------------------------- Summary of changes: cipher/cipher-cfb.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) hooks/post-receive -- The GNU crypto library http://git.gnupg.org _______________________________________________ Gnupg-commits mailing list Gnupg-commits at gnupg.org http://lists.gnupg.org/mailman/listinfo/gnupg-commits From marcio.barbado at bdslabs.com.br Wed Feb 8 03:34:31 2017 From: marcio.barbado at bdslabs.com.br (Marcio Barbado, Jr.) Date: Wed, 08 Feb 2017 00:34:31 -0200 Subject: Computer Science bachelor degree thesis on Libgcrypt In-Reply-To: <5d8f5fe810e2cf72b5ae1f9f546e2e2f@bdslabs.com.br> References: <5d8f5fe810e2cf72b5ae1f9f546e2e2f@bdslabs.com.br> Message-ID: Hey. While we're a tad confused with your silence, our excitement in studying GnuPG remains unscathed (e.g: we've been trying to identify and understand the main differences between OpenPGP and X.509). This feels like approaching a kung fu master in the very top of a mountain when he's meditating. He listens to the eager novices' claims but doesn't even open his eyes. Well, we've been browsing GnuPG's bug tracker, searching for minor bugs and features, but except for Issue2056, which involves an OS we're not really able to work with, we could not find Libgcrypt stuff. Other than the mentioned ticket, performing simple queries with "gcrypt" and "libgcrypt" (they don't return equivalent results) has provided us with resolved issues only. Also, we did read the TODO file of Libgcrypt, where we found apparently interesting stuff to deal with. But they're not detailed like the Roundup items so we're kinda lost. Surely we know our work may not be useful for you after all (though we dream of the opposite) but some basic guidance would be fairly appreciated. For example, should we post on another mailing list or is this the proper one for algorithmic code development? Regards, Em 20.12.2016 12:57, Marcio Barbado, Jr. escreveu: > Hi, > I'm a computer science student from Brazil, and a long time user of > GnuPG. > In 2017 -- last year for completion of my bachelor degree, my group > is supposed to start working on a thesis, which should include > algorithmic code development. > After some months considering what we could do, "trying to help the > GnuPG community" emerged as a worthy idea, so we're now reading the > "The Ligbgcrypt Reference Manual" document in order to understand it > better. > Also, we're questioning how feasible that idea is for us to > accomplish. And from such considerations, we first thought of > analyzing eventual Libgcrypt bug tracking entries, or something like > that. > But even before that, we would like to know what you Libgcrypt people > think of all this. > Regards, and happy birthday, GnuPG! > > Marcio Barbado, Jr. > _______________________________________________ > Gcrypt-devel mailing list > Gcrypt-devel at gnupg.org > http://lists.gnupg.org/mailman/listinfo/gcrypt-devel Marcio Barbado, Jr. From gniibe at fsij.org Wed Feb 8 09:43:02 2017 From: gniibe at fsij.org (NIIBE Yutaka) Date: Wed, 08 Feb 2017 17:43:02 +0900 Subject: Computer Science bachelor degree thesis on Libgcrypt In-Reply-To: References: <5d8f5fe810e2cf72b5ae1f9f546e2e2f@bdslabs.com.br> Message-ID: <878tphysx5.fsf@fsij.org> Hello, Marcio, Well, I learned QiGong from the Chinese master when I was a student in Tokyo. :-) No, I am not a master (QiGong or libgcrypt). But, I do some development of libgcrypt, and maintain some code. "Marcio Barbado, Jr." writes: > For example, should we post on another mailing list or is this the > proper one for algorithmic code development? Yes, here is the place for technical discussion. I don't know about "algorithmic code development" you addressed, though. You can find what's going on in the development by reading our archives. The Gcrypt-devel Archives: https://lists.gnupg.org/pipermail/gcrypt-devel/ Our source code repository is here: The GNU crypto library: https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git Please get the source code by git. The command line invocation is: $ git clone git://git.gnupg.org/libgcrypt.git And then, you can examine the history of our development. -- From peter at lekensteyn.nl Wed Feb 8 14:55:42 2017 From: peter at lekensteyn.nl (Peter Wu) Date: Wed, 8 Feb 2017 14:55:42 +0100 Subject: About the manual (gcrypt.texi) Message-ID: <20170208135542.GC22838@al> Hi, While reading the manual I noticed this text: > Libgcrypt is developed using a Subversion3 repository. This should probably be changed to Git. > Although all released versions are tagged in this repository, they > should not be used to build production versions of Libgcrypt. Instead > released tarballs should be used. This part I do not really understand, why would a git tag where you manually run autogen.sh be different? Have there been issues in the past? -- Kind regards, Peter Wu https://lekensteyn.nl From marcio.barbado at bdslabs.com.br Wed Feb 8 17:12:25 2017 From: marcio.barbado at bdslabs.com.br (Marcio Barbado, Jr.) Date: Wed, 08 Feb 2017 14:12:25 -0200 Subject: Computer Science bachelor degree thesis on Libgcrypt In-Reply-To: <878tphysx5.fsf@fsij.org> References: <5d8f5fe810e2cf72b5ae1f9f546e2e2f@bdslabs.com.br> <878tphysx5.fsf@fsij.org> Message-ID: <614414d8e848ed9f466ed921957ec9c4@bdslabs.com.br> Hi, NIIBE. Thank you for replying back. Sorry for wrong technical terminology. At least my kung fu feeling was quite close. We'll be taking a look in all that. Regards, Em 08.02.2017 06:43, NIIBE Yutaka escreveu: > Hello, Marcio, > > Well, I learned QiGong from the Chinese master when I was a student in > Tokyo. :-) No, I am not a master (QiGong or libgcrypt). But, I do > some > development of libgcrypt, and maintain some code. > > "Marcio Barbado, Jr." writes: >> For example, should we post on another mailing list or is this the >> proper one for algorithmic code development? > > Yes, here is the place for technical discussion. I don't know about > "algorithmic code development" you addressed, though. > > You can find what's going on in the development by reading our > archives. > > The Gcrypt-devel Archives: > https://lists.gnupg.org/pipermail/gcrypt-devel/ > > Our source code repository is here: > > The GNU crypto library: > https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git > > Please get the source code by git. The command line invocation is: > > $ git clone git://git.gnupg.org/libgcrypt.git > > And then, you can examine the history of our development. > -- Marcio Barbado, Jr. From gniibe at fsij.org Thu Feb 9 08:05:03 2017 From: gniibe at fsij.org (NIIBE Yutaka) Date: Thu, 09 Feb 2017 16:05:03 +0900 Subject: About the manual (gcrypt.texi) In-Reply-To: <20170208135542.GC22838@al> References: <20170208135542.GC22838@al> Message-ID: <871sv7q1y8.fsf@fsij.org> Peter Wu wrote: > > Libgcrypt is developed using a Subversion3 repository. > > This should probably be changed to Git. Yes. Good catch. > This part I do not really understand, why would a git tag where you > manually run autogen.sh be different? Have there been issues in the > past? I think that it means the dependency to autotools. Not all user have same version of autoconf/automake on their systems. It is common problem (not only in the past, but still is), different version of autoconf/automake causes an issue. -- From wk at gnupg.org Thu Feb 9 08:06:57 2017 From: wk at gnupg.org (Werner Koch) Date: Thu, 09 Feb 2017 08:06:57 +0100 Subject: About the manual (gcrypt.texi) In-Reply-To: <20170208135542.GC22838@al> (Peter Wu's message of "Wed, 8 Feb 2017 14:55:42 +0100") References: <20170208135542.GC22838@al> Message-ID: <87inojg7vy.fsf@wheatstone.g10code.de> On Wed, 8 Feb 2017 14:55, peter at lekensteyn.nl said: > This should probably be changed to Git. Thanks for reporting, > This part I do not really understand, why would a git tag where you > manually run autogen.sh be different? Have there been issues in the It is sometimes not possible to replicate problems when software has been build from git. For example, different versions of autotools are used, files may be in the repo which are not distributed, and there won't be a well defined version number. Even with tarballs we sometimes run into problems because some Linux distributions replace parts of the build environment (i.e. running autoreconf). In general this is not a problem as long as we known that for example the Debian version 1.7.5 is used. Salam-Shalom, Werner -- Die Gedanken sind frei. Ausnahmen regelt ein Bundesgesetz. -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 227 bytes Desc: not available URL: From mathias.baumann at sociomantic.com Tue Feb 14 16:19:32 2017 From: mathias.baumann at sociomantic.com (Mathias L. Baumann) Date: Tue, 14 Feb 2017 16:19:32 +0100 Subject: Date of the next release Message-ID: <4bbe1d95-c30b-cc3e-1934-782001b66eb4@sociomantic.com> Out of curiousity, when is the next release planned? Would be useful for us to know in regards to the new CFB-8 code. cheers, --Mathias From wk at gnupg.org Mon Feb 20 08:53:12 2017 From: wk at gnupg.org (Werner Koch) Date: Mon, 20 Feb 2017 08:53:12 +0100 Subject: Date of the next release In-Reply-To: <4bbe1d95-c30b-cc3e-1934-782001b66eb4@sociomantic.com> (Mathias L. Baumann's message of "Tue, 14 Feb 2017 16:19:32 +0100") References: <4bbe1d95-c30b-cc3e-1934-782001b66eb4@sociomantic.com> Message-ID: <87r32tnvrr.fsf@wheatstone.g10code.de> On Tue, 14 Feb 2017 16:19, mathias.baumann at sociomantic.com said: > Out of curiousity, when is the next release planned? > Would be useful for us to know in regards to the new CFB-8 code. I need to add another entropy source and then we should do an 1.8 release. We have a project milestone by the end of March and thus a release should happen before that. Shalom-Salam, Werner -- Die Gedanken sind frei. Ausnahmen regelt ein Bundesgesetz. -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 227 bytes Desc: not available URL: From vjiipinge at gmail.com Tue Feb 21 08:53:02 2017 From: vjiipinge at gmail.com (vjiipinge at gmail.com) Date: Tue, 21 Feb 2017 15:53:02 +0800 Subject: [PATCH] Add NTRUEncrypt public key encryption algorithm Message-ID: <58abf1dd.8533630a.f7c3c.acd6@mx.google.com> Dear Sir/Madam I would like to run a simple NTRUENCRYPT java code. How do I import NTRU package? Thank you, James Sent from Mail for Windows 10 -------------- next part -------------- An HTML attachment was scrubbed... URL: From opalraava at riseup.net Tue Feb 21 16:34:45 2017 From: opalraava at riseup.net (Opal Raava) Date: Tue, 21 Feb 2017 16:34:45 +0100 Subject: [PATCH] Add NTRUEncrypt public key encryption algorithm In-Reply-To: <58abf1dd.8533630a.f7c3c.acd6@mx.google.com> References: <58abf1dd.8533630a.f7c3c.acd6@mx.google.com> Message-ID: <4b73cb25-e6ee-95e0-7002-24a58d345a72@riseup.net> On 02/21/2017 08:53 AM, vjiipinge at gmail.com wrote: > Dear Sir/Madam > > > > I would like to run a simple NTRUENCRYPT java code. How do I import NTRU > package? > > > > Thank you, > > > > James > > > > > > > > Sent from Mail for > Windows 10 > > > > > > _______________________________________________ > Gcrypt-devel mailing list > Gcrypt-devel at gnupg.org > http://lists.gnupg.org/mailman/listinfo/gcrypt-devel > Hi James, We decided back in 2015 not to support NTRUEncrypt mainly because of licensing issues. So gcrypt doesn't have it. The library has, as far as I'm aware, no Java bindings. It is written in "C" so if you want to use the library in Java, You'll have to provide the glue code yourself, which is no small task, but probably doable if you only need a small part of the API. I hope this answers your question, -Opal From zzhang at onboardsecurity.com Tue Feb 21 15:42:25 2017 From: zzhang at onboardsecurity.com (Zhenfei Zhang) Date: Tue, 21 Feb 2017 09:42:25 -0500 Subject: [PATCH] Add NTRUEncrypt public key encryption algorithm In-Reply-To: <58abf1dd.8533630a.f7c3c.acd6@mx.google.com> References: <58abf1dd.8533630a.f7c3c.acd6@mx.google.com> Message-ID: Hi James, I believe that libgcrypt does not support NTRU. However, we have build a wrap that allows you to use libntruencrypt. See https://github.com/wwhyte-si/libgcrypt-ntru Cheers, Zhenfei On Tue, Feb 21, 2017 at 2:53 AM, wrote: > Dear Sir/Madam > > > > I would like to run a simple NTRUENCRYPT java code. How do I import NTRU > package? > > > > Thank you, > > > > James > > > > > > > > Sent from Mail for > Windows 10 > > > > _______________________________________________ > Gcrypt-devel mailing list > Gcrypt-devel at gnupg.org > http://lists.gnupg.org/mailman/listinfo/gcrypt-devel > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From jussi.kivilinna at iki.fi Fri Feb 24 10:23:09 2017 From: jussi.kivilinna at iki.fi (Jussi Kivilinna) Date: Fri, 24 Feb 2017 11:23:09 +0200 Subject: building libgcrypt on ARM64/FreeBSD In-Reply-To: <20170224065131.kat6bbaraxmwhuym@vein> References: <20170224065131.kat6bbaraxmwhuym@vein> Message-ID: <6d5ebb6b-79b8-93f3-7fb0-661154e69853@iki.fi> Hello, Please, open new issue for this at the bug tracker: https://bugs.gnupg.org/ -Jussi On 24.02.2017 08:51, Kirill Ponomarev wrote: > Hello Jussi, > > as you're developer of libgrypt, could you please take a look at > build log of libgrcypt 1.7.6 on ARM64 CPU on FreeBSD and give me a > hint what is wrong and how I can fix it, thanks: > > http://pkg.krion.cc/data/110arm64-default/2017-02-23_22h42m03s/logs/errors/libgcrypt-1.7.6.log > > K. > From kp at krion.cc Fri Feb 24 12:18:07 2017 From: kp at krion.cc (Kirill Ponomarev) Date: Fri, 24 Feb 2017 12:18:07 +0100 Subject: building libgcrypt on ARM64/FreeBSD In-Reply-To: <6d5ebb6b-79b8-93f3-7fb0-661154e69853@iki.fi> References: <20170224065131.kat6bbaraxmwhuym@vein> <6d5ebb6b-79b8-93f3-7fb0-661154e69853@iki.fi> Message-ID: <20170224111807.ouwsbsvyd6o3aj7q@vein> On 02/24, Jussi Kivilinna wrote: > Hello, > > Please, open new issue for this at the bug tracker: https://bugs.gnupg.org/ Thanks, issue submitted with ID: 2975 K. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 488 bytes Desc: not available URL: From Peter.LUNDBERG at 3ds.com Fri Feb 24 16:39:16 2017 From: Peter.LUNDBERG at 3ds.com (LUNDBERG Peter) Date: Fri, 24 Feb 2017 15:39:16 +0000 Subject: Libgcrypt: Import and export of keys Message-ID: <327E5DBE7F70B1499C26DD1C125C07E50105BB493D@EU-DCC-MBX11.dsone.3ds.com> Hello, I'm new to Libgcrypt and when browsing the reference manual I cannot see how to perform the following scenarios regarding public key encryption: 1. Given a private/public key in a byte array, how to import them into an S-Expression? 2. Given an S-expression with a private/public key, how to export them into a byte array? Best Regards, Peter LUNDBERG CATIA Systems/Dymola R&D Development Manager Office: +46 4 6270 6708 peter.lundberg at 3ds.com [3DS Logo] 3DS.COM/CATIA Dassault Systemes AB | IDEON Gateway Scheelev?gen 27 | | Sweden This email and any attachments are intended solely for the use of the individual or entity to whom it is addressed and may be confidential and/or privileged. If you are not one of the named recipients or have received this email in error, (i) you should not read, disclose, or copy it, (ii) please notify sender of your receipt by reply email and delete this email and all attachments, (iii) Dassault Systemes does not accept or assume any liability or responsibility for any use of or reliance on this email. For other languages, go to http://www.3ds.com/terms/email-disclaimer -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: image001.jpg Type: image/jpeg Size: 898 bytes Desc: image001.jpg URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: image002.png Type: image/png Size: 7915 bytes Desc: image002.png URL: From jussi.kivilinna at iki.fi Sun Feb 26 13:55:59 2017 From: jussi.kivilinna at iki.fi (Jussi Kivilinna) Date: Sun, 26 Feb 2017 14:55:59 +0200 Subject: [PATCH] Add BLAKE2b and BLAKE2s hash algorithms (RFC 7693) Message-ID: <148811375931.1506.8786646360741989573.stgit@localhost6.localdomain6> * cipher/blake2.c: New. * cipher/md.c (digest_list, prepare_macpads): Add BLAKE2. (md_setkey): New. (_gcry_md_setkey): Call 'md_setkey' for non-HMAC md. * configure.ac: Add BLAKE2 digest. * doc/gcrypt.texi: Add BLAKE2. * src/cipher.h (_gcry_blake2_init_with_key) (_gcry_digest_spec_blake2b_512, _gcry_digest_spec_blake2b_384) (_gcry_digest_spec_blake2b_256, _gcry_digest_spec_blake2b_160) (_gcry_digest_spec_blake2s_256, _gcry_digest_spec_blake2s_224) (_gcry_digest_spec_blake2s_160, _gcry_digest_spec_blake2s_128): New. * src/gcrypt.h.in (GCRY_MD_BLAKE2B_512, GCRY_MD_BLAKE2B_384) (GCRY_MD_BLAKE2B_256, GCRY_MD_BLAKE2B_160, GCRY_MD_BLAKE2S_256) (GCRY_MD_BLAKE2S_224, GCRY_MD_BLAKE2S_160, GCRY_MD_BLAKE2S_128): New. * tests/basic.c (check_one_md): Add testing for keyed hashes. (check_digests): Add BLAKE2 test vectors; Add testing for keyed hashes. * tests/blake2b.h: New. * tests/blake2s.h: New. -- Signed-off-by: Jussi Kivilinna --- cipher/blake2.c | 870 +++++++++++++++++++++++++++++++ cipher/md.c | 99 +++- configure.ac | 10 doc/gcrypt.texi | 43 +- src/cipher.h | 12 src/gcrypt.h.in | 10 tests/basic.c | 323 +++++++++++- tests/blake2b.h | 1539 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/blake2s.h | 1027 +++++++++++++++++++++++++++++++++++++ 9 files changed, 3916 insertions(+), 17 deletions(-) create mode 100644 cipher/blake2.c create mode 100644 tests/blake2b.h create mode 100644 tests/blake2s.h diff --git a/cipher/blake2.c b/cipher/blake2.c new file mode 100644 index 0000000..6582ffe --- /dev/null +++ b/cipher/blake2.c @@ -0,0 +1,870 @@ +/* blake2.c - BLAKE2b and BLAKE2s hash functions (RFC 7693) + * Copyright (C) 2017 Jussi Kivilinna + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +/* The code is based on public-domain/CC0 BLAKE2 reference implementation + * by Samual Neves, at https://github.com/BLAKE2/BLAKE2/tree/master/ref + * Copyright 2012, Samuel Neves + */ + +#include +#include +#include "g10lib.h" +#include "bithelp.h" +#include "bufhelp.h" +#include "cipher.h" +#include "hash-common.h" + +#define BLAKE2B_BLOCKBYTES 128 +#define BLAKE2B_OUTBYTES 64 +#define BLAKE2B_KEYBYTES 64 + +#define BLAKE2S_BLOCKBYTES 64 +#define BLAKE2S_OUTBYTES 32 +#define BLAKE2S_KEYBYTES 32 + +typedef struct +{ + u64 h[8]; + u64 t[2]; + u64 f[2]; +} BLAKE2B_STATE; + +struct blake2b_param_s +{ + byte digest_length; + byte key_length; + byte fanout; + byte depth; + byte leaf_length[4]; + byte node_offset[4]; + byte xof_length[4]; + byte node_depth; + byte inner_length; + byte reserved[14]; + byte salt[16]; + byte personal[16]; +}; + +typedef struct BLAKE2B_CONTEXT_S +{ + BLAKE2B_STATE state; + byte buf[BLAKE2B_BLOCKBYTES]; + size_t buflen; + size_t outlen; +} BLAKE2B_CONTEXT; + +typedef struct +{ + u32 h[8]; + u32 t[2]; + u32 f[2]; +} BLAKE2S_STATE; + +struct blake2s_param_s +{ + byte digest_length; + byte key_length; + byte fanout; + byte depth; + byte leaf_length[4]; + byte node_offset[4]; + byte xof_length[2]; + byte node_depth; + byte inner_length; + /* byte reserved[0]; */ + byte salt[8]; + byte personal[8]; +}; + +typedef struct BLAKE2S_CONTEXT_S +{ + BLAKE2S_STATE state; + byte buf[BLAKE2S_BLOCKBYTES]; + size_t buflen; + size_t outlen; +} BLAKE2S_CONTEXT; + +typedef unsigned int (*blake2_transform_t)(void *S, const void *inblk, + size_t nblks); + + +static const u64 blake2b_IV[8] = +{ + U64_C(0x6a09e667f3bcc908), U64_C(0xbb67ae8584caa73b), + U64_C(0x3c6ef372fe94f82b), U64_C(0xa54ff53a5f1d36f1), + U64_C(0x510e527fade682d1), U64_C(0x9b05688c2b3e6c1f), + U64_C(0x1f83d9abfb41bd6b), U64_C(0x5be0cd19137e2179) +}; + +static const u32 blake2s_IV[8] = +{ + 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, + 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL +}; + +static byte zero_block[BLAKE2B_BLOCKBYTES] = { 0, }; + + +static void blake2_write(void *S, const void *inbuf, size_t inlen, + byte *tmpbuf, size_t *tmpbuflen, size_t blkbytes, + blake2_transform_t transform_fn) +{ + const byte* in = inbuf; + unsigned int burn = 0; + + if (inlen > 0) + { + size_t left = *tmpbuflen; + size_t fill = blkbytes - left; + size_t nblks; + + if (inlen > fill) + { + if (fill > 0) + buf_cpy (tmpbuf + left, in, fill); /* Fill buffer */ + left = 0; + + burn = transform_fn (S, tmpbuf, 1); /* Increment counter + Compress */ + + in += fill; + inlen -= fill; + + nblks = inlen / blkbytes - !(inlen % blkbytes); + if (nblks) + { + burn = transform_fn(S, in, nblks); + in += blkbytes * nblks; + inlen -= blkbytes * nblks; + } + } + + gcry_assert (inlen > 0); + + buf_cpy (tmpbuf + left, in, inlen); + *tmpbuflen = left + inlen; + } + + if (burn) + _gcry_burn_stack (burn); + + return; +} + + +static inline void blake2b_set_lastblock(BLAKE2B_STATE *S) +{ + S->f[0] = U64_C(0xffffffffffffffff); +} + +static inline int blake2b_is_lastblock(const BLAKE2B_STATE *S) +{ + return S->f[0] != 0; +} + +static inline void blake2b_increment_counter(BLAKE2B_STATE *S, const int inc) +{ + S->t[0] += (u64)inc; + S->t[1] += (S->t[0] < (u64)inc) - (inc < 0); +} + +static inline u64 rotr64(u64 x, u64 n) +{ + return ((x >> (n & 63)) | (x << ((64 - n) & 63))); +} + +static unsigned int blake2b_transform(void *vS, const void *inblks, + size_t nblks) +{ + static const byte blake2b_sigma[12][16] = + { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 }, + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 }, + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 }, + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 }, + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 }, + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 }, + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 }, + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 }, + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 }, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } + }; + BLAKE2B_STATE *S = vS; + const byte* in = inblks; + u64 m[16]; + u64 v[16]; + + while (nblks--) + { + /* Increment counter */ + blake2b_increment_counter (S, BLAKE2B_BLOCKBYTES); + + /* Compress */ + m[0] = buf_get_le64 (in + 0 * sizeof(m[0])); + m[1] = buf_get_le64 (in + 1 * sizeof(m[0])); + m[2] = buf_get_le64 (in + 2 * sizeof(m[0])); + m[3] = buf_get_le64 (in + 3 * sizeof(m[0])); + m[4] = buf_get_le64 (in + 4 * sizeof(m[0])); + m[5] = buf_get_le64 (in + 5 * sizeof(m[0])); + m[6] = buf_get_le64 (in + 6 * sizeof(m[0])); + m[7] = buf_get_le64 (in + 7 * sizeof(m[0])); + m[8] = buf_get_le64 (in + 8 * sizeof(m[0])); + m[9] = buf_get_le64 (in + 9 * sizeof(m[0])); + m[10] = buf_get_le64 (in + 10 * sizeof(m[0])); + m[11] = buf_get_le64 (in + 11 * sizeof(m[0])); + m[12] = buf_get_le64 (in + 12 * sizeof(m[0])); + m[13] = buf_get_le64 (in + 13 * sizeof(m[0])); + m[14] = buf_get_le64 (in + 14 * sizeof(m[0])); + m[15] = buf_get_le64 (in + 15 * sizeof(m[0])); + + v[ 0] = S->h[0]; + v[ 1] = S->h[1]; + v[ 2] = S->h[2]; + v[ 3] = S->h[3]; + v[ 4] = S->h[4]; + v[ 5] = S->h[5]; + v[ 6] = S->h[6]; + v[ 7] = S->h[7]; + v[ 8] = blake2b_IV[0]; + v[ 9] = blake2b_IV[1]; + v[10] = blake2b_IV[2]; + v[11] = blake2b_IV[3]; + v[12] = blake2b_IV[4] ^ S->t[0]; + v[13] = blake2b_IV[5] ^ S->t[1]; + v[14] = blake2b_IV[6] ^ S->f[0]; + v[15] = blake2b_IV[7] ^ S->f[1]; + +#define G(r,i,a,b,c,d) \ + do { \ + a = a + b + m[blake2b_sigma[r][2*i+0]]; \ + d = rotr64(d ^ a, 32); \ + c = c + d; \ + b = rotr64(b ^ c, 24); \ + a = a + b + m[blake2b_sigma[r][2*i+1]]; \ + d = rotr64(d ^ a, 16); \ + c = c + d; \ + b = rotr64(b ^ c, 63); \ + } while(0) + +#define ROUND(r) \ + do { \ + G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \ + G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \ + G(r,2,v[ 2],v[ 6],v[10],v[14]); \ + G(r,3,v[ 3],v[ 7],v[11],v[15]); \ + G(r,4,v[ 0],v[ 5],v[10],v[15]); \ + G(r,5,v[ 1],v[ 6],v[11],v[12]); \ + G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \ + G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \ + } while(0) + + ROUND(0); + ROUND(1); + ROUND(2); + ROUND(3); + ROUND(4); + ROUND(5); + ROUND(6); + ROUND(7); + ROUND(8); + ROUND(9); + ROUND(10); + ROUND(11); + +#undef G +#undef ROUND + + S->h[0] = S->h[0] ^ v[0] ^ v[0 + 8]; + S->h[1] = S->h[1] ^ v[1] ^ v[1 + 8]; + S->h[2] = S->h[2] ^ v[2] ^ v[2 + 8]; + S->h[3] = S->h[3] ^ v[3] ^ v[3 + 8]; + S->h[4] = S->h[4] ^ v[4] ^ v[4 + 8]; + S->h[5] = S->h[5] ^ v[5] ^ v[5 + 8]; + S->h[6] = S->h[6] ^ v[6] ^ v[6 + 8]; + S->h[7] = S->h[7] ^ v[7] ^ v[7 + 8]; + + in += BLAKE2B_BLOCKBYTES; + } + + return sizeof(void *) * 4 + sizeof(u64) * 16 * 2; +} + +static void blake2b_final(void *ctx) +{ + BLAKE2B_CONTEXT *c = ctx; + BLAKE2B_STATE *S = &c->state; + unsigned int burn; + size_t i; + + gcry_assert (sizeof(c->buf) >= c->outlen); + if (blake2b_is_lastblock(S)) + return; + + if (c->buflen < BLAKE2B_BLOCKBYTES) + memset (c->buf + c->buflen, 0, BLAKE2B_BLOCKBYTES - c->buflen); /* Padding */ + blake2b_set_lastblock (S); + blake2b_increment_counter (S, (int)c->buflen - BLAKE2B_BLOCKBYTES); + burn = blake2b_transform (S, c->buf, 1); + + /* Output full hash to buffer */ + for (i = 0; i < 8; ++i) + buf_put_le64 (c->buf + sizeof(S->h[i]) * i, S->h[i]); + + /* Zero out extra buffer bytes. */ + if (c->outlen < sizeof(c->buf)) + memset (c->buf + c->outlen, 0, sizeof(c->buf) - c->outlen); + + if (burn) + _gcry_burn_stack (burn); +} + +static byte *blake2b_read(void *ctx) +{ + BLAKE2B_CONTEXT *c = ctx; + return c->buf; +} + +static void blake2b_write(void *ctx, const void *inbuf, size_t inlen) +{ + BLAKE2B_CONTEXT *c = ctx; + BLAKE2B_STATE *S = &c->state; + blake2_write(S, inbuf, inlen, c->buf, &c->buflen, BLAKE2B_BLOCKBYTES, + blake2b_transform); +} + +static inline void blake2b_init_param(BLAKE2B_STATE *S, + const struct blake2b_param_s *P) +{ + const byte *p = (const byte *)P; + size_t i; + + /* init xors IV with input parameter block */ + + /* IV XOR ParamBlock */ + for (i = 0; i < 8; ++i) + S->h[i] = blake2b_IV[i] ^ buf_get_le64(p + sizeof(S->h[i]) * i); +} + +static inline gcry_err_code_t blake2b_init(BLAKE2B_STATE *S, size_t outlen, + const byte *key, size_t keylen) +{ + struct blake2b_param_s P[1] = { { 0, } }; + + if (!outlen || outlen > BLAKE2B_OUTBYTES) + return GPG_ERR_INV_ARG; + if (sizeof(P[0]) != sizeof(u64) * 8) + return GPG_ERR_INTERNAL; + if (keylen && (!key || keylen > BLAKE2B_KEYBYTES)) + return GPG_ERR_INV_KEYLEN; + + P->digest_length = outlen; + P->key_length = keylen; + P->fanout = 1; + P->depth = 1; + + blake2b_init_param (S, P); + wipememory (P, sizeof(P)); + + if (key) + { + blake2b_write (S, key, keylen); + blake2b_write (S, zero_block, BLAKE2B_BLOCKBYTES - keylen); + } + + return 0; +} + +static gcry_err_code_t blake2b_init_ctx(void *ctx, unsigned int flags, + const byte *key, size_t keylen, + unsigned int dbits) +{ + BLAKE2B_CONTEXT *c = ctx; + + (void)flags; + + memset (c, 0, sizeof (*c)); + + c->outlen = dbits / 8; + c->buflen = 0; + return blake2b_init(&c->state, c->outlen, key, keylen); +} + +static inline void blake2s_set_lastblock(BLAKE2S_STATE *S) +{ + S->f[0] = 0xFFFFFFFFUL; +} + +static inline int blake2s_is_lastblock(BLAKE2S_STATE *S) +{ + return S->f[0] != 0; +} + +static inline void blake2s_increment_counter(BLAKE2S_STATE *S, const int inc) +{ + S->t[0] += (u32)inc; + S->t[1] += (S->t[0] < (u32)inc) - (inc < 0); +} + +static unsigned int blake2s_transform(void *vS, const void *inblks, + size_t nblks) +{ + static const byte blake2s_sigma[10][16] = + { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 }, + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 }, + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 }, + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 }, + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 }, + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 }, + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 }, + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 }, + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 }, + }; + BLAKE2S_STATE *S = vS; + unsigned int burn = 0; + const byte* in = inblks; + u32 m[16]; + u32 v[16]; + + while (nblks--) + { + /* Increment counter */ + blake2s_increment_counter (S, BLAKE2S_BLOCKBYTES); + + /* Compress */ + m[0] = buf_get_le32 (in + 0 * sizeof(m[0])); + m[1] = buf_get_le32 (in + 1 * sizeof(m[0])); + m[2] = buf_get_le32 (in + 2 * sizeof(m[0])); + m[3] = buf_get_le32 (in + 3 * sizeof(m[0])); + m[4] = buf_get_le32 (in + 4 * sizeof(m[0])); + m[5] = buf_get_le32 (in + 5 * sizeof(m[0])); + m[6] = buf_get_le32 (in + 6 * sizeof(m[0])); + m[7] = buf_get_le32 (in + 7 * sizeof(m[0])); + m[8] = buf_get_le32 (in + 8 * sizeof(m[0])); + m[9] = buf_get_le32 (in + 9 * sizeof(m[0])); + m[10] = buf_get_le32 (in + 10 * sizeof(m[0])); + m[11] = buf_get_le32 (in + 11 * sizeof(m[0])); + m[12] = buf_get_le32 (in + 12 * sizeof(m[0])); + m[13] = buf_get_le32 (in + 13 * sizeof(m[0])); + m[14] = buf_get_le32 (in + 14 * sizeof(m[0])); + m[15] = buf_get_le32 (in + 15 * sizeof(m[0])); + + v[ 0] = S->h[0]; + v[ 1] = S->h[1]; + v[ 2] = S->h[2]; + v[ 3] = S->h[3]; + v[ 4] = S->h[4]; + v[ 5] = S->h[5]; + v[ 6] = S->h[6]; + v[ 7] = S->h[7]; + v[ 8] = blake2s_IV[0]; + v[ 9] = blake2s_IV[1]; + v[10] = blake2s_IV[2]; + v[11] = blake2s_IV[3]; + v[12] = S->t[0] ^ blake2s_IV[4]; + v[13] = S->t[1] ^ blake2s_IV[5]; + v[14] = S->f[0] ^ blake2s_IV[6]; + v[15] = S->f[1] ^ blake2s_IV[7]; + +#define G(r,i,a,b,c,d) \ + do { \ + a = a + b + m[blake2s_sigma[r][2*i+0]]; \ + d = ror(d ^ a, 16); \ + c = c + d; \ + b = ror(b ^ c, 12); \ + a = a + b + m[blake2s_sigma[r][2*i+1]]; \ + d = ror(d ^ a, 8); \ + c = c + d; \ + b = ror(b ^ c, 7); \ + } while(0) + +#define ROUND(r) \ + do { \ + G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \ + G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \ + G(r,2,v[ 2],v[ 6],v[10],v[14]); \ + G(r,3,v[ 3],v[ 7],v[11],v[15]); \ + G(r,4,v[ 0],v[ 5],v[10],v[15]); \ + G(r,5,v[ 1],v[ 6],v[11],v[12]); \ + G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \ + G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \ + } while(0) + + ROUND(0); + ROUND(1); + ROUND(2); + ROUND(3); + ROUND(4); + ROUND(5); + ROUND(6); + ROUND(7); + ROUND(8); + ROUND(9); + +#undef G +#undef ROUND + + S->h[0] = S->h[0] ^ v[0] ^ v[0 + 8]; + S->h[1] = S->h[1] ^ v[1] ^ v[1 + 8]; + S->h[2] = S->h[2] ^ v[2] ^ v[2 + 8]; + S->h[3] = S->h[3] ^ v[3] ^ v[3 + 8]; + S->h[4] = S->h[4] ^ v[4] ^ v[4 + 8]; + S->h[5] = S->h[5] ^ v[5] ^ v[5 + 8]; + S->h[6] = S->h[6] ^ v[6] ^ v[6 + 8]; + S->h[7] = S->h[7] ^ v[7] ^ v[7 + 8]; + + in += BLAKE2S_BLOCKBYTES; + } + + return burn; +} + +static void blake2s_final(void *ctx) +{ + BLAKE2S_CONTEXT *c = ctx; + BLAKE2S_STATE *S = &c->state; + unsigned int burn; + size_t i; + + gcry_assert (sizeof(c->buf) >= c->outlen); + if (blake2s_is_lastblock(S)) + return; + + if (c->buflen < BLAKE2S_BLOCKBYTES) + memset (c->buf + c->buflen, 0, BLAKE2S_BLOCKBYTES - c->buflen); /* Padding */ + blake2s_set_lastblock (S); + blake2s_increment_counter (S, (int)c->buflen - BLAKE2S_BLOCKBYTES); + burn = blake2s_transform (S, c->buf, 1); + + /* Output full hash to buffer */ + for (i = 0; i < 8; ++i) + buf_put_le32 (c->buf + sizeof(S->h[i]) * i, S->h[i]); + + /* Zero out extra buffer bytes. */ + if (c->outlen < sizeof(c->buf)) + memset (c->buf + c->outlen, 0, sizeof(c->buf) - c->outlen); + + if (burn) + _gcry_burn_stack (burn); +} + +static byte *blake2s_read(void *ctx) +{ + BLAKE2S_CONTEXT *c = ctx; + return c->buf; +} + +static void blake2s_write(void *ctx, const void *inbuf, size_t inlen) +{ + BLAKE2S_CONTEXT *c = ctx; + BLAKE2S_STATE *S = &c->state; + blake2_write(S, inbuf, inlen, c->buf, &c->buflen, BLAKE2S_BLOCKBYTES, + blake2s_transform); +} + +static inline void blake2s_init_param(BLAKE2S_STATE *S, + const struct blake2s_param_s *P) +{ + const byte *p = (const byte *)P; + size_t i; + + /* init2 xors IV with input parameter block */ + + /* IV XOR ParamBlock */ + for (i = 0; i < 8; ++i) + S->h[i] ^= blake2s_IV[i] ^ buf_get_le32(&p[i * 4]); +} + +static inline gcry_err_code_t blake2s_init(BLAKE2S_STATE *S, size_t outlen, + const byte *key, size_t keylen) +{ + struct blake2s_param_s P[1] = { { 0, } }; + + if (!outlen || outlen > BLAKE2S_OUTBYTES) + return GPG_ERR_INV_ARG; + if (sizeof(P[0]) != sizeof(u32) * 8) + return GPG_ERR_INTERNAL; + if (keylen && (!key || keylen > BLAKE2S_KEYBYTES)) + return GPG_ERR_INV_KEYLEN; + + P->digest_length = outlen; + P->key_length = keylen; + P->fanout = 1; + P->depth = 1; + + blake2s_init_param (S, P); + wipememory (P, sizeof(P)); + + if (key) + { + blake2s_write (S, key, keylen); + blake2s_write (S, zero_block, BLAKE2S_BLOCKBYTES - keylen); + } + + return 0; +} + +static gcry_err_code_t blake2s_init_ctx(void *ctx, unsigned int flags, + const byte *key, size_t keylen, + unsigned int dbits) +{ + BLAKE2S_CONTEXT *c = ctx; + + (void)flags; + + memset (c, 0, sizeof (*c)); + + c->outlen = dbits / 8; + c->buflen = 0; + return blake2s_init(&c->state, c->outlen, key, keylen); +} + +/* Selftests from "RFC 7693, Appendix E. BLAKE2b and BLAKE2s Self-Test + * Module C Source". */ +static void selftest_seq(byte *out, size_t len, u32 seed) +{ + size_t i; + u32 t, a, b; + + a = 0xDEAD4BAD * seed; + b = 1; + + for (i = 0; i < len; i++) + { + t = a + b; + a = b; + b = t; + out[i] = (t >> 24) & 0xFF; + } +} + +static gpg_err_code_t +selftests_blake2b (int algo, int extended, selftest_report_func_t report) +{ + static const byte blake2b_res[32] = + { + 0xC2, 0x3A, 0x78, 0x00, 0xD9, 0x81, 0x23, 0xBD, + 0x10, 0xF5, 0x06, 0xC6, 0x1E, 0x29, 0xDA, 0x56, + 0x03, 0xD7, 0x63, 0xB8, 0xBB, 0xAD, 0x2E, 0x73, + 0x7F, 0x5E, 0x76, 0x5A, 0x7B, 0xCC, 0xD4, 0x75 + }; + static const size_t b2b_md_len[4] = { 20, 32, 48, 64 }; + static const size_t b2b_in_len[6] = { 0, 3, 128, 129, 255, 1024 }; + size_t i, j, outlen, inlen; + byte in[1024], key[64]; + BLAKE2B_CONTEXT ctx; + BLAKE2B_CONTEXT ctx2; + const char *what; + const char *errtxt; + + (void)extended; + + what = "rfc7693 BLAKE2b selftest"; + + /* 256-bit hash for testing */ + if (blake2b_init_ctx(&ctx, 0, NULL, 0, 32 * 8)) + { + errtxt = "init failed"; + goto failed; + } + + for (i = 0; i < 4; i++) + { + outlen = b2b_md_len[i]; + for (j = 0; j < 6; j++) + { + inlen = b2b_in_len[j]; + + selftest_seq(in, inlen, inlen); /* unkeyed hash */ + blake2b_init_ctx(&ctx2, 0, NULL, 0, outlen * 8); + blake2b_write(&ctx2, in, inlen); + blake2b_final(&ctx2); + blake2b_write(&ctx, ctx2.buf, outlen); /* hash the hash */ + + selftest_seq(key, outlen, outlen); /* keyed hash */ + blake2b_init_ctx(&ctx2, 0, key, outlen, outlen * 8); + blake2b_write(&ctx2, in, inlen); + blake2b_final(&ctx2); + blake2b_write(&ctx, ctx2.buf, outlen); /* hash the hash */ + } + } + + /* compute and compare the hash of hashes */ + blake2b_final(&ctx); + for (i = 0; i < 32; i++) + { + if (ctx.buf[i] != blake2b_res[i]) + { + errtxt = "digest mismatch"; + goto failed; + } + } + + return 0; + +failed: + if (report) + report ("digest", algo, what, errtxt); + return GPG_ERR_SELFTEST_FAILED; +} + +static gpg_err_code_t +selftests_blake2s (int algo, int extended, selftest_report_func_t report) +{ + static const byte blake2s_res[32] = + { + 0x6A, 0x41, 0x1F, 0x08, 0xCE, 0x25, 0xAD, 0xCD, + 0xFB, 0x02, 0xAB, 0xA6, 0x41, 0x45, 0x1C, 0xEC, + 0x53, 0xC5, 0x98, 0xB2, 0x4F, 0x4F, 0xC7, 0x87, + 0xFB, 0xDC, 0x88, 0x79, 0x7F, 0x4C, 0x1D, 0xFE + }; + static const size_t b2s_md_len[4] = { 16, 20, 28, 32 }; + static const size_t b2s_in_len[6] = { 0, 3, 64, 65, 255, 1024 }; + size_t i, j, outlen, inlen; + byte in[1024], key[32]; + BLAKE2S_CONTEXT ctx; + BLAKE2S_CONTEXT ctx2; + const char *what; + const char *errtxt; + + (void)extended; + + what = "rfc7693 BLAKE2s selftest"; + + /* 256-bit hash for testing */ + if (blake2s_init_ctx(&ctx, 0, NULL, 0, 32 * 8)) + { + errtxt = "init failed"; + goto failed; + } + + for (i = 0; i < 4; i++) + { + outlen = b2s_md_len[i]; + for (j = 0; j < 6; j++) + { + inlen = b2s_in_len[j]; + + selftest_seq(in, inlen, inlen); /* unkeyed hash */ + blake2s_init_ctx(&ctx2, 0, NULL, 0, outlen * 8); + blake2s_write(&ctx2, in, inlen); + blake2s_final(&ctx2); + blake2s_write(&ctx, ctx2.buf, outlen); /* hash the hash */ + + selftest_seq(key, outlen, outlen); /* keyed hash */ + blake2s_init_ctx(&ctx2, 0, key, outlen, outlen * 8); + blake2s_write(&ctx2, in, inlen); + blake2s_final(&ctx2); + blake2s_write(&ctx, ctx2.buf, outlen); /* hash the hash */ + } + } + + /* compute and compare the hash of hashes */ + blake2s_final(&ctx); + for (i = 0; i < 32; i++) + { + if (ctx.buf[i] != blake2s_res[i]) + { + errtxt = "digest mismatch"; + goto failed; + } + } + + return 0; + +failed: + if (report) + report ("digest", algo, what, errtxt); + return GPG_ERR_SELFTEST_FAILED; +} + + +gcry_err_code_t _gcry_blake2_init_with_key(void *ctx, unsigned int flags, + const unsigned char *key, + size_t keylen, int algo) +{ + gcry_err_code_t rc; + switch (algo) + { + case GCRY_MD_BLAKE2B_512: + rc = blake2b_init_ctx (ctx, flags, key, keylen, 512); + break; + case GCRY_MD_BLAKE2B_384: + rc = blake2b_init_ctx (ctx, flags, key, keylen, 384); + break; + case GCRY_MD_BLAKE2B_256: + rc = blake2b_init_ctx (ctx, flags, key, keylen, 256); + break; + case GCRY_MD_BLAKE2B_160: + rc = blake2b_init_ctx (ctx, flags, key, keylen, 160); + break; + case GCRY_MD_BLAKE2S_256: + rc = blake2s_init_ctx (ctx, flags, key, keylen, 256); + break; + case GCRY_MD_BLAKE2S_224: + rc = blake2s_init_ctx (ctx, flags, key, keylen, 224); + break; + case GCRY_MD_BLAKE2S_160: + rc = blake2s_init_ctx (ctx, flags, key, keylen, 160); + break; + case GCRY_MD_BLAKE2S_128: + rc = blake2s_init_ctx (ctx, flags, key, keylen, 128); + break; + default: + rc = GPG_ERR_DIGEST_ALGO; + break; + } + + return rc; +} + + +#define DEFINE_BLAKE2_VARIANT(bs, BS, dbits, oid_branch) \ + static void blake2##bs##_##dbits##_init(void *ctx, unsigned int flags) \ + { \ + int err = blake2##bs##_init_ctx (ctx, flags, NULL, 0, dbits); \ + gcry_assert (err == 0); \ + } \ + static byte blake2##bs##_##dbits##_asn[] = { 0x30 }; \ + static gcry_md_oid_spec_t oid_spec_blake2##bs##_##dbits[] = \ + { \ + { " 1.3.6.1.4.1.1722.12.2." oid_branch }, \ + { NULL } \ + }; \ + gcry_md_spec_t _gcry_digest_spec_blake2##bs##_##dbits = \ + { \ + GCRY_MD_BLAKE2##BS##_##dbits, {0, 0}, \ + "BLAKE2" #BS "_" #dbits, blake2##bs##_##dbits##_asn, \ + DIM (blake2##bs##_##dbits##_asn), oid_spec_blake2##bs##_##dbits, \ + dbits / 8, blake2##bs##_##dbits##_init, blake2##bs##_write, \ + blake2##bs##_final, blake2##bs##_read, NULL, \ + sizeof (BLAKE2##BS##_CONTEXT), selftests_blake2##bs \ + }; + +DEFINE_BLAKE2_VARIANT(b, B, 512, "1.16") +DEFINE_BLAKE2_VARIANT(b, B, 384, "1.12") +DEFINE_BLAKE2_VARIANT(b, B, 256, "1.8") +DEFINE_BLAKE2_VARIANT(b, B, 160, "1.5") + +DEFINE_BLAKE2_VARIANT(s, S, 256, "2.8") +DEFINE_BLAKE2_VARIANT(s, S, 224, "2.7") +DEFINE_BLAKE2_VARIANT(s, S, 160, "2.5") +DEFINE_BLAKE2_VARIANT(s, S, 128, "2.4") diff --git a/cipher/md.c b/cipher/md.c index 27a0efb..8df54fe 100644 --- a/cipher/md.c +++ b/cipher/md.c @@ -57,11 +57,11 @@ static gcry_md_spec_t *digest_list[] = &_gcry_digest_spec_shake128, &_gcry_digest_spec_shake256, #endif -#ifdef USE_GOST_R_3411_94 +#if USE_GOST_R_3411_94 &_gcry_digest_spec_gost3411_94, &_gcry_digest_spec_gost3411_cp, #endif -#ifdef USE_GOST_R_3411_12 +#if USE_GOST_R_3411_12 &_gcry_digest_spec_stribog_256, &_gcry_digest_spec_stribog_512, #endif @@ -85,7 +85,17 @@ static gcry_md_spec_t *digest_list[] = #if USE_MD2 &_gcry_digest_spec_md2, #endif - NULL +#if USE_BLAKE2 + &_gcry_digest_spec_blake2b_512, + &_gcry_digest_spec_blake2b_384, + &_gcry_digest_spec_blake2b_256, + &_gcry_digest_spec_blake2b_160, + &_gcry_digest_spec_blake2s_256, + &_gcry_digest_spec_blake2s_224, + &_gcry_digest_spec_blake2s_160, + &_gcry_digest_spec_blake2s_128, +#endif + NULL }; @@ -674,6 +684,69 @@ md_final (gcry_md_hd_t a) static gcry_err_code_t +md_setkey (gcry_md_hd_t h, const unsigned char *key, size_t keylen) +{ + gcry_err_code_t rc = 0; + GcryDigestEntry *r; + int algo_had_setkey = 0; + + if (!h->ctx->list) + return GPG_ERR_DIGEST_ALGO; /* Might happen if no algo is enabled. */ + + if (h->ctx->flags.hmac) + return GPG_ERR_DIGEST_ALGO; /* Tried md_setkey for HMAC md. */ + + for (r = h->ctx->list; r; r = r->next) + { + switch (r->spec->algo) + { + /* TODO? add spec->init_with_key? */ + case GCRY_MD_BLAKE2B_512: + case GCRY_MD_BLAKE2B_384: + case GCRY_MD_BLAKE2B_256: + case GCRY_MD_BLAKE2B_160: + case GCRY_MD_BLAKE2S_256: + case GCRY_MD_BLAKE2S_224: + case GCRY_MD_BLAKE2S_160: + case GCRY_MD_BLAKE2S_128: + algo_had_setkey = 1; + memset (r->context.c, 0, r->spec->contextsize); + rc = _gcry_blake2_init_with_key (r->context.c, + h->ctx->flags.bugemu1 + ? GCRY_MD_FLAG_BUGEMU1:0, + key, keylen, r->spec->algo); + break; + default: + rc = GPG_ERR_DIGEST_ALGO; + break; + } + + if (rc) + break; + } + + if (rc && !algo_had_setkey) + { + /* None of algorithms had setkey implementation, so contexts were not + * modified. Just return error. */ + return rc; + } + else if (rc && algo_had_setkey) + { + /* Some of the contexts have been modified, but got error. Reset + * all contexts. */ + _gcry_md_reset (h); + return rc; + } + + /* Successful md_setkey implies reset. */ + h->bufpos = h->ctx->flags.finalized = 0; + + return 0; +} + + +static gcry_err_code_t prepare_macpads (gcry_md_hd_t a, const unsigned char *key, size_t keylen) { GcryDigestEntry *r; @@ -682,7 +755,7 @@ prepare_macpads (gcry_md_hd_t a, const unsigned char *key, size_t keylen) return GPG_ERR_DIGEST_ALGO; /* Might happen if no algo is enabled. */ if (!a->ctx->flags.hmac) - return GPG_ERR_DIGEST_ALGO; /* Tried setkey for non-HMAC md. */ + return GPG_ERR_DIGEST_ALGO; /* Tried prepare_macpads for non-HMAC md. */ for (r = a->ctx->list; r; r = r->next) { @@ -694,6 +767,7 @@ prepare_macpads (gcry_md_hd_t a, const unsigned char *key, size_t keylen) switch (r->spec->algo) { + /* TODO: add spec->blocksize */ case GCRY_MD_SHA3_224: macpad_Bsize = 1152 / 8; break; @@ -708,6 +782,10 @@ prepare_macpads (gcry_md_hd_t a, const unsigned char *key, size_t keylen) break; case GCRY_MD_SHA384: case GCRY_MD_SHA512: + case GCRY_MD_BLAKE2B_512: + case GCRY_MD_BLAKE2B_384: + case GCRY_MD_BLAKE2B_256: + case GCRY_MD_BLAKE2B_160: macpad_Bsize = 128; break; case GCRY_MD_GOSTR3411_94: @@ -794,9 +872,16 @@ _gcry_md_setkey (gcry_md_hd_t hd, const void *key, size_t keylen) { gcry_err_code_t rc; - rc = prepare_macpads (hd, key, keylen); - if (!rc) - _gcry_md_reset (hd); + if (hd->ctx->flags.hmac) + { + rc = prepare_macpads (hd, key, keylen); + if (!rc) + _gcry_md_reset (hd); + } + else + { + rc = md_setkey (hd, key, keylen); + } return rc; } diff --git a/configure.ac b/configure.ac index bc5bed4..cc462b4 100644 --- a/configure.ac +++ b/configure.ac @@ -196,8 +196,8 @@ available_pubkey_ciphers="dsa elgamal rsa ecc" enabled_pubkey_ciphers="" # Definitions for message digests. -available_digests="crc gostr3411-94 md2 md4 md5 rmd160 sha1 sha256" -available_digests="$available_digests sha512 sha3 tiger whirlpool stribog" +available_digests="crc gostr3411-94 md2 md4 md5 rmd160 sha1 sha256 sha512" +available_digests="$available_digests sha3 tiger whirlpool stribog blake2" enabled_digests="" # Definitions for kdfs (optional ones) @@ -2406,6 +2406,12 @@ if test "$found" = "1" ; then esac fi +LIST_MEMBER(blake2, $enabled_digests) +if test "$found" = "1" ; then + GCRYPT_DIGESTS="$GCRYPT_DIGESTS blake2.lo" + AC_DEFINE(USE_BLAKE2, 1, [Defined if this module should be included]) +fi + # SHA-1 needs to be included always for example because it is used by # random-csprng.c. GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha1.lo" diff --git a/doc/gcrypt.texi b/doc/gcrypt.texi index a905d0f..4cdf75d 100644 --- a/doc/gcrypt.texi +++ b/doc/gcrypt.texi @@ -3115,6 +3115,8 @@ are also supported. @cindex TIGER, TIGER1, TIGER2 @cindex HAVAL @cindex Whirlpool + at cindex BLAKE2b-512, BLAKE2b-384, BLAKE2b-256, BLAKE2b-160 + at cindex BLAKE2s-256, BLAKE2s-224, BLAKE2s-160, BLAKE2s-128 @cindex CRC32 @table @code @item GCRY_MD_NONE @@ -3239,6 +3241,38 @@ which yields a message digest of 32 bytes. This is the 512-bit version of hash algorithm described in GOST R 34.11-2012 which yields a message digest of 64 bytes. + at item GCRY_MD_BLAKE2B_512 +This is the BLAKE2b-512 algorithm which yields a message digest of 64 bytes. +See RFC 7693 for the specification. + + at item GCRY_MD_BLAKE2B_384 +This is the BLAKE2b-384 algorithm which yields a message digest of 48 bytes. +See RFC 7693 for the specification. + + at item GCRY_MD_BLAKE2B_256 +This is the BLAKE2b-256 algorithm which yields a message digest of 32 bytes. +See RFC 7693 for the specification. + + at item GCRY_MD_BLAKE2B_160 +This is the BLAKE2b-160 algorithm which yields a message digest of 20 bytes. +See RFC 7693 for the specification. + + at item GCRY_MD_BLAKE2S_256 +This is the BLAKE2s-256 algorithm which yields a message digest of 32 bytes. +See RFC 7693 for the specification. + + at item GCRY_MD_BLAKE2S_224 +This is the BLAKE2s-224 algorithm which yields a message digest of 28 bytes. +See RFC 7693 for the specification. + + at item GCRY_MD_BLAKE2S_160 +This is the BLAKE2s-160 algorithm which yields a message digest of 20 bytes. +See RFC 7693 for the specification. + + at item GCRY_MD_BLAKE2S_128 +This is the BLAKE2s-128 algorithm which yields a message digest of 16 bytes. +See RFC 7693 for the specification. + @end table @c end table of hash algorithms @@ -3317,9 +3351,12 @@ be set using the function: @deftypefun gcry_error_t gcry_md_setkey (gcry_md_hd_t @var{h}, const void *@var{key}, size_t @var{keylen}) -For use with the HMAC feature, set the MAC key to the value of - at var{key} of length @var{keylen} bytes. There is no restriction on -the length of the key. +For use with the HMAC feature or BLAKE2 keyed hash, set the MAC key to +the value of @var{key} of length @var{keylen} bytes. For HMAC, there +is no restriction on the length of the key. For keyed BLAKE2b hash, +length of the key must be 64 bytes or less. For keyed BLAKE2s hash, +length of the key must be 32 bytes or less. + @end deftypefun diff --git a/src/cipher.h b/src/cipher.h index c4b306a..725cc73 100644 --- a/src/cipher.h +++ b/src/cipher.h @@ -120,6 +120,10 @@ void _gcry_sha1_hash_buffer (void *outbuf, const void *buffer, size_t length); void _gcry_sha1_hash_buffers (void *outbuf, const gcry_buffer_t *iov, int iovcnt); +/*-- blake2.c --*/ +gcry_err_code_t _gcry_blake2_init_with_key(void *ctx, unsigned int flags, + const unsigned char *key, + size_t keylen, int algo); /*-- rijndael.c --*/ void _gcry_aes_cfb_enc (void *context, unsigned char *iv, @@ -301,6 +305,14 @@ extern gcry_md_spec_t _gcry_digest_spec_tiger; extern gcry_md_spec_t _gcry_digest_spec_tiger1; extern gcry_md_spec_t _gcry_digest_spec_tiger2; extern gcry_md_spec_t _gcry_digest_spec_whirlpool; +extern gcry_md_spec_t _gcry_digest_spec_blake2b_512; +extern gcry_md_spec_t _gcry_digest_spec_blake2b_384; +extern gcry_md_spec_t _gcry_digest_spec_blake2b_256; +extern gcry_md_spec_t _gcry_digest_spec_blake2b_160; +extern gcry_md_spec_t _gcry_digest_spec_blake2s_256; +extern gcry_md_spec_t _gcry_digest_spec_blake2s_224; +extern gcry_md_spec_t _gcry_digest_spec_blake2s_160; +extern gcry_md_spec_t _gcry_digest_spec_blake2s_128; /* Declarations for the pubkey cipher specifications. */ extern gcry_pk_spec_t _gcry_pubkey_spec_rsa; diff --git a/src/gcrypt.h.in b/src/gcrypt.h.in index a0fdaf9..5727abb 100644 --- a/src/gcrypt.h.in +++ b/src/gcrypt.h.in @@ -1228,7 +1228,15 @@ enum gcry_md_algos GCRY_MD_SHA3_384 = 314, GCRY_MD_SHA3_512 = 315, GCRY_MD_SHAKE128 = 316, - GCRY_MD_SHAKE256 = 317 + GCRY_MD_SHAKE256 = 317, + GCRY_MD_BLAKE2B_512 = 318, + GCRY_MD_BLAKE2B_384 = 319, + GCRY_MD_BLAKE2B_256 = 320, + GCRY_MD_BLAKE2B_160 = 321, + GCRY_MD_BLAKE2S_256 = 322, + GCRY_MD_BLAKE2S_224 = 323, + GCRY_MD_BLAKE2S_160 = 324, + GCRY_MD_BLAKE2S_128 = 325 }; /* Flags used with the open function. */ diff --git a/tests/basic.c b/tests/basic.c index 1b61122..342bf73 100644 --- a/tests/basic.c +++ b/tests/basic.c @@ -6351,7 +6351,8 @@ fillbuf_count (char *buf, size_t buflen, unsigned char pos) static void -check_one_md (int algo, const char *data, int len, const char *expect, int elen) +check_one_md (int algo, const char *data, int len, const char *expect, int elen, + const char *key, int klen) { gcry_md_hd_t hd, hd2; unsigned char *p; @@ -6376,11 +6377,23 @@ check_one_md (int algo, const char *data, int len, const char *expect, int elen) } else { + gcry_md_close (hd); fail ("algo %d, gcry_md_get_algo_dlen failed: %d\n", algo, mdlen); return; } } + if (key && klen) + { + err = gcry_md_setkey (hd, key, klen); + if (err) + { + gcry_md_close (hd); + fail ("algo %d, gcry_md_setkey failed: %s\n", algo, gpg_strerror (err)); + return; + } + } + if ((*data == '!' && !data[1]) || /* hash one million times a "a" */ (*data == '?' && !data[1])) /* hash million byte data-set with byte pattern 0x00,0x01,0x02,... */ { @@ -6457,7 +6470,6 @@ check_one_md (int algo, const char *data, int len, const char *expect, int elen) fail ("algo %d, digest mismatch\n", algo); } - } else { @@ -6683,6 +6695,23 @@ check_one_md_multi (int algo, const char *data, int len, const char *expect) static void check_digests (void) { + static const char blake2_data_vector[] = + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" + "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" + "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f" + "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f" + "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f" + "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f" + "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f" + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" + "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f" + "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf" + "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf" + "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf" + "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" + "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef" + "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"; static const struct algos { int md; @@ -6690,6 +6719,8 @@ check_digests (void) const char *expect; int datalen; int expectlen; + const char *key; + int keylen; } algos[] = { { GCRY_MD_MD2, "", @@ -7460,6 +7491,285 @@ check_digests (void) "\x1b\xeb\x65\x53\xf2\x81\xfa\x75\x69\x48\xc4\x38\x49\x4b\x19\xb4" "\xee\x69\xa5\x43\x6b\x22\x2b\xc9\x88\xed\xa4\xac\x60\x00\x24\xc9", 0, 512, }, + { GCRY_MD_BLAKE2B_512, "abc", + "\xBA\x80\xA5\x3F\x98\x1C\x4D\x0D\x6A\x27\x97\xB6\x9F\x12\xF6\xE9" + "\x4C\x21\x2F\x14\x68\x5A\xC4\xB7\x4B\x12\xBB\x6F\xDB\xFF\xA2\xD1" + "\x7D\x87\xC5\x39\x2A\xAB\x79\x2D\xC2\x52\xD5\xDE\x45\x33\xCC\x95" + "\x18\xD3\x8A\xA8\xDB\xF1\x92\x5A\xB9\x23\x86\xED\xD4\x00\x99\x23" }, + { GCRY_MD_BLAKE2B_512, "\x00", + "\x96\x1f\x6d\xd1\xe4\xdd\x30\xf6\x39\x01\x69\x0c\x51\x2e\x78\xe4" + "\xb4\x5e\x47\x42\xed\x19\x7c\x3c\x5e\x45\xc5\x49\xfd\x25\xf2\xe4" + "\x18\x7b\x0b\xc9\xfe\x30\x49\x2b\x16\xb0\xd0\xbc\x4e\xf9\xb0\xf3" + "\x4c\x70\x03\xfa\xc0\x9a\x5e\xf1\x53\x2e\x69\x43\x02\x34\xce\xbd", + 1, 64, + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" + "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" + "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f", + 64 }, +#include "./blake2b.h" + { GCRY_MD_BLAKE2B_160, + "", + "\xad\x75\xea\xd7\x9f\x71\x21\xd1\xf0\x8a\xfe\x59\x99\x27\xa5\xa3" + "\x8b\xe1\xb1\x79", + 0, 20, + "\x65\x65\xcb\x30\xfb\x2c\x28\x54\x7c\xd0\x4c\x1d\x6a\x88\xf2\x7a" + "\x6d\xe8\x55\x3d", + 20 }, + { GCRY_MD_BLAKE2B_160, + "\x9c\x9c\x38", + "\x82\x79\x9d\x7b\xe8\xf4\xd1\x69\xfb\x85\xe6\x63\x6a\x7b\x6c\x50" + "\xa0\x1f\x70\xa2", + 3, 20, + "\x65\x65\xcb\x30\xfb\x2c\x28\x54\x7c\xd0\x4c\x1d\x6a\x88\xf2\x7a" + "\x6d\xe8\x55\x3d", + 20 }, + { GCRY_MD_BLAKE2B_256, + "", + "\x89\x36\x29\x47\x52\x79\xdf\xd8\x2a\x84\x1a\x8f\x21\xa3\x72\xed" + "\x30\xcc\xb8\xae\x34\x62\xe1\x90\x7f\x50\x66\x3f\x3c\x03\x66\x83", + 0, 32, + "\xd5\xd5\xab\x80\x2c\xad\xd9\x86\x60\xe7\x47\x2f\x77\xa6\x1d\xc4" + "\xe2\xa6\x88\x2f\xb7\xe6\x9e\x85\x23\xa9\xcd\x76\x43\xb9\xfd\xb7", + 32 }, + { GCRY_MD_BLAKE2B_256, + "\x9c\x9c\x38", + "\x01\x6a\x18\xbb\x10\xe0\xc3\xa5\xe5\x9f\xce\xfd\x1a\x40\x7a\xb7" + "\xf1\xc0\x36\x1b\x3f\x98\x34\x77\x42\x54\xd3\xf0\x4c\xda\x38\x98", + 3, 32, + "\xd5\xd5\xab\x80\x2c\xad\xd9\x86\x60\xe7\x47\x2f\x77\xa6\x1d\xc4" + "\xe2\xa6\x88\x2f\xb7\xe6\x9e\x85\x23\xa9\xcd\x76\x43\xb9\xfd\xb7", + 32 }, + { GCRY_MD_BLAKE2B_384, + "", + "\xd7\x2c\x9b\x4a\x73\x4e\xb2\x07\xe9\xdd\xbf\xf0\x0b\x10\xc3\x70" + "\xc8\x9d\x67\xd7\x96\xc3\xa7\xb9\x68\x15\xa9\x53\x92\x1b\xb2\x97" + "\x59\xd2\x9d\x25\x63\xf3\xda\x4d\x7f\x3e\xa4\xa6\xe3\x4c\x32\x6b", + 0, 48, + "\xc0\xc0\x80\x41\xc2\x03\xc6\xca\x90\x5b\xeb\x46\x32\x79\xac\x26" + "\xd3\xf9\xcc\xc6\x93\x5a\xed\x48\x35\x7d\xb3\x31\xe5\x16\xfb\x12" + "\x0e\x21\x2f\x51\x80\xd1\x52\x24\x77\x9c\x13\xaf\xc3\x73\x37\xaa", + 48 }, + { GCRY_MD_BLAKE2B_384, + "\x9c\x9c\x38", + "\xef\x46\xfa\x54\xa2\xc2\x20\xda\x06\xa8\x4c\x77\x6e\x87\xdd\x0a" + "\x21\xee\xb5\xe9\x40\x1a\x0a\x78\x11\x19\x74\x18\xfe\x92\x70\x15" + "\x77\xd0\xa8\x53\x24\x48\xe8\xb8\x53\x6a\xa6\xc7\x42\xcd\x2c\x62", + 3, 48, + "\xc0\xc0\x80\x41\xc2\x03\xc6\xca\x90\x5b\xeb\x46\x32\x79\xac\x26" + "\xd3\xf9\xcc\xc6\x93\x5a\xed\x48\x35\x7d\xb3\x31\xe5\x16\xfb\x12" + "\x0e\x21\x2f\x51\x80\xd1\x52\x24\x77\x9c\x13\xaf\xc3\x73\x37\xaa", + 48 }, + { GCRY_MD_BLAKE2B_512, + "", + "\xd7\x4b\xf3\x1e\x5c\xe5\xd8\xa2\x5d\x09\x21\x52\x53\xca\xd2\xf8" + "\xd2\xfd\xa9\x10\x09\x30\x16\x05\xa6\x8c\xc3\x86\x5b\xb7\x93\x5b" + "\xca\xff\x6f\x2a\xf6\x43\xa7\x76\x99\xe8\x02\x61\xa1\xfd\x2c\x80" + "\xe8\x37\xb5\x62\x32\xf7\xb1\x46\x43\x4a\xa7\x4d\x71\x18\xbb\x16", + 0, 64, + "\xab\xab\x56\x01\x58\x5a\xb3\x0d\xc1\xce\x8f\x5e\xee\x4d\x3b\x88" + "\xc4\x4c\x11\x5e\x6f\xcd\x3d\x0a\x47\x52\x9a\xec\x86\x73\xfa\x6e" + "\x68\xd6\x3f\x16\x55\x6b\xc1\x2d\xef\x1d\x0c\x29\x35\x5f\x94\xf3" + "\x88\x7c\x04\x81\x86\x07\x8e\x95\x23\xb9\xdd\x97\x74\x0c\x80\x8c", + 64 }, + { GCRY_MD_BLAKE2B_512, + "\x9c\x9c\x38", + "\x70\xfc\x57\xe1\x49\x5f\xe4\x39\x0d\x38\xa1\xd3\x97\x05\xee\xf6" + "\xaa\xbb\xd2\x64\xc7\xce\x66\x11\x8d\x0a\x87\xd4\x25\x94\xb3\x87" + "\xdc\x50\x18\x8b\xba\x61\xf0\x91\xd6\xb3\x4f\xf5\x4e\x09\x1e\x70" + "\x24\x01\x83\xcd\xb9\x21\x1f\x14\x39\x77\x5c\xc6\xe6\xe9\x35\x73", + 3, 64, + "\xab\xab\x56\x01\x58\x5a\xb3\x0d\xc1\xce\x8f\x5e\xee\x4d\x3b\x88" + "\xc4\x4c\x11\x5e\x6f\xcd\x3d\x0a\x47\x52\x9a\xec\x86\x73\xfa\x6e" + "\x68\xd6\x3f\x16\x55\x6b\xc1\x2d\xef\x1d\x0c\x29\x35\x5f\x94\xf3" + "\x88\x7c\x04\x81\x86\x07\x8e\x95\x23\xb9\xdd\x97\x74\x0c\x80\x8c", + 64 }, + { GCRY_MD_BLAKE2B_512, "!", + "\x98\xfb\x3e\xfb\x72\x06\xfd\x19\xeb\xf6\x9b\x6f\x31\x2c\xf7\xb6" + "\x4e\x3b\x94\xdb\xe1\xa1\x71\x07\x91\x39\x75\xa7\x93\xf1\x77\xe1" + "\xd0\x77\x60\x9d\x7f\xba\x36\x3c\xbb\xa0\x0d\x05\xf7\xaa\x4e\x4f" + "\xa8\x71\x5d\x64\x28\x10\x4c\x0a\x75\x64\x3b\x0f\xf3\xfd\x3e\xaf" }, + { GCRY_MD_BLAKE2B_512, "?", + "\xae\x9c\xf5\x7a\xc2\xff\x7b\x37\x7a\x5b\xb5\xcc\x2e\x62\x92\x20" + "\xa9\xba\x0a\x09\xc2\x2a\x0f\xdb\xd9\xa3\xae\xd6\x32\xc1\x72\x0e" + "\x6d\x82\x9f\x74\x7f\xba\x12\xe8\x31\xa2\x45\x8d\xf0\x73\x4e\xe0" + "\x12\x27\x52\xd3\xe2\x2c\x36\xc4\x42\x89\x3b\xcd\xd1\xbd\xd9\x08" }, + { GCRY_MD_BLAKE2B_384, "?", + "\x22\x66\x8e\x05\x81\x44\x52\xa5\x23\x84\xce\x67\xd4\xad\x0e\x03" + "\xdf\xe7\x1a\xc1\x56\x9d\x95\x4a\xd2\x22\x7a\x70\x2a\xfe\x6c\x68" + "\x5c\x7d\x65\x30\x2b\xc0\xde\xc6\xea\x72\x1e\xdd\x46\xdf\xb2\x08" }, + { GCRY_MD_BLAKE2B_256, "?", + "\xfa\x11\x30\xd8\xba\x8a\x4c\x5a\x0e\x6f\x4f\x4c\xd2\xd1\x38\x0c" + "\xb9\x22\x2a\xbd\xf6\x20\x70\xf8\x02\x1b\x34\xdd\xd7\x24\x92\x1b" }, + { GCRY_MD_BLAKE2B_160, "?", + "\xe7\x86\x08\x31\xf8\x96\x8d\x64\x9b\xe0\x15\x68\x33\xf3\xbd\x2a" + "\x5f\x0b\xdb\x40" }, + { GCRY_MD_BLAKE2S_256, "abc", + "\x50\x8C\x5E\x8C\x32\x7C\x14\xE2\xE1\xA7\x2B\xA3\x4E\xEB\x45\x2F" + "\x37\x45\x8B\x20\x9E\xD6\x3A\x29\x4D\x99\x9B\x4C\x86\x67\x59\x82" }, +#include "./blake2s.h" + { GCRY_MD_BLAKE2S_128, + "", + "\x84\x89\x68\xb3\x59\x01\xe9\x57\x9a\x4d\xbf\x28\xdf\x99\xec\x23", + 0, 16, + "\xea\xea\xd5\xc0\x96\x56\xec\x43\x30\x73\xa3\x17\xbb\xd3\x8e\x62", + 16 }, + { GCRY_MD_BLAKE2S_128, + "\x9c\x9c\x38", + "\x2e\xbb\x18\x78\xda\x34\x05\xad\x98\x1a\x33\x06\x50\x35\xd3\x75", + 3, 16, + "\xea\xea\xd5\xc0\x96\x56\xec\x43\x30\x73\xa3\x17\xbb\xd3\x8e\x62", + 16 }, + { GCRY_MD_BLAKE2S_128, + "\xab\xab\x56\x01\x58\x5a\xb3\x0d\xc1\xce\x8f\x5e\xee\x4d\x3b\x88" + "\xc4\x4c\x11\x5e\x6f\xcd\x3d\x0a\x47\x52\x9a\xec\x86\x73\xfa\x6e" + "\x68\xd6\x3f\x16\x55\x6b\xc1\x2d\xef\x1d\x0c\x29\x35\x5f\x94\xf3" + "\x88\x7c\x04\x81\x86\x07\x8e\x95\x23\xb9\xdd\x97\x74\x0c\x80\x8c", + "\x3c\xd4\xea\xd7\x88\x0b\x8e\x82\xde\x07\x9c\x1f\xad\x34\x17\xd4", + 64, 16, + "\xea\xea\xd5\xc0\x96\x56\xec\x43\x30\x73\xa3\x17\xbb\xd3\x8e\x62", + 16 }, + { GCRY_MD_BLAKE2S_128, + "\x8a\x8a\x14\x9e\xb2\x50\x02\x52\x54\xa6\xfa\xa0\x9a\x3a\xd4\x0e" + "\xe3\xf2\xd5\xc7\x9d\x64\x02\x66\x68\xcf\x38\x08\x41\x49\x8a\xd3" + "\x5e\x32\x90\xc2\x53\x15\x68\x7e\xe6\x65\x4b\xb0\xfc\xad\xaa\x58" + "\x02\x5b\x5e\xb9\x18\xd1\xe9\xbb\xa5\x61\x07\x68\x70\xd9\x49\x22" + "\x6b", + "\xee\x92\xc5\x25\x4c\x29\x7a\x88\xe6\x9a\x23\x69\x56\xb6\x7c\xee", + 65, 16, + "\xea\xea\xd5\xc0\x96\x56\xec\x43\x30\x73\xa3\x17\xbb\xd3\x8e\x62", + 16 }, + { GCRY_MD_BLAKE2S_160, + "", + "\x68\x64\x48\x80\x0c\x80\xc6\xd0\x4f\xb7\x3f\xc1\x7f\xa0\x8c\xa2" + "\x39\x03\xe1\xe9", + 0, 20, + "\x65\x65\xcb\x30\xfb\x2c\x28\x54\x7c\xd0\x4c\x1d\x6a\x88\xf2\x7a" + "\x6d\xe8\x55\x3d", + 20 }, + { GCRY_MD_BLAKE2S_160, + "\x9c\x9c\x38", + "\xba\xb3\x5b\x8c\x87\x04\x1a\x00\x24\x44\xa5\xca\x45\x13\x2d\x75" + "\xef\xd3\x4c\xb9", + 3, 20, + "\x65\x65\xcb\x30\xfb\x2c\x28\x54\x7c\xd0\x4c\x1d\x6a\x88\xf2\x7a" + "\x6d\xe8\x55\x3d", + 20 }, + { GCRY_MD_BLAKE2S_160, + "\xab\xab\x56\x01\x58\x5a\xb3\x0d\xc1\xce\x8f\x5e\xee\x4d\x3b\x88" + "\xc4\x4c\x11\x5e\x6f\xcd\x3d\x0a\x47\x52\x9a\xec\x86\x73\xfa\x6e" + "\x68\xd6\x3f\x16\x55\x6b\xc1\x2d\xef\x1d\x0c\x29\x35\x5f\x94\xf3" + "\x88\x7c\x04\x81\x86\x07\x8e\x95\x23\xb9\xdd\x97\x74\x0c\x80\x8c", + "\xe8\xc3\xf1\xdb\x1c\xf8\xe9\xd1\xb5\x4a\x54\x0a\xdc\xe7\x18\x13" + "\x0f\xf4\x12\x98", + 64, 20, + "\x65\x65\xcb\x30\xfb\x2c\x28\x54\x7c\xd0\x4c\x1d\x6a\x88\xf2\x7a" + "\x6d\xe8\x55\x3d", + 20 }, + { GCRY_MD_BLAKE2S_160, + "\x8a\x8a\x14\x9e\xb2\x50\x02\x52\x54\xa6\xfa\xa0\x9a\x3a\xd4\x0e" + "\xe3\xf2\xd5\xc7\x9d\x64\x02\x66\x68\xcf\x38\x08\x41\x49\x8a\xd3" + "\x5e\x32\x90\xc2\x53\x15\x68\x7e\xe6\x65\x4b\xb0\xfc\xad\xaa\x58" + "\x02\x5b\x5e\xb9\x18\xd1\xe9\xbb\xa5\x61\x07\x68\x70\xd9\x49\x22" + "\x6b", + "\x59\x02\xf8\x38\x18\x77\x9c\xd8\x13\x40\x0f\xd6\xbb\x23\x04\x1b" + "\x64\x9a\x57\xa7", + 65, 20, + "\x65\x65\xcb\x30\xfb\x2c\x28\x54\x7c\xd0\x4c\x1d\x6a\x88\xf2\x7a" + "\x6d\xe8\x55\x3d", + 20 }, + { GCRY_MD_BLAKE2S_224, + "", + "\xa8\x66\x86\x63\x35\x3a\xe0\x8f\x4e\x4b\x6b\x1e\xcb\x43\x19\xc8" + "\x2b\x41\x3f\x5e\xe5\x43\x95\x9c\xa5\x9a\x73\x1b", + 0, 28, + "\x5a\x5a\xb5\x10\xc6\xd7\x9e\x76\x14\x8a\x9e\x29\xc8\xf1\xba\xab" + "\x65\x11\x77\x89\x00\x89\x8a\x14\x9f\xb4\x53\x07", + 28 }, + { GCRY_MD_BLAKE2S_224, + "\x9c\x9c\x38", + "\x1a\x34\x9d\xc1\x51\xbd\x8b\xa2\xa7\xa6\x6b\xe4\x93\x98\x51\x88" + "\x33\x49\x71\x02\x09\xb1\x20\x85\x8c\x4c\x67\xb8", + 3, 28, + "\x5a\x5a\xb5\x10\xc6\xd7\x9e\x76\x14\x8a\x9e\x29\xc8\xf1\xba\xab" + "\x65\x11\x77\x89\x00\x89\x8a\x14\x9f\xb4\x53\x07", + 28 }, + { GCRY_MD_BLAKE2S_224, + "\xab\xab\x56\x01\x58\x5a\xb3\x0d\xc1\xce\x8f\x5e\xee\x4d\x3b\x88" + "\xc4\x4c\x11\x5e\x6f\xcd\x3d\x0a\x47\x52\x9a\xec\x86\x73\xfa\x6e" + "\x68\xd6\x3f\x16\x55\x6b\xc1\x2d\xef\x1d\x0c\x29\x35\x5f\x94\xf3" + "\x88\x7c\x04\x81\x86\x07\x8e\x95\x23\xb9\xdd\x97\x74\x0c\x80\x8c", + "\x3a\x0e\xd5\x46\x95\x8c\xd6\xf9\x7c\x38\xd0\xe7\x1c\xfd\xd4\xc5" + "\x67\x6d\x5c\xcc\x35\x06\xec\x87\x87\x09\x26\x39", + 64, 28, + "\x5a\x5a\xb5\x10\xc6\xd7\x9e\x76\x14\x8a\x9e\x29\xc8\xf1\xba\xab" + "\x65\x11\x77\x89\x00\x89\x8a\x14\x9f\xb4\x53\x07", + 28 }, + { GCRY_MD_BLAKE2S_224, + "\x8a\x8a\x14\x9e\xb2\x50\x02\x52\x54\xa6\xfa\xa0\x9a\x3a\xd4\x0e" + "\xe3\xf2\xd5\xc7\x9d\x64\x02\x66\x68\xcf\x38\x08\x41\x49\x8a\xd3" + "\x5e\x32\x90\xc2\x53\x15\x68\x7e\xe6\x65\x4b\xb0\xfc\xad\xaa\x58" + "\x02\x5b\x5e\xb9\x18\xd1\xe9\xbb\xa5\x61\x07\x68\x70\xd9\x49\x22" + "\x6b", + "\x63\xd7\x98\xcc\x8e\xe3\x00\x45\x2f\xd8\x19\x83\x02\x94\x7f\xf1" + "\xb3\x82\x73\xaa\x19\xae\x72\x8b\x1f\x64\xbe\x88", + 65, 28, + "\x5a\x5a\xb5\x10\xc6\xd7\x9e\x76\x14\x8a\x9e\x29\xc8\xf1\xba\xab" + "\x65\x11\x77\x89\x00\x89\x8a\x14\x9f\xb4\x53\x07", + 28 }, + { GCRY_MD_BLAKE2S_256, + "", + "\x98\xf3\x21\xe5\x43\xb8\x07\x35\x27\x9c\x86\x1c\x36\x33\x9b\x43" + "\x45\x50\xc6\x9d\x23\xc6\xc8\xff\x96\xbf\x4e\x03\x86\x10\x24\xfd", + 0, 32, + "\xd5\xd5\xab\x80\x2c\xad\xd9\x86\x60\xe7\x47\x2f\x77\xa6\x1d\xc4" + "\xe2\xa6\x88\x2f\xb7\xe6\x9e\x85\x23\xa9\xcd\x76\x43\xb9\xfd\xb7", + 32 }, + { GCRY_MD_BLAKE2S_256, + "\x9c\x9c\x38", + "\x7b\x10\xa3\x67\xb8\x5d\x29\x9a\x91\x27\x37\x05\x9d\x05\x9d\x3d" + "\xe6\x42\xa3\x19\x04\x57\x01\xb6\x25\x0b\xfd\x3c\x6c\xb9\x4f\x87", + 3, 32, + "\xd5\xd5\xab\x80\x2c\xad\xd9\x86\x60\xe7\x47\x2f\x77\xa6\x1d\xc4" + "\xe2\xa6\x88\x2f\xb7\xe6\x9e\x85\x23\xa9\xcd\x76\x43\xb9\xfd\xb7", + 32 }, + { GCRY_MD_BLAKE2S_256, + "\xab\xab\x56\x01\x58\x5a\xb3\x0d\xc1\xce\x8f\x5e\xee\x4d\x3b\x88" + "\xc4\x4c\x11\x5e\x6f\xcd\x3d\x0a\x47\x52\x9a\xec\x86\x73\xfa\x6e" + "\x68\xd6\x3f\x16\x55\x6b\xc1\x2d\xef\x1d\x0c\x29\x35\x5f\x94\xf3" + "\x88\x7c\x04\x81\x86\x07\x8e\x95\x23\xb9\xdd\x97\x74\x0c\x80\x8c", + "\xd7\x8b\x98\x28\x54\x4c\xc1\x62\x9e\xab\x7d\xfe\xb1\xfa\xdd\x2b" + "\xed\x98\x1c\xe6\x5f\xef\xd8\x08\x42\x9a\x11\x1e\x97\x44\x92\xa3", + 64, 32, + "\xd5\xd5\xab\x80\x2c\xad\xd9\x86\x60\xe7\x47\x2f\x77\xa6\x1d\xc4" + "\xe2\xa6\x88\x2f\xb7\xe6\x9e\x85\x23\xa9\xcd\x76\x43\xb9\xfd\xb7", + 32 }, + { GCRY_MD_BLAKE2S_256, + "\x8a\x8a\x14\x9e\xb2\x50\x02\x52\x54\xa6\xfa\xa0\x9a\x3a\xd4\x0e" + "\xe3\xf2\xd5\xc7\x9d\x64\x02\x66\x68\xcf\x38\x08\x41\x49\x8a\xd3" + "\x5e\x32\x90\xc2\x53\x15\x68\x7e\xe6\x65\x4b\xb0\xfc\xad\xaa\x58" + "\x02\x5b\x5e\xb9\x18\xd1\xe9\xbb\xa5\x61\x07\x68\x70\xd9\x49\x22" + "\x6b", + "\x1b\x9e\x26\x9a\x90\xf8\x73\x51\x73\xbc\x4f\x65\xce\x29\x2c\x61" + "\x16\x65\xc7\xb0\x72\x07\xa8\x0b\xfb\x2e\xea\x12\x7d\x97\xcd\x06", + 65, 32, + "\xd5\xd5\xab\x80\x2c\xad\xd9\x86\x60\xe7\x47\x2f\x77\xa6\x1d\xc4" + "\xe2\xa6\x88\x2f\xb7\xe6\x9e\x85\x23\xa9\xcd\x76\x43\xb9\xfd\xb7", + 32 }, + { GCRY_MD_BLAKE2S_256, "!", + "\xbe\xc0\xc0\xe6\xcd\xe5\xb6\x7a\xcb\x73\xb8\x1f\x79\xa6\x7a\x40" + "\x79\xae\x1c\x60\xda\xc9\xd2\x66\x1a\xf1\x8e\x9f\x8b\x50\xdf\xa5" }, + { GCRY_MD_BLAKE2S_256, "?", + "\xdc\x5a\xe7\x1b\xd4\x63\xa1\xf8\x4d\x73\x33\x44\x63\x6b\xa6\x87" + "\xe6\xbd\xf4\xba\xed\xc3\xef\xc8\xb3\x86\x55\xbb\x08\x56\x3e\xdb" }, + { GCRY_MD_BLAKE2S_224, "?", + "\x2e\x34\x7d\x6b\xcc\x80\xbe\xc3\xf8\x61\x35\x6a\x88\x27\xcd\x84" + "\x32\xd4\xd4\x05\xe0\x43\x20\x58\xc7\xb6\xda\xa3" }, + { GCRY_MD_BLAKE2S_160, "?", + "\xaa\x83\xe1\xcd\x8d\x4e\x9c\xb7\xf4\x6b\x43\xe1\xbc\x6f\x73\x3b" + "\x0e\xfc\x29\xde" }, + { GCRY_MD_BLAKE2S_128, "?", + "\x70\x0b\x8a\x71\x1d\x34\x0a\xf0\x13\x93\x19\x93\x5e\xd7\x54\x9c" }, { 0 } }; gcry_error_t err; @@ -7492,11 +7802,16 @@ check_digests (void) check_one_md (algos[i].md, algos[i].data, algos[i].datalen > 0 ? algos[i].datalen : strlen (algos[i].data), - algos[i].expect, algos[i].expectlen); + algos[i].expect, algos[i].expectlen, + algos[i].key, algos[i].keylen); + + if (algos[i].key && algos[i].keylen) + continue; + check_one_md_multi (algos[i].md, algos[i].data, algos[i].datalen > 0 ? algos[i].datalen : strlen (algos[i].data), - algos[i].expect); + algos[i].expect); } /* Check the Whirlpool bug emulation. */ diff --git a/tests/blake2b.h b/tests/blake2b.h new file mode 100644 index 0000000..1bec43b --- /dev/null +++ b/tests/blake2b.h @@ -0,0 +1,1539 @@ +/* Generated from https://raw.githubusercontent.com/BLAKE2/BLAKE2/master/testvectors/blake2-kat.h */ + + /* blake2b_kat[]: */ + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x78\x6a\x02\xf7\x42\x01\x59\x03\xc6\xc6\xfd\x85\x25\x52\xd2\x72" + "\x91\x2f\x47\x40\xe1\x58\x47\x61\x8a\x86\xe2\x17\xf7\x1f\x54\x19" + "\xd2\x5e\x10\x31\xaf\xee\x58\x53\x13\x89\x64\x44\x93\x4e\xb0\x4b" + "\x90\x3a\x68\x5b\x14\x48\xb7\x55\xd5\x6f\x70\x1a\xfe\x9b\xe2\xce", + 0 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x2f\xa3\xf6\x86\xdf\x87\x69\x95\x16\x7e\x7c\x2e\x5d\x74\xc4\xc7" + "\xb6\xe4\x8f\x80\x68\xfe\x0e\x44\x20\x83\x44\xd4\x80\xf7\x90\x4c" + "\x36\x96\x3e\x44\x11\x5f\xe3\xeb\x2a\x3a\xc8\x69\x4c\x28\xbc\xb4" + "\xf5\xa0\xf3\x27\x6f\x2e\x79\x48\x7d\x82\x19\x05\x7a\x50\x6e\x4b", + 1 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x1c\x08\x79\x8d\xc6\x41\xab\xa9\xde\xe4\x35\xe2\x25\x19\xa4\x72" + "\x9a\x09\xb2\xbf\xe0\xff\x00\xef\x2d\xcd\x8e\xd6\xf8\xa0\x7d\x15" + "\xea\xf4\xae\xe5\x2b\xbf\x18\xab\x56\x08\xa6\x19\x0f\x70\xb9\x04" + "\x86\xc8\xa7\xd4\x87\x37\x10\xb1\x11\x5d\x3d\xeb\xbb\x43\x27\xb5", + 2 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x40\xa3\x74\x72\x73\x02\xd9\xa4\x76\x9c\x17\xb5\xf4\x09\xff\x32" + "\xf5\x8a\xa2\x4f\xf1\x22\xd7\x60\x3e\x4f\xda\x15\x09\xe9\x19\xd4" + "\x10\x7a\x52\xc5\x75\x70\xa6\xd9\x4e\x50\x96\x7a\xea\x57\x3b\x11" + "\xf8\x6f\x47\x3f\x53\x75\x65\xc6\x6f\x70\x39\x83\x0a\x85\xd1\x86", + 3 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x77\xdd\xf4\xb1\x44\x25\xeb\x3d\x05\x3c\x1e\x84\xe3\x46\x9d\x92" + "\xc4\xcd\x91\x0e\xd2\x0f\x92\x03\x5e\x0c\x99\xd8\xa7\xa8\x6c\xec" + "\xaf\x69\xf9\x66\x3c\x20\xa7\xaa\x23\x0b\xc8\x2f\x60\xd2\x2f\xb4" + "\xa0\x0b\x09\xd3\xeb\x8f\xc6\x5e\xf5\x47\xfe\x63\xc8\xd3\xdd\xce", + 4 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xcb\xaa\x0b\xa7\xd4\x82\xb1\xf3\x01\x10\x9a\xe4\x10\x51\x99\x1a" + "\x32\x89\xbc\x11\x98\x00\x5a\xf2\x26\xc5\xe4\xf1\x03\xb6\x65\x79" + "\xf4\x61\x36\x10\x44\xc8\xba\x34\x39\xff\x12\xc5\x15\xfb\x29\xc5" + "\x21\x61\xb7\xeb\x9c\x28\x37\xb7\x6a\x5d\xc3\x3f\x7c\xb2\xe2\xe8", + 5 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xf9\x5d\x45\xcf\x69\xaf\x5c\x20\x23\xbd\xb5\x05\x82\x1e\x62\xe8" + "\x5d\x7c\xae\xdf\x7b\xed\xa1\x2c\x02\x48\x77\x5b\x0c\x88\x20\x5e" + "\xeb\x35\xaf\x3a\x90\x81\x6f\x66\x08\xce\x7d\xd4\x4e\xc2\x8d\xb1" + "\x14\x06\x14\xe1\xdd\xeb\xf3\xaa\x9c\xd1\x84\x3e\x0f\xad\x2c\x36", + 6 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x8f\x94\x5b\xa7\x00\xf2\x53\x0e\x5c\x2a\x7d\xf7\xd5\xdc\xe0\xf8" + "\x3f\x9e\xfc\x78\xc0\x73\xfe\x71\xae\x1f\x88\x20\x4a\x4f\xd1\xcf" + "\x70\xa0\x73\xf5\xd1\xf9\x42\xed\x62\x3a\xa1\x6e\x90\xa8\x71\x24" + "\x6c\x90\xc4\x5b\x62\x1b\x34\x01\xa5\xdd\xbd\x9d\xf6\x26\x41\x65", + 7 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xe9\x98\xe0\xdc\x03\xec\x30\xeb\x99\xbb\x6b\xfa\xaf\x66\x18\xac" + "\xc6\x20\x32\x0d\x72\x20\xb3\xaf\x2b\x23\xd1\x12\xd8\xe9\xcb\x12" + "\x62\xf3\xc0\xd6\x0d\x18\x3b\x1e\xe7\xf0\x96\xd1\x2d\xae\x42\xc9" + "\x58\x41\x86\x00\x21\x4d\x04\xf5\xed\x6f\x5e\x71\x8b\xe3\x55\x66", + 8 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x6a\x9a\x09\x0c\x61\xb3\x41\x0a\xed\xe7\xec\x91\x38\x14\x6c\xeb" + "\x2c\x69\x66\x2f\x46\x0c\x3d\xa5\x3c\x65\x15\xc1\xeb\x31\xf4\x1c" + "\xa3\xd2\x80\xe5\x67\x88\x2f\x95\xcf\x66\x4a\x94\x14\x7d\x78\xf4" + "\x2c\xfc\x71\x4a\x40\xd2\x2e\xf1\x94\x70\xe0\x53\x49\x35\x08\xa2", + 9 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x29\x10\x25\x11\xd7\x49\xdb\x3c\xc9\xb4\xe3\x35\xfa\x1f\x5e\x8f" + "\xac\xa8\x42\x1d\x55\x8f\x6a\x3f\x33\x21\xd5\x0d\x04\x4a\x24\x8b" + "\xa5\x95\xcf\xc3\xef\xd3\xd2\xad\xc9\x73\x34\xda\x73\x24\x13\xf5" + "\xcb\xf4\x75\x1c\x36\x2b\xa1\xd5\x38\x62\xac\x1e\x8d\xab\xee\xe8", + 10 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc9\x7a\x47\x79\xd4\x7e\x6f\x77\x72\x9b\x59\x17\xd0\x13\x8a\xbb" + "\x35\x98\x0a\xb6\x41\xbd\x73\xa8\x85\x9e\xb1\xac\x98\xc0\x53\x62" + "\xed\x7d\x60\x8f\x2e\x95\x87\xd6\xba\x9e\x27\x1d\x34\x31\x25\xd4" + "\x0d\x93\x3a\x8e\xd0\x4e\xc1\xfe\x75\xec\x40\x7c\x7a\x53\xc3\x4e", + 11 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x10\xf0\xdc\x91\xb9\xf8\x45\xfb\x95\xfa\xd6\x86\x0e\x6c\xe1\xad" + "\xfa\x00\x2c\x7f\xc3\x27\x11\x6d\x44\xd0\x47\xcd\x7d\x58\x70\xd7" + "\x72\xbb\x12\xb5\xfa\xc0\x0e\x02\xb0\x8a\xc2\xa0\x17\x4d\x04\x46" + "\xc3\x6a\xb3\x5f\x14\xca\x31\x89\x4c\xd6\x1c\x78\xc8\x49\xb4\x8a", + 12 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xde\xa9\x10\x1c\xac\x62\xb8\xf6\xa3\xc6\x50\xf9\x0e\xea\x5b\xfa" + "\xe2\x65\x3a\x4e\xaf\xd6\x3a\x6d\x1f\x0f\x13\x2d\xb9\xe4\xf2\xb1" + "\xb6\x62\x43\x2e\xc8\x5b\x17\xbc\xac\x41\xe7\x75\x63\x78\x81\xf6" + "\xaa\xb3\x8d\xd6\x6d\xcb\xd0\x80\xf0\x99\x0a\x7a\x6e\x98\x54\xfe", + 13 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x44\x1f\xfa\xa0\x8c\xd7\x9d\xff\x4a\xfc\x9b\x9e\x5b\x56\x20\xee" + "\xc0\x86\x73\x0c\x25\xf6\x61\xb1\xd6\xfb\xfb\xd1\xce\xc3\x14\x8d" + "\xd7\x22\x58\xc6\x56\x41\xf2\xfc\xa5\xeb\x15\x5f\xad\xbc\xab\xb1" + "\x3c\x6e\x21\xdc\x11\xfa\xf7\x2c\x2a\x28\x1b\x7d\x56\x14\x5f\x19", + 14 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x44\x4b\x24\x0f\xe3\xed\x86\xd0\xe2\xef\x4c\xe7\xd8\x51\xed\xde" + "\x22\x15\x55\x82\xaa\x09\x14\x79\x7b\x72\x6c\xd0\x58\xb6\xf4\x59" + "\x32\xe0\xe1\x29\x51\x68\x76\x52\x7b\x1d\xd8\x8f\xc6\x6d\x71\x19" + "\xf4\xab\x3b\xed\x93\xa6\x1a\x0e\x2d\x2d\x2a\xea\xc3\x36\xd9\x58", + 15 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xbf\xba\xbb\xef\x45\x55\x4c\xcf\xa0\xdc\x83\x75\x2a\x19\xcc\x35" + "\xd5\x92\x09\x56\xb3\x01\xd5\x58\xd7\x72\x28\x2b\xc8\x67\x00\x91" + "\x68\xe9\xe9\x86\x06\xbb\x5b\xa7\x3a\x38\x5d\xe5\x74\x92\x28\xc9" + "\x25\xa8\x50\x19\xb7\x1f\x72\xfe\x29\xb3\xcd\x37\xca\x52\xef\xe6", + 16 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x9c\x4d\x0c\x3e\x1c\xdb\xbf\x48\x5b\xec\x86\xf4\x1c\xec\x7c\x98" + "\x37\x3f\x0e\x09\xf3\x92\x84\x9a\xaa\x22\x9e\xbf\xbf\x39\x7b\x22" + "\x08\x55\x29\xcb\x7e\xf3\x9f\x9c\x7c\x22\x22\xa5\x14\x18\x2b\x1e" + "\xff\xaa\x17\x8c\xc3\x68\x7b\x1b\x2b\x6c\xbc\xb6\xfd\xeb\x96\xf8", + 17 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x47\x71\x76\xb3\xbf\xcb\xad\xd7\x65\x7c\x23\xc2\x46\x25\xe4\xd0" + "\xd6\x74\xd1\x86\x8f\x00\x60\x06\x39\x8a\xf9\x7a\xa4\x18\x77\xc8" + "\xe7\x0d\x3d\x14\xc3\xbb\xc9\xbb\xcd\xce\xa8\x01\xbd\x0e\x15\x99" + "\xaf\x1f\x3e\xec\x67\x40\x51\x70\xf4\xe2\x6c\x96\x4a\x57\xa8\xb7", + 18 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa7\x8c\x49\x0e\xda\x31\x73\xbb\x3f\x10\xde\xe5\x2f\x11\x0f\xb1" + "\xc0\x8e\x03\x02\x23\x0b\x85\xdd\xd7\xc1\x12\x57\xd9\x2d\xe1\x48" + "\x78\x5e\xf0\x0c\x03\x9c\x0b\xb8\xeb\x98\x08\xa3\x5b\x2d\x8c\x08" + "\x0f\x57\x28\x59\x71\x4c\x9d\x40\x69\xc5\xbc\xaf\x09\x0e\x89\x8e", + 19 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x58\xd0\x23\x39\x7b\xeb\x5b\x41\x45\xcb\x22\x55\xb0\x7d\x74\x29" + "\x0b\x36\xd9\xfd\x1e\x59\x4a\xfb\xd8\xee\xa4\x7c\x20\x5b\x2e\xfb" + "\xfe\x6f\x46\x19\x0f\xaf\x95\xaf\x50\x4a\xb0\x72\xe3\x6f\x6c\x85" + "\xd7\x67\xa3\x21\xbf\xd7\xf2\x26\x87\xa4\xab\xbf\x49\x4a\x68\x9c", + 20 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x40\x01\xec\x74\xd5\xa4\x6f\xd2\x9c\x2c\x3c\xdb\xe5\xd1\xb9\xf2" + "\x0e\x51\xa9\x41\xbe\x98\xd2\xa4\xe1\xe2\xfb\xf8\x66\xa6\x72\x12" + "\x1d\xb6\xf8\x1a\x51\x4c\xfd\x10\xe7\x35\x8d\x57\x1b\xdb\xa4\x8e" + "\x4c\xe7\x08\xb9\xd1\x24\x89\x4b\xc0\xb5\xed\x55\x49\x35\xf7\x3a", + 21 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xcc\xd1\xb2\x2d\xab\x65\x11\x22\x5d\x24\x01\xea\x2d\x86\x25\xd2" + "\x06\xa1\x24\x73\xcc\x73\x2b\x61\x5e\x56\x40\xce\xff\xf0\xa4\xad" + "\xf9\x71\xb0\xe8\x27\xa6\x19\xe0\xa8\x0f\x5d\xb9\xcc\xd0\x96\x23" + "\x29\x01\x0d\x07\xe3\x4a\x20\x64\xe7\x31\xc5\x20\x81\x7b\x21\x83", + 22 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xb4\xa0\xa9\xe3\x57\x4e\xdb\x9e\x1e\x72\xaa\x31\xe3\x9c\xc5\xf3" + "\x0d\xbf\x94\x3f\x8c\xab\xc4\x08\x44\x96\x54\xa3\x91\x31\xe6\x6d" + "\x71\x8a\x18\x81\x91\x43\xe3\xea\x96\xb4\xa1\x89\x59\x88\xa1\xc0" + "\x05\x6c\xf2\xb6\xe0\x4f\x9a\xc1\x9d\x65\x73\x83\xc2\x91\x0c\x44", + 23 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x44\x7b\xec\xab\x16\x63\x06\x08\xd3\x9f\x4f\x05\x8b\x16\xf7\xaf" + "\x95\xb8\x5a\x76\xaa\x0f\xa7\xce\xa2\xb8\x07\x55\xfb\x76\xe9\xc8" + "\x04\xf2\xca\x78\xf0\x26\x43\xc9\x15\xfb\xf2\xfc\xe5\xe1\x9d\xe8" + "\x60\x00\xde\x03\xb1\x88\x61\x81\x5a\x83\x12\x60\x71\xf8\xa3\x7b", + 24 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x54\xe6\xda\xb9\x97\x73\x80\xa5\x66\x58\x22\xdb\x93\x37\x4e\xda" + "\x52\x8d\x9b\xeb\x62\x6f\x9b\x94\x02\x70\x71\xcb\x26\x67\x5e\x11" + "\x2b\x4a\x7f\xec\x94\x1e\xe6\x0a\x81\xe4\xd2\xea\x3f\xf7\xbc\x52" + "\xcf\xc4\x5d\xfb\xfe\x73\x5a\x1c\x64\x6b\x2c\xf6\xd6\xa4\x9b\x62", + 25 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x3e\xa6\x26\x25\x94\x9e\x36\x46\x70\x4d\x7e\x3c\x90\x6f\x82\xf6" + "\xc0\x28\xf5\x40\xf5\xf7\x2a\x79\x4b\x0c\x57\xbf\x97\xb7\x64\x9b" + "\xfe\xb9\x0b\x01\xd3\xca\x3e\x82\x9d\xe2\x1b\x38\x26\xe6\xf8\x70" + "\x14\xd3\xc7\x73\x50\xcb\x5a\x15\xff\x5d\x46\x8a\x81\xbe\xc1\x60", + 26 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x21\x3c\xfe\x14\x5c\x54\xa3\x36\x91\x56\x99\x80\xe5\x93\x8c\x88" + "\x83\xa4\x6d\x84\xd1\x49\xc8\xff\x1a\x67\xcd\x28\x7b\x4d\x49\xc6" + "\xda\x69\xd3\xa0\x35\x44\x3d\xb0\x85\x98\x3d\x0e\xfe\x63\x70\x6b" + "\xd5\xb6\xf1\x5a\x7d\xa4\x59\xe8\xd5\x0a\x19\x09\x3d\xb5\x5e\x80", + 27 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x57\x16\xc4\xa3\x8f\x38\xdb\x10\x4e\x49\x4a\x0a\x27\xcb\xe8\x9a" + "\x26\xa6\xbb\x6f\x49\x9e\xc0\x1c\x8c\x01\xaa\x7c\xb8\x84\x97\xe7" + "\x51\x48\xcd\x6e\xee\x12\xa7\x16\x8b\x6f\x78\xab\x74\xe4\xbe\x74" + "\x92\x51\xa1\xa7\x4c\x38\xc8\x6d\x61\x29\x17\x7e\x28\x89\xe0\xb6", + 28 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x03\x04\x60\xa9\x8b\xdf\x9f\xf1\x7c\xd9\x64\x04\xf2\x8f\xc3\x04" + "\xf2\xb7\xc0\x4e\xaa\xde\x53\x67\x7f\xd2\x8f\x78\x8c\xa2\x21\x86" + "\xb8\xbc\x80\xdd\x21\xd1\x7f\x85\x49\xc7\x11\xaf\xf0\xe5\x14\xe1" + "\x9d\x4e\x15\xf5\x99\x02\x52\xa0\x3e\x08\x2f\x28\xdc\x20\x52\xf6", + 29 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x19\xe7\xf1\xcc\xee\x88\xa1\x06\x72\x33\x3e\x39\x0c\xf2\x20\x13" + "\xa8\xc7\x34\xc6\xcb\x9e\xab\x41\xf1\x7c\x3c\x80\x32\xa2\xe4\xac" + "\xa0\x56\x9e\xa3\x6f\x08\x60\xc7\xa1\xaf\x28\xfa\x47\x68\x40\xd6" + "\x60\x11\x16\x88\x59\x33\x4a\x9e\x4e\xf9\xcc\x2e\x61\xa0\xe2\x9e", + 30 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x29\xf8\xb8\xc7\x8c\x80\xf2\xfc\xb4\xbd\xf7\x82\x5e\xd9\x0a\x70" + "\xd6\x25\xff\x78\x5d\x26\x26\x77\xe2\x50\xc0\x4f\x37\x20\xc8\x88" + "\xd0\x3f\x80\x45\xe4\xed\xf3\xf5\x28\x5b\xd3\x9d\x92\x8a\x10\xa7" + "\xd0\xa5\xdf\x00\xb8\x48\x4a\xc2\x86\x81\x42\xa1\xe8\xbe\xa3\x51", + 31 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x5c\x52\x92\x0a\x72\x63\xe3\x9d\x57\x92\x0c\xa0\xcb\x75\x2a\xc6" + "\xd7\x9a\x04\xfe\xf8\xa7\xa2\x16\xa1\xec\xb7\x11\x5c\xe0\x6d\x89" + "\xfd\x7d\x73\x5b\xd6\xf4\x27\x25\x55\xdb\xa2\x2c\x2d\x1c\x96\xe6" + "\x35\x23\x22\xc6\x2c\x56\x30\xfd\xe0\xf4\x77\x7a\x76\xc3\xde\x2c", + 32 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x83\xb0\x98\xf2\x62\x25\x1b\xf6\x60\x06\x4a\x9d\x35\x11\xce\x76" + "\x87\xa0\x9e\x6d\xfb\xb8\x78\x29\x9c\x30\xe9\x3d\xfb\x43\xa9\x31" + "\x4d\xb9\xa6\x00\x33\x7d\xb2\x6e\xbe\xed\xaf\x22\x56\xa9\x6d\xab" + "\xe9\xb2\x9e\x75\x73\xad\x11\xc3\x52\x3d\x87\x4d\xde\x5b\xe7\xed", + 33 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x94\x47\xd9\x8a\xa5\xc9\x33\x13\x52\xf4\x3d\x3e\x56\xd0\xa9\xa9" + "\xf9\x58\x18\x65\x99\x8e\x28\x85\xcc\x56\xdd\x0a\x0b\xd5\xa7\xb5" + "\x05\x95\xbd\x10\xf7\x52\x9b\xcd\x31\xf3\x7d\xc1\x6a\x14\x65\xd5" + "\x94\x07\x96\x67\xda\x2a\x3f\xcb\x70\x40\x14\x98\x83\x7c\xed\xeb", + 34 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x86\x77\x32\xf2\xfe\xeb\x23\x89\x30\x97\x56\x1a\xc7\x10\xa4\xbf" + "\xf4\x53\xbe\x9c\xfb\xed\xba\x8b\xa3\x24\xf9\xd3\x12\xa8\x2d\x73" + "\x2e\x1b\x83\xb8\x29\xfd\xcd\x17\x7b\x88\x2c\xa0\xc1\xbf\x54\x4b" + "\x22\x3b\xe5\x29\x92\x4a\x24\x6a\x63\xcf\x05\x9b\xfd\xc5\x0a\x1b", + 35 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xf1\x5a\xb2\x6d\x4c\xdf\xcf\x56\xe1\x96\xbb\x6b\xa1\x70\xa8\xfc" + "\xcc\x41\x4d\xe9\x28\x5a\xfd\x98\xa3\xd3\xcf\x2f\xb8\x8f\xcb\xc0" + "\xf1\x98\x32\xac\x43\x3a\x5b\x2c\xc2\x39\x2a\x4c\xe3\x43\x32\x98" + "\x7d\x8d\x2c\x2b\xef\x6c\x34\x66\x13\x8d\xb0\xc6\xe4\x2f\xa4\x7b", + 36 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x28\x13\x51\x6d\x68\xed\x4a\x08\xb3\x9d\x64\x8a\xa6\xaa\xcd\x81" + "\xe9\xd6\x55\xec\xd5\xf0\xc1\x35\x56\xc6\x0f\xdf\x0d\x33\x3e\xa3" + "\x84\x64\xb3\x6c\x02\xba\xcc\xd7\x46\xe9\x57\x5e\x96\xc6\x30\x14" + "\xf0\x74\xae\x34\xa0\xa2\x5b\x32\x0f\x0f\xbe\xdd\x6a\xcf\x76\x65", + 37 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xd3\x25\x9a\xfc\xa8\xa4\x89\x62\xfa\x89\x2e\x14\x5a\xcf\x54\x7f" + "\x26\x92\x3a\xe8\xd4\x92\x4c\x8a\x53\x15\x81\x52\x6b\x04\xb4\x4c" + "\x7a\xf8\x3c\x64\x3e\xf5\xa0\xbc\x28\x2d\x36\xf3\xfb\x04\xc8\x4e" + "\x28\xb3\x51\xf4\x0c\x74\xb6\x9d\xc7\x84\x0b\xc7\x17\xb6\xf1\x5f", + 38 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xf1\x4b\x06\x1a\xe3\x59\xfa\x31\xb9\x89\xe3\x03\x32\xbf\xe8\xde" + "\x8c\xc8\xcd\xb5\x68\xe1\x4b\xe2\x14\xa2\x22\x3b\x84\xca\xab\x74" + "\x19\x54\x9e\xcf\xcc\x96\xce\x2a\xce\xc1\x19\x48\x5d\x87\xd1\x57" + "\xd3\xa8\x73\x4f\xc4\x26\x59\x7d\x64\xf3\x65\x70\xce\xaf\x22\x4d", + 39 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x55\xe7\x0b\x01\xd1\xfb\xf8\xb2\x3b\x57\xfb\x62\xe2\x6c\x2c\xe5" + "\x4f\x13\xf8\xfa\x24\x64\xe6\xeb\x98\xd1\x6a\x61\x17\x02\x6d\x8b" + "\x90\x81\x90\x12\x49\x6d\x40\x71\xeb\xe2\xe5\x95\x57\xec\xe3\x51" + "\x9a\x7a\xa4\x58\x02\xf9\x61\x53\x74\x87\x73\x32\xb7\x34\x90\xb3", + 40 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x25\x26\x1e\xb2\x96\x97\x1d\x6e\x4a\x71\xb2\x92\x8e\x64\x83\x9c" + "\x67\xd4\x22\x87\x2b\xf9\xf3\xc3\x19\x93\x61\x52\x22\xde\x9f\x8f" + "\x0b\x2c\x4b\xe8\x54\x85\x59\xb4\xb3\x54\xe7\x36\x41\x6e\x32\x18" + "\xd4\xe8\xa1\xe2\x19\xa4\xa6\xd4\x3e\x1a\x9a\x52\x1d\x0e\x75\xfc", + 41 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x08\x30\x7f\x34\x7c\x41\x29\x4e\x34\xbb\x54\xcb\x42\xb1\x52\x2d" + "\x22\xf8\x24\xf7\xb6\xe5\xdb\x50\xfd\xa0\x96\x79\x8e\x18\x1a\x8f" + "\x02\x6f\xa2\x7b\x4a\xe4\x5d\x52\xa6\x2c\xaf\x9d\x51\x98\xe2\x4a" + "\x49\x13\xc6\x67\x17\x75\xb2\xd7\x23\xc1\x23\x9b\xfb\xf0\x16\xd7", + 42 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x1e\x5c\x62\xe7\xe9\xbf\xa1\xb1\x18\x74\x7a\x2d\xe0\x8b\x3c\xa1" + "\x01\x12\xaf\x96\xa4\x6e\x4b\x22\xc3\xfc\x06\xf9\xbf\xee\x4e\xb5" + "\xc4\x9e\x05\x7a\x4a\x48\x86\x23\x43\x24\x57\x25\x76\xbb\x9b\x5e" + "\xcf\xde\x0d\x99\xb0\xde\x4f\x98\xec\x16\xe4\xd1\xb8\x5f\xa9\x47", + 43 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc7\x4a\x77\x39\x5f\xb8\xbc\x12\x64\x47\x45\x48\x38\xe5\x61\xe9" + "\x62\x85\x3d\xc7\xeb\x49\xa1\xe3\xcb\x67\xc3\xd0\x85\x1f\x3e\x39" + "\x51\x7b\xe8\xc3\x50\xac\x91\x09\x03\xd4\x9c\xd2\xbf\xdf\x54\x5c" + "\x99\x31\x6d\x03\x46\x17\x0b\x73\x9f\x0a\xdd\x5d\x53\x3c\x2c\xfc", + 44 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x0d\xd5\x7b\x42\x3c\xc0\x1e\xb2\x86\x13\x91\xeb\x88\x6a\x0d\x17" + "\x07\x9b\x93\x3f\xc7\x6e\xb3\xfc\x08\xa1\x9f\x8a\x74\x95\x2c\xb6" + "\x8f\x6b\xcd\xc6\x44\xf7\x73\x70\x96\x6e\x4d\x13\xe8\x05\x60\xbc" + "\xf0\x82\xef\x04\x79\xd4\x8f\xbb\xab\x4d\xf0\x3b\x53\xa4\xe1\x78", + 45 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x4d\x8d\xc3\x92\x3e\xdc\xcd\xfc\xe7\x00\x72\x39\x8b\x8a\x3d\xa5" + "\xc3\x1f\xcb\x3e\xe3\xb6\x45\xc8\x5f\x71\x7c\xba\xeb\x4b\x67\x3a" + "\x19\x39\x44\x25\xa5\x85\xbf\xb4\x64\xd9\x2f\x15\x97\xd0\xb7\x54" + "\xd1\x63\xf9\x7c\xed\x34\x3b\x25\xdb\x5a\x70\xef\x48\xeb\xb3\x4f", + 46 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xf0\xa5\x05\x53\xe4\xdf\xb0\xc4\xe3\xe3\xd3\xba\x82\x03\x48\x57" + "\xe3\xb1\xe5\x09\x18\xf5\xb8\xa7\xd6\x98\xe1\x0d\x24\x2b\x0f\xb5" + "\x44\xaf\x6c\x92\xd0\xc3\xaa\xf9\x93\x22\x20\x41\x61\x17\xb4\xe7" + "\x8e\xcb\x8a\x8f\x43\x0e\x13\xb8\x2a\x59\x15\x29\x0a\x58\x19\xc5", + 47 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xb1\x55\x43\xf3\xf7\x36\x08\x66\x27\xcc\x53\x65\xe7\xe8\x98\x8c" + "\x2e\xf1\x55\xc0\xfd\x4f\x42\x89\x61\xb0\x0d\x15\x26\xf0\x4d\x6d" + "\x6a\x65\x8b\x4b\x8e\xd3\x2c\x5d\x86\x21\xe7\xf4\xf8\xe8\xa9\x33" + "\xd9\xec\xc9\xdd\x1b\x83\x33\xcb\xe2\x8c\xfc\x37\xd9\x71\x9e\x1c", + 48 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x7b\x4f\xa1\x58\xe4\x15\xfe\xf0\x23\x24\x72\x64\xcb\xbe\x15\xd1" + "\x6d\x91\xa4\x44\x24\xa8\xdb\x70\x7e\xb1\xe2\x03\x3c\x30\xe9\xe1" + "\xe7\xc8\xc0\x86\x45\x95\xd2\xcb\x8c\x58\x0e\xb4\x7e\x9d\x16\xab" + "\xbd\x7e\x44\xe8\x24\xf7\xce\xdb\x7d\xef\x57\x13\x0e\x52\xcf\xe9", + 49 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x60\x42\x4f\xf2\x32\x34\xc3\x4d\xc9\x68\x7a\xd5\x02\x86\x93\x72" + "\xcc\x31\xa5\x93\x80\x18\x6b\xc2\x36\x1c\x83\x5d\x97\x2f\x49\x66" + "\x6e\xb1\xac\x69\x62\x9d\xe6\x46\xf0\x3f\x9b\x4d\xb9\xe2\xac\xe0" + "\x93\xfb\xfd\xf8\xf2\x0a\xb5\xf9\x85\x41\x97\x8b\xe8\xef\x54\x9f", + 50 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x74\x06\x01\x8c\xe7\x04\xd8\x4f\x5e\xb9\xc7\x9f\xea\x97\xda\x34" + "\x56\x99\x46\x8a\x35\x0e\xe0\xb2\xd0\xf3\xa4\xbf\x20\x70\x30\x4e" + "\xa8\x62\xd7\x2a\x51\xc5\x7d\x30\x64\x94\x72\x86\xf5\x31\xe0\xea" + "\xf7\x56\x37\x02\x26\x2e\x6c\x72\x4a\xbf\x5e\xd8\xc8\x39\x8d\x17", + 51 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x14\xef\x5c\x6d\x64\x7b\x3b\xd1\xe6\xe3\x20\x06\xc2\x31\x19\x98" + "\x10\xde\x5c\x4d\xc8\x8e\x70\x24\x02\x73\xb0\xea\x18\xe6\x51\xa3" + "\xeb\x4f\x5c\xa3\x11\x4b\x8a\x56\x71\x69\x69\xc7\xcd\xa2\x7e\x0c" + "\x8d\xb8\x32\xad\x5e\x89\xa2\xdc\x6c\xb0\xad\xbe\x7d\x93\xab\xd1", + 52 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x38\xcf\x6c\x24\xe3\xe0\x8b\xcf\x1f\x6c\xf3\xd1\xb1\xf6\x5b\x90" + "\x52\x39\xa3\x11\x80\x33\x24\x9e\x44\x81\x13\xec\x63\x2e\xa6\xdc" + "\x34\x6f\xee\xb2\x57\x1c\x38\xbd\x9a\x73\x98\xb2\x22\x12\x80\x32" + "\x80\x02\xb2\x3e\x1a\x45\xad\xaf\xfe\x66\xd9\x3f\x65\x64\xea\xa2", + 53 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x6c\xd7\x20\x8a\x4b\xc7\xe7\xe5\x62\x01\xbb\xba\x02\xa0\xf4\x89" + "\xcd\x38\x4a\xbe\x40\xaf\xd4\x22\x2f\x15\x8b\x3d\x98\x6e\xe7\x2a" + "\x54\xc5\x0f\xb6\x4f\xd4\xed\x25\x30\xed\xa2\xc8\xaf\x29\x28\xa0" + "\xda\x6d\x4f\x83\x0a\xe1\xc9\xdb\x46\x9d\xfd\x97\x0f\x12\xa5\x6f", + 54 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x65\x98\x58\xf0\xb5\xc9\xed\xab\x5b\x94\xfd\x73\x2f\x6e\x6b\x17" + "\xc5\x1c\xc0\x96\x10\x4f\x09\xbe\xb3\xaf\xc3\xaa\x46\x7c\x2e\xcf" + "\x88\x5c\x4c\x65\x41\xef\xfa\x90\x23\xd3\xb5\x73\x8a\xe5\xa1\x4d" + "\x86\x7e\x15\xdb\x06\xfe\x1f\x9d\x11\x27\xb7\x7e\x1a\xab\xb5\x16", + 55 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x26\xcc\xa0\x12\x6f\x5d\x1a\x81\x3c\x62\xe5\xc7\x10\x01\xc0\x46" + "\xf9\xc9\x20\x95\x70\x45\x50\xbe\x58\x73\xa4\x95\xa9\x99\xad\x01" + "\x0a\x4f\x79\x49\x1f\x24\xf2\x86\x50\x0a\xdc\xe1\xa1\x37\xbc\x20" + "\x84\xe4\x94\x9f\x5b\x72\x94\xce\xfe\x51\xec\xaf\xf8\xe9\x5c\xba", + 56 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x41\x47\xc1\xf5\x51\x72\x78\x8c\x55\x67\xc5\x61\xfe\xef\x87\x6f" + "\x62\x1f\xff\x1c\xe8\x77\x86\xb8\x46\x76\x37\xe7\x0d\xfb\xcd\x0d" + "\xbd\xb6\x41\x5c\xb6\x00\x95\x4a\xb9\xc0\x4c\x0e\x45\x7e\x62\x5b" + "\x40\x72\x22\xc0\xfe\x1a\xe2\x1b\x21\x43\x68\x8a\xda\x94\xdc\x58", + 57 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x5b\x1b\xf1\x54\xc6\x2a\x8a\xf6\xe9\x3d\x35\xf1\x8f\x7f\x90\xab" + "\xb1\x6a\x6e\xf0\xe8\xd1\xae\xcd\x11\x8b\xf7\x01\x67\xba\xb2\xaf" + "\x08\x93\x5c\x6f\xdc\x06\x63\xce\x74\x48\x2d\x17\xa8\xe5\x4b\x54" + "\x6d\x1c\x29\x66\x31\xc6\x5f\x3b\x52\x2a\x51\x58\x39\xd4\x3d\x71", + 58 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x9f\x60\x04\x19\xa4\xe8\xf4\xfb\x83\x4c\x24\xb0\xf7\xfc\x13\xbf" + "\x4e\x27\x9d\x98\xe8\xa3\xc7\x65\xee\x93\x49\x17\x40\x3e\x3a\x66" + "\x09\x71\x82\xea\x21\x45\x3c\xb6\x3e\xbb\xe8\xb7\x3a\x9c\x21\x67" + "\x59\x64\x46\x43\x8c\x57\x62\x7f\x33\x0b\xad\xd4\xf5\x69\xf7\xd6", + 59 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x45\x7e\xf6\x46\x6a\x89\x24\xfd\x80\x11\xa3\x44\x71\xa5\xa1\xac" + "\x8c\xcd\x9b\xd0\xd0\x7a\x97\x41\x4a\xc9\x43\x02\x1c\xe4\xb9\xe4" + "\xb9\xc8\xdb\x0a\x28\xf0\x16\xed\x43\xb1\x54\x24\x81\x99\x00\x22" + "\x14\x7b\x31\x3e\x19\x46\x71\x13\x1e\x70\x8d\xd4\x3a\x3e\xd7\xdc", + 60 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x99\x97\xb2\x19\x4d\x9a\xf6\xdf\xcb\x91\x43\xf4\x1c\x0e\xd8\x3d" + "\x3a\x3f\x43\x88\x36\x11\x03\xd3\x8c\x2a\x49\xb2\x80\xa5\x81\x21" + "\x27\x15\xfd\x90\x8d\x41\xc6\x51\xf5\xc7\x15\xca\x38\xc0\xce\x28" + "\x30\xa3\x7e\x00\xe5\x08\xce\xd1\xbc\xdc\x32\x0e\x5e\x4d\x1e\x2e", + 61 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x5c\x6b\xbf\x16\xba\xa1\x80\xf9\x86\xbd\x40\xa1\x28\x7e\xd4\xc5" + "\x49\x77\x0e\x72\x84\x85\x8f\xc4\x7b\xc2\x1a\xb9\x5e\xbb\xf3\x37" + "\x4b\x4e\xe3\xfd\x9f\x2a\xf6\x0f\x33\x95\x22\x1b\x2a\xcc\x76\xf2" + "\xd3\x4c\x13\x29\x54\x04\x9f\x8a\x3a\x99\x6f\x1e\x32\xec\x84\xe5", + 62 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xd1\x0b\xf9\xa1\x5b\x1c\x9f\xc8\xd4\x1f\x89\xbb\x14\x0b\xf0\xbe" + "\x08\xd2\xf3\x66\x61\x76\xd1\x3b\xaa\xc4\xd3\x81\x35\x8a\xd0\x74" + "\xc9\xd4\x74\x8c\x30\x05\x20\xeb\x02\x6d\xae\xae\xa7\xc5\xb1\x58" + "\x89\x2f\xde\x4e\x8e\xc1\x7d\xc9\x98\xdc\xd5\x07\xdf\x26\xeb\x63", + 63 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x2f\xc6\xe6\x9f\xa2\x6a\x89\xa5\xed\x26\x90\x92\xcb\x9b\x2a\x44" + "\x9a\x44\x09\xa7\xa4\x40\x11\xee\xca\xd1\x3d\x7c\x4b\x04\x56\x60" + "\x2d\x40\x2f\xa5\x84\x4f\x1a\x7a\x75\x81\x36\xce\x3d\x5d\x8d\x0e" + "\x8b\x86\x92\x1f\xff\xf4\xf6\x92\xdd\x95\xbd\xc8\xe5\xff\x00\x52", + 64 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xfc\xbe\x8b\xe7\xdc\xb4\x9a\x32\xdb\xdf\x23\x94\x59\xe2\x63\x08" + "\xb8\x4d\xff\x1e\xa4\x80\xdf\x8d\x10\x4e\xef\xf3\x4b\x46\xfa\xe9" + "\x86\x27\xb4\x50\xc2\x26\x7d\x48\xc0\x94\x6a\x69\x7c\x5b\x59\x53" + "\x14\x52\xac\x04\x84\xf1\xc8\x4e\x3a\x33\xd0\xc3\x39\xbb\x2e\x28", + 65 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa1\x90\x93\xa6\xe3\xbc\xf5\x95\x2f\x85\x0f\x20\x30\xf6\x9b\x96" + "\x06\xf1\x47\xf9\x0b\x8b\xae\xe3\x36\x2d\xa7\x1d\x9f\x35\xb4\x4e" + "\xf9\xd8\xf0\xa7\x71\x2b\xa1\x87\x7f\xdd\xcd\x2d\x8e\xa8\xf1\xe5" + "\xa7\x73\xd0\xb7\x45\xd4\x72\x56\x05\x98\x3a\x2d\xe9\x01\xf8\x03", + 66 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x3c\x20\x06\x42\x3f\x73\xe2\x68\xfa\x59\xd2\x92\x03\x77\xeb\x29" + "\xa4\xf9\xa8\xb4\x62\xbe\x15\x98\x3e\xe3\xb8\x5a\xe8\xa7\x8e\x99" + "\x26\x33\x58\x1a\x90\x99\x89\x3b\x63\xdb\x30\x24\x1c\x34\xf6\x43" + "\x02\x7d\xc8\x78\x27\x9a\xf5\x85\x0d\x7e\x2d\x4a\x26\x53\x07\x3a", + 67 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xd0\xf2\xf2\xe3\x78\x76\x53\xf7\x7c\xce\x2f\xa2\x48\x35\x78\x5b" + "\xbd\x0c\x43\x3f\xc7\x79\x46\x5a\x11\x51\x49\x90\x5a\x9d\xd1\xcb" + "\x82\x7a\x62\x85\x06\xd4\x57\xfc\xf1\x24\xa0\xc2\xae\xf9\xce\x2d" + "\x2a\x0a\x0f\x63\x54\x55\x70\xd8\x66\x7f\xf9\xe2\xeb\xa0\x73\x34", + 68 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x78\xa9\xfc\x04\x8e\x25\xc6\xdc\xb5\xde\x45\x66\x7d\xe8\xff\xdd" + "\x3a\x93\x71\x11\x41\xd5\x94\xe9\xfa\x62\xa9\x59\x47\x5d\xa6\x07" + "\x5e\xa8\xf0\x91\x6e\x84\xe4\x5a\xd9\x11\xb7\x54\x67\x07\x7e\xe5" + "\x2d\x2c\x9a\xeb\xf4\xd5\x8f\x20\xce\x4a\x3a\x00\x45\x8b\x05\xd4", + 69 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x45\x81\x3f\x44\x17\x69\xab\x6e\xd3\x7d\x34\x9f\xf6\xe7\x22\x67" + "\xd7\x6a\xe6\xbb\x3e\x3c\x61\x2e\xc0\x5c\x6e\x02\xa1\x2a\xf5\xa3" + "\x7c\x91\x8b\x52\xbf\x74\x26\x7c\x3f\x6a\x3f\x18\x3a\x80\x64\xff" + "\x84\xc0\x7b\x19\x3d\x08\x06\x67\x89\xa0\x1a\xcc\xdb\x6f\x93\x40", + 70 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x95\x6d\xa1\xc6\x8d\x83\xa7\xb8\x81\xe0\x1b\x9a\x96\x6c\x3c\x0b" + "\xf2\x7f\x68\x60\x6a\x8b\x71\xd4\x57\xbd\x01\x6d\x4c\x41\xdd\x8a" + "\x38\x0c\x70\x9a\x29\x6c\xb4\xc6\x54\x47\x92\x92\x0f\xd7\x88\x83" + "\x57\x71\xa0\x7d\x4a\x16\xfb\x52\xed\x48\x05\x03\x31\xdc\x4c\x8b", + 71 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xdf\x18\x6c\x2d\xc0\x9c\xaa\x48\xe1\x4e\x94\x2f\x75\xde\x5a\xc1" + "\xb7\xa2\x1e\x4f\x9f\x07\x2a\x5b\x37\x1e\x09\xe0\x73\x45\xb0\x74" + "\x0c\x76\x17\x7b\x01\x27\x88\x08\xfe\xc0\x25\xed\xed\x98\x22\xc1" + "\x22\xaf\xd1\xc6\x3e\x6f\x0c\xe2\xe3\x26\x31\x04\x10\x63\x14\x5c", + 72 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x87\x47\x56\x40\x96\x6a\x9f\xdc\xd6\xd3\xa3\xb5\xa2\xcc\xa5\xc0" + "\x8f\x0d\x88\x2b\x10\x24\x3c\x0e\xc1\xbf\x3c\x6b\x1c\x37\xf2\xcd" + "\x32\x12\xf1\x9a\x05\x78\x64\x47\x7d\x5e\xaf\x8f\xae\xd7\x3f\x29" + "\x37\xc7\x68\xa0\xaf\x41\x5e\x84\xbb\xce\x6b\xd7\xde\x23\xb6\x60", + 73 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc3\xb5\x73\xbb\xe1\x09\x49\xa0\xfb\xd4\xff\x88\x4c\x44\x6f\x22" + "\x29\xb7\x69\x02\xf9\xdf\xdb\xb8\xa0\x35\x3d\xa5\xc8\x3c\xa1\x4e" + "\x81\x51\xbb\xaa\xc8\x2f\xd1\x57\x6a\x00\x9a\xdc\x6f\x19\x35\xcf" + "\x26\xed\xd4\xf1\xfb\x8d\xa4\x83\xe6\xc5\xcd\x9d\x89\x23\xad\xc3", + 74 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xb0\x9d\x8d\x0b\xba\x8a\x72\x86\xe4\x35\x68\xf7\x90\x75\x50\xe4" + "\x20\x36\xd6\x74\xe3\xc8\xfc\x34\xd8\xca\x46\xf7\x71\xd6\x46\x6b" + "\x70\xfb\x60\x58\x75\xf6\xa8\x63\xc8\x77\xd1\x2f\x07\x06\x3f\xdc" + "\x2e\x90\xcc\xd4\x59\xb1\x91\x0d\xcd\x52\xd8\xf1\x0b\x2b\x0a\x15", + 75 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xaf\x3a\x22\xbf\x75\xb2\x1a\xbf\xb0\xac\xd5\x44\x22\xba\x1b\x73" + "\x00\xa9\x52\xef\xf0\x2e\xbe\xb6\x5b\x5c\x23\x44\x71\xa9\x8d\xf3" + "\x2f\x4f\x96\x43\xce\x19\x04\x10\x8a\x16\x87\x67\x92\x42\x80\xbd" + "\x76\xc8\x3f\x8c\x82\xd9\xa7\x9d\x92\x59\xb1\x95\x36\x2a\x2a\x04", + 76 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xbf\x4f\xf2\x22\x1b\x7e\x69\x57\xa7\x24\xcd\x96\x4a\xa3\xd5\xd0" + "\xd9\x94\x1f\x54\x04\x13\x75\x2f\x46\x99\xd8\x10\x1b\x3e\x53\x75" + "\x08\xbf\x09\xf8\x50\x8b\x31\x77\x36\xff\xd2\x65\xf2\x84\x7a\xa7" + "\xd8\x4b\xd2\xd9\x75\x69\xc4\x9d\x63\x2a\xed\x99\x45\xe5\xfa\x5e", + 77 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x9c\x6b\x6b\x78\x19\x9b\x1b\xda\xcb\x43\x00\xe3\x14\x79\xfa\x62" + "\x2a\x6b\x5b\xc8\x0d\x46\x78\xa6\x07\x8f\x88\xa8\x26\x8c\xd7\x20" + "\x6a\x27\x99\xe8\xd4\x62\x1a\x46\x4e\xf6\xb4\x3d\xd8\xad\xff\xe9" + "\x7c\xaf\x22\x1b\x22\xb6\xb8\x77\x8b\x14\x9a\x82\x2a\xef\xbb\x09", + 78 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x89\x06\x56\xf0\x9c\x99\xd2\x80\xb5\xec\xb3\x81\xf5\x64\x27\xb8" + "\x13\x75\x1b\xc6\x52\xc7\x82\x80\x78\xb2\x3a\x4a\xf8\x3b\x4e\x3a" + "\x61\xfd\xba\xc6\x1f\x89\xbe\xe8\x4e\xa6\xbe\xe7\x60\xc0\x47\xf2" + "\x5c\x6b\x0a\x20\x1c\x69\xa3\x8f\xd6\xfd\x97\x1a\xf1\x85\x88\xbb", + 79 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x31\xa0\x46\xf7\x88\x2f\xfe\x6f\x83\xce\x47\x2e\x9a\x07\x01\x83" + "\x2e\xc7\xb3\xf7\x6f\xbc\xfd\x1d\xf6\x0f\xe3\xea\x48\xfd\xe1\x65" + "\x12\x54\x24\x7c\x3f\xd9\x5e\x10\x0f\x91\x72\x73\x1e\x17\xfd\x52" + "\x97\xc1\x1f\x4b\xb3\x28\x36\x3c\xa3\x61\x62\x4a\x81\xaf\x79\x7c", + 80 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x27\xa6\x0b\x2d\x00\xe7\xa6\x71\xd4\x7d\x0a\xec\x2a\x68\x6a\x0a" + "\xc0\x4b\x52\xf4\x0a\xb6\x62\x90\x28\xeb\x7d\x13\xf4\xba\xa9\x9a" + "\xc0\xfe\x46\xee\x6c\x81\x49\x44\xf2\xf4\xb4\xd2\x0e\x93\x78\xe4" + "\x84\x7e\xa4\x4c\x13\x17\x80\x91\xe2\x77\xb8\x7e\xa7\xa5\x57\x11", + 81 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x8b\x5c\xce\xf1\x94\x16\x2c\x1f\x19\xd6\x8f\x91\xe0\xb0\x92\x8f" + "\x28\x9e\xc5\x28\x37\x20\x84\x0c\x2f\x73\xd2\x53\x11\x12\x38\xdc" + "\xfe\x94\xaf\x2b\x59\xc2\xc1\xca\x25\x91\x90\x1a\x7b\xc0\x60\xe7" + "\x45\x9b\x6c\x47\xdf\x0f\x71\x70\x1a\x35\xcc\x0a\xa8\x31\xb5\xb6", + 82 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x57\xab\x6c\x4b\x22\x29\xae\xb3\xb7\x04\x76\xd8\x03\xcd\x63\x81" + "\x2f\x10\x7c\xe6\xda\x17\xfe\xd9\xb1\x78\x75\xe8\xf8\x6c\x72\x4f" + "\x49\xe0\x24\xcb\xf3\xa1\xb8\xb1\x19\xc5\x03\x57\x65\x2b\x81\x87" + "\x9d\x2a\xde\x2d\x58\x8b\x9e\x4f\x7c\xed\xba\x0e\x46\x44\xc9\xee", + 83 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x01\x90\xa8\xda\xc3\x20\xa7\x39\xf3\x22\xe1\x57\x31\xaa\x14\x0d" + "\xda\xf5\xbe\xd2\x94\xd5\xc8\x2e\x54\xfe\xf2\x9f\x21\x4e\x18\xaa" + "\xfa\xa8\x4f\x8b\xe9\x9a\xf6\x29\x50\x26\x6b\x8f\x90\x1f\x15\xdd" + "\x4c\x5d\x35\x51\x6f\xc3\x5b\x4c\xab\x2e\x96\xe4\x69\x5b\xbe\x1c", + 84 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xd1\x4d\x7c\x4c\x41\x5e\xeb\x0e\x10\xb1\x59\x22\x4b\xea\x12\x7e" + "\xbd\x84\xf9\x59\x1c\x70\x2a\x33\x0f\x5b\xb7\xbb\x7a\xa4\x4e\xa3" + "\x9d\xe6\xed\x01\xf1\x8d\xa7\xad\xf4\x0c\xfb\x97\xc5\xd1\x52\xc2" + "\x75\x28\x82\x4b\x21\xe2\x39\x52\x6a\xf8\xf3\x6b\x21\x4e\x0c\xfb", + 85 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xbe\x28\xc4\xbe\x70\x69\x70\x48\x8f\xac\x7d\x29\xc3\xbd\x5c\x4e" + "\x98\x60\x85\xc4\xc3\x33\x2f\x1f\x3f\xd3\x09\x73\xdb\x61\x41\x64" + "\xba\x2f\x31\xa7\x88\x75\xff\xdc\x15\x03\x25\xc8\x83\x27\xa9\x44" + "\x3e\xd0\x4f\xdf\xe5\xbe\x93\x87\x6d\x16\x28\x56\x0c\x76\x4a\x80", + 86 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x03\x1d\xa1\x06\x9e\x3a\x2e\x9c\x33\x82\xe4\x36\xff\xd7\x9d\xf7" + "\x4b\x1c\xa6\xa8\xad\xb2\xde\xab\xe6\x76\xab\x45\x99\x4c\xbc\x05" + "\x4f\x03\x7d\x2f\x0e\xac\xe8\x58\xd3\x2c\x14\xe2\xd1\xc8\xb4\x60" + "\x77\x30\x8e\x3b\xdc\x2c\x1b\x53\x17\x2e\xcf\x7a\x8c\x14\xe3\x49", + 87 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x46\x65\xce\xf8\xba\x4d\xb4\xd0\xac\xb1\x18\xf2\x98\x7f\x0b\xb0" + "\x9f\x8f\x86\xaa\x44\x5a\xa3\xd5\xfc\x9a\x8b\x34\x68\x64\x78\x74" + "\x89\xe8\xfc\xec\xc1\x25\xd1\x7e\x9b\x56\xe1\x29\x88\xea\xc5\xec" + "\xc7\x28\x68\x83\xdb\x06\x61\xb8\xff\x05\xda\x2a\xff\xf3\x0f\xe4", + 88 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x63\xb7\x03\x2e\x5f\x93\x0c\xc9\x93\x95\x17\xf9\xe9\x86\x81\x6c" + "\xfb\xec\x2b\xe5\x9b\x95\x68\xb1\x3f\x2e\xad\x05\xba\xe7\x77\x7c" + "\xab\x62\x0c\x66\x59\x40\x4f\x74\x09\xe4\x19\x9a\x3b\xe5\xf7\x86" + "\x5a\xa7\xcb\xdf\x8c\x42\x53\xf7\xe8\x21\x9b\x1b\xd5\xf4\x6f\xea", + 89 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x9f\x09\xbf\x09\x3a\x2b\x0f\xf8\xc2\x63\x4b\x49\xe3\x7f\x1b\x21" + "\x35\xb4\x47\xaa\x91\x44\xc9\x78\x7d\xbf\xd9\x21\x29\x31\x6c\x99" + "\xe8\x8a\xab\x8a\x21\xfd\xef\x23\x72\xd1\x18\x9a\xec\x50\x0f\x95" + "\x77\x5f\x1f\x92\xbf\xb4\x55\x45\xe4\x25\x9f\xb9\xb7\xb0\x2d\x14", + 90 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xf9\xf8\x49\x3c\x68\x08\x88\x07\xdf\x7f\x6a\x26\x93\xd6\x4e\xa5" + "\x9f\x03\xe9\xe0\x5a\x22\x3e\x68\x52\x4c\xa3\x21\x95\xa4\x73\x4b" + "\x65\x4f\xce\xa4\xd2\x73\x4c\x86\x6c\xf9\x5c\x88\x9f\xb1\x0c\x49" + "\x15\x9b\xe2\xf5\x04\x3d\xc9\x8b\xb5\x5e\x02\xef\x7b\xdc\xb0\x82", + 91 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x3c\x9a\x73\x59\xab\x4f\xeb\xce\x07\xb2\x0a\xc4\x47\xb0\x6a\x24" + "\x0b\x7f\xe1\xda\xe5\x43\x9c\x49\xb6\x0b\x58\x19\xf7\x81\x2e\x4c" + "\x17\x24\x06\xc1\xaa\xc3\x16\x71\x3c\xf0\xdd\xed\x10\x38\x07\x72" + "\x58\xe2\xef\xf5\xb3\x39\x13\xd9\xd9\x5c\xae\xb4\xe6\xc6\xb9\x70", + 92 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xad\x6a\xab\x80\x84\x51\x0e\x82\x2c\xfc\xe8\x62\x5d\x62\xcf\x4d" + "\xe6\x55\xf4\x76\x38\x84\xc7\x1e\x80\xba\xb9\xac\x9d\x53\x18\xdb" + "\xa4\xa6\x03\x3e\xd2\x90\x84\xe6\x52\x16\xc0\x31\x60\x6c\xa1\x76" + "\x15\xdc\xfe\x3b\xa1\x1d\x26\x85\x1a\xe0\x99\x9c\xa6\xe2\x32\xcf", + 93 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x15\x6e\x9e\x62\x61\x37\x4c\x9d\xc8\x84\xf3\x6e\x70\xf0\xfe\x1a" + "\xb9\x29\x79\x97\xb8\x36\xfa\x7d\x17\x0a\x9c\x9e\xbf\x57\x5b\x88" + "\x1e\x7b\xce\xa4\x4d\x6c\x02\x48\xd3\x55\x97\x90\x71\x54\x82\x89" + "\x55\xbe\x19\x13\x58\x52\xf9\x22\x88\x15\xec\xa0\x24\xa8\xad\xfb", + 94 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x42\x15\x40\x76\x33\xf4\xcc\xa9\xb6\x78\x8b\xe9\x3e\x6a\xa3\xd9" + "\x63\xc7\xd6\xce\x4b\x14\x72\x47\x09\x9f\x46\xa3\xac\xb5\x00\xa3" + "\x00\x38\xcb\x3e\x78\x8c\x3d\x29\xf1\x32\xad\x84\x4e\x80\xe9\xe9" + "\x92\x51\xf6\xdb\x96\xac\xd8\xa0\x91\xcf\xc7\x70\xaf\x53\x84\x7b", + 95 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x1c\x07\x7e\x27\x9d\xe6\x54\x85\x23\x50\x2b\x6d\xf8\x00\xff\xda" + "\xb5\xe2\xc3\xe9\x44\x2e\xb8\x38\xf5\x8c\x29\x5f\x3b\x14\x7c\xef" + "\x9d\x70\x1c\x41\xc3\x21\x28\x3f\x00\xc7\x1a\xff\xa0\x61\x93\x10" + "\x39\x91\x26\x29\x5b\x78\xdd\x4d\x1a\x74\x57\x2e\xf9\xed\x51\x35", + 96 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xf0\x7a\x55\x5f\x49\xfe\x48\x1c\xf4\xcd\x0a\x87\xb7\x1b\x82\xe4" + "\xa9\x50\x64\xd0\x66\x77\xfd\xd9\x0a\x0e\xb5\x98\x87\x7b\xa1\xc8" + "\x3d\x46\x77\xb3\x93\xc3\xa3\xb6\x66\x1c\x42\x1f\x5b\x12\xcb\x99" + "\xd2\x03\x76\xba\x72\x75\xc2\xf3\xa8\xf5\xa9\xb7\x82\x17\x20\xda", + 97 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xb5\x91\x1b\x38\x0d\x20\xc7\xb0\x43\x23\xe4\x02\x6b\x38\xe2\x00" + "\xf5\x34\x25\x92\x33\xb5\x81\xe0\x2c\x1e\x3e\x2d\x84\x38\xd6\xc6" + "\x6d\x5a\x4e\xb2\x01\xd5\xa8\xb7\x50\x72\xc4\xec\x29\x10\x63\x34" + "\xda\x70\xbc\x79\x52\x1b\x0c\xed\x2c\xfd\x53\x3f\x5f\xf8\x4f\x95", + 98 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x01\xf0\x70\xa0\x9b\xae\x91\x12\x96\x36\x1f\x91\xaa\x0e\x8e\x0d" + "\x09\xa7\x72\x54\x78\x53\x6d\x9d\x48\xc5\xfe\x1e\x5e\x7c\x3c\x5b" + "\x9b\x9d\x6e\xb0\x77\x96\xf6\xda\x57\xae\x56\x2a\x7d\x70\xe8\x82" + "\xe3\x7a\xdf\xde\x83\xf0\xc4\x33\xc2\xcd\x36\x35\x36\xbb\x22\xc8", + 99 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x6f\x79\x3e\xb4\x37\x4a\x48\xb0\x77\x5a\xca\xf9\xad\xcf\x8e\x45" + "\xe5\x42\x70\xc9\x47\x5f\x00\x4a\xd8\xd5\x97\x3e\x2a\xca\x52\x74" + "\x7f\xf4\xed\x04\xae\x96\x72\x75\xb9\xf9\xeb\x0e\x1f\xf7\x5f\xb4" + "\xf7\x94\xfa\x8b\xe9\xad\xd7\xa4\x13\x04\x86\x8d\x10\x3f\xab\x10", + 100 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x96\x5f\x20\xf1\x39\x76\x5f\xcc\x4c\xe4\xba\x37\x94\x67\x58\x63" + "\xca\xc2\x4d\xb4\x72\xcd\x2b\x79\x9d\x03\x5b\xce\x3d\xbe\xa5\x02" + "\xda\x7b\x52\x48\x65\xf6\xb8\x11\xd8\xc5\x82\x8d\x3a\x88\x96\x46" + "\xfe\x64\xa3\x80\xda\x1a\xa7\xc7\x04\x4e\x9f\x24\x5d\xce\xd1\x28", + 101 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xec\x29\x5b\x57\x83\x60\x12\x44\xc3\x0e\x46\x41\xe3\xb4\x5b\xe2" + "\x22\xc4\xdc\xe7\x7a\x58\x70\x0f\x53\xbc\x8e\xc5\x2a\x94\x16\x90" + "\xb4\xd0\xb0\x87\xfb\x6f\xcb\x3f\x39\x83\x2b\x9d\xe8\xf7\x5e\xc2" + "\x0b\xd4\x30\x79\x81\x17\x49\xcd\xc9\x07\xed\xb9\x41\x57\xd1\x80", + 102 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x61\xc7\x2f\x8c\xcc\x91\xdb\xb5\x4c\xa6\x75\x0b\xc4\x89\x67\x2d" + "\xe0\x9f\xae\xdb\x8f\xdd\x4f\x94\xff\x23\x20\x90\x9a\x30\x3f\x5d" + "\x5a\x98\x48\x1c\x0b\xc1\xa6\x25\x41\x9f\xb4\xde\xbf\xbf\x7f\x8a" + "\x53\xbb\x07\xec\x3d\x98\x5e\x8e\xa1\x1e\x72\xd5\x59\x94\x07\x80", + 103 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xaf\xd8\x14\x5b\x25\x9e\xef\xc8\xd1\x26\x20\xc3\xc5\xb0\x3e\x1e" + "\xd8\xfd\x2c\xce\xfe\x03\x65\x07\x8c\x80\xfd\x42\xc1\x77\x0e\x28" + "\xb4\x49\x48\xf2\x7e\x65\xa1\x88\x66\x90\x11\x0d\xb8\x14\x39\x7b" + "\x68\xe4\x3d\x80\xd1\xba\x16\xdf\xa3\x58\xe7\x39\xc8\x98\xcf\xa3", + 104 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x55\x2f\xc7\x89\x3c\xf1\xce\x93\x3a\xda\x35\xc0\xda\x98\x84\x4e" + "\x41\x54\x5e\x24\x4c\x31\x57\xa1\x42\x8d\x7b\x4c\x21\xf9\xcd\x7e" + "\x40\x71\xae\xd7\x7b\x7c\xa9\xf1\xc3\x8f\xba\x32\x23\x74\x12\xef" + "\x21\xa3\x42\x74\x2e\xc8\x32\x43\x78\xf2\x1e\x50\x7f\xaf\xdd\x88", + 105 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x46\x7a\x33\xfb\xad\xf5\xeb\xc5\x25\x96\xef\x86\xaa\xae\xfc\x6f" + "\xab\xa8\xee\x65\x1b\x1c\xe0\x4d\xe3\x68\xa0\x3a\x5a\x90\x40\xef" + "\x28\x35\xe0\x0a\xdb\x09\xab\xb3\xfb\xd2\xbc\xe8\x18\xa2\x41\x3d" + "\x0b\x02\x53\xb5\xbd\xa4\xfc\x5b\x2f\x6f\x85\xf3\xfd\x5b\x55\xf2", + 106 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x22\xef\xf8\xe6\xdd\x52\x36\xf5\xf5\x7d\x94\xed\xe8\x74\xd6\xc9" + "\x42\x8e\x8f\x5d\x56\x6f\x17\xcd\x6d\x18\x48\xcd\x75\x2f\xe1\x3c" + "\x65\x5c\xb1\x0f\xba\xaf\xf7\x68\x72\xf2\xbf\x2d\xa9\x9e\x15\xdc" + "\x62\x40\x75\xe1\xec\x2f\x58\xa3\xf6\x40\x72\x12\x18\x38\x56\x9e", + 107 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x9c\xec\x6b\xbf\x62\xc4\xbc\xe4\x13\x8a\xba\xe1\xcb\xec\x8d\xad" + "\x31\x95\x04\x44\xe9\x03\x21\xb1\x34\x71\x96\x83\x4c\x11\x4b\x86" + "\x4a\xf3\xf3\xcc\x35\x08\xf8\x37\x51\xff\xb4\xed\xa7\xc8\x4d\x14" + "\x07\x34\xbb\x42\x63\xc3\x62\x5c\x00\xf0\x4f\x4c\x80\x68\x98\x1b", + 108 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa8\xb6\x0f\xa4\xfc\x24\x42\xf6\xf1\x51\x4a\xd7\x40\x26\x26\x92" + "\x0c\xc7\xc2\xc9\xf7\x21\x24\xb8\xcb\xa8\xee\x2c\xb7\xc4\x58\x6f" + "\x65\x8a\x44\x10\xcf\xfc\xc0\xab\x88\x34\x39\x55\xe0\x94\xc6\xaf" + "\x0d\x20\xd0\xc7\x14\xfb\x0a\x98\x8f\x54\x3f\x30\x0f\x58\xd3\x89", + 109 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x82\x71\xcc\x45\xdf\xa5\xe4\x17\x0e\x84\x7e\x86\x30\xb9\x52\xcf" + "\x9c\x2a\xa7\x77\xd0\x6f\x26\xa7\x58\x5b\x83\x81\xf1\x88\xda\xcc" + "\x73\x37\x39\x1c\xfc\xc9\x4b\x05\x3d\xc4\xec\x29\xcc\x17\xf0\x77" + "\x87\x04\x28\xf1\xac\x23\xfd\xdd\xa1\x65\xef\x5a\x3f\x15\x5f\x39", + 110 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xbf\x23\xc0\xc2\x5c\x80\x60\xe4\xf6\x99\x5f\x16\x23\xa3\xbe\xbe" + "\xca\xa9\x6e\x30\x86\x80\x00\x0a\x8a\xa3\xcd\x56\xbb\x1a\x6d\xa0" + "\x99\xe1\x0d\x92\x31\xb3\x7f\x45\x19\xb2\xef\xd2\xc2\x4d\xe7\x2f" + "\x31\xa5\xf1\x95\x35\x24\x1b\x4a\x59\xfa\x3c\x03\xce\xb7\x90\xe7", + 111 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x87\x7f\xd6\x52\xc0\x52\x81\x00\x9c\x0a\x52\x50\xe7\xa3\xa6\x71" + "\xf8\xb1\x8c\x10\x88\x17\xfe\x4a\x87\x4d\xe2\x2d\xa8\xe4\x5d\xb1" + "\x19\x58\xa6\x00\xc5\xf6\x2e\x67\xd3\x6c\xbf\x84\x47\x4c\xf2\x44" + "\xa9\xc2\xb0\x3a\x9f\xb9\xdc\x71\x1c\xd1\xa2\xca\xb6\xf3\xfa\xe0", + 112 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x29\xdf\x4d\x87\xea\x44\x4b\xaf\x5b\xcd\xf5\xf4\xe4\x15\x79\xe2" + "\x8a\x67\xde\x84\x14\x9f\x06\xc0\x3f\x11\x0e\xa8\x4f\x57\x2a\x9f" + "\x67\x6a\xdd\xd0\x4c\x48\x78\xf4\x9c\x5c\x00\xac\xcd\xa4\x41\xb1" + "\xa3\x87\xca\xce\xb2\xe9\x93\xbb\x7a\x10\xcd\x8c\x2d\x67\x17\xe1", + 113 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x71\x0d\xac\xb1\x66\x84\x46\x39\xcd\x7b\x63\x7c\x27\x42\x09\x42" + "\x4e\x24\x49\xdc\x35\xd7\x90\xbb\xfa\x4f\x76\x17\x70\x54\xa3\x6b" + "\x3b\x76\xfa\xc0\xca\x6e\x61\xdf\x1e\x68\x70\x00\x67\x8a\xc0\x74" + "\x6d\xf7\x5d\x0a\x39\x54\x89\x76\x81\xfd\x39\x3a\x15\x5a\x1b\xb4", + 114 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc1\xd5\xf9\x3b\x8d\xea\x1f\x25\x71\xba\xbc\xcb\xc0\x17\x64\x54" + "\x1a\x0c\xda\x87\xe4\x44\xd6\x73\xc5\x09\x66\xca\x55\x9c\x33\x35" + "\x4b\x3a\xcb\x26\xe5\xd5\x78\x1f\xfb\x28\x84\x7a\x4b\x47\x54\xd7" + "\x70\x08\xc6\x2a\x83\x58\x35\xf5\x00\xde\xa7\xc3\xb5\x8b\xda\xe2", + 115 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa4\x1e\x41\x27\x1c\xda\xb8\xaf\x4d\x72\xb1\x04\xbf\xb2\xad\x04" + "\x1a\xc4\xdf\x14\x67\x7d\xa6\x71\xd8\x56\x40\xc4\xb1\x87\xf5\x0c" + "\x2b\x66\x51\x3c\x46\x19\xfb\xd5\xd5\xdc\x4f\xe6\x5d\xd3\x7b\x90" + "\x42\xe9\x84\x8d\xda\x55\x6a\x50\x4c\xaa\x2b\x1c\x6a\xfe\x47\x30", + 116 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xe7\xbc\xba\xcd\xc3\x79\xc4\x3d\x81\xeb\xad\xcb\x37\x78\x15\x52" + "\xfc\x1d\x75\x3e\x8c\xf3\x10\xd9\x68\x39\x2d\x06\xc9\x1f\x1d\x64" + "\xcc\x9e\x90\xce\x1d\x22\xc3\x2d\x27\x7f\xc6\xcd\xa4\x33\xa4\xd4" + "\x42\xc7\x62\xe9\xea\xcf\x2c\x25\x9f\x32\xd6\x4c\xf9\xda\x3a\x22", + 117 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x51\x75\x5b\x4a\xc5\x45\x6b\x13\x21\x8a\x19\xc5\xb9\x24\x2f\x57" + "\xc4\xa9\x81\xe4\xd4\xec\xdc\xe0\x9a\x31\x93\x36\x2b\x80\x8a\x57" + "\x93\x45\xd4\x88\x1c\x26\x07\xa5\x65\x34\xdd\x7f\x21\x95\x6a\xff" + "\x72\xc2\xf4\x17\x3a\x6e\x7b\x6c\xc2\x21\x2b\xa0\xe3\xda\xee\x1f", + 118 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xdc\xc2\xc4\xbe\xb9\xc1\xf2\x60\x7b\x78\x6c\x20\xc6\x31\x97\x23" + "\x47\x03\x4c\x1c\xc0\x2f\xcc\x7d\x02\xff\x01\x09\x9c\xfe\x1c\x69" + "\x89\x84\x0a\xc2\x13\x92\x36\x29\x11\x3a\xa8\xba\xd7\x13\xcc\xf0" + "\xfe\x4c\xe1\x32\x64\xfb\x32\xb8\xb0\xfe\x37\x2d\xa3\x82\x54\x4a", + 119 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x3d\x55\x17\x6a\xce\xa4\xa7\xe3\xa6\x5f\xfa\x9f\xb1\x0a\x7a\x17" + "\x67\x19\x9c\xf0\x77\xce\xe9\xf7\x15\x32\xd6\x7c\xd7\xc7\x3c\x9f" + "\x93\xcf\xc3\x7c\xcd\xcc\x1f\xde\xf5\x0a\xad\x46\xa5\x04\xa6\x50" + "\xd2\x98\xd5\x97\xa3\xa9\xfa\x95\xc6\xc4\x0c\xb7\x1f\xa5\xe7\x25", + 120 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xd0\x77\x13\xc0\x05\xde\x96\xdd\x21\xd2\xeb\x8b\xbe\xca\x66\x74" + "\x6e\xa5\x1a\x31\xae\x92\x2a\x3e\x74\x86\x48\x89\x54\x0a\x48\xdb" + "\x27\xd7\xe4\xc9\x03\x11\x63\x8b\x22\x4b\xf0\x20\x1b\x50\x18\x91" + "\x75\x48\x48\x11\x3c\x26\x61\x08\xd0\xad\xb1\x3d\xb7\x19\x09\xc7", + 121 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x58\x98\x3c\x21\x43\x3d\x95\x0c\xaa\x23\xe4\xbc\x18\x54\x3b\x8e" + "\x60\x1c\x20\x43\x18\x53\x21\x52\xda\xf5\xe1\x59\xa0\xcd\x14\x80" + "\x18\x3d\x29\x28\x5c\x05\xf1\x29\xcb\x0c\xc3\x16\x46\x87\x92\x80" + "\x86\xff\xe3\x80\x15\x8d\xf1\xd3\x94\xc6\xac\x0d\x42\x88\xbc\xa8", + 122 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x81\x00\xa8\xdc\x52\x8d\x2b\x68\x2a\xb4\x25\x08\x01\xba\x33\xf0" + "\x2a\x3e\x94\xc5\x4d\xac\x0a\xe1\x48\x2a\xa2\x1f\x51\xef\x3a\x82" + "\xf3\x80\x7e\x6f\xac\xb0\xae\xb0\x59\x47\xbf\x7a\xa2\xad\xcb\x03" + "\x43\x56\xf9\x0f\xa4\x56\x0e\xde\x02\x20\x1a\x37\xe4\x11\xec\x1a", + 123 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x07\x02\x5f\x1b\xb6\xc7\x84\xf3\xfe\x49\xde\x5c\x14\xb9\x36\xa5" + "\xac\xac\xac\xaa\xb3\x3f\x6a\xc4\xd0\xe0\x0a\xb6\xa1\x24\x83\xd6" + "\xbe\xc0\x0b\x4f\xe6\x7c\x7c\xa5\xcc\x50\x8c\x2a\x53\xef\xb5\xbf" + "\xa5\x39\x87\x69\xd8\x43\xff\x0d\x9e\x8b\x14\xd3\x6a\x01\xa7\x7f", + 124 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xba\x6a\xef\xd9\x72\xb6\x18\x6e\x02\x7a\x76\x27\x3a\x4a\x72\x33" + "\x21\xa3\xf5\x80\xcf\xa8\x94\xda\x5a\x9c\xe8\xe7\x21\xc8\x28\x55" + "\x2c\x64\xda\xce\xe3\xa7\xfd\x2d\x74\x3b\x5c\x35\xad\x0c\x8e\xfa" + "\x71\xf8\xce\x99\xbf\x96\x33\x47\x10\xe2\xc2\x34\x6e\x8f\x3c\x52", + 125 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xe0\x72\x1e\x02\x51\x7a\xed\xfa\x4e\x7e\x9b\xa5\x03\xe0\x25\xfd" + "\x46\xe7\x14\x56\x6d\xc8\x89\xa8\x4c\xbf\xe5\x6a\x55\xdf\xbe\x2f" + "\xc4\x93\x8a\xc4\x12\x05\x88\x33\x5d\xea\xc8\xef\x3f\xa2\x29\xad" + "\xc9\x64\x7f\x54\xad\x2e\x34\x72\x23\x4f\x9b\x34\xef\xc4\x65\x43", + 126 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xb6\x29\x26\x69\xcc\xd3\x8d\x5f\x01\xca\xae\x96\xba\x27\x2c\x76" + "\xa8\x79\xa4\x57\x43\xaf\xa0\x72\x5d\x83\xb9\xeb\xb2\x66\x65\xb7" + "\x31\xf1\x84\x8c\x52\xf1\x19\x72\xb6\x64\x4f\x55\x4c\x06\x4f\xa9" + "\x07\x80\xdb\xbb\xf3\xa8\x9d\x4f\xc3\x1f\x67\xdf\x3e\x58\x57\xef", + 127 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x23\x19\xe3\x78\x9c\x47\xe2\xda\xa5\xfe\x80\x7f\x61\xbe\xc2\xa1" + "\xa6\x53\x7f\xa0\x3f\x19\xff\x32\xe8\x7e\xec\xbf\xd6\x4b\x7e\x0e" + "\x8c\xcf\xf4\x39\xac\x33\x3b\x04\x0f\x19\xb0\xc4\xdd\xd1\x1a\x61" + "\xe2\x4a\xc1\xfe\x0f\x10\xa0\x39\x80\x6c\x5d\xcc\x0d\xa3\xd1\x15", + 128 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xf5\x97\x11\xd4\x4a\x03\x1d\x5f\x97\xa9\x41\x3c\x06\x5d\x1e\x61" + "\x4c\x41\x7e\xde\x99\x85\x90\x32\x5f\x49\xba\xd2\xfd\x44\x4d\x3e" + "\x44\x18\xbe\x19\xae\xc4\xe1\x14\x49\xac\x1a\x57\x20\x78\x98\xbc" + "\x57\xd7\x6a\x1b\xcf\x35\x66\x29\x2c\x20\xc6\x83\xa5\xc4\x64\x8f", + 129 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xdf\x0a\x9d\x0c\x21\x28\x43\xa6\xa9\x34\xe3\x90\x2b\x2d\xd3\x0d" + "\x17\xfb\xa5\xf9\x69\xd2\x03\x0b\x12\xa5\x46\xd8\xa6\xa4\x5e\x80" + "\xcf\x56\x35\xf0\x71\xf0\x45\x2e\x9c\x91\x92\x75\xda\x99\xbe\xd5" + "\x1e\xb1\x17\x3c\x1a\xf0\x51\x87\x26\xb7\x5b\x0e\xc3\xba\xe2\xb5", + 130 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa3\xeb\x6e\x6c\x7b\xf2\xfb\x8b\x28\xbf\xe8\xb1\x5e\x15\xbb\x50" + "\x0f\x78\x1e\xcc\x86\xf7\x78\xc3\xa4\xe6\x55\xfc\x58\x69\xbf\x28" + "\x46\xa2\x45\xd4\xe3\x3b\x7b\x14\x43\x6a\x17\xe6\x3b\xe7\x9b\x36" + "\x65\x5c\x22\x6a\x50\xff\xbc\x71\x24\x20\x7b\x02\x02\x34\x2d\xb5", + 131 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x56\xd4\xcb\xcd\x07\x05\x63\x42\x6a\x01\x70\x69\x42\x5c\x2c\xd2" + "\xae\x54\x06\x68\x28\x7a\x5f\xb9\xda\xc4\x32\xeb\x8a\xb1\xa3\x53" + "\xa3\x0f\x2f\xe1\xf4\x0d\x83\x33\x3a\xfe\x69\x6a\x26\x77\x95\x40" + "\x8a\x92\xfe\x7d\xa0\x7a\x0c\x18\x14\xcf\x77\xf3\x6e\x10\x5e\xe8", + 132 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xe5\x9b\x99\x87\xd4\x28\xb3\xed\xa3\x7d\x80\xab\xdb\x16\xcd\x2b" + "\x0a\xef\x67\x4c\x2b\x1d\xda\x44\x32\xea\x91\xee\x6c\x93\x5c\x68" + "\x4b\x48\xb4\x42\x8a\x8c\xc7\x40\xe5\x79\xa3\x0d\xef\xf3\x5a\x80" + "\x30\x13\x82\x0d\xd2\x3f\x14\xae\x1d\x84\x13\xb5\xc8\x67\x2a\xec", + 133 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xcd\x9f\xcc\x99\xf9\x9d\x4c\xc1\x6d\x03\x19\x00\xb2\xa7\x36\xe1" + "\x50\x8d\xb4\xb5\x86\x81\x4e\x63\x45\x85\x7f\x35\x4a\x70\xcc\xec" + "\xb1\xdf\x3b\x50\xa1\x9a\xda\xf4\x3c\x27\x8e\xfa\x42\x3f\xf4\xbb" + "\x6c\x52\x3e\xc7\xfd\x78\x59\xb9\x7b\x16\x8a\x7e\xbf\xf8\x46\x7c", + 134 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x06\x02\x18\x5d\x8c\x3a\x78\x73\x8b\x99\x16\x4b\x8b\xc6\xff\xb2" + "\x1c\x7d\xeb\xeb\xbf\x80\x63\x72\xe0\xda\x44\xd1\x21\x54\x55\x97" + "\xb9\xc6\x62\xa2\x55\xdc\x31\x54\x2c\xf9\x95\xec\xbe\x6a\x50\xfb" + "\x5e\x6e\x0e\xe4\xef\x24\x0f\xe5\x57\xed\xed\x11\x88\x08\x7e\x86", + 135 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc0\x8a\xfa\x5b\x92\x7b\xf0\x80\x97\xaf\xc5\xff\xf9\xca\x4e\x78" + "\x00\x12\x5c\x1f\x52\xf2\xaf\x35\x53\xfa\x2b\x89\xe1\xe3\x01\x5c" + "\x4f\x87\xd5\xe0\xa4\x89\x56\xad\x31\x45\x0b\x08\x3d\xad\x14\x7f" + "\xfb\x5e\xc0\x34\x34\xa2\x68\x30\xcf\x37\xd1\x03\xab\x50\xc5\xda", + 136 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x36\xf1\xe1\xc1\x1d\x6e\xf6\xbc\x3b\x53\x6d\x50\x5d\x54\x4a\x87" + "\x15\x22\xc5\xc2\xa2\x53\x06\x7e\xc9\x93\x3b\x6e\xc2\x54\x64\xda" + "\xf9\x85\x52\x5f\x5b\x95\x60\xa1\x6d\x89\x02\x59\xac\x1b\xb5\xcc" + "\x67\xc0\xc4\x69\xcd\xe1\x33\xde\xf0\x00\xea\x1d\x68\x6f\x4f\x5d", + 137 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xbf\x2a\xb2\xe2\x47\x0f\x54\x38\xc3\xb6\x89\xe6\x6e\x76\x86\xff" + "\xfa\x0c\xb1\xe1\x79\x8a\xd3\xa8\x6f\xf9\x90\x75\xbf\x61\x38\xe3" + "\x3d\x9c\x0c\xe5\x9a\xfb\x24\xac\x67\xa0\x2a\xf3\x44\x28\x19\x1a" + "\x9a\x0a\x60\x41\xc0\x74\x71\xb7\xc3\xb1\xa7\x52\xd6\xfc\x0b\x8b", + 138 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xd4\x00\x60\x1f\x97\x28\xcc\xc4\xc9\x23\x42\xd9\x78\x7d\x8d\x28" + "\xab\x32\x3a\xf3\x75\xca\x56\x24\xb4\xbb\x91\xd1\x72\x71\xfb\xae" + "\x86\x2e\x41\x3b\xe7\x3f\x1f\x68\xe6\x15\xb8\xc5\xc3\x91\xbe\x0d" + "\xbd\x91\x44\x74\x6e\xb3\x39\xad\x54\x15\x47\xba\x9c\x46\x8a\x17", + 139 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x79\xfe\x2f\xe1\x57\xeb\x85\xa0\x38\xab\xb8\xeb\xbc\x64\x77\x31" + "\xd2\xc8\x3f\x51\xb0\xac\x6e\xe1\x4a\xa2\x84\xcb\x6a\x35\x49\xa4" + "\xdc\xce\xb3\x00\x74\x0a\x82\x5f\x52\xf5\xfb\x30\xb0\x3b\x8c\x4d" + "\x8b\x0f\x4a\xa6\x7a\x63\xf4\xa9\x4e\x33\x03\xc4\xed\xa4\xc0\x2b", + 140 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x75\x35\x13\x13\xb5\x2a\x85\x29\x29\x8d\x8c\x18\x6b\x17\x68\x66" + "\x6d\xcc\xa8\x59\x53\x17\xd7\xa4\x81\x6e\xb8\x8c\x06\x20\x20\xc0" + "\xc8\xef\xc5\x54\xbb\x34\x1b\x64\x68\x8d\xb5\xcc\xaf\xc3\x5f\x3c" + "\x3c\xd0\x9d\x65\x64\xb3\x6d\x7b\x04\xa2\x48\xe1\x46\x98\x0d\x4b", + 141 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xe3\x12\x8b\x1d\x31\x1d\x02\x17\x9d\x7f\x25\xf9\x7a\x5a\x8b\xee" + "\x2c\xc8\xc8\x63\x03\x64\x4f\xcd\x66\x4e\x15\x7d\x1f\xef\x00\xf2" + "\x3e\x46\xf9\xa5\xe8\xe5\xc8\x90\xce\x56\x5b\xb6\xab\xd4\x30\x2c" + "\xe0\x64\x69\xd5\x2a\x5b\xd5\x3e\x1c\x5a\x54\xd0\x46\x49\xdc\x03", + 142 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc2\x38\x2a\x72\xd2\xd3\xac\xe9\xd5\x93\x3d\x00\xb6\x08\x27\xed" + "\x38\x0c\xda\x08\xd0\xba\x5f\x6d\xd4\x1e\x29\xee\x6d\xbe\x8e\xcb" + "\x92\x35\xf0\x6b\xe9\x5d\x83\xb6\x81\x6a\x2f\xb7\xa5\xad\x47\x03" + "\x5e\x8a\x4b\x69\xa4\x88\x4b\x99\xe4\xbe\xce\x58\xca\xb2\x5d\x44", + 143 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x6b\x1c\x69\x46\x0b\xbd\x50\xac\x2e\xd6\xf3\x2e\x6e\x88\x7c\xfe" + "\xd4\x07\xd4\x7d\xcf\x0a\xaa\x60\x38\x7f\xe3\x20\xd7\x80\xbd\x03" + "\xea\xb6\xd7\xba\xeb\x2a\x07\xd1\x0c\xd5\x52\xa3\x00\x34\x13\x54" + "\xea\x9a\x5f\x03\x18\x3a\x62\x3f\x92\xa2\xd4\xd9\xf0\x09\x26\xaf", + 144 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x6c\xda\x20\x6c\x80\xcd\xc9\xc4\x4b\xa9\x90\xe0\x32\x8c\x31\x4f" + "\x81\x9b\x14\x2d\x00\x63\x04\x04\xc4\x8c\x05\xdc\x76\xd1\xb0\x0c" + "\xe4\xd7\x2f\xc6\xa4\x8e\x14\x69\xdd\xef\x60\x94\x12\xc3\x64\x82" + "\x08\x54\x21\x4b\x48\x69\xaf\x09\x0f\x00\xd3\xc1\xba\x44\x3e\x1b", + 145 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x7f\xfc\x8c\x26\xfb\xd6\xa0\xf7\xa6\x09\xe6\xe1\x93\x9f\x6a\x9e" + "\xdf\x1b\x0b\x06\x66\x41\xfb\x76\xc4\xf9\x60\x2e\xd7\x48\xd1\x16" + "\x02\x49\x6b\x35\x35\x5b\x1a\xa2\x55\x85\x0a\x50\x9d\x2f\x8e\xe1" + "\x8c\x8f\x3e\x1d\x7d\xcb\xc3\x7a\x13\x65\x98\xf5\x6a\x59\xed\x17", + 146 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x70\xde\x1f\x08\xdd\x4e\x09\xd5\xfc\x15\x1f\x17\xfc\x99\x1a\x23" + "\xab\xfc\x05\x10\x42\x90\xd5\x04\x68\x88\x2e\xfa\xf5\x82\xb6\xec" + "\x2f\x14\xf5\x77\xc0\xd6\x8c\x3a\xd0\x66\x26\x91\x6e\x3c\x86\xe6" + "\xda\xab\x6c\x53\xe5\x16\x3e\x82\xb6\xbd\x0c\xe4\x9f\xc0\xd8\xdf", + 147 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x4f\x81\x93\x57\x56\xed\x35\xee\x20\x58\xee\x0c\x6a\x61\x10\xd6" + "\xfa\xc5\xcb\x6a\x4f\x46\xaa\x94\x11\x60\x3f\x99\x96\x58\x23\xb6" + "\xda\x48\x38\x27\x6c\x5c\x06\xbc\x78\x80\xe3\x76\xd9\x27\x58\x36" + "\x9e\xe7\x30\x5b\xce\xc8\xd3\xcf\xd2\x8c\xca\xbb\x7b\x4f\x05\x79", + 148 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xab\xcb\x61\xcb\x36\x83\xd1\x8f\x27\xad\x52\x79\x08\xed\x2d\x32" + "\xa0\x42\x6c\xb7\xbb\x4b\xf1\x80\x61\x90\x3a\x7d\xc4\x2e\x7e\x76" + "\xf9\x82\x38\x23\x04\xd1\x8a\xf8\xc8\x0d\x91\xdd\x58\xdd\x47\xaf" + "\x76\xf8\xe2\xc3\x6e\x28\xaf\x24\x76\xb4\xbc\xcf\x82\xe8\x9f\xdf", + 149 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x02\xd2\x61\xad\x56\xa5\x26\x33\x1b\x64\x3d\xd2\x18\x6d\xe9\xa8" + "\x2e\x72\xa5\x82\x23\xcd\x1e\x72\x36\x86\xc5\x3d\x86\x9b\x83\xb9" + "\x46\x32\xb7\xb6\x47\xab\x2a\xfc\x0d\x52\x2e\x29\xda\x3a\x56\x15" + "\xb7\x41\xd8\x28\x52\xe0\xdf\x41\xb6\x60\x07\xdb\xcb\xa9\x05\x43", + 150 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc5\x83\x27\x41\xfa\x30\xc5\x43\x68\x23\x01\x53\x83\xd2\x97\xff" + "\x4c\x4a\x5d\x72\x76\xc3\xf9\x02\x12\x20\x66\xe0\x4b\xe5\x43\x1b" + "\x1a\x85\xfa\xf7\x3b\x91\x84\x34\xf9\x30\x09\x63\xd1\xde\xa9\xe8" + "\xac\x39\x24\xef\x49\x02\x26\xed\xee\xa5\xf7\x43\xe4\x10\x66\x9f", + 151 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xcf\xae\xab\x26\x8c\xd0\x75\xa5\xa6\xae\xd5\x15\x02\x3a\x03\x2d" + "\x54\xf2\xf2\xff\x73\x3c\xe0\xcb\xc7\x8d\xb5\x1d\xb4\x50\x4d\x67" + "\x59\x23\xf8\x27\x46\xd6\x59\x46\x06\xad\x5d\x67\x73\x4b\x11\xa6" + "\x7c\xc6\xa4\x68\xc2\x03\x2e\x43\xca\x1a\x94\xc6\x27\x3a\x98\x5e", + 152 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x86\x08\x50\xf9\x2e\xb2\x68\x27\x2b\x67\xd1\x33\x60\x9b\xd6\x4e" + "\x34\xf6\x1b\xf0\x3f\x4c\x17\x38\x64\x5c\x17\xfe\xc8\x18\x46\x5d" + "\x7e\xcd\x2b\xe2\x90\x76\x41\x13\x00\x25\xfd\xa7\x94\x70\xab\x73" + "\x16\x46\xe7\xf6\x94\x40\xe8\x36\x7e\xa7\x6a\xc4\xce\xe8\xa1\xdf", + 153 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x84\xb1\x54\xed\x29\xbb\xed\xef\xa6\x48\x28\x68\x39\x04\x6f\x4b" + "\x5a\xa3\x44\x30\xe2\xd6\x7f\x74\x96\xe4\xc3\x9f\x2c\x7e\xa7\x89" + "\x95\xf6\x9e\x12\x92\x20\x00\x16\xf1\x6a\xc3\xb3\x77\x00\xe6\xc7" + "\xe7\x86\x1a\xfc\x39\x6b\x64\xa5\x9a\x1d\xbf\x47\xa5\x5c\x4b\xbc", + 154 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xae\xee\xc2\x60\xa5\xd8\xef\xf5\xcc\xab\x8b\x95\xda\x43\x5a\x63" + "\xed\x7a\x21\xea\x7f\xc7\x55\x94\x13\xfd\x61\x7e\x33\x60\x9f\x8c" + "\x29\x0e\x64\xbb\xac\xc5\x28\xf6\xc0\x80\x26\x22\x88\xb0\xf0\xa3" + "\x21\x9b\xe2\x23\xc9\x91\xbe\xe9\x2e\x72\x34\x95\x93\xe6\x76\x38", + 155 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x8a\xd7\x8a\x9f\x26\x60\x1d\x12\x7e\x8d\x2f\x2f\x97\x6e\x63\xd1" + "\x9a\x05\x4a\x17\xdc\xf5\x9e\x0f\x01\x3a\xb5\x4a\x68\x87\xbb\xdf" + "\xfd\xe7\xaa\xae\x11\x7e\x0f\xbf\x32\x71\x01\x65\x95\xb9\xd9\xc7" + "\x12\xc0\x1b\x2c\x53\xe9\x65\x5a\x38\x2b\xc4\x52\x2e\x61\x66\x45", + 156 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x89\x34\x15\x9d\xad\xe1\xac\x74\x14\x7d\xfa\x28\x2c\x75\x95\x4f" + "\xce\xf4\x43\xef\x25\xf8\x0d\xfe\x9f\xb6\xea\x63\x3b\x85\x45\x11" + "\x1d\x08\xb3\x4e\xf4\x3f\xff\x17\x02\x6c\x79\x64\xf5\xde\xac\x6d" + "\x2b\x3c\x29\xda\xcf\x27\x47\xf0\x22\xdf\x59\x67\xdf\xdc\x1a\x0a", + 157 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xcd\x36\xdd\x0b\x24\x06\x14\xcf\x2f\xa2\xb9\xe9\x59\x67\x9d\xcd" + "\xd7\x2e\xc0\xcd\x58\xa4\x3d\xa3\x79\x0a\x92\xf6\xcd\xeb\x9e\x1e" + "\x79\x5e\x47\x8a\x0a\x47\xd3\x71\x10\x0d\x34\x0c\x5c\xed\xcd\xbb" + "\xc9\xe6\x8b\x3f\x46\x08\x18\xe5\xbd\xff\x7b\x4c\xda\x4c\x27\x44", + 158 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x00\xdf\x4e\x09\x9b\x80\x71\x37\xa8\x59\x90\xf4\x9d\x3a\x94\x31" + "\x5e\x5a\x5f\x7f\x7a\x60\x76\xb3\x03\xe9\x6b\x05\x6f\xb9\x38\x00" + "\x11\x1f\x47\x96\x28\xe2\xf8\xdb\x59\xae\xb6\xac\x70\xc3\xb6\x1f" + "\x51\xf9\xb4\x6e\x80\xff\xde\xae\x25\xeb\xdd\xb4\xaf\x6c\xb4\xee", + 159 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x2b\x9c\x95\x5e\x6c\xae\xd4\xb7\xc9\xe2\x46\xb8\x6f\x9a\x17\x26" + "\xe8\x10\xc5\x9d\x12\x6c\xee\x66\xed\x71\xbf\x01\x5b\x83\x55\x8a" + "\x4b\x6d\x84\xd1\x8d\xc3\xff\x46\x20\xc2\xff\xb7\x22\x35\x9f\xde" + "\xf8\x5b\xa0\xd4\xe2\xd2\x2e\xcb\xe0\xed\x78\x4f\x99\xaf\xe5\x87", + 160 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x18\x1d\xf0\xa2\x61\xa2\xf7\xd2\x9e\xa5\xa1\x57\x72\x71\x51\x05" + "\xd4\x50\xa4\xb6\xc2\x36\xf6\x99\xf4\x62\xd6\x0c\xa7\x64\x87\xfe" + "\xed\xfc\x9f\x5e\xb9\x2d\xf8\x38\xe8\xfb\x5d\xc3\x69\x4e\x84\xc5" + "\xe0\xf4\xa1\x0b\x76\x1f\x50\x67\x62\xbe\x05\x2c\x74\x5a\x6e\xe8", + 161 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x21\xfb\x20\x34\x58\xbf\x3a\x7e\x9a\x80\x43\x9f\x9a\x90\x28\x99" + "\xcd\x5d\xe0\x13\x9d\xfd\x56\xf7\x11\x0c\x9d\xec\x84\x37\xb2\x6b" + "\xda\x63\xde\x2f\x56\x59\x26\xd8\x5e\xdb\x1d\x6c\x68\x25\x66\x97" + "\x43\xdd\x99\x92\x65\x3d\x13\x97\x95\x44\xd5\xdc\x82\x28\xbf\xaa", + 162 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xef\x02\x1f\x29\xc5\xff\xb8\x30\xe6\x4b\x9a\xa9\x05\x8d\xd6\x60" + "\xfd\x2f\xcb\x81\xc4\x97\xa7\xe6\x98\xbc\xfb\xf5\x9d\xe5\xad\x4a" + "\x86\xff\x93\xc1\x0a\x4b\x9d\x1a\xe5\x77\x47\x25\xf9\x07\x2d\xcd" + "\xe9\xe1\xf1\x99\xba\xb9\x1f\x8b\xff\x92\x18\x64\xaa\x50\x2e\xee", + 163 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xb3\xcf\xda\x40\x52\x6b\x7f\x1d\x37\x56\x9b\xdf\xcd\xf9\x11\xe5" + "\xa6\xef\xe6\xb2\xec\x90\xa0\x45\x4c\x47\xb2\xc0\x46\xbf\x13\x0f" + "\xc3\xb3\x52\xb3\x4d\xf4\x81\x3d\x48\xd3\x3a\xb8\xe2\x69\xb6\x9b" + "\x07\x56\x76\xcb\x6d\x00\xa8\xdc\xf9\xe1\xf9\x67\xec\x19\x1b\x2c", + 164 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xb4\xc6\xc3\xb2\x67\x07\x1e\xef\xb9\xc8\xc7\x2e\x0e\x2b\x94\x12" + "\x93\x64\x1f\x86\x73\xcb\x70\xc1\xcc\x26\xad\x1e\x73\xcf\x14\x17" + "\x55\x86\x0a\xd1\x9b\x34\xc2\xf3\x4e\xd3\x5b\xb5\x2e\xc4\x50\x7c" + "\xc1\xfe\x59\x04\x77\x43\xa5\xf0\xc6\xfe\xbd\xe6\x25\xe2\x60\x91", + 165 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x57\xa3\x4f\x2b\xcc\xa6\x0d\x4b\x85\x10\x3b\x83\x0c\x9d\x79\x52" + "\xa4\x16\xbe\x52\x63\xae\x42\x9c\x9e\x5e\x53\xfe\x85\x90\xa8\xf7" + "\x8e\xc6\x5a\x51\x10\x9e\xa8\x5d\xcd\xf7\xb6\x22\x3f\x9f\x2b\x34" + "\x05\x39\xfa\xd8\x19\x23\xdb\xf8\xed\xab\xf9\x51\x29\xe4\xdf\xf6", + 166 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x9c\xf4\x66\x62\xfc\xd6\x1a\x23\x22\x77\xb6\x85\x66\x3b\x8b\x5d" + "\xa8\x32\xdf\xd9\xa3\xb8\xcc\xfe\xec\x99\x3e\xc6\xac\x41\x5a\xd0" + "\x7e\x04\x8a\xdf\xe4\x14\xdf\x27\x27\x70\xdb\xa8\x67\xda\x5c\x12" + "\x24\xc6\xfd\x0a\xa0\xc2\x18\x7d\x42\x6a\xc6\x47\xe9\x88\x73\x61", + 167 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x5c\xe1\x04\x2a\xb4\xd5\x42\xc2\xf9\xee\x9d\x17\x26\x2a\xf8\x16" + "\x40\x98\x93\x5b\xef\x17\x3d\x0e\x18\x48\x9b\x04\x84\x17\x46\xcd" + "\x2f\x2d\xf8\x66\xbd\x7d\xa6\xe5\xef\x90\x24\xc6\x48\x02\x3e\xc7" + "\x23\xab\x9c\x62\xfd\x80\x28\x57\x39\xd8\x4f\x15\xd2\xab\x51\x5a", + 168 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x84\x88\x39\x6b\xd4\xa8\x72\x9b\x7a\x47\x31\x78\xf2\x32\xda\xdf" + "\x3f\x0f\x8e\x22\x67\x8b\xa5\xa4\x3e\x04\x1e\x72\xda\x1e\x2c\xf8" + "\x21\x94\xc3\x07\x20\x7a\x54\xcb\x81\x56\x29\x33\x39\xea\xec\x69" + "\x3f\xf6\x6b\xfc\xd5\xef\xc6\x5e\x95\xe4\xec\xaf\x54\x53\x0a\xbd", + 169 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xf5\x98\xda\x90\x1c\x38\x35\xbc\xa5\x60\x77\x90\x37\xdf\xde\x9f" + "\x0c\x51\xdc\x61\xc0\xb7\x60\xfc\x15\x22\xd7\xb4\x70\xee\x63\xf5" + "\xbd\xc6\x49\x84\x76\xe8\x60\x49\xad\x86\xe4\xe2\x1a\xf2\x85\x4a" + "\x98\x4c\xc9\x05\x42\x7d\x2f\x17\xf6\x6b\x1f\x41\xc3\xda\x6f\x61", + 170 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x5f\x93\x26\x97\x98\xcf\x02\x13\x21\x07\x33\x76\x60\xa8\xd7\xa1" + "\x77\x35\x4c\x02\x12\xeb\x93\xe5\x55\xe7\xc3\x7a\x08\xae\xf3\xd8" + "\xdc\xe0\x12\x17\x01\x1c\xd9\x65\xc0\x4d\xd2\xc1\x05\xf2\xe2\xb6" + "\xca\xe5\xe4\xe6\xbc\xaf\x09\xdf\xbe\xe3\xe0\xa6\xa6\x35\x7c\x37", + 171 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x0e\xcf\x58\x1d\x47\xba\xc9\x23\x09\x86\xfa\xab\xd7\x0c\x2f\x5b" + "\x80\xe9\x10\x66\xf0\xec\x55\xa8\x42\x93\x78\x82\x28\x6d\x2c\xa0" + "\x07\xbb\x4e\x97\x3b\x0b\x09\x1d\x52\x16\x7f\xf7\xc4\x00\x9c\x7a" + "\xb4\xad\x38\xff\xf1\xdc\xea\xcd\xb7\xbe\x81\xef\x4a\x45\x29\x52", + 172 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x5a\xec\xa8\xab\xe1\x52\x85\x82\xb2\xa3\x07\xb4\x00\x95\x85\x49" + "\x8a\x3d\x46\x7c\xa6\x10\x1c\xb0\xc5\x12\x6f\x99\x76\x05\x6e\x9f" + "\xfc\x12\x3c\xc2\x0c\x30\x2b\x2a\x73\x7f\x49\x2c\x75\xd2\x1f\x01" + "\x51\x2c\x90\xca\x05\x41\xdf\xa5\x6e\x95\x0a\x32\x1d\xcb\x28\xd8", + 173 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x73\x2f\xbf\x8f\x1c\xb2\xb8\x32\x92\x63\xed\xe2\x78\x58\xfe\x46" + "\xf8\xd3\x35\x4d\x37\x6b\xcd\xa0\x54\x8e\x7c\xe1\xfa\x9d\xd1\x1f" + "\x85\xeb\x66\x1f\xe9\x50\xb5\x43\xaa\x63\x5c\xa4\xd3\xf0\x4e\xde" + "\x5b\x32\xd6\xb6\x56\xe5\xce\x1c\x44\xd3\x5c\x4a\x6c\x56\xcf\xf8", + 174 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xd5\xe9\x38\x73\x5d\x63\x78\x8c\x80\x10\x0a\xef\xd1\x86\x48\xd1" + "\x8c\xf2\x72\xf6\x9f\x20\xff\x24\xcf\xe2\x89\x5c\x08\x8a\xd0\x8b" + "\x01\x04\xda\x16\x72\xa4\xeb\x26\xfc\x52\x54\x5c\xc7\xd7\xa0\x1b" + "\x26\x6c\xf5\x46\xc4\x03\xc4\x5b\xd1\x29\xeb\x41\xbd\xd9\x20\x0b", + 175 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x65\xa2\x45\xb4\x93\x52\xee\x29\x7d\x91\xaf\x8c\x8b\xe0\x05\x28" + "\xac\x6e\x04\x6d\xd8\x3a\xc7\xbd\x46\x5a\x98\x81\x6d\xd6\x8f\x3e" + "\x00\xe1\xae\x8f\x89\x53\x27\xa7\xe9\xa8\xc9\x32\x65\x98\x37\x9a" + "\x29\xc9\xfc\x91\xec\x0c\x6e\xef\x08\xf3\xe2\xb2\x16\xc1\x10\x08", + 176 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc9\x56\x54\xb6\x30\x19\x13\x0a\xb4\x5d\xd0\xfb\x49\x41\xb9\x8a" + "\xeb\x3a\xf2\xa1\x23\x91\x3e\xca\x2c\xe9\x9b\x3e\x97\x41\x0a\x7b" + "\xf8\x66\x1c\xc7\xfb\xaa\x2b\xc1\xcf\x2b\x13\x11\x3b\x1e\xd4\x0a" + "\x01\x18\xb8\x8e\x5f\xff\xc3\x54\x27\x59\xea\x00\x7e\xd4\xc5\x8d", + 177 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x1e\xb2\x62\xf3\x8f\xa4\x94\x43\x1f\x01\x7d\xad\x44\xc0\xdf\xb6" + "\x93\x24\xac\x03\x2f\x04\xb6\x57\xfc\x91\xa8\x86\x47\xbb\x74\x76" + "\x0f\x24\xe7\xc9\x56\x51\x4f\x0c\xf0\x02\x99\x0b\x18\x2c\x16\x42" + "\xb9\xb2\x42\x6e\x96\xa6\x11\x87\xe4\xe0\x12\xf0\x0e\x21\x7d\x84", + 178 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x3b\x95\x5a\xee\xbf\xa5\x15\x1a\xc1\xab\x8e\x3f\x5c\xc1\xe3\x76" + "\x70\x84\xc8\x42\xa5\x75\xd3\x62\x69\x83\x6e\x97\x35\x3d\x41\x62" + "\x2b\x73\x1d\xdd\xcd\x5f\x26\x95\x50\xa3\xa5\xb8\x7b\xe1\xe9\x03" + "\x26\x34\x0b\x6e\x0e\x62\x55\x58\x15\xd9\x60\x05\x97\xac\x6e\xf9", + 179 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x68\x28\x9f\x66\x05\x47\x3b\xa0\xe4\xf2\x41\xba\xf7\x47\x7a\x98" + "\x85\x42\x6a\x85\x8f\x19\xef\x2a\x18\xb0\xd4\x0e\xf8\xe4\x12\x82" + "\xed\x55\x26\xb5\x19\x79\x9e\x27\x0f\x13\x88\x13\x27\x91\x82\x78" + "\x75\x57\x11\x07\x1d\x85\x11\xfe\x96\x3e\x3b\x56\x06\xaa\x37\x16", + 180 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x80\xa3\x37\x87\x54\x26\x12\xc3\x8f\x6b\xcd\x7c\xd8\x6c\xab\x46" + "\x02\x27\x50\x9b\x1c\xba\xd5\xec\x40\x8a\x91\x41\x3d\x51\x15\x5a" + "\x04\x76\xda\xdb\xf3\xa2\x51\x8e\x4a\x6e\x77\xcc\x34\x66\x22\xe3" + "\x47\xa4\x69\xbf\x8b\xaa\x5f\x04\xeb\x2d\x98\x70\x53\x55\xd0\x63", + 181 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x34\x62\x9b\xc6\xd8\x31\x39\x1c\x4c\xdf\x8a\xf1\xb4\xb7\xb6\xb8" + "\xe8\xee\x17\xcf\x98\xc7\x0e\x5d\xd5\x86\xcd\x99\xf1\x4b\x11\xdf" + "\x94\x51\x66\x23\x6a\x95\x71\xe6\xd5\x91\xbb\x83\xee\x4d\x16\x4d" + "\x46\xf6\xb9\xd8\xef\x86\xff\x86\x5a\x81\xbf\xb9\x1b\x00\x42\x4b", + 182 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x8b\x7c\xc3\x39\x16\x38\x63\xbb\x43\x83\xe5\x42\xb0\xef\x0e\x7c" + "\xf3\x6b\x84\xad\x93\x2c\xdf\x5a\x80\x41\x9e\xc9\xad\x69\x2e\x7a" + "\x7e\x78\x4d\x2c\x7c\xb3\x79\x6a\x18\xb8\xf8\x00\x03\x5f\x3a\xa0" + "\x6c\x82\x41\x00\x61\x11\x20\xa7\xbd\xeb\x35\x61\x8c\xcb\x81\xb7", + 183 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x4f\x08\x4e\x49\x39\xdd\x5a\x7f\x5a\x65\x8f\xad\x58\xa1\x8a\x15" + "\xc2\x5c\x32\xec\x1c\x7f\xd5\xc5\xc6\xc3\xe8\x92\xb3\x97\x1a\xea" + "\xac\x30\x83\x04\xef\x17\xb1\xc4\x72\x39\xea\x4b\xb3\x98\xb3\xfd" + "\x6d\x45\x28\xd8\xde\x8e\x76\x8a\xe0\xf1\xa5\xa5\xc6\xb5\xc2\x97", + 184 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x48\xf4\x07\xa1\xaf\x5b\x80\x09\xb2\x05\x17\x42\xe8\xcf\x5c\xd5" + "\x65\x66\x69\xe7\xd7\x22\xee\x8e\x7b\xd2\x02\x06\x08\x49\x44\x21" + "\x68\xd8\xfa\xcc\x11\x7c\x01\x2b\xfb\x7b\xf4\x49\xd9\x9b\xef\xff" + "\x6a\x34\xae\xa2\x03\xf1\xd8\xd3\x52\x72\x2b\xe5\x01\x4e\xc8\x18", + 185 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa6\xaa\x82\xcd\x1e\x42\x6f\x9a\x73\xbf\xa3\x9a\x29\x03\x78\x76" + "\x11\x46\x55\xb8\xc2\x2d\x6d\x3f\xf8\xb6\x38\xae\x7d\xea\x6b\x17" + "\x84\x3e\x09\xe5\x2e\xb6\x6f\xa1\xe4\x75\xe4\xa8\xa3\xde\x42\x9b" + "\x7d\x0f\x4a\x77\x6f\xcb\x8b\xdc\x9b\x9f\xed\xe7\xd5\x2e\x81\x5f", + 186 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x58\x17\x02\x7d\x6b\xdd\x00\xc5\xdd\x10\xac\x59\x3c\xd5\x60\x37" + "\x22\x70\x77\x5a\x18\x52\x6d\x7e\x6f\x13\x87\x2a\x2e\x20\xea\xb6" + "\x64\x62\x5b\xe7\x16\x8a\xc4\xbd\x7c\x9e\x0c\xe7\xfc\x40\x99\xe0" + "\xf4\x84\x42\xe2\xc7\x67\x19\x1c\x6e\x12\x84\xe9\xb2\xcc\xea\x8c", + 187 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x08\xe4\x10\x28\x34\x0a\x45\xc7\x4e\x40\x52\xb3\xa8\xd6\x38\x9e" + "\x22\xe0\x43\xa1\xad\xab\x5e\x28\xd9\x76\x19\x45\x0d\x72\x34\x69" + "\xb6\x20\xca\xa5\x19\xb8\x1c\x14\x52\x38\x54\xf6\x19\xfd\x30\x27" + "\xe3\x84\x7b\xd0\x32\x76\xe6\x06\x04\xa8\x0d\xdb\x4d\xe8\x76\xd6", + 188 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x13\x0b\x84\x20\x53\x7e\xb0\x7d\x72\xab\xda\x07\xc8\x5a\xcb\xd8" + "\xb9\xa4\x4f\x16\x32\x1d\xd0\x42\x21\x45\xf8\x09\x67\x3d\x30\xf2" + "\xb5\x32\x13\x26\xe2\xbf\xf3\x17\xef\x3f\xef\x98\x3c\x51\xc4\xf8" + "\xab\x24\xa3\x25\xd2\x98\xe3\x4a\xfc\xe5\x69\xa8\x25\x55\x77\x4c", + 189 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xac\x49\xb8\x44\xaf\xaa\x01\x2e\x31\xc4\x74\xca\x26\x36\x48\x84" + "\x4f\xd2\xf6\x30\x79\x92\xc2\xf7\x52\xac\xa0\x2c\x38\x28\x96\x51" + "\x75\x79\x4d\xee\xe2\xd2\xee\x95\xc6\x1c\xd2\x84\xf6\xb5\xa2\xd7" + "\x5e\x2e\xf2\xb2\x9e\xe8\x14\x9e\x77\xfb\x81\x44\x7b\x2f\xd0\x4b", + 190 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xb9\xd7\xca\x81\xcc\x60\xbb\x95\x78\xe4\x40\x24\xe5\xa0\xa0\xbe" + "\x80\xf2\x73\x36\xa6\xa9\xf4\xe5\x3d\xf3\x99\x9c\xb1\x91\x28\x0b" + "\x09\x0e\x2a\xc2\xd2\x9c\x5b\xaa\xd9\xd7\x14\x15\xbd\xc1\x29\xe6" + "\x9a\xa2\x66\x7a\xf6\xa7\xfd\x5e\x18\x9f\xcc\xdc\xee\x81\x73\x40", + 191 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa7\x55\xe1\x13\x38\x65\x72\xc7\x5c\xed\x61\xd7\x19\x70\x60\x70" + "\xb9\x14\x60\x48\xe4\x2a\x9f\x8c\xd3\x56\x67\xa0\x88\xb4\x2f\x08" + "\x80\x8a\xbd\xf7\x7e\x61\x8a\xbd\x95\x9a\xfc\x75\x73\x79\xca\x2c" + "\x00\xbc\xc1\xa4\x83\x90\xfa\x2b\xff\x61\x8b\x1e\x00\x78\xa6\x13", + 192 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa7\x3c\x7d\xeb\xed\x32\x6f\x1c\x0d\xb0\x79\x5e\xe7\xd6\xe3\x94" + "\x68\x94\xb8\x26\xb1\xf8\x10\x1c\x56\xc8\x23\xba\x17\x16\x83\x12" + "\xe7\xf5\x3f\xc7\xdb\xe5\x2c\x3e\x11\xe6\x98\x52\xc4\x04\x85\xe2" + "\xef\x18\x24\x77\x86\x2e\xa6\xa3\x4e\xc1\x36\xe2\xdf\xee\xa6\xf4", + 193 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x6c\xb8\xf9\xd5\x2c\x56\xd8\x2c\xac\x28\xf3\x9e\xa1\x59\x3e\x8b" + "\xb2\x50\x62\x93\xac\x0d\x68\x37\x6a\x17\x09\xb6\x2a\x46\xdf\x14" + "\xa4\xae\x64\xb2\xd8\xfa\xb7\x67\x33\xa1\xce\xd2\xd5\x48\xe3\xf3" + "\xc6\xfc\xb4\x9d\x40\xc3\xd5\x80\x8e\x44\x9c\xd8\x3d\x1c\x2a\xa2", + 194 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x68\x3f\xa2\xb2\x36\x9a\x10\x16\x2c\x1c\x1c\x7b\x24\xbc\x97\x0e" + "\xe6\x7d\xa2\x20\x56\x4f\x32\x20\x3f\x62\x56\x96\xc0\x35\x2a\x0b" + "\x9a\xd9\x66\x24\x36\x2d\x95\x2d\x84\x46\x3c\x11\x06\xa2\xdb\xa7" + "\xa0\x92\x59\x98\x84\xb3\x5a\x0b\x89\xc8\xf1\xb6\xa9\xb5\xa6\x1e", + 195 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xaa\xd9\xad\x44\x61\x01\x18\xb7\x7d\x50\x8a\xeb\x1b\xbc\xd1\xc1" + "\xb7\xd0\x17\x13\x97\xfb\x51\x0a\x40\x1b\xbc\x0e\xc3\x46\x23\x67" + "\x0d\x86\xa2\xdc\x3c\x8f\x3a\xb5\xa2\x04\x4d\xf7\x30\x25\x67\x27" + "\x54\x5f\x08\x60\xce\x21\xa1\xea\xc7\x17\xdf\xc4\x8f\x5d\x22\x8e", + 196 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc4\x25\x78\xde\x23\xb4\xc9\x87\xd5\xe1\xac\x4d\x68\x9e\xd5\xde" + "\x4b\x04\x17\xf9\x70\x4b\xc6\xbc\xe9\x69\xfa\x13\x47\x15\x85\xd6" + "\x2c\x2c\xb1\x21\x2a\x94\x4f\x39\x7f\xc9\xca\x2c\x37\x47\xc3\xbe" + "\xb6\x94\xec\x4c\x5b\xe6\x88\x28\xdd\xa5\x3e\xf4\x3f\xae\xc6\xc0", + 197 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x47\x0f\x00\x84\x1e\xe8\x24\x4e\x63\xed\x2c\x7e\xa3\x0e\x2e\x41" + "\x98\x97\xc1\x97\x46\x2e\xcc\xce\xcf\x71\x3b\x42\xa5\x06\x5f\xff" + "\x59\x14\xbc\x9b\x79\xaf\xfe\x8f\x6b\x65\x78\x75\xe7\x89\xae\x21" + "\x3b\xd9\x14\xcd\x35\xbd\x17\x4d\x46\xe9\xd1\x8b\xd8\x43\x77\x3d", + 198 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x34\xfc\x42\x13\x73\x0f\x47\xa5\xe9\xa3\x58\x0f\x64\x3e\x12\x94" + "\x5c\xfc\xb3\x1b\xf2\x06\xf6\xad\x45\x0c\xe5\x28\xda\x3f\xa4\x32" + "\xe0\x05\xd6\xb0\xec\xce\x10\xdc\xa7\xc5\x99\x5f\x6a\xac\xc5\x15" + "\x0e\x1b\x00\x9e\x19\x75\x1e\x83\x09\xf8\x85\x95\x31\x84\x43\x74", + 199 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xfb\x3c\x1f\x0f\x56\xa5\x6f\x8e\x31\x6f\xdf\x5d\x85\x3c\x8c\x87" + "\x2c\x39\x63\x5d\x08\x36\x34\xc3\x90\x4f\xc3\xac\x07\xd1\xb5\x78" + "\xe8\x5f\xf0\xe4\x80\xe9\x2d\x44\xad\xe3\x3b\x62\xe8\x93\xee\x32" + "\x34\x3e\x79\xdd\xf6\xef\x29\x2e\x89\xb5\x82\xd3\x12\x50\x23\x14", + 200 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc7\xc9\x7f\xc6\x5d\xd2\xb9\xe3\xd3\xd6\x07\xd3\x15\x98\xd3\xf8" + "\x42\x61\xe9\x91\x92\x51\xe9\xc8\xe5\x7b\xb5\xf8\x29\x37\x7d\x5f" + "\x73\xea\xbb\xed\x55\xc6\xc3\x81\x18\x0f\x29\xad\x02\xe5\xbe\x79" + "\x7f\xfe\xc7\xe5\x7b\xde\xcb\xc5\x0a\xd3\xd0\x62\xf0\x99\x3a\xb0", + 201 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa5\x7a\x49\xcd\xbe\x67\xae\x7d\x9f\x79\x7b\xb5\xcc\x7e\xfc\x2d" + "\xf0\x7f\x4e\x1b\x15\x95\x5f\x85\xda\xe7\x4b\x76\xe2\xec\xb8\x5a" + "\xfb\x6c\xd9\xee\xed\x88\x88\xd5\xca\x3e\xc5\xab\x65\xd2\x7a\x7b" + "\x19\xe5\x78\x47\x57\x60\xa0\x45\xac\x3c\x92\xe1\x3a\x93\x8e\x77", + 202 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc7\x14\x3f\xce\x96\x14\xa1\x7f\xd6\x53\xae\xb1\x40\x72\x6d\xc9" + "\xc3\xdb\xb1\xde\x6c\xc5\x81\xb2\x72\x68\x97\xec\x24\xb7\xa5\x03" + "\x59\xad\x49\x22\x43\xbe\x66\xd9\xed\xd8\xc9\x33\xb5\xb8\x0e\x0b" + "\x91\xbb\x61\xea\x98\x05\x60\x06\x51\x69\x76\xfa\xe8\xd9\x9a\x35", + 203 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x65\xbb\x58\xd0\x7f\x93\x7e\x2d\x3c\x7e\x65\x38\x5f\x9c\x54\x73" + "\x0b\x70\x41\x05\xcc\xdb\x69\x1f\x6e\x14\x6d\x4e\xe8\xf6\xc0\x86" + "\xf4\x95\x11\x03\x51\x10\xa9\xad\x60\x31\xfd\xce\xb9\x43\xe0\xf9" + "\x61\x3b\xcb\x27\x6d\xd4\x0f\x06\x24\xef\x0f\x92\x4f\x80\x97\x83", + 204 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xe5\x40\x27\x7f\x68\x3b\x11\x86\xdd\x3b\x5b\x3f\x61\x43\x33\x96" + "\x58\x1a\x35\xfe\xb1\x20\x02\xbe\x8c\x6a\x62\x31\xfc\x40\xff\xa7" + "\x0f\x08\x08\x1b\xc5\x8b\x2d\x94\xf7\x64\x95\x43\x61\x4a\x43\x5f" + "\xaa\x2d\x62\x11\x0e\x13\xda\xbc\x7b\x86\x62\x9b\x63\xaf\x9c\x24", + 205 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x41\x85\x00\x87\x8c\x5f\xbc\xb5\x84\xc4\x32\xf4\x28\x5e\x05\xe4" + "\x9f\x2e\x3e\x07\x53\x99\xa0\xdb\xfc\xf8\x74\xeb\xf8\xc0\x3d\x02" + "\xbf\x16\xbc\x69\x89\xd1\x61\xc7\x7c\xa0\x78\x6b\x05\x05\x3c\x6c" + "\x70\x94\x33\x71\x23\x19\x19\x21\x28\x83\x5c\xf0\xb6\x60\x59\x5b", + 206 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x88\x90\x90\xdb\xb1\x94\x4b\xdc\x94\x33\xee\x5e\xf1\x01\x0c\x7a" + "\x4a\x24\xa8\xe7\x1e\xce\xa8\xe1\x2a\x31\x31\x8c\xe4\x9d\xca\xb0" + "\xac\xa5\xc3\x80\x23\x34\xaa\xb2\xcc\x84\xb1\x4c\x6b\x93\x21\xfe" + "\x58\x6b\xf3\xf8\x76\xf1\x9c\xd4\x06\xeb\x11\x27\xfb\x94\x48\x01", + 207 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x53\xb6\xa2\x89\x10\xaa\x92\xe2\x7e\x53\x6f\xb5\x49\xcf\x9b\x99" + "\x18\x79\x10\x60\x89\x8e\x0b\x9f\xe1\x83\x57\x7f\xf4\x3b\x5e\x9c" + "\x76\x89\xc7\x45\xb3\x2e\x41\x22\x69\x83\x7c\x31\xb8\x9e\x6c\xc1" + "\x2b\xf7\x6e\x13\xca\xd3\x66\xb7\x4e\xce\x48\xbb\x85\xfd\x09\xe9", + 208 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x7c\x09\x20\x80\xc6\xa8\x0d\x67\x24\x09\xd0\x81\xd3\xd1\x77\x10" + "\x6b\xcd\x63\x56\x77\x85\x14\x07\x19\x49\x09\x50\xae\x07\xae\x8f" + "\xca\xab\xba\xaa\xb3\x30\xcf\xbc\xf7\x37\x44\x82\xc2\x20\xaf\x2e" + "\xad\xee\xb7\x3d\xcb\xb3\x5e\xd8\x23\x34\x4e\x14\x4e\x7d\x48\x99", + 209 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x9c\xcd\xe5\x66\xd2\x40\x05\x09\x18\x11\x11\xf3\x2d\xde\x4c\xd6" + "\x32\x09\xfe\x59\xa3\x0c\x11\x45\x46\xad\x27\x76\xd8\x89\xa4\x1b" + "\xad\x8f\xa1\xbb\x46\x8c\xb2\xf9\xd4\x2c\xa9\x92\x8a\x77\x70\xfe" + "\xf8\xe8\xba\x4d\x0c\x81\x2d\x9a\x1e\x75\xc3\xd8\xd2\xcc\xd7\x5a", + 210 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x6e\x29\x3b\xf5\xd0\x3f\xe4\x39\x77\xcf\xe3\xf5\x7c\xcd\xb3\xae" + "\x28\x2a\x85\x45\x5d\xca\x33\xf3\x7f\x4b\x74\xf8\x39\x8c\xc6\x12" + "\x43\x3d\x75\x5c\xbe\xc4\x12\xf8\xf8\x2a\x3b\xd3\xbc\x4a\x27\x8f" + "\x7e\xcd\x0d\xfa\x9b\xbd\xc4\x0b\xe7\xa7\x87\xc8\xf1\x59\xb2\xdf", + 211 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc5\x65\x46\xfb\x21\x78\x45\x6f\x33\x61\x64\xc1\x8b\x90\xde\xff" + "\xc8\x3a\xe2\xb5\xa3\xac\xa7\x7b\x68\x84\xd3\x6d\x2c\x1d\xb3\x95" + "\x01\xb3\xe6\x5e\x36\xc7\x58\xc6\x6e\x31\x88\x45\x1f\xdb\x35\x15" + "\xee\x16\x2c\x00\x1f\x06\xc3\xe8\xcb\x57\x3a\xdf\x30\xf7\xa1\x01", + 212 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x6f\x82\xf8\x9f\x29\x9e\xbc\xa2\xfe\x01\x4b\x59\xbf\xfe\x1a\xa8" + "\x4e\x88\xb1\x91\x5f\xe2\x56\xaf\xb6\x46\xfd\x84\x48\xaf\x2b\x88" + "\x91\xa7\xfa\xb3\x7a\x4e\xa6\xf9\xa5\x0e\x6c\x31\x70\x39\xd8\xcf" + "\x87\x8f\x4c\x8e\x1a\x0d\xd4\x64\xf0\xb4\xd6\xff\x1c\x7e\xa8\x53", + 213 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x2b\x85\x99\xff\x9c\x3d\x61\x98\x63\x7a\xd5\x1e\x57\xd1\x99\x8b" + "\x0d\x75\x31\x3f\xe2\xdd\x61\xa5\x33\xc9\x64\xa6\xdd\x96\x07\xc6" + "\xf7\x23\xe9\x45\x2c\xe4\x6e\x01\x4b\x1c\x1d\x6d\xe7\x7b\xa5\xb8" + "\x8c\x91\x4d\x1c\x59\x7b\xf1\xea\xe1\x34\x74\xb4\x29\x0e\x89\xb2", + 214 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x08\xbf\x34\x6d\x38\xe1\xdf\x06\xc8\x26\x0e\xdb\x1d\xa7\x55\x79" + "\x27\x59\x48\xd5\xc0\xa0\xaa\x9e\xd2\x88\x6f\x88\x56\xde\x54\x17" + "\xa1\x56\x99\x87\x58\xf5\xb1\x7e\x52\xf1\x01\xca\x95\x7a\x71\x13" + "\x74\x73\xdf\xd1\x8d\x7d\x20\x9c\x4c\x10\xd9\x23\x3c\x93\x69\x1d", + 215 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x6d\xf2\x15\x6d\x77\x31\x14\xd3\x10\xb6\x3d\xb9\xee\x53\x50\xd7" + "\x7e\x6b\xcf\x25\xb0\x5f\xcd\x91\x0f\x9b\x31\xbc\x42\xbb\x13\xfe" + "\x82\x25\xeb\xcb\x2a\x23\xa6\x22\x80\x77\x7b\x6b\xf7\x4e\x2c\xd0" + "\x91\x7c\x76\x40\xb4\x3d\xef\xe4\x68\xcd\x1e\x18\xc9\x43\xc6\x6a", + 216 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x7c\x70\x38\xbc\x13\xa9\x11\x51\x82\x8a\x5b\xa8\x2b\x4a\x96\x04" + "\x0f\x25\x8a\x4d\xfb\x1b\x13\x73\xf0\xd3\x59\x16\x8a\xfb\x05\x17" + "\xa2\x0b\x28\xa1\x2d\x36\x44\x04\x6b\xe6\x6b\x8d\x08\xd8\xae\x7f" + "\x6a\x92\x3e\xa1\xc0\x01\x87\xc6\xd1\x1d\xc5\x02\xba\xc7\x13\x05", + 217 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xbc\xd1\xb3\x0d\x80\x8f\xb7\x39\xb9\x87\xcb\xf1\x54\xbe\xa0\x0d" + "\xa9\xd4\x03\x80\xb8\x61\xd4\xc1\xd6\x37\x71\x22\xda\xdd\x61\xc0" + "\xe5\x90\x18\xb7\x19\x41\xcf\xb6\x2e\x00\xdc\xd7\x0a\xeb\x9a\xbf" + "\x04\x73\xe8\x0f\x0a\x7e\xca\x6b\x6d\xea\x24\x6a\xb2\x29\xdd\x2b", + 218 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x7e\xd4\x46\x8d\x96\x85\x30\xfe\x7a\xb2\xc3\x35\x40\xb2\x6d\x8c" + "\x3b\xd3\xed\x44\xb3\x4f\xbe\x8c\x2a\x9d\x7f\x80\x5b\x5a\xda\x0e" + "\xa2\x52\xee\xad\xe4\xfc\xe9\x7f\x89\x72\x8a\xd8\x5b\xc8\xbb\x24" + "\x30\xb1\xbe\xf2\xcd\xdd\x32\xc8\x44\x6e\x59\xb8\xe8\xba\x3c\x67", + 219 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x6d\x30\xb7\xc6\xce\x8a\x32\x36\xc0\xca\x2f\x8d\x72\x8b\x10\x88" + "\xca\x06\x98\x3a\x80\x43\xe6\x21\xd5\xdc\xf0\xc5\x37\xd1\x3b\x08" + "\x79\x1e\xde\xb0\x1a\x3c\xf0\x94\x3e\xc1\xc8\x90\xab\x6e\x29\xb1" + "\x46\xa2\x36\xcd\x46\xbc\xb9\xd9\x3b\xf5\x16\xfb\x67\xc6\x3f\xe5", + 220 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x97\xfe\x03\xce\xf3\x14\x38\x50\x89\x11\xbd\xed\x97\x59\x80\xa6" + "\x60\x29\x30\x5d\xc5\xe3\xfa\x8a\xd1\xb4\xfb\x22\xfc\xdf\x5a\x19" + "\xa7\x33\x32\x03\x27\xd8\xf7\x1c\xcf\x49\x6c\xb3\xa4\x4a\x77\xaf" + "\x56\xe3\xdd\xe7\x3d\x3a\x5f\x17\x68\x96\xcc\x57\xc9\xa5\xad\x99", + 221 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x78\x5a\x9d\x0f\xbd\x21\x13\x6d\xbc\xe8\xfa\x7e\xaf\xd6\x3c\x9d" + "\xad\x22\x00\x52\x97\x84\x16\xb3\x1d\x97\x53\xea\xa1\x49\x09\x78" + "\x47\xed\x9b\x30\xa6\x5c\x70\x50\x7e\xff\x01\x87\x91\x49\xed\x5c" + "\xf0\x47\x1d\x37\x79\x8e\xdc\x05\xab\xd5\x6a\xd4\xa2\xcc\xcb\x1d", + 222 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xad\x40\x8d\x2a\xbd\xdf\xd3\x7b\x3b\xf3\x47\x94\xc1\xa3\x37\x1d" + "\x92\x8e\xd7\xfc\x8d\x96\x62\x25\x33\x35\x84\xc5\x66\x58\x17\x83" + "\x2a\x37\xc0\x7f\x0d\xc7\xcb\x5a\xa8\x74\xcd\x7d\x20\xfe\x8f\xab" + "\x8e\xab\xcb\x9b\x33\xd2\xe0\x84\x1f\x6e\x20\x09\x60\x89\x9d\x95", + 223 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x97\x66\x8f\x74\x5b\x60\x32\xfc\x81\x5d\x95\x79\x32\x27\x69\xdc" + "\xcd\x95\x01\xa5\x08\x00\x29\xb8\xae\x82\x6b\xef\xb6\x74\x23\x31" + "\xbd\x9f\x76\xef\xeb\x3e\x2b\x8e\x81\xa9\x78\x6b\x28\x2f\x50\x68" + "\xa3\xa2\x42\x46\x97\xa7\x7c\x41\x87\x6b\x7e\x75\x3f\x4c\x77\x67", + 224 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x26\xbb\x98\x5f\x47\xe7\xfe\xe0\xcf\xd2\x52\xd4\xef\x96\xbe\xd4" + "\x2b\x9c\x37\x0c\x1c\x6a\x3e\x8c\x9e\xb0\x4e\xf7\xf7\x81\x8b\x83" + "\x3a\x0d\x1f\x04\x3e\xba\xfb\x91\x1d\xc7\x79\xe0\x27\x40\xa0\x2a" + "\x44\xd3\xa1\xea\x45\xed\x4a\xd5\x5e\x68\x6c\x92\x7c\xaf\xe9\x7e", + 225 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x5b\xfe\x2b\x1d\xcf\x7f\xe9\xb9\x50\x88\xac\xed\xb5\x75\xc1\x90" + "\x16\xc7\x43\xb2\xe7\x63\xbf\x58\x51\xac\x40\x7c\x9e\xda\x43\x71" + "\x5e\xdf\xa4\x8b\x48\x25\x49\x2c\x51\x79\x59\x3f\xff\x21\x35\x1b" + "\x76\xe8\xb7\xe0\x34\xe4\xc5\x3c\x79\xf6\x1f\x29\xc4\x79\xbd\x08", + 226 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xc7\x65\x09\xef\x72\xf4\xa6\xf9\xc9\xc4\x06\x18\xed\x52\xb2\x08" + "\x4f\x83\x50\x22\x32\xe0\xac\x8b\xda\xf3\x26\x43\x68\xe4\xd0\x18" + "\x0f\x68\x54\xc4\xab\xf4\xf6\x50\x9c\x79\xca\xaf\xc4\x4c\xf3\x19" + "\x4a\xfc\x57\xbd\x07\x7b\xd7\xb3\xc9\xbd\xa3\xd4\xb8\x77\x58\x16", + 227 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xd6\x6f\x2b\xea\xb9\x90\xe3\x54\xcc\xb9\x10\xe4\xe9\xc7\xac\x61" + "\x8c\x7b\x63\xef\x29\x2a\x96\xb5\x52\x34\x1d\xe7\x8d\xc4\x6d\x3e" + "\xc8\xcf\xab\xc6\x99\xb5\x0a\xf4\x1f\xda\x39\xcf\x1b\x01\x73\x66" + "\x09\x23\x51\x0a\xd6\x7f\xae\xde\xf5\x20\x7c\xff\xe8\x64\x1d\x20", + 228 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x7d\x8f\x06\x72\x99\x2b\x79\xbe\x3a\x36\x4d\x8e\x59\x04\xf4\xab" + "\x71\x3b\xbc\x8a\xb0\x1b\x4f\x30\x9a\xd8\xcc\xf2\x23\xce\x10\x34" + "\xa8\x60\xdc\xb0\xb0\x05\x50\x61\x2c\xc2\xfa\x17\xf2\x96\x9e\x18" + "\xf2\x2e\x14\x27\xd2\x54\xb4\xa8\x2b\x3a\x03\xa3\xeb\x39\x4a\xdf", + 229 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa5\x6d\x67\x25\xbf\xb3\xde\x47\xc1\x41\x4a\xdf\x25\xfc\x8f\x0f" + "\xc9\x84\x6f\x69\x87\x72\x2b\xc0\x63\x66\xd5\xca\x4e\x89\x72\x29" + "\x25\xeb\xbc\x88\x14\x18\x84\x40\x75\x39\x7a\x0c\xa8\x98\x42\xc7" + "\xb9\xe9\xe0\x7e\x1d\x9d\x18\x3e\xbe\xb3\x9e\x12\x0b\x48\x3b\xf7", + 230 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xaf\x5e\x03\xd7\xfe\x60\xc6\x7e\x10\x31\x33\x44\x43\x4e\x79\x48" + "\x5a\x03\xa7\x58\xd6\xdc\xe9\x85\x57\x47\x45\x76\x3c\x1c\x5c\x77" + "\xd4\xfb\x3e\x6f\xb1\x22\x30\x36\x83\x70\x99\x3b\xf9\x0f\xee\xd0" + "\xc5\xd1\x60\x75\x24\x56\x2d\x7c\x09\xc0\xc2\x10\xed\x39\x3d\x7c", + 231 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x7a\x20\x54\x0c\xc0\x7b\xf7\x2b\x58\x24\x21\xfc\x34\x2e\x82\xf5" + "\x21\x34\xb6\x98\x41\xec\x28\xed\x18\x9e\x2e\xa6\xa2\x9d\xd2\xf8" + "\x2a\x64\x03\x52\xd2\x22\xb5\x2f\x29\x11\xdc\x72\xa7\xda\xb3\x1c" + "\xaa\xdd\x80\xc6\x11\x8f\x13\xc5\x6b\x2a\x1e\x43\x73\xbe\x0e\xa3", + 232 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x48\x6f\x02\xc6\x3e\x54\x67\xea\x1f\xdd\xe7\xe8\x2b\xfa\xcc\x2c" + "\x1b\xa5\xd6\x36\xd9\xf3\xd0\x8b\x21\x0d\xa3\xf3\x72\xf7\x06\xec" + "\x21\x8c\xc1\x7f\xf6\x0a\xef\x70\x3b\xbe\x0c\x15\xc3\x8a\xe5\x5d" + "\x28\x6a\x68\x4f\x86\x4c\x78\x21\x1c\xca\xb4\x17\x8c\x92\xad\xba", + 233 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x1c\x7a\x5c\x1d\xed\xcd\x04\xa9\x21\x78\x8f\x7e\xb2\x33\x61\xca" + "\x19\x53\xb0\x4b\x9c\x7a\xec\x35\xd6\x5e\xa3\xe4\x99\x6d\xb2\x6f" + "\x28\x12\x78\xea\x4a\xe6\x66\xad\x81\x02\x7d\x98\xaf\x57\x26\x2c" + "\xdb\xfa\x4c\x08\x5f\x42\x10\x56\x8c\x7e\x15\xee\xc7\x80\x51\x14", + 234 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x9c\xe3\xfa\x9a\x86\x0b\xdb\xd5\x37\x8f\xd6\xd7\xb8\xb6\x71\xc6" + "\xcb\x76\x92\x91\x0c\xe8\xf9\xb6\xcb\x41\x22\xcb\xcb\xe6\xac\x06" + "\xca\x04\x22\xce\xf1\x22\x59\x35\x05\x3b\x7d\x19\x3a\x81\xb9\xe9" + "\x72\xeb\x85\xa1\xd3\x07\x4f\x14\xcb\xb5\xec\x9f\x05\x73\x89\x2d", + 235 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xa9\x11\x87\xbe\x5c\x37\x1c\x42\x65\xc1\x74\xfd\x46\x53\xb8\xab" + "\x70\x85\x51\xf8\x3d\x1f\xee\x1c\xc1\x47\x95\x81\xbc\x00\x6d\x6f" + "\xb7\x8f\xcc\x9a\x5d\xee\x1d\xb3\x66\x6f\x50\x8f\x97\x80\xa3\x75" + "\x93\xeb\xcc\xcf\x5f\xbe\xd3\x96\x67\xdc\x63\x61\xe9\x21\xf7\x79", + 236 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x46\x25\x76\x7d\x7b\x1d\x3d\x3e\xd2\xfb\xc6\x74\xaf\x14\xe0\x24" + "\x41\x52\xf2\xa4\x02\x1f\xcf\x33\x11\x50\x5d\x89\xbd\x81\xe2\xf9" + "\xf9\xa5\x00\xc3\xb1\x99\x91\x4d\xb4\x95\x00\xb3\xc9\x8d\x03\xea" + "\x93\x28\x67\x51\xa6\x86\xa3\xb8\x75\xda\xab\x0c\xcd\x63\xb4\x4f", + 237 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x43\xdf\xdf\xe1\xb0\x14\xfe\xd3\xa2\xac\xab\xb7\xf3\xe9\xa1\x82" + "\xf2\xaa\x18\x01\x9d\x27\xe3\xe6\xcd\xcf\x31\xa1\x5b\x42\x8e\x91" + "\xe7\xb0\x8c\xf5\xe5\xc3\x76\xfc\xe2\xd8\xa2\x8f\xf8\x5a\xb0\xa0" + "\xa1\x65\x6e\xdb\x4a\x0a\x91\x53\x26\x20\x09\x6d\x9a\x5a\x65\x2d", + 238 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x27\x9e\x32\x02\xbe\x39\x89\xba\x31\x12\x77\x25\x85\x17\x74\x87" + "\xe4\xfe\x3e\xe3\xea\xb4\x9c\x2f\x7f\xa7\xfe\x87\xcf\xe7\xb8\x0d" + "\x3e\x03\x55\xed\xff\x6d\x03\x1e\x6c\x96\xc7\x95\xdb\x1c\x6f\x04" + "\x18\x80\xec\x38\x24\xde\xfa\xcf\x92\x63\x82\x0a\x8e\x73\x27\xde", + 239 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xea\x2d\x06\x6a\xc2\x29\xd4\xd4\xb6\x16\xa8\xbe\xde\xc7\x34\x32" + "\x52\x24\xe4\xb4\xe5\x8f\x1a\xe6\xda\xd7\xe4\x0c\x2d\xa2\x91\x96" + "\xc3\xb1\xea\x95\x71\xda\xcc\x81\xe8\x73\x28\xca\xa0\x21\x1e\x09" + "\x02\x7b\x05\x24\xaa\x3f\x4a\x84\x99\x17\xb3\x58\x67\x47\xeb\xbb", + 240 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x49\xf0\x14\xf5\xc6\x18\x22\xc8\x99\xab\x5c\xae\x51\xbe\x40\x44" + "\xa4\x49\x5e\x77\x7d\xeb\x7d\xa9\xb6\xd8\x49\x0e\xfb\xb8\x75\x30" + "\xad\xf2\x93\xda\xf0\x79\xf9\x4c\x33\xb7\x04\x4e\xf6\x2e\x2e\x5b" + "\xb3\xeb\x11\xe1\x73\x04\xf8\x45\x3e\xe6\xce\x24\xf0\x33\xdd\xb0", + 241 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x92\x33\x49\x03\x44\xe5\xb0\xdc\x59\x12\x67\x1b\x7a\xe5\x4c\xee" + "\x77\x30\xdb\xe1\xf4\xc7\xd9\x2a\x4d\x3e\x3a\xab\x50\x57\x17\x08" + "\xdb\x51\xdc\xf9\xc2\x94\x45\x91\xdb\x65\x1d\xb3\x2d\x22\x93\x5b" + "\x86\x94\x49\x69\xbe\x77\xd5\xb5\xfe\xae\x6c\x38\x40\xa8\xdb\x26", + 242 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xb6\xe7\x5e\x6f\x4c\x7f\x45\x3b\x74\x65\xd2\x5b\x5a\xc8\xc7\x19" + "\x69\x02\xea\xa9\x53\x87\x52\x28\xc8\x63\x4e\x16\xe2\xae\x1f\x38" + "\xbc\x32\x75\x30\x43\x35\xf5\x98\x9e\xcc\xc1\xe3\x41\x67\xd4\xe6" + "\x8d\x77\x19\x96\x8f\xba\x8e\x2f\xe6\x79\x47\xc3\x5c\x48\xe8\x06", + 243 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xcc\x14\xca\x66\x5a\xf1\x48\x3e\xfb\xc3\xaf\x80\x08\x0e\x65\x0d" + "\x50\x46\xa3\x93\x2f\x4f\x51\xf3\xfe\x90\xa0\x70\x5e\xc2\x51\x04" + "\xad\xf0\x78\x39\x26\x5d\xc5\x1d\x43\x40\x14\x11\x24\x6e\x47\x4f" + "\x0d\x5e\x56\x37\xaf\x94\x76\x72\x83\xd5\x3e\x06\x17\xe9\x81\xf4", + 244 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x23\x0a\x1c\x85\x7c\xb2\xe7\x85\x2e\x41\xb6\x47\xe9\x0e\x45\x85" + "\xd2\xd8\x81\xe1\x73\x4d\xc3\x89\x55\x35\x6e\x8d\xd7\xbf\xf3\x90" + "\x53\x09\x2c\x6b\x38\xe2\x36\xe1\x89\x95\x25\x64\x70\x73\xdd\xdf" + "\x68\x95\xd6\x42\x06\x32\x5e\x76\x47\xf2\x75\x56\x7b\x25\x59\x09", + 245 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xcb\xb6\x53\x21\xac\x43\x6e\x2f\xfd\xab\x29\x36\x35\x9c\xe4\x90" + "\x23\xf7\xde\xe7\x61\x4e\xf2\x8d\x17\x3c\x3d\x27\xc5\xd1\xbf\xfa" + "\x51\x55\x3d\x43\x3f\x8e\xe3\xc9\xe4\x9c\x05\xa2\xb8\x83\xcc\xe9" + "\x54\xc9\xa8\x09\x3b\x80\x61\x2a\x0c\xdd\x47\x32\xe0\x41\xf9\x95", + 246 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x3e\x7e\x57\x00\x74\x33\x72\x75\xef\xb5\x13\x15\x58\x80\x34\xc3" + "\xcf\x0d\xdd\xca\x20\xb4\x61\x2e\x0b\xd5\xb8\x81\xe7\xe5\x47\x6d" + "\x31\x9c\xe4\xfe\x9f\x19\x18\x6e\x4c\x08\x26\xf4\x4f\x13\x1e\xb0" + "\x48\xe6\x5b\xe2\x42\xb1\x17\x2c\x63\xba\xdb\x12\x3a\xb0\xcb\xe8", + 247 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xd3\x2e\x9e\xc0\x2d\x38\xd4\xe1\xb8\x24\x9d\xf8\xdc\xb0\x0c\x5b" + "\x9c\x68\xeb\x89\x22\x67\x2e\x35\x05\x39\x3b\x6a\x21\x0b\xa5\x6f" + "\x94\x96\xe5\xee\x04\x90\xef\x38\x7c\x3c\xde\xc0\x61\xf0\x6b\xc0" + "\x38\x2d\x93\x04\xca\xfb\xb8\xe0\xcd\x33\xd5\x70\x29\xe6\x2d\xf2", + 248 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x8c\x15\x12\x46\x60\x89\xf0\x5b\x37\x75\xc2\x62\xb6\x2d\x22\xb8" + "\x38\x54\xa8\x32\x18\x13\x0b\x4e\xc9\x1b\x3c\xcb\xd2\x93\xd2\xa5" + "\x43\x02\xce\xca\xab\x9b\x10\x0c\x68\xd1\xe6\xdd\xc8\xf0\x7c\xdd" + "\xbd\xfe\x6f\xda\xaa\xf0\x99\xcc\x09\xd6\xb7\x25\x87\x9c\x63\x69", + 249 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x91\xa7\xf6\x1c\x97\xc2\x91\x1e\x4c\x81\x2e\xf7\x1d\x78\x0a\xd8" + "\xfa\x78\x87\x94\x56\x1d\x08\x30\x3f\xd1\xc1\xcb\x60\x8a\x46\xa1" + "\x25\x63\x08\x6e\xc5\xb3\x9d\x47\x1a\xed\x94\xfb\x0f\x6c\x67\x8a" + "\x43\xb8\x79\x29\x32\xf9\x02\x8d\x77\x2a\x22\x76\x8e\xa2\x3a\x9b", + 250 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x4f\x6b\xb2\x22\xa3\x95\xe8\xb1\x8f\x6b\xa1\x55\x47\x7a\xed\x3f" + "\x07\x29\xac\x9e\x83\xe1\x6d\x31\xa2\xa8\xbc\x65\x54\x22\xb8\x37" + "\xc8\x91\xc6\x19\x9e\x6f\x0d\x75\x79\x9e\x3b\x69\x15\x25\xc5\x81" + "\x95\x35\x17\xf2\x52\xc4\xb9\xe3\xa2\x7a\x28\xfb\xaf\x49\x64\x4c", + 251 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x5d\x06\xc0\x7e\x7a\x64\x6c\x41\x3a\x50\x1c\x3f\x4b\xb2\xfc\x38" + "\x12\x7d\xe7\x50\x9b\x70\x77\xc4\xd9\xb5\x61\x32\x01\xc1\xaa\x02" + "\xfd\x5f\x79\xd2\x74\x59\x15\xdd\x57\xfb\xcb\x4c\xe0\x86\x95\xf6" + "\xef\xc0\xcb\x3d\x2d\x33\x0e\x19\xb4\xb0\xe6\x00\x4e\xa6\x47\x1e", + 252 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xb9\x67\x56\xe5\x79\x09\x96\x8f\x14\xb7\x96\xa5\xd3\x0f\x4c\x9d" + "\x67\x14\x72\xcf\x82\xc8\xcf\xb2\xca\xca\x7a\xc7\xa4\x4c\xa0\xa1" + "\x4c\x98\x42\xd0\x0c\x82\xe3\x37\x50\x2c\x94\xd5\x96\x0a\xca\x4c" + "\x49\x2e\xa7\xb0\xdf\x91\x9d\xdf\x1a\xad\xa2\xa2\x75\xbb\x10\xd4", + 253 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\xff\x0a\x01\x5e\x98\xdb\x9c\x99\xf0\x39\x77\x71\x0a\xac\x3e\x65" + "\x8c\x0d\x89\x6f\x6d\x71\xd6\x18\xba\x79\xdc\x6c\xf7\x2a\xc7\x5b" + "\x7c\x03\x8e\xb6\x86\x2d\xed\xe4\x54\x3e\x14\x54\x13\xa6\x36\x8d" + "\x69\xf5\x72\x2c\x82\x7b\xa3\xef\x25\xb6\xae\x64\x40\xd3\x92\x76", + 254 }, + { GCRY_MD_BLAKE2B_512, blake2_data_vector, + "\x5b\x21\xc5\xfd\x88\x68\x36\x76\x12\x47\x4f\xa2\xe7\x0e\x9c\xfa" + "\x22\x01\xff\xee\xe8\xfa\xfa\xb5\x79\x7a\xd5\x8f\xef\xa1\x7c\x9b" + "\x5b\x10\x7d\xa4\xa3\xdb\x63\x20\xba\xaf\x2c\x86\x17\xd5\xa5\x1d" + "\xf9\x14\xae\x88\xda\x38\x67\xc2\xd4\x1f\x0c\xc1\x4f\xa6\x79\x28", + 255 }, diff --git a/tests/blake2s.h b/tests/blake2s.h new file mode 100644 index 0000000..82e3237 --- /dev/null +++ b/tests/blake2s.h @@ -0,0 +1,1027 @@ +/* Generated from https://raw.githubusercontent.com/BLAKE2/BLAKE2/master/testvectors/blake2-kat.h */ + + /* blake2s_kat[]: */ + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x69\x21\x7a\x30\x79\x90\x80\x94\xe1\x11\x21\xd0\x42\x35\x4a\x7c" + "\x1f\x55\xb6\x48\x2c\xa1\xa5\x1e\x1b\x25\x0d\xfd\x1e\xd0\xee\xf9", + 0 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe3\x4d\x74\xdb\xaf\x4f\xf4\xc6\xab\xd8\x71\xcc\x22\x04\x51\xd2" + "\xea\x26\x48\x84\x6c\x77\x57\xfb\xaa\xc8\x2f\xe5\x1a\xd6\x4b\xea", + 1 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xdd\xad\x9a\xb1\x5d\xac\x45\x49\xba\x42\xf4\x9d\x26\x24\x96\xbe" + "\xf6\xc0\xba\xe1\xdd\x34\x2a\x88\x08\xf8\xea\x26\x7c\x6e\x21\x0c", + 2 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe8\xf9\x1c\x6e\xf2\x32\xa0\x41\x45\x2a\xb0\xe1\x49\x07\x0c\xdd" + "\x7d\xd1\x76\x9e\x75\xb3\xa5\x92\x1b\xe3\x78\x76\xc4\x5c\x99\x00", + 3 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x0c\xc7\x0e\x00\x34\x8b\x86\xba\x29\x44\xd0\xc3\x20\x38\xb2\x5c" + "\x55\x58\x4f\x90\xdf\x23\x04\xf5\x5f\xa3\x32\xaf\x5f\xb0\x1e\x20", + 4 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xec\x19\x64\x19\x10\x87\xa4\xfe\x9d\xf1\xc7\x95\x34\x2a\x02\xff" + "\xc1\x91\xa5\xb2\x51\x76\x48\x56\xae\x5b\x8b\x57\x69\xf0\xc6\xcd", + 5 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe1\xfa\x51\x61\x8d\x7d\xf4\xeb\x70\xcf\x0d\x5a\x9e\x90\x6f\x80" + "\x6e\x9d\x19\xf7\xf4\xf0\x1e\x3b\x62\x12\x88\xe4\x12\x04\x05\xd6", + 6 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x59\x80\x01\xfa\xfb\xe8\xf9\x4e\xc6\x6d\xc8\x27\xd0\x12\xcf\xcb" + "\xba\x22\x28\x56\x9f\x44\x8e\x89\xea\x22\x08\xc8\xbf\x76\x92\x93", + 7 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc7\xe8\x87\xb5\x46\x62\x36\x35\xe9\x3e\x04\x95\x59\x8f\x17\x26" + "\x82\x19\x96\xc2\x37\x77\x05\xb9\x3a\x1f\x63\x6f\x87\x2b\xfa\x2d", + 8 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc3\x15\xa4\x37\xdd\x28\x06\x2a\x77\x0d\x48\x19\x67\x13\x6b\x1b" + "\x5e\xb8\x8b\x21\xee\x53\xd0\x32\x9c\x58\x97\x12\x6e\x9d\xb0\x2c", + 9 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xbb\x47\x3d\xed\xdc\x05\x5f\xea\x62\x28\xf2\x07\xda\x57\x53\x47" + "\xbb\x00\x40\x4c\xd3\x49\xd3\x8c\x18\x02\x63\x07\xa2\x24\xcb\xff", + 10 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x68\x7e\x18\x73\xa8\x27\x75\x91\xbb\x33\xd9\xad\xf9\xa1\x39\x12" + "\xef\xef\xe5\x57\xca\xfc\x39\xa7\x95\x26\x23\xe4\x72\x55\xf1\x6d", + 11 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x1a\xc7\xba\x75\x4d\x6e\x2f\x94\xe0\xe8\x6c\x46\xbf\xb2\x62\xab" + "\xbb\x74\xf4\x50\xef\x45\x6d\x6b\x4d\x97\xaa\x80\xce\x6d\xa7\x67", + 12 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x01\x2c\x97\x80\x96\x14\x81\x6b\x5d\x94\x94\x47\x7d\x4b\x68\x7d" + "\x15\xb9\x6e\xb6\x9c\x0e\x80\x74\xa8\x51\x6f\x31\x22\x4b\x5c\x98", + 13 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x91\xff\xd2\x6c\xfa\x4d\xa5\x13\x4c\x7e\xa2\x62\xf7\x88\x9c\x32" + "\x9f\x61\xf6\xa6\x57\x22\x5c\xc2\x12\xf4\x00\x56\xd9\x86\xb3\xf4", + 14 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xd9\x7c\x82\x8d\x81\x82\xa7\x21\x80\xa0\x6a\x78\x26\x83\x30\x67" + "\x3f\x7c\x4e\x06\x35\x94\x7c\x04\xc0\x23\x23\xfd\x45\xc0\xa5\x2d", + 15 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xef\xc0\x4c\xdc\x39\x1c\x7e\x91\x19\xbd\x38\x66\x8a\x53\x4e\x65" + "\xfe\x31\x03\x6d\x6a\x62\x11\x2e\x44\xeb\xeb\x11\xf9\xc5\x70\x80", + 16 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x99\x2c\xf5\xc0\x53\x44\x2a\x5f\xbc\x4f\xaf\x58\x3e\x04\xe5\x0b" + "\xb7\x0d\x2f\x39\xfb\xb6\xa5\x03\xf8\x9e\x56\xa6\x3e\x18\x57\x8a", + 17 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x38\x64\x0e\x9f\x21\x98\x3e\x67\xb5\x39\xca\xcc\xae\x5e\xcf\x61" + "\x5a\xe2\x76\x4f\x75\xa0\x9c\x9c\x59\xb7\x64\x83\xc1\xfb\xc7\x35", + 18 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x21\x3d\xd3\x4c\x7e\xfe\x4f\xb2\x7a\x6b\x35\xf6\xb4\x00\x0d\x1f" + "\xe0\x32\x81\xaf\x3c\x72\x3e\x5c\x9f\x94\x74\x7a\x5f\x31\xcd\x3b", + 19 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xec\x24\x6e\xee\xb9\xce\xd3\xf7\xad\x33\xed\x28\x66\x0d\xd9\xbb" + "\x07\x32\x51\x3d\xb4\xe2\xfa\x27\x8b\x60\xcd\xe3\x68\x2a\x4c\xcd", + 20 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xac\x9b\x61\xd4\x46\x64\x8c\x30\x05\xd7\x89\x2b\xf3\xa8\x71\x9f" + "\x4c\x81\x81\xcf\xdc\xbc\x2b\x79\xfe\xf1\x0a\x27\x9b\x91\x10\x95", + 21 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x7b\xf8\xb2\x29\x59\xe3\x4e\x3a\x43\xf7\x07\x92\x23\xe8\x3a\x97" + "\x54\x61\x7d\x39\x1e\x21\x3d\xfd\x80\x8e\x41\xb9\xbe\xad\x4c\xe7", + 22 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x68\xd4\xb5\xd4\xfa\x0e\x30\x2b\x64\xcc\xc5\xaf\x79\x29\x13\xac" + "\x4c\x88\xec\x95\xc0\x7d\xdf\x40\x69\x42\x56\xeb\x88\xce\x9f\x3d", + 23 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xb2\xc2\x42\x0f\x05\xf9\xab\xe3\x63\x15\x91\x93\x36\xb3\x7e\x4e" + "\x0f\xa3\x3f\xf7\xe7\x6a\x49\x27\x67\x00\x6f\xdb\x5d\x93\x54\x62", + 24 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x13\x4f\x61\xbb\xd0\xbb\xb6\x9a\xed\x53\x43\x90\x45\x51\xa3\xe6" + "\xc1\xaa\x7d\xcd\xd7\x7e\x90\x3e\x70\x23\xeb\x7c\x60\x32\x0a\xa7", + 25 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x46\x93\xf9\xbf\xf7\xd4\xf3\x98\x6a\x7d\x17\x6e\x6e\x06\xf7\x2a" + "\xd1\x49\x0d\x80\x5c\x99\xe2\x53\x47\xb8\xde\x77\xb4\xdb\x6d\x9b", + 26 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x85\x3e\x26\xf7\x41\x95\x3b\x0f\xd5\xbd\xb4\x24\xe8\xab\x9e\x8b" + "\x37\x50\xea\xa8\xef\x61\xe4\x79\x02\xc9\x1e\x55\x4e\x9c\x73\xb9", + 27 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf7\xde\x53\x63\x61\xab\xaa\x0e\x15\x81\x56\xcf\x0e\xa4\xf6\x3a" + "\x99\xb5\xe4\x05\x4f\x8f\xa4\xc9\xd4\x5f\x62\x85\xca\xd5\x56\x94", + 28 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x4c\x23\x06\x08\x86\x0a\x99\xae\x8d\x7b\xd5\xc2\xcc\x17\xfa\x52" + "\x09\x6b\x9a\x61\xbe\xdb\x17\xcb\x76\x17\x86\x4a\xd2\x9c\xa7\xa6", + 29 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xae\xb9\x20\xea\x87\x95\x2d\xad\xb1\xfb\x75\x92\x91\xe3\x38\x81" + "\x39\xa8\x72\x86\x50\x01\x88\x6e\xd8\x47\x52\xe9\x3c\x25\x0c\x2a", + 30 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xab\xa4\xad\x9b\x48\x0b\x9d\xf3\xd0\x8c\xa5\xe8\x7b\x0c\x24\x40" + "\xd4\xe4\xea\x21\x22\x4c\x2e\xb4\x2c\xba\xe4\x69\xd0\x89\xb9\x31", + 31 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x05\x82\x56\x07\xd7\xfd\xf2\xd8\x2e\xf4\xc3\xc8\xc2\xae\xa9\x61" + "\xad\x98\xd6\x0e\xdf\xf7\xd0\x18\x98\x3e\x21\x20\x4c\x0d\x93\xd1", + 32 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xa7\x42\xf8\xb6\xaf\x82\xd8\xa6\xca\x23\x57\xc5\xf1\xcf\x91\xde" + "\xfb\xd0\x66\x26\x7d\x75\xc0\x48\xb3\x52\x36\x65\x85\x02\x59\x62", + 33 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x2b\xca\xc8\x95\x99\x00\x0b\x42\xc9\x5a\xe2\x38\x35\xa7\x13\x70" + "\x4e\xd7\x97\x89\xc8\x4f\xef\x14\x9a\x87\x4f\xf7\x33\xf0\x17\xa2", + 34 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xac\x1e\xd0\x7d\x04\x8f\x10\x5a\x9e\x5b\x7a\xb8\x5b\x09\xa4\x92" + "\xd5\xba\xff\x14\xb8\xbf\xb0\xe9\xfd\x78\x94\x86\xee\xa2\xb9\x74", + 35 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe4\x8d\x0e\xcf\xaf\x49\x7d\x5b\x27\xc2\x5d\x99\xe1\x56\xcb\x05" + "\x79\xd4\x40\xd6\xe3\x1f\xb6\x24\x73\x69\x6d\xbf\x95\xe0\x10\xe4", + 36 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x12\xa9\x1f\xad\xf8\xb2\x16\x44\xfd\x0f\x93\x4f\x3c\x4a\x8f\x62" + "\xba\x86\x2f\xfd\x20\xe8\xe9\x61\x15\x4c\x15\xc1\x38\x84\xed\x3d", + 37 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x7c\xbe\xe9\x6e\x13\x98\x97\xdc\x98\xfb\xef\x3b\xe8\x1a\xd4\xd9" + "\x64\xd2\x35\xcb\x12\x14\x1f\xb6\x67\x27\xe6\xe5\xdf\x73\xa8\x78", + 38 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xeb\xf6\x6a\xbb\x59\x7a\xe5\x72\xa7\x29\x7c\xb0\x87\x1e\x35\x5a" + "\xcc\xaf\xad\x83\x77\xb8\xe7\x8b\xf1\x64\xce\x2a\x18\xde\x4b\xaf", + 39 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x71\xb9\x33\xb0\x7e\x4f\xf7\x81\x8c\xe0\x59\xd0\x08\x82\x9e\x45" + "\x3c\x6f\xf0\x2e\xc0\xa7\xdb\x39\x3f\xc2\xd8\x70\xf3\x7a\x72\x86", + 40 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x7c\xf7\xc5\x13\x31\x22\x0b\x8d\x3e\xba\xed\x9c\x29\x39\x8a\x16" + "\xd9\x81\x56\xe2\x61\x3c\xb0\x88\xf2\xb0\xe0\x8a\x1b\xe4\xcf\x4f", + 41 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x3e\x41\xa1\x08\xe0\xf6\x4a\xd2\x76\xb9\x79\xe1\xce\x06\x82\x79" + "\xe1\x6f\x7b\xc7\xe4\xaa\x1d\x21\x1e\x17\xb8\x11\x61\xdf\x16\x02", + 42 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x88\x65\x02\xa8\x2a\xb4\x7b\xa8\xd8\x67\x10\xaa\x9d\xe3\xd4\x6e" + "\xa6\x5c\x47\xaf\x6e\xe8\xde\x45\x0c\xce\xb8\xb1\x1b\x04\x5f\x50", + 43 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc0\x21\xbc\x5f\x09\x54\xfe\xe9\x4f\x46\xea\x09\x48\x7e\x10\xa8" + "\x48\x40\xd0\x2f\x64\x81\x0b\xc0\x8d\x9e\x55\x1f\x7d\x41\x68\x14", + 44 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x20\x30\x51\x6e\x8a\x5f\xe1\x9a\xe7\x9c\x33\x6f\xce\x26\x38\x2a" + "\x74\x9d\x3f\xd0\xec\x91\xe5\x37\xd4\xbd\x23\x58\xc1\x2d\xfb\x22", + 45 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x55\x66\x98\xda\xc8\x31\x7f\xd3\x6d\xfb\xdf\x25\xa7\x9c\xb1\x12" + "\xd5\x42\x58\x60\x60\x5c\xba\xf5\x07\xf2\x3b\xf7\xe9\xf4\x2a\xfe", + 46 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x2f\x86\x7b\xa6\x77\x73\xfd\xc3\xe9\x2f\xce\xd9\x9a\x64\x09\xad" + "\x39\xd0\xb8\x80\xfd\xe8\xf1\x09\xa8\x17\x30\xc4\x45\x1d\x01\x78", + 47 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x17\x2e\xc2\x18\xf1\x19\xdf\xae\x98\x89\x6d\xff\x29\xdd\x98\x76" + "\xc9\x4a\xf8\x74\x17\xf9\xae\x4c\x70\x14\xbb\x4e\x4b\x96\xaf\xc7", + 48 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x3f\x85\x81\x4a\x18\x19\x5f\x87\x9a\xa9\x62\xf9\x5d\x26\xbd\x82" + "\xa2\x78\xf2\xb8\x23\x20\x21\x8f\x6b\x3b\xd6\xf7\xf6\x67\xa6\xd9", + 49 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x1b\x61\x8f\xba\xa5\x66\xb3\xd4\x98\xc1\x2e\x98\x2c\x9e\xc5\x2e" + "\x4d\xa8\x5a\x8c\x54\xf3\x8f\x34\xc0\x90\x39\x4f\x23\xc1\x84\xc1", + 50 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x0c\x75\x8f\xb5\x69\x2f\xfd\x41\xa3\x57\x5d\x0a\xf0\x0c\xc7\xfb" + "\xf2\xcb\xe5\x90\x5a\x58\x32\x3a\x88\xae\x42\x44\xf6\xe4\xc9\x93", + 51 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xa9\x31\x36\x0c\xad\x62\x8c\x7f\x12\xa6\xc1\xc4\xb7\x53\xb0\xf4" + "\x06\x2a\xef\x3c\xe6\x5a\x1a\xe3\xf1\x93\x69\xda\xdf\x3a\xe2\x3d", + 52 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xcb\xac\x7d\x77\x3b\x1e\x3b\x3c\x66\x91\xd7\xab\xb7\xe9\xdf\x04" + "\x5c\x8b\xa1\x92\x68\xde\xd1\x53\x20\x7f\x5e\x80\x43\x52\xec\x5d", + 53 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x23\xa1\x96\xd3\x80\x2e\xd3\xc1\xb3\x84\x01\x9a\x82\x32\x58\x40" + "\xd3\x2f\x71\x95\x0c\x45\x80\xb0\x34\x45\xe0\x89\x8e\x14\x05\x3c", + 54 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf4\x49\x54\x70\xf2\x26\xc8\xc2\x14\xbe\x08\xfd\xfa\xd4\xbc\x4a" + "\x2a\x9d\xbe\xa9\x13\x6a\x21\x0d\xf0\xd4\xb6\x49\x29\xe6\xfc\x14", + 55 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe2\x90\xdd\x27\x0b\x46\x7f\x34\xab\x1c\x00\x2d\x34\x0f\xa0\x16" + "\x25\x7f\xf1\x9e\x58\x33\xfd\xbb\xf2\xcb\x40\x1c\x3b\x28\x17\xde", + 56 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x9f\xc7\xb5\xde\xd3\xc1\x50\x42\xb2\xa6\x58\x2d\xc3\x9b\xe0\x16" + "\xd2\x4a\x68\x2d\x5e\x61\xad\x1e\xff\x9c\x63\x30\x98\x48\xf7\x06", + 57 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x8c\xca\x67\xa3\x6d\x17\xd5\xe6\x34\x1c\xb5\x92\xfd\x7b\xef\x99" + "\x26\xc9\xe3\xaa\x10\x27\xea\x11\xa7\xd8\xbd\x26\x0b\x57\x6e\x04", + 58 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x40\x93\x92\xf5\x60\xf8\x68\x31\xda\x43\x73\xee\x5e\x00\x74\x26" + "\x05\x95\xd7\xbc\x24\x18\x3b\x60\xed\x70\x0d\x45\x83\xd3\xf6\xf0", + 59 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x28\x02\x16\x5d\xe0\x90\x91\x55\x46\xf3\x39\x8c\xd8\x49\x16\x4a" + "\x19\xf9\x2a\xdb\xc3\x61\xad\xc9\x9b\x0f\x20\xc8\xea\x07\x10\x54", + 60 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xad\x83\x91\x68\xd9\xf8\xa4\xbe\x95\xba\x9e\xf9\xa6\x92\xf0\x72" + "\x56\xae\x43\xfe\x6f\x98\x64\xe2\x90\x69\x1b\x02\x56\xce\x50\xa9", + 61 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x75\xfd\xaa\x50\x38\xc2\x84\xb8\x6d\x6e\x8a\xff\xe8\xb2\x80\x7e" + "\x46\x7b\x86\x60\x0e\x79\xaf\x36\x89\xfb\xc0\x63\x28\xcb\xf8\x94", + 62 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe5\x7c\xb7\x94\x87\xdd\x57\x90\x24\x32\xb2\x50\x73\x38\x13\xbd" + "\x96\xa8\x4e\xfc\xe5\x9f\x65\x0f\xac\x26\xe6\x69\x6a\xef\xaf\xc3", + 63 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x56\xf3\x4e\x8b\x96\x55\x7e\x90\xc1\xf2\x4b\x52\xd0\xc8\x9d\x51" + "\x08\x6a\xcf\x1b\x00\xf6\x34\xcf\x1d\xde\x92\x33\xb8\xea\xaa\x3e", + 64 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x1b\x53\xee\x94\xaa\xf3\x4e\x4b\x15\x9d\x48\xde\x35\x2c\x7f\x06" + "\x61\xd0\xa4\x0e\xdf\xf9\x5a\x0b\x16\x39\xb4\x09\x0e\x97\x44\x72", + 65 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x05\x70\x5e\x2a\x81\x75\x7c\x14\xbd\x38\x3e\xa9\x8d\xda\x54\x4e" + "\xb1\x0e\x6b\xc0\x7b\xae\x43\x5e\x25\x18\xdb\xe1\x33\x52\x53\x75", + 66 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xd8\xb2\x86\x6e\x8a\x30\x9d\xb5\x3e\x52\x9e\xc3\x29\x11\xd8\x2f" + "\x5c\xa1\x6c\xff\x76\x21\x68\x91\xa9\x67\x6a\xa3\x1a\xaa\x6c\x42", + 67 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf5\x04\x1c\x24\x12\x70\xeb\x04\xc7\x1e\xc2\xc9\x5d\x4c\x38\xd8" + "\x03\xb1\x23\x7b\x0f\x29\xfd\x4d\xb3\xeb\x39\x76\x69\xe8\x86\x99", + 68 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x9a\x4c\xe0\x77\xc3\x49\x32\x2f\x59\x5e\x0e\xe7\x9e\xd0\xda\x5f" + "\xab\x66\x75\x2c\xbf\xef\x8f\x87\xd0\xe9\xd0\x72\x3c\x75\x30\xdd", + 69 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x65\x7b\x09\xf3\xd0\xf5\x2b\x5b\x8f\x2f\x97\x16\x3a\x0e\xdf\x0c" + "\x04\xf0\x75\x40\x8a\x07\xbb\xeb\x3a\x41\x01\xa8\x91\x99\x0d\x62", + 70 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x1e\x3f\x7b\xd5\xa5\x8f\xa5\x33\x34\x4a\xa8\xed\x3a\xc1\x22\xbb" + "\x9e\x70\xd4\xef\x50\xd0\x04\x53\x08\x21\x94\x8f\x5f\xe6\x31\x5a", + 71 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x80\xdc\xcf\x3f\xd8\x3d\xfd\x0d\x35\xaa\x28\x58\x59\x22\xab\x89" + "\xd5\x31\x39\x97\x67\x3e\xaf\x90\x5c\xea\x9c\x0b\x22\x5c\x7b\x5f", + 72 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x8a\x0d\x0f\xbf\x63\x77\xd8\x3b\xb0\x8b\x51\x4b\x4b\x1c\x43\xac" + "\xc9\x5d\x75\x17\x14\xf8\x92\x56\x45\xcb\x6b\xc8\x56\xca\x15\x0a", + 73 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x9f\xa5\xb4\x87\x73\x8a\xd2\x84\x4c\xc6\x34\x8a\x90\x19\x18\xf6" + "\x59\xa3\xb8\x9e\x9c\x0d\xfe\xea\xd3\x0d\xd9\x4b\xcf\x42\xef\x8e", + 74 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x80\x83\x2c\x4a\x16\x77\xf5\xea\x25\x60\xf6\x68\xe9\x35\x4d\xd3" + "\x69\x97\xf0\x37\x28\xcf\xa5\x5e\x1b\x38\x33\x7c\x0c\x9e\xf8\x18", + 75 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xab\x37\xdd\xb6\x83\x13\x7e\x74\x08\x0d\x02\x6b\x59\x0b\x96\xae" + "\x9b\xb4\x47\x72\x2f\x30\x5a\x5a\xc5\x70\xec\x1d\xf9\xb1\x74\x3c", + 76 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x3e\xe7\x35\xa6\x94\xc2\x55\x9b\x69\x3a\xa6\x86\x29\x36\x1e\x15" + "\xd1\x22\x65\xad\x6a\x3d\xed\xf4\x88\xb0\xb0\x0f\xac\x97\x54\xba", + 77 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xd6\xfc\xd2\x32\x19\xb6\x47\xe4\xcb\xd5\xeb\x2d\x0a\xd0\x1e\xc8" + "\x83\x8a\x4b\x29\x01\xfc\x32\x5c\xc3\x70\x19\x81\xca\x6c\x88\x8b", + 78 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x05\x20\xec\x2f\x5b\xf7\xa7\x55\xda\xcb\x50\xc6\xbf\x23\x3e\x35" + "\x15\x43\x47\x63\xdb\x01\x39\xcc\xd9\xfa\xef\xbb\x82\x07\x61\x2d", + 79 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xaf\xf3\xb7\x5f\x3f\x58\x12\x64\xd7\x66\x16\x62\xb9\x2f\x5a\xd3" + "\x7c\x1d\x32\xbd\x45\xff\x81\xa4\xed\x8a\xdc\x9e\xf3\x0d\xd9\x89", + 80 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xd0\xdd\x65\x0b\xef\xd3\xba\x63\xdc\x25\x10\x2c\x62\x7c\x92\x1b" + "\x9c\xbe\xb0\xb1\x30\x68\x69\x35\xb5\xc9\x27\xcb\x7c\xcd\x5e\x3b", + 81 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe1\x14\x98\x16\xb1\x0a\x85\x14\xfb\x3e\x2c\xab\x2c\x08\xbe\xe9" + "\xf7\x3c\xe7\x62\x21\x70\x12\x46\xa5\x89\xbb\xb6\x73\x02\xd8\xa9", + 82 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x7d\xa3\xf4\x41\xde\x90\x54\x31\x7e\x72\xb5\xdb\xf9\x79\xda\x01" + "\xe6\xbc\xee\xbb\x84\x78\xea\xe6\xa2\x28\x49\xd9\x02\x92\x63\x5c", + 83 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x12\x30\xb1\xfc\x8a\x7d\x92\x15\xed\xc2\xd4\xa2\xde\xcb\xdd\x0a" + "\x6e\x21\x6c\x92\x42\x78\xc9\x1f\xc5\xd1\x0e\x7d\x60\x19\x2d\x94", + 84 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x57\x50\xd7\x16\xb4\x80\x8f\x75\x1f\xeb\xc3\x88\x06\xba\x17\x0b" + "\xf6\xd5\x19\x9a\x78\x16\xbe\x51\x4e\x3f\x93\x2f\xbe\x0c\xb8\x71", + 85 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x6f\xc5\x9b\x2f\x10\xfe\xba\x95\x4a\xa6\x82\x0b\x3c\xa9\x87\xee" + "\x81\xd5\xcc\x1d\xa3\xc6\x3c\xe8\x27\x30\x1c\x56\x9d\xfb\x39\xce", + 86 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc7\xc3\xfe\x1e\xeb\xdc\x7b\x5a\x93\x93\x26\xe8\xdd\xb8\x3e\x8b" + "\xf2\xb7\x80\xb6\x56\x78\xcb\x62\xf2\x08\xb0\x40\xab\xdd\x35\xe2", + 87 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x0c\x75\xc1\xa1\x5c\xf3\x4a\x31\x4e\xe4\x78\xf4\xa5\xce\x0b\x8a" + "\x6b\x36\x52\x8e\xf7\xa8\x20\x69\x6c\x3e\x42\x46\xc5\xa1\x58\x64", + 88 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x21\x6d\xc1\x2a\x10\x85\x69\xa3\xc7\xcd\xde\x4a\xed\x43\xa6\xc3" + "\x30\x13\x9d\xda\x3c\xcc\x4a\x10\x89\x05\xdb\x38\x61\x89\x90\x50", + 89 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xa5\x7b\xe6\xae\x67\x56\xf2\x8b\x02\xf5\x9d\xad\xf7\xe0\xd7\xd8" + "\x80\x7f\x10\xfa\x15\xce\xd1\xad\x35\x85\x52\x1a\x1d\x99\x5a\x89", + 90 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x81\x6a\xef\x87\x59\x53\x71\x6c\xd7\xa5\x81\xf7\x32\xf5\x3d\xd4" + "\x35\xda\xb6\x6d\x09\xc3\x61\xd2\xd6\x59\x2d\xe1\x77\x55\xd8\xa8", + 91 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x9a\x76\x89\x32\x26\x69\x3b\x6e\xa9\x7e\x6a\x73\x8f\x9d\x10\xfb" + "\x3d\x0b\x43\xae\x0e\x8b\x7d\x81\x23\xea\x76\xce\x97\x98\x9c\x7e", + 92 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x8d\xae\xdb\x9a\x27\x15\x29\xdb\xb7\xdc\x3b\x60\x7f\xe5\xeb\x2d" + "\x32\x11\x77\x07\x58\xdd\x3b\x0a\x35\x93\xd2\xd7\x95\x4e\x2d\x5b", + 93 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x16\xdb\xc0\xaa\x5d\xd2\xc7\x74\xf5\x05\x10\x0f\x73\x37\x86\xd8" + "\xa1\x75\xfc\xbb\xb5\x9c\x43\xe1\xfb\xff\x3e\x1e\xaf\x31\xcb\x4a", + 94 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x86\x06\xcb\x89\x9c\x6a\xea\xf5\x1b\x9d\xb0\xfe\x49\x24\xa9\xfd" + "\x5d\xab\xc1\x9f\x88\x26\xf2\xbc\x1c\x1d\x7d\xa1\x4d\x2c\x2c\x99", + 95 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x84\x79\x73\x1a\xed\xa5\x7b\xd3\x7e\xad\xb5\x1a\x50\x7e\x30\x7f" + "\x3b\xd9\x5e\x69\xdb\xca\x94\xf3\xbc\x21\x72\x60\x66\xad\x6d\xfd", + 96 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x58\x47\x3a\x9e\xa8\x2e\xfa\x3f\x3b\x3d\x8f\xc8\x3e\xd8\x86\x31" + "\x27\xb3\x3a\xe8\xde\xae\x63\x07\x20\x1e\xdb\x6d\xde\x61\xde\x29", + 97 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x9a\x92\x55\xd5\x3a\xf1\x16\xde\x8b\xa2\x7c\xe3\x5b\x4c\x7e\x15" + "\x64\x06\x57\xa0\xfc\xb8\x88\xc7\x0d\x95\x43\x1d\xac\xd8\xf8\x30", + 98 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x9e\xb0\x5f\xfb\xa3\x9f\xd8\x59\x6a\x45\x49\x3e\x18\xd2\x51\x0b" + "\xf3\xef\x06\x5c\x51\xd6\xe1\x3a\xbe\x66\xaa\x57\xe0\x5c\xfd\xb7", + 99 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x81\xdc\xc3\xa5\x05\xea\xce\x3f\x87\x9d\x8f\x70\x27\x76\x77\x0f" + "\x9d\xf5\x0e\x52\x1d\x14\x28\xa8\x5d\xaf\x04\xf9\xad\x21\x50\xe0", + 100 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe3\xe3\xc4\xaa\x3a\xcb\xbc\x85\x33\x2a\xf9\xd5\x64\xbc\x24\x16" + "\x5e\x16\x87\xf6\xb1\xad\xcb\xfa\xe7\x7a\x8f\x03\xc7\x2a\xc2\x8c", + 101 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x67\x46\xc8\x0b\x4e\xb5\x6a\xea\x45\xe6\x4e\x72\x89\xbb\xa3\xed" + "\xbf\x45\xec\xf8\x20\x64\x81\xff\x63\x02\x12\x29\x84\xcd\x52\x6a", + 102 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x2b\x62\x8e\x52\x76\x4d\x7d\x62\xc0\x86\x8b\x21\x23\x57\xcd\xd1" + "\x2d\x91\x49\x82\x2f\x4e\x98\x45\xd9\x18\xa0\x8d\x1a\xe9\x90\xc0", + 103 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe4\xbf\xe8\x0d\x58\xc9\x19\x94\x61\x39\x09\xdc\x4b\x1a\x12\x49" + "\x68\x96\xc0\x04\xaf\x7b\x57\x01\x48\x3d\xe4\x5d\x28\x23\xd7\x8e", + 104 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xeb\xb4\xba\x15\x0c\xef\x27\x34\x34\x5b\x5d\x64\x1b\xbe\xd0\x3a" + "\x21\xea\xfa\xe9\x33\xc9\x9e\x00\x92\x12\xef\x04\x57\x4a\x85\x30", + 105 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x39\x66\xec\x73\xb1\x54\xac\xc6\x97\xac\x5c\xf5\xb2\x4b\x40\xbd" + "\xb0\xdb\x9e\x39\x88\x36\xd7\x6d\x4b\x88\x0e\x3b\x2a\xf1\xaa\x27", + 106 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xef\x7e\x48\x31\xb3\xa8\x46\x36\x51\x8d\x6e\x4b\xfc\xe6\x4a\x43" + "\xdb\x2a\x5d\xda\x9c\xca\x2b\x44\xf3\x90\x33\xbd\xc4\x0d\x62\x43", + 107 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x7a\xbf\x6a\xcf\x5c\x8e\x54\x9d\xdb\xb1\x5a\xe8\xd8\xb3\x88\xc1" + "\xc1\x97\xe6\x98\x73\x7c\x97\x85\x50\x1e\xd1\xf9\x49\x30\xb7\xd9", + 108 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x88\x01\x8d\xed\x66\x81\x3f\x0c\xa9\x5d\xef\x47\x4c\x63\x06\x92" + "\x01\x99\x67\xb9\xe3\x68\x88\xda\xdd\x94\x12\x47\x19\xb6\x82\xf6", + 109 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x39\x30\x87\x6b\x9f\xc7\x52\x90\x36\xb0\x08\xb1\xb8\xbb\x99\x75" + "\x22\xa4\x41\x63\x5a\x0c\x25\xec\x02\xfb\x6d\x90\x26\xe5\x5a\x97", + 110 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x0a\x40\x49\xd5\x7e\x83\x3b\x56\x95\xfa\xc9\x3d\xd1\xfb\xef\x31" + "\x66\xb4\x4b\x12\xad\x11\x24\x86\x62\x38\x3a\xe0\x51\xe1\x58\x27", + 111 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x81\xdc\xc0\x67\x8b\xb6\xa7\x65\xe4\x8c\x32\x09\x65\x4f\xe9\x00" + "\x89\xce\x44\xff\x56\x18\x47\x7e\x39\xab\x28\x64\x76\xdf\x05\x2b", + 112 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe6\x9b\x3a\x36\xa4\x46\x19\x12\xdc\x08\x34\x6b\x11\xdd\xcb\x9d" + "\xb7\x96\xf8\x85\xfd\x01\x93\x6e\x66\x2f\xe2\x92\x97\xb0\x99\xa4", + 113 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x5a\xc6\x50\x3b\x0d\x8d\xa6\x91\x76\x46\xe6\xdc\xc8\x7e\xdc\x58" + "\xe9\x42\x45\x32\x4c\xc2\x04\xf4\xdd\x4a\xf0\x15\x63\xac\xd4\x27", + 114 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xdf\x6d\xda\x21\x35\x9a\x30\xbc\x27\x17\x80\x97\x1c\x1a\xbd\x56" + "\xa6\xef\x16\x7e\x48\x08\x87\x88\x8e\x73\xa8\x6d\x3b\xf6\x05\xe9", + 115 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe8\xe6\xe4\x70\x71\xe7\xb7\xdf\x25\x80\xf2\x25\xcf\xbb\xed\xf8" + "\x4c\xe6\x77\x46\x62\x66\x28\xd3\x30\x97\xe4\xb7\xdc\x57\x11\x07", + 116 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x53\xe4\x0e\xad\x62\x05\x1e\x19\xcb\x9b\xa8\x13\x3e\x3e\x5c\x1c" + "\xe0\x0d\xdc\xad\x8a\xcf\x34\x2a\x22\x43\x60\xb0\xac\xc1\x47\x77", + 117 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x9c\xcd\x53\xfe\x80\xbe\x78\x6a\xa9\x84\x63\x84\x62\xfb\x28\xaf" + "\xdf\x12\x2b\x34\xd7\x8f\x46\x87\xec\x63\x2b\xb1\x9d\xe2\x37\x1a", + 118 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xcb\xd4\x80\x52\xc4\x8d\x78\x84\x66\xa3\xe8\x11\x8c\x56\xc9\x7f" + "\xe1\x46\xe5\x54\x6f\xaa\xf9\x3e\x2b\xc3\xc4\x7e\x45\x93\x97\x53", + 119 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x25\x68\x83\xb1\x4e\x2a\xf4\x4d\xad\xb2\x8e\x1b\x34\xb2\xac\x0f" + "\x0f\x4c\x91\xc3\x4e\xc9\x16\x9e\x29\x03\x61\x58\xac\xaa\x95\xb9", + 120 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x44\x71\xb9\x1a\xb4\x2d\xb7\xc4\xdd\x84\x90\xab\x95\xa2\xee\x8d" + "\x04\xe3\xef\x5c\x3d\x6f\xc7\x1a\xc7\x4b\x2b\x26\x91\x4d\x16\x41", + 121 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xa5\xeb\x08\x03\x8f\x8f\x11\x55\xed\x86\xe6\x31\x90\x6f\xc1\x30" + "\x95\xf6\xbb\xa4\x1d\xe5\xd4\xe7\x95\x75\x8e\xc8\xc8\xdf\x8a\xf1", + 122 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xdc\x1d\xb6\x4e\xd8\xb4\x8a\x91\x0e\x06\x0a\x6b\x86\x63\x74\xc5" + "\x78\x78\x4e\x9a\xc4\x9a\xb2\x77\x40\x92\xac\x71\x50\x19\x34\xac", + 123 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x28\x54\x13\xb2\xf2\xee\x87\x3d\x34\x31\x9e\xe0\xbb\xfb\xb9\x0f" + "\x32\xda\x43\x4c\xc8\x7e\x3d\xb5\xed\x12\x1b\xb3\x98\xed\x96\x4b", + 124 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x02\x16\xe0\xf8\x1f\x75\x0f\x26\xf1\x99\x8b\xc3\x93\x4e\x3e\x12" + "\x4c\x99\x45\xe6\x85\xa6\x0b\x25\xe8\xfb\xd9\x62\x5a\xb6\xb5\x99", + 125 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x38\xc4\x10\xf5\xb9\xd4\x07\x20\x50\x75\x5b\x31\xdc\xa8\x9f\xd5" + "\x39\x5c\x67\x85\xee\xb3\xd7\x90\xf3\x20\xff\x94\x1c\x5a\x93\xbf", + 126 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf1\x84\x17\xb3\x9d\x61\x7a\xb1\xc1\x8f\xdf\x91\xeb\xd0\xfc\x6d" + "\x55\x16\xbb\x34\xcf\x39\x36\x40\x37\xbc\xe8\x1f\xa0\x4c\xec\xb1", + 127 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x1f\xa8\x77\xde\x67\x25\x9d\x19\x86\x3a\x2a\x34\xbc\xc6\x96\x2a" + "\x2b\x25\xfc\xbf\x5c\xbe\xcd\x7e\xde\x8f\x1f\xa3\x66\x88\xa7\x96", + 128 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x5b\xd1\x69\xe6\x7c\x82\xc2\xc2\xe9\x8e\xf7\x00\x8b\xdf\x26\x1f" + "\x2d\xdf\x30\xb1\xc0\x0f\x9e\x7f\x27\x5b\xb3\xe8\xa2\x8d\xc9\xa2", + 129 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc8\x0a\xbe\xeb\xb6\x69\xad\x5d\xee\xb5\xf5\xec\x8e\xa6\xb7\xa0" + "\x5d\xdf\x7d\x31\xec\x4c\x0a\x2e\xe2\x0b\x0b\x98\xca\xec\x67\x46", + 130 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe7\x6d\x3f\xbd\xa5\xba\x37\x4e\x6b\xf8\xe5\x0f\xad\xc3\xbb\xb9" + "\xba\x5c\x20\x6e\xbd\xec\x89\xa3\xa5\x4c\xf3\xdd\x84\xa0\x70\x16", + 131 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x7b\xba\x9d\xc5\xb5\xdb\x20\x71\xd1\x77\x52\xb1\x04\x4c\x1e\xce" + "\xd9\x6a\xaf\x2d\xd4\x6e\x9b\x43\x37\x50\xe8\xea\x0d\xcc\x18\x70", + 132 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf2\x9b\x1b\x1a\xb9\xba\xb1\x63\x01\x8e\xe3\xda\x15\x23\x2c\xca" + "\x78\xec\x52\xdb\xc3\x4e\xda\x5b\x82\x2e\xc1\xd8\x0f\xc2\x1b\xd0", + 133 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x9e\xe3\xe3\xe7\xe9\x00\xf1\xe1\x1d\x30\x8c\x4b\x2b\x30\x76\xd2" + "\x72\xcf\x70\x12\x4f\x9f\x51\xe1\xda\x60\xf3\x78\x46\xcd\xd2\xf4", + 134 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x70\xea\x3b\x01\x76\x92\x7d\x90\x96\xa1\x85\x08\xcd\x12\x3a\x29" + "\x03\x25\x92\x0a\x9d\x00\xa8\x9b\x5d\xe0\x42\x73\xfb\xc7\x6b\x85", + 135 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x67\xde\x25\xc0\x2a\x4a\xab\xa2\x3b\xdc\x97\x3c\x8b\xb0\xb5\x79" + "\x6d\x47\xcc\x06\x59\xd4\x3d\xff\x1f\x97\xde\x17\x49\x63\xb6\x8e", + 136 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xb2\x16\x8e\x4e\x0f\x18\xb0\xe6\x41\x00\xb5\x17\xed\x95\x25\x7d" + "\x73\xf0\x62\x0d\xf8\x85\xc1\x3d\x2e\xcf\x79\x36\x7b\x38\x4c\xee", + 137 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x2e\x7d\xec\x24\x28\x85\x3b\x2c\x71\x76\x07\x45\x54\x1f\x7a\xfe" + "\x98\x25\xb5\xdd\x77\xdf\x06\x51\x1d\x84\x41\xa9\x4b\xac\xc9\x27", + 138 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xca\x9f\xfa\xc4\xc4\x3f\x0b\x48\x46\x1d\xc5\xc2\x63\xbe\xa3\xf6" + "\xf0\x06\x11\xce\xac\xab\xf6\xf8\x95\xba\x2b\x01\x01\xdb\xb6\x8d", + 139 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x74\x10\xd4\x2d\x8f\xd1\xd5\xe9\xd2\xf5\x81\x5c\xb9\x34\x17\x99" + "\x88\x28\xef\x3c\x42\x30\xbf\xbd\x41\x2d\xf0\xa4\xa7\xa2\x50\x7a", + 140 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x50\x10\xf6\x84\x51\x6d\xcc\xd0\xb6\xee\x08\x52\xc2\x51\x2b\x4d" + "\xc0\x06\x6c\xf0\xd5\x6f\x35\x30\x29\x78\xdb\x8a\xe3\x2c\x6a\x81", + 141 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xac\xaa\xb5\x85\xf7\xb7\x9b\x71\x99\x35\xce\xb8\x95\x23\xdd\xc5" + "\x48\x27\xf7\x5c\x56\x88\x38\x56\x15\x4a\x56\xcd\xcd\x5e\xe9\x88", + 142 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x66\x6d\xe5\xd1\x44\x0f\xee\x73\x31\xaa\xf0\x12\x3a\x62\xef\x2d" + "\x8b\xa5\x74\x53\xa0\x76\x96\x35\xac\x6c\xd0\x1e\x63\x3f\x77\x12", + 143 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xa6\xf9\x86\x58\xf6\xea\xba\xf9\x02\xd8\xb3\x87\x1a\x4b\x10\x1d" + "\x16\x19\x6e\x8a\x4b\x24\x1e\x15\x58\xfe\x29\x96\x6e\x10\x3e\x8d", + 144 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x89\x15\x46\xa8\xb2\x9f\x30\x47\xdd\xcf\xe5\xb0\x0e\x45\xfd\x55" + "\x75\x63\x73\x10\x5e\xa8\x63\x7d\xfc\xff\x54\x7b\x6e\xa9\x53\x5f", + 145 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x18\xdf\xbc\x1a\xc5\xd2\x5b\x07\x61\x13\x7d\xbd\x22\xc1\x7c\x82" + "\x9d\x0f\x0e\xf1\xd8\x23\x44\xe9\xc8\x9c\x28\x66\x94\xda\x24\xe8", + 146 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xb5\x4b\x9b\x67\xf8\xfe\xd5\x4b\xbf\x5a\x26\x66\xdb\xdf\x4b\x23" + "\xcf\xf1\xd1\xb6\xf4\xaf\xc9\x85\xb2\xe6\xd3\x30\x5a\x9f\xf8\x0f", + 147 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x7d\xb4\x42\xe1\x32\xba\x59\xbc\x12\x89\xaa\x98\xb0\xd3\xe8\x06" + "\x00\x4f\x8e\xc1\x28\x11\xaf\x1e\x2e\x33\xc6\x9b\xfd\xe7\x29\xe1", + 148 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x25\x0f\x37\xcd\xc1\x5e\x81\x7d\x2f\x16\x0d\x99\x56\xc7\x1f\xe3" + "\xeb\x5d\xb7\x45\x56\xe4\xad\xf9\xa4\xff\xaf\xba\x74\x01\x03\x96", + 149 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x4a\xb8\xa3\xdd\x1d\xdf\x8a\xd4\x3d\xab\x13\xa2\x7f\x66\xa6\x54" + "\x4f\x29\x05\x97\xfa\x96\x04\x0e\x0e\x1d\xb9\x26\x3a\xa4\x79\xf8", + 150 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xee\x61\x72\x7a\x07\x66\xdf\x93\x9c\xcd\xc8\x60\x33\x40\x44\xc7" + "\x9a\x3c\x9b\x15\x62\x00\xbc\x3a\xa3\x29\x73\x48\x3d\x83\x41\xae", + 151 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x3f\x68\xc7\xec\x63\xac\x11\xeb\xb9\x8f\x94\xb3\x39\xb0\x5c\x10" + "\x49\x84\xfd\xa5\x01\x03\x06\x01\x44\xe5\xa2\xbf\xcc\xc9\xda\x95", + 152 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x05\x6f\x29\x81\x6b\x8a\xf8\xf5\x66\x82\xbc\x4d\x7c\xf0\x94\x11" + "\x1d\xa7\x73\x3e\x72\x6c\xd1\x3d\x6b\x3e\x8e\xa0\x3e\x92\xa0\xd5", + 153 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf5\xec\x43\xa2\x8a\xcb\xef\xf1\xf3\x31\x8a\x5b\xca\xc7\xc6\x6d" + "\xdb\x52\x30\xb7\x9d\xb2\xd1\x05\xbc\xbe\x15\xf3\xc1\x14\x8d\x69", + 154 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x2a\x69\x60\xad\x1d\x8d\xd5\x47\x55\x5c\xfb\xd5\xe4\x60\x0f\x1e" + "\xaa\x1c\x8e\xda\x34\xde\x03\x74\xec\x4a\x26\xea\xaa\xa3\x3b\x4e", + 155 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xdc\xc1\xea\x7b\xaa\xb9\x33\x84\xf7\x6b\x79\x68\x66\x19\x97\x54" + "\x74\x2f\x7b\x96\xd6\xb4\xc1\x20\x16\x5c\x04\xa6\xc4\xf5\xce\x10", + 156 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x13\xd5\xdf\x17\x92\x21\x37\x9c\x6a\x78\xc0\x7c\x79\x3f\xf5\x34" + "\x87\xca\xe6\xbf\x9f\xe8\x82\x54\x1a\xb0\xe7\x35\xe3\xea\xda\x3b", + 157 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x8c\x59\xe4\x40\x76\x41\xa0\x1e\x8f\xf9\x1f\x99\x80\xdc\x23\x6f" + "\x4e\xcd\x6f\xcf\x52\x58\x9a\x09\x9a\x96\x16\x33\x96\x77\x14\xe1", + 158 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x83\x3b\x1a\xc6\xa2\x51\xfd\x08\xfd\x6d\x90\x8f\xea\x2a\x4e\xe1" + "\xe0\x40\xbc\xa9\x3f\xc1\xa3\x8e\xc3\x82\x0e\x0c\x10\xbd\x82\xea", + 159 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xa2\x44\xf9\x27\xf3\xb4\x0b\x8f\x6c\x39\x15\x70\xc7\x65\x41\x8f" + "\x2f\x6e\x70\x8e\xac\x90\x06\xc5\x1a\x7f\xef\xf4\xaf\x3b\x2b\x9e", + 160 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x3d\x99\xed\x95\x50\xcf\x11\x96\xe6\xc4\xd2\x0c\x25\x96\x20\xf8" + "\x58\xc3\xd7\x03\x37\x4c\x12\x8c\xe7\xb5\x90\x31\x0c\x83\x04\x6d", + 161 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x2b\x35\xc4\x7d\x7b\x87\x76\x1f\x0a\xe4\x3a\xc5\x6a\xc2\x7b\x9f" + "\x25\x83\x03\x67\xb5\x95\xbe\x8c\x24\x0e\x94\x60\x0c\x6e\x33\x12", + 162 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x5d\x11\xed\x37\xd2\x4d\xc7\x67\x30\x5c\xb7\xe1\x46\x7d\x87\xc0" + "\x65\xac\x4b\xc8\xa4\x26\xde\x38\x99\x1f\xf5\x9a\xa8\x73\x5d\x02", + 163 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xb8\x36\x47\x8e\x1c\xa0\x64\x0d\xce\x6f\xd9\x10\xa5\x09\x62\x72" + "\xc8\x33\x09\x90\xcd\x97\x86\x4a\xc2\xbf\x14\xef\x6b\x23\x91\x4a", + 164 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x91\x00\xf9\x46\xd6\xcc\xde\x3a\x59\x7f\x90\xd3\x9f\xc1\x21\x5b" + "\xad\xdc\x74\x13\x64\x3d\x85\xc2\x1c\x3e\xee\x5d\x2d\xd3\x28\x94", + 165 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xda\x70\xee\xdd\x23\xe6\x63\xaa\x1a\x74\xb9\x76\x69\x35\xb4\x79" + "\x22\x2a\x72\xaf\xba\x5c\x79\x51\x58\xda\xd4\x1a\x3b\xd7\x7e\x40", + 166 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf0\x67\xed\x6a\x0d\xbd\x43\xaa\x0a\x92\x54\xe6\x9f\xd6\x6b\xdd" + "\x8a\xcb\x87\xde\x93\x6c\x25\x8c\xfb\x02\x28\x5f\x2c\x11\xfa\x79", + 167 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x71\x5c\x99\xc7\xd5\x75\x80\xcf\x97\x53\xb4\xc1\xd7\x95\xe4\x5a" + "\x83\xfb\xb2\x28\xc0\xd3\x6f\xbe\x20\xfa\xf3\x9b\xdd\x6d\x4e\x85", + 168 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe4\x57\xd6\xad\x1e\x67\xcb\x9b\xbd\x17\xcb\xd6\x98\xfa\x6d\x7d" + "\xae\x0c\x9b\x7a\xd6\xcb\xd6\x53\x96\x34\xe3\x2a\x71\x9c\x84\x92", + 169 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xec\xe3\xea\x81\x03\xe0\x24\x83\xc6\x4a\x70\xa4\xbd\xce\xe8\xce" + "\xb6\x27\x8f\x25\x33\xf3\xf4\x8d\xbe\xed\xfb\xa9\x45\x31\xd4\xae", + 170 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x38\x8a\xa5\xd3\x66\x7a\x97\xc6\x8d\x3d\x56\xf8\xf3\xee\x8d\x3d" + "\x36\x09\x1f\x17\xfe\x5d\x1b\x0d\x5d\x84\xc9\x3b\x2f\xfe\x40\xbd", + 171 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x8b\x6b\x31\xb9\xad\x7c\x3d\x5c\xd8\x4b\xf9\x89\x47\xb9\xcd\xb5" + "\x9d\xf8\xa2\x5f\xf7\x38\x10\x10\x13\xbe\x4f\xd6\x5e\x1d\xd1\xa3", + 172 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x06\x62\x91\xf6\xbb\xd2\x5f\x3c\x85\x3d\xb7\xd8\xb9\x5c\x9a\x1c" + "\xfb\x9b\xf1\xc1\xc9\x9f\xb9\x5a\x9b\x78\x69\xd9\x0f\x1c\x29\x03", + 173 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xa7\x07\xef\xbc\xcd\xce\xed\x42\x96\x7a\x66\xf5\x53\x9b\x93\xed" + "\x75\x60\xd4\x67\x30\x40\x16\xc4\x78\x0d\x77\x55\xa5\x65\xd4\xc4", + 174 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x38\xc5\x3d\xfb\x70\xbe\x7e\x79\x2b\x07\xa6\xa3\x5b\x8a\x6a\x0a" + "\xba\x02\xc5\xc5\xf3\x8b\xaf\x5c\x82\x3f\xdf\xd9\xe4\x2d\x65\x7e", + 175 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf2\x91\x13\x86\x50\x1d\x9a\xb9\xd7\x20\xcf\x8a\xd1\x05\x03\xd5" + "\x63\x4b\xf4\xb7\xd1\x2b\x56\xdf\xb7\x4f\xec\xc6\xe4\x09\x3f\x68", + 176 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc6\xf2\xbd\xd5\x2b\x81\xe6\xe4\xf6\x59\x5a\xbd\x4d\x7f\xb3\x1f" + "\x65\x11\x69\xd0\x0f\xf3\x26\x92\x6b\x34\x94\x7b\x28\xa8\x39\x59", + 177 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x29\x3d\x94\xb1\x8c\x98\xbb\x32\x23\x36\x6b\x8c\xe7\x4c\x28\xfb" + "\xdf\x28\xe1\xf8\x4a\x33\x50\xb0\xeb\x2d\x18\x04\xa5\x77\x57\x9b", + 178 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x2c\x2f\xa5\xc0\xb5\x15\x33\x16\x5b\xc3\x75\xc2\x2e\x27\x81\x76" + "\x82\x70\xa3\x83\x98\x5d\x13\xbd\x6b\x67\xb6\xfd\x67\xf8\x89\xeb", + 179 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xca\xa0\x9b\x82\xb7\x25\x62\xe4\x3f\x4b\x22\x75\xc0\x91\x91\x8e" + "\x62\x4d\x91\x16\x61\xcc\x81\x1b\xb5\xfa\xec\x51\xf6\x08\x8e\xf7", + 180 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x24\x76\x1e\x45\xe6\x74\x39\x53\x79\xfb\x17\x72\x9c\x78\xcb\x93" + "\x9e\x6f\x74\xc5\xdf\xfb\x9c\x96\x1f\x49\x59\x82\xc3\xed\x1f\xe3", + 181 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x55\xb7\x0a\x82\x13\x1e\xc9\x48\x88\xd7\xab\x54\xa7\xc5\x15\x25" + "\x5c\x39\x38\xbb\x10\xbc\x78\x4d\xc9\xb6\x7f\x07\x6e\x34\x1a\x73", + 182 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x6a\xb9\x05\x7b\x97\x7e\xbc\x3c\xa4\xd4\xce\x74\x50\x6c\x25\xcc" + "\xcd\xc5\x66\x49\x7c\x45\x0b\x54\x15\xa3\x94\x86\xf8\x65\x7a\x03", + 183 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x24\x06\x6d\xee\xe0\xec\xee\x15\xa4\x5f\x0a\x32\x6d\x0f\x8d\xbc" + "\x79\x76\x1e\xbb\x93\xcf\x8c\x03\x77\xaf\x44\x09\x78\xfc\xf9\x94", + 184 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x20\x00\x0d\x3f\x66\xba\x76\x86\x0d\x5a\x95\x06\x88\xb9\xaa\x0d" + "\x76\xcf\xea\x59\xb0\x05\xd8\x59\x91\x4b\x1a\x46\x65\x3a\x93\x9b", + 185 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xb9\x2d\xaa\x79\x60\x3e\x3b\xdb\xc3\xbf\xe0\xf4\x19\xe4\x09\xb2" + "\xea\x10\xdc\x43\x5b\xee\xfe\x29\x59\xda\x16\x89\x5d\x5d\xca\x1c", + 186 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe9\x47\x94\x87\x05\xb2\x06\xd5\x72\xb0\xe8\xf6\x2f\x66\xa6\x55" + "\x1c\xbd\x6b\xc3\x05\xd2\x6c\xe7\x53\x9a\x12\xf9\xaa\xdf\x75\x71", + 187 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x3d\x67\xc1\xb3\xf9\xb2\x39\x10\xe3\xd3\x5e\x6b\x0f\x2c\xcf\x44" + "\xa0\xb5\x40\xa4\x5c\x18\xba\x3c\x36\x26\x4d\xd4\x8e\x96\xaf\x6a", + 188 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc7\x55\x8b\xab\xda\x04\xbc\xcb\x76\x4d\x0b\xbf\x33\x58\x42\x51" + "\x41\x90\x2d\x22\x39\x1d\x9f\x8c\x59\x15\x9f\xec\x9e\x49\xb1\x51", + 189 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x0b\x73\x2b\xb0\x35\x67\x5a\x50\xff\x58\xf2\xc2\x42\xe4\x71\x0a" + "\xec\xe6\x46\x70\x07\x9c\x13\x04\x4c\x79\xc9\xb7\x49\x1f\x70\x00", + 190 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xd1\x20\xb5\xef\x6d\x57\xeb\xf0\x6e\xaf\x96\xbc\x93\x3c\x96\x7b" + "\x16\xcb\xe6\xe2\xbf\x00\x74\x1c\x30\xaa\x1c\x54\xba\x64\x80\x1f", + 191 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x58\xd2\x12\xad\x6f\x58\xae\xf0\xf8\x01\x16\xb4\x41\xe5\x7f\x61" + "\x95\xbf\xef\x26\xb6\x14\x63\xed\xec\x11\x83\xcd\xb0\x4f\xe7\x6d", + 192 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xb8\x83\x6f\x51\xd1\xe2\x9b\xdf\xdb\xa3\x25\x56\x53\x60\x26\x8b" + "\x8f\xad\x62\x74\x73\xed\xec\xef\x7e\xae\xfe\xe8\x37\xc7\x40\x03", + 193 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc5\x47\xa3\xc1\x24\xae\x56\x85\xff\xa7\xb8\xed\xaf\x96\xec\x86" + "\xf8\xb2\xd0\xd5\x0c\xee\x8b\xe3\xb1\xf0\xc7\x67\x63\x06\x9d\x9c", + 194 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x5d\x16\x8b\x76\x9a\x2f\x67\x85\x3d\x62\x95\xf7\x56\x8b\xe4\x0b" + "\xb7\xa1\x6b\x8d\x65\xba\x87\x63\x5d\x19\x78\xd2\xab\x11\xba\x2a", + 195 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xa2\xf6\x75\xdc\x73\x02\x63\x8c\xb6\x02\x01\x06\x4c\xa5\x50\x77" + "\x71\x4d\x71\xfe\x09\x6a\x31\x5f\x2f\xe7\x40\x12\x77\xca\xa5\xaf", + 196 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc8\xaa\xb5\xcd\x01\x60\xae\x78\xcd\x2e\x8a\xc5\xfb\x0e\x09\x3c" + "\xdb\x5c\x4b\x60\x52\xa0\xa9\x7b\xb0\x42\x16\x82\x6f\xa7\xa4\x37", + 197 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xff\x68\xca\x40\x35\xbf\xeb\x43\xfb\xf1\x45\xfd\xdd\x5e\x43\xf1" + "\xce\xa5\x4f\x11\xf7\xbe\xe1\x30\x58\xf0\x27\x32\x9a\x4a\x5f\xa4", + 198 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x1d\x4e\x54\x87\xae\x3c\x74\x0f\x2b\xa6\xe5\x41\xac\x91\xbc\x2b" + "\xfc\xd2\x99\x9c\x51\x8d\x80\x7b\x42\x67\x48\x80\x3a\x35\x0f\xd4", + 199 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x6d\x24\x4e\x1a\x06\xce\x4e\xf5\x78\xdd\x0f\x63\xaf\xf0\x93\x67" + "\x06\x73\x51\x19\xca\x9c\x8d\x22\xd8\x6c\x80\x14\x14\xab\x97\x41", + 200 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xde\xcf\x73\x29\xdb\xcc\x82\x7b\x8f\xc5\x24\xc9\x43\x1e\x89\x98" + "\x02\x9e\xce\x12\xce\x93\xb7\xb2\xf3\xe7\x69\xa9\x41\xfb\x8c\xea", + 201 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x2f\xaf\xcc\x0f\x2e\x63\xcb\xd0\x77\x55\xbe\x7b\x75\xec\xea\x0a" + "\xdf\xf9\xaa\x5e\xde\x2a\x52\xfd\xab\x4d\xfd\x03\x74\xcd\x48\x3f", + 202 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xaa\x85\x01\x0d\xd4\x6a\x54\x6b\x53\x5e\xf4\xcf\x5f\x07\xd6\x51" + "\x61\xe8\x98\x28\xf3\xa7\x7d\xb7\xb9\xb5\x6f\x0d\xf5\x9a\xae\x45", + 203 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x07\xe8\xe1\xee\x73\x2c\xb0\xd3\x56\xc9\xc0\xd1\x06\x9c\x89\xd1" + "\x7a\xdf\x6a\x9a\x33\x4f\x74\x5e\xc7\x86\x73\x32\x54\x8c\xa8\xe9", + 204 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x0e\x01\xe8\x1c\xad\xa8\x16\x2b\xfd\x5f\x8a\x8c\x81\x8a\x6c\x69" + "\xfe\xdf\x02\xce\xb5\x20\x85\x23\xcb\xe5\x31\x3b\x89\xca\x10\x53", + 205 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x6b\xb6\xc6\x47\x26\x55\x08\x43\x99\x85\x2e\x00\x24\x9f\x8c\xb2" + "\x47\x89\x6d\x39\x2b\x02\xd7\x3b\x7f\x0d\xd8\x18\xe1\xe2\x9b\x07", + 206 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x42\xd4\x63\x6e\x20\x60\xf0\x8f\x41\xc8\x82\xe7\x6b\x39\x6b\x11" + "\x2e\xf6\x27\xcc\x24\xc4\x3d\xd5\xf8\x3a\x1d\x1a\x7e\xad\x71\x1a", + 207 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x48\x58\xc9\xa1\x88\xb0\x23\x4f\xb9\xa8\xd4\x7d\x0b\x41\x33\x65" + "\x0a\x03\x0b\xd0\x61\x1b\x87\xc3\x89\x2e\x94\x95\x1f\x8d\xf8\x52", + 208 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x3f\xab\x3e\x36\x98\x8d\x44\x5a\x51\xc8\x78\x3e\x53\x1b\xe3\xa0" + "\x2b\xe4\x0c\xd0\x47\x96\xcf\xb6\x1d\x40\x34\x74\x42\xd3\xf7\x94", + 209 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xeb\xab\xc4\x96\x36\xbd\x43\x3d\x2e\xc8\xf0\xe5\x18\x73\x2e\xf8" + "\xfa\x21\xd4\xd0\x71\xcc\x3b\xc4\x6c\xd7\x9f\xa3\x8a\x28\xb8\x10", + 210 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xa1\xd0\x34\x35\x23\xb8\x93\xfc\xa8\x4f\x47\xfe\xb4\xa6\x4d\x35" + "\x0a\x17\xd8\xee\xf5\x49\x7e\xce\x69\x7d\x02\xd7\x91\x78\xb5\x91", + 211 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x26\x2e\xbf\xd9\x13\x0b\x7d\x28\x76\x0d\x08\xef\x8b\xfd\x3b\x86" + "\xcd\xd3\xb2\x11\x3d\x2c\xae\xf7\xea\x95\x1a\x30\x3d\xfa\x38\x46", + 212 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf7\x61\x58\xed\xd5\x0a\x15\x4f\xa7\x82\x03\xed\x23\x62\x93\x2f" + "\xcb\x82\x53\xaa\xe3\x78\x90\x3e\xde\xd1\xe0\x3f\x70\x21\xa2\x57", + 213 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x26\x17\x8e\x95\x0a\xc7\x22\xf6\x7a\xe5\x6e\x57\x1b\x28\x4c\x02" + "\x07\x68\x4a\x63\x34\xa1\x77\x48\xa9\x4d\x26\x0b\xc5\xf5\x52\x74", + 214 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc3\x78\xd1\xe4\x93\xb4\x0e\xf1\x1f\xe6\xa1\x5d\x9c\x27\x37\xa3" + "\x78\x09\x63\x4c\x5a\xba\xd5\xb3\x3d\x7e\x39\x3b\x4a\xe0\x5d\x03", + 215 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x98\x4b\xd8\x37\x91\x01\xbe\x8f\xd8\x06\x12\xd8\xea\x29\x59\xa7" + "\x86\x5e\xc9\x71\x85\x23\x55\x01\x07\xae\x39\x38\xdf\x32\x01\x1b", + 216 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc6\xf2\x5a\x81\x2a\x14\x48\x58\xac\x5c\xed\x37\xa9\x3a\x9f\x47" + "\x59\xba\x0b\x1c\x0f\xdc\x43\x1d\xce\x35\xf9\xec\x1f\x1f\x4a\x99", + 217 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x92\x4c\x75\xc9\x44\x24\xff\x75\xe7\x4b\x8b\x4e\x94\x35\x89\x58" + "\xb0\x27\xb1\x71\xdf\x5e\x57\x89\x9a\xd0\xd4\xda\xc3\x73\x53\xb6", + 218 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x0a\xf3\x58\x92\xa6\x3f\x45\x93\x1f\x68\x46\xed\x19\x03\x61\xcd" + "\x07\x30\x89\xe0\x77\x16\x57\x14\xb5\x0b\x81\xa2\xe3\xdd\x9b\xa1", + 219 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xcc\x80\xce\xfb\x26\xc3\xb2\xb0\xda\xef\x23\x3e\x60\x6d\x5f\xfc" + "\x80\xfa\x17\x42\x7d\x18\xe3\x04\x89\x67\x3e\x06\xef\x4b\x87\xf7", + 220 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc2\xf8\xc8\x11\x74\x47\xf3\x97\x8b\x08\x18\xdc\xf6\xf7\x01\x16" + "\xac\x56\xfd\x18\x4d\xd1\x27\x84\x94\xe1\x03\xfc\x6d\x74\xa8\x87", + 221 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xbd\xec\xf6\xbf\xc1\xba\x0d\xf6\xe8\x62\xc8\x31\x99\x22\x07\x79" + "\x6a\xcc\x79\x79\x68\x35\x88\x28\xc0\x6e\x7a\x51\xe0\x90\x09\x8f", + 222 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x24\xd1\xa2\x6e\x3d\xab\x02\xfe\x45\x72\xd2\xaa\x7d\xbd\x3e\xc3" + "\x0f\x06\x93\xdb\x26\xf2\x73\xd0\xab\x2c\xb0\xc1\x3b\x5e\x64\x51", + 223 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xec\x56\xf5\x8b\x09\x29\x9a\x30\x0b\x14\x05\x65\xd7\xd3\xe6\x87" + "\x82\xb6\xe2\xfb\xeb\x4b\x7e\xa9\x7a\xc0\x57\x98\x90\x61\xdd\x3f", + 224 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x11\xa4\x37\xc1\xab\xa3\xc1\x19\xdd\xfa\xb3\x1b\x3e\x8c\x84\x1d" + "\xee\xeb\x91\x3e\xf5\x7f\x7e\x48\xf2\xc9\xcf\x5a\x28\xfa\x42\xbc", + 225 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x53\xc7\xe6\x11\x4b\x85\x0a\x2c\xb4\x96\xc9\xb3\xc6\x9a\x62\x3e" + "\xae\xa2\xcb\x1d\x33\xdd\x81\x7e\x47\x65\xed\xaa\x68\x23\xc2\x28", + 226 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x15\x4c\x3e\x96\xfe\xe5\xdb\x14\xf8\x77\x3e\x18\xaf\x14\x85\x79" + "\x13\x50\x9d\xa9\x99\xb4\x6c\xdd\x3d\x4c\x16\x97\x60\xc8\x3a\xd2", + 227 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x40\xb9\x91\x6f\x09\x3e\x02\x7a\x87\x86\x64\x18\x18\x92\x06\x20" + "\x47\x2f\xbc\xf6\x8f\x70\x1d\x1b\x68\x06\x32\xe6\x99\x6b\xde\xd3", + 228 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x24\xc4\xcb\xba\x07\x11\x98\x31\xa7\x26\xb0\x53\x05\xd9\x6d\xa0" + "\x2f\xf8\xb1\x48\xf0\xda\x44\x0f\xe2\x33\xbc\xaa\x32\xc7\x2f\x6f", + 229 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x5d\x20\x15\x10\x25\x00\x20\xb7\x83\x68\x96\x88\xab\xbf\x8e\xcf" + "\x25\x94\xa9\x6a\x08\xf2\xbf\xec\x6c\xe0\x57\x44\x65\xdd\xed\x71", + 230 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x04\x3b\x97\xe3\x36\xee\x6f\xdb\xbe\x2b\x50\xf2\x2a\xf8\x32\x75" + "\xa4\x08\x48\x05\xd2\xd5\x64\x59\x62\x45\x4b\x6c\x9b\x80\x53\xa0", + 231 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x56\x48\x35\xcb\xae\xa7\x74\x94\x85\x68\xbe\x36\xcf\x52\xfc\xdd" + "\x83\x93\x4e\xb0\xa2\x75\x12\xdb\xe3\xe2\xdb\x47\xb9\xe6\x63\x5a", + 232 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf2\x1c\x33\xf4\x7b\xde\x40\xa2\xa1\x01\xc9\xcd\xe8\x02\x7a\xaf" + "\x61\xa3\x13\x7d\xe2\x42\x2b\x30\x03\x5a\x04\xc2\x70\x89\x41\x83", + 233 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x9d\xb0\xef\x74\xe6\x6c\xbb\x84\x2e\xb0\xe0\x73\x43\xa0\x3c\x5c" + "\x56\x7e\x37\x2b\x3f\x23\xb9\x43\xc7\x88\xa4\xf2\x50\xf6\x78\x91", + 234 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xab\x8d\x08\x65\x5f\xf1\xd3\xfe\x87\x58\xd5\x62\x23\x5f\xd2\x3e" + "\x7c\xf9\xdc\xaa\xd6\x58\x87\x2a\x49\xe5\xd3\x18\x3b\x6c\xce\xbd", + 235 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x6f\x27\xf7\x7e\x7b\xcf\x46\xa1\xe9\x63\xad\xe0\x30\x97\x33\x54" + "\x30\x31\xdc\xcd\xd4\x7c\xaa\xc1\x74\xd7\xd2\x7c\xe8\x07\x7e\x8b", + 236 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xe3\xcd\x54\xda\x7e\x44\x4c\xaa\x62\x07\x56\x95\x25\xa6\x70\xeb" + "\xae\x12\x78\xde\x4e\x3f\xe2\x68\x4b\x3e\x33\xf5\xef\x90\xcc\x1b", + 237 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xb2\xc3\xe3\x3a\x51\xd2\x2c\x4c\x08\xfc\x09\x89\xc8\x73\xc9\xcc" + "\x41\x50\x57\x9b\x1e\x61\x63\xfa\x69\x4a\xd5\x1d\x53\xd7\x12\xdc", + 238 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xbe\x7f\xda\x98\x3e\x13\x18\x9b\x4c\x77\xe0\xa8\x09\x20\xb6\xe0" + "\xe0\xea\x80\xc3\xb8\x4d\xbe\x7e\x71\x17\xd2\x53\xf4\x81\x12\xf4", + 239 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xb6\x00\x8c\x28\xfa\xe0\x8a\xa4\x27\xe5\xbd\x3a\xad\x36\xf1\x00" + "\x21\xf1\x6c\x77\xcf\xea\xbe\xd0\x7f\x97\xcc\x7d\xc1\xf1\x28\x4a", + 240 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x6e\x4e\x67\x60\xc5\x38\xf2\xe9\x7b\x3a\xdb\xfb\xbc\xde\x57\xf8" + "\x96\x6b\x7e\xa8\xfc\xb5\xbf\x7e\xfe\xc9\x13\xfd\x2a\x2b\x0c\x55", + 241 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x4a\xe5\x1f\xd1\x83\x4a\xa5\xbd\x9a\x6f\x7e\xc3\x9f\xc6\x63\x33" + "\x8d\xc5\xd2\xe2\x07\x61\x56\x6d\x90\xcc\x68\xb1\xcb\x87\x5e\xd8", + 242 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xb6\x73\xaa\xd7\x5a\xb1\xfd\xb5\x40\x1a\xbf\xa1\xbf\x89\xf3\xad" + "\xd2\xeb\xc4\x68\xdf\x36\x24\xa4\x78\xf4\xfe\x85\x9d\x8d\x55\xe2", + 243 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x13\xc9\x47\x1a\x98\x55\x91\x35\x39\x83\x66\x60\x39\x8d\xa0\xf3" + "\xf9\x9a\xda\x08\x47\x9c\x69\xd1\xb7\xfc\xaa\x34\x61\xdd\x7e\x59", + 244 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x2c\x11\xf4\xa7\xf9\x9a\x1d\x23\xa5\x8b\xb6\x36\x35\x0f\xe8\x49" + "\xf2\x9c\xba\xc1\xb2\xa1\x11\x2d\x9f\x1e\xd5\xbc\x5b\x31\x3c\xcd", + 245 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc7\xd3\xc0\x70\x6b\x11\xae\x74\x1c\x05\xa1\xef\x15\x0d\xd6\x5b" + "\x54\x94\xd6\xd5\x4c\x9a\x86\xe2\x61\x78\x54\xe6\xae\xee\xbb\xd9", + 246 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x19\x4e\x10\xc9\x38\x93\xaf\xa0\x64\xc3\xac\x04\xc0\xdd\x80\x8d" + "\x79\x1c\x3d\x4b\x75\x56\xe8\x9d\x8d\x9c\xb2\x25\xc4\xb3\x33\x39", + 247 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x6f\xc4\x98\x8b\x8f\x78\x54\x6b\x16\x88\x99\x18\x45\x90\x8f\x13" + "\x4b\x6a\x48\x2e\x69\x94\xb3\xd4\x83\x17\xbf\x08\xdb\x29\x21\x85", + 248 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x56\x65\xbe\xb8\xb0\x95\x55\x25\x81\x3b\x59\x81\xcd\x14\x2e\xd4" + "\xd0\x3f\xba\x38\xa6\xf3\xe5\xad\x26\x8e\x0c\xc2\x70\xd1\xcd\x11", + 249 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xb8\x83\xd6\x8f\x5f\xe5\x19\x36\x43\x1b\xa4\x25\x67\x38\x05\x3b" + "\x1d\x04\x26\xd4\xcb\x64\xb1\x6e\x83\xba\xdc\x5e\x9f\xbe\x3b\x81", + 250 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x53\xe7\xb2\x7e\xa5\x9c\x2f\x6d\xbb\x50\x76\x9e\x43\x55\x4d\xf3" + "\x5a\xf8\x9f\x48\x22\xd0\x46\x6b\x00\x7d\xd6\xf6\xde\xaf\xff\x02", + 251 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\x1f\x1a\x02\x29\xd4\x64\x0f\x01\x90\x15\x88\xd9\xde\xc2\x2d\x13" + "\xfc\x3e\xb3\x4a\x61\xb3\x29\x38\xef\xbf\x53\x34\xb2\x80\x0a\xfa", + 252 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc2\xb4\x05\xaf\xa0\xfa\x66\x68\x85\x2a\xee\x4d\x88\x04\x08\x53" + "\xfa\xb8\x00\xe7\x2b\x57\x58\x14\x18\xe5\x50\x6f\x21\x4c\x7d\x1f", + 253 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xc0\x8a\xa1\xc2\x86\xd7\x09\xfd\xc7\x47\x37\x44\x97\x71\x88\xc8" + "\x95\xba\x01\x10\x14\x24\x7e\x4e\xfa\x8d\x07\xe7\x8f\xec\x69\x5c", + 254 }, + { GCRY_MD_BLAKE2S_256, blake2_data_vector, + "\xf0\x3f\x57\x89\xd3\x33\x6b\x80\xd0\x02\xd5\x9f\xdf\x91\x8b\xdb" + "\x77\x5b\x00\x95\x6e\xd5\x52\x8e\x86\xaa\x99\x4a\xcb\x38\xfe\x2d", + 255 }, From marcio.barbado at bdslabs.com.br Tue Feb 28 03:28:33 2017 From: marcio.barbado at bdslabs.com.br (Marcio Barbado, Jr.) Date: Mon, 27 Feb 2017 23:28:33 -0300 Subject: Computer Science bachelor degree thesis on Libgcrypt In-Reply-To: <614414d8e848ed9f466ed921957ec9c4@bdslabs.com.br> References: <5d8f5fe810e2cf72b5ae1f9f546e2e2f@bdslabs.com.br> <878tphysx5.fsf@fsij.org> <614414d8e848ed9f466ed921957ec9c4@bdslabs.com.br> Message-ID: <1665aa81c11b866ad016dc88a6f8ab44@bdslabs.com.br> Hi NIIBE and list. As suggested, I've searched through and read some messages from the lists' archives (mostly gnupg-users and gcrypt-devel to be honest). Also I've searched GnuPG's blog, bug tracker, libgcrypt's repository itself, and the Internet as well, including academic content. There is GPG-related stuff all over the Internet, as one might expect. Mostly, I used search keywords like "benchmark", "bug", "comparison", "feature", "metrics", "patch", "problem", "request" and "unsolved". Each one combined somehow with libgcrypt. Results obviously led me to more and more content, which I tried to filter and figure, given my academic deadlines constraints. A few conclusions, ideas and remarks arose: * bugs were discarded for the group believes there's no such knowledge among us nor backstage intimacy to deal with that; * features were also discarded because it could put us away from the OpenPGP standard, and we want to stick with it; * probably, our best chance lies on libgcrypt's TODO file (from libgcrypt's repository), which lists interesting items, some don't seem like critical stuff. Plus the referred file says community need testing; * [INTERLUDE] meanwhile, our teacher (who reads us) has suggested us to consider a study on algorithms' metrics (comparisons and things like that); As mentioned, community do need tests, and the "tests" directory looks interesting in this sense; and * well, given all of the recent buzz around SHA-1 collision, we're considering tests among the substitution candidates (eg: BLAKE2, SHA-256 and SHA-3). So, concerning those tests, we have some questions like: are there any architectures and/or contexts on which new benchmarks could be helpful at this moment? Regards, Em 08.02.2017 14:12, Marcio Barbado, Jr. escreveu: > Hi, NIIBE. Thank you for replying back. > Sorry for wrong technical terminology. At least my kung fu feeling > was quite close. > We'll be taking a look in all that. > Regards, > Em 08.02.2017 06:43, NIIBE Yutaka escreveu: >> Hello, Marcio, >> Well, I learned QiGong from the Chinese master when I was a student >> in >> Tokyo. :-) No, I am not a master (QiGong or libgcrypt). But, I do >> some >> development of libgcrypt, and maintain some code. >> "Marcio Barbado, Jr." writes: >>> For example, should we post on another mailing list or is this the >>> proper one for algorithmic code development? >> Yes, here is the place for technical discussion. I don't know about >> "algorithmic code development" you addressed, though. >> You can find what's going on in the development by reading our >> archives. >> The Gcrypt-devel Archives: >> https://lists.gnupg.org/pipermail/gcrypt-devel/ >> Our source code repository is here: >> The GNU crypto library: >> https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git >> Please get the source code by git. The command line invocation is: >> $ git clone git://git.gnupg.org/libgcrypt.git >> And then, you can examine the history of our development. >> -- > Marcio Barbado, Jr. Marcio Barbado, Jr.