From 4ffd5b75353c1c5b1ab44b3ed9e407288923b925 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 3 Aug 2023 22:24:21 +0200 Subject: [PATCH 001/219] Incremental test: split the input into 3 parts --- src/test/main.zig | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/test/main.zig b/src/test/main.zig index 547a022..899e4e0 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -105,7 +105,7 @@ test "aegis-128l - incremental" { var c2 = c2_buf[0..msg_len]; const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); - const ad = &ad_buf[0..ad_len]; + const ad = ad_buf[0..ad_len]; var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; random.bytes(&nonce); @@ -120,7 +120,8 @@ test "aegis-128l - incremental" { var cx = c; const m0 = msg[0 .. msg.len / 3]; - const m1 = msg[msg.len / 3 ..]; + const m1 = msg[msg.len / 3 .. 2 * msg.len / 3]; + const m2 = msg[2 * msg.len / 3 ..]; var ret = aegis.aegis128l_state_encrypt_update(&st, cx.ptr, cx.len, &written, m0.ptr, m0.len); try testing.expectEqual(ret, 0); @@ -130,6 +131,10 @@ test "aegis-128l - incremental" { try testing.expectEqual(ret, 0); cx = cx[written..]; + ret = aegis.aegis128l_state_encrypt_update(&st, cx.ptr, cx.len, &written, m2.ptr, m2.len); + try testing.expectEqual(ret, 0); + cx = cx[written..]; + ret = aegis.aegis128l_state_encrypt_detached_final(&st, cx.ptr, cx.len, &written, &mac, mac.len); try testing.expectEqual(ret, 0); cx = cx[written..]; @@ -170,7 +175,7 @@ test "aegis-256 - incremental" { var c2 = c2_buf[0..msg_len]; const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); - const ad = &ad_buf[0..ad_len]; + const ad = ad_buf[0..ad_len]; var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; random.bytes(&nonce); @@ -185,7 +190,8 @@ test "aegis-256 - incremental" { var cx = c; const m0 = msg[0 .. msg.len / 3]; - const m1 = msg[msg.len / 3 ..]; + const m1 = msg[msg.len / 3 .. 2 * msg.len / 3]; + const m2 = msg[2 * msg.len / 3 ..]; var ret = aegis.aegis256_state_encrypt_update(&st, cx.ptr, cx.len, &written, m0.ptr, m0.len); try testing.expectEqual(ret, 0); @@ -195,6 +201,10 @@ test "aegis-256 - incremental" { try testing.expectEqual(ret, 0); cx = cx[written..]; + ret = aegis.aegis256_state_encrypt_update(&st, cx.ptr, cx.len, &written, m2.ptr, m2.len); + try testing.expectEqual(ret, 0); + cx = cx[written..]; + ret = aegis.aegis256_state_encrypt_detached_final(&st, cx.ptr, cx.len, &written, &mac, mac.len); try testing.expectEqual(ret, 0); cx = cx[written..]; From 779fae6f823a41aa1ebd6498880c5e51be4ccc93 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 3 Aug 2023 22:44:42 +0200 Subject: [PATCH 002/219] Time to start looking at incremental decryption --- src/aegis128l/aegis128l_common.h | 1 + src/aegis256/aegis256_common.h | 1 + 2 files changed, 2 insertions(+) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 6db471e..ae97fac 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -380,6 +380,7 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, if (n != 0) { memcpy(st->buf + st->pos, m + i, n); + c += n; clen -= n; st->pos += n; } diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 4378063..2e93d3c 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -365,6 +365,7 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, if (n != 0) { memcpy(st->buf + st->pos, m + i, n); + c += n; clen -= n; st->pos += n; } From e128631b6d9508278fb3a375eebd5930b0c197c3 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 3 Aug 2023 23:00:00 +0200 Subject: [PATCH 003/219] Be more conservative in the way we check for [cm]len_max --- src/aegis128l/aegis128l_common.h | 26 ++++++++++++++++++-------- src/aegis256/aegis256_common.h | 22 ++++++++++++++++++---- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index ae97fac..3d16216 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -267,10 +267,6 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * size_t left; *written = 0; - if (clen_max < (mlen & ~(size_t) 0x1f)) { - errno = ERANGE; - return -1; - } st->mlen += mlen; if (st->pos != 0) { const size_t available = (sizeof st->buf) - st->pos; @@ -283,6 +279,11 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * st->pos += n; } if (st->pos == sizeof st->buf) { + if (clen_max < 32) { + errno = ERANGE; + return -1; + } + clen_max -= 32; aegis128l_enc(c, st->buf, st->state); *written += 32; c += 32; @@ -291,6 +292,10 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * return 0; } } + if (clen_max < mlen & ~(size_t) 0x1f) { + errno = ERANGE; + return -1; + } for (i = 0; i + 32 <= mlen; i += 32) { aegis128l_enc(c + i, m + i, st->state); } @@ -369,10 +374,6 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, const size_t mlen = clen; *written = 0; - if (mlen_max < (clen & ~(size_t) 0x1f)) { - errno = ERANGE; - return -1; - } st->mlen += mlen; if (st->pos != 0) { const size_t available = (sizeof st->buf) - st->pos; @@ -386,6 +387,11 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, } if (st->pos == (sizeof st->buf)) { if (m != NULL) { + if (mlen_max < 32) { + errno = ERANGE; + return -1; + } + mlen_max -= 32; aegis128l_dec(m, st->buf, st->state); } else { aegis128l_dec(dst, st->buf, st->state); @@ -398,6 +404,10 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, } } if (m != NULL) { + if (mlen_max < clen & ~(size_t) 0x1f) { + errno = ERANGE; + return -1; + } for (i = 0; i + 32 <= clen; i += 32) { aegis128l_dec(m + i, c + i, st->state); } diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 2e93d3c..33e8bfa 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -252,10 +252,6 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w size_t left; *written = 0; - if (clen_max < (mlen & ~(size_t) 0xf)) { - errno = ERANGE; - return -1; - } st->mlen += mlen; if (st->pos != 0) { const size_t available = (sizeof st->buf) - st->pos; @@ -268,6 +264,11 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w st->pos += n; } if (st->pos == sizeof st->buf) { + if (clen_max < 16) { + errno = ERANGE; + return -1; + } + clen_max -= 16; aegis256_enc(c, st->buf, st->state); *written += 16; c += 16; @@ -276,6 +277,10 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w return 0; } } + if (clen_max < mlen & ~(size_t) 0xf) { + errno = ERANGE; + return -1; + } for (i = 0; i + 16 <= mlen; i += 16) { aegis256_enc(c + i, m + i, st->state); } @@ -371,6 +376,11 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, } if (st->pos == (sizeof st->buf)) { if (m != NULL) { + if (mlen_max < 16) { + errno = ERANGE; + return -1; + } + mlen_max -= 16; aegis256_dec(m, st->buf, st->state); } else { aegis256_dec(dst, st->buf, st->state); @@ -383,6 +393,10 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, } } if (m != NULL) { + if (mlen_max < clen & ~(size_t) 0xf) { + errno = ERANGE; + return -1; + } for (i = 0; i + 16 <= clen; i += 16) { aegis256_dec(m + i, c + i, st->state); } From fca1f738a70a1792574fda9f130eb8bae93d5b2b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 3 Aug 2023 23:17:16 +0200 Subject: [PATCH 004/219] Nits --- src/test/main.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/main.zig b/src/test/main.zig index 899e4e0..d7e47c1 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -81,7 +81,7 @@ test "aegis-256 - encrypt_detached oneshot" { } } -test "aegis-128l - incremental" { +test "aegis-128l - incremental encryption" { try testing.expectEqual(aegis.aegis_init(), 0); const mac_len: usize = 16; @@ -151,7 +151,7 @@ test "aegis-128l - incremental" { try testing.expectEqualSlices(u8, msg, msg2); } -test "aegis-256 - incremental" { +test "aegis-256 - incremental encryption" { try testing.expectEqual(aegis.aegis_init(), 0); const mac_len: usize = 16; From 122f2712c5f2a8b89f3272216b09f3e17ce59e32 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 4 Aug 2023 00:08:01 +0200 Subject: [PATCH 005/219] Manually HAVE_AVX_ASM if required --- src/common/common.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/common/common.h b/src/common/common.h index ac98386..5a7d27d 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -17,6 +17,9 @@ #if defined(__i386__) || defined(__x86_64__) #define HAVE_CPUID #define NATIVE_LITTLE_ENDIAN +#if defined(__clang__) || defined(__GNUC__) +#define HAVE_AVX_ASM +#endif #endif #ifdef __x86_64__ #define HAVE_AVXINTRIN_H From 80879f5d6fbffc9f471616b45190fbd25b948ee1 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 4 Aug 2023 00:16:45 +0200 Subject: [PATCH 006/219] On Intel, require only SSSE3, not AVX for the non-X versions --- src/aegis128l/aegis128l.c | 2 +- src/aegis256/aegis256.c | 2 +- src/common/common.h | 3 ++- src/common/cpu.c | 14 ++++++++++++++ src/common/cpu.h | 2 ++ 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 3f02708..58b0c8c 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -165,7 +165,7 @@ aegis128l_pick_best_implementation(void) #endif #if defined(__x86_64__) || defined(__i386__) - if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { + if (aegis_runtime_has_aesni() && aegis_runtime_has_ssse3()) { implementation = &aegis128l_aesni_implementation; return 0; } diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index d1b41be..2a496fa 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -165,7 +165,7 @@ aegis256_pick_best_implementation(void) #endif #if defined(__x86_64__) || defined(__i386__) - if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { + if (aegis_runtime_has_aesni() && aegis_runtime_has_ssse3()) { implementation = &aegis256_aesni_implementation; return 0; } diff --git a/src/common/common.h b/src/common/common.h index 5a7d27d..237893c 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -25,6 +25,7 @@ #define HAVE_AVXINTRIN_H #define HAVE_AVX2INTRIN_H #define HAVE_AVX512FINTRIN_H +#define HAVE_TMMINTRIN_H #define HAVE_WMMINTRIN_H #endif #ifdef __aarch64__ @@ -80,4 +81,4 @@ rotl32(const uint32_t x, const int b) #define COMPILER_ASSERT(X) (void) sizeof(char[(X) ? 1 : -1]) -#endif \ No newline at end of file +#endif diff --git a/src/common/cpu.c b/src/common/cpu.c index 353df6c..2b2d473 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -23,6 +23,7 @@ typedef struct CPUFeatures_ { int initialized; int has_neon; int has_armcrypto; + int has_ssse3; int has_avx; int has_avx2; int has_avx512f; @@ -35,6 +36,7 @@ static CPUFeatures _cpu_features; #define CPUID_EBX_AVX2 0x00000020 #define CPUID_EBX_AVX512F 0x00010000 +#define CPUID_ECX_SSSE3 0x00000200 #define CPUID_ECX_AESNI 0x02000000 #define CPUID_ECX_XSAVE 0x04000000 #define CPUID_ECX_OSXSAVE 0x08000000 @@ -189,6 +191,12 @@ _runtime_intel_cpu_features(CPUFeatures *const cpu_features) } _cpuid(cpu_info, 0x00000001); +#ifdef HAVE_TMMINTRIN_H + cpu_features->has_ssse3 = ((cpu_info[2] & CPUID_ECX_SSSE3) != 0x0); +#else + cpu_features->has_ssse3 = 0; +#endif + (void) xcr0; #ifdef HAVE_AVXINTRIN_H if ((cpu_info[2] & (CPUID_ECX_AVX | CPUID_ECX_XSAVE | CPUID_ECX_OSXSAVE)) == @@ -284,6 +292,12 @@ aegis_runtime_has_armcrypto(void) return _cpu_features.has_armcrypto; } +int +aegis_runtime_has_ssse3(void) +{ + return _cpu_features.has_ssse3; +} + int aegis_runtime_has_avx(void) { diff --git a/src/common/cpu.h b/src/common/cpu.h index 3986578..0b5a9dc 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -13,6 +13,8 @@ int aegis_runtime_has_neon(void); int aegis_runtime_has_armcrypto(void); +int aegis_runtime_has_ssse3(void); + int aegis_runtime_has_avx(void); int aegis_runtime_has_avx2(void); From 8163ea7f080f3f9f81d8164fcbee1d52e6fc43a4 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 4 Aug 2023 01:42:30 +0200 Subject: [PATCH 007/219] Add another aegis-256 incremental test --- src/test/main.zig | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/test/main.zig b/src/test/main.zig index d7e47c1..1494d83 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -220,3 +220,64 @@ test "aegis-256 - incremental encryption" { try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, msg, msg2); } + +test "aegis-256 - incremental encryption 2" { + try testing.expectEqual(aegis.aegis_init(), 0); + + const mac_len: usize = 16; + var msg: [633]u8 = undefined; + var msg2: [msg.len]u8 = undefined; + var ad: [10]u8 = undefined; + var c: [msg.len + mac_len]u8 = undefined; + var c2: [c.len]u8 = undefined; + + random.bytes(&ad); + random.bytes(&msg); + + var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; + random.bytes(&nonce); + var key: [aegis.aegis256_KEYBYTES]u8 = undefined; + random.bytes(&key); + + var st: aegis.aegis256_state = undefined; + var written: usize = undefined; + + aegis.aegis256_state_init(&st, &ad, ad.len, &nonce, &key); + + var cx: []u8 = c[0..]; + + const m0 = msg[0..11]; + const m1 = msg[11 .. 11 + 21]; + const m2 = msg[11 + 21 .. 11 + 21 + 311]; + const m3 = msg[11 + 21 + 311 ..]; + + var ret = aegis.aegis256_state_encrypt_update(&st, cx.ptr, cx.len, &written, m0.ptr, m0.len); + try testing.expectEqual(ret, 0); + cx = cx[written..]; + + ret = aegis.aegis256_state_encrypt_update(&st, cx.ptr, cx.len, &written, m1.ptr, m1.len); + try testing.expectEqual(ret, 0); + cx = cx[written..]; + + ret = aegis.aegis256_state_encrypt_update(&st, cx.ptr, cx.len, &written, m2.ptr, m2.len); + try testing.expectEqual(ret, 0); + cx = cx[written..]; + + ret = aegis.aegis256_state_encrypt_update(&st, cx.ptr, cx.len, &written, m3.ptr, m3.len); + try testing.expectEqual(ret, 0); + cx = cx[written..]; + + ret = aegis.aegis256_state_encrypt_final(&st, cx.ptr, cx.len, &written, mac_len); + try testing.expectEqual(ret, 0); + cx = cx[written..]; + try testing.expectEqual(cx.len, 0); + + ret = aegis.aegis256_encrypt(&c2, mac_len, &msg, msg.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + + try testing.expectEqualSlices(u8, &c, &c2); + + ret = aegis.aegis256_decrypt(&msg2, &c, c.len, mac_len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + try testing.expectEqualSlices(u8, &msg, &msg2); +} From 68950d32174fdf8c3c7e204e43c210043434743f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 4 Aug 2023 16:55:39 +0200 Subject: [PATCH 008/219] Add explicit parentheses --- src/aegis128l/aegis128l_common.h | 4 ++-- src/aegis256/aegis256_common.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 3d16216..3eceb8e 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -292,7 +292,7 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * return 0; } } - if (clen_max < mlen & ~(size_t) 0x1f) { + if (clen_max < (mlen & ~(size_t) 0x1f)) { errno = ERANGE; return -1; } @@ -404,7 +404,7 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, } } if (m != NULL) { - if (mlen_max < clen & ~(size_t) 0x1f) { + if (mlen_max < (clen & ~(size_t) 0x1f)) { errno = ERANGE; return -1; } diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 33e8bfa..04ebf18 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -277,7 +277,7 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w return 0; } } - if (clen_max < mlen & ~(size_t) 0xf) { + if (clen_max < (mlen & ~(size_t) 0xf)) { errno = ERANGE; return -1; } @@ -393,7 +393,7 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, } } if (m != NULL) { - if (mlen_max < clen & ~(size_t) 0xf) { + if (mlen_max < (clen & ~(size_t) 0xf)) { errno = ERANGE; return -1; } From 8be1bb9043516f5a01a03edd9e90e0c2199d1164 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 4 Aug 2023 17:02:43 +0200 Subject: [PATCH 009/219] Remove extra semicolumns --- src/include/aegis.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/include/aegis.h b/src/include/aegis.h index e3d3285..88a9ee8 100644 --- a/src/include/aegis.h +++ b/src/include/aegis.h @@ -31,7 +31,6 @@ int aegis_init(void); * Returns 0 if the blocks are equal, -1 otherwise. */ int aegis_verify_16(const uint8_t *x, const uint8_t *y) __attribute__((warn_unused_result)); -; /* Compare two 32-byte blocks for equality. * @@ -40,6 +39,5 @@ int aegis_verify_16(const uint8_t *x, const uint8_t *y) __attribute__((warn_unus * Returns 0 if the blocks are equal, -1 otherwise. */ int aegis_verify_32(const uint8_t *x, const uint8_t *y) __attribute__((warn_unused_result)); -; #endif \ No newline at end of file From a190842eec23f2546435a2f3972d1e9a30573f1d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 08:24:09 +0200 Subject: [PATCH 010/219] Install headers --- README.md | 4 +--- build.zig | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f6019dc..b412445 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,7 @@ Portable C implementations of AEGIS (AEGIS-128L and AEGIS-256), with runtime CPU zig build -Drelease ``` -The library is installed in the `zig-out/lib` folder. - -Public inludes are in the `src/include` folder. +The library and headers are installed in the `zig-out` folder. ### Compilation with `cmake`: diff --git a/build.zig b/build.zig index e2bb505..7fc80b8 100644 --- a/build.zig +++ b/build.zig @@ -36,6 +36,12 @@ pub fn build(b: *std.Build) void { // step when running `zig build`). b.installArtifact(lib); + b.installDirectory(.{ + .install_dir = .header, + .install_subdir = "", + .source_dir = .{ .path = "src/include" }, + }); + // Creates a step for unit testing. This only builds the test executable // but does not run it. const main_tests = b.addTest(.{ From 72ab431e558859209de0951263ca96f24894d426 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 08:38:44 +0200 Subject: [PATCH 011/219] Add a FAVOR_PERFORMANCE knob --- src/common/softaes.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/common/softaes.c b/src/common/softaes.c index 03a4374..5392c6e 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -6,7 +6,7 @@ #include "common.h" #include "softaes.h" -uint32_t _aes_lut[256] __attribute__ ((visibility ("hidden"))) = { +uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, @@ -41,11 +41,15 @@ uint32_t _aes_lut[256] __attribute__ ((visibility ("hidden"))) = { 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c }; -static const uint32_t * const LUT = _aes_lut; +static const uint32_t* const LUT = _aes_lut; #ifndef SOFTAES_STRIDE +#ifdef FAVOR_PERFORMANCE +#define SOFTAES_STRIDE 256 +#else #define SOFTAES_STRIDE 16 #endif +#endif static SoftAesBlock _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const uint8_t ix3[4]) From bb6daacc8b6d9253223bec5329540b73137ac292 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 08:47:47 +0200 Subject: [PATCH 012/219] Add a -Dfavor-performance build flag --- build.zig | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/build.zig b/build.zig index 7fc80b8..7a581f6 100644 --- a/build.zig +++ b/build.zig @@ -13,6 +13,13 @@ pub fn build(b: *std.Build) void { lib.linkLibC(); lib.strip = true; + const lib_options = b.addOptions(); + const favor_performance: bool = b.option(bool, "favor-performance", "Favor performance over side channel mitigations") orelse false; + lib_options.addOption(bool, "favor_performance", favor_performance); + if (favor_performance) { + lib.defineCMacro("FAVOR_PERFORMANCE", "1"); + } + lib.addIncludePath(.{ .path = "src/include" }); lib.addCSourceFiles(&.{ From d54ea27c42a4ca5aa406a16eb58bd6509d3af6d6 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 08:51:08 +0200 Subject: [PATCH 013/219] Document FAVOR_PERFORMANCE --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index b412445..4753da2 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,12 @@ zig build -Drelease The library and headers are installed in the `zig-out` folder. +To favor performance over side-channel mitigations on WebAssembly and on devices without hardware acceleration, add `-Dfavor-performance`: + +```sh +zig build -Drelease -Dfavor-performance +``` + ### Compilation with `cmake`: ```sh @@ -28,6 +34,8 @@ cmake -DCMAKE_INSTALL_PREFIX=/install/prefix .. make install ``` +To favor performance over side-channel mitigations on WebAssembly and on devices without hardware acceleration, add `-DFAVOR_PERFORMANCE`. + ### Direct inclusion Copy everything in `src` directly into your project, and compile everything like regular C code. No special configuration is required. From e4771210b1ab11d19926b35e1ccc977f008c80be Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 08:56:20 +0200 Subject: [PATCH 014/219] Note on clang vs gcc --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4753da2..1769c43 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ Portable C implementations of AEGIS (AEGIS-128L and AEGIS-256), with runtime CPU ## Installation +Note that the compiler makes a difference. Zig (or a recent `clang` with target-specific options such as `-march=native`) produces more efficient code than `gcc`. + ### Compilation with `zig`: ```sh From 99d16598d0249461964d7d57f32c5436fa3a769b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 09:01:56 +0200 Subject: [PATCH 015/219] Require at least AVX on Intel CPUs Having AES without AVX would be uncommon, and AVX is always a performance win. --- src/aegis128l/aegis128l.c | 2 +- src/aegis128l/aegis128l_aesni.c | 4 ++-- src/aegis256/aegis256.c | 2 +- src/aegis256/aegis256_aesni.c | 4 ++-- src/common/cpu.c | 8 -------- src/common/cpu.h | 2 -- 6 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 58b0c8c..3f02708 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -165,7 +165,7 @@ aegis128l_pick_best_implementation(void) #endif #if defined(__x86_64__) || defined(__i386__) - if (aegis_runtime_has_aesni() && aegis_runtime_has_ssse3()) { + if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { implementation = &aegis128l_aesni_implementation; return 0; } diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index 3fa04ef..c57632c 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -11,9 +11,9 @@ #include "aegis128l_aesni.h" #ifdef __clang__ -#pragma clang attribute push(__attribute__((target("aes,ssse3"))), apply_to = function) +#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) #elif defined(__GNUC__) -#pragma GCC target("aes,ssse3") +#pragma GCC target("aes,avx") #endif #include diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index 2a496fa..d1b41be 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -165,7 +165,7 @@ aegis256_pick_best_implementation(void) #endif #if defined(__x86_64__) || defined(__i386__) - if (aegis_runtime_has_aesni() && aegis_runtime_has_ssse3()) { + if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { implementation = &aegis256_aesni_implementation; return 0; } diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index e544c49..3f0d440 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -11,9 +11,9 @@ #include "aegis256_aesni.h" #ifdef __clang__ -#pragma clang attribute push(__attribute__((target("aes,ssse3"))), apply_to = function) +#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) #elif defined(__GNUC__) -#pragma GCC target("aes,ssse3") +#pragma GCC target("aes,avx") #endif #include diff --git a/src/common/cpu.c b/src/common/cpu.c index 2b2d473..9c067f9 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -23,7 +23,6 @@ typedef struct CPUFeatures_ { int initialized; int has_neon; int has_armcrypto; - int has_ssse3; int has_avx; int has_avx2; int has_avx512f; @@ -36,7 +35,6 @@ static CPUFeatures _cpu_features; #define CPUID_EBX_AVX2 0x00000020 #define CPUID_EBX_AVX512F 0x00010000 -#define CPUID_ECX_SSSE3 0x00000200 #define CPUID_ECX_AESNI 0x02000000 #define CPUID_ECX_XSAVE 0x04000000 #define CPUID_ECX_OSXSAVE 0x08000000 @@ -191,12 +189,6 @@ _runtime_intel_cpu_features(CPUFeatures *const cpu_features) } _cpuid(cpu_info, 0x00000001); -#ifdef HAVE_TMMINTRIN_H - cpu_features->has_ssse3 = ((cpu_info[2] & CPUID_ECX_SSSE3) != 0x0); -#else - cpu_features->has_ssse3 = 0; -#endif - (void) xcr0; #ifdef HAVE_AVXINTRIN_H if ((cpu_info[2] & (CPUID_ECX_AVX | CPUID_ECX_XSAVE | CPUID_ECX_OSXSAVE)) == diff --git a/src/common/cpu.h b/src/common/cpu.h index 0b5a9dc..3986578 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -13,8 +13,6 @@ int aegis_runtime_has_neon(void); int aegis_runtime_has_armcrypto(void); -int aegis_runtime_has_ssse3(void); - int aegis_runtime_has_avx(void); int aegis_runtime_has_avx2(void); From 934d7e44d73957cd8208a941b4fb220a92e6d772 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 09:07:12 +0200 Subject: [PATCH 016/219] Remove runtime_has_ssse3() --- src/common/cpu.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/common/cpu.c b/src/common/cpu.c index 9c067f9..7f4582e 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -284,12 +284,6 @@ aegis_runtime_has_armcrypto(void) return _cpu_features.has_armcrypto; } -int -aegis_runtime_has_ssse3(void) -{ - return _cpu_features.has_ssse3; -} - int aegis_runtime_has_avx(void) { @@ -320,4 +314,4 @@ aegis_runtime_has_vaes(void) return _cpu_features.has_vaes; } -#endif \ No newline at end of file +#endif From 1ed562a5c08b88f3329b4ac9e6ffb203e19e9680 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 09:13:06 +0200 Subject: [PATCH 017/219] arm: require aes feature --- src/aegis128l/aegis128l_armcrypto.c | 4 ++-- src/aegis256/aegis256_armcrypto.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index 5d4ae3c..ae9c771 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -11,9 +11,9 @@ #include "aegis128l_armcrypto.h" #ifdef __clang__ -#pragma clang attribute push(__attribute__((target("neon,crypto"))), apply_to = function) +#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function) #elif defined(__GNUC__) -#pragma GCC target("neon,crypto") +#pragma GCC target("neon,crypto,aes") #endif #include diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index ecba39f..71a4cd7 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -11,9 +11,9 @@ #include "aegis256_armcrypto.h" #ifdef __clang__ -#pragma clang attribute push(__attribute__((target("neon,crypto"))), apply_to = function) +#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function) #elif defined(__GNUC__) -#pragma GCC target("neon,crypto") +#pragma GCC target("neon,crypto,aes") #endif #include From a96fb90be9e6eb527137862945dee2f16a511a5d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 10:49:45 +0200 Subject: [PATCH 018/219] Don't hardcode the rate, in order to reduce diffs with AEGIS-X --- src/aegis128l/aegis128l_common.h | 92 ++++++++++++++++---------------- src/aegis256/aegis256_common.h | 92 ++++++++++++++++---------------- 2 files changed, 94 insertions(+), 90 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 3eceb8e..b520ec3 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -1,3 +1,5 @@ +#define RATE 32 + static void aegis128l_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { @@ -112,7 +114,7 @@ static void aegis128l_declast(uint8_t *const dst, const uint8_t *const src, size_t len, aes_block_t *const state) { - uint8_t pad[32]; + uint8_t pad[RATE]; aes_block_t msg0, msg1; memset(pad, 0, sizeof pad); @@ -142,26 +144,26 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(16) uint8_t src[32]; - CRYPTO_ALIGN(16) uint8_t dst[32]; - size_t i; + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; aegis128l_init(k, npub, state); - for (i = 0; i + 32 <= adlen; i += 32) { + for (i = 0; i + RATE <= adlen; i += RATE) { aegis128l_absorb(ad + i, state); } if (adlen & 0x1f) { - memset(src, 0, 32); + memset(src, 0, RATE); memcpy(src, ad + i, adlen & 0x1f); aegis128l_absorb(src, state); } - for (i = 0; i + 32 <= mlen; i += 32) { + for (i = 0; i + RATE <= mlen; i += RATE) { aegis128l_enc(c + i, m + i, state); } if (mlen & 0x1f) { - memset(src, 0, 32); + memset(src, 0, RATE); memcpy(src, m + i, mlen & 0x1f); aegis128l_enc(dst, src, state); memcpy(c + i, dst, mlen & 0x1f); @@ -176,30 +178,30 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(16) uint8_t src[32]; - CRYPTO_ALIGN(16) uint8_t dst[32]; - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - const size_t mlen = clen; - size_t i; - int ret; + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; aegis128l_init(k, npub, state); - for (i = 0; i + 32 <= adlen; i += 32) { + for (i = 0; i + RATE <= adlen; i += RATE) { aegis128l_absorb(ad + i, state); } if (adlen & 0x1f) { - memset(src, 0, 32); + memset(src, 0, RATE); memcpy(src, ad + i, adlen & 0x1f); aegis128l_absorb(src, state); } if (m != NULL) { - for (i = 0; i + 32 <= mlen; i += 32) { + for (i = 0; i + RATE <= mlen; i += RATE) { aegis128l_dec(m + i, c + i, state); } } else { - for (i = 0; i + 32 <= mlen; i += 32) { + for (i = 0; i + RATE <= mlen; i += RATE) { aegis128l_dec(dst, c + i, state); } } @@ -227,7 +229,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, typedef struct _aegis128l_state { aes_block_t state[8]; - uint8_t buf[32]; + uint8_t buf[RATE]; uint64_t adlen; uint64_t mlen; size_t pos; @@ -246,11 +248,11 @@ state_init(aegis128l_state *st_, const uint8_t *ad, size_t adlen, const uint8_t st->pos = 0; aegis128l_init(k, npub, st->state); - for (i = 0; i + 32 <= adlen; i += 32) { + for (i = 0; i + RATE <= adlen; i += RATE) { aegis128l_absorb(ad + i, st->state); } if (adlen & 0x1f) { - memset(st->buf, 0, 32); + memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen & 0x1f); aegis128l_absorb(st->buf, st->state); } @@ -279,14 +281,14 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * st->pos += n; } if (st->pos == sizeof st->buf) { - if (clen_max < 32) { + if (clen_max < RATE) { errno = ERANGE; return -1; } - clen_max -= 32; + clen_max -= RATE; aegis128l_enc(c, st->buf, st->state); - *written += 32; - c += 32; + *written += RATE; + c += RATE; st->pos = 0; } else { return 0; @@ -296,7 +298,7 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * errno = ERANGE; return -1; } - for (i = 0; i + 32 <= mlen; i += 32) { + for (i = 0; i + RATE <= mlen; i += RATE) { aegis128l_enc(c + i, m + i, st->state); } *written += mlen & ~(size_t) 0x1f; @@ -314,8 +316,8 @@ state_encrypt_detached_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, { _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); - CRYPTO_ALIGN(16) uint8_t src[32]; - CRYPTO_ALIGN(16) uint8_t dst[32]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos) { @@ -341,8 +343,8 @@ state_encrypt_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *w { _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); - CRYPTO_ALIGN(16) uint8_t src[32]; - CRYPTO_ALIGN(16) uint8_t dst[32]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos + maclen) { @@ -368,10 +370,10 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, { _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); - CRYPTO_ALIGN(16) uint8_t dst[32]; - size_t i = 0; - size_t left; - const size_t mlen = clen; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i = 0; + size_t left; + const size_t mlen = clen; *written = 0; st->mlen += mlen; @@ -387,17 +389,17 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, } if (st->pos == (sizeof st->buf)) { if (m != NULL) { - if (mlen_max < 32) { + if (mlen_max < RATE) { errno = ERANGE; return -1; } - mlen_max -= 32; + mlen_max -= RATE; aegis128l_dec(m, st->buf, st->state); } else { aegis128l_dec(dst, st->buf, st->state); } - *written += 32; - c += 32; + *written += RATE; + c += RATE; st->pos = 0; } else { return 0; @@ -408,11 +410,11 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, errno = ERANGE; return -1; } - for (i = 0; i + 32 <= clen; i += 32) { + for (i = 0; i + RATE <= clen; i += RATE) { aegis128l_dec(m + i, c + i, st->state); } } else { - for (i = 0; i + 32 <= clen; i += 32) { + for (i = 0; i + RATE <= clen; i += RATE) { aegis128l_dec(dst, c + i, st->state); } } @@ -429,9 +431,9 @@ static int state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - CRYPTO_ALIGN(16) uint8_t dst[32]; - _aegis128l_state *const st = + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); int ret; diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 04ebf18..abc2a47 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -1,3 +1,5 @@ +#define RATE 16 + static void aegis256_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { @@ -102,7 +104,7 @@ aegis256_dec(uint8_t *const dst, const uint8_t *const src, aes_block_t *const st static void aegis256_declast(uint8_t *const dst, const uint8_t *const src, size_t len, aes_block_t *const state) { - uint8_t pad[16]; + uint8_t pad[RATE]; aes_block_t msg; memset(pad, 0, sizeof pad); @@ -127,26 +129,26 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(16) uint8_t src[16]; - CRYPTO_ALIGN(16) uint8_t dst[16]; - size_t i; + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; aegis256_init(k, npub, state); - for (i = 0; i + 16 <= adlen; i += 16) { + for (i = 0; i + RATE <= adlen; i += RATE) { aegis256_absorb(ad + i, state); } if (adlen & 0xf) { - memset(src, 0, 16); + memset(src, 0, RATE); memcpy(src, ad + i, adlen & 0xf); aegis256_absorb(src, state); } - for (i = 0; i + 16 <= mlen; i += 16) { + for (i = 0; i + RATE <= mlen; i += RATE) { aegis256_enc(c + i, m + i, state); } if (mlen & 0xf) { - memset(src, 0, 16); + memset(src, 0, RATE); memcpy(src, m + i, mlen & 0xf); aegis256_enc(dst, src, state); memcpy(c + i, dst, mlen & 0xf); @@ -161,30 +163,30 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(16) uint8_t src[16]; - CRYPTO_ALIGN(16) uint8_t dst[16]; - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - const size_t mlen = clen; - size_t i; - int ret; + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; aegis256_init(k, npub, state); - for (i = 0; i + 16 <= adlen; i += 16) { + for (i = 0; i + RATE <= adlen; i += RATE) { aegis256_absorb(ad + i, state); } if (adlen & 0xf) { - memset(src, 0, 16); + memset(src, 0, RATE); memcpy(src, ad + i, adlen & 0xf); aegis256_absorb(src, state); } if (m != NULL) { - for (i = 0; i + 16 <= mlen; i += 16) { + for (i = 0; i + RATE <= mlen; i += RATE) { aegis256_dec(m + i, c + i, state); } } else { - for (i = 0; i + 16 <= mlen; i += 16) { + for (i = 0; i + RATE <= mlen; i += RATE) { aegis256_dec(dst, c + i, state); } } @@ -212,7 +214,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, typedef struct _aegis256_state { aes_block_t state[6]; - uint8_t buf[16]; + uint8_t buf[RATE]; uint64_t adlen; uint64_t mlen; size_t pos; @@ -231,11 +233,11 @@ state_init(aegis256_state *st_, const uint8_t *ad, size_t adlen, const uint8_t * st->pos = 0; aegis256_init(k, npub, st->state); - for (i = 0; i + 16 <= adlen; i += 16) { + for (i = 0; i + RATE <= adlen; i += RATE) { aegis256_absorb(ad + i, st->state); } if (adlen & 0xf) { - memset(st->buf, 0, 16); + memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen & 0xf); aegis256_absorb(st->buf, st->state); } @@ -264,14 +266,14 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w st->pos += n; } if (st->pos == sizeof st->buf) { - if (clen_max < 16) { + if (clen_max < RATE) { errno = ERANGE; return -1; } - clen_max -= 16; + clen_max -= RATE; aegis256_enc(c, st->buf, st->state); - *written += 16; - c += 16; + *written += RATE; + c += RATE; st->pos = 0; } else { return 0; @@ -281,7 +283,7 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w errno = ERANGE; return -1; } - for (i = 0; i + 16 <= mlen; i += 16) { + for (i = 0; i + RATE <= mlen; i += RATE) { aegis256_enc(c + i, m + i, st->state); } *written += mlen & ~(size_t) 0xf; @@ -299,8 +301,8 @@ state_encrypt_detached_final(aegis256_state *st_, uint8_t *c, size_t clen_max, s { _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); - CRYPTO_ALIGN(16) uint8_t src[16]; - CRYPTO_ALIGN(16) uint8_t dst[16]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos) { @@ -326,8 +328,8 @@ state_encrypt_final(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *wr { _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); - CRYPTO_ALIGN(16) uint8_t src[16]; - CRYPTO_ALIGN(16) uint8_t dst[16]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos + maclen) { @@ -353,10 +355,10 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, { _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); - CRYPTO_ALIGN(16) uint8_t dst[16]; - size_t i = 0; - size_t left; - const size_t mlen = clen; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i = 0; + size_t left; + const size_t mlen = clen; *written = 0; if (mlen_max < (clen & ~(size_t) 0xf)) { @@ -376,17 +378,17 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, } if (st->pos == (sizeof st->buf)) { if (m != NULL) { - if (mlen_max < 16) { + if (mlen_max < RATE) { errno = ERANGE; return -1; } - mlen_max -= 16; + mlen_max -= RATE; aegis256_dec(m, st->buf, st->state); } else { aegis256_dec(dst, st->buf, st->state); } - *written += 16; - c += 16; + *written += RATE; + c += RATE; st->pos = 0; } else { return 0; @@ -397,11 +399,11 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, errno = ERANGE; return -1; } - for (i = 0; i + 16 <= clen; i += 16) { + for (i = 0; i + RATE <= clen; i += RATE) { aegis256_dec(m + i, c + i, st->state); } } else { - for (i = 0; i + 16 <= clen; i += 16) { + for (i = 0; i + RATE <= clen; i += RATE) { aegis256_dec(dst, c + i, st->state); } } @@ -418,9 +420,9 @@ static int state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - CRYPTO_ALIGN(16) uint8_t dst[16]; - _aegis256_state *const st = + CRYPTO_ALIGN(RATE) uint8_t computed_mac[32]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); int ret; From d848c82ff65e89ef301b9672cd2858f00fa7fd35 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 10:58:39 +0200 Subject: [PATCH 019/219] Keep minimizing the differences with the X variants --- src/aegis128l/aegis128l_aesni.c | 2 ++ src/aegis128l/aegis128l_armcrypto.c | 2 ++ src/aegis128l/aegis128l_common.h | 20 ++++++++++---------- src/aegis128l/aegis128l_soft.c | 2 ++ src/aegis256/aegis256_aesni.c | 2 ++ src/aegis256/aegis256_armcrypto.c | 2 ++ src/aegis256/aegis256_common.h | 8 ++++---- src/aegis256/aegis256_soft.c | 2 ++ 8 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index c57632c..0491eba 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -18,6 +18,8 @@ #include +#define AES_BLOCK_LENGTH 16 + typedef __m128i aes_block_t; #define AES_BLOCK_XOR(A, B) _mm_xor_si128((A), (B)) #define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index ae9c771..fca9f30 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -18,6 +18,8 @@ #include +#define AES_BLOCK_LENGTH 16 + typedef uint8x16_t aes_block_t; #define AES_BLOCK_XOR(A, B) veorq_u8((A), (B)) #define AES_BLOCK_AND(A, B) vandq_u8((A), (B)) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index b520ec3..bbeeac7 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -3,10 +3,10 @@ static void aegis128l_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { - static CRYPTO_ALIGN(16) + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c0_[] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 }; - static CRYPTO_ALIGN(16) + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c1_[] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd }; const aes_block_t c0 = AES_BLOCK_LOAD(c0_); @@ -67,7 +67,7 @@ aegis128l_absorb(const uint8_t *const src, aes_block_t *const state) aes_block_t msg0, msg1; msg0 = AES_BLOCK_LOAD(src); - msg1 = AES_BLOCK_LOAD(src + 16); + msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH); aegis128l_update(state, msg0, msg1); } @@ -78,7 +78,7 @@ aegis128l_enc(uint8_t *const dst, const uint8_t *const src, aes_block_t *const s aes_block_t tmp0, tmp1; msg0 = AES_BLOCK_LOAD(src); - msg1 = AES_BLOCK_LOAD(src + 16); + msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH); tmp0 = AES_BLOCK_XOR(msg0, state[6]); tmp0 = AES_BLOCK_XOR(tmp0, state[1]); tmp1 = AES_BLOCK_XOR(msg1, state[5]); @@ -86,7 +86,7 @@ aegis128l_enc(uint8_t *const dst, const uint8_t *const src, aes_block_t *const s tmp0 = AES_BLOCK_XOR(tmp0, AES_BLOCK_AND(state[2], state[3])); tmp1 = AES_BLOCK_XOR(tmp1, AES_BLOCK_AND(state[6], state[7])); AES_BLOCK_STORE(dst, tmp0); - AES_BLOCK_STORE(dst + 16, tmp1); + AES_BLOCK_STORE(dst + AES_BLOCK_LENGTH, tmp1); aegis128l_update(state, msg0, msg1); } @@ -97,7 +97,7 @@ aegis128l_dec(uint8_t *const dst, const uint8_t *const src, aes_block_t *const s aes_block_t msg0, msg1; msg0 = AES_BLOCK_LOAD(src); - msg1 = AES_BLOCK_LOAD(src + 16); + msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH); msg0 = AES_BLOCK_XOR(msg0, state[6]); msg0 = AES_BLOCK_XOR(msg0, state[1]); msg1 = AES_BLOCK_XOR(msg1, state[5]); @@ -105,7 +105,7 @@ aegis128l_dec(uint8_t *const dst, const uint8_t *const src, aes_block_t *const s msg0 = AES_BLOCK_XOR(msg0, AES_BLOCK_AND(state[2], state[3])); msg1 = AES_BLOCK_XOR(msg1, AES_BLOCK_AND(state[6], state[7])); AES_BLOCK_STORE(dst, msg0); - AES_BLOCK_STORE(dst + 16, msg1); + AES_BLOCK_STORE(dst + AES_BLOCK_LENGTH, msg1); aegis128l_update(state, msg0, msg1); } @@ -121,7 +121,7 @@ aegis128l_declast(uint8_t *const dst, const uint8_t *const src, size_t len, memcpy(pad, src, len); msg0 = AES_BLOCK_LOAD(pad); - msg1 = AES_BLOCK_LOAD(pad + 16); + msg1 = AES_BLOCK_LOAD(pad + AES_BLOCK_LENGTH); msg0 = AES_BLOCK_XOR(msg0, state[6]); msg0 = AES_BLOCK_XOR(msg0, state[1]); msg1 = AES_BLOCK_XOR(msg1, state[5]); @@ -129,13 +129,13 @@ aegis128l_declast(uint8_t *const dst, const uint8_t *const src, size_t len, msg0 = AES_BLOCK_XOR(msg0, AES_BLOCK_AND(state[2], state[3])); msg1 = AES_BLOCK_XOR(msg1, AES_BLOCK_AND(state[6], state[7])); AES_BLOCK_STORE(pad, msg0); - AES_BLOCK_STORE(pad + 16, msg1); + AES_BLOCK_STORE(pad + AES_BLOCK_LENGTH, msg1); memset(pad + len, 0, sizeof pad - len); memcpy(dst, pad, len); msg0 = AES_BLOCK_LOAD(pad); - msg1 = AES_BLOCK_LOAD(pad + 16); + msg1 = AES_BLOCK_LOAD(pad + AES_BLOCK_LENGTH); aegis128l_update(state, msg0, msg1); } diff --git a/src/aegis128l/aegis128l_soft.c b/src/aegis128l/aegis128l_soft.c index 10911f2..6db1211 100644 --- a/src/aegis128l/aegis128l_soft.c +++ b/src/aegis128l/aegis128l_soft.c @@ -13,6 +13,8 @@ #include "aegis128l.h" #include "aegis128l_soft.h" +#define AES_BLOCK_LENGTH 16 + typedef SoftAesBlock aes_block_t; #define AES_BLOCK_XOR(A, B) softaes_block_xor((A), (B)) #define AES_BLOCK_AND(A, B) softaes_block_and((A), (B)) diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index 3f0d440..be7ed51 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -18,6 +18,8 @@ #include +#define AES_BLOCK_LENGTH 16 + typedef __m128i aes_block_t; #define AES_BLOCK_XOR(A, B) _mm_xor_si128((A), (B)) #define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index 71a4cd7..dc1eb3a 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -18,6 +18,8 @@ #include +#define AES_BLOCK_LENGTH 16 + typedef uint8x16_t aes_block_t; #define AES_BLOCK_XOR(A, B) veorq_u8((A), (B)) #define AES_BLOCK_AND(A, B) vandq_u8((A), (B)) diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index abc2a47..3af5ca5 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -3,18 +3,18 @@ static void aegis256_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { - static CRYPTO_ALIGN(16) + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c0_[] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 }; - static CRYPTO_ALIGN(16) + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c1_[] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd }; const aes_block_t c0 = AES_BLOCK_LOAD(c0_); const aes_block_t c1 = AES_BLOCK_LOAD(c1_); const aes_block_t k0 = AES_BLOCK_LOAD(key); - const aes_block_t k1 = AES_BLOCK_LOAD(key + 16); + const aes_block_t k1 = AES_BLOCK_LOAD(key + AES_BLOCK_LENGTH); const aes_block_t n0 = AES_BLOCK_LOAD(nonce); - const aes_block_t n1 = AES_BLOCK_LOAD(nonce + 16); + const aes_block_t n1 = AES_BLOCK_LOAD(nonce + AES_BLOCK_LENGTH); const aes_block_t k0_n0 = AES_BLOCK_XOR(k0, n0); const aes_block_t k1_n1 = AES_BLOCK_XOR(k1, n1); int i; diff --git a/src/aegis256/aegis256_soft.c b/src/aegis256/aegis256_soft.c index cdc92b7..04c7e95 100644 --- a/src/aegis256/aegis256_soft.c +++ b/src/aegis256/aegis256_soft.c @@ -13,6 +13,8 @@ #include "aegis256.h" #include "aegis256_soft.h" +#define AES_BLOCK_LENGTH 16 + typedef SoftAesBlock aes_block_t; #define AES_BLOCK_XOR(A, B) softaes_block_xor((A), (B)) #define AES_BLOCK_AND(A, B) softaes_block_and((A), (B)) From b287339707879cfff36a639c54a6e6311b6f6a0d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 12:51:53 +0200 Subject: [PATCH 020/219] Avoid hardcoding masks --- src/aegis128l/aegis128l_common.h | 36 +++++++++++++++--------------- src/aegis256/aegis256_common.h | 38 ++++++++++++++++---------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index bbeeac7..b52b86f 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -154,19 +154,19 @@ encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size for (i = 0; i + RATE <= adlen; i += RATE) { aegis128l_absorb(ad + i, state); } - if (adlen & 0x1f) { + if (adlen % RATE) { memset(src, 0, RATE); - memcpy(src, ad + i, adlen & 0x1f); + memcpy(src, ad + i, adlen % RATE); aegis128l_absorb(src, state); } for (i = 0; i + RATE <= mlen; i += RATE) { aegis128l_enc(c + i, m + i, state); } - if (mlen & 0x1f) { + if (mlen % RATE) { memset(src, 0, RATE); - memcpy(src, m + i, mlen & 0x1f); + memcpy(src, m + i, mlen % RATE); aegis128l_enc(dst, src, state); - memcpy(c + i, dst, mlen & 0x1f); + memcpy(c + i, dst, mlen % RATE); } aegis128l_mac(mac, maclen, adlen, mlen, state); @@ -191,9 +191,9 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, for (i = 0; i + RATE <= adlen; i += RATE) { aegis128l_absorb(ad + i, state); } - if (adlen & 0x1f) { + if (adlen % RATE) { memset(src, 0, RATE); - memcpy(src, ad + i, adlen & 0x1f); + memcpy(src, ad + i, adlen % RATE); aegis128l_absorb(src, state); } if (m != NULL) { @@ -205,11 +205,11 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, aegis128l_dec(dst, c + i, state); } } - if (mlen & 0x1f) { + if (mlen % RATE) { if (m != NULL) { - aegis128l_declast(m + i, c + i, mlen & 0x1f, state); + aegis128l_declast(m + i, c + i, mlen % RATE, state); } else { - aegis128l_declast(dst, c + i, mlen & 0x1f, state); + aegis128l_declast(dst, c + i, mlen % RATE, state); } } @@ -251,9 +251,9 @@ state_init(aegis128l_state *st_, const uint8_t *ad, size_t adlen, const uint8_t for (i = 0; i + RATE <= adlen; i += RATE) { aegis128l_absorb(ad + i, st->state); } - if (adlen & 0x1f) { + if (adlen % RATE) { memset(st->buf, 0, RATE); - memcpy(st->buf, ad + i, adlen & 0x1f); + memcpy(st->buf, ad + i, adlen % RATE); aegis128l_absorb(st->buf, st->state); } st->adlen = adlen; @@ -294,15 +294,15 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * return 0; } } - if (clen_max < (mlen & ~(size_t) 0x1f)) { + if (clen_max < mlen & ~(size_t) (RATE - 1)) { errno = ERANGE; return -1; } for (i = 0; i + RATE <= mlen; i += RATE) { aegis128l_enc(c + i, m + i, st->state); } - *written += mlen & ~(size_t) 0x1f; - left = mlen & 0x1f; + *written += i; + left = mlen % RATE; if (left != 0) { memcpy(st->buf, m + i, left); st->pos = left; @@ -406,7 +406,7 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, } } if (m != NULL) { - if (mlen_max < (clen & ~(size_t) 0x1f)) { + if (mlen_max < (clen % RATE)) { errno = ERANGE; return -1; } @@ -418,8 +418,8 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, aegis128l_dec(dst, c + i, st->state); } } - *written += mlen & ~(size_t) 0x1f; - left = mlen & 0x1f; + *written += i; + left = mlen % RATE; if (left) { memcpy(st->buf, c + i, left); st->pos = left; diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 3af5ca5..604fc58 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -139,19 +139,19 @@ encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size for (i = 0; i + RATE <= adlen; i += RATE) { aegis256_absorb(ad + i, state); } - if (adlen & 0xf) { + if (adlen % RATE) { memset(src, 0, RATE); - memcpy(src, ad + i, adlen & 0xf); + memcpy(src, ad + i, adlen % RATE); aegis256_absorb(src, state); } for (i = 0; i + RATE <= mlen; i += RATE) { aegis256_enc(c + i, m + i, state); } - if (mlen & 0xf) { + if (mlen % RATE) { memset(src, 0, RATE); - memcpy(src, m + i, mlen & 0xf); + memcpy(src, m + i, mlen % RATE); aegis256_enc(dst, src, state); - memcpy(c + i, dst, mlen & 0xf); + memcpy(c + i, dst, mlen % RATE); } aegis256_mac(mac, maclen, adlen, mlen, state); @@ -176,9 +176,9 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, for (i = 0; i + RATE <= adlen; i += RATE) { aegis256_absorb(ad + i, state); } - if (adlen & 0xf) { + if (adlen % RATE) { memset(src, 0, RATE); - memcpy(src, ad + i, adlen & 0xf); + memcpy(src, ad + i, adlen % RATE); aegis256_absorb(src, state); } if (m != NULL) { @@ -190,11 +190,11 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, aegis256_dec(dst, c + i, state); } } - if (mlen & 0xf) { + if (mlen % RATE) { if (m != NULL) { - aegis256_declast(m + i, c + i, mlen & 0xf, state); + aegis256_declast(m + i, c + i, mlen % RATE, state); } else { - aegis256_declast(dst, c + i, mlen & 0xf, state); + aegis256_declast(dst, c + i, mlen % RATE, state); } } @@ -236,9 +236,9 @@ state_init(aegis256_state *st_, const uint8_t *ad, size_t adlen, const uint8_t * for (i = 0; i + RATE <= adlen; i += RATE) { aegis256_absorb(ad + i, st->state); } - if (adlen & 0xf) { + if (adlen % RATE) { memset(st->buf, 0, RATE); - memcpy(st->buf, ad + i, adlen & 0xf); + memcpy(st->buf, ad + i, adlen % RATE); aegis256_absorb(st->buf, st->state); } st->adlen = adlen; @@ -279,15 +279,15 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w return 0; } } - if (clen_max < (mlen & ~(size_t) 0xf)) { + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { errno = ERANGE; return -1; } for (i = 0; i + RATE <= mlen; i += RATE) { aegis256_enc(c + i, m + i, st->state); } - *written += mlen & ~(size_t) 0xf; - left = mlen & 0xf; + *written += i; + left = mlen % RATE; if (left != 0) { memcpy(st->buf, m + i, left); st->pos = left; @@ -361,7 +361,7 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, const size_t mlen = clen; *written = 0; - if (mlen_max < (clen & ~(size_t) 0xf)) { + if (mlen_max < (clen % RATE)) { errno = ERANGE; return -1; } @@ -395,7 +395,7 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, } } if (m != NULL) { - if (mlen_max < (clen & ~(size_t) 0xf)) { + if (mlen_max < (clen % RATE)) { errno = ERANGE; return -1; } @@ -407,8 +407,8 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, aegis256_dec(dst, c + i, st->state); } } - *written += mlen & ~(size_t) 0xf; - left = mlen & 0xf; + *written += i; + left = mlen % RATE; if (left) { memcpy(st->buf, c + i, left); st->pos = left; From 7b98955830591d7f3fe631b140e6fc2a20b8c493 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 13:28:05 +0200 Subject: [PATCH 021/219] Align state according to the rate, reduce aegis256 state size --- src/aegis128l/aegis128l_common.h | 16 ++++++++-------- src/aegis256/aegis256_common.h | 14 +++++++------- src/include/aegis256.h | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index b52b86f..fa0f03a 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -240,10 +240,10 @@ state_init(aegis128l_state *st_, const uint8_t *ad, size_t adlen, const uint8_t const uint8_t *k) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); size_t i; - COMPILER_ASSERT((sizeof *st) + 15 <= sizeof *st_); + COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); st->mlen = 0; st->pos = 0; @@ -264,7 +264,7 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * const uint8_t *m, size_t mlen) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); size_t i = 0; size_t left; @@ -294,7 +294,7 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * return 0; } } - if (clen_max < mlen & ~(size_t) (RATE - 1)) { + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { errno = ERANGE; return -1; } @@ -315,7 +315,7 @@ state_encrypt_detached_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, uint8_t *mac, size_t maclen) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); CRYPTO_ALIGN(RATE) uint8_t src[RATE]; CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; @@ -342,7 +342,7 @@ state_encrypt_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *w size_t maclen) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); CRYPTO_ALIGN(RATE) uint8_t src[RATE]; CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; @@ -369,7 +369,7 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, const uint8_t *c, size_t clen) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; size_t i = 0; size_t left; @@ -434,7 +434,7 @@ state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, CRYPTO_ALIGN(16) uint8_t computed_mac[32]; CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); int ret; *written = 0; diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 604fc58..c6fd7d3 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -225,10 +225,10 @@ state_init(aegis256_state *st_, const uint8_t *ad, size_t adlen, const uint8_t * const uint8_t *k) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); size_t i; - COMPILER_ASSERT((sizeof *st) + 15 <= sizeof *st_); + COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); st->mlen = 0; st->pos = 0; @@ -249,7 +249,7 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w const uint8_t *m, size_t mlen) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); size_t i = 0; size_t left; @@ -300,7 +300,7 @@ state_encrypt_detached_final(aegis256_state *st_, uint8_t *c, size_t clen_max, s uint8_t *mac, size_t maclen) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); CRYPTO_ALIGN(RATE) uint8_t src[RATE]; CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; @@ -327,7 +327,7 @@ state_encrypt_final(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *wr size_t maclen) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); CRYPTO_ALIGN(RATE) uint8_t src[RATE]; CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; @@ -354,7 +354,7 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, const uint8_t *c, size_t clen) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; size_t i = 0; size_t left; @@ -423,7 +423,7 @@ state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, s CRYPTO_ALIGN(RATE) uint8_t computed_mac[32]; CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + 15) & ~(uintptr_t) 15); + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); int ret; *written = 0; diff --git a/src/include/aegis256.h b/src/include/aegis256.h index 498d802..e14118e 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -24,7 +24,7 @@ /* An AEGIS state, for incremental updates */ typedef struct aegis256_state { - uint8_t opaque[256]; + uint8_t opaque[192]; } aegis256_state; /* The length of an AEGIS key, in bytes */ From ab7c2a25150a2e27f6e6dc0f635ec82ed39bd69b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 14:18:44 +0200 Subject: [PATCH 022/219] Add AEGIS-128X2 --- CMakeLists.txt | 2 +- README.md | 3 +- build.zig | 6 + src/aegis128x2/aegis128x2.c | 181 ++++++++++ src/aegis128x2/aegis128x2_aesni.c | 102 ++++++ src/aegis128x2/aegis128x2_aesni.h | 9 + src/aegis128x2/aegis128x2_armcrypto.c | 101 ++++++ src/aegis128x2/aegis128x2_armcrypto.h | 9 + src/aegis128x2/aegis128x2_avx2.c | 69 ++++ src/aegis128x2/aegis128x2_avx2.h | 9 + src/aegis128x2/aegis128x2_common.h | 491 ++++++++++++++++++++++++++ src/aegis128x2/aegis128x2_soft.c | 92 +++++ src/aegis128x2/aegis128x2_soft.h | 9 + src/aegis128x2/implementations.h | 29 ++ src/common/common.c | 4 +- src/include/aegis.h | 1 + src/include/aegis128x2.h | 209 +++++++++++ src/test/main.zig | 37 ++ 18 files changed, 1360 insertions(+), 3 deletions(-) create mode 100644 src/aegis128x2/aegis128x2.c create mode 100644 src/aegis128x2/aegis128x2_aesni.c create mode 100644 src/aegis128x2/aegis128x2_aesni.h create mode 100644 src/aegis128x2/aegis128x2_armcrypto.c create mode 100644 src/aegis128x2/aegis128x2_armcrypto.h create mode 100644 src/aegis128x2/aegis128x2_avx2.c create mode 100644 src/aegis128x2/aegis128x2_avx2.h create mode 100644 src/aegis128x2/aegis128x2_common.h create mode 100644 src/aegis128x2/aegis128x2_soft.c create mode 100644 src/aegis128x2/aegis128x2_soft.h create mode 100644 src/aegis128x2/implementations.h create mode 100644 src/include/aegis128x2.h diff --git a/CMakeLists.txt b/CMakeLists.txt index bb23204..21b6e8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ endif() include_directories("src/include") -file(GLOB SOURCE_FILES "src/aegis128l/*.c" "src/aegis256/*.c" "src/common/*.c") +file(GLOB SOURCE_FILES "src/aegis128l/*.c" "src/aegis128x2/*.c" "src/aegis256/*.c" "src/common/*.c") file(GLOB HEADER_FILES "src/include/*.h") add_library("${PROJECT_NAME}") diff --git a/README.md b/README.md index 1769c43..62454c0 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # libaegis -Portable C implementations of AEGIS (AEGIS-128L and AEGIS-256), with runtime CPU detection. +Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2 and AEGIS-256), with runtime CPU detection. ## Features - AEGIS-128L with 16 and 32 bytes tags +- AEGIS-128X2 with 16 and 32 bytes tags - AEGIS-256 with 16 and 32 bytes tags - Encryption and decryption with attached and detached tags - Incremental encryption and decryption. diff --git a/build.zig b/build.zig index 7a581f6..eed4fd6 100644 --- a/build.zig +++ b/build.zig @@ -28,6 +28,12 @@ pub fn build(b: *std.Build) void { "src/aegis128l/aegis128l_soft.c", "src/aegis128l/aegis128l.c", + "src/aegis128x2/aegis128x2_aesni.c", + "src/aegis128x2/aegis128x2_avx2.c", + "src/aegis128x2/aegis128x2_armcrypto.c", + "src/aegis128x2/aegis128x2_soft.c", + "src/aegis128x2/aegis128x2.c", + "src/aegis256/aegis256_aesni.c", "src/aegis256/aegis256_armcrypto.c", "src/aegis256/aegis256_soft.c", diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c new file mode 100644 index 0000000..69ebba2 --- /dev/null +++ b/src/aegis128x2/aegis128x2.c @@ -0,0 +1,181 @@ +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "../common/cpu.h" +#include "aegis128x2.h" +#include "aegis128x2_aesni.h" +#include "aegis128x2_armcrypto.h" +#include "aegis128x2_avx2.h" + +#ifndef HAS_HW_AES +#include "aegis128x2_soft.h" +static const aegis128x2_implementation *implementation = &aegis128x2_soft_implementation; +#else +#ifdef __aarch64__ +static const aegis128x2_implementation *implementation = &aegis128x2_armcrypto_implementation; +#elif defined(__x86_64__) || defined(__i386__) +static const aegis128x2_implementation *implementation = &aegis128x2_aesni_implementation; +#else +#error "Unsupported architecture" +#endif +#endif + +size_t +aegis128x2_keybytes(void) +{ + return aegis128x2_KEYBYTES; +} + +size_t +aegis128x2_npubbytes(void) +{ + return aegis128x2_NPUBBYTES; +} + +size_t +aegis128x2_abytes_min(void) +{ + return aegis128x2_ABYTES_MIN; +} + +size_t +aegis128x2_abytes_max(void) +{ + return aegis128x2_ABYTES_MAX; +} + +size_t +aegis128x2_tailbytes_max(void) +{ + return aegis128x2_TAILBYTES_MAX; +} + +int +aegis128x2_encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->encrypt_detached(c, mac, maclen, m, mlen, ad, adlen, npub, k); +} + +int +aegis128x2_decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->decrypt_detached(m, c, clen, mac, maclen, ad, adlen, npub, k); +} + +int +aegis128x2_encrypt(uint8_t *c, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + return aegis128x2_encrypt_detached(c, c + mlen, maclen, m, mlen, ad, adlen, npub, k); +} + +int +aegis128x2_decrypt(uint8_t *m, const uint8_t *c, size_t clen, size_t maclen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + int ret = -1; + + if (clen >= maclen) { + ret = aegis128x2_decrypt_detached(m, c, clen - maclen, c + clen - maclen, maclen, ad, adlen, + npub, k); + } + return ret; +} + +void +aegis128x2_state_init(aegis128x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + memset(st_, 0, sizeof *st_); + implementation->state_init(st_, ad, adlen, npub, k); +} + +int +aegis128x2_state_encrypt_update(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen) +{ + return implementation->state_encrypt_update(st_, c, clen_max, written, m, mlen); +} + +int +aegis128x2_state_encrypt_detached_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_encrypt_detached_final(st_, c, clen_max, written, mac, maclen); +} + +int +aegis128x2_state_encrypt_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_encrypt_final(st_, c, clen_max, written, maclen); +} + +int +aegis128x2_state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) +{ + return implementation->state_decrypt_detached_update(st_, m, mlen_max, written, c, clen); +} + +int +aegis128x2_state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); +} + +#ifndef HAS_HW_AES +int +aegis128x2_pick_best_implementation(void) +{ + implementation = &aegis128x2_soft_implementation; + +#ifdef __aarch64__ + if (aegis_runtime_has_armcrypto()) { + implementation = &aegis128x2_armcrypto_implementation; + return 0; + } +#endif + +#if defined(__x86_64__) || defined(__i386__) + if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { + implementation = &aegis128x2_avx2_implementation; + return 0; + } + if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { + implementation = &aegis128x2_aesni_implementation; + return 0; + } +#endif + + return 0; /* LCOV_EXCL_LINE */ +} +#endif diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c new file mode 100644 index 0000000..31385eb --- /dev/null +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -0,0 +1,102 @@ +#if defined(__i386__) || defined(__x86_64__) + +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "aegis128x2.h" +#include "aegis128x2_aesni.h" + +#ifdef __clang__ +#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) +#elif defined(__GNUC__) +#pragma GCC target("aes,avx") +#endif + +#include + +#define AES_BLOCK_LENGTH 32 + +typedef struct { + __m128i b0; + __m128i b1; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_xor_si128(a.b0, b.b0), _mm_xor_si128(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_and_si128(a.b0, b.b0), _mm_and_si128(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { _mm_loadu_si128((const __m128i *) (const void *) a), + _mm_loadu_si128((const __m128i *) (const void *) (a + 16)) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const __m128i t = _mm_set_epi64x((long long) a, (long long) b); + return (aes_block_t) { t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + _mm_storeu_si128((__m128i *) (void *) a, b.b0); + _mm_storeu_si128((__m128i *) (void *) (a + 16), b.b1); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_aesenc_si128(a.b0, b.b0), _mm_aesenc_si128(a.b1, b.b1) }; +} + +static inline void +aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_ENC(tmp, state[0]); + + state[0] = AES_BLOCK_XOR(state[0], d1); + state[4] = AES_BLOCK_XOR(state[4], d2); +} + +#include "aegis128x2_common.h" + +struct aegis128x2_implementation aegis128x2_aesni_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#ifdef __clang__ +#pragma clang attribute pop +#endif + +#endif \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_aesni.h b/src/aegis128x2/aegis128x2_aesni.h new file mode 100644 index 0000000..e344971 --- /dev/null +++ b/src/aegis128x2/aegis128x2_aesni.h @@ -0,0 +1,9 @@ +#ifndef aegis128x2_aesni_H +#define aegis128x2_aesni_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x2_implementation aegis128x2_aesni_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c new file mode 100644 index 0000000..7b465bb --- /dev/null +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -0,0 +1,101 @@ +#ifdef __aarch64__ + +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "aegis128x2.h" +#include "aegis128x2_armcrypto.h" + +#ifdef __clang__ +#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function) +#elif defined(__GNUC__) +#pragma GCC target("neon,crypto,aes") +#endif + +#include + +#define AES_BLOCK_LENGTH 32 + +typedef struct { + uint8x16_t b0; + uint8x16_t b1; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { veorq_u8(a.b0, b.b0), veorq_u8(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vandq_u8(a.b0, b.b0), vandq_u8(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { vld1q_u8(a), vld1q_u8(a + 16) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const uint8x16_t t = vreinterpretq_u8_u64(vsetq_lane_u64((a), vmovq_n_u64(b), 1)); + return (aes_block_t) { t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + vst1q_u8(a, b.b0); + vst1q_u8(a + 16, b.b1); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { + veorq_u8(vaesmcq_u8(vaeseq_u8((a.b0), vmovq_n_u8(0))), (b.b0)), + veorq_u8(vaesmcq_u8(vaeseq_u8((a.b1), vmovq_n_u8(0))), (b.b1)), + }; +} + +static inline void +aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_BLOCK_XOR(AES_ENC(state[3], state[4]), d2); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d1); +} + +#include "aegis128x2_common.h" + +struct aegis128x2_implementation aegis128x2_armcrypto_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#ifdef __clang__ +#pragma clang attribute pop +#endif + +#endif \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_armcrypto.h b/src/aegis128x2/aegis128x2_armcrypto.h new file mode 100644 index 0000000..64cb2c4 --- /dev/null +++ b/src/aegis128x2/aegis128x2_armcrypto.h @@ -0,0 +1,9 @@ +#ifndef aegis128x2_armcrypto_H +#define aegis128x2_armcrypto_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x2_implementation aegis128x2_armcrypto_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c new file mode 100644 index 0000000..307cb79 --- /dev/null +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -0,0 +1,69 @@ +#if defined(__i386__) || defined(__x86_64__) + +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "aegis128x2.h" +#include "aegis128x2_avx2.h" + +#ifdef __clang__ +#pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +#elif defined(__GNUC__) +#pragma GCC target("vaes,avx2") +#endif + +#include + +#define AES_BLOCK_LENGTH 32 + +typedef __m256i aes_block_t; +#define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) +#define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) +#define AES_BLOCK_LOAD128_BROADCAST(A) \ + _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) +#define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) +#define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) +#define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) +#define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) + +static inline void +aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_ENC(tmp, state[0]); + + state[0] = AES_BLOCK_XOR(state[0], d1); + state[4] = AES_BLOCK_XOR(state[4], d2); +} + +#include "aegis128x2_common.h" + +struct aegis128x2_implementation aegis128x2_avx2_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#ifdef __clang__ +#pragma clang attribute pop +#endif + +#endif \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_avx2.h b/src/aegis128x2/aegis128x2_avx2.h new file mode 100644 index 0000000..cdc18b8 --- /dev/null +++ b/src/aegis128x2/aegis128x2_avx2.h @@ -0,0 +1,9 @@ +#ifndef aegis128x2_avx2_H +#define aegis128x2_avx2_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x2_implementation aegis128x2_avx2_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h new file mode 100644 index 0000000..2b7f3bc --- /dev/null +++ b/src/aegis128x2/aegis128x2_common.h @@ -0,0 +1,491 @@ +#define RATE 64 + +static void +aegis128x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) +{ + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) + const uint8_t c0_[] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, + 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 }; + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) + const uint8_t c1_[] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, + 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd }; + const aes_block_t c0 = AES_BLOCK_LOAD(c0_); + const aes_block_t c1 = AES_BLOCK_LOAD(c1_); + uint8_t tmp[2 * 16]; + uint8_t context_bytes[AES_BLOCK_LENGTH]; + aes_block_t context; + aes_block_t k; + aes_block_t n; + int i; + + memcpy(tmp, key, 16); + memcpy(tmp + 16, key, 16); + k = AES_BLOCK_LOAD(tmp); + + memcpy(tmp, nonce, 16); + memcpy(tmp + 16, nonce, 16); + n = AES_BLOCK_LOAD(tmp); + + memset(context_bytes, 0, sizeof context_bytes); + context_bytes[1 * 16] = 0x01; + context = AES_BLOCK_LOAD(context_bytes); + + state[0] = AES_BLOCK_XOR(k, n); + state[1] = c1; + state[2] = c0; + state[3] = c1; + state[4] = AES_BLOCK_XOR(k, n); + state[5] = AES_BLOCK_XOR(k, c0); + state[6] = AES_BLOCK_XOR(k, c1); + state[7] = AES_BLOCK_XOR(k, c0); + for (i = 0; i < 10; i++) { + state[3] = AES_BLOCK_XOR(state[3], context); + state[7] = AES_BLOCK_XOR(state[7], context); + aegis128x2_update(state, n, k); + } +} + +static void +aegis128x2_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state) +{ + uint8_t mac_multi_0[AES_BLOCK_LENGTH]; + uint8_t mac_multi_1[AES_BLOCK_LENGTH]; + aes_block_t tmp; + int i; + + tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3); + tmp = AES_BLOCK_XOR(tmp, state[2]); + + for (i = 0; i < 7; i++) { + aegis128x2_update(state, tmp, tmp); + } + + if (maclen == 16) { + tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(mac_multi_0, tmp); + for (i = 0; i < 16; i++) { + mac[i] = mac_multi_0[i] ^ mac_multi_0[1 * 16 + i]; + } + } else if (maclen == 32) { + tmp = AES_BLOCK_XOR(state[3], state[2]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(mac_multi_0, tmp); + for (i = 0; i < 16; i++) { + mac[i] = mac_multi_0[i] ^ mac_multi_0[1 * 16 + i]; + } + + tmp = AES_BLOCK_XOR(state[7], state[6]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[5], state[4])); + AES_BLOCK_STORE(mac_multi_1, tmp); + for (i = 0; i < 16; i++) { + mac[i + 16] = mac_multi_1[i] ^ mac_multi_1[1 * 16 + i]; + } + } else { + memset(mac, 0, maclen); + } +} + +static inline void +aegis128x2_absorb(const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg0, msg1; + + msg0 = AES_BLOCK_LOAD(src); + msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH); + aegis128x2_update(state, msg0, msg1); +} + +static void +aegis128x2_enc(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg0, msg1; + aes_block_t tmp0, tmp1; + + msg0 = AES_BLOCK_LOAD(src); + msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH); + tmp0 = AES_BLOCK_XOR(msg0, state[6]); + tmp0 = AES_BLOCK_XOR(tmp0, state[1]); + tmp1 = AES_BLOCK_XOR(msg1, state[5]); + tmp1 = AES_BLOCK_XOR(tmp1, state[2]); + tmp0 = AES_BLOCK_XOR(tmp0, AES_BLOCK_AND(state[2], state[3])); + tmp1 = AES_BLOCK_XOR(tmp1, AES_BLOCK_AND(state[6], state[7])); + AES_BLOCK_STORE(dst, tmp0); + AES_BLOCK_STORE(dst + AES_BLOCK_LENGTH, tmp1); + + aegis128x2_update(state, msg0, msg1); +} + +static void +aegis128x2_dec(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg0, msg1; + + msg0 = AES_BLOCK_LOAD(src); + msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH); + msg0 = AES_BLOCK_XOR(msg0, state[6]); + msg0 = AES_BLOCK_XOR(msg0, state[1]); + msg1 = AES_BLOCK_XOR(msg1, state[5]); + msg1 = AES_BLOCK_XOR(msg1, state[2]); + msg0 = AES_BLOCK_XOR(msg0, AES_BLOCK_AND(state[2], state[3])); + msg1 = AES_BLOCK_XOR(msg1, AES_BLOCK_AND(state[6], state[7])); + AES_BLOCK_STORE(dst, msg0); + AES_BLOCK_STORE(dst + AES_BLOCK_LENGTH, msg1); + + aegis128x2_update(state, msg0, msg1); +} + +static void +aegis128x2_declast(uint8_t *const dst, const uint8_t *const src, size_t len, + aes_block_t *const state) +{ + uint8_t pad[RATE]; + aes_block_t msg0, msg1; + + memset(pad, 0, sizeof pad); + memcpy(pad, src, len); + + msg0 = AES_BLOCK_LOAD(pad); + msg1 = AES_BLOCK_LOAD(pad + AES_BLOCK_LENGTH); + msg0 = AES_BLOCK_XOR(msg0, state[6]); + msg0 = AES_BLOCK_XOR(msg0, state[1]); + msg1 = AES_BLOCK_XOR(msg1, state[5]); + msg1 = AES_BLOCK_XOR(msg1, state[2]); + msg0 = AES_BLOCK_XOR(msg0, AES_BLOCK_AND(state[2], state[3])); + msg1 = AES_BLOCK_XOR(msg1, AES_BLOCK_AND(state[6], state[7])); + AES_BLOCK_STORE(pad, msg0); + AES_BLOCK_STORE(pad + AES_BLOCK_LENGTH, msg1); + + memset(pad + len, 0, sizeof pad - len); + memcpy(dst, pad, len); + + msg0 = AES_BLOCK_LOAD(pad); + msg1 = AES_BLOCK_LOAD(pad + AES_BLOCK_LENGTH); + + aegis128x2_update(state, msg0, msg1); +} + +static int +encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + aegis128x2_init(k, npub, state); + + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis128x2_absorb(ad + i, state); + } + if (adlen % RATE) { + memset(src, 0, RATE); + memcpy(src, ad + i, adlen % RATE); + aegis128x2_absorb(src, state); + } + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x2_enc(c + i, m + i, state); + } + if (mlen % RATE) { + memset(src, 0, RATE); + memcpy(src, m + i, mlen % RATE); + aegis128x2_enc(dst, src, state); + memcpy(c + i, dst, mlen % RATE); + } + + aegis128x2_mac(mac, maclen, adlen, mlen, state); + + return 0; +} + +static int +decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; + + aegis128x2_init(k, npub, state); + + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis128x2_absorb(ad + i, state); + } + if (adlen % RATE) { + memset(src, 0, RATE); + memcpy(src, ad + i, adlen % RATE); + aegis128x2_absorb(src, state); + } + if (m != NULL) { + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x2_dec(m + i, c + i, state); + } + } else { + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x2_dec(dst, c + i, state); + } + } + if (mlen % RATE) { + if (m != NULL) { + aegis128x2_declast(m + i, c + i, mlen % RATE, state); + } else { + aegis128x2_declast(dst, c + i, mlen % RATE, state); + } + } + + COMPILER_ASSERT(sizeof computed_mac >= 32); + aegis128x2_mac(computed_mac, maclen, adlen, mlen, state); + ret = -1; + if (maclen == 16) { + ret = aegis_verify_16(computed_mac, mac); + } else if (maclen == 32) { + ret = aegis_verify_32(computed_mac, mac); + } + if (ret != 0 && m != NULL) { + memset(m, 0, mlen); + } + return ret; +} + +typedef struct _aegis128x2_state { + aes_block_t state[8]; + uint8_t buf[RATE]; + uint64_t adlen; + uint64_t mlen; + size_t pos; +} _aegis128x2_state; + +static void +state_init(aegis128x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + _aegis128x2_state *const st = + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + + COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); + st->mlen = 0; + st->pos = 0; + + aegis128x2_init(k, npub, st->state); + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis128x2_absorb(ad + i, st->state); + } + if (adlen % RATE) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen % RATE); + aegis128x2_absorb(st->buf, st->state); + } + st->adlen = adlen; +} + +static int +state_encrypt_update(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen) +{ + _aegis128x2_state *const st = + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i = 0; + size_t left; + + *written = 0; + st->mlen += mlen; + if (st->pos != 0) { + const size_t available = (sizeof st->buf) - st->pos; + const size_t n = mlen < available ? mlen : available; + + if (n != 0) { + memcpy(st->buf + st->pos, m + i, n); + m += n; + mlen -= n; + st->pos += n; + } + if (st->pos == sizeof st->buf) { + if (clen_max < RATE) { + errno = ERANGE; + return -1; + } + clen_max -= RATE; + aegis128x2_enc(c, st->buf, st->state); + *written += RATE; + c += RATE; + st->pos = 0; + } else { + return 0; + } + } + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { + errno = ERANGE; + return -1; + } + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x2_enc(c + i, m + i, st->state); + } + *written += i; + left = mlen % RATE; + if (left != 0) { + memcpy(st->buf, m + i, left); + st->pos = left; + } + return 0; +} + +static int +state_encrypt_detached_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + uint8_t *mac, size_t maclen) +{ + _aegis128x2_state *const st = + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + + *written = 0; + if (clen_max < st->pos) { + errno = ERANGE; + return -1; + } + if (st->pos != 0) { + memset(src, 0, sizeof src); + memcpy(src, st->buf, st->pos); + aegis128x2_enc(dst, src, st->state); + memcpy(c, dst, st->pos); + } + aegis128x2_mac(mac, maclen, st->adlen, st->mlen, st->state); + + *written = st->pos; + + return 0; +} + +static int +state_encrypt_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen) +{ + _aegis128x2_state *const st = + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + + *written = 0; + if (clen_max < st->pos + maclen) { + errno = ERANGE; + return -1; + } + if (st->pos != 0) { + memset(src, 0, sizeof src); + memcpy(src, st->buf, st->pos); + aegis128x2_enc(dst, src, st->state); + memcpy(c, dst, st->pos); + } + aegis128x2_mac(c + st->pos, maclen, st->adlen, st->mlen, st->state); + + *written = st->pos + maclen; + + return 0; +} + +static int +state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, + const uint8_t *c, size_t clen) +{ + _aegis128x2_state *const st = + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i = 0; + size_t left; + const size_t mlen = clen; + + *written = 0; + st->mlen += mlen; + if (st->pos != 0) { + const size_t available = (sizeof st->buf) - st->pos; + const size_t n = clen < available ? clen : available; + + if (n != 0) { + memcpy(st->buf + st->pos, m + i, n); + c += n; + clen -= n; + st->pos += n; + } + if (st->pos == (sizeof st->buf)) { + if (m != NULL) { + if (mlen_max < RATE) { + errno = ERANGE; + return -1; + } + mlen_max -= RATE; + aegis128x2_dec(m, st->buf, st->state); + } else { + aegis128x2_dec(dst, st->buf, st->state); + } + *written += RATE; + c += RATE; + st->pos = 0; + } else { + return 0; + } + } + if (m != NULL) { + if (mlen_max < (clen % RATE)) { + errno = ERANGE; + return -1; + } + for (i = 0; i + RATE <= clen; i += RATE) { + aegis128x2_dec(m + i, c + i, st->state); + } + } else { + for (i = 0; i + RATE <= clen; i += RATE) { + aegis128x2_dec(dst, c + i, st->state); + } + } + *written += i; + left = mlen % RATE; + if (left) { + memcpy(st->buf, c + i, left); + st->pos = left; + } + return 0; +} + +static int +state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, + const uint8_t *mac, size_t maclen) +{ + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + _aegis128x2_state *const st = + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + int ret; + + *written = 0; + if (mlen_max < st->pos) { + errno = ERANGE; + return -1; + } + if (st->pos != 0) { + if (m != NULL) { + aegis128x2_declast(m, st->buf, st->pos, st->state); + } else { + aegis128x2_declast(dst, st->buf, st->pos, st->state); + } + } + aegis128x2_mac(computed_mac, maclen, st->adlen, st->mlen, st->state); + ret = -1; + if (maclen == 16) { + ret = aegis_verify_16(computed_mac, mac); + } else if (maclen == 32) { + ret = aegis_verify_32(computed_mac, mac); + } + if (ret == 0) { + *written = st->pos; + } else { + memset(m, 0, st->pos); + } + return ret; +} diff --git a/src/aegis128x2/aegis128x2_soft.c b/src/aegis128x2/aegis128x2_soft.c new file mode 100644 index 0000000..4f561e7 --- /dev/null +++ b/src/aegis128x2/aegis128x2_soft.c @@ -0,0 +1,92 @@ +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "../common/cpu.h" + +#ifndef HAS_HW_AES + +#include "../common/softaes.h" +#include "aegis128x2.h" +#include "aegis128x2_soft.h" + +#define AES_BLOCK_LENGTH 32 + +typedef struct { + SoftAesBlock b0; + SoftAesBlock b1; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_xor(a.b0, b.b0), softaes_block_xor(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_and(a.b0, b.b0), softaes_block_and(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { softaes_block_load(a), softaes_block_load(a + 16) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const SoftAesBlock t = softaes_block_load64x2(a, b); + return (aes_block_t) { t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + softaes_block_store(a, b.b0); + softaes_block_store(a + 16, b.b1); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_encrypt(a.b0, b.b0), softaes_block_encrypt(a.b1, b.b1) }; +} + +static inline void +aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_ENC(tmp, state[0]); + + state[0] = AES_BLOCK_XOR(state[0], d1); + state[4] = AES_BLOCK_XOR(state[4], d2); +} + +#include "aegis128x2_common.h" + +struct aegis128x2_implementation aegis128x2_soft_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#endif \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_soft.h b/src/aegis128x2/aegis128x2_soft.h new file mode 100644 index 0000000..cec6495 --- /dev/null +++ b/src/aegis128x2/aegis128x2_soft.h @@ -0,0 +1,9 @@ +#ifndef aegis128x2_soft_H +#define aegis128x2_soft_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x2_implementation aegis128x2_soft_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis128x2/implementations.h b/src/aegis128x2/implementations.h new file mode 100644 index 0000000..7679983 --- /dev/null +++ b/src/aegis128x2/implementations.h @@ -0,0 +1,29 @@ +#ifndef implementations_H +#define implementations_H + +#include +#include + +#include "aegis128x2.h" + +typedef struct aegis128x2_implementation { + int (*encrypt_detached)(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); + int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + void (*state_init)(aegis128x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + int (*state_encrypt_update)(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen); + int (*state_encrypt_detached_final)(aegis128x2_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen); + int (*state_encrypt_final)(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen); + int (*state_decrypt_detached_update)(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen); + int (*state_decrypt_detached_final)(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen); +} aegis128x2_implementation; + +#endif \ No newline at end of file diff --git a/src/common/common.c b/src/common/common.c index c16832f..af28c82 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -35,6 +35,7 @@ aegis_verify_32(const uint8_t *x, const uint8_t *y) } extern int aegis128l_pick_best_implementation(void); +extern int aegis128x2_pick_best_implementation(void); extern int aegis256_pick_best_implementation(void); int @@ -50,7 +51,8 @@ aegis_init(void) errno = ENOSYS; return -1; } - if (aegis128l_pick_best_implementation() != 0 || aegis256_pick_best_implementation() != 0) { + if (aegis128l_pick_best_implementation() != 0 || aegis128x2_pick_best_implementation() != 0 || + aegis256_pick_best_implementation() != 0) { return -1; } #endif diff --git a/src/include/aegis.h b/src/include/aegis.h index 88a9ee8..800bb65 100644 --- a/src/include/aegis.h +++ b/src/include/aegis.h @@ -11,6 +11,7 @@ #endif #include "aegis128l.h" +#include "aegis128x2.h" #include "aegis256.h" /* Initialize the AEGIS library. diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h new file mode 100644 index 0000000..46be627 --- /dev/null +++ b/src/include/aegis128x2.h @@ -0,0 +1,209 @@ +#ifndef aegis128x2_H +#define aegis128x2_H + +#include +#include + +/* The length of an AEGIS key, in bytes */ +#define aegis128x2_KEYBYTES 16 + +/* The length of an AEGIS nonce, in bytes */ +#define aegis128x2_NPUBBYTES 16 + +/* The minimum length of an AEGIS authentication tag, in bytes */ +#define aegis128x2_ABYTES_MIN 16 + +/* The maximum length of an AEGIS authentication tag, in bytes */ +#define aegis128x2_ABYTES_MAX 32 + +/* + * When using AEGIS in incremental mode, this is the maximum number + * of leftover ciphertext bytes that can be returned at finalization. + */ +#define aegis128x2_TAILBYTES_MAX 63 + +/* An AEGIS state, for incremental updates */ +typedef struct aegis128x2_state { + uint8_t opaque[448]; +} aegis128x2_state; + +/* The length of an AEGIS key, in bytes */ +size_t aegis128x2_keybytes(void); + +/* The length of an AEGIS nonce, in bytes */ +size_t aegis128x2_npubbytes(void); + +/* The minimum length of an AEGIS authentication tag, in bytes */ +size_t aegis128x2_abytes_min(void); + +/* The maximum length of an AEGIS authentication tag, in bytes */ +size_t aegis128x2_abytes_max(void); + +/* + * When using AEGIS in incremental mode, this is the maximum number + * of leftover ciphertext bytes that can be returned at finalization. + */ +size_t aegis128x2_tailbytes_max(void); + +/* + * Encrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext separately. + * + * c: ciphertext output buffer + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * m: plaintext input buffer + * mlen: length of the plaintext + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +int aegis128x2_encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, + size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + +/* + * Decrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext separately. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * Returns 0 if the ciphertext is authentic, -1 otherwise. + */ +int aegis128x2_decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) __attribute__((warn_unused_result)); + +/* + * Encrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext together. + * + * c: ciphertext output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * m: plaintext input buffer + * mlen: length of the plaintext + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +int aegis128x2_encrypt(uint8_t *c, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k); + +/* + * Decrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext together. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * maclen: length of the authentication tag (16 or 32) + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * Returns 0 if the ciphertext is authentic, -1 otherwise. + */ +int aegis128x2_decrypt(uint8_t *m, const uint8_t *c, size_t clen, size_t maclen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) + __attribute__((warn_unused_result)); + +/* + * Initialize a state for incremental encryption or decryption. + * + * st_: state to initialize + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +void aegis128x2_state_init(aegis128x2_state *st_, const uint8_t *ad, size_t adlen, + const uint8_t *npub, const uint8_t *k); + +/* + * Encrypt a message chunk. + * The same function can be used regardless of whether the tag will be attached or not. + * + * st_: state to update + * c: ciphertext output buffer + * clen_max: length of the ciphertext chunk buffer (must be >= mlen) + * written: number of ciphertext bytes actually written + * m: plaintext input buffer + * mlen: length of the plaintext + * + * Return 0 on success, -1 on failure. + */ +int aegis128x2_state_encrypt_update(aegis128x2_state *st_, uint8_t *c, size_t clen_max, + size_t *written, const uint8_t *m, size_t mlen); + +/* + * Finalize the incremental encryption and generate the authentication tag. + * + * st_: state to finalize + * c: output buffer for the final ciphertext chunk + * clen_max: length of the ciphertext chunk buffer (must be >= remaining bytes) + * written: number of ciphertext bytes actually written + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis128x2_state_encrypt_detached_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen); + +/* + * Finalize the incremental encryption and attach the authentication tag + * to the final ciphertext chunk. + * + * st_: state to finalize + * c: output buffer for the final ciphertext chunk + * clen_max: length of the ciphertext chunk buffer (must be >= remaining bytes+maclen) + * written: number of ciphertext bytes actually written + * maclen: length of the authentication tag to generate (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis128x2_state_encrypt_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, + size_t *written, size_t maclen); + +/* + * Decrypt a message chunk. + * + * The output should never be released to the caller until the tag has been verified. + * + * st_: state to update + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= clen) + * written: number of plaintext bytes actually written + * c: ciphertext chunk input buffer + * clen: length of the ciphertext chunk + * + * Return 0 on success, -1 on failure. + */ +int aegis128x2_state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) + __attribute__((warn_unused_result)); + +/* + * Decrypt the final message chunk and verify the authentication tag. + * + * st_: state to finalize + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) + * written: number of plaintext bytes actually written + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis128x2_state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) + __attribute__((warn_unused_result)); + +#endif diff --git a/src/test/main.zig b/src/test/main.zig index 1494d83..93b8c50 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -281,3 +281,40 @@ test "aegis-256 - incremental encryption 2" { try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, &msg, &msg2); } + +test "aegis-128x2 - encrypt_detached oneshot" { + try testing.expectEqual(aegis.aegis_init(), 0); + + inline for ([_]usize{ 16, 32 }) |mac_len| { + var msg_buf: [max_msg_len]u8 = undefined; + var msg2_buf: [msg_buf.len]u8 = undefined; + var ad_buf: [max_ad_len]u8 = undefined; + var c_buf: [msg_buf.len]u8 = undefined; + var mac: [mac_len]u8 = undefined; + + random.bytes(&msg_buf); + random.bytes(&ad_buf); + + for (0..iterations) |_| { + const msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); + var msg = msg_buf[0..msg_len]; + var c = c_buf[0..msg_len]; + + const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); + const ad = &ad_buf[0..ad_len]; + + var nonce: [aegis.aegis128x2_NPUBBYTES]u8 = undefined; + random.bytes(&nonce); + var key: [aegis.aegis128x2_KEYBYTES]u8 = undefined; + random.bytes(&key); + + var ret = aegis.aegis128x2_encrypt_detached(c.ptr, &mac, mac_len, msg.ptr, msg.len, ad.ptr, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + + var msg2 = msg2_buf[0..msg_len]; + ret = aegis.aegis128x2_decrypt_detached(msg2.ptr, c.ptr, c.len, &mac, mac_len, ad.ptr, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + try testing.expectEqualSlices(u8, msg, msg2); + } + } +} From b6d2421e154d2dace568e1cacca183a6a29db0bd Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 15:13:00 +0200 Subject: [PATCH 023/219] Initialize constants to AES_BLOCK_LENGTH --- src/aegis128l/aegis128l_common.h | 13 +++++++------ src/aegis128x2/aegis128x2_common.h | 21 +++++++++++++-------- src/aegis256/aegis256_common.h | 9 +++++---- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index fa0f03a..5587c3e 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -4,13 +4,14 @@ static void aegis128l_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { static CRYPTO_ALIGN(AES_BLOCK_LENGTH) - const uint8_t c0_[] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, - 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 }; + const uint8_t c0_[AES_BLOCK_LENGTH] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, + 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 }; static CRYPTO_ALIGN(AES_BLOCK_LENGTH) - const uint8_t c1_[] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, - 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd }; - const aes_block_t c0 = AES_BLOCK_LOAD(c0_); - const aes_block_t c1 = AES_BLOCK_LOAD(c1_); + const uint8_t c1_[AES_BLOCK_LENGTH] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, + 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd }; + + const aes_block_t c0 = AES_BLOCK_LOAD(c0_); + const aes_block_t c1 = AES_BLOCK_LOAD(c1_); aes_block_t k; aes_block_t n; int i; diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 2b7f3bc..60c7745 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -3,14 +3,19 @@ static void aegis128x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { - static CRYPTO_ALIGN(AES_BLOCK_LENGTH) - const uint8_t c0_[] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, - 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 }; - static CRYPTO_ALIGN(AES_BLOCK_LENGTH) - const uint8_t c1_[] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, - 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd }; - const aes_block_t c0 = AES_BLOCK_LOAD(c0_); - const aes_block_t c1 = AES_BLOCK_LOAD(c1_); + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c0_[AES_BLOCK_LENGTH] = { + 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, 0x37, + 0x59, 0x90, 0xe9, 0x79, 0x62, 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, + 0x08, 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62, + }; + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c1_[AES_BLOCK_LENGTH] = { + 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, 0x31, + 0x42, 0x73, 0xb5, 0x28, 0xdd, 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, + 0x2f, 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd, + }; + + const aes_block_t c0 = AES_BLOCK_LOAD(c0_); + const aes_block_t c1 = AES_BLOCK_LOAD(c1_); uint8_t tmp[2 * 16]; uint8_t context_bytes[AES_BLOCK_LENGTH]; aes_block_t context; diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index c6fd7d3..3323b3f 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -4,11 +4,12 @@ static void aegis256_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { static CRYPTO_ALIGN(AES_BLOCK_LENGTH) - const uint8_t c0_[] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, - 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 }; + const uint8_t c0_[AES_BLOCK_LENGTH] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, + 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 }; static CRYPTO_ALIGN(AES_BLOCK_LENGTH) - const uint8_t c1_[] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, - 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd }; + const uint8_t c1_[AES_BLOCK_LENGTH] = { 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, + 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd }; + const aes_block_t c0 = AES_BLOCK_LOAD(c0_); const aes_block_t c1 = AES_BLOCK_LOAD(c1_); const aes_block_t k0 = AES_BLOCK_LOAD(key); From 0991483ec9096642ced2d6f42fb8f1fa95968348 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 15:17:38 +0200 Subject: [PATCH 024/219] Add 128X test vector --- src/test/main.zig | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/test/main.zig b/src/test/main.zig index 93b8c50..dfb38a9 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -282,6 +282,28 @@ test "aegis-256 - incremental encryption 2" { try testing.expectEqualSlices(u8, &msg, &msg2); } +test "aegis-128x2 - test vector" { + const key = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const nonce = [_]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; + const ad = [_]u8{ 1, 2, 3, 4 } ** 2; + const msg = [_]u8{ 4, 5, 6, 7 } ** 30; + var c = [_]u8{0} ** msg.len; + var mac = [_]u8{0} ** 16; + var ret = aegis.aegis128x2_encrypt_detached(&c, &mac, mac.len, &msg, msg.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + + const expected_ciphertext_hex = "9958ad79ff1feea50a27d5dd88728d157a4ce0cd996b9fffb4fde113ef646de4aa67278fb1ebcb6571526b309d708447c818ffc3d84c9c73b0cca3040bb85b81d366311956f4cb1a66b02b25b58a7f759797169b0e398c4db16c9a577d4de1805d646b823fa095ec34feefb58768efc06d9516c55b653f91"; + try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(c, .lower), expected_ciphertext_hex); + + const expected_tag_hex = "179247ab85ea2c4f9f712cac8bb7c9d3"; + try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(mac, .lower), expected_tag_hex); + + var msg2 = [_]u8{0} ** msg.len; + ret = aegis.aegis128x2_decrypt_detached(&msg2, &c, c.len, &mac, mac.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + try std.testing.expectEqualSlices(u8, &msg, &msg2); +} + test "aegis-128x2 - encrypt_detached oneshot" { try testing.expectEqual(aegis.aegis_init(), 0); From c18c356aa965193fe2dfc50d7f6d71d42a89f9e9 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 15:18:49 +0200 Subject: [PATCH 025/219] Update doc --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 62454c0..1be9cf6 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2 and AEGIS-256), wit ## Features -- AEGIS-128L with 16 and 32 bytes tags -- AEGIS-128X2 with 16 and 32 bytes tags -- AEGIS-256 with 16 and 32 bytes tags +- AEGIS-128L with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) +- AEGIS-128X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) +- AEGIS-256 with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) - Encryption and decryption with attached and detached tags - Incremental encryption and decryption. From 69438cccb8cc1dd783d004313e748a7d7653bf12 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 23:07:19 +0200 Subject: [PATCH 026/219] Check _M_ARM64 in addition to __arch64__ --- src/aegis128l/aegis128l.c | 4 ++-- src/aegis128l/aegis128l_armcrypto.c | 4 ++-- src/aegis128x2/aegis128x2.c | 4 ++-- src/aegis128x2/aegis128x2_armcrypto.c | 4 ++-- src/aegis256/aegis256.c | 4 ++-- src/aegis256/aegis256_armcrypto.c | 4 ++-- src/common/common.h | 3 --- src/common/cpu.c | 6 +++--- 8 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 3f02708..d7745d6 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -14,7 +14,7 @@ #include "aegis128l_soft.h" static const aegis128l_implementation *implementation = &aegis128l_soft_implementation; #else -#ifdef __aarch64__ +#if defined(__aarch64__) || defined(_M_ARM64) static const aegis128l_implementation *implementation = &aegis128l_armcrypto_implementation; #elif defined(__x86_64__) || defined(__i386__) static const aegis128l_implementation *implementation = &aegis128l_aesni_implementation; @@ -157,7 +157,7 @@ aegis128l_pick_best_implementation(void) { implementation = &aegis128l_soft_implementation; -#ifdef __aarch64__ +#if defined(__aarch64__) || defined(_M_ARM64) if (aegis_runtime_has_armcrypto()) { implementation = &aegis128l_armcrypto_implementation; return 0; diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index fca9f30..7e07198 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -1,4 +1,4 @@ -#ifdef __aarch64__ +#if defined(__aarch64__) || defined(_M_ARM64) #include #include @@ -61,4 +61,4 @@ struct aegis128l_implementation aegis128l_armcrypto_implementation = { #pragma clang attribute pop #endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index 69ebba2..7164874 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -15,7 +15,7 @@ #include "aegis128x2_soft.h" static const aegis128x2_implementation *implementation = &aegis128x2_soft_implementation; #else -#ifdef __aarch64__ +#if defined(__aarch64__) || defined(_M_ARM64) static const aegis128x2_implementation *implementation = &aegis128x2_armcrypto_implementation; #elif defined(__x86_64__) || defined(__i386__) static const aegis128x2_implementation *implementation = &aegis128x2_aesni_implementation; @@ -158,7 +158,7 @@ aegis128x2_pick_best_implementation(void) { implementation = &aegis128x2_soft_implementation; -#ifdef __aarch64__ +#if defined(__aarch64__) || defined(_M_ARM64) if (aegis_runtime_has_armcrypto()) { implementation = &aegis128x2_armcrypto_implementation; return 0; diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 7b465bb..b77f9bf 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -1,4 +1,4 @@ -#ifdef __aarch64__ +#if defined(__aarch64__) || defined(_M_ARM64) #include #include @@ -98,4 +98,4 @@ struct aegis128x2_implementation aegis128x2_armcrypto_implementation = { #pragma clang attribute pop #endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index d1b41be..3644ffd 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -14,7 +14,7 @@ #include "aegis256_soft.h" static const aegis256_implementation *implementation = &aegis256_soft_implementation; #else -#ifdef __aarch64__ +#if defined(__aarch64__) || defined(_M_ARM64) static const aegis256_implementation *implementation = &aegis256_armcrypto_implementation; #elif defined(__x86_64__) || defined(__i386__) static const aegis256_implementation *implementation = &aegis256_aesni_implementation; @@ -157,7 +157,7 @@ aegis256_pick_best_implementation(void) { implementation = &aegis256_soft_implementation; -#ifdef __aarch64__ +#if defined(__aarch64__) || defined(_M_ARM64) if (aegis_runtime_has_armcrypto()) { implementation = &aegis256_armcrypto_implementation; return 0; diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index dc1eb3a..9cbf8da 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -1,4 +1,4 @@ -#ifdef __aarch64__ +#if defined(__aarch64__) || defined(_M_ARM64) #include #include @@ -59,4 +59,4 @@ struct aegis256_implementation aegis256_armcrypto_implementation = { #pragma clang attribute pop #endif -#endif \ No newline at end of file +#endif diff --git a/src/common/common.h b/src/common/common.h index 237893c..f44a732 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -27,9 +27,6 @@ #define HAVE_AVX512FINTRIN_H #define HAVE_TMMINTRIN_H #define HAVE_WMMINTRIN_H -#endif -#ifdef __aarch64__ - #endif #if defined(__INTEL_COMPILER) || defined(_MSC_VER) diff --git a/src/common/cpu.c b/src/common/cpu.c index 7f4582e..f3c141f 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -56,11 +56,11 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) return -1; /* LCOV_EXCL_LINE */ #endif -#if defined(__ARM_NEON) || defined(__aarch64__) +#if defined(__ARM_NEON) || defined(__aarch64__) || defined(_M_ARM64) cpu_features->has_neon = 1; #elif defined(HAVE_ANDROID_GETCPUFEATURES) && defined(ANDROID_CPU_ARM_FEATURE_NEON) cpu_features->has_neon = (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0x0; -#elif defined(__aarch64__) && defined(AT_HWCAP) +#elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) #ifdef HAVE_GETAUXVAL cpu_features->has_neon = (getauxval(AT_HWCAP) & (1L << 1)) != 0; #elif defined(HAVE_ELF_AUX_INFO) @@ -106,7 +106,7 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) } #elif defined(HAVE_ANDROID_GETCPUFEATURES) && defined(ANDROID_CPU_ARM_FEATURE_AES) cpu_features->has_armcrypto = (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_AES) != 0x0; -#elif defined(__aarch64__) && defined(AT_HWCAP) +#elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) #ifdef HAVE_GETAUXVAL cpu_features->has_armcrypto = (getauxval(AT_HWCAP) & (1L << 3)) != 0; #elif defined(HAVE_ELF_AUX_INFO) From d1fdfa817d287ee7b8ea37ccb60be4343f216c8b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 5 Aug 2023 23:18:01 +0200 Subject: [PATCH 027/219] Assume that all the CPUs supported by Windows have the crypto extensions --- src/common/cpu.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/common/cpu.c b/src/common/cpu.c index f3c141f..aa08b24 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -62,7 +62,7 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) cpu_features->has_neon = (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0x0; #elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) #ifdef HAVE_GETAUXVAL - cpu_features->has_neon = (getauxval(AT_HWCAP) & (1L << 1)) != 0; + cpu_features->has_neon = (getauxval(AT_HWCAP) & (1L << 1)) != 0; #elif defined(HAVE_ELF_AUX_INFO) { unsigned long buf; @@ -90,6 +90,9 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) #if __ARM_FEATURE_CRYPTO cpu_features->has_armcrypto = 1; +#elif defined(_M_ARM64) + cpu_features->has_armcrypto = + 1; /* assuming all CPUs supported by ARM Windows have the crypto extensions */ #elif defined(__APPLE__) && defined(CPU_TYPE_ARM64) && defined(CPU_SUBTYPE_ARM64E) { cpu_type_t cpu_type; From c70d4ce26f2196e33eae9c4cedd1a8ff0dd5c294 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 12:05:02 +0200 Subject: [PATCH 028/219] Add and document NON_TEMPORAL_STORES --- README.md | 7 +++++++ build.zig | 7 +++++++ src/aegis128l/aegis128l_aesni.c | 8 ++++++-- src/aegis128x2/aegis128x2_aesni.c | 10 ++++++++++ src/aegis256/aegis256_aesni.c | 8 ++++++-- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1be9cf6..a7a932d 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,12 @@ To favor performance over side-channel mitigations on WebAssembly and on devices zig build -Drelease -Dfavor-performance ``` +To avoid caching outputs, add `-Dnon-temporal-stores`: + +```sh +zig build -Drelease -Dnon-temporal-stores +``` + ### Compilation with `cmake`: ```sh @@ -38,6 +44,7 @@ make install ``` To favor performance over side-channel mitigations on WebAssembly and on devices without hardware acceleration, add `-DFAVOR_PERFORMANCE`. +To avoid caching outputs, add `-DNON_TEMPORAL_STORES`. ### Direct inclusion diff --git a/build.zig b/build.zig index eed4fd6..295372f 100644 --- a/build.zig +++ b/build.zig @@ -14,12 +14,19 @@ pub fn build(b: *std.Build) void { lib.strip = true; const lib_options = b.addOptions(); + const favor_performance: bool = b.option(bool, "favor-performance", "Favor performance over side channel mitigations") orelse false; lib_options.addOption(bool, "favor_performance", favor_performance); if (favor_performance) { lib.defineCMacro("FAVOR_PERFORMANCE", "1"); } + const non_temporal_stores: bool = b.option(bool, "non-temporal-stores", "Use non-temporal stores") orelse false; + lib_options.addOption(bool, "non_temporal_stores", non_temporal_stores); + if (non_temporal_stores) { + lib.defineCMacro("NON_TEMPORAL_STORES", "1"); + } + lib.addIncludePath(.{ .path = "src/include" }); lib.addCSourceFiles(&.{ diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index 0491eba..ea4b97f 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -25,8 +25,12 @@ typedef __m128i aes_block_t; #define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) #define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) #define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B)) -#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) -#define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) +#ifdef NON_TEMPOORAL_STORES +#define AES_BLOCK_STORE(A, B) _mm_stream_si128((aes_block_t *) (void *) (A), (B)) +#else +#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) +#endif +#define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) static inline void aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index 31385eb..7b7f376 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -50,12 +50,22 @@ AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) const __m128i t = _mm_set_epi64x((long long) a, (long long) b); return (aes_block_t) { t, t }; } + +#ifdef NON_TEMPOORAL_STORES +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + _mm_stream_si128((__m128i *) (void *) a, b.b0); + _mm_stream_si128((__m128i *) (void *) (a + 16), b.b1); +} +#else static inline void AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) { _mm_storeu_si128((__m128i *) (void *) a, b.b0); _mm_storeu_si128((__m128i *) (void *) (a + 16), b.b1); } +#endif static inline aes_block_t AES_ENC(const aes_block_t a, const aes_block_t b) diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index be7ed51..56ce479 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -25,8 +25,12 @@ typedef __m128i aes_block_t; #define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) #define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) #define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B)) -#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) -#define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) +#ifdef NON_TEMPOORAL_STORES +#define AES_BLOCK_STORE(A, B) _mm_stream_si128((aes_block_t *) (void *) (A), (B)) +#else +#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) +#endif +#define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) static inline void aegis256_update(aes_block_t *const state, const aes_block_t d) From eb9f9f1700e469341cb127f2d0a9ed3752a67c66 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 21:18:32 +0200 Subject: [PATCH 029/219] Typo --- README.md | 1 + src/aegis128l/aegis128l_aesni.c | 4 ++-- src/aegis128x2/aegis128x2_aesni.c | 4 ++-- src/aegis256/aegis256_aesni.c | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a7a932d..6078f7a 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ make install ``` To favor performance over side-channel mitigations on WebAssembly and on devices without hardware acceleration, add `-DFAVOR_PERFORMANCE`. + To avoid caching outputs, add `-DNON_TEMPORAL_STORES`. ### Direct inclusion diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index ea4b97f..e094786 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -25,7 +25,7 @@ typedef __m128i aes_block_t; #define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) #define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) #define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B)) -#ifdef NON_TEMPOORAL_STORES +#ifdef NON_TEMPORAL_STORES #define AES_BLOCK_STORE(A, B) _mm_stream_si128((aes_block_t *) (void *) (A), (B)) #else #define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) @@ -68,4 +68,4 @@ struct aegis128l_implementation aegis128l_aesni_implementation = { #pragma clang attribute pop #endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index 7b7f376..5156bee 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -51,7 +51,7 @@ AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) return (aes_block_t) { t, t }; } -#ifdef NON_TEMPOORAL_STORES +#ifdef NON_TEMPORAL_STORES static inline void AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) { @@ -109,4 +109,4 @@ struct aegis128x2_implementation aegis128x2_aesni_implementation = { #pragma clang attribute pop #endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index 56ce479..b777da0 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -25,7 +25,7 @@ typedef __m128i aes_block_t; #define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) #define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) #define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B)) -#ifdef NON_TEMPOORAL_STORES +#ifdef NON_TEMPORAL_STORES #define AES_BLOCK_STORE(A, B) _mm_stream_si128((aes_block_t *) (void *) (A), (B)) #else #define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) @@ -63,4 +63,4 @@ struct aegis256_implementation aegis256_aesni_implementation = { #pragma clang attribute pop #endif -#endif \ No newline at end of file +#endif From 38e6be7bd7e21a3bb2be8b70093d1d7d460d909e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 21:32:23 +0200 Subject: [PATCH 030/219] Add non-temporal stores to the 128x2-avx2 implementation --- src/aegis128x2/aegis128x2_avx2.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index 307cb79..e5980fb 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -27,8 +27,12 @@ typedef __m256i aes_block_t; _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) #define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) #define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) -#define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) -#define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) +#ifdef NON_TEMPORAL_STORES +#define AES_BLOCK_STORE(A, B) _mm256_stream_si256((aes_block_t *) (void *) (A), (B)) +#else +#define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) +#endif +#define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) static inline void aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) From 7fdd9916619bb646cb107a945222ed1a8f9c92e5 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 22:08:54 +0200 Subject: [PATCH 031/219] Add AEGIS-128X4 --- CMakeLists.txt | 2 +- build.zig | 7 + src/aegis128x2/aegis128x2_armcrypto.c | 6 +- src/aegis128x4/aegis128x4.c | 186 ++++++++++ src/aegis128x4/aegis128x4_aesni.c | 123 +++++++ src/aegis128x4/aegis128x4_aesni.h | 9 + src/aegis128x4/aegis128x4_armcrypto.c | 107 ++++++ src/aegis128x4/aegis128x4_armcrypto.h | 9 + src/aegis128x4/aegis128x4_avx2.c | 112 ++++++ src/aegis128x4/aegis128x4_avx2.h | 9 + src/aegis128x4/aegis128x4_avx512.c | 72 ++++ src/aegis128x4/aegis128x4_avx512.h | 9 + src/aegis128x4/aegis128x4_common.h | 509 ++++++++++++++++++++++++++ src/aegis128x4/aegis128x4_soft.c | 100 +++++ src/aegis128x4/aegis128x4_soft.h | 9 + src/aegis128x4/implementations.h | 29 ++ src/common/common.c | 3 +- src/include/aegis.h | 1 + src/include/aegis128x4.h | 209 +++++++++++ src/test/main.zig | 59 +++ 20 files changed, 1564 insertions(+), 6 deletions(-) create mode 100644 src/aegis128x4/aegis128x4.c create mode 100644 src/aegis128x4/aegis128x4_aesni.c create mode 100644 src/aegis128x4/aegis128x4_aesni.h create mode 100644 src/aegis128x4/aegis128x4_armcrypto.c create mode 100644 src/aegis128x4/aegis128x4_armcrypto.h create mode 100644 src/aegis128x4/aegis128x4_avx2.c create mode 100644 src/aegis128x4/aegis128x4_avx2.h create mode 100644 src/aegis128x4/aegis128x4_avx512.c create mode 100644 src/aegis128x4/aegis128x4_avx512.h create mode 100644 src/aegis128x4/aegis128x4_common.h create mode 100644 src/aegis128x4/aegis128x4_soft.c create mode 100644 src/aegis128x4/aegis128x4_soft.h create mode 100644 src/aegis128x4/implementations.h create mode 100644 src/include/aegis128x4.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 21b6e8a..41aef58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ endif() include_directories("src/include") -file(GLOB SOURCE_FILES "src/aegis128l/*.c" "src/aegis128x2/*.c" "src/aegis256/*.c" "src/common/*.c") +file(GLOB SOURCE_FILES "src/aegis128l/*.c" "src/aegis128x2/*.c" "src/aegis128x4/*.c" "src/aegis256/*.c" "src/common/*.c") file(GLOB HEADER_FILES "src/include/*.h") add_library("${PROJECT_NAME}") diff --git a/build.zig b/build.zig index 295372f..632364c 100644 --- a/build.zig +++ b/build.zig @@ -41,6 +41,13 @@ pub fn build(b: *std.Build) void { "src/aegis128x2/aegis128x2_soft.c", "src/aegis128x2/aegis128x2.c", + "src/aegis128x4/aegis128x4_aesni.c", + "src/aegis128x4/aegis128x4_avx2.c", + "src/aegis128x4/aegis128x4_avx512.c", + "src/aegis128x4/aegis128x4_armcrypto.c", + "src/aegis128x4/aegis128x4_soft.c", + "src/aegis128x4/aegis128x4.c", + "src/aegis256/aegis256_aesni.c", "src/aegis256/aegis256_armcrypto.c", "src/aegis256/aegis256_soft.c", diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index b77f9bf..65231f0 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -59,10 +59,8 @@ AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) static inline aes_block_t AES_ENC(const aes_block_t a, const aes_block_t b) { - return (aes_block_t) { - veorq_u8(vaesmcq_u8(vaeseq_u8((a.b0), vmovq_n_u8(0))), (b.b0)), - veorq_u8(vaesmcq_u8(vaeseq_u8((a.b1), vmovq_n_u8(0))), (b.b1)), - }; + return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8((a.b0), vmovq_n_u8(0))), (b.b0)), + veorq_u8(vaesmcq_u8(vaeseq_u8((a.b1), vmovq_n_u8(0))), (b.b1)) }; } static inline void diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c new file mode 100644 index 0000000..a078cc8 --- /dev/null +++ b/src/aegis128x4/aegis128x4.c @@ -0,0 +1,186 @@ +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "../common/cpu.h" +#include "aegis128x4.h" +#include "aegis128x4_aesni.h" +#include "aegis128x4_armcrypto.h" +#include "aegis128x4_avx2.h" +#include "aegis128x4_avx512.h" + +#ifndef HAS_HW_AES +#include "aegis128x4_soft.h" +static const aegis128x4_implementation *implementation = &aegis128x4_soft_implementation; +#else +#if defined(__aarch64__) || defined(_M_ARM64) +static const aegis128x4_implementation *implementation = &aegis128x4_armcrypto_implementation; +#elif defined(__x86_64__) || defined(__i386__) +static const aegis128x4_implementation *implementation = &aegis128x4_aesni_implementation; +#else +#error "Unsupported architecture" +#endif +#endif + +size_t +aegis128x4_keybytes(void) +{ + return aegis128x4_KEYBYTES; +} + +size_t +aegis128x4_npubbytes(void) +{ + return aegis128x4_NPUBBYTES; +} + +size_t +aegis128x4_abytes_min(void) +{ + return aegis128x4_ABYTES_MIN; +} + +size_t +aegis128x4_abytes_max(void) +{ + return aegis128x4_ABYTES_MAX; +} + +size_t +aegis128x4_tailbytes_max(void) +{ + return aegis128x4_TAILBYTES_MAX; +} + +int +aegis128x4_encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->encrypt_detached(c, mac, maclen, m, mlen, ad, adlen, npub, k); +} + +int +aegis128x4_decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->decrypt_detached(m, c, clen, mac, maclen, ad, adlen, npub, k); +} + +int +aegis128x4_encrypt(uint8_t *c, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + return aegis128x4_encrypt_detached(c, c + mlen, maclen, m, mlen, ad, adlen, npub, k); +} + +int +aegis128x4_decrypt(uint8_t *m, const uint8_t *c, size_t clen, size_t maclen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + int ret = -1; + + if (clen >= maclen) { + ret = aegis128x4_decrypt_detached(m, c, clen - maclen, c + clen - maclen, maclen, ad, adlen, + npub, k); + } + return ret; +} + +void +aegis128x4_state_init(aegis128x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + memset(st_, 0, sizeof *st_); + implementation->state_init(st_, ad, adlen, npub, k); +} + +int +aegis128x4_state_encrypt_update(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen) +{ + return implementation->state_encrypt_update(st_, c, clen_max, written, m, mlen); +} + +int +aegis128x4_state_encrypt_detached_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_encrypt_detached_final(st_, c, clen_max, written, mac, maclen); +} + +int +aegis128x4_state_encrypt_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_encrypt_final(st_, c, clen_max, written, maclen); +} + +int +aegis128x4_state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) +{ + return implementation->state_decrypt_detached_update(st_, m, mlen_max, written, c, clen); +} + +int +aegis128x4_state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); +} + +#ifndef HAS_HW_AES +int +aegis128x4_pick_best_implementation(void) +{ + implementation = &aegis128x4_soft_implementation; + +#if defined(__aarch64__) || defined(_M_ARM64) + if (aegis_runtime_has_armcrypto()) { + implementation = &aegis128x4_armcrypto_implementation; + return 0; + } +#endif + +#if defined(__x86_64__) || defined(__i386__) + if (aegis_runtime_has_vaes() && aegis_runtime_has_avx512f()) { + implementation = &aegis128x4_avx512_implementation; + return 0; + } + if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { + implementation = &aegis128x4_avx2_implementation; + return 0; + } + if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { + implementation = &aegis128x4_aesni_implementation; + return 0; + } +#endif + + return 0; /* LCOV_EXCL_LINE */ +} +#endif diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c new file mode 100644 index 0000000..663c035 --- /dev/null +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -0,0 +1,123 @@ +#if defined(__i386__) || defined(__x86_64__) + +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "aegis128x4.h" +#include "aegis128x4_aesni.h" + +#ifdef __clang__ +#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) +#elif defined(__GNUC__) +#pragma GCC target("aes,avx") +#endif + +#include + +#define AES_BLOCK_LENGTH 64 + +typedef struct { + __m128i b0; + __m128i b1; + __m128i b2; + __m128i b3; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_xor_si128(a.b0, b.b0), _mm_xor_si128(a.b1, b.b1), + _mm_xor_si128(a.b2, b.b2), _mm_xor_si128(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_and_si128(a.b0, b.b0), _mm_and_si128(a.b1, b.b1), + _mm_and_si128(a.b2, b.b2), _mm_and_si128(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { _mm_loadu_si128((const __m128i *) (const void *) a), + _mm_loadu_si128((const __m128i *) (const void *) (a + 16)), + _mm_loadu_si128((const __m128i *) (const void *) (a + 32)), + _mm_loadu_si128((const __m128i *) (const void *) (a + 48)) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const __m128i t = _mm_set_epi64x((long long) a, (long long) b); + return (aes_block_t) { t, t, t, t }; +} + +#ifdef NON_TEMPORAL_STORES +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + _mm_stream_si128((__m128i *) (void *) a, b.b0); + _mm_stream_si128((__m128i *) (void *) (a + 16), b.b1); + _mm_stream_si128((__m128i *) (void *) (a + 32), b.b2); + _mm_stream_si128((__m128i *) (void *) (a + 48), b.b3); +} +#else +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + _mm_storeu_si128((__m128i *) (void *) a, b.b0); + _mm_storeu_si128((__m128i *) (void *) (a + 16), b.b1); + _mm_storeu_si128((__m128i *) (void *) (a + 32), b.b2); + _mm_storeu_si128((__m128i *) (void *) (a + 48), b.b3); +} +#endif + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_aesenc_si128(a.b0, b.b0), _mm_aesenc_si128(a.b1, b.b1), + _mm_aesenc_si128(a.b2, b.b2), _mm_aesenc_si128(a.b3, b.b3) }; +} + +static inline void +aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_ENC(tmp, state[0]); + + state[0] = AES_BLOCK_XOR(state[0], d1); + state[4] = AES_BLOCK_XOR(state[4], d2); +} + +#include "aegis128x4_common.h" + +struct aegis128x4_implementation aegis128x4_aesni_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#ifdef __clang__ +#pragma clang attribute pop +#endif + +#endif diff --git a/src/aegis128x4/aegis128x4_aesni.h b/src/aegis128x4/aegis128x4_aesni.h new file mode 100644 index 0000000..42733ba --- /dev/null +++ b/src/aegis128x4/aegis128x4_aesni.h @@ -0,0 +1,9 @@ +#ifndef aegis128x4_aesni_H +#define aegis128x4_aesni_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x4_implementation aegis128x4_aesni_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c new file mode 100644 index 0000000..439716b --- /dev/null +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -0,0 +1,107 @@ +#if defined(__aarch64__) || defined(_M_ARM64) + +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "aegis128x4.h" +#include "aegis128x4_armcrypto.h" + +#ifdef __clang__ +#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function) +#elif defined(__GNUC__) +#pragma GCC target("neon,crypto,aes") +#endif + +#include + +#define AES_BLOCK_LENGTH 64 + +typedef struct { + uint8x16_t b0; + uint8x16_t b1; + uint8x16_t b2; + uint8x16_t b3; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { veorq_u8(a.b0, b.b0), veorq_u8(a.b1, b.b1), veorq_u8(a.b2, b.b2), + veorq_u8(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vandq_u8(a.b0, b.b0), vandq_u8(a.b1, b.b1), vandq_u8(a.b2, b.b2), + vandq_u8(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { vld1q_u8(a), vld1q_u8(a + 16), vld1q_u8(a + 32), vld1q_u8(a + 48) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const uint8x16_t t = vreinterpretq_u8_u64(vsetq_lane_u64((a), vmovq_n_u64(b), 1)); + return (aes_block_t) { t, t, t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + vst1q_u8(a, b.b0); + vst1q_u8(a + 16, b.b1); + vst1q_u8(a + 32, b.b2); + vst1q_u8(a + 48, b.b3); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8((a.b0), vmovq_n_u8(0))), (b.b0)), + veorq_u8(vaesmcq_u8(vaeseq_u8((a.b1), vmovq_n_u8(0))), (b.b1)), + veorq_u8(vaesmcq_u8(vaeseq_u8((a.b2), vmovq_n_u8(0))), (b.b2)), + veorq_u8(vaesmcq_u8(vaeseq_u8((a.b3), vmovq_n_u8(0))), (b.b3)) }; +} + +static inline void +aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_BLOCK_XOR(AES_ENC(state[3], state[4]), d2); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d1); +} + +#include "aegis128x4_common.h" + +struct aegis128x4_implementation aegis128x4_armcrypto_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#ifdef __clang__ +#pragma clang attribute pop +#endif + +#endif diff --git a/src/aegis128x4/aegis128x4_armcrypto.h b/src/aegis128x4/aegis128x4_armcrypto.h new file mode 100644 index 0000000..43befcb --- /dev/null +++ b/src/aegis128x4/aegis128x4_armcrypto.h @@ -0,0 +1,9 @@ +#ifndef aegis128x4_armcrypto_H +#define aegis128x4_armcrypto_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x4_implementation aegis128x4_armcrypto_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c new file mode 100644 index 0000000..e2f7ce1 --- /dev/null +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -0,0 +1,112 @@ +#if defined(__i386__) || defined(__x86_64__) + +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "aegis128x4.h" +#include "aegis128x4_avx2.h" + +#ifdef __clang__ +#pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +#elif defined(__GNUC__) +#pragma GCC target("vaes,avx2") +#endif + +#include + +#define AES_BLOCK_LENGTH 64 + +typedef struct { + __m256i b0; + __m256i b1; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm256_xor_si256(a.b0, b.b0), _mm256_xor_si256(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm256_and_si256(a.b0, b.b0), _mm256_and_si256(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { _mm256_loadu_si256((const __m256i *) (const void *) a), + _mm256_loadu_si256((const __m256i *) (const void *) (a + 32)) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const __m256i t = _mm256_broadcastsi128_si256(_mm_set_epi64x((long long) a, (long long) b)); + return (aes_block_t) { t, t }; +} + +#ifdef NON_TEMPORAL_STORES +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + _mm256_stream_si256((__m256i *) (void *) a, b.b0); + _mm256_stream_si256((__m256i *) (void *) (a + 32), b.b1); +} +#else +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + _mm256_storeu_si256((__m256i *) (void *) a, b.b0); + _mm256_storeu_si256((__m256i *) (void *) (a + 32), b.b1); +} +#endif + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm256_aesenc_epi128(a.b0, b.b0), _mm256_aesenc_epi128(a.b1, b.b1) }; +} + +static inline void +aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_ENC(tmp, state[0]); + + state[0] = AES_BLOCK_XOR(state[0], d1); + state[4] = AES_BLOCK_XOR(state[4], d2); +} + +#include "aegis128x4_common.h" + +struct aegis128x4_implementation aegis128x4_avx2_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#ifdef __clang__ +#pragma clang attribute pop +#endif + +#endif diff --git a/src/aegis128x4/aegis128x4_avx2.h b/src/aegis128x4/aegis128x4_avx2.h new file mode 100644 index 0000000..bd99052 --- /dev/null +++ b/src/aegis128x4/aegis128x4_avx2.h @@ -0,0 +1,9 @@ +#ifndef aegis128x4_avx2_H +#define aegis128x4_avx2_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x4_implementation aegis128x4_avx2_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c new file mode 100644 index 0000000..15315e0 --- /dev/null +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -0,0 +1,72 @@ +#if defined(__i386__) || defined(__x86_64__) + +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "aegis128x4.h" +#include "aegis128x4_avx512.h" + +#ifdef __clang__ +#pragma clang attribute push(__attribute__((target("vaes,avx512f"))), apply_to = function) +#elif defined(__GNUC__) +#pragma GCC target("vaes,avx512f") +#endif + +#include + +#define AES_BLOCK_LENGTH 64 + +typedef __m512i aes_block_t; +#define AES_BLOCK_XOR(A, B) _mm512_xor_si512((A), (B)) +#define AES_BLOCK_AND(A, B) _mm512_and_si512((A), (B)) +#define AES_BLOCK_LOAD128_BROADCAST(A) _mm512_broadcast_i32x4(_mm_loadu_si128((const void *) (A))) +#define AES_BLOCK_LOAD(A) _mm512_loadu_si512((const aes_block_t *) (const void *) (A)) +#define AES_BLOCK_LOAD_64x2(A, B) _mm512_broadcast_i32x4(_mm_set_epi64x((A), (B))) +#ifdef NON_TEMPORAL_STORES +#define AES_BLOCK_STORE(A, B) _mm512_stream_si512((aes_block_t *) (void *) (A), (B)) +#else +#define AES_BLOCK_STORE(A, B) _mm512_storeu_si512((aes_block_t *) (void *) (A), (B)) +#endif +#define AES_ENC(A, B) _mm512_aesenc_epi128((A), (B)) + +static inline void +aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_ENC(tmp, state[0]); + + state[0] = AES_BLOCK_XOR(state[0], d1); + state[4] = AES_BLOCK_XOR(state[4], d2); +} + +#include "aegis128x4_common.h" + +struct aegis128x4_implementation aegis128x4_avx512_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#ifdef __clang__ +#pragma clang attribute pop +#endif + +#endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_avx512.h b/src/aegis128x4/aegis128x4_avx512.h new file mode 100644 index 0000000..c79044a --- /dev/null +++ b/src/aegis128x4/aegis128x4_avx512.h @@ -0,0 +1,9 @@ +#ifndef aegis128x4_avx512_H +#define aegis128x4_avx512_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x4_implementation aegis128x4_avx512_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h new file mode 100644 index 0000000..d494265 --- /dev/null +++ b/src/aegis128x4/aegis128x4_common.h @@ -0,0 +1,509 @@ +#define RATE 128 + +static void +aegis128x4_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) +{ + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c0_[AES_BLOCK_LENGTH] = { + 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, + 0xe9, 0x79, 0x62, 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, + 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62, 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, + 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62, 0x00, 0x01, 0x01, 0x02, + 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62, + }; + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c1_[AES_BLOCK_LENGTH] = { + 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, + 0xb5, 0x28, 0xdd, 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, + 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd, 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, + 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd, 0xdb, 0x3d, 0x18, 0x55, + 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd, + }; + + const aes_block_t c0 = AES_BLOCK_LOAD(c0_); + const aes_block_t c1 = AES_BLOCK_LOAD(c1_); + uint8_t tmp[4 * 16]; + uint8_t context_bytes[AES_BLOCK_LENGTH]; + aes_block_t context; + aes_block_t k; + aes_block_t n; + int i; + + memcpy(tmp, key, 16); + memcpy(tmp + 16, key, 16); + memcpy(tmp + 32, key, 16); + memcpy(tmp + 48, key, 16); + k = AES_BLOCK_LOAD(tmp); + + memcpy(tmp, nonce, 16); + memcpy(tmp + 16, nonce, 16); + memcpy(tmp + 32, nonce, 16); + memcpy(tmp + 48, nonce, 16); + n = AES_BLOCK_LOAD(tmp); + + memset(context_bytes, 0, sizeof context_bytes); + context_bytes[1 * 16] = 0x01; + context_bytes[2 * 16] = 0x02; + context_bytes[3 * 16] = 0x03; + context = AES_BLOCK_LOAD(context_bytes); + + state[0] = AES_BLOCK_XOR(k, n); + state[1] = c1; + state[2] = c0; + state[3] = c1; + state[4] = AES_BLOCK_XOR(k, n); + state[5] = AES_BLOCK_XOR(k, c0); + state[6] = AES_BLOCK_XOR(k, c1); + state[7] = AES_BLOCK_XOR(k, c0); + for (i = 0; i < 10; i++) { + state[3] = AES_BLOCK_XOR(state[3], context); + state[7] = AES_BLOCK_XOR(state[7], context); + aegis128x4_update(state, n, k); + } +} + +static void +aegis128x4_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state) +{ + uint8_t mac_multi_0[AES_BLOCK_LENGTH]; + uint8_t mac_multi_1[AES_BLOCK_LENGTH]; + aes_block_t tmp; + int i; + + tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3); + tmp = AES_BLOCK_XOR(tmp, state[2]); + + for (i = 0; i < 7; i++) { + aegis128x4_update(state, tmp, tmp); + } + + if (maclen == 16) { + tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(mac_multi_0, tmp); + for (i = 0; i < 16; i++) { + mac[i] = mac_multi_0[i] ^ mac_multi_0[1 * 16 + i] ^ mac_multi_0[2 * 16 + i] ^ + mac_multi_0[3 * 16 + i]; + } + } else if (maclen == 32) { + tmp = AES_BLOCK_XOR(state[3], state[2]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(mac_multi_0, tmp); + for (i = 0; i < 16; i++) { + mac[i] = mac_multi_0[i] ^ mac_multi_0[1 * 16 + i] ^ mac_multi_0[2 * 16 + i] ^ + mac_multi_0[3 * 16 + i]; + } + + tmp = AES_BLOCK_XOR(state[7], state[6]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[5], state[4])); + AES_BLOCK_STORE(mac_multi_1, tmp); + for (i = 0; i < 16; i++) { + mac[i + 16] = mac_multi_1[i] ^ mac_multi_1[1 * 16 + i] ^ mac_multi_1[2 * 16 + i] ^ + mac_multi_1[3 * 16 + i]; + } + } else { + memset(mac, 0, maclen); + } +} + +static inline void +aegis128x4_absorb(const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg0, msg1; + + msg0 = AES_BLOCK_LOAD(src); + msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH); + aegis128x4_update(state, msg0, msg1); +} + +static void +aegis128x4_enc(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg0, msg1; + aes_block_t tmp0, tmp1; + + msg0 = AES_BLOCK_LOAD(src); + msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH); + tmp0 = AES_BLOCK_XOR(msg0, state[6]); + tmp0 = AES_BLOCK_XOR(tmp0, state[1]); + tmp1 = AES_BLOCK_XOR(msg1, state[5]); + tmp1 = AES_BLOCK_XOR(tmp1, state[2]); + tmp0 = AES_BLOCK_XOR(tmp0, AES_BLOCK_AND(state[2], state[3])); + tmp1 = AES_BLOCK_XOR(tmp1, AES_BLOCK_AND(state[6], state[7])); + AES_BLOCK_STORE(dst, tmp0); + AES_BLOCK_STORE(dst + AES_BLOCK_LENGTH, tmp1); + + aegis128x4_update(state, msg0, msg1); +} + +static void +aegis128x4_dec(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg0, msg1; + + msg0 = AES_BLOCK_LOAD(src); + msg1 = AES_BLOCK_LOAD(src + AES_BLOCK_LENGTH); + msg0 = AES_BLOCK_XOR(msg0, state[6]); + msg0 = AES_BLOCK_XOR(msg0, state[1]); + msg1 = AES_BLOCK_XOR(msg1, state[5]); + msg1 = AES_BLOCK_XOR(msg1, state[2]); + msg0 = AES_BLOCK_XOR(msg0, AES_BLOCK_AND(state[2], state[3])); + msg1 = AES_BLOCK_XOR(msg1, AES_BLOCK_AND(state[6], state[7])); + AES_BLOCK_STORE(dst, msg0); + AES_BLOCK_STORE(dst + AES_BLOCK_LENGTH, msg1); + + aegis128x4_update(state, msg0, msg1); +} + +static void +aegis128x4_declast(uint8_t *const dst, const uint8_t *const src, size_t len, + aes_block_t *const state) +{ + uint8_t pad[RATE]; + aes_block_t msg0, msg1; + + memset(pad, 0, sizeof pad); + memcpy(pad, src, len); + + msg0 = AES_BLOCK_LOAD(pad); + msg1 = AES_BLOCK_LOAD(pad + AES_BLOCK_LENGTH); + msg0 = AES_BLOCK_XOR(msg0, state[6]); + msg0 = AES_BLOCK_XOR(msg0, state[1]); + msg1 = AES_BLOCK_XOR(msg1, state[5]); + msg1 = AES_BLOCK_XOR(msg1, state[2]); + msg0 = AES_BLOCK_XOR(msg0, AES_BLOCK_AND(state[2], state[3])); + msg1 = AES_BLOCK_XOR(msg1, AES_BLOCK_AND(state[6], state[7])); + AES_BLOCK_STORE(pad, msg0); + AES_BLOCK_STORE(pad + AES_BLOCK_LENGTH, msg1); + + memset(pad + len, 0, sizeof pad - len); + memcpy(dst, pad, len); + + msg0 = AES_BLOCK_LOAD(pad); + msg1 = AES_BLOCK_LOAD(pad + AES_BLOCK_LENGTH); + + aegis128x4_update(state, msg0, msg1); +} + +static int +encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + aegis128x4_init(k, npub, state); + + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis128x4_absorb(ad + i, state); + } + if (adlen % RATE) { + memset(src, 0, RATE); + memcpy(src, ad + i, adlen % RATE); + aegis128x4_absorb(src, state); + } + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x4_enc(c + i, m + i, state); + } + if (mlen % RATE) { + memset(src, 0, RATE); + memcpy(src, m + i, mlen % RATE); + aegis128x4_enc(dst, src, state); + memcpy(c + i, dst, mlen % RATE); + } + + aegis128x4_mac(mac, maclen, adlen, mlen, state); + + return 0; +} + +static int +decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; + + aegis128x4_init(k, npub, state); + + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis128x4_absorb(ad + i, state); + } + if (adlen % RATE) { + memset(src, 0, RATE); + memcpy(src, ad + i, adlen % RATE); + aegis128x4_absorb(src, state); + } + if (m != NULL) { + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x4_dec(m + i, c + i, state); + } + } else { + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x4_dec(dst, c + i, state); + } + } + if (mlen % RATE) { + if (m != NULL) { + aegis128x4_declast(m + i, c + i, mlen % RATE, state); + } else { + aegis128x4_declast(dst, c + i, mlen % RATE, state); + } + } + + COMPILER_ASSERT(sizeof computed_mac >= 32); + aegis128x4_mac(computed_mac, maclen, adlen, mlen, state); + ret = -1; + if (maclen == 16) { + ret = aegis_verify_16(computed_mac, mac); + } else if (maclen == 32) { + ret = aegis_verify_32(computed_mac, mac); + } + if (ret != 0 && m != NULL) { + memset(m, 0, mlen); + } + return ret; +} + +typedef struct _aegis128x4_state { + aes_block_t state[8]; + uint8_t buf[RATE]; + uint64_t adlen; + uint64_t mlen; + size_t pos; +} _aegis128x4_state; + +static void +state_init(aegis128x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + _aegis128x4_state *const st = + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + + COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); + st->mlen = 0; + st->pos = 0; + + aegis128x4_init(k, npub, st->state); + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis128x4_absorb(ad + i, st->state); + } + if (adlen % RATE) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen % RATE); + aegis128x4_absorb(st->buf, st->state); + } + st->adlen = adlen; +} + +static int +state_encrypt_update(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen) +{ + _aegis128x4_state *const st = + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i = 0; + size_t left; + + *written = 0; + st->mlen += mlen; + if (st->pos != 0) { + const size_t available = (sizeof st->buf) - st->pos; + const size_t n = mlen < available ? mlen : available; + + if (n != 0) { + memcpy(st->buf + st->pos, m + i, n); + m += n; + mlen -= n; + st->pos += n; + } + if (st->pos == sizeof st->buf) { + if (clen_max < RATE) { + errno = ERANGE; + return -1; + } + clen_max -= RATE; + aegis128x4_enc(c, st->buf, st->state); + *written += RATE; + c += RATE; + st->pos = 0; + } else { + return 0; + } + } + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { + errno = ERANGE; + return -1; + } + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x4_enc(c + i, m + i, st->state); + } + *written += i; + left = mlen % RATE; + if (left != 0) { + memcpy(st->buf, m + i, left); + st->pos = left; + } + return 0; +} + +static int +state_encrypt_detached_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + uint8_t *mac, size_t maclen) +{ + _aegis128x4_state *const st = + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + + *written = 0; + if (clen_max < st->pos) { + errno = ERANGE; + return -1; + } + if (st->pos != 0) { + memset(src, 0, sizeof src); + memcpy(src, st->buf, st->pos); + aegis128x4_enc(dst, src, st->state); + memcpy(c, dst, st->pos); + } + aegis128x4_mac(mac, maclen, st->adlen, st->mlen, st->state); + + *written = st->pos; + + return 0; +} + +static int +state_encrypt_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen) +{ + _aegis128x4_state *const st = + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + + *written = 0; + if (clen_max < st->pos + maclen) { + errno = ERANGE; + return -1; + } + if (st->pos != 0) { + memset(src, 0, sizeof src); + memcpy(src, st->buf, st->pos); + aegis128x4_enc(dst, src, st->state); + memcpy(c, dst, st->pos); + } + aegis128x4_mac(c + st->pos, maclen, st->adlen, st->mlen, st->state); + + *written = st->pos + maclen; + + return 0; +} + +static int +state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, + const uint8_t *c, size_t clen) +{ + _aegis128x4_state *const st = + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i = 0; + size_t left; + const size_t mlen = clen; + + *written = 0; + st->mlen += mlen; + if (st->pos != 0) { + const size_t available = (sizeof st->buf) - st->pos; + const size_t n = clen < available ? clen : available; + + if (n != 0) { + memcpy(st->buf + st->pos, m + i, n); + c += n; + clen -= n; + st->pos += n; + } + if (st->pos == (sizeof st->buf)) { + if (m != NULL) { + if (mlen_max < RATE) { + errno = ERANGE; + return -1; + } + mlen_max -= RATE; + aegis128x4_dec(m, st->buf, st->state); + } else { + aegis128x4_dec(dst, st->buf, st->state); + } + *written += RATE; + c += RATE; + st->pos = 0; + } else { + return 0; + } + } + if (m != NULL) { + if (mlen_max < (clen % RATE)) { + errno = ERANGE; + return -1; + } + for (i = 0; i + RATE <= clen; i += RATE) { + aegis128x4_dec(m + i, c + i, st->state); + } + } else { + for (i = 0; i + RATE <= clen; i += RATE) { + aegis128x4_dec(dst, c + i, st->state); + } + } + *written += i; + left = mlen % RATE; + if (left) { + memcpy(st->buf, c + i, left); + st->pos = left; + } + return 0; +} + +static int +state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, + const uint8_t *mac, size_t maclen) +{ + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + _aegis128x4_state *const st = + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + int ret; + + *written = 0; + if (mlen_max < st->pos) { + errno = ERANGE; + return -1; + } + if (st->pos != 0) { + if (m != NULL) { + aegis128x4_declast(m, st->buf, st->pos, st->state); + } else { + aegis128x4_declast(dst, st->buf, st->pos, st->state); + } + } + aegis128x4_mac(computed_mac, maclen, st->adlen, st->mlen, st->state); + ret = -1; + if (maclen == 16) { + ret = aegis_verify_16(computed_mac, mac); + } else if (maclen == 32) { + ret = aegis_verify_32(computed_mac, mac); + } + if (ret == 0) { + *written = st->pos; + } else { + memset(m, 0, st->pos); + } + return ret; +} diff --git a/src/aegis128x4/aegis128x4_soft.c b/src/aegis128x4/aegis128x4_soft.c new file mode 100644 index 0000000..906df49 --- /dev/null +++ b/src/aegis128x4/aegis128x4_soft.c @@ -0,0 +1,100 @@ +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "../common/cpu.h" + +#ifndef HAS_HW_AES + +#include "../common/softaes.h" +#include "aegis128x4.h" +#include "aegis128x4_soft.h" + +#define AES_BLOCK_LENGTH 64 + +typedef struct { + SoftAesBlock b0; + SoftAesBlock b1; + SoftAesBlock b2; + SoftAesBlock b3; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_xor(a.b0, b.b0), softaes_block_xor(a.b1, b.b1), + softaes_block_xor(a.b2, b.b2), softaes_block_xor(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_and(a.b0, b.b0), softaes_block_and(a.b1, b.b1), + softaes_block_and(a.b2, b.b2), softaes_block_and(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { softaes_block_load(a), softaes_block_load(a + 16), + softaes_block_load(a + 32), softaes_block_load(a + 48) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const SoftAesBlock t = softaes_block_load64x2(a, b); + return (aes_block_t) { t, t, t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + softaes_block_store(a, b.b0); + softaes_block_store(a + 16, b.b1); + softaes_block_store(a + 32, b.b2); + softaes_block_store(a + 48, b.b3); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_encrypt(a.b0, b.b0), softaes_block_encrypt(a.b1, b.b1), + softaes_block_encrypt(a.b2, b.b2), softaes_block_encrypt(a.b3, b.b3) }; +} + +static inline void +aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_ENC(tmp, state[0]); + + state[0] = AES_BLOCK_XOR(state[0], d1); + state[4] = AES_BLOCK_XOR(state[4], d2); +} + +#include "aegis128x4_common.h" + +struct aegis128x4_implementation aegis128x4_soft_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_soft.h b/src/aegis128x4/aegis128x4_soft.h new file mode 100644 index 0000000..1fe7f9e --- /dev/null +++ b/src/aegis128x4/aegis128x4_soft.h @@ -0,0 +1,9 @@ +#ifndef aegis128x4_soft_H +#define aegis128x4_soft_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x4_implementation aegis128x4_soft_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis128x4/implementations.h b/src/aegis128x4/implementations.h new file mode 100644 index 0000000..dc793ed --- /dev/null +++ b/src/aegis128x4/implementations.h @@ -0,0 +1,29 @@ +#ifndef implementations_H +#define implementations_H + +#include +#include + +#include "aegis128x4.h" + +typedef struct aegis128x4_implementation { + int (*encrypt_detached)(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); + int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + void (*state_init)(aegis128x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + int (*state_encrypt_update)(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen); + int (*state_encrypt_detached_final)(aegis128x4_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen); + int (*state_encrypt_final)(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen); + int (*state_decrypt_detached_update)(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen); + int (*state_decrypt_detached_final)(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen); +} aegis128x4_implementation; + +#endif diff --git a/src/common/common.c b/src/common/common.c index af28c82..0010f9c 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -36,6 +36,7 @@ aegis_verify_32(const uint8_t *x, const uint8_t *y) extern int aegis128l_pick_best_implementation(void); extern int aegis128x2_pick_best_implementation(void); +extern int aegis128x4_pick_best_implementation(void); extern int aegis256_pick_best_implementation(void); int @@ -52,7 +53,7 @@ aegis_init(void) return -1; } if (aegis128l_pick_best_implementation() != 0 || aegis128x2_pick_best_implementation() != 0 || - aegis256_pick_best_implementation() != 0) { + aegis256_pick_best_implementation() != 0 || aegis128x4_pick_best_implementation() != 0) { return -1; } #endif diff --git a/src/include/aegis.h b/src/include/aegis.h index 800bb65..ad60876 100644 --- a/src/include/aegis.h +++ b/src/include/aegis.h @@ -12,6 +12,7 @@ #include "aegis128l.h" #include "aegis128x2.h" +#include "aegis128x4.h" #include "aegis256.h" /* Initialize the AEGIS library. diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h new file mode 100644 index 0000000..c865ee2 --- /dev/null +++ b/src/include/aegis128x4.h @@ -0,0 +1,209 @@ +#ifndef aegis128x4_H +#define aegis128x4_H + +#include +#include + +/* The length of an AEGIS key, in bytes */ +#define aegis128x4_KEYBYTES 16 + +/* The length of an AEGIS nonce, in bytes */ +#define aegis128x4_NPUBBYTES 16 + +/* The minimum length of an AEGIS authentication tag, in bytes */ +#define aegis128x4_ABYTES_MIN 16 + +/* The maximum length of an AEGIS authentication tag, in bytes */ +#define aegis128x4_ABYTES_MAX 32 + +/* + * When using AEGIS in incremental mode, this is the maximum number + * of leftover ciphertext bytes that can be returned at finalization. + */ +#define aegis128x4_TAILBYTES_MAX 127 + +/* An AEGIS state, for incremental updates */ +typedef struct aegis128x4_state { + uint8_t opaque[832]; +} aegis128x4_state; + +/* The length of an AEGIS key, in bytes */ +size_t aegis128x4_keybytes(void); + +/* The length of an AEGIS nonce, in bytes */ +size_t aegis128x4_npubbytes(void); + +/* The minimum length of an AEGIS authentication tag, in bytes */ +size_t aegis128x4_abytes_min(void); + +/* The maximum length of an AEGIS authentication tag, in bytes */ +size_t aegis128x4_abytes_max(void); + +/* + * When using AEGIS in incremental mode, this is the maximum number + * of leftover ciphertext bytes that can be returned at finalization. + */ +size_t aegis128x4_tailbytes_max(void); + +/* + * Encrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext separately. + * + * c: ciphertext output buffer + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * m: plaintext input buffer + * mlen: length of the plaintext + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +int aegis128x4_encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, + size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + +/* + * Decrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext separately. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * Returns 0 if the ciphertext is authentic, -1 otherwise. + */ +int aegis128x4_decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) __attribute__((warn_unused_result)); + +/* + * Encrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext together. + * + * c: ciphertext output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * m: plaintext input buffer + * mlen: length of the plaintext + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +int aegis128x4_encrypt(uint8_t *c, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k); + +/* + * Decrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext together. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * maclen: length of the authentication tag (16 or 32) + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * Returns 0 if the ciphertext is authentic, -1 otherwise. + */ +int aegis128x4_decrypt(uint8_t *m, const uint8_t *c, size_t clen, size_t maclen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) + __attribute__((warn_unused_result)); + +/* + * Initialize a state for incremental encryption or decryption. + * + * st_: state to initialize + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +void aegis128x4_state_init(aegis128x4_state *st_, const uint8_t *ad, size_t adlen, + const uint8_t *npub, const uint8_t *k); + +/* + * Encrypt a message chunk. + * The same function can be used regardless of whether the tag will be attached or not. + * + * st_: state to update + * c: ciphertext output buffer + * clen_max: length of the ciphertext chunk buffer (must be >= mlen) + * written: number of ciphertext bytes actually written + * m: plaintext input buffer + * mlen: length of the plaintext + * + * Return 0 on success, -1 on failure. + */ +int aegis128x4_state_encrypt_update(aegis128x4_state *st_, uint8_t *c, size_t clen_max, + size_t *written, const uint8_t *m, size_t mlen); + +/* + * Finalize the incremental encryption and generate the authentication tag. + * + * st_: state to finalize + * c: output buffer for the final ciphertext chunk + * clen_max: length of the ciphertext chunk buffer (must be >= remaining bytes) + * written: number of ciphertext bytes actually written + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis128x4_state_encrypt_detached_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen); + +/* + * Finalize the incremental encryption and attach the authentication tag + * to the final ciphertext chunk. + * + * st_: state to finalize + * c: output buffer for the final ciphertext chunk + * clen_max: length of the ciphertext chunk buffer (must be >= remaining bytes+maclen) + * written: number of ciphertext bytes actually written + * maclen: length of the authentication tag to generate (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis128x4_state_encrypt_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, + size_t *written, size_t maclen); + +/* + * Decrypt a message chunk. + * + * The output should never be released to the caller until the tag has been verified. + * + * st_: state to update + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= clen) + * written: number of plaintext bytes actually written + * c: ciphertext chunk input buffer + * clen: length of the ciphertext chunk + * + * Return 0 on success, -1 on failure. + */ +int aegis128x4_state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) + __attribute__((warn_unused_result)); + +/* + * Decrypt the final message chunk and verify the authentication tag. + * + * st_: state to finalize + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) + * written: number of plaintext bytes actually written + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis128x4_state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) + __attribute__((warn_unused_result)); + +#endif diff --git a/src/test/main.zig b/src/test/main.zig index dfb38a9..d293c59 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -340,3 +340,62 @@ test "aegis-128x2 - encrypt_detached oneshot" { } } } + +test "aegis-128x4 - encrypt_detached oneshot" { + try testing.expectEqual(aegis.aegis_init(), 0); + + inline for ([_]usize{ 16, 32 }) |mac_len| { + var msg_buf: [max_msg_len]u8 = undefined; + var msg2_buf: [msg_buf.len]u8 = undefined; + var ad_buf: [max_ad_len]u8 = undefined; + var c_buf: [msg_buf.len]u8 = undefined; + var mac: [mac_len]u8 = undefined; + + random.bytes(&msg_buf); + random.bytes(&ad_buf); + + for (0..iterations) |_| { + const msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); + var msg = msg_buf[0..msg_len]; + var c = c_buf[0..msg_len]; + + const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); + const ad = &ad_buf[0..ad_len]; + + var nonce: [aegis.aegis128x4_NPUBBYTES]u8 = undefined; + random.bytes(&nonce); + var key: [aegis.aegis128x4_KEYBYTES]u8 = undefined; + random.bytes(&key); + + var ret = aegis.aegis128x4_encrypt_detached(c.ptr, &mac, mac_len, msg.ptr, msg.len, ad.ptr, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + + var msg2 = msg2_buf[0..msg_len]; + ret = aegis.aegis128x4_decrypt_detached(msg2.ptr, c.ptr, c.len, &mac, mac_len, ad.ptr, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + try testing.expectEqualSlices(u8, msg, msg2); + } + } +} + +test "aegis-128x4 - test vector" { + const key = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const nonce = [_]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; + const ad = [_]u8{ 1, 2, 3, 4 } ** 2; + const msg = [_]u8{ 4, 5, 6, 7 } ** 30; + var c = [_]u8{0} ** msg.len; + var mac = [_]u8{0} ** 16; + var ret = aegis.aegis128x4_encrypt_detached(&c, &mac, mac.len, &msg, msg.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + + const expected_ciphertext_hex = "9958ad79ff1feea50a27d5dd88728d157a4ce0cd996b9fffb4fde113ef646de46e4c5230174a6268f89f01d557879360a9068d7cb825bb0e8a97ea2e82059f69aa67278fb1ebcb6571526b309d708447c818ffc3d84c9c73b0cca3040bb85b8193fc9a4499e384ae87bfeaa46f514b6330c147c3ddbb6e94"; + try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(c, .lower), expected_ciphertext_hex); + + const expected_tag_hex = "58038e00f6b7e861e2badb160beb71d4"; + try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(mac, .lower), expected_tag_hex); + + var msg2 = [_]u8{0} ** msg.len; + ret = aegis.aegis128x4_decrypt_detached(&msg2, &c, c.len, &mac, mac.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + try std.testing.expectEqualSlices(u8, &msg, &msg2); +} From 6cb4a2624f2e96cf9fa28a375df2d17a2c2ce399 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 22:13:58 +0200 Subject: [PATCH 032/219] Document --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6078f7a..535b66c 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ # libaegis -Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2 and AEGIS-256), with runtime CPU detection. +Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2, AEGIS-128X4 and AEGIS-256), with runtime CPU detection. ## Features - AEGIS-128L with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) - AEGIS-128X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) +- AEGIS-128X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto) - AEGIS-256 with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) - Encryption and decryption with attached and detached tags - Incremental encryption and decryption. From b1dd2e110b52bbd9e0b17a73b20fb14c7b3dc08e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 22:24:40 +0200 Subject: [PATCH 033/219] Don't try to compile AVX512 code on very old gcc compilers --- src/aegis128x4/aegis128x4.c | 2 ++ src/aegis128x4/aegis128x4_avx512.c | 4 ++++ src/aegis128x4/aegis128x4_avx512.h | 2 ++ src/common/common.h | 6 ++++++ 4 files changed, 14 insertions(+) diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index a078cc8..977b96a 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -167,10 +167,12 @@ aegis128x4_pick_best_implementation(void) #endif #if defined(__x86_64__) || defined(__i386__) +#ifdef HAVE_VAESINTRIN_H if (aegis_runtime_has_vaes() && aegis_runtime_has_avx512f()) { implementation = &aegis128x4_avx512_implementation; return 0; } +#endif if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { implementation = &aegis128x4_avx2_implementation; return 0; diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 15315e0..36de683 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -10,6 +10,8 @@ #include "aegis128x4.h" #include "aegis128x4_avx512.h" +#ifdef HAVE_VAESINTRIN_H + #ifdef __clang__ #pragma clang attribute push(__attribute__((target("vaes,avx512f"))), apply_to = function) #elif defined(__GNUC__) @@ -69,4 +71,6 @@ struct aegis128x4_implementation aegis128x4_avx512_implementation = { #pragma clang attribute pop #endif +#endif + #endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_avx512.h b/src/aegis128x4/aegis128x4_avx512.h index c79044a..6cdd2c8 100644 --- a/src/aegis128x4/aegis128x4_avx512.h +++ b/src/aegis128x4/aegis128x4_avx512.h @@ -4,6 +4,8 @@ #include "../common/common.h" #include "implementations.h" +#ifdef HAVE_VAESINTRIN_H extern struct aegis128x4_implementation aegis128x4_avx512_implementation; +#endif #endif \ No newline at end of file diff --git a/src/common/common.h b/src/common/common.h index f44a732..5b9bd84 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -27,6 +27,12 @@ #define HAVE_AVX512FINTRIN_H #define HAVE_TMMINTRIN_H #define HAVE_WMMINTRIN_H +#define HAVE_VAESINTRIN_H +#ifdef __GNUC__ +#if !__has_include() +#undef HAVE_VAESINTRIN_H +#endif +#endif #endif #if defined(__INTEL_COMPILER) || defined(_MSC_VER) From 7029974a96a5ceeea72b350309cbb791222d767d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 22:41:49 +0200 Subject: [PATCH 034/219] HAS_HW_AES tweaks --- src/aegis128x2/aegis128x2.c | 10 +++++++--- src/aegis128x4/aegis128x4.c | 6 ++++-- src/common/cpu.h | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index 7164874..e74b9ef 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -152,30 +152,34 @@ aegis128x2_state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_ return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); } -#ifndef HAS_HW_AES int aegis128x2_pick_best_implementation(void) { +#ifndef HAS_HW_AES implementation = &aegis128x2_soft_implementation; +#endif #if defined(__aarch64__) || defined(_M_ARM64) +#ifndef HAS_HW_AES if (aegis_runtime_has_armcrypto()) { implementation = &aegis128x2_armcrypto_implementation; return 0; } #endif +#endif #if defined(__x86_64__) || defined(__i386__) if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { implementation = &aegis128x2_avx2_implementation; return 0; } +#ifndef HAS_HW_AES if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { implementation = &aegis128x2_aesni_implementation; return 0; } +#endif #endif return 0; /* LCOV_EXCL_LINE */ -} -#endif +} \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index 977b96a..cc76e4a 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -153,18 +153,21 @@ aegis128x4_state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_ return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); } -#ifndef HAS_HW_AES int aegis128x4_pick_best_implementation(void) { +#ifndef HAS_HW_AES implementation = &aegis128x4_soft_implementation; +#endif #if defined(__aarch64__) || defined(_M_ARM64) +#ifndef HAS_HW_AES if (aegis_runtime_has_armcrypto()) { implementation = &aegis128x4_armcrypto_implementation; return 0; } #endif +#endif #if defined(__x86_64__) || defined(__i386__) #ifdef HAVE_VAESINTRIN_H @@ -185,4 +188,3 @@ aegis128x4_pick_best_implementation(void) return 0; /* LCOV_EXCL_LINE */ } -#endif diff --git a/src/common/cpu.h b/src/common/cpu.h index 3986578..efb7376 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -3,7 +3,7 @@ #if defined(__ARM_FEATURE_CRYPTO) && defined(__ARM_FEATURE_AES) && defined(__ARM_NEON) #define HAS_HW_AES -#elif defined(__AES__) && defined(__SSSE3__) +#elif defined(__AES__) && defined(__AVX__) #define HAS_HW_AES #endif @@ -23,4 +23,4 @@ int aegis_runtime_has_aesni(void); int aegis_runtime_has_vaes(void); -#endif \ No newline at end of file +#endif From 95eebda146354611027fc920161cf571fa0e67c3 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 22:47:46 +0200 Subject: [PATCH 035/219] Remove HAS_HW_AES usage as much as possible --- src/aegis128l/aegis128l.c | 6 +++--- src/aegis128x2/aegis128x2.c | 2 -- src/aegis128x4/aegis128x4.c | 2 -- src/aegis256/aegis256.c | 4 ++-- src/common/common.c | 2 -- src/common/cpu.c | 6 +----- 6 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index d7745d6..453a843 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -151,11 +151,12 @@ aegis128l_state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); } -#ifndef HAS_HW_AES int aegis128l_pick_best_implementation(void) { +#ifndef HAS_HW_AES implementation = &aegis128l_soft_implementation; +#endif #if defined(__aarch64__) || defined(_M_ARM64) if (aegis_runtime_has_armcrypto()) { @@ -172,5 +173,4 @@ aegis128l_pick_best_implementation(void) #endif return 0; /* LCOV_EXCL_LINE */ -} -#endif +} \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index e74b9ef..b43f79c 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -173,12 +173,10 @@ aegis128x2_pick_best_implementation(void) implementation = &aegis128x2_avx2_implementation; return 0; } -#ifndef HAS_HW_AES if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { implementation = &aegis128x2_aesni_implementation; return 0; } -#endif #endif return 0; /* LCOV_EXCL_LINE */ diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index cc76e4a..eafc343 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -161,13 +161,11 @@ aegis128x4_pick_best_implementation(void) #endif #if defined(__aarch64__) || defined(_M_ARM64) -#ifndef HAS_HW_AES if (aegis_runtime_has_armcrypto()) { implementation = &aegis128x4_armcrypto_implementation; return 0; } #endif -#endif #if defined(__x86_64__) || defined(__i386__) #ifdef HAVE_VAESINTRIN_H diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index 3644ffd..640edc3 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -151,11 +151,12 @@ aegis256_state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t ml return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); } -#ifndef HAS_HW_AES int aegis256_pick_best_implementation(void) { +#ifndef HAS_HW_AES implementation = &aegis256_soft_implementation; +#endif #if defined(__aarch64__) || defined(_M_ARM64) if (aegis_runtime_has_armcrypto()) { @@ -173,4 +174,3 @@ aegis256_pick_best_implementation(void) return 0; /* LCOV_EXCL_LINE */ } -#endif diff --git a/src/common/common.c b/src/common/common.c index 0010f9c..e50aa7f 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -47,7 +47,6 @@ aegis_init(void) if (initialized) { return 0; } -#ifndef HAS_HW_AES if (aegis_runtime_get_cpu_features() != 0) { errno = ENOSYS; return -1; @@ -56,7 +55,6 @@ aegis_init(void) aegis256_pick_best_implementation() != 0 || aegis128x4_pick_best_implementation() != 0) { return -1; } -#endif initialized = 1; return 0; diff --git a/src/common/cpu.c b/src/common/cpu.c index aa08b24..fdf2b77 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -1,8 +1,6 @@ #include "cpu.h" #include "common.h" -#ifndef HAS_HW_AES - #include #include #include @@ -315,6 +313,4 @@ int aegis_runtime_has_vaes(void) { return _cpu_features.has_vaes; -} - -#endif +} \ No newline at end of file From d5ba9aa0b493fbe9827547730f7799a8cce1a3bb Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 22:52:52 +0200 Subject: [PATCH 036/219] Remove more HAS_HW_AES --- src/aegis128x2/aegis128x2.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index b43f79c..a0aac1c 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -160,13 +160,11 @@ aegis128x2_pick_best_implementation(void) #endif #if defined(__aarch64__) || defined(_M_ARM64) -#ifndef HAS_HW_AES if (aegis_runtime_has_armcrypto()) { implementation = &aegis128x2_armcrypto_implementation; return 0; } #endif -#endif #if defined(__x86_64__) || defined(__i386__) if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { From d7b1189991b9a18d77e58c34911c1cb6443406a5 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 23:01:03 +0200 Subject: [PATCH 037/219] If we can't get the CPU features, that's fine --- src/common/common.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/common/common.c b/src/common/common.c index e50aa7f..a567c32 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -1,4 +1,3 @@ -#include #include #include @@ -48,8 +47,7 @@ aegis_init(void) return 0; } if (aegis_runtime_get_cpu_features() != 0) { - errno = ENOSYS; - return -1; + return 0; } if (aegis128l_pick_best_implementation() != 0 || aegis128x2_pick_best_implementation() != 0 || aegis256_pick_best_implementation() != 0 || aegis128x4_pick_best_implementation() != 0) { From 2c74329c196d11dbfa62977c4851dd40341dce87 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 9 Aug 2023 23:58:17 +0200 Subject: [PATCH 038/219] Add a basic benchmark --- build.zig | 10 +++ src/test/benchmark.zig | 160 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 src/test/benchmark.zig diff --git a/build.zig b/build.zig index 632364c..f9a4c2a 100644 --- a/build.zig +++ b/build.zig @@ -87,4 +87,14 @@ pub fn build(b: *std.Build) void { // This will evaluate the `test` step rather than the default, which is "install". const test_step = b.step("test", "Run library tests"); test_step.dependOn(&run_main_tests.step); + + const benchmark = b.addExecutable(.{ + .name = "benchmark", + .root_source_file = .{ .path = "src/test/benchmark.zig" }, + .target = target, + .optimize = optimize, + }); + benchmark.addIncludePath(.{ .path = "src/include" }); + benchmark.linkLibrary(lib); + b.installArtifact(benchmark); } diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig new file mode 100644 index 0000000..98367a8 --- /dev/null +++ b/src/test/benchmark.zig @@ -0,0 +1,160 @@ +const aegis = @cImport(@cInclude("aegis.h")); +const std = @import("std"); +const mem = std.mem; +const random = std.crypto.random; +const time = std.time; +const Timer = std.time.Timer; + +const msg_len: usize = 16384; +const iterations = 100000; + +fn bench_aegis256() !void { + var key: [aegis.aegis256_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; + var msg: [msg_len]u8 = undefined; + + random.bytes(&key); + random.bytes(&nonce); + random.bytes(&msg); + + var c: [msg_len + aegis.aegis128x4_ABYTES_MIN]u8 = undefined; + var m: [msg_len]u8 = undefined; + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + _ = aegis.aegis256_encrypt( + &c, + aegis.aegis256_ABYTES_MIN, + &msg, + msg.len, + null, + 0, + &nonce, + &key, + ); + m[0] = c[0]; + } + const end = timer.read(); + mem.doNotOptimizeAway(c); + const bits: f128 = @floatFromInt(@as(u128, msg.len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-256\t{d:10.2} Mb/s\n", .{throughput}); +} + +fn bench_aegis128l() !void { + var key: [aegis.aegis128l_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis128l_NPUBBYTES]u8 = undefined; + var msg: [msg_len]u8 = undefined; + + random.bytes(&key); + random.bytes(&nonce); + random.bytes(&msg); + + var c: [msg_len + aegis.aegis128l_ABYTES_MIN]u8 = undefined; + var m: [msg_len]u8 = undefined; + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + _ = aegis.aegis128l_encrypt( + &c, + aegis.aegis128l_ABYTES_MIN, + &msg, + msg.len, + null, + 0, + &nonce, + &key, + ); + m[0] = c[0]; + } + const end = timer.read(); + mem.doNotOptimizeAway(c); + const bits: f128 = @floatFromInt(@as(u128, msg.len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-128L\t{d:10.2} Mb/s\n", .{throughput}); +} + +fn bench_aegis128x2() !void { + var key: [aegis.aegis128x2_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis128x2_NPUBBYTES]u8 = undefined; + var msg: [msg_len]u8 = undefined; + + random.bytes(&key); + random.bytes(&nonce); + random.bytes(&msg); + + var c: [msg_len + aegis.aegis128x2_ABYTES_MIN]u8 = undefined; + var m: [msg_len]u8 = undefined; + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + _ = aegis.aegis128x2_encrypt( + &c, + aegis.aegis128x2_ABYTES_MIN, + &msg, + msg.len, + null, + 0, + &nonce, + &key, + ); + m[0] = c[0]; + } + const end = timer.read(); + mem.doNotOptimizeAway(c); + const bits: f128 = @floatFromInt(@as(u128, msg.len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-128X2\t{d:10.2} Mb/s\n", .{throughput}); +} + +fn bench_aegis128x4() !void { + var key: [aegis.aegis128x4_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis128x4_NPUBBYTES]u8 = undefined; + var msg: [msg_len]u8 = undefined; + + random.bytes(&key); + random.bytes(&nonce); + random.bytes(&msg); + + var c: [msg_len + aegis.aegis128x4_ABYTES_MIN]u8 = undefined; + var m: [msg_len]u8 = undefined; + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + _ = aegis.aegis128x2_encrypt( + &c, + aegis.aegis128x4_ABYTES_MIN, + &msg, + msg.len, + null, + 0, + &nonce, + &key, + ); + m[0] = c[0]; + } + const end = timer.read(); + mem.doNotOptimizeAway(c); + const bits: f128 = @floatFromInt(@as(u128, msg.len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-128X4\t{d:10.2} Mb/s\n", .{throughput}); +} + +pub fn main() !void { + try bench_aegis256(); + try bench_aegis128l(); + try bench_aegis128x2(); + try bench_aegis128x4(); +} From 38f8a3ff48f7bff57dc913851be5fd797584ed2a Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 10 Aug 2023 00:11:25 +0200 Subject: [PATCH 039/219] Do not document NT yet --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index 535b66c..3b0e9c2 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,6 @@ To favor performance over side-channel mitigations on WebAssembly and on devices zig build -Drelease -Dfavor-performance ``` -To avoid caching outputs, add `-Dnon-temporal-stores`: - -```sh -zig build -Drelease -Dnon-temporal-stores -``` - ### Compilation with `cmake`: ```sh @@ -46,8 +40,6 @@ make install To favor performance over side-channel mitigations on WebAssembly and on devices without hardware acceleration, add `-DFAVOR_PERFORMANCE`. -To avoid caching outputs, add `-DNON_TEMPORAL_STORES`. - ### Direct inclusion Copy everything in `src` directly into your project, and compile everything like regular C code. No special configuration is required. From d5d994fdab41b8282370fde4121a9f98e038905a Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 10 Aug 2023 00:23:44 +0200 Subject: [PATCH 040/219] Benchmark in-place --- src/test/benchmark.zig | 74 +++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 45 deletions(-) diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index 98367a8..e9d2553 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -11,33 +11,29 @@ const iterations = 100000; fn bench_aegis256() !void { var key: [aegis.aegis256_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; - var msg: [msg_len]u8 = undefined; + var buf: [msg_len + aegis.aegis128x4_ABYTES_MIN]u8 = undefined; random.bytes(&key); random.bytes(&nonce); - random.bytes(&msg); - - var c: [msg_len + aegis.aegis128x4_ABYTES_MIN]u8 = undefined; - var m: [msg_len]u8 = undefined; + random.bytes(&buf); var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { _ = aegis.aegis256_encrypt( - &c, + &buf, aegis.aegis256_ABYTES_MIN, - &msg, - msg.len, + &buf, + msg_len, null, 0, &nonce, &key, ); - m[0] = c[0]; } const end = timer.read(); - mem.doNotOptimizeAway(c); - const bits: f128 = @floatFromInt(@as(u128, msg.len) * iterations * 8); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); const stdout = std.io.getStdOut().writer(); @@ -47,33 +43,29 @@ fn bench_aegis256() !void { fn bench_aegis128l() !void { var key: [aegis.aegis128l_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis128l_NPUBBYTES]u8 = undefined; - var msg: [msg_len]u8 = undefined; + var buf: [msg_len + aegis.aegis128l_ABYTES_MIN]u8 = undefined; random.bytes(&key); random.bytes(&nonce); - random.bytes(&msg); - - var c: [msg_len + aegis.aegis128l_ABYTES_MIN]u8 = undefined; - var m: [msg_len]u8 = undefined; + random.bytes(&buf); var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { _ = aegis.aegis128l_encrypt( - &c, + &buf, aegis.aegis128l_ABYTES_MIN, - &msg, - msg.len, + &buf, + msg_len, null, 0, &nonce, &key, ); - m[0] = c[0]; } const end = timer.read(); - mem.doNotOptimizeAway(c); - const bits: f128 = @floatFromInt(@as(u128, msg.len) * iterations * 8); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); const stdout = std.io.getStdOut().writer(); @@ -83,33 +75,29 @@ fn bench_aegis128l() !void { fn bench_aegis128x2() !void { var key: [aegis.aegis128x2_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis128x2_NPUBBYTES]u8 = undefined; - var msg: [msg_len]u8 = undefined; + var buf: [msg_len + aegis.aegis128x2_ABYTES_MIN]u8 = undefined; random.bytes(&key); random.bytes(&nonce); - random.bytes(&msg); - - var c: [msg_len + aegis.aegis128x2_ABYTES_MIN]u8 = undefined; - var m: [msg_len]u8 = undefined; + random.bytes(&buf); var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { _ = aegis.aegis128x2_encrypt( - &c, + &buf, aegis.aegis128x2_ABYTES_MIN, - &msg, - msg.len, + &buf, + msg_len, null, 0, &nonce, &key, ); - m[0] = c[0]; } const end = timer.read(); - mem.doNotOptimizeAway(c); - const bits: f128 = @floatFromInt(@as(u128, msg.len) * iterations * 8); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); const stdout = std.io.getStdOut().writer(); @@ -119,33 +107,29 @@ fn bench_aegis128x2() !void { fn bench_aegis128x4() !void { var key: [aegis.aegis128x4_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis128x4_NPUBBYTES]u8 = undefined; - var msg: [msg_len]u8 = undefined; + var buf: [msg_len + aegis.aegis128x4_ABYTES_MIN]u8 = undefined; random.bytes(&key); random.bytes(&nonce); - random.bytes(&msg); - - var c: [msg_len + aegis.aegis128x4_ABYTES_MIN]u8 = undefined; - var m: [msg_len]u8 = undefined; + random.bytes(&buf); var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - _ = aegis.aegis128x2_encrypt( - &c, + _ = aegis.aegis128x4_encrypt( + &buf, aegis.aegis128x4_ABYTES_MIN, - &msg, - msg.len, + &buf, + msg_len, null, 0, &nonce, &key, ); - m[0] = c[0]; } const end = timer.read(); - mem.doNotOptimizeAway(c); - const bits: f128 = @floatFromInt(@as(u128, msg.len) * iterations * 8); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); const stdout = std.io.getStdOut().writer(); From b48103dc967e3a0f70af1073bbebd1d3249e4e86 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 10 Aug 2023 00:33:53 +0200 Subject: [PATCH 041/219] Use Zig 0.11.0 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d7dd6f4..aa2caa0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: - name: Install Zig uses: goto-bus-stop/setup-zig@6fede2f0550d71291c0accf2834b216e69a2d67a with: - version: master + version: 0.11.0 - name: Unit tests run: | From e67e23676979929a54ad7eb0e755786af64f9a9b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 10 Aug 2023 09:49:32 +0200 Subject: [PATCH 042/219] Remove NT --- src/aegis128l/aegis128l_aesni.c | 8 ++------ src/aegis128x2/aegis128x2_aesni.c | 9 --------- src/aegis128x2/aegis128x2_avx2.c | 8 ++------ src/aegis128x4/aegis128x4_aesni.c | 11 ----------- src/aegis128x4/aegis128x4_avx2.c | 9 --------- src/aegis128x4/aegis128x4_avx512.c | 8 ++------ src/aegis256/aegis256_aesni.c | 8 ++------ 7 files changed, 8 insertions(+), 53 deletions(-) diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index e094786..17869e7 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -25,12 +25,8 @@ typedef __m128i aes_block_t; #define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) #define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) #define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B)) -#ifdef NON_TEMPORAL_STORES -#define AES_BLOCK_STORE(A, B) _mm_stream_si128((aes_block_t *) (void *) (A), (B)) -#else -#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) -#endif -#define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) +#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) +#define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) static inline void aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index 5156bee..0bd3d10 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -51,21 +51,12 @@ AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) return (aes_block_t) { t, t }; } -#ifdef NON_TEMPORAL_STORES -static inline void -AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) -{ - _mm_stream_si128((__m128i *) (void *) a, b.b0); - _mm_stream_si128((__m128i *) (void *) (a + 16), b.b1); -} -#else static inline void AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) { _mm_storeu_si128((__m128i *) (void *) a, b.b0); _mm_storeu_si128((__m128i *) (void *) (a + 16), b.b1); } -#endif static inline aes_block_t AES_ENC(const aes_block_t a, const aes_block_t b) diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index e5980fb..307cb79 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -27,12 +27,8 @@ typedef __m256i aes_block_t; _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) #define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) #define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) -#ifdef NON_TEMPORAL_STORES -#define AES_BLOCK_STORE(A, B) _mm256_stream_si256((aes_block_t *) (void *) (A), (B)) -#else -#define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) -#endif -#define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) +#define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) +#define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) static inline void aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c index 663c035..3110483 100644 --- a/src/aegis128x4/aegis128x4_aesni.c +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -57,16 +57,6 @@ AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) return (aes_block_t) { t, t, t, t }; } -#ifdef NON_TEMPORAL_STORES -static inline void -AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) -{ - _mm_stream_si128((__m128i *) (void *) a, b.b0); - _mm_stream_si128((__m128i *) (void *) (a + 16), b.b1); - _mm_stream_si128((__m128i *) (void *) (a + 32), b.b2); - _mm_stream_si128((__m128i *) (void *) (a + 48), b.b3); -} -#else static inline void AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) { @@ -75,7 +65,6 @@ AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) _mm_storeu_si128((__m128i *) (void *) (a + 32), b.b2); _mm_storeu_si128((__m128i *) (void *) (a + 48), b.b3); } -#endif static inline aes_block_t AES_ENC(const aes_block_t a, const aes_block_t b) diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c index e2f7ce1..39c3bb5 100644 --- a/src/aegis128x4/aegis128x4_avx2.c +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -51,21 +51,12 @@ AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) return (aes_block_t) { t, t }; } -#ifdef NON_TEMPORAL_STORES -static inline void -AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) -{ - _mm256_stream_si256((__m256i *) (void *) a, b.b0); - _mm256_stream_si256((__m256i *) (void *) (a + 32), b.b1); -} -#else static inline void AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) { _mm256_storeu_si256((__m256i *) (void *) a, b.b0); _mm256_storeu_si256((__m256i *) (void *) (a + 32), b.b1); } -#endif static inline aes_block_t AES_ENC(const aes_block_t a, const aes_block_t b) diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 36de683..9d58249 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -28,12 +28,8 @@ typedef __m512i aes_block_t; #define AES_BLOCK_LOAD128_BROADCAST(A) _mm512_broadcast_i32x4(_mm_loadu_si128((const void *) (A))) #define AES_BLOCK_LOAD(A) _mm512_loadu_si512((const aes_block_t *) (const void *) (A)) #define AES_BLOCK_LOAD_64x2(A, B) _mm512_broadcast_i32x4(_mm_set_epi64x((A), (B))) -#ifdef NON_TEMPORAL_STORES -#define AES_BLOCK_STORE(A, B) _mm512_stream_si512((aes_block_t *) (void *) (A), (B)) -#else -#define AES_BLOCK_STORE(A, B) _mm512_storeu_si512((aes_block_t *) (void *) (A), (B)) -#endif -#define AES_ENC(A, B) _mm512_aesenc_epi128((A), (B)) +#define AES_BLOCK_STORE(A, B) _mm512_storeu_si512((aes_block_t *) (void *) (A), (B)) +#define AES_ENC(A, B) _mm512_aesenc_epi128((A), (B)) static inline void aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index b777da0..4f5265c 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -25,12 +25,8 @@ typedef __m128i aes_block_t; #define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) #define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) #define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B)) -#ifdef NON_TEMPORAL_STORES -#define AES_BLOCK_STORE(A, B) _mm_stream_si128((aes_block_t *) (void *) (A), (B)) -#else -#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) -#endif -#define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) +#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) +#define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) static inline void aegis256_update(aes_block_t *const state, const aes_block_t d) From 9e1e4ef57fb8d84d44c2be0651b6b5517e46637c Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 10 Aug 2023 09:49:38 +0200 Subject: [PATCH 043/219] Make benchmark optional --- build.zig | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/build.zig b/build.zig index f9a4c2a..63d830c 100644 --- a/build.zig +++ b/build.zig @@ -21,9 +21,9 @@ pub fn build(b: *std.Build) void { lib.defineCMacro("FAVOR_PERFORMANCE", "1"); } - const non_temporal_stores: bool = b.option(bool, "non-temporal-stores", "Use non-temporal stores") orelse false; - lib_options.addOption(bool, "non_temporal_stores", non_temporal_stores); - if (non_temporal_stores) { + const with_benchmark: bool = b.option(bool, "with-benchmark", "Compile benchmark") orelse false; + lib_options.addOption(bool, "non_temporal_stores", with_benchmark); + if (with_benchmark) { lib.defineCMacro("NON_TEMPORAL_STORES", "1"); } @@ -88,13 +88,15 @@ pub fn build(b: *std.Build) void { const test_step = b.step("test", "Run library tests"); test_step.dependOn(&run_main_tests.step); - const benchmark = b.addExecutable(.{ - .name = "benchmark", - .root_source_file = .{ .path = "src/test/benchmark.zig" }, - .target = target, - .optimize = optimize, - }); - benchmark.addIncludePath(.{ .path = "src/include" }); - benchmark.linkLibrary(lib); - b.installArtifact(benchmark); + if (with_benchmark) { + const benchmark = b.addExecutable(.{ + .name = "benchmark", + .root_source_file = .{ .path = "src/test/benchmark.zig" }, + .target = target, + .optimize = optimize, + }); + benchmark.addIncludePath(.{ .path = "src/include" }); + benchmark.linkLibrary(lib); + b.installArtifact(benchmark); + } } From d77e73d51dc93178764f6bd15ac4adfcc4ac1e4e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 10 Aug 2023 09:50:12 +0200 Subject: [PATCH 044/219] Add clang-format, ignore .vscode --- .clang-format | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++ .gitignore | 2 + 2 files changed, 167 insertions(+) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..91fa8f2 --- /dev/null +++ b/.clang-format @@ -0,0 +1,165 @@ +--- +Language: Cpp +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveMacros: true +AlignConsecutiveAssignments: true +AlignConsecutiveBitFields: true +AlignConsecutiveDeclarations: true +AlignEscapedNewlines: true +AlignOperands: true +AlignTrailingComments: false +AllowAllArgumentsOnNextLine: true +AllowAllConstructorInitializersOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortEnumsOnASingleLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: false +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: TopLevelDefinitions +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: MultiLine +AttributeMacros: + - __capability +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeConceptDeclarations: true +BreakBeforeBraces: WebKit +BreakBeforeInheritanceComma: true +BreakInheritanceList: BeforeColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeComma +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 100 +CommentPragmas: "^ IWYU pragma:" +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DeriveLineEnding: true +DerivePointerAlignment: true +DisableFormat: false +EmptyLineBeforeAccessModifier: LogicalBlock +ExperimentalAutoDetectBinPacking: true +FixNamespaceComments: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +StatementAttributeLikeMacros: + - Q_EMIT +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + CaseSensitive: false + - Regex: ".*" + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IncludeIsMainRegex: "(Test)?$" +IncludeIsMainSourceRegex: "" +IndentCaseLabels: false +IndentCaseBlocks: false +IndentGotoLabels: true +IndentPPDirectives: None +IndentExternBlock: AfterExternBlock +IndentRequires: false +IndentWidth: 4 +IndentWrappedFunctionNames: false +InsertTrailingCommas: None +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: "" +MacroBlockEnd: "" +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: Inner +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 4 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PenaltyIndentedWhitespace: 0 +PointerAlignment: Left +ReflowComments: true +SortIncludes: true +SortJavaStaticImport: Before +SortUsingDeclarations: true +SpaceAfterCStyleCast: true +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceAroundPointerQualifiers: Default +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyBlock: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInConditionalStatement: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpaceBeforeSquareBrackets: false +BitFieldColonSpacing: Both +Standard: Latest +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 4 +UseCRLF: false +UseTab: Never +WhitespaceSensitiveMacros: + - STRINGIZE + - PP_STRINGIZE + - BOOST_PP_STRINGIZE + - NS_SWIFT_NAME + - CF_SWIFT_NAME +--- + diff --git a/.gitignore b/.gitignore index edaf82b..4a7b522 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,5 @@ zig-out # build dir build + +.vscode From 0028f846d7b40b392ae7d9101c43eab18d593d66 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 23 Aug 2023 00:02:06 +0200 Subject: [PATCH 045/219] Remove WIP APIs --- src/include/aegis128l.h | 34 ---------------------------------- src/include/aegis128x2.h | 34 ---------------------------------- src/include/aegis128x4.h | 34 ---------------------------------- src/include/aegis256.h | 34 ---------------------------------- 4 files changed, 136 deletions(-) diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 7124667..7747724 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -172,38 +172,4 @@ int aegis128l_state_encrypt_detached_final(aegis128l_state *st_, uint8_t *c, siz int aegis128l_state_encrypt_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen); -/* - * Decrypt a message chunk. - * - * The output should never be released to the caller until the tag has been verified. - * - * st_: state to update - * m: plaintext output buffer - * mlen_max: length of the plaintext chunk buffer (must be >= clen) - * written: number of plaintext bytes actually written - * c: ciphertext chunk input buffer - * clen: length of the ciphertext chunk - * - * Return 0 on success, -1 on failure. - */ -int aegis128l_state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, - size_t *written, const uint8_t *c, size_t clen) - __attribute__((warn_unused_result)); - -/* - * Decrypt the final message chunk and verify the authentication tag. - * - * st_: state to finalize - * m: plaintext output buffer - * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) - * written: number of plaintext bytes actually written - * mac: authentication tag input buffer - * maclen: length of the authentication tag (16 or 32) - * - * Return 0 on success, -1 on failure. - */ -int aegis128l_state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, - size_t *written, const uint8_t *mac, size_t maclen) - __attribute__((warn_unused_result)); - #endif \ No newline at end of file diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 46be627..3b76388 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -172,38 +172,4 @@ int aegis128x2_state_encrypt_detached_final(aegis128x2_state *st_, uint8_t *c, s int aegis128x2_state_encrypt_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen); -/* - * Decrypt a message chunk. - * - * The output should never be released to the caller until the tag has been verified. - * - * st_: state to update - * m: plaintext output buffer - * mlen_max: length of the plaintext chunk buffer (must be >= clen) - * written: number of plaintext bytes actually written - * c: ciphertext chunk input buffer - * clen: length of the ciphertext chunk - * - * Return 0 on success, -1 on failure. - */ -int aegis128x2_state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, - size_t *written, const uint8_t *c, size_t clen) - __attribute__((warn_unused_result)); - -/* - * Decrypt the final message chunk and verify the authentication tag. - * - * st_: state to finalize - * m: plaintext output buffer - * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) - * written: number of plaintext bytes actually written - * mac: authentication tag input buffer - * maclen: length of the authentication tag (16 or 32) - * - * Return 0 on success, -1 on failure. - */ -int aegis128x2_state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, - size_t *written, const uint8_t *mac, size_t maclen) - __attribute__((warn_unused_result)); - #endif diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index c865ee2..eff154d 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -172,38 +172,4 @@ int aegis128x4_state_encrypt_detached_final(aegis128x4_state *st_, uint8_t *c, s int aegis128x4_state_encrypt_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen); -/* - * Decrypt a message chunk. - * - * The output should never be released to the caller until the tag has been verified. - * - * st_: state to update - * m: plaintext output buffer - * mlen_max: length of the plaintext chunk buffer (must be >= clen) - * written: number of plaintext bytes actually written - * c: ciphertext chunk input buffer - * clen: length of the ciphertext chunk - * - * Return 0 on success, -1 on failure. - */ -int aegis128x4_state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, - size_t *written, const uint8_t *c, size_t clen) - __attribute__((warn_unused_result)); - -/* - * Decrypt the final message chunk and verify the authentication tag. - * - * st_: state to finalize - * m: plaintext output buffer - * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) - * written: number of plaintext bytes actually written - * mac: authentication tag input buffer - * maclen: length of the authentication tag (16 or 32) - * - * Return 0 on success, -1 on failure. - */ -int aegis128x4_state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, - size_t *written, const uint8_t *mac, size_t maclen) - __attribute__((warn_unused_result)); - #endif diff --git a/src/include/aegis256.h b/src/include/aegis256.h index e14118e..a8f9b21 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -172,38 +172,4 @@ int aegis256_state_encrypt_detached_final(aegis256_state *st_, uint8_t *c, size_ int aegis256_state_encrypt_final(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen); -/* - * Decrypt a message chunk. - * - * The output should never be released to the caller until the tag has been verified. - * - * st_: state to update - * m: plaintext output buffer - * mlen_max: length of the plaintext chunk buffer (must be >= clen) - * written: number of plaintext bytes actually written - * c: ciphertext chunk input buffer - * clen: length of the ciphertext chunk - * - * Return 0 on success, -1 on failure. - */ -int aegis256_state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, - size_t *written, const uint8_t *c, size_t clen) - __attribute__((warn_unused_result)); - -/* - * Decrypt the final message chunk and verify the authentication tag. - * - * st_: state to finalize - * m: plaintext output buffer - * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) - * written: number of plaintext bytes actually written - * mac: authentication tag input buffer - * maclen: length of the authentication tag (16 or 32) - * - * Return 0 on success, -1 on failure. - */ -int aegis256_state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, - size_t *written, const uint8_t *mac, size_t maclen) - __attribute__((warn_unused_result)); - #endif \ No newline at end of file From 1ce38abca48c6c3db749c409bcc5ec2d55229945 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 23 Aug 2023 00:02:20 +0200 Subject: [PATCH 046/219] Revert "Remove WIP APIs" This reverts commit 0028f846d7b40b392ae7d9101c43eab18d593d66. --- src/include/aegis128l.h | 34 ++++++++++++++++++++++++++++++++++ src/include/aegis128x2.h | 34 ++++++++++++++++++++++++++++++++++ src/include/aegis128x4.h | 34 ++++++++++++++++++++++++++++++++++ src/include/aegis256.h | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 136 insertions(+) diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 7747724..7124667 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -172,4 +172,38 @@ int aegis128l_state_encrypt_detached_final(aegis128l_state *st_, uint8_t *c, siz int aegis128l_state_encrypt_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen); +/* + * Decrypt a message chunk. + * + * The output should never be released to the caller until the tag has been verified. + * + * st_: state to update + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= clen) + * written: number of plaintext bytes actually written + * c: ciphertext chunk input buffer + * clen: length of the ciphertext chunk + * + * Return 0 on success, -1 on failure. + */ +int aegis128l_state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) + __attribute__((warn_unused_result)); + +/* + * Decrypt the final message chunk and verify the authentication tag. + * + * st_: state to finalize + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) + * written: number of plaintext bytes actually written + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis128l_state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) + __attribute__((warn_unused_result)); + #endif \ No newline at end of file diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 3b76388..46be627 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -172,4 +172,38 @@ int aegis128x2_state_encrypt_detached_final(aegis128x2_state *st_, uint8_t *c, s int aegis128x2_state_encrypt_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen); +/* + * Decrypt a message chunk. + * + * The output should never be released to the caller until the tag has been verified. + * + * st_: state to update + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= clen) + * written: number of plaintext bytes actually written + * c: ciphertext chunk input buffer + * clen: length of the ciphertext chunk + * + * Return 0 on success, -1 on failure. + */ +int aegis128x2_state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) + __attribute__((warn_unused_result)); + +/* + * Decrypt the final message chunk and verify the authentication tag. + * + * st_: state to finalize + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) + * written: number of plaintext bytes actually written + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis128x2_state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) + __attribute__((warn_unused_result)); + #endif diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index eff154d..c865ee2 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -172,4 +172,38 @@ int aegis128x4_state_encrypt_detached_final(aegis128x4_state *st_, uint8_t *c, s int aegis128x4_state_encrypt_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen); +/* + * Decrypt a message chunk. + * + * The output should never be released to the caller until the tag has been verified. + * + * st_: state to update + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= clen) + * written: number of plaintext bytes actually written + * c: ciphertext chunk input buffer + * clen: length of the ciphertext chunk + * + * Return 0 on success, -1 on failure. + */ +int aegis128x4_state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) + __attribute__((warn_unused_result)); + +/* + * Decrypt the final message chunk and verify the authentication tag. + * + * st_: state to finalize + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) + * written: number of plaintext bytes actually written + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis128x4_state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) + __attribute__((warn_unused_result)); + #endif diff --git a/src/include/aegis256.h b/src/include/aegis256.h index a8f9b21..e14118e 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -172,4 +172,38 @@ int aegis256_state_encrypt_detached_final(aegis256_state *st_, uint8_t *c, size_ int aegis256_state_encrypt_final(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen); +/* + * Decrypt a message chunk. + * + * The output should never be released to the caller until the tag has been verified. + * + * st_: state to update + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= clen) + * written: number of plaintext bytes actually written + * c: ciphertext chunk input buffer + * clen: length of the ciphertext chunk + * + * Return 0 on success, -1 on failure. + */ +int aegis256_state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) + __attribute__((warn_unused_result)); + +/* + * Decrypt the final message chunk and verify the authentication tag. + * + * st_: state to finalize + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) + * written: number of plaintext bytes actually written + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis256_state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) + __attribute__((warn_unused_result)); + #endif \ No newline at end of file From 9738e7766d15073e48b514144569903f926bf60c Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 23 Aug 2023 01:12:56 +0200 Subject: [PATCH 047/219] Fix incremental decryption --- src/aegis128l/aegis128l_common.h | 43 +++++----- src/aegis128x2/aegis128x2_common.h | 44 +++++----- src/aegis128x4/aegis128x4_common.h | 44 +++++----- src/aegis256/aegis256_common.h | 50 ++++++------ src/test/main.zig | 127 +++++++++++++++++++++++++++++ 5 files changed, 215 insertions(+), 93 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 5587c3e..817857e 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -374,37 +374,36 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; size_t i = 0; size_t left; - const size_t mlen = clen; *written = 0; - st->mlen += mlen; + st->mlen += clen; + if (st->pos != 0) { const size_t available = (sizeof st->buf) - st->pos; const size_t n = clen < available ? clen : available; if (n != 0) { - memcpy(st->buf + st->pos, m + i, n); + memcpy(st->buf + st->pos, c, n); c += n; clen -= n; st->pos += n; } - if (st->pos == (sizeof st->buf)) { - if (m != NULL) { - if (mlen_max < RATE) { - errno = ERANGE; - return -1; - } - mlen_max -= RATE; - aegis128l_dec(m, st->buf, st->state); - } else { - aegis128l_dec(dst, st->buf, st->state); + if (st->pos < (sizeof st->buf)) { + return 0; + } + st->pos = 0; + if (m != NULL) { + if (mlen_max < RATE) { + errno = ERANGE; + return -1; } - *written += RATE; - c += RATE; - st->pos = 0; + mlen_max -= RATE; + aegis128l_dec(m, st->buf, st->state); + m += RATE; } else { - return 0; + aegis128l_dec(dst, st->buf, st->state); } + *written += RATE; } if (m != NULL) { if (mlen_max < (clen % RATE)) { @@ -420,7 +419,7 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, } } *written += i; - left = mlen % RATE; + left = clen % RATE; if (left) { memcpy(st->buf, c + i, left); st->pos = left; @@ -439,12 +438,12 @@ state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, int ret; *written = 0; - if (mlen_max < st->pos) { - errno = ERANGE; - return -1; - } if (st->pos != 0) { if (m != NULL) { + if (mlen_max < st->pos) { + errno = ERANGE; + return -1; + } aegis128l_declast(m, st->buf, st->pos, st->state); } else { aegis128l_declast(dst, st->buf, st->pos, st->state); diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 60c7745..a8d808f 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -404,38 +404,38 @@ state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; size_t i = 0; size_t left; - const size_t mlen = clen; *written = 0; - st->mlen += mlen; + st->mlen += clen; + if (st->pos != 0) { const size_t available = (sizeof st->buf) - st->pos; const size_t n = clen < available ? clen : available; if (n != 0) { - memcpy(st->buf + st->pos, m + i, n); + memcpy(st->buf + st->pos, c, n); c += n; clen -= n; st->pos += n; } - if (st->pos == (sizeof st->buf)) { - if (m != NULL) { - if (mlen_max < RATE) { - errno = ERANGE; - return -1; - } - mlen_max -= RATE; - aegis128x2_dec(m, st->buf, st->state); - } else { - aegis128x2_dec(dst, st->buf, st->state); + if (st->pos < (sizeof st->buf)) { + return 0; + } + st->pos = 0; + if (m != NULL) { + if (mlen_max < RATE) { + errno = ERANGE; + return -1; } - *written += RATE; - c += RATE; - st->pos = 0; + mlen_max -= RATE; + aegis128x2_dec(m, st->buf, st->state); + m += RATE; } else { - return 0; + aegis128x2_dec(dst, st->buf, st->state); } + *written += RATE; } + if (m != NULL) { if (mlen_max < (clen % RATE)) { errno = ERANGE; @@ -450,7 +450,7 @@ state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max } } *written += i; - left = mlen % RATE; + left = clen % RATE; if (left) { memcpy(st->buf, c + i, left); st->pos = left; @@ -469,12 +469,12 @@ state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, int ret; *written = 0; - if (mlen_max < st->pos) { - errno = ERANGE; - return -1; - } if (st->pos != 0) { if (m != NULL) { + if (mlen_max < st->pos) { + errno = ERANGE; + return -1; + } aegis128x2_declast(m, st->buf, st->pos, st->state); } else { aegis128x2_declast(dst, st->buf, st->pos, st->state); diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index d494265..6afe061 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -417,38 +417,38 @@ state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; size_t i = 0; size_t left; - const size_t mlen = clen; *written = 0; - st->mlen += mlen; + st->mlen += clen; + if (st->pos != 0) { const size_t available = (sizeof st->buf) - st->pos; const size_t n = clen < available ? clen : available; if (n != 0) { - memcpy(st->buf + st->pos, m + i, n); + memcpy(st->buf + st->pos, c, n); c += n; clen -= n; st->pos += n; } - if (st->pos == (sizeof st->buf)) { - if (m != NULL) { - if (mlen_max < RATE) { - errno = ERANGE; - return -1; - } - mlen_max -= RATE; - aegis128x4_dec(m, st->buf, st->state); - } else { - aegis128x4_dec(dst, st->buf, st->state); + if (st->pos < (sizeof st->buf)) { + return 0; + } + st->pos = 0; + if (m != NULL) { + if (mlen_max < RATE) { + errno = ERANGE; + return -1; } - *written += RATE; - c += RATE; - st->pos = 0; + mlen_max -= RATE; + aegis128x4_dec(m, st->buf, st->state); + m += RATE; } else { - return 0; + aegis128x4_dec(dst, st->buf, st->state); } + *written += RATE; } + if (m != NULL) { if (mlen_max < (clen % RATE)) { errno = ERANGE; @@ -463,7 +463,7 @@ state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max } } *written += i; - left = mlen % RATE; + left = clen % RATE; if (left) { memcpy(st->buf, c + i, left); st->pos = left; @@ -482,12 +482,12 @@ state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, int ret; *written = 0; - if (mlen_max < st->pos) { - errno = ERANGE; - return -1; - } if (st->pos != 0) { if (m != NULL) { + if (mlen_max < st->pos) { + errno = ERANGE; + return -1; + } aegis128x4_declast(m, st->buf, st->pos, st->state); } else { aegis128x4_declast(dst, st->buf, st->pos, st->state); diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 3323b3f..1540564 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -359,42 +359,38 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; size_t i = 0; size_t left; - const size_t mlen = clen; *written = 0; - if (mlen_max < (clen % RATE)) { - errno = ERANGE; - return -1; - } - st->mlen += mlen; + st->mlen += clen; + if (st->pos != 0) { const size_t available = (sizeof st->buf) - st->pos; const size_t n = clen < available ? clen : available; if (n != 0) { - memcpy(st->buf + st->pos, m + i, n); + memcpy(st->buf + st->pos, c, n); c += n; clen -= n; st->pos += n; } - if (st->pos == (sizeof st->buf)) { - if (m != NULL) { - if (mlen_max < RATE) { - errno = ERANGE; - return -1; - } - mlen_max -= RATE; - aegis256_dec(m, st->buf, st->state); - } else { - aegis256_dec(dst, st->buf, st->state); + if (st->pos < (sizeof st->buf)) { + return 0; + } + st->pos = 0; + if (m != NULL) { + if (mlen_max < RATE) { + errno = ERANGE; + return -1; } - *written += RATE; - c += RATE; - st->pos = 0; + mlen_max -= RATE; + aegis256_dec(m, st->buf, st->state); + m += RATE; } else { - return 0; + aegis256_dec(dst, st->buf, st->state); } + *written += RATE; } + if (m != NULL) { if (mlen_max < (clen % RATE)) { errno = ERANGE; @@ -409,7 +405,7 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, } } *written += i; - left = mlen % RATE; + left = clen % RATE; if (left) { memcpy(st->buf, c + i, left); st->pos = left; @@ -421,19 +417,19 @@ static int state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { - CRYPTO_ALIGN(RATE) uint8_t computed_mac[32]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); int ret; *written = 0; - if (mlen_max < st->pos) { - errno = ERANGE; - return -1; - } if (st->pos != 0) { if (m != NULL) { + if (mlen_max < st->pos) { + errno = ERANGE; + return -1; + } aegis256_declast(m, st->buf, st->pos, st->state); } else { aegis256_declast(dst, st->buf, st->pos, st->state); diff --git a/src/test/main.zig b/src/test/main.zig index d293c59..d4cad5f 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -282,6 +282,133 @@ test "aegis-256 - incremental encryption 2" { try testing.expectEqualSlices(u8, &msg, &msg2); } +test "aegis-128l - incremental decryption" { + try testing.expectEqual(aegis.aegis_init(), 0); + + const mac_len: usize = 16; + var msg_buf: [max_msg_len]u8 = undefined; + var msg2_buf: [msg_buf.len]u8 = undefined; + var ad_buf: [max_ad_len]u8 = undefined; + var c_buf: [msg_buf.len]u8 = undefined; + var mac: [mac_len]u8 = undefined; + + random.bytes(&ad_buf); + + var msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); + msg_len = 32; + + for (&msg_buf, 0..) |*m, i| { + m.* = @truncate(i); + } + + var msg = msg_buf[0..msg_len]; + var c = c_buf[0..msg_len]; + + const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); + const ad = ad_buf[0..ad_len]; + + var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; + random.bytes(&nonce); + var key: [aegis.aegis256_KEYBYTES]u8 = undefined; + random.bytes(&key); + + var ret = aegis.aegis128l_encrypt_detached(c.ptr, &mac, mac_len, msg.ptr, msg.len, ad.ptr, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + + var st: aegis.aegis128l_state = undefined; + var written: usize = undefined; + + const c0 = c[0 .. c.len / 3]; + const c1 = c[c.len / 3 .. 2 * c.len / 3]; + const c2 = c[2 * c.len / 3 ..]; + + var mx = msg2_buf[0..c.len]; + + aegis.aegis128l_state_init(&st, ad.ptr, ad.len, &nonce, &key); + + ret = aegis.aegis128l_state_decrypt_detached_update(&st, mx.ptr, mx.len, &written, c0.ptr, c0.len); + try testing.expectEqual(ret, 0); + mx = mx[written..]; + + ret = aegis.aegis128l_state_decrypt_detached_update(&st, mx.ptr, mx.len, &written, c1.ptr, c1.len); + try testing.expectEqual(ret, 0); + mx = mx[written..]; + + ret = aegis.aegis128l_state_decrypt_detached_update(&st, mx.ptr, mx.len, &written, c2.ptr, c2.len); + try testing.expectEqual(ret, 0); + mx = mx[written..]; + + ret = aegis.aegis128l_state_decrypt_detached_final(&st, mx.ptr, mx.len, &written, &mac, mac.len); + try testing.expectEqual(ret, 0); + mx = mx[written..]; + + try testing.expectEqual(mx.len, 0); + try testing.expectEqualSlices(u8, msg, msg2_buf[0..msg.len]); +} + +test "aegis-256 - incremental decryption" { + try testing.expectEqual(aegis.aegis_init(), 0); + + const mac_len: usize = 16; + var msg_buf: [max_msg_len]u8 = undefined; + var msg2_buf: [msg_buf.len]u8 = undefined; + var ad_buf: [max_ad_len]u8 = undefined; + var c_buf: [msg_buf.len]u8 = undefined; + var mac: [mac_len]u8 = undefined; + + random.bytes(&ad_buf); + + var msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); + + for (&msg_buf, 0..) |*m, i| { + m.* = @truncate(i); + } + + var msg = msg_buf[0..msg_len]; + var c = c_buf[0..msg_len]; + + const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); + const ad = ad_buf[0..ad_len]; + + var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; + random.bytes(&nonce); + var key: [aegis.aegis256_KEYBYTES]u8 = undefined; + random.bytes(&key); + + var ret = aegis.aegis256_encrypt_detached(c.ptr, &mac, mac_len, msg.ptr, msg.len, ad.ptr, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + + var st: aegis.aegis256_state = undefined; + var written: usize = undefined; + + const c0 = c[0 .. c.len / 3]; + const c1 = c[c.len / 3 .. 2 * c.len / 3]; + const c2 = c[2 * c.len / 3 ..]; + + var mx = msg2_buf[0..c.len]; + + aegis.aegis256_state_init(&st, ad.ptr, ad.len, &nonce, &key); + + ret = aegis.aegis256_state_decrypt_detached_update(&st, mx.ptr, mx.len, &written, c0.ptr, c0.len); + try testing.expectEqual(ret, 0); + mx = mx[written..]; + + ret = aegis.aegis256_state_decrypt_detached_update(&st, mx.ptr, mx.len, &written, c1.ptr, c1.len); + try testing.expectEqual(ret, 0); + mx = mx[written..]; + + ret = aegis.aegis256_state_decrypt_detached_update(&st, mx.ptr, mx.len, &written, c2.ptr, c2.len); + try testing.expectEqual(ret, 0); + mx = mx[written..]; + + ret = aegis.aegis256_state_decrypt_detached_final(&st, mx.ptr, mx.len, &written, &mac, mac.len); + try testing.expectEqual(ret, 0); + mx = mx[written..]; + + try testing.expectEqual(mx.len, 0); + try testing.expectEqualSlices(u8, msg, msg2_buf[0..msg.len]); +} + test "aegis-128x2 - test vector" { const key = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; const nonce = [_]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; From 14d91a04494a3847580763abcef346850111411f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 23 Aug 2023 22:18:58 +0200 Subject: [PATCH 048/219] Manually define __ARM_FEATURE_AES (necessary for CheriOS) --- src/aegis128l/aegis128l_armcrypto.c | 4 ++++ src/aegis128x2/aegis128x2_armcrypto.c | 4 ++++ src/aegis128x4/aegis128x4_armcrypto.c | 4 ++++ src/aegis256/aegis256_armcrypto.c | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index 7e07198..d4b43e6 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -16,6 +16,10 @@ #pragma GCC target("neon,crypto,aes") #endif +#ifndef __ARM_FEATURE_AES +#define __ARM_FEATURE_AES 1 +#endif + #include #define AES_BLOCK_LENGTH 16 diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 65231f0..19ca21c 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -16,6 +16,10 @@ #pragma GCC target("neon,crypto,aes") #endif +#ifndef __ARM_FEATURE_AES +#define __ARM_FEATURE_AES 1 +#endif + #include #define AES_BLOCK_LENGTH 32 diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index 439716b..5d1e384 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -16,6 +16,10 @@ #pragma GCC target("neon,crypto,aes") #endif +#ifndef __ARM_FEATURE_AES +#define __ARM_FEATURE_AES 1 +#endif + #include #define AES_BLOCK_LENGTH 64 diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index 9cbf8da..3399f93 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -16,6 +16,10 @@ #pragma GCC target("neon,crypto,aes") #endif +#ifndef __ARM_FEATURE_AES +#define __ARM_FEATURE_AES 1 +#endif + #include #define AES_BLOCK_LENGTH 16 From e9332054c4c7906556d28f4944438292e3ded28f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 27 Aug 2023 23:02:53 +0200 Subject: [PATCH 049/219] Shrink aegis256_TAILBYTES_MAX --- src/include/aegis256.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/include/aegis256.h b/src/include/aegis256.h index e14118e..740a94f 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -20,7 +20,7 @@ * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. */ -#define aegis256_TAILBYTES_MAX 31 +#define aegis256_TAILBYTES_MAX 15 /* An AEGIS state, for incremental updates */ typedef struct aegis256_state { @@ -206,4 +206,4 @@ int aegis256_state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_ size_t *written, const uint8_t *mac, size_t maclen) __attribute__((warn_unused_result)); -#endif \ No newline at end of file +#endif From c1140bd6e52b1887d2208c4fa494ece6ae985f12 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 28 Aug 2023 00:04:33 +0200 Subject: [PATCH 050/219] Add AEGIS-256X2 --- CMakeLists.txt | 2 +- README.md | 3 +- build.zig | 6 + src/aegis256x2/aegis256x2.c | 181 ++++++++++ src/aegis256x2/aegis256x2_aesni.c | 98 +++++ src/aegis256x2/aegis256x2_aesni.h | 9 + src/aegis256x2/aegis256x2_armcrypto.c | 101 ++++++ src/aegis256x2/aegis256x2_armcrypto.h | 9 + src/aegis256x2/aegis256x2_avx2.c | 64 ++++ src/aegis256x2/aegis256x2_avx2.h | 9 + src/aegis256x2/aegis256x2_common.h | 497 ++++++++++++++++++++++++++ src/aegis256x2/aegis256x2_soft.c | 87 +++++ src/aegis256x2/aegis256x2_soft.h | 9 + src/aegis256x2/implementations.h | 29 ++ src/common/common.c | 4 +- src/include/aegis.h | 3 +- src/include/aegis256x2.h | 209 +++++++++++ src/test/main.zig | 22 ++ 18 files changed, 1338 insertions(+), 4 deletions(-) create mode 100644 src/aegis256x2/aegis256x2.c create mode 100644 src/aegis256x2/aegis256x2_aesni.c create mode 100644 src/aegis256x2/aegis256x2_aesni.h create mode 100644 src/aegis256x2/aegis256x2_armcrypto.c create mode 100644 src/aegis256x2/aegis256x2_armcrypto.h create mode 100644 src/aegis256x2/aegis256x2_avx2.c create mode 100644 src/aegis256x2/aegis256x2_avx2.h create mode 100644 src/aegis256x2/aegis256x2_common.h create mode 100644 src/aegis256x2/aegis256x2_soft.c create mode 100644 src/aegis256x2/aegis256x2_soft.h create mode 100644 src/aegis256x2/implementations.h create mode 100644 src/include/aegis256x2.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 41aef58..8bf81f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ endif() include_directories("src/include") -file(GLOB SOURCE_FILES "src/aegis128l/*.c" "src/aegis128x2/*.c" "src/aegis128x4/*.c" "src/aegis256/*.c" "src/common/*.c") +file(GLOB SOURCE_FILES "src/aegis128l/*.c" "src/aegis128x2/*.c" "src/aegis128x4/*.c" "src/aegis256/*.c" "src/aegis256x2/*.c" "src/common/*.c") file(GLOB HEADER_FILES "src/include/*.h") add_library("${PROJECT_NAME}") diff --git a/README.md b/README.md index 3b0e9c2..5b4faa1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # libaegis -Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2, AEGIS-128X4 and AEGIS-256), with runtime CPU detection. +Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2, AEGIS-128X4, AEGIS-256, AEGIS-256X2), with runtime CPU detection. ## Features @@ -8,6 +8,7 @@ Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2, AEGIS-128X4 and AE - AEGIS-128X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) - AEGIS-128X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto) - AEGIS-256 with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) +- AEGIS-256X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) - Encryption and decryption with attached and detached tags - Incremental encryption and decryption. diff --git a/build.zig b/build.zig index 63d830c..a2f88e0 100644 --- a/build.zig +++ b/build.zig @@ -53,6 +53,12 @@ pub fn build(b: *std.Build) void { "src/aegis256/aegis256_soft.c", "src/aegis256/aegis256.c", + "src/aegis256x2/aegis256x2_aesni.c", + "src/aegis256x2/aegis256x2_avx2.c", + "src/aegis256x2/aegis256x2_armcrypto.c", + "src/aegis256x2/aegis256x2_soft.c", + "src/aegis256x2/aegis256x2.c", + "src/common/common.c", "src/common/cpu.c", "src/common/softaes.c", diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c new file mode 100644 index 0000000..cf1f604 --- /dev/null +++ b/src/aegis256x2/aegis256x2.c @@ -0,0 +1,181 @@ +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "../common/cpu.h" +#include "aegis256x2.h" +#include "aegis256x2_aesni.h" +#include "aegis256x2_armcrypto.h" +#include "aegis256x2_avx2.h" + +#ifndef HAS_HW_AES +#include "aegis256x2_soft.h" +static const aegis256x2_implementation *implementation = &aegis256x2_soft_implementation; +#else +#if defined(__aarch64__) || defined(_M_ARM64) +static const aegis256x2_implementation *implementation = &aegis256x2_armcrypto_implementation; +#elif defined(__x86_64__) || defined(__i386__) +static const aegis256x2_implementation *implementation = &aegis256x2_aesni_implementation; +#else +#error "Unsupported architecture" +#endif +#endif + +size_t +aegis256x2_keybytes(void) +{ + return aegis256x2_KEYBYTES; +} + +size_t +aegis256x2_npubbytes(void) +{ + return aegis256x2_NPUBBYTES; +} + +size_t +aegis256x2_abytes_min(void) +{ + return aegis256x2_ABYTES_MIN; +} + +size_t +aegis256x2_abytes_max(void) +{ + return aegis256x2_ABYTES_MAX; +} + +size_t +aegis256x2_tailbytes_max(void) +{ + return aegis256x2_TAILBYTES_MAX; +} + +int +aegis256x2_encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->encrypt_detached(c, mac, maclen, m, mlen, ad, adlen, npub, k); +} + +int +aegis256x2_decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->decrypt_detached(m, c, clen, mac, maclen, ad, adlen, npub, k); +} + +int +aegis256x2_encrypt(uint8_t *c, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + return aegis256x2_encrypt_detached(c, c + mlen, maclen, m, mlen, ad, adlen, npub, k); +} + +int +aegis256x2_decrypt(uint8_t *m, const uint8_t *c, size_t clen, size_t maclen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + int ret = -1; + + if (clen >= maclen) { + ret = aegis256x2_decrypt_detached(m, c, clen - maclen, c + clen - maclen, maclen, ad, adlen, + npub, k); + } + return ret; +} + +void +aegis256x2_state_init(aegis256x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + memset(st_, 0, sizeof *st_); + implementation->state_init(st_, ad, adlen, npub, k); +} + +int +aegis256x2_state_encrypt_update(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen) +{ + return implementation->state_encrypt_update(st_, c, clen_max, written, m, mlen); +} + +int +aegis256x2_state_encrypt_detached_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_encrypt_detached_final(st_, c, clen_max, written, mac, maclen); +} + +int +aegis256x2_state_encrypt_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_encrypt_final(st_, c, clen_max, written, maclen); +} + +int +aegis256x2_state_decrypt_detached_update(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) +{ + return implementation->state_decrypt_detached_update(st_, m, mlen_max, written, c, clen); +} + +int +aegis256x2_state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); +} + +int +aegis256x2_pick_best_implementation(void) +{ +#ifndef HAS_HW_AES + implementation = &aegis256x2_soft_implementation; +#endif + +#if defined(__aarch64__) || defined(_M_ARM64) + if (aegis_runtime_has_armcrypto()) { + implementation = &aegis256x2_armcrypto_implementation; + return 0; + } +#endif + +#if defined(__x86_64__) || defined(__i386__) + if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { + implementation = &aegis256x2_avx2_implementation; + return 0; + } + if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { + implementation = &aegis256x2_aesni_implementation; + return 0; + } +#endif + + return 0; /* LCOV_EXCL_LINE */ +} \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_aesni.c b/src/aegis256x2/aegis256x2_aesni.c new file mode 100644 index 0000000..fd0bbba --- /dev/null +++ b/src/aegis256x2/aegis256x2_aesni.c @@ -0,0 +1,98 @@ +#if defined(__i386__) || defined(__x86_64__) + +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "aegis256x2.h" +#include "aegis256x2_aesni.h" + +#ifdef __clang__ +#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) +#elif defined(__GNUC__) +#pragma GCC target("aes,avx") +#endif + +#include + +#define AES_BLOCK_LENGTH 32 + +typedef struct { + __m128i b0; + __m128i b1; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_xor_si128(a.b0, b.b0), _mm_xor_si128(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_and_si128(a.b0, b.b0), _mm_and_si128(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { _mm_loadu_si128((const __m128i *) (const void *) a), + _mm_loadu_si128((const __m128i *) (const void *) (a + 16)) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const __m128i t = _mm_set_epi64x((long long) a, (long long) b); + return (aes_block_t) { t, t }; +} + +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + _mm_storeu_si128((__m128i *) (void *) a, b.b0); + _mm_storeu_si128((__m128i *) (void *) (a + 16), b.b1); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_aesenc_si128(a.b0, b.b0), _mm_aesenc_si128(a.b1, b.b1) }; +} + +static inline void +aegis256x2_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +#include "aegis256x2_common.h" + +struct aegis256x2_implementation aegis256x2_aesni_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#ifdef __clang__ +#pragma clang attribute pop +#endif + +#endif diff --git a/src/aegis256x2/aegis256x2_aesni.h b/src/aegis256x2/aegis256x2_aesni.h new file mode 100644 index 0000000..be8f792 --- /dev/null +++ b/src/aegis256x2/aegis256x2_aesni.h @@ -0,0 +1,9 @@ +#ifndef aegis256x2_aesni_H +#define aegis256x2_aesni_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x2_implementation aegis256x2_aesni_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c new file mode 100644 index 0000000..cf4399a --- /dev/null +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -0,0 +1,101 @@ +#if defined(__aarch64__) || defined(_M_ARM64) + +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "aegis256x2.h" +#include "aegis256x2_armcrypto.h" + +#ifdef __clang__ +#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function) +#elif defined(__GNUC__) +#pragma GCC target("neon,crypto,aes") +#endif + +#ifndef __ARM_FEATURE_AES +#define __ARM_FEATURE_AES 1 +#endif + +#include + +#define AES_BLOCK_LENGTH 32 + +typedef struct { + uint8x16_t b0; + uint8x16_t b1; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { veorq_u8(a.b0, b.b0), veorq_u8(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vandq_u8(a.b0, b.b0), vandq_u8(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { vld1q_u8(a), vld1q_u8(a + 16) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const uint8x16_t t = vreinterpretq_u8_u64(vsetq_lane_u64((a), vmovq_n_u64(b), 1)); + return (aes_block_t) { t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + vst1q_u8(a, b.b0); + vst1q_u8(a + 16, b.b1); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8((a.b0), vmovq_n_u8(0))), (b.b0)), + veorq_u8(vaesmcq_u8(vaeseq_u8((a.b1), vmovq_n_u8(0))), (b.b1)) }; +} + +static inline void +aegis256x2_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +#include "aegis256x2_common.h" + +struct aegis256x2_implementation aegis256x2_armcrypto_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#ifdef __clang__ +#pragma clang attribute pop +#endif + +#endif diff --git a/src/aegis256x2/aegis256x2_armcrypto.h b/src/aegis256x2/aegis256x2_armcrypto.h new file mode 100644 index 0000000..181416d --- /dev/null +++ b/src/aegis256x2/aegis256x2_armcrypto.h @@ -0,0 +1,9 @@ +#ifndef aegis256x2_armcrypto_H +#define aegis256x2_armcrypto_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x2_implementation aegis256x2_armcrypto_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c new file mode 100644 index 0000000..cda08e0 --- /dev/null +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -0,0 +1,64 @@ +#if defined(__i386__) || defined(__x86_64__) + +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "aegis256x2.h" +#include "aegis256x2_avx2.h" + +#ifdef __clang__ +#pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +#elif defined(__GNUC__) +#pragma GCC target("vaes,avx2") +#endif + +#include + +#define AES_BLOCK_LENGTH 32 + +typedef __m256i aes_block_t; +#define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) +#define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) +#define AES_BLOCK_LOAD128_BROADCAST(A) \ + _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) +#define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) +#define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) +#define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) +#define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) + +static inline void +aegis256x2_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +#include "aegis256x2_common.h" + +struct aegis256x2_implementation aegis256x2_avx2_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#ifdef __clang__ +#pragma clang attribute pop +#endif + +#endif \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_avx2.h b/src/aegis256x2/aegis256x2_avx2.h new file mode 100644 index 0000000..223095a --- /dev/null +++ b/src/aegis256x2/aegis256x2_avx2.h @@ -0,0 +1,9 @@ +#ifndef aegis256x2_avx2_H +#define aegis256x2_avx2_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x2_implementation aegis256x2_avx2_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h new file mode 100644 index 0000000..e422b49 --- /dev/null +++ b/src/aegis256x2/aegis256x2_common.h @@ -0,0 +1,497 @@ +#define RATE 32 + +static void +aegis256x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) +{ + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c0_[AES_BLOCK_LENGTH] = { + 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, 0x37, + 0x59, 0x90, 0xe9, 0x79, 0x62, 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, + 0x08, 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62, + }; + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c1_[AES_BLOCK_LENGTH] = { + 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, 0x31, + 0x42, 0x73, 0xb5, 0x28, 0xdd, 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, + 0x2f, 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd, + }; + + const aes_block_t c0 = AES_BLOCK_LOAD(c0_); + const aes_block_t c1 = AES_BLOCK_LOAD(c1_); + uint8_t tmp[2 * 16]; + uint8_t context_bytes[AES_BLOCK_LENGTH]; + aes_block_t context; + aes_block_t k0, k1; + aes_block_t n0, n1; + aes_block_t k0_n0, k1_n1; + int i; + + memcpy(tmp, key, 16); + memcpy(tmp + 16, key, 16); + k0 = AES_BLOCK_LOAD(tmp); + memcpy(tmp, key + 16, 16); + memcpy(tmp + 16, key + 16, 16); + k1 = AES_BLOCK_LOAD(tmp); + + memcpy(tmp, nonce, 16); + memcpy(tmp + 16, nonce, 16); + n0 = AES_BLOCK_LOAD(tmp); + memcpy(tmp, nonce + 16, 16); + memcpy(tmp + 16, nonce + 16, 16); + n1 = AES_BLOCK_LOAD(tmp); + + k0_n0 = AES_BLOCK_XOR(k0, n0); + k1_n1 = AES_BLOCK_XOR(k1, n1); + + memset(context_bytes, 0, sizeof context_bytes); + context_bytes[1 * 16] = 0x01; + context = AES_BLOCK_LOAD(context_bytes); + + state[0] = k0_n0; + state[1] = k1_n1; + state[2] = c1; + state[3] = c0; + state[4] = AES_BLOCK_XOR(k0, c0); + state[5] = AES_BLOCK_XOR(k1, c1); + for (i = 0; i < 4; i++) { + state[3] = AES_BLOCK_XOR(state[3], context); + state[5] = AES_BLOCK_XOR(state[5], context); + aegis256x2_update(state, k0); + state[3] = AES_BLOCK_XOR(state[3], context); + state[5] = AES_BLOCK_XOR(state[5], context); + aegis256x2_update(state, k1); + state[3] = AES_BLOCK_XOR(state[3], context); + state[5] = AES_BLOCK_XOR(state[5], context); + aegis256x2_update(state, k0_n0); + state[3] = AES_BLOCK_XOR(state[3], context); + state[5] = AES_BLOCK_XOR(state[5], context); + aegis256x2_update(state, k1_n1); + } +} + +static void +aegis256x2_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state) +{ + uint8_t mac_multi_0[AES_BLOCK_LENGTH]; + uint8_t mac_multi_1[AES_BLOCK_LENGTH]; + aes_block_t tmp; + int i; + + tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3); + tmp = AES_BLOCK_XOR(tmp, state[3]); + + for (i = 0; i < 7; i++) { + aegis256x2_update(state, tmp); + } + + if (maclen == 16) { + tmp = AES_BLOCK_XOR(state[5], state[4]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(mac_multi_0, tmp); + for (i = 0; i < 16; i++) { + mac[i] = mac_multi_0[i] ^ mac_multi_0[1 * 16 + i]; + } + } else if (maclen == 32) { + tmp = AES_BLOCK_XOR(state[2], AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(mac_multi_0, tmp); + for (i = 0; i < 16; i++) { + mac[i] = mac_multi_0[i] ^ mac_multi_0[1 * 16 + i]; + } + + tmp = AES_BLOCK_XOR(state[5], AES_BLOCK_XOR(state[4], state[3])); + AES_BLOCK_STORE(mac_multi_1, tmp); + for (i = 0; i < 16; i++) { + mac[i + 16] = mac_multi_1[i] ^ mac_multi_1[1 * 16 + i]; + } + } else { + memset(mac, 0, maclen); + } +} + +static inline void +aegis256x2_absorb(const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg; + + msg = AES_BLOCK_LOAD(src); + aegis256x2_update(state, msg); +} + +static void +aegis256x2_enc(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg; + aes_block_t tmp; + + msg = AES_BLOCK_LOAD(src); + tmp = AES_BLOCK_XOR(msg, state[5]); + tmp = AES_BLOCK_XOR(tmp, state[4]); + tmp = AES_BLOCK_XOR(tmp, state[1]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_AND(state[2], state[3])); + AES_BLOCK_STORE(dst, tmp); + + aegis256x2_update(state, msg); +} + +static void +aegis256x2_dec(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg; + + msg = AES_BLOCK_LOAD(src); + msg = AES_BLOCK_XOR(msg, state[5]); + msg = AES_BLOCK_XOR(msg, state[4]); + msg = AES_BLOCK_XOR(msg, state[1]); + msg = AES_BLOCK_XOR(msg, AES_BLOCK_AND(state[2], state[3])); + AES_BLOCK_STORE(dst, msg); + + aegis256x2_update(state, msg); +} + +static void +aegis256x2_declast(uint8_t *const dst, const uint8_t *const src, size_t len, + aes_block_t *const state) +{ + uint8_t pad[RATE]; + aes_block_t msg; + + memset(pad, 0, sizeof pad); + memcpy(pad, src, len); + + msg = AES_BLOCK_LOAD(pad); + msg = AES_BLOCK_XOR(msg, state[5]); + msg = AES_BLOCK_XOR(msg, state[4]); + msg = AES_BLOCK_XOR(msg, state[1]); + msg = AES_BLOCK_XOR(msg, AES_BLOCK_AND(state[2], state[3])); + AES_BLOCK_STORE(pad, msg); + + memset(pad + len, 0, sizeof pad - len); + memcpy(dst, pad, len); + + msg = AES_BLOCK_LOAD(pad); + + aegis256x2_update(state, msg); +} + +static int +encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + aegis256x2_init(k, npub, state); + + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis256x2_absorb(ad + i, state); + } + if (adlen % RATE) { + memset(src, 0, RATE); + memcpy(src, ad + i, adlen % RATE); + aegis256x2_absorb(src, state); + } + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x2_enc(c + i, m + i, state); + } + if (mlen % RATE) { + memset(src, 0, RATE); + memcpy(src, m + i, mlen % RATE); + aegis256x2_enc(dst, src, state); + memcpy(c + i, dst, mlen % RATE); + } + + aegis256x2_mac(mac, maclen, adlen, mlen, state); + + return 0; +} + +static int +decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; + + aegis256x2_init(k, npub, state); + + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis256x2_absorb(ad + i, state); + } + if (adlen % RATE) { + memset(src, 0, RATE); + memcpy(src, ad + i, adlen % RATE); + aegis256x2_absorb(src, state); + } + if (m != NULL) { + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x2_dec(m + i, c + i, state); + } + } else { + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x2_dec(dst, c + i, state); + } + } + if (mlen % RATE) { + if (m != NULL) { + aegis256x2_declast(m + i, c + i, mlen % RATE, state); + } else { + aegis256x2_declast(dst, c + i, mlen % RATE, state); + } + } + + COMPILER_ASSERT(sizeof computed_mac >= 32); + aegis256x2_mac(computed_mac, maclen, adlen, mlen, state); + ret = -1; + if (maclen == 16) { + ret = aegis_verify_16(computed_mac, mac); + } else if (maclen == 32) { + ret = aegis_verify_32(computed_mac, mac); + } + if (ret != 0 && m != NULL) { + memset(m, 0, mlen); + } + return ret; +} + +typedef struct _aegis256x2_state { + aes_block_t state[6]; + uint8_t buf[RATE]; + uint64_t adlen; + uint64_t mlen; + size_t pos; +} _aegis256x2_state; + +static void +state_init(aegis256x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + _aegis256x2_state *const st = + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + + COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); + st->mlen = 0; + st->pos = 0; + + aegis256x2_init(k, npub, st->state); + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis256x2_absorb(ad + i, st->state); + } + if (adlen % RATE) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen % RATE); + aegis256x2_absorb(st->buf, st->state); + } + st->adlen = adlen; +} + +static int +state_encrypt_update(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen) +{ + _aegis256x2_state *const st = + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i = 0; + size_t left; + + *written = 0; + st->mlen += mlen; + if (st->pos != 0) { + const size_t available = (sizeof st->buf) - st->pos; + const size_t n = mlen < available ? mlen : available; + + if (n != 0) { + memcpy(st->buf + st->pos, m + i, n); + m += n; + mlen -= n; + st->pos += n; + } + if (st->pos == sizeof st->buf) { + if (clen_max < RATE) { + errno = ERANGE; + return -1; + } + clen_max -= RATE; + aegis256x2_enc(c, st->buf, st->state); + *written += RATE; + c += RATE; + st->pos = 0; + } else { + return 0; + } + } + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { + errno = ERANGE; + return -1; + } + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x2_enc(c + i, m + i, st->state); + } + *written += i; + left = mlen % RATE; + if (left != 0) { + memcpy(st->buf, m + i, left); + st->pos = left; + } + return 0; +} + +static int +state_encrypt_detached_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + uint8_t *mac, size_t maclen) +{ + _aegis256x2_state *const st = + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + + *written = 0; + if (clen_max < st->pos) { + errno = ERANGE; + return -1; + } + if (st->pos != 0) { + memset(src, 0, sizeof src); + memcpy(src, st->buf, st->pos); + aegis256x2_enc(dst, src, st->state); + memcpy(c, dst, st->pos); + } + aegis256x2_mac(mac, maclen, st->adlen, st->mlen, st->state); + + *written = st->pos; + + return 0; +} + +static int +state_encrypt_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen) +{ + _aegis256x2_state *const st = + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + + *written = 0; + if (clen_max < st->pos + maclen) { + errno = ERANGE; + return -1; + } + if (st->pos != 0) { + memset(src, 0, sizeof src); + memcpy(src, st->buf, st->pos); + aegis256x2_enc(dst, src, st->state); + memcpy(c, dst, st->pos); + } + aegis256x2_mac(c + st->pos, maclen, st->adlen, st->mlen, st->state); + + *written = st->pos + maclen; + + return 0; +} + +static int +state_decrypt_detached_update(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, + const uint8_t *c, size_t clen) +{ + _aegis256x2_state *const st = + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i = 0; + size_t left; + + *written = 0; + st->mlen += clen; + + if (st->pos != 0) { + const size_t available = (sizeof st->buf) - st->pos; + const size_t n = clen < available ? clen : available; + + if (n != 0) { + memcpy(st->buf + st->pos, c, n); + c += n; + clen -= n; + st->pos += n; + } + if (st->pos < (sizeof st->buf)) { + return 0; + } + st->pos = 0; + if (m != NULL) { + if (mlen_max < RATE) { + errno = ERANGE; + return -1; + } + mlen_max -= RATE; + aegis256x2_dec(m, st->buf, st->state); + m += RATE; + } else { + aegis256x2_dec(dst, st->buf, st->state); + } + *written += RATE; + } + + if (m != NULL) { + if (mlen_max < (clen % RATE)) { + errno = ERANGE; + return -1; + } + for (i = 0; i + RATE <= clen; i += RATE) { + aegis256x2_dec(m + i, c + i, st->state); + } + } else { + for (i = 0; i + RATE <= clen; i += RATE) { + aegis256x2_dec(dst, c + i, st->state); + } + } + *written += i; + left = clen % RATE; + if (left) { + memcpy(st->buf, c + i, left); + st->pos = left; + } + return 0; +} + +static int +state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, + const uint8_t *mac, size_t maclen) +{ + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + _aegis256x2_state *const st = + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + int ret; + + *written = 0; + if (st->pos != 0) { + if (m != NULL) { + if (mlen_max < st->pos) { + errno = ERANGE; + return -1; + } + aegis256x2_declast(m, st->buf, st->pos, st->state); + } else { + aegis256x2_declast(dst, st->buf, st->pos, st->state); + } + } + aegis256x2_mac(computed_mac, maclen, st->adlen, st->mlen, st->state); + ret = -1; + if (maclen == 16) { + ret = aegis_verify_16(computed_mac, mac); + } else if (maclen == 32) { + ret = aegis_verify_32(computed_mac, mac); + } + if (ret == 0) { + *written = st->pos; + } else { + memset(m, 0, st->pos); + } + return ret; +} diff --git a/src/aegis256x2/aegis256x2_soft.c b/src/aegis256x2/aegis256x2_soft.c new file mode 100644 index 0000000..8f72d10 --- /dev/null +++ b/src/aegis256x2/aegis256x2_soft.c @@ -0,0 +1,87 @@ +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "../common/cpu.h" + +#ifndef HAS_HW_AES + +#include "../common/softaes.h" +#include "aegis256x2.h" +#include "aegis256x2_soft.h" + +#define AES_BLOCK_LENGTH 32 + +typedef struct { + SoftAesBlock b0; + SoftAesBlock b1; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_xor(a.b0, b.b0), softaes_block_xor(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_and(a.b0, b.b0), softaes_block_and(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { softaes_block_load(a), softaes_block_load(a + 16) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const SoftAesBlock t = softaes_block_load64x2(a, b); + return (aes_block_t) { t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + softaes_block_store(a, b.b0); + softaes_block_store(a + 16, b.b1); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_encrypt(a.b0, b.b0), softaes_block_encrypt(a.b1, b.b1) }; +} + +static inline void +aegis256x2_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +#include "aegis256x2_common.h" + +struct aegis256x2_implementation aegis256x2_soft_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#endif \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_soft.h b/src/aegis256x2/aegis256x2_soft.h new file mode 100644 index 0000000..ca21e16 --- /dev/null +++ b/src/aegis256x2/aegis256x2_soft.h @@ -0,0 +1,9 @@ +#ifndef aegis256x2_soft_H +#define aegis256x2_soft_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x2_implementation aegis256x2_soft_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis256x2/implementations.h b/src/aegis256x2/implementations.h new file mode 100644 index 0000000..0da29f9 --- /dev/null +++ b/src/aegis256x2/implementations.h @@ -0,0 +1,29 @@ +#ifndef implementations_H +#define implementations_H + +#include +#include + +#include "aegis256x2.h" + +typedef struct aegis256x2_implementation { + int (*encrypt_detached)(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); + int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + void (*state_init)(aegis256x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + int (*state_encrypt_update)(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen); + int (*state_encrypt_detached_final)(aegis256x2_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen); + int (*state_encrypt_final)(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen); + int (*state_decrypt_detached_update)(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen); + int (*state_decrypt_detached_final)(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen); +} aegis256x2_implementation; + +#endif \ No newline at end of file diff --git a/src/common/common.c b/src/common/common.c index a567c32..3cc135a 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -37,6 +37,7 @@ extern int aegis128l_pick_best_implementation(void); extern int aegis128x2_pick_best_implementation(void); extern int aegis128x4_pick_best_implementation(void); extern int aegis256_pick_best_implementation(void); +extern int aegis256x2_pick_best_implementation(void); int aegis_init(void) @@ -50,7 +51,8 @@ aegis_init(void) return 0; } if (aegis128l_pick_best_implementation() != 0 || aegis128x2_pick_best_implementation() != 0 || - aegis256_pick_best_implementation() != 0 || aegis128x4_pick_best_implementation() != 0) { + aegis128x4_pick_best_implementation() != 0 || aegis256_pick_best_implementation() != 0 || + aegis256x2_pick_best_implementation() != 0) { return -1; } initialized = 1; diff --git a/src/include/aegis.h b/src/include/aegis.h index ad60876..13bb99c 100644 --- a/src/include/aegis.h +++ b/src/include/aegis.h @@ -14,6 +14,7 @@ #include "aegis128x2.h" #include "aegis128x4.h" #include "aegis256.h" +#include "aegis256x2.h" /* Initialize the AEGIS library. * @@ -42,4 +43,4 @@ int aegis_verify_16(const uint8_t *x, const uint8_t *y) __attribute__((warn_unus */ int aegis_verify_32(const uint8_t *x, const uint8_t *y) __attribute__((warn_unused_result)); -#endif \ No newline at end of file +#endif diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h new file mode 100644 index 0000000..30b593c --- /dev/null +++ b/src/include/aegis256x2.h @@ -0,0 +1,209 @@ +#ifndef aegis256x2_H +#define aegis256x2_H + +#include +#include + +/* The length of an AEGIS key, in bytes */ +#define aegis256x2_KEYBYTES 32 + +/* The length of an AEGIS nonce, in bytes */ +#define aegis256x2_NPUBBYTES 32 + +/* The minimum length of an AEGIS authentication tag, in bytes */ +#define aegis256x2_ABYTES_MIN 16 + +/* The maximum length of an AEGIS authentication tag, in bytes */ +#define aegis256x2_ABYTES_MAX 32 + +/* + * When using AEGIS in incremental mode, this is the maximum number + * of leftover ciphertext bytes that can be returned at finalization. + */ +#define aegis256x2_TAILBYTES_MAX 31 + +/* An AEGIS state, for incremental updates */ +typedef struct aegis256x2_state { + uint8_t opaque[320]; +} aegis256x2_state; + +/* The length of an AEGIS key, in bytes */ +size_t aegis256x2_keybytes(void); + +/* The length of an AEGIS nonce, in bytes */ +size_t aegis256x2_npubbytes(void); + +/* The minimum length of an AEGIS authentication tag, in bytes */ +size_t aegis256x2_abytes_min(void); + +/* The maximum length of an AEGIS authentication tag, in bytes */ +size_t aegis256x2_abytes_max(void); + +/* + * When using AEGIS in incremental mode, this is the maximum number + * of leftover ciphertext bytes that can be returned at finalization. + */ +size_t aegis256x2_tailbytes_max(void); + +/* + * Encrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext separately. + * + * c: ciphertext output buffer + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * m: plaintext input buffer + * mlen: length of the plaintext + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +int aegis256x2_encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, + size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + +/* + * Decrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext separately. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + * + * Returns 0 if the ciphertext is authentic, -1 otherwise. + */ +int aegis256x2_decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) __attribute__((warn_unused_result)); + +/* + * Encrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext together. + * + * c: ciphertext output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * m: plaintext input buffer + * mlen: length of the plaintext + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +int aegis256x2_encrypt(uint8_t *c, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k); + +/* + * Decrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext together. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * maclen: length of the authentication tag (16 or 32) + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + * + * Returns 0 if the ciphertext is authentic, -1 otherwise. + */ +int aegis256x2_decrypt(uint8_t *m, const uint8_t *c, size_t clen, size_t maclen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) + __attribute__((warn_unused_result)); + +/* + * Initialize a state for incremental encryption or decryption. + * + * st_: state to initialize + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +void aegis256x2_state_init(aegis256x2_state *st_, const uint8_t *ad, size_t adlen, + const uint8_t *npub, const uint8_t *k); + +/* + * Encrypt a message chunk. + * The same function can be used regardless of whether the tag will be attached or not. + * + * st_: state to update + * c: ciphertext output buffer + * clen_max: length of the ciphertext chunk buffer (must be >= mlen) + * written: number of ciphertext bytes actually written + * m: plaintext input buffer + * mlen: length of the plaintext + * + * Return 0 on success, -1 on failure. + */ +int aegis256x2_state_encrypt_update(aegis256x2_state *st_, uint8_t *c, size_t clen_max, + size_t *written, const uint8_t *m, size_t mlen); + +/* + * Finalize the incremental encryption and generate the authentication tag. + * + * st_: state to finalize + * c: output buffer for the final ciphertext chunk + * clen_max: length of the ciphertext chunk buffer (must be >= remaining bytes) + * written: number of ciphertext bytes actually written + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis256x2_state_encrypt_detached_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen); + +/* + * Finalize the incremental encryption and attach the authentication tag + * to the final ciphertext chunk. + * + * st_: state to finalize + * c: output buffer for the final ciphertext chunk + * clen_max: length of the ciphertext chunk buffer (must be >= remaining bytes+maclen) + * written: number of ciphertext bytes actually written + * maclen: length of the authentication tag to generate (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis256x2_state_encrypt_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, + size_t *written, size_t maclen); + +/* + * Decrypt a message chunk. + * + * The output should never be released to the caller until the tag has been verified. + * + * st_: state to update + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= clen) + * written: number of plaintext bytes actually written + * c: ciphertext chunk input buffer + * clen: length of the ciphertext chunk + * + * Return 0 on success, -1 on failure. + */ +int aegis256x2_state_decrypt_detached_update(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) + __attribute__((warn_unused_result)); + +/* + * Decrypt the final message chunk and verify the authentication tag. + * + * st_: state to finalize + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) + * written: number of plaintext bytes actually written + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis256x2_state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) + __attribute__((warn_unused_result)); + +#endif diff --git a/src/test/main.zig b/src/test/main.zig index d4cad5f..d368680 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -526,3 +526,25 @@ test "aegis-128x4 - test vector" { try testing.expectEqual(ret, 0); try std.testing.expectEqualSlices(u8, &msg, &msg2); } + +test "aegis-256x2 - test vector" { + const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; + const nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; + const ad = [_]u8{ 1, 2, 3, 4 } ** 2; + const msg = [_]u8{ 5, 6, 7, 8 } ** 3; + var c = [_]u8{0} ** msg.len; + var mac = [_]u8{0} ** 16; + var ret = aegis.aegis256x2_encrypt_detached(&c, &mac, mac.len, &msg, msg.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + + const expected_ciphertext_hex = "a0b3f5b6b93db779c9d1b9de"; + try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(c, .lower), expected_ciphertext_hex); + + const expected_tag_hex = "fd2e93a6eb0b74dc30eb984fbec1d657"; + try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(mac, .lower), expected_tag_hex); + + var msg2 = [_]u8{0} ** msg.len; + ret = aegis.aegis256x2_decrypt_detached(&msg2, &c, c.len, &mac, mac.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + try std.testing.expectEqualSlices(u8, &msg, &msg2); +} From 188e86c665744106259fd2782a229289c1f8eb30 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 9 Sep 2023 15:28:18 +0200 Subject: [PATCH 051/219] Rename implementation.h inlude guards --- src/aegis128l/implementations.h | 6 +++--- src/aegis128x2/implementations.h | 6 +++--- src/aegis128x4/implementations.h | 4 ++-- src/aegis256/implementations.h | 6 +++--- src/aegis256x2/implementations.h | 6 +++--- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/aegis128l/implementations.h b/src/aegis128l/implementations.h index 89add01..ec3ba17 100644 --- a/src/aegis128l/implementations.h +++ b/src/aegis128l/implementations.h @@ -1,5 +1,5 @@ -#ifndef implementations_H -#define implementations_H +#ifndef aegis128l_implementations_H +#define aegis128l_implementations_H #include #include @@ -26,4 +26,4 @@ typedef struct aegis128l_implementation { size_t *written, const uint8_t *mac, size_t maclen); } aegis128l_implementation; -#endif \ No newline at end of file +#endif diff --git a/src/aegis128x2/implementations.h b/src/aegis128x2/implementations.h index 7679983..57d2f58 100644 --- a/src/aegis128x2/implementations.h +++ b/src/aegis128x2/implementations.h @@ -1,5 +1,5 @@ -#ifndef implementations_H -#define implementations_H +#ifndef aegis128x2_implementations_H +#define aegis128x2_implementations_H #include #include @@ -26,4 +26,4 @@ typedef struct aegis128x2_implementation { size_t *written, const uint8_t *mac, size_t maclen); } aegis128x2_implementation; -#endif \ No newline at end of file +#endif diff --git a/src/aegis128x4/implementations.h b/src/aegis128x4/implementations.h index dc793ed..b457a9e 100644 --- a/src/aegis128x4/implementations.h +++ b/src/aegis128x4/implementations.h @@ -1,5 +1,5 @@ -#ifndef implementations_H -#define implementations_H +#ifndef aegis128x4_implementations_H +#define aegis128x4_implementations_H #include #include diff --git a/src/aegis256/implementations.h b/src/aegis256/implementations.h index c8cfc6b..986d5e1 100644 --- a/src/aegis256/implementations.h +++ b/src/aegis256/implementations.h @@ -1,5 +1,5 @@ -#ifndef implementations_H -#define implementations_H +#ifndef aegis256_implementations_H +#define aegis256_implementations_H #include #include @@ -29,4 +29,4 @@ typedef struct aegis256_implementation { size_t *written, const uint8_t *mac, size_t maclen); } aegis256_implementation; -#endif \ No newline at end of file +#endif diff --git a/src/aegis256x2/implementations.h b/src/aegis256x2/implementations.h index 0da29f9..28b9106 100644 --- a/src/aegis256x2/implementations.h +++ b/src/aegis256x2/implementations.h @@ -1,5 +1,5 @@ -#ifndef implementations_H -#define implementations_H +#ifndef aegis256x2_implementations_H +#define aegis256x2_implementations_H #include #include @@ -26,4 +26,4 @@ typedef struct aegis256x2_implementation { size_t *written, const uint8_t *mac, size_t maclen); } aegis256x2_implementation; -#endif \ No newline at end of file +#endif From bda0718898e423e34c802eb94b8108e1142772f9 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 9 Sep 2023 15:36:36 +0200 Subject: [PATCH 052/219] Explicitely include --- src/aegis128l/aegis128l_aesni.c | 1 + src/aegis128x2/aegis128x2_aesni.c | 1 + src/aegis128x4/aegis128x4_aesni.c | 1 + src/aegis256/aegis256_aesni.c | 1 + src/aegis256x2/aegis256x2_aesni.c | 1 + 5 files changed, 5 insertions(+) diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index 17869e7..ee78531 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -16,6 +16,7 @@ #pragma GCC target("aes,avx") #endif +#include #include #define AES_BLOCK_LENGTH 16 diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index 0bd3d10..83ca226 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -16,6 +16,7 @@ #pragma GCC target("aes,avx") #endif +#include #include #define AES_BLOCK_LENGTH 32 diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c index 3110483..2e0d144 100644 --- a/src/aegis128x4/aegis128x4_aesni.c +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -16,6 +16,7 @@ #pragma GCC target("aes,avx") #endif +#include #include #define AES_BLOCK_LENGTH 64 diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index 4f5265c..3556136 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -16,6 +16,7 @@ #pragma GCC target("aes,avx") #endif +#include #include #define AES_BLOCK_LENGTH 16 diff --git a/src/aegis256x2/aegis256x2_aesni.c b/src/aegis256x2/aegis256x2_aesni.c index fd0bbba..8303564 100644 --- a/src/aegis256x2/aegis256x2_aesni.c +++ b/src/aegis256x2/aegis256x2_aesni.c @@ -16,6 +16,7 @@ #pragma GCC target("aes,avx") #endif +#include #include #define AES_BLOCK_LENGTH 32 From 54700348ca60974181bba40533e62dac8f9d0f5e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 12 Sep 2023 03:26:09 +0200 Subject: [PATCH 053/219] Indent preprocessor directives --- .clang-format | 2 +- src/aegis128l/aegis128l.c | 12 +++--- src/aegis128l/aegis128l_aesni.c | 52 ++++++++++++------------ src/aegis128l/aegis128l_armcrypto.c | 57 +++++++++++++------------- src/aegis128l/aegis128l_soft.c | 22 +++++----- src/aegis128x2/aegis128x2.c | 12 +++--- src/aegis128x2/aegis128x2_aesni.c | 44 ++++++++++---------- src/aegis128x2/aegis128x2_armcrypto.c | 49 +++++++++++----------- src/aegis128x2/aegis128x2_avx2.c | 54 ++++++++++++------------- src/aegis128x2/aegis128x2_soft.c | 10 ++--- src/aegis128x4/aegis128x4.c | 16 ++++---- src/aegis128x4/aegis128x4_aesni.c | 44 ++++++++++---------- src/aegis128x4/aegis128x4_armcrypto.c | 49 +++++++++++----------- src/aegis128x4/aegis128x4_avx2.c | 42 +++++++++---------- src/aegis128x4/aegis128x4_avx512.c | 58 ++++++++++++++------------- src/aegis128x4/aegis128x4_soft.c | 10 ++--- src/aegis256/aegis256.c | 12 +++--- src/aegis256/aegis256_aesni.c | 56 +++++++++++++------------- src/aegis256/aegis256_armcrypto.c | 57 +++++++++++++------------- src/aegis256/aegis256_soft.c | 22 +++++----- src/aegis256x2/aegis256x2.c | 12 +++--- src/aegis256x2/aegis256x2_aesni.c | 44 ++++++++++---------- src/aegis256x2/aegis256x2_armcrypto.c | 49 +++++++++++----------- src/aegis256x2/aegis256x2_avx2.c | 54 ++++++++++++------------- src/aegis256x2/aegis256x2_soft.c | 10 ++--- src/common/common.c | 2 +- src/common/common.h | 42 +++++++++---------- src/common/cpu.c | 56 +++++++++++++------------- src/common/cpu.h | 4 +- src/common/softaes.c | 10 ++--- src/include/aegis.h | 8 ++-- 31 files changed, 489 insertions(+), 482 deletions(-) diff --git a/.clang-format b/.clang-format index 91fa8f2..1d831c8 100644 --- a/.clang-format +++ b/.clang-format @@ -94,7 +94,7 @@ IncludeIsMainSourceRegex: "" IndentCaseLabels: false IndentCaseBlocks: false IndentGotoLabels: true -IndentPPDirectives: None +IndentPPDirectives: AfterHash IndentExternBlock: AfterExternBlock IndentRequires: false IndentWidth: 4 diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 453a843..0e3e769 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -11,16 +11,16 @@ #include "aegis128l_armcrypto.h" #ifndef HAS_HW_AES -#include "aegis128l_soft.h" +# include "aegis128l_soft.h" static const aegis128l_implementation *implementation = &aegis128l_soft_implementation; #else -#if defined(__aarch64__) || defined(_M_ARM64) +# if defined(__aarch64__) || defined(_M_ARM64) static const aegis128l_implementation *implementation = &aegis128l_armcrypto_implementation; -#elif defined(__x86_64__) || defined(__i386__) +# elif defined(__x86_64__) || defined(__i386__) static const aegis128l_implementation *implementation = &aegis128l_aesni_implementation; -#else -#error "Unsupported architecture" -#endif +# else +# error "Unsupported architecture" +# endif #endif size_t diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index ee78531..8517b8b 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -1,33 +1,33 @@ #if defined(__i386__) || defined(__x86_64__) -#include -#include -#include -#include -#include +# include +# include +# include +# include +# include -#include "../common/common.h" -#include "aegis128l.h" -#include "aegis128l_aesni.h" +# include "../common/common.h" +# include "aegis128l.h" +# include "aegis128l_aesni.h" -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("aes,avx") -#endif +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("aes,avx") +# endif -#include -#include +# include +# include -#define AES_BLOCK_LENGTH 16 +# define AES_BLOCK_LENGTH 16 typedef __m128i aes_block_t; -#define AES_BLOCK_XOR(A, B) _mm_xor_si128((A), (B)) -#define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) -#define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) -#define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B)) -#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) -#define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) +# define AES_BLOCK_XOR(A, B) _mm_xor_si128((A), (B)) +# define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) +# define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) +# define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B)) +# define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) +# define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) static inline void aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) @@ -48,7 +48,7 @@ aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block state[4] = AES_BLOCK_XOR(state[4], d2); } -#include "aegis128l_common.h" +# include "aegis128l_common.h" struct aegis128l_implementation aegis128l_aesni_implementation = { .encrypt_detached = encrypt_detached, @@ -61,8 +61,8 @@ struct aegis128l_implementation aegis128l_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index d4b43e6..f84eacf 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -1,36 +1,37 @@ #if defined(__aarch64__) || defined(_M_ARM64) -#include -#include -#include -#include -#include +# include +# include +# include +# include +# include -#include "../common/common.h" -#include "aegis128l.h" -#include "aegis128l_armcrypto.h" +# include "../common/common.h" +# include "aegis128l.h" +# include "aegis128l_armcrypto.h" -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("neon,crypto,aes") -#endif +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("neon,crypto,aes") +# endif -#ifndef __ARM_FEATURE_AES -#define __ARM_FEATURE_AES 1 -#endif +# ifndef __ARM_FEATURE_AES +# define __ARM_FEATURE_AES 1 +# endif -#include +# include -#define AES_BLOCK_LENGTH 16 +# define AES_BLOCK_LENGTH 16 typedef uint8x16_t aes_block_t; -#define AES_BLOCK_XOR(A, B) veorq_u8((A), (B)) -#define AES_BLOCK_AND(A, B) vandq_u8((A), (B)) -#define AES_BLOCK_LOAD(A) vld1q_u8(A) -#define AES_BLOCK_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1)) -#define AES_BLOCK_STORE(A, B) vst1q_u8((A), (B)) -#define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B)) +# define AES_BLOCK_XOR(A, B) veorq_u8((A), (B)) +# define AES_BLOCK_AND(A, B) vandq_u8((A), (B)) +# define AES_BLOCK_LOAD(A) vld1q_u8(A) +# define AES_BLOCK_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1)) +# define AES_BLOCK_STORE(A, B) vst1q_u8((A), (B)) +# define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B)) static inline void aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) @@ -48,7 +49,7 @@ aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d1); } -#include "aegis128l_common.h" +# include "aegis128l_common.h" struct aegis128l_implementation aegis128l_armcrypto_implementation = { .encrypt_detached = encrypt_detached, @@ -61,8 +62,8 @@ struct aegis128l_implementation aegis128l_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis128l/aegis128l_soft.c b/src/aegis128l/aegis128l_soft.c index 6db1211..65b4ccb 100644 --- a/src/aegis128l/aegis128l_soft.c +++ b/src/aegis128l/aegis128l_soft.c @@ -9,19 +9,19 @@ #ifndef HAS_HW_AES -#include "../common/softaes.h" -#include "aegis128l.h" -#include "aegis128l_soft.h" +# include "../common/softaes.h" +# include "aegis128l.h" +# include "aegis128l_soft.h" -#define AES_BLOCK_LENGTH 16 +# define AES_BLOCK_LENGTH 16 typedef SoftAesBlock aes_block_t; -#define AES_BLOCK_XOR(A, B) softaes_block_xor((A), (B)) -#define AES_BLOCK_AND(A, B) softaes_block_and((A), (B)) -#define AES_BLOCK_LOAD(A) softaes_block_load(A) -#define AES_BLOCK_LOAD_64x2(A, B) softaes_block_load64x2((A), (B)) -#define AES_BLOCK_STORE(A, B) softaes_block_store((A), (B)) -#define AES_ENC(A, B) softaes_block_encrypt((A), (B)) +# define AES_BLOCK_XOR(A, B) softaes_block_xor((A), (B)) +# define AES_BLOCK_AND(A, B) softaes_block_and((A), (B)) +# define AES_BLOCK_LOAD(A) softaes_block_load(A) +# define AES_BLOCK_LOAD_64x2(A, B) softaes_block_load64x2((A), (B)) +# define AES_BLOCK_STORE(A, B) softaes_block_store((A), (B)) +# define AES_ENC(A, B) softaes_block_encrypt((A), (B)) static inline void aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) @@ -42,7 +42,7 @@ aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block state[4] = AES_BLOCK_XOR(state[4], d2); } -#include "aegis128l_common.h" +# include "aegis128l_common.h" struct aegis128l_implementation aegis128l_soft_implementation = { .encrypt_detached = encrypt_detached, diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index a0aac1c..b14c884 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -12,16 +12,16 @@ #include "aegis128x2_avx2.h" #ifndef HAS_HW_AES -#include "aegis128x2_soft.h" +# include "aegis128x2_soft.h" static const aegis128x2_implementation *implementation = &aegis128x2_soft_implementation; #else -#if defined(__aarch64__) || defined(_M_ARM64) +# if defined(__aarch64__) || defined(_M_ARM64) static const aegis128x2_implementation *implementation = &aegis128x2_armcrypto_implementation; -#elif defined(__x86_64__) || defined(__i386__) +# elif defined(__x86_64__) || defined(__i386__) static const aegis128x2_implementation *implementation = &aegis128x2_aesni_implementation; -#else -#error "Unsupported architecture" -#endif +# else +# error "Unsupported architecture" +# endif #endif size_t diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index 83ca226..47508b2 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -1,25 +1,25 @@ #if defined(__i386__) || defined(__x86_64__) -#include -#include -#include -#include -#include - -#include "../common/common.h" -#include "aegis128x2.h" -#include "aegis128x2_aesni.h" - -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("aes,avx") -#endif +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis128x2.h" +# include "aegis128x2_aesni.h" -#include -#include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("aes,avx") +# endif -#define AES_BLOCK_LENGTH 32 +# include +# include + +# define AES_BLOCK_LENGTH 32 typedef struct { __m128i b0; @@ -84,7 +84,7 @@ aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[4] = AES_BLOCK_XOR(state[4], d2); } -#include "aegis128x2_common.h" +# include "aegis128x2_common.h" struct aegis128x2_implementation aegis128x2_aesni_implementation = { .encrypt_detached = encrypt_detached, @@ -97,8 +97,8 @@ struct aegis128x2_implementation aegis128x2_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 19ca21c..97439b3 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -1,28 +1,29 @@ #if defined(__aarch64__) || defined(_M_ARM64) -#include -#include -#include -#include -#include - -#include "../common/common.h" -#include "aegis128x2.h" -#include "aegis128x2_armcrypto.h" - -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("neon,crypto,aes") -#endif +# include +# include +# include +# include +# include -#ifndef __ARM_FEATURE_AES -#define __ARM_FEATURE_AES 1 -#endif +# include "../common/common.h" +# include "aegis128x2.h" +# include "aegis128x2_armcrypto.h" + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("neon,crypto,aes") +# endif -#include +# ifndef __ARM_FEATURE_AES +# define __ARM_FEATURE_AES 1 +# endif -#define AES_BLOCK_LENGTH 32 +# include + +# define AES_BLOCK_LENGTH 32 typedef struct { uint8x16_t b0; @@ -83,7 +84,7 @@ aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d1); } -#include "aegis128x2_common.h" +# include "aegis128x2_common.h" struct aegis128x2_implementation aegis128x2_armcrypto_implementation = { .encrypt_detached = encrypt_detached, @@ -96,8 +97,8 @@ struct aegis128x2_implementation aegis128x2_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index 307cb79..7a0ff11 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -1,34 +1,34 @@ #if defined(__i386__) || defined(__x86_64__) -#include -#include -#include -#include -#include +# include +# include +# include +# include +# include -#include "../common/common.h" -#include "aegis128x2.h" -#include "aegis128x2_avx2.h" +# include "../common/common.h" +# include "aegis128x2.h" +# include "aegis128x2_avx2.h" -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("vaes,avx2") -#endif +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("vaes,avx2") +# endif -#include +# include -#define AES_BLOCK_LENGTH 32 +# define AES_BLOCK_LENGTH 32 typedef __m256i aes_block_t; -#define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) -#define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) -#define AES_BLOCK_LOAD128_BROADCAST(A) \ - _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) -#define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) -#define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) -#define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) -#define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) +# define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) +# define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) +# define AES_BLOCK_LOAD128_BROADCAST(A) \ + _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) +# define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) +# define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) +# define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) +# define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) static inline void aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) @@ -49,7 +49,7 @@ aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[4] = AES_BLOCK_XOR(state[4], d2); } -#include "aegis128x2_common.h" +# include "aegis128x2_common.h" struct aegis128x2_implementation aegis128x2_avx2_implementation = { .encrypt_detached = encrypt_detached, @@ -62,8 +62,8 @@ struct aegis128x2_implementation aegis128x2_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_soft.c b/src/aegis128x2/aegis128x2_soft.c index 4f561e7..0c09424 100644 --- a/src/aegis128x2/aegis128x2_soft.c +++ b/src/aegis128x2/aegis128x2_soft.c @@ -9,11 +9,11 @@ #ifndef HAS_HW_AES -#include "../common/softaes.h" -#include "aegis128x2.h" -#include "aegis128x2_soft.h" +# include "../common/softaes.h" +# include "aegis128x2.h" +# include "aegis128x2_soft.h" -#define AES_BLOCK_LENGTH 32 +# define AES_BLOCK_LENGTH 32 typedef struct { SoftAesBlock b0; @@ -76,7 +76,7 @@ aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[4] = AES_BLOCK_XOR(state[4], d2); } -#include "aegis128x2_common.h" +# include "aegis128x2_common.h" struct aegis128x2_implementation aegis128x2_soft_implementation = { .encrypt_detached = encrypt_detached, diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index eafc343..474ce23 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -13,16 +13,16 @@ #include "aegis128x4_avx512.h" #ifndef HAS_HW_AES -#include "aegis128x4_soft.h" +# include "aegis128x4_soft.h" static const aegis128x4_implementation *implementation = &aegis128x4_soft_implementation; #else -#if defined(__aarch64__) || defined(_M_ARM64) +# if defined(__aarch64__) || defined(_M_ARM64) static const aegis128x4_implementation *implementation = &aegis128x4_armcrypto_implementation; -#elif defined(__x86_64__) || defined(__i386__) +# elif defined(__x86_64__) || defined(__i386__) static const aegis128x4_implementation *implementation = &aegis128x4_aesni_implementation; -#else -#error "Unsupported architecture" -#endif +# else +# error "Unsupported architecture" +# endif #endif size_t @@ -168,12 +168,12 @@ aegis128x4_pick_best_implementation(void) #endif #if defined(__x86_64__) || defined(__i386__) -#ifdef HAVE_VAESINTRIN_H +# ifdef HAVE_VAESINTRIN_H if (aegis_runtime_has_vaes() && aegis_runtime_has_avx512f()) { implementation = &aegis128x4_avx512_implementation; return 0; } -#endif +# endif if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { implementation = &aegis128x4_avx2_implementation; return 0; diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c index 2e0d144..4e50058 100644 --- a/src/aegis128x4/aegis128x4_aesni.c +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -1,25 +1,25 @@ #if defined(__i386__) || defined(__x86_64__) -#include -#include -#include -#include -#include - -#include "../common/common.h" -#include "aegis128x4.h" -#include "aegis128x4_aesni.h" - -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("aes,avx") -#endif +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis128x4.h" +# include "aegis128x4_aesni.h" -#include -#include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("aes,avx") +# endif -#define AES_BLOCK_LENGTH 64 +# include +# include + +# define AES_BLOCK_LENGTH 64 typedef struct { __m128i b0; @@ -93,7 +93,7 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[4] = AES_BLOCK_XOR(state[4], d2); } -#include "aegis128x4_common.h" +# include "aegis128x4_common.h" struct aegis128x4_implementation aegis128x4_aesni_implementation = { .encrypt_detached = encrypt_detached, @@ -106,8 +106,8 @@ struct aegis128x4_implementation aegis128x4_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index 5d1e384..13ca1bb 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -1,28 +1,29 @@ #if defined(__aarch64__) || defined(_M_ARM64) -#include -#include -#include -#include -#include - -#include "../common/common.h" -#include "aegis128x4.h" -#include "aegis128x4_armcrypto.h" - -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("neon,crypto,aes") -#endif +# include +# include +# include +# include +# include -#ifndef __ARM_FEATURE_AES -#define __ARM_FEATURE_AES 1 -#endif +# include "../common/common.h" +# include "aegis128x4.h" +# include "aegis128x4_armcrypto.h" + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("neon,crypto,aes") +# endif -#include +# ifndef __ARM_FEATURE_AES +# define __ARM_FEATURE_AES 1 +# endif -#define AES_BLOCK_LENGTH 64 +# include + +# define AES_BLOCK_LENGTH 64 typedef struct { uint8x16_t b0; @@ -91,7 +92,7 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d1); } -#include "aegis128x4_common.h" +# include "aegis128x4_common.h" struct aegis128x4_implementation aegis128x4_armcrypto_implementation = { .encrypt_detached = encrypt_detached, @@ -104,8 +105,8 @@ struct aegis128x4_implementation aegis128x4_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c index 39c3bb5..b9098e9 100644 --- a/src/aegis128x4/aegis128x4_avx2.c +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -1,24 +1,24 @@ #if defined(__i386__) || defined(__x86_64__) -#include -#include -#include -#include -#include - -#include "../common/common.h" -#include "aegis128x4.h" -#include "aegis128x4_avx2.h" - -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("vaes,avx2") -#endif +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis128x4.h" +# include "aegis128x4_avx2.h" -#include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("vaes,avx2") +# endif -#define AES_BLOCK_LENGTH 64 +# include + +# define AES_BLOCK_LENGTH 64 typedef struct { __m256i b0; @@ -83,7 +83,7 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[4] = AES_BLOCK_XOR(state[4], d2); } -#include "aegis128x4_common.h" +# include "aegis128x4_common.h" struct aegis128x4_implementation aegis128x4_avx2_implementation = { .encrypt_detached = encrypt_detached, @@ -96,8 +96,8 @@ struct aegis128x4_implementation aegis128x4_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 9d58249..54d883a 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -1,35 +1,37 @@ #if defined(__i386__) || defined(__x86_64__) -#include -#include -#include -#include -#include +# include +# include +# include +# include +# include -#include "../common/common.h" -#include "aegis128x4.h" -#include "aegis128x4_avx512.h" +# include "../common/common.h" +# include "aegis128x4.h" +# include "aegis128x4_avx512.h" -#ifdef HAVE_VAESINTRIN_H +# ifdef HAVE_VAESINTRIN_H -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("vaes,avx512f"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("vaes,avx512f") -#endif +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("vaes,avx512f"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("vaes,avx512f") +# endif -#include +# include -#define AES_BLOCK_LENGTH 64 +# define AES_BLOCK_LENGTH 64 typedef __m512i aes_block_t; -#define AES_BLOCK_XOR(A, B) _mm512_xor_si512((A), (B)) -#define AES_BLOCK_AND(A, B) _mm512_and_si512((A), (B)) -#define AES_BLOCK_LOAD128_BROADCAST(A) _mm512_broadcast_i32x4(_mm_loadu_si128((const void *) (A))) -#define AES_BLOCK_LOAD(A) _mm512_loadu_si512((const aes_block_t *) (const void *) (A)) -#define AES_BLOCK_LOAD_64x2(A, B) _mm512_broadcast_i32x4(_mm_set_epi64x((A), (B))) -#define AES_BLOCK_STORE(A, B) _mm512_storeu_si512((aes_block_t *) (void *) (A), (B)) -#define AES_ENC(A, B) _mm512_aesenc_epi128((A), (B)) +# define AES_BLOCK_XOR(A, B) _mm512_xor_si512((A), (B)) +# define AES_BLOCK_AND(A, B) _mm512_and_si512((A), (B)) +# define AES_BLOCK_LOAD128_BROADCAST(A) \ + _mm512_broadcast_i32x4(_mm_loadu_si128((const void *) (A))) +# define AES_BLOCK_LOAD(A) _mm512_loadu_si512((const aes_block_t *) (const void *) (A)) +# define AES_BLOCK_LOAD_64x2(A, B) _mm512_broadcast_i32x4(_mm_set_epi64x((A), (B))) +# define AES_BLOCK_STORE(A, B) _mm512_storeu_si512((aes_block_t *) (void *) (A), (B)) +# define AES_ENC(A, B) _mm512_aesenc_epi128((A), (B)) static inline void aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) @@ -50,7 +52,7 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[4] = AES_BLOCK_XOR(state[4], d2); } -#include "aegis128x4_common.h" +# include "aegis128x4_common.h" struct aegis128x4_implementation aegis128x4_avx512_implementation = { .encrypt_detached = encrypt_detached, @@ -63,10 +65,10 @@ struct aegis128x4_implementation aegis128x4_avx512_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif -#endif +# endif #endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_soft.c b/src/aegis128x4/aegis128x4_soft.c index 906df49..defdbc4 100644 --- a/src/aegis128x4/aegis128x4_soft.c +++ b/src/aegis128x4/aegis128x4_soft.c @@ -9,11 +9,11 @@ #ifndef HAS_HW_AES -#include "../common/softaes.h" -#include "aegis128x4.h" -#include "aegis128x4_soft.h" +# include "../common/softaes.h" +# include "aegis128x4.h" +# include "aegis128x4_soft.h" -#define AES_BLOCK_LENGTH 64 +# define AES_BLOCK_LENGTH 64 typedef struct { SoftAesBlock b0; @@ -84,7 +84,7 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[4] = AES_BLOCK_XOR(state[4], d2); } -#include "aegis128x4_common.h" +# include "aegis128x4_common.h" struct aegis128x4_implementation aegis128x4_soft_implementation = { .encrypt_detached = encrypt_detached, diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index 640edc3..86051b8 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -11,16 +11,16 @@ #include "aegis256_armcrypto.h" #ifndef HAS_HW_AES -#include "aegis256_soft.h" +# include "aegis256_soft.h" static const aegis256_implementation *implementation = &aegis256_soft_implementation; #else -#if defined(__aarch64__) || defined(_M_ARM64) +# if defined(__aarch64__) || defined(_M_ARM64) static const aegis256_implementation *implementation = &aegis256_armcrypto_implementation; -#elif defined(__x86_64__) || defined(__i386__) +# elif defined(__x86_64__) || defined(__i386__) static const aegis256_implementation *implementation = &aegis256_aesni_implementation; -#else -#error "Unsupported architecture" -#endif +# else +# error "Unsupported architecture" +# endif #endif size_t diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index 3556136..edb02a1 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -1,33 +1,33 @@ #if defined(__i386__) || defined(__x86_64__) -#include -#include -#include -#include -#include - -#include "../common/common.h" -#include "aegis256.h" -#include "aegis256_aesni.h" - -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("aes,avx") -#endif +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis256.h" +# include "aegis256_aesni.h" -#include -#include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("aes,avx") +# endif -#define AES_BLOCK_LENGTH 16 +# include +# include + +# define AES_BLOCK_LENGTH 16 typedef __m128i aes_block_t; -#define AES_BLOCK_XOR(A, B) _mm_xor_si128((A), (B)) -#define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) -#define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) -#define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B)) -#define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) -#define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) +# define AES_BLOCK_XOR(A, B) _mm_xor_si128((A), (B)) +# define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) +# define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) +# define AES_BLOCK_LOAD_64x2(A, B) _mm_set_epi64x((long long) (A), (long long) (B)) +# define AES_BLOCK_STORE(A, B) _mm_storeu_si128((aes_block_t *) (void *) (A), (B)) +# define AES_ENC(A, B) _mm_aesenc_si128((A), (B)) static inline void aegis256_update(aes_block_t *const state, const aes_block_t d) @@ -43,7 +43,7 @@ aegis256_update(aes_block_t *const state, const aes_block_t d) state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); } -#include "aegis256_common.h" +# include "aegis256_common.h" struct aegis256_implementation aegis256_aesni_implementation = { .encrypt_detached = encrypt_detached, @@ -56,8 +56,8 @@ struct aegis256_implementation aegis256_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index 3399f93..d13abd3 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -1,36 +1,37 @@ #if defined(__aarch64__) || defined(_M_ARM64) -#include -#include -#include -#include -#include +# include +# include +# include +# include +# include -#include "../common/common.h" -#include "aegis256.h" -#include "aegis256_armcrypto.h" +# include "../common/common.h" +# include "aegis256.h" +# include "aegis256_armcrypto.h" -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("neon,crypto,aes") -#endif +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("neon,crypto,aes") +# endif -#ifndef __ARM_FEATURE_AES -#define __ARM_FEATURE_AES 1 -#endif +# ifndef __ARM_FEATURE_AES +# define __ARM_FEATURE_AES 1 +# endif -#include +# include -#define AES_BLOCK_LENGTH 16 +# define AES_BLOCK_LENGTH 16 typedef uint8x16_t aes_block_t; -#define AES_BLOCK_XOR(A, B) veorq_u8((A), (B)) -#define AES_BLOCK_AND(A, B) vandq_u8((A), (B)) -#define AES_BLOCK_LOAD(A) vld1q_u8(A) -#define AES_BLOCK_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1)) -#define AES_BLOCK_STORE(A, B) vst1q_u8((A), (B)) -#define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B)) +# define AES_BLOCK_XOR(A, B) veorq_u8((A), (B)) +# define AES_BLOCK_AND(A, B) vandq_u8((A), (B)) +# define AES_BLOCK_LOAD(A) vld1q_u8(A) +# define AES_BLOCK_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1)) +# define AES_BLOCK_STORE(A, B) vst1q_u8((A), (B)) +# define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B)) static inline void aegis256_update(aes_block_t *const state, const aes_block_t d) @@ -46,7 +47,7 @@ aegis256_update(aes_block_t *const state, const aes_block_t d) state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); } -#include "aegis256_common.h" +# include "aegis256_common.h" struct aegis256_implementation aegis256_armcrypto_implementation = { .encrypt_detached = encrypt_detached, @@ -59,8 +60,8 @@ struct aegis256_implementation aegis256_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis256/aegis256_soft.c b/src/aegis256/aegis256_soft.c index 04c7e95..dbc548e 100644 --- a/src/aegis256/aegis256_soft.c +++ b/src/aegis256/aegis256_soft.c @@ -9,19 +9,19 @@ #ifndef HAS_HW_AES -#include "../common/softaes.h" -#include "aegis256.h" -#include "aegis256_soft.h" +# include "../common/softaes.h" +# include "aegis256.h" +# include "aegis256_soft.h" -#define AES_BLOCK_LENGTH 16 +# define AES_BLOCK_LENGTH 16 typedef SoftAesBlock aes_block_t; -#define AES_BLOCK_XOR(A, B) softaes_block_xor((A), (B)) -#define AES_BLOCK_AND(A, B) softaes_block_and((A), (B)) -#define AES_BLOCK_LOAD(A) softaes_block_load(A) -#define AES_BLOCK_LOAD_64x2(A, B) softaes_block_load64x2((A), (B)) -#define AES_BLOCK_STORE(A, B) softaes_block_store((A), (B)) -#define AES_ENC(A, B) softaes_block_encrypt((A), (B)) +# define AES_BLOCK_XOR(A, B) softaes_block_xor((A), (B)) +# define AES_BLOCK_AND(A, B) softaes_block_and((A), (B)) +# define AES_BLOCK_LOAD(A) softaes_block_load(A) +# define AES_BLOCK_LOAD_64x2(A, B) softaes_block_load64x2((A), (B)) +# define AES_BLOCK_STORE(A, B) softaes_block_store((A), (B)) +# define AES_ENC(A, B) softaes_block_encrypt((A), (B)) static inline void aegis256_update(aes_block_t *const state, const aes_block_t d) @@ -37,7 +37,7 @@ aegis256_update(aes_block_t *const state, const aes_block_t d) state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); } -#include "aegis256_common.h" +# include "aegis256_common.h" struct aegis256_implementation aegis256_soft_implementation = { .encrypt_detached = encrypt_detached, diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index cf1f604..80e29b2 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -12,16 +12,16 @@ #include "aegis256x2_avx2.h" #ifndef HAS_HW_AES -#include "aegis256x2_soft.h" +# include "aegis256x2_soft.h" static const aegis256x2_implementation *implementation = &aegis256x2_soft_implementation; #else -#if defined(__aarch64__) || defined(_M_ARM64) +# if defined(__aarch64__) || defined(_M_ARM64) static const aegis256x2_implementation *implementation = &aegis256x2_armcrypto_implementation; -#elif defined(__x86_64__) || defined(__i386__) +# elif defined(__x86_64__) || defined(__i386__) static const aegis256x2_implementation *implementation = &aegis256x2_aesni_implementation; -#else -#error "Unsupported architecture" -#endif +# else +# error "Unsupported architecture" +# endif #endif size_t diff --git a/src/aegis256x2/aegis256x2_aesni.c b/src/aegis256x2/aegis256x2_aesni.c index 8303564..4f88d0b 100644 --- a/src/aegis256x2/aegis256x2_aesni.c +++ b/src/aegis256x2/aegis256x2_aesni.c @@ -1,25 +1,25 @@ #if defined(__i386__) || defined(__x86_64__) -#include -#include -#include -#include -#include - -#include "../common/common.h" -#include "aegis256x2.h" -#include "aegis256x2_aesni.h" - -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("aes,avx") -#endif +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis256x2.h" +# include "aegis256x2_aesni.h" -#include -#include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("aes,avx") +# endif -#define AES_BLOCK_LENGTH 32 +# include +# include + +# define AES_BLOCK_LENGTH 32 typedef struct { __m128i b0; @@ -79,7 +79,7 @@ aegis256x2_update(aes_block_t *const state, const aes_block_t d) state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); } -#include "aegis256x2_common.h" +# include "aegis256x2_common.h" struct aegis256x2_implementation aegis256x2_aesni_implementation = { .encrypt_detached = encrypt_detached, @@ -92,8 +92,8 @@ struct aegis256x2_implementation aegis256x2_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c index cf4399a..8334c48 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -1,28 +1,29 @@ #if defined(__aarch64__) || defined(_M_ARM64) -#include -#include -#include -#include -#include - -#include "../common/common.h" -#include "aegis256x2.h" -#include "aegis256x2_armcrypto.h" - -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("neon,crypto,aes") -#endif +# include +# include +# include +# include +# include -#ifndef __ARM_FEATURE_AES -#define __ARM_FEATURE_AES 1 -#endif +# include "../common/common.h" +# include "aegis256x2.h" +# include "aegis256x2_armcrypto.h" + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("neon,crypto,aes") +# endif -#include +# ifndef __ARM_FEATURE_AES +# define __ARM_FEATURE_AES 1 +# endif -#define AES_BLOCK_LENGTH 32 +# include + +# define AES_BLOCK_LENGTH 32 typedef struct { uint8x16_t b0; @@ -81,7 +82,7 @@ aegis256x2_update(aes_block_t *const state, const aes_block_t d) state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); } -#include "aegis256x2_common.h" +# include "aegis256x2_common.h" struct aegis256x2_implementation aegis256x2_armcrypto_implementation = { .encrypt_detached = encrypt_detached, @@ -94,8 +95,8 @@ struct aegis256x2_implementation aegis256x2_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c index cda08e0..ad28b81 100644 --- a/src/aegis256x2/aegis256x2_avx2.c +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -1,34 +1,34 @@ #if defined(__i386__) || defined(__x86_64__) -#include -#include -#include -#include -#include +# include +# include +# include +# include +# include -#include "../common/common.h" -#include "aegis256x2.h" -#include "aegis256x2_avx2.h" +# include "../common/common.h" +# include "aegis256x2.h" +# include "aegis256x2_avx2.h" -#ifdef __clang__ -#pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) -#elif defined(__GNUC__) -#pragma GCC target("vaes,avx2") -#endif +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("vaes,avx2") +# endif -#include +# include -#define AES_BLOCK_LENGTH 32 +# define AES_BLOCK_LENGTH 32 typedef __m256i aes_block_t; -#define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) -#define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) -#define AES_BLOCK_LOAD128_BROADCAST(A) \ - _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) -#define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) -#define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) -#define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) -#define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) +# define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) +# define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) +# define AES_BLOCK_LOAD128_BROADCAST(A) \ + _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) +# define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) +# define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) +# define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) +# define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) static inline void aegis256x2_update(aes_block_t *const state, const aes_block_t d) @@ -44,7 +44,7 @@ aegis256x2_update(aes_block_t *const state, const aes_block_t d) state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); } -#include "aegis256x2_common.h" +# include "aegis256x2_common.h" struct aegis256x2_implementation aegis256x2_avx2_implementation = { .encrypt_detached = encrypt_detached, @@ -57,8 +57,8 @@ struct aegis256x2_implementation aegis256x2_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#ifdef __clang__ -#pragma clang attribute pop -#endif +# ifdef __clang__ +# pragma clang attribute pop +# endif #endif \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_soft.c b/src/aegis256x2/aegis256x2_soft.c index 8f72d10..facdc5c 100644 --- a/src/aegis256x2/aegis256x2_soft.c +++ b/src/aegis256x2/aegis256x2_soft.c @@ -9,11 +9,11 @@ #ifndef HAS_HW_AES -#include "../common/softaes.h" -#include "aegis256x2.h" -#include "aegis256x2_soft.h" +# include "../common/softaes.h" +# include "aegis256x2.h" +# include "aegis256x2_soft.h" -#define AES_BLOCK_LENGTH 32 +# define AES_BLOCK_LENGTH 32 typedef struct { SoftAesBlock b0; @@ -71,7 +71,7 @@ aegis256x2_update(aes_block_t *const state, const aes_block_t d) state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); } -#include "aegis256x2_common.h" +# include "aegis256x2_common.h" struct aegis256x2_implementation aegis256x2_soft_implementation = { .encrypt_detached = encrypt_detached, diff --git a/src/common/common.c b/src/common/common.c index 3cc135a..91b0c04 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -61,7 +61,7 @@ aegis_init(void) } #if defined(_MSC_VER) -#pragma section(".CRT$XCU", read) +# pragma section(".CRT$XCU", read) static void __cdecl _do_aegis_init(void); __declspec(allocate(".CRT$XCU")) void (*aegis_init_constructor)(void) = _do_aegis_init; #else diff --git a/src/common/common.h b/src/common/common.h index 5b9bd84..5256a6f 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -8,37 +8,37 @@ #include "aegis.h" #ifdef __linux__ -#define HAVE_SYS_AUXV_H -#define HAVE_GETAUXVAL +# define HAVE_SYS_AUXV_H +# define HAVE_GETAUXVAL #endif #ifdef __ANDROID_API__ -#define HAVE_ANDROID_GETCPUFEATURES +# define HAVE_ANDROID_GETCPUFEATURES #endif #if defined(__i386__) || defined(__x86_64__) -#define HAVE_CPUID -#define NATIVE_LITTLE_ENDIAN -#if defined(__clang__) || defined(__GNUC__) -#define HAVE_AVX_ASM -#endif +# define HAVE_CPUID +# define NATIVE_LITTLE_ENDIAN +# if defined(__clang__) || defined(__GNUC__) +# define HAVE_AVX_ASM +# endif #endif #ifdef __x86_64__ -#define HAVE_AVXINTRIN_H -#define HAVE_AVX2INTRIN_H -#define HAVE_AVX512FINTRIN_H -#define HAVE_TMMINTRIN_H -#define HAVE_WMMINTRIN_H -#define HAVE_VAESINTRIN_H -#ifdef __GNUC__ -#if !__has_include() -#undef HAVE_VAESINTRIN_H -#endif -#endif +# define HAVE_AVXINTRIN_H +# define HAVE_AVX2INTRIN_H +# define HAVE_AVX512FINTRIN_H +# define HAVE_TMMINTRIN_H +# define HAVE_WMMINTRIN_H +# define HAVE_VAESINTRIN_H +# ifdef __GNUC__ +# if !__has_include() +# undef HAVE_VAESINTRIN_H +# endif +# endif #endif #if defined(__INTEL_COMPILER) || defined(_MSC_VER) -#define CRYPTO_ALIGN(x) __declspec(align(x)) +# define CRYPTO_ALIGN(x) __declspec(align(x)) #else -#define CRYPTO_ALIGN(x) __attribute__((aligned(x))) +# define CRYPTO_ALIGN(x) __attribute__((aligned(x))) #endif #define LOAD32_LE(SRC) load32_le(SRC) diff --git a/src/common/cpu.c b/src/common/cpu.c index fdf2b77..9b0e11b 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -6,15 +6,15 @@ #include #ifdef HAVE_ANDROID_GETCPUFEATURES -#include +# include #endif #ifdef __APPLE__ -#include -#include -#include +# include +# include +# include #endif #ifdef HAVE_SYS_AUXV_H -#include +# include #endif typedef struct CPUFeatures_ { @@ -59,27 +59,27 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) #elif defined(HAVE_ANDROID_GETCPUFEATURES) && defined(ANDROID_CPU_ARM_FEATURE_NEON) cpu_features->has_neon = (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0x0; #elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) -#ifdef HAVE_GETAUXVAL +# ifdef HAVE_GETAUXVAL cpu_features->has_neon = (getauxval(AT_HWCAP) & (1L << 1)) != 0; -#elif defined(HAVE_ELF_AUX_INFO) +# elif defined(HAVE_ELF_AUX_INFO) { unsigned long buf; if (elf_aux_info(AT_HWCAP, (void *) &buf, (int) sizeof buf) == 0) { cpu_features->has_neon = (buf & (1L << 1)) != 0; } } -#endif +# endif #elif defined(__arm__) && defined(AT_HWCAP) -#ifdef HAVE_GETAUXVAL +# ifdef HAVE_GETAUXVAL cpu_features->has_neon = (getauxval(AT_HWCAP) & (1L << 12)) != 0; -#elif defined(HAVE_ELF_AUX_INFO) +# elif defined(HAVE_ELF_AUX_INFO) { unsigned long buf; if (elf_aux_info(AT_HWCAP, (void *) &buf, (int) sizeof buf) == 0) { cpu_features->has_neon = (buf & (1L << 12)) != 0; } } -#endif +# endif #endif if (cpu_features->has_neon == 0) { @@ -108,27 +108,27 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) #elif defined(HAVE_ANDROID_GETCPUFEATURES) && defined(ANDROID_CPU_ARM_FEATURE_AES) cpu_features->has_armcrypto = (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_AES) != 0x0; #elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) -#ifdef HAVE_GETAUXVAL +# ifdef HAVE_GETAUXVAL cpu_features->has_armcrypto = (getauxval(AT_HWCAP) & (1L << 3)) != 0; -#elif defined(HAVE_ELF_AUX_INFO) +# elif defined(HAVE_ELF_AUX_INFO) { unsigned long buf; if (elf_aux_info(AT_HWCAP, (void *) &buf, (int) sizeof buf) == 0) { cpu_features->has_armcrypto = (buf & (1L << 3)) != 0; } } -#endif +# endif #elif defined(__arm__) && defined(AT_HWCAP2) -#ifdef HAVE_GETAUXVAL +# ifdef HAVE_GETAUXVAL cpu_features->has_armcrypto = (getauxval(AT_HWCAP2) & (1L << 0)) != 0; -#elif defined(HAVE_ELF_AUX_INFO) +# elif defined(HAVE_ELF_AUX_INFO) { unsigned long buf; if (elf_aux_info(AT_HWCAP2, (void *) &buf, (int) sizeof buf) == 0) { cpu_features->has_armcrypto = (buf & (1L << 0)) != 0; } } -#endif +# endif #endif return 0; @@ -141,7 +141,7 @@ _cpuid(unsigned int cpu_info[4U], const unsigned int cpu_info_type) __cpuid((int *) cpu_info, cpu_info_type); #elif defined(HAVE_CPUID) cpu_info[0] = cpu_info[1] = cpu_info[2] = cpu_info[3] = 0; -#ifdef __i386__ +# ifdef __i386__ __asm__ __volatile__( "pushfl; pushfl; " "popl %0; " @@ -153,23 +153,23 @@ _cpuid(unsigned int cpu_info[4U], const unsigned int cpu_info_type) if (((cpu_info[0] ^ cpu_info[1]) & 0x200000) == 0x0) { return; /* LCOV_EXCL_LINE */ } -#endif -#ifdef __i386__ +# endif +# ifdef __i386__ __asm__ __volatile__("xchgl %%ebx, %k1; cpuid; xchgl %%ebx, %k1" : "=a"(cpu_info[0]), "=&r"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3]) : "0"(cpu_info_type), "2"(0U)); -#elif defined(__x86_64__) +# elif defined(__x86_64__) __asm__ __volatile__("xchgq %%rbx, %q1; cpuid; xchgq %%rbx, %q1" : "=a"(cpu_info[0]), "=&r"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3]) : "0"(cpu_info_type), "2"(0U)); -#else +# else __asm__ __volatile__("cpuid" : "=a"(cpu_info[0]), "=b"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3]) : "0"(cpu_info_type), "2"(0U)); -#endif +# endif #else (void) cpu_info_type; cpu_info[0] = cpu_info[1] = cpu_info[2] = cpu_info[3] = 0; @@ -195,10 +195,10 @@ _runtime_intel_cpu_features(CPUFeatures *const cpu_features) if ((cpu_info[2] & (CPUID_ECX_AVX | CPUID_ECX_XSAVE | CPUID_ECX_OSXSAVE)) == (CPUID_ECX_AVX | CPUID_ECX_XSAVE | CPUID_ECX_OSXSAVE)) { xcr0 = 0U; -#if defined(HAVE__XGETBV) || \ - (defined(_MSC_VER) && defined(_XCR_XFEATURE_ENABLED_MASK) && _MSC_FULL_VER >= 160040219) +# if defined(HAVE__XGETBV) || \ + (defined(_MSC_VER) && defined(_XCR_XFEATURE_ENABLED_MASK) && _MSC_FULL_VER >= 160040219) xcr0 = (uint32_t) _xgetbv(0); -#elif defined(_MSC_VER) && defined(_M_IX86) +# elif defined(_MSC_VER) && defined(_M_IX86) /* * Visual Studio documentation states that eax/ecx/edx don't need to * be preserved in inline assembly code. But that doesn't seem to @@ -215,12 +215,12 @@ _runtime_intel_cpu_features(CPUFeatures *const cpu_features) pop ecx pop eax } -#elif defined(HAVE_AVX_ASM) +# elif defined(HAVE_AVX_ASM) __asm__ __volatile__(".byte 0x0f, 0x01, 0xd0" /* XGETBV */ : "=a"(xcr0) : "c"((uint32_t) 0U) : "%edx"); -#endif +# endif if ((xcr0 & (XCR0_SSE | XCR0_AVX)) == (XCR0_SSE | XCR0_AVX)) { cpu_features->has_avx = 1; } diff --git a/src/common/cpu.h b/src/common/cpu.h index efb7376..4408bb9 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -2,9 +2,9 @@ #define cpu_H #if defined(__ARM_FEATURE_CRYPTO) && defined(__ARM_FEATURE_AES) && defined(__ARM_NEON) -#define HAS_HW_AES +# define HAS_HW_AES #elif defined(__AES__) && defined(__AVX__) -#define HAS_HW_AES +# define HAS_HW_AES #endif int aegis_runtime_get_cpu_features(void); diff --git a/src/common/softaes.c b/src/common/softaes.c index 5392c6e..164d1e1 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -44,11 +44,11 @@ uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { static const uint32_t* const LUT = _aes_lut; #ifndef SOFTAES_STRIDE -#ifdef FAVOR_PERFORMANCE -#define SOFTAES_STRIDE 256 -#else -#define SOFTAES_STRIDE 16 -#endif +# ifdef FAVOR_PERFORMANCE +# define SOFTAES_STRIDE 256 +# else +# define SOFTAES_STRIDE 16 +# endif #endif static SoftAesBlock diff --git a/src/include/aegis.h b/src/include/aegis.h index 13bb99c..c197fb9 100644 --- a/src/include/aegis.h +++ b/src/include/aegis.h @@ -4,10 +4,10 @@ #include #if !defined(__clang__) && !defined(__GNUC__) -#ifdef __attribute__ -#undef __attribute__ -#endif -#define __attribute__(a) +# ifdef __attribute__ +# undef __attribute__ +# endif +# define __attribute__(a) #endif #include "aegis128l.h" From 54e16f8aef4769c7e1e10149b8532a72f1771f04 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 12 Sep 2023 18:05:32 +0200 Subject: [PATCH 054/219] Better pragmas for gcc --- src/aegis128l/aegis128l_armcrypto.c | 5 ++++- src/aegis128x2/aegis128x2_armcrypto.c | 5 ++++- src/aegis128x4/aegis128x4_armcrypto.c | 5 ++++- src/aegis256/aegis256_armcrypto.c | 5 ++++- src/aegis256x2/aegis256x2_armcrypto.c | 5 ++++- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index f84eacf..b22ce1b 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -14,9 +14,12 @@ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("neon,crypto,aes") +# pragma GCC target("+simd+crypto") # endif +# ifndef __ARM_FEATURE_CRYPTO +# define __ARM_FEATURE_CRYPTO 1 +# endif # ifndef __ARM_FEATURE_AES # define __ARM_FEATURE_AES 1 # endif diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 97439b3..166aa81 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -14,9 +14,12 @@ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("neon,crypto,aes") +# pragma GCC target("+simd+crypto") # endif +# ifndef __ARM_FEATURE_CRYPTO +# define __ARM_FEATURE_CRYPTO 1 +# endif # ifndef __ARM_FEATURE_AES # define __ARM_FEATURE_AES 1 # endif diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index 13ca1bb..8991ae6 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -14,9 +14,12 @@ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("neon,crypto,aes") +# pragma GCC target("+simd+crypto") # endif +# ifndef __ARM_FEATURE_CRYPTO +# define __ARM_FEATURE_CRYPTO 1 +# endif # ifndef __ARM_FEATURE_AES # define __ARM_FEATURE_AES 1 # endif diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index d13abd3..add59f0 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -14,9 +14,12 @@ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("neon,crypto,aes") +# pragma GCC target("+simd+crypto") # endif +# ifndef __ARM_FEATURE_CRYPTO +# define __ARM_FEATURE_CRYPTO 1 +# endif # ifndef __ARM_FEATURE_AES # define __ARM_FEATURE_AES 1 # endif diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c index 8334c48..5b96d60 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -14,9 +14,12 @@ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("neon,crypto,aes") +# pragma GCC target("+simd+crypto") # endif +# ifndef __ARM_FEATURE_CRYPTO +# define __ARM_FEATURE_CRYPTO 1 +# endif # ifndef __ARM_FEATURE_AES # define __ARM_FEATURE_AES 1 # endif From fbb85323dd9ea1cf77043ff2e9e5392acbba96eb Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 19 Sep 2023 21:23:46 +0200 Subject: [PATCH 055/219] Add an interface for unauthenticated encryption & decryption Also add an API for deterministic pseudorandom number generation. --- README.md | 2 + src/aegis128l/aegis128l.c | 20 +++++++++ src/aegis128l/aegis128l_aesni.c | 3 ++ src/aegis128l/aegis128l_armcrypto.c | 3 ++ src/aegis128l/aegis128l_common.h | 64 +++++++++++++++++++++++++++ src/aegis128l/aegis128l_soft.c | 3 ++ src/aegis128l/implementations.h | 6 +++ src/aegis128x2/aegis128x2.c | 21 +++++++++ src/aegis128x2/aegis128x2_aesni.c | 3 ++ src/aegis128x2/aegis128x2_armcrypto.c | 3 ++ src/aegis128x2/aegis128x2_avx2.c | 3 ++ src/aegis128x2/aegis128x2_common.h | 64 +++++++++++++++++++++++++++ src/aegis128x2/aegis128x2_soft.c | 3 ++ src/aegis128x2/implementations.h | 6 +++ src/aegis128x4/aegis128x4.c | 21 +++++++++ src/aegis128x4/aegis128x4_aesni.c | 3 ++ src/aegis128x4/aegis128x4_armcrypto.c | 3 ++ src/aegis128x4/aegis128x4_avx2.c | 3 ++ src/aegis128x4/aegis128x4_avx512.c | 3 ++ src/aegis128x4/aegis128x4_common.h | 64 +++++++++++++++++++++++++++ src/aegis128x4/aegis128x4_soft.c | 3 ++ src/aegis128x4/implementations.h | 6 +++ src/aegis256/aegis256.c | 20 +++++++++ src/aegis256/aegis256_aesni.c | 3 ++ src/aegis256/aegis256_armcrypto.c | 3 ++ src/aegis256/aegis256_common.h | 64 +++++++++++++++++++++++++++ src/aegis256/aegis256_soft.c | 3 ++ src/aegis256/implementations.h | 9 ++-- src/aegis256x2/aegis256x2.c | 21 +++++++++ src/aegis256x2/aegis256x2_aesni.c | 3 ++ src/aegis256x2/aegis256x2_armcrypto.c | 3 ++ src/aegis256x2/aegis256x2_avx2.c | 3 ++ src/aegis256x2/aegis256x2_common.h | 64 +++++++++++++++++++++++++++ src/aegis256x2/aegis256x2_soft.c | 3 ++ src/aegis256x2/implementations.h | 6 +++ src/include/aegis128l.h | 42 ++++++++++++++++++ src/include/aegis128x2.h | 42 ++++++++++++++++++ src/include/aegis128x4.h | 42 ++++++++++++++++++ src/include/aegis256.h | 42 ++++++++++++++++++ src/include/aegis256x2.h | 42 ++++++++++++++++++ src/test/main.zig | 26 +++++++++++ 41 files changed, 748 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5b4faa1..1023514 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2, AEGIS-128X4, AEGIS - AEGIS-256X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) - Encryption and decryption with attached and detached tags - Incremental encryption and decryption. +- Unauthenticated encryption and decryption (not recommended - only implemented for specific protocols) +- Deterministic pseudorandom stream generation. ## Installation diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 0e3e769..7326f24 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -151,6 +151,26 @@ aegis128l_state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); } +void +aegis128l_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +{ + implementation->randombytes_deterministic(out, len, npub, k); +} + +void +aegis128l_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->encrypt_unauthenticated(c, m, mlen, npub, k); +} + +void +aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->decrypt_unauthenticated(m, c, clen, npub, k); +} + int aegis128l_pick_best_implementation(void) { diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index 8517b8b..c8ee8b8 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -53,6 +53,9 @@ aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block struct aegis128l_implementation aegis128l_aesni_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index b22ce1b..96d97a4 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -57,6 +57,9 @@ aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block struct aegis128l_implementation aegis128l_armcrypto_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 817857e..f4e3409 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -228,6 +228,70 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, return ret; } +static void +randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + memset(src, 0, sizeof src); + if (npub == NULL) { + npub = src; + } + + aegis128l_init(k, npub, state); + + for (i = 0; i + RATE <= len; i += RATE) { + aegis128l_enc(out + i, src, state); + } + if (len % RATE) { + aegis128l_enc(dst, src, state); + memcpy(out + i, dst, len % RATE); + } +} + +static void +encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + aegis128l_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128l_enc(c + i, m + i, state); + } + if (mlen % RATE) { + memset(src, 0, RATE); + memcpy(src, m + i, mlen % RATE); + aegis128l_enc(dst, src, state); + memcpy(c + i, dst, mlen % RATE); + } +} + +static void +decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[8]; + const size_t mlen = clen; + size_t i; + + aegis128l_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128l_dec(m + i, c + i, state); + } + if (mlen % RATE) { + aegis128l_declast(m + i, c + i, mlen % RATE, state); + } +} + typedef struct _aegis128l_state { aes_block_t state[8]; uint8_t buf[RATE]; diff --git a/src/aegis128l/aegis128l_soft.c b/src/aegis128l/aegis128l_soft.c index 65b4ccb..efa16e7 100644 --- a/src/aegis128l/aegis128l_soft.c +++ b/src/aegis128l/aegis128l_soft.c @@ -47,6 +47,9 @@ aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block struct aegis128l_implementation aegis128l_soft_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128l/implementations.h b/src/aegis128l/implementations.h index ec3ba17..ef92753 100644 --- a/src/aegis128l/implementations.h +++ b/src/aegis128l/implementations.h @@ -12,6 +12,12 @@ typedef struct aegis128l_implementation { int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); + void (*randombytes_deterministic)(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k); + void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k); + void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k); void (*state_init)(aegis128l_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); int (*state_encrypt_update)(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *written, diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index b14c884..430d58a 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -152,6 +152,27 @@ aegis128x2_state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_ return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); } +void +aegis128x2_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k) +{ + implementation->randombytes_deterministic(out, len, npub, k); +} + +void +aegis128x2_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->encrypt_unauthenticated(c, m, mlen, npub, k); +} + +void +aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->decrypt_unauthenticated(m, c, clen, npub, k); +} + int aegis128x2_pick_best_implementation(void) { diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index 47508b2..dd6c829 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -89,6 +89,9 @@ aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc struct aegis128x2_implementation aegis128x2_aesni_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 166aa81..9c73b28 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -92,6 +92,9 @@ aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc struct aegis128x2_implementation aegis128x2_armcrypto_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index 7a0ff11..e3ac417 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -54,6 +54,9 @@ aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc struct aegis128x2_implementation aegis128x2_avx2_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index a8d808f..a2ec46a 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -258,6 +258,70 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, return ret; } +static void +randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + memset(src, 0, sizeof src); + if (npub == NULL) { + npub = src; + } + + aegis128x2_init(k, npub, state); + + for (i = 0; i + RATE <= len; i += RATE) { + aegis128x2_enc(out + i, src, state); + } + if (len % RATE) { + aegis128x2_enc(dst, src, state); + memcpy(out + i, dst, len % RATE); + } +} + +static void +encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + aegis128x2_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x2_enc(c + i, m + i, state); + } + if (mlen % RATE) { + memset(src, 0, RATE); + memcpy(src, m + i, mlen % RATE); + aegis128x2_enc(dst, src, state); + memcpy(c + i, dst, mlen % RATE); + } +} + +static void +decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[8]; + const size_t mlen = clen; + size_t i; + + aegis128x2_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x2_dec(m + i, c + i, state); + } + if (mlen % RATE) { + aegis128x2_declast(m + i, c + i, mlen % RATE, state); + } +} + typedef struct _aegis128x2_state { aes_block_t state[8]; uint8_t buf[RATE]; diff --git a/src/aegis128x2/aegis128x2_soft.c b/src/aegis128x2/aegis128x2_soft.c index 0c09424..fa458ac 100644 --- a/src/aegis128x2/aegis128x2_soft.c +++ b/src/aegis128x2/aegis128x2_soft.c @@ -81,6 +81,9 @@ aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc struct aegis128x2_implementation aegis128x2_soft_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x2/implementations.h b/src/aegis128x2/implementations.h index 57d2f58..9872dce 100644 --- a/src/aegis128x2/implementations.h +++ b/src/aegis128x2/implementations.h @@ -12,6 +12,12 @@ typedef struct aegis128x2_implementation { int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); + void (*randombytes_deterministic)(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k); + void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k); + void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k); void (*state_init)(aegis128x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); int (*state_encrypt_update)(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index 474ce23..b6c33ce 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -153,6 +153,27 @@ aegis128x4_state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_ return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); } +void +aegis128x4_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k) +{ + implementation->randombytes_deterministic(out, len, npub, k); +} + +void +aegis128x4_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->encrypt_unauthenticated(c, m, mlen, npub, k); +} + +void +aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->decrypt_unauthenticated(m, c, clen, npub, k); +} + int aegis128x4_pick_best_implementation(void) { diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c index 4e50058..35b52e4 100644 --- a/src/aegis128x4/aegis128x4_aesni.c +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -98,6 +98,9 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc struct aegis128x4_implementation aegis128x4_aesni_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index 8991ae6..d1e15fe 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -100,6 +100,9 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc struct aegis128x4_implementation aegis128x4_armcrypto_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c index b9098e9..2dc4837 100644 --- a/src/aegis128x4/aegis128x4_avx2.c +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -88,6 +88,9 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc struct aegis128x4_implementation aegis128x4_avx2_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 54d883a..7573383 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -57,6 +57,9 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc struct aegis128x4_implementation aegis128x4_avx512_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 6afe061..f6ecae2 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -271,6 +271,70 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, return ret; } +static void +randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + memset(src, 0, sizeof src); + if (npub == NULL) { + npub = src; + } + + aegis128x4_init(k, npub, state); + + for (i = 0; i + RATE <= len; i += RATE) { + aegis128x4_enc(out + i, src, state); + } + if (len % RATE) { + aegis128x4_enc(dst, src, state); + memcpy(out + i, dst, len % RATE); + } +} + +static void +encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[8]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + aegis128x4_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x4_enc(c + i, m + i, state); + } + if (mlen % RATE) { + memset(src, 0, RATE); + memcpy(src, m + i, mlen % RATE); + aegis128x4_enc(dst, src, state); + memcpy(c + i, dst, mlen % RATE); + } +} + +static void +decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[8]; + const size_t mlen = clen; + size_t i; + + aegis128x4_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis128x4_dec(m + i, c + i, state); + } + if (mlen % RATE) { + aegis128x4_declast(m + i, c + i, mlen % RATE, state); + } +} + typedef struct _aegis128x4_state { aes_block_t state[8]; uint8_t buf[RATE]; diff --git a/src/aegis128x4/aegis128x4_soft.c b/src/aegis128x4/aegis128x4_soft.c index defdbc4..2ac197e 100644 --- a/src/aegis128x4/aegis128x4_soft.c +++ b/src/aegis128x4/aegis128x4_soft.c @@ -89,6 +89,9 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc struct aegis128x4_implementation aegis128x4_soft_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x4/implementations.h b/src/aegis128x4/implementations.h index b457a9e..b3f8099 100644 --- a/src/aegis128x4/implementations.h +++ b/src/aegis128x4/implementations.h @@ -12,6 +12,12 @@ typedef struct aegis128x4_implementation { int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); + void (*randombytes_deterministic)(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k); + void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k); + void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k); void (*state_init)(aegis128x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); int (*state_encrypt_update)(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index 86051b8..27e6761 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -151,6 +151,26 @@ aegis256_state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t ml return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); } +void +aegis256_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +{ + implementation->randombytes_deterministic(out, len, npub, k); +} + +void +aegis256_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->encrypt_unauthenticated(c, m, mlen, npub, k); +} + +void +aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->decrypt_unauthenticated(m, c, clen, npub, k); +} + int aegis256_pick_best_implementation(void) { diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index edb02a1..2366b5f 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -48,6 +48,9 @@ aegis256_update(aes_block_t *const state, const aes_block_t d) struct aegis256_implementation aegis256_aesni_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index add59f0..3c48e7e 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -55,6 +55,9 @@ aegis256_update(aes_block_t *const state, const aes_block_t d) struct aegis256_implementation aegis256_armcrypto_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 1540564..2cabe26 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -213,6 +213,70 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, return ret; } +static void +randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + memset(src, 0, sizeof src); + if (npub == NULL) { + npub = src; + } + + aegis256_init(k, npub, state); + + for (i = 0; i + RATE <= len; i += RATE) { + aegis256_enc(out + i, src, state); + } + if (len % RATE) { + aegis256_enc(dst, src, state); + memcpy(out + i, dst, len % RATE); + } +} + +static void +encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + aegis256_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256_enc(c + i, m + i, state); + } + if (mlen % RATE) { + memset(src, 0, RATE); + memcpy(src, m + i, mlen % RATE); + aegis256_enc(dst, src, state); + memcpy(c + i, dst, mlen % RATE); + } +} + +static void +decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[6]; + const size_t mlen = clen; + size_t i; + + aegis256_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256_dec(m + i, c + i, state); + } + if (mlen % RATE) { + aegis256_declast(m + i, c + i, mlen % RATE, state); + } +} + typedef struct _aegis256_state { aes_block_t state[6]; uint8_t buf[RATE]; diff --git a/src/aegis256/aegis256_soft.c b/src/aegis256/aegis256_soft.c index dbc548e..9027e24 100644 --- a/src/aegis256/aegis256_soft.c +++ b/src/aegis256/aegis256_soft.c @@ -42,6 +42,9 @@ aegis256_update(aes_block_t *const state, const aes_block_t d) struct aegis256_implementation aegis256_soft_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256/implementations.h b/src/aegis256/implementations.h index 986d5e1..20d6149 100644 --- a/src/aegis256/implementations.h +++ b/src/aegis256/implementations.h @@ -12,17 +12,20 @@ typedef struct aegis256_implementation { int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); - + void (*randombytes_deterministic)(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k); + void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k); + void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k); void (*state_init)(aegis256_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); - int (*state_encrypt_update)(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *written, const uint8_t *m, size_t mlen); int (*state_encrypt_detached_final)(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *written, uint8_t *mac, size_t maclen); int (*state_encrypt_final)(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen); - int (*state_decrypt_detached_update)(aegis256_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis256_state *st_, uint8_t *m, size_t mlen_max, diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index 80e29b2..fe5cc39 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -152,6 +152,27 @@ aegis256x2_state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_ return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); } +void +aegis256x2_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k) +{ + implementation->randombytes_deterministic(out, len, npub, k); +} + +void +aegis256x2_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->encrypt_unauthenticated(c, m, mlen, npub, k); +} + +void +aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->decrypt_unauthenticated(m, c, clen, npub, k); +} + int aegis256x2_pick_best_implementation(void) { diff --git a/src/aegis256x2/aegis256x2_aesni.c b/src/aegis256x2/aegis256x2_aesni.c index 4f88d0b..0bc9c63 100644 --- a/src/aegis256x2/aegis256x2_aesni.c +++ b/src/aegis256x2/aegis256x2_aesni.c @@ -84,6 +84,9 @@ aegis256x2_update(aes_block_t *const state, const aes_block_t d) struct aegis256x2_implementation aegis256x2_aesni_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c index 5b96d60..3b1ddbd 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -90,6 +90,9 @@ aegis256x2_update(aes_block_t *const state, const aes_block_t d) struct aegis256x2_implementation aegis256x2_armcrypto_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c index ad28b81..0a23066 100644 --- a/src/aegis256x2/aegis256x2_avx2.c +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -49,6 +49,9 @@ aegis256x2_update(aes_block_t *const state, const aes_block_t d) struct aegis256x2_implementation aegis256x2_avx2_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index e422b49..84d74dd 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -259,6 +259,70 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, return ret; } +static void +randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + memset(src, 0, sizeof src); + if (npub == NULL) { + npub = src; + } + + aegis256x2_init(k, npub, state); + + for (i = 0; i + RATE <= len; i += RATE) { + aegis256x2_enc(out + i, src, state); + } + if (len % RATE) { + aegis256x2_enc(dst, src, state); + memcpy(out + i, dst, len % RATE); + } +} + +static void +encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + aegis256x2_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x2_enc(c + i, m + i, state); + } + if (mlen % RATE) { + memset(src, 0, RATE); + memcpy(src, m + i, mlen % RATE); + aegis256x2_enc(dst, src, state); + memcpy(c + i, dst, mlen % RATE); + } +} + +static void +decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[6]; + const size_t mlen = clen; + size_t i; + + aegis256x2_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x2_dec(m + i, c + i, state); + } + if (mlen % RATE) { + aegis256x2_declast(m + i, c + i, mlen % RATE, state); + } +} + typedef struct _aegis256x2_state { aes_block_t state[6]; uint8_t buf[RATE]; diff --git a/src/aegis256x2/aegis256x2_soft.c b/src/aegis256x2/aegis256x2_soft.c index facdc5c..873ee6c 100644 --- a/src/aegis256x2/aegis256x2_soft.c +++ b/src/aegis256x2/aegis256x2_soft.c @@ -76,6 +76,9 @@ aegis256x2_update(aes_block_t *const state, const aes_block_t d) struct aegis256x2_implementation aegis256x2_soft_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .randombytes_deterministic = randombytes_deterministic, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256x2/implementations.h b/src/aegis256x2/implementations.h index 28b9106..947aa4a 100644 --- a/src/aegis256x2/implementations.h +++ b/src/aegis256x2/implementations.h @@ -12,6 +12,12 @@ typedef struct aegis256x2_implementation { int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); + void (*randombytes_deterministic)(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k); + void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k); + void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k); void (*state_init)(aegis256x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); int (*state_encrypt_update)(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 7124667..8046af8 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -206,4 +206,46 @@ int aegis128l_state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, siz size_t *written, const uint8_t *mac, size_t maclen) __attribute__((warn_unused_result)); +/* + * Return a deterministic pseudo-random byte sequence. + * + * out: output buffer + * len: number of bytes to generate + * npub: nonce input buffer (16 bytes) - Can be set to `NULL` if only one sequence has to be + * generated from a given key. + * k: key input buffer (16 bytes) + */ +void aegis128l_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k); + +/* + * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols such as for QUIC header protection. + * + * c: ciphertext output buffer + * m: plaintext input buffer + * mlen: length of the plaintext + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +void aegis128l_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, + const uint8_t *npub, const uint8_t *k); + +/* + * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols such as for QUIC header protection. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, + const uint8_t *npub, const uint8_t *k); + #endif \ No newline at end of file diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 46be627..e55f0ac 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -206,4 +206,46 @@ int aegis128x2_state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, s size_t *written, const uint8_t *mac, size_t maclen) __attribute__((warn_unused_result)); +/* + * Return a deterministic pseudo-random byte sequence. + * + * out: output buffer + * len: number of bytes to generate + * npub: nonce input buffer (16 bytes) - Can be set to `NULL` if only one sequence has to be + * generated from a given key. + * k: key input buffer (16 bytes) + */ +void aegis128x2_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k); + +/* + * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols such as for QUIC header protection. + * + * c: ciphertext output buffer + * m: plaintext input buffer + * mlen: length of the plaintext + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +void aegis128x2_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, + const uint8_t *npub, const uint8_t *k); + +/* + * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols such as for QUIC header protection. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +void aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, + const uint8_t *npub, const uint8_t *k); + #endif diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index c865ee2..4878bd3 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -206,4 +206,46 @@ int aegis128x4_state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, s size_t *written, const uint8_t *mac, size_t maclen) __attribute__((warn_unused_result)); +/* + * Return a deterministic pseudo-random byte sequence. + * + * out: output buffer + * len: number of bytes to generate + * npub: nonce input buffer (16 bytes) - Can be set to `NULL` if only one sequence has to be + * generated from a given key. + * k: key input buffer (16 bytes) + */ +void aegis128x4_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k); + +/* + * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols such as for QUIC header protection. + * + * c: ciphertext output buffer + * m: plaintext input buffer + * mlen: length of the plaintext + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +void aegis128x4_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, + const uint8_t *npub, const uint8_t *k); + +/* + * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols such as for QUIC header protection. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * npub: nonce input buffer (16 bytes) + * k: key input buffer (16 bytes) + */ +void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, + const uint8_t *npub, const uint8_t *k); + #endif diff --git a/src/include/aegis256.h b/src/include/aegis256.h index 740a94f..6d456e2 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -206,4 +206,46 @@ int aegis256_state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_ size_t *written, const uint8_t *mac, size_t maclen) __attribute__((warn_unused_result)); +/* + * Return a deterministic pseudo-random byte sequence. + * + * out: output buffer + * len: number of bytes to generate + * npub: nonce input buffer (32 bytes) - Can be set to `NULL` if only one sequence has to be + * generated from a given key. + * k: key input buffer (32 bytes) + */ +void aegis256_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k); + +/* + * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols such as for QUIC header protection. + * + * c: ciphertext output buffer + * m: plaintext input buffer + * mlen: length of the plaintext + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +void aegis256_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, + const uint8_t *npub, const uint8_t *k); + +/* + * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols such as for QUIC header protection. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +void aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, + const uint8_t *npub, const uint8_t *k); + #endif diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index 30b593c..a580f96 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -206,4 +206,46 @@ int aegis256x2_state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, s size_t *written, const uint8_t *mac, size_t maclen) __attribute__((warn_unused_result)); +/* + * Return a deterministic pseudo-random byte sequence. + * + * out: output buffer + * len: number of bytes to generate + * npub: nonce input buffer (32 bytes) - Can be set to `NULL` if only one sequence has to be + * generated from a given key. + * k: key input buffer (32 bytes) + */ +void aegis256x2_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, + const uint8_t *k); + +/* + * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols such as for QUIC header protection. + * + * c: ciphertext output buffer + * m: plaintext input buffer + * mlen: length of the plaintext + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +void aegis256x2_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, + const uint8_t *npub, const uint8_t *k); + +/* + * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols such as for QUIC header protection. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +void aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, + const uint8_t *npub, const uint8_t *k); + #endif diff --git a/src/test/main.zig b/src/test/main.zig index d368680..12f8a7a 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -548,3 +548,29 @@ test "aegis-256x2 - test vector" { try testing.expectEqual(ret, 0); try std.testing.expectEqualSlices(u8, &msg, &msg2); } + +test "aegis128l - Unauthenticated encryption" { + const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; + const nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; + var msg: [100]u8 = undefined; + var msg2: [100]u8 = undefined; + + random.bytes(&msg); + aegis.aegis128l_encrypt_unauthenticated(&msg2, &msg, msg.len, &nonce, &key); + try testing.expect(!std.mem.eql(u8, &msg, &msg2)); + aegis.aegis128l_decrypt_unauthenticated(&msg2, &msg2, msg2.len, &nonce, &key); + try testing.expectEqualSlices(u8, &msg, &msg2); +} + +test "aegis128l - Random stream" { + const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; + var nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; + var msg: [100]u8 = undefined; + var msg2: [100]u8 = undefined; + aegis.aegis128l_randombytes_deterministic(&msg, msg.len, &nonce, &key); + aegis.aegis128l_randombytes_deterministic(&msg2, msg.len, &nonce, &key); + try testing.expectEqualSlices(u8, &msg, &msg2); + nonce[0] ^= 0x01; + aegis.aegis128l_randombytes_deterministic(&msg2, msg.len, &nonce, &key); + try testing.expect(!std.mem.eql(u8, &msg, &msg2)); +} From 9fab9345a4c18d157043613002dce7f180ca3821 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 19 Sep 2023 21:31:30 +0200 Subject: [PATCH 056/219] Nits --- src/test/main.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/main.zig b/src/test/main.zig index 12f8a7a..d04959c 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -568,9 +568,9 @@ test "aegis128l - Random stream" { var msg: [100]u8 = undefined; var msg2: [100]u8 = undefined; aegis.aegis128l_randombytes_deterministic(&msg, msg.len, &nonce, &key); - aegis.aegis128l_randombytes_deterministic(&msg2, msg.len, &nonce, &key); + aegis.aegis128l_randombytes_deterministic(&msg2, msg2.len, &nonce, &key); try testing.expectEqualSlices(u8, &msg, &msg2); nonce[0] ^= 0x01; - aegis.aegis128l_randombytes_deterministic(&msg2, msg.len, &nonce, &key); + aegis.aegis128l_randombytes_deterministic(&msg2, msg2.len, &nonce, &key); try testing.expect(!std.mem.eql(u8, &msg, &msg2)); } From 250546342320b45b42770e8e1c81adcce26f280e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 7 Oct 2023 12:36:07 +0200 Subject: [PATCH 057/219] QUIC header protection should use the randombytes_deterministic() instead. --- src/include/aegis128l.h | 6 +++--- src/include/aegis128x2.h | 4 ++-- src/include/aegis128x4.h | 4 ++-- src/include/aegis256.h | 4 ++-- src/include/aegis256x2.h | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 8046af8..51904b4 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -222,7 +222,7 @@ void aegis128l_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. * * WARNING: this is an insecure mode of operation, provided for compatibility with specific - * protocols such as for QUIC header protection. + * protocols that bring their own authentication scheme. * * c: ciphertext output buffer * m: plaintext input buffer @@ -237,7 +237,7 @@ void aegis128l_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. * * WARNING: this is an insecure mode of operation, provided for compatibility with specific - * protocols such as for QUIC header protection. + * protocols that bring their own authentication scheme. * * m: plaintext output buffer * c: ciphertext input buffer @@ -248,4 +248,4 @@ void aegis128l_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); -#endif \ No newline at end of file +#endif diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index e55f0ac..8e099d1 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -222,7 +222,7 @@ void aegis128x2_randombytes_deterministic(uint8_t *out, size_t len, const uint8_ * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. * * WARNING: this is an insecure mode of operation, provided for compatibility with specific - * protocols such as for QUIC header protection. + * protocols that bring their own authentication scheme. * * c: ciphertext output buffer * m: plaintext input buffer @@ -237,7 +237,7 @@ void aegis128x2_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. * * WARNING: this is an insecure mode of operation, provided for compatibility with specific - * protocols such as for QUIC header protection. + * protocols that bring their own authentication scheme. * * m: plaintext output buffer * c: ciphertext input buffer diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index 4878bd3..251d1d2 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -222,7 +222,7 @@ void aegis128x4_randombytes_deterministic(uint8_t *out, size_t len, const uint8_ * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. * * WARNING: this is an insecure mode of operation, provided for compatibility with specific - * protocols such as for QUIC header protection. + * protocols that bring their own authentication scheme. * * c: ciphertext output buffer * m: plaintext input buffer @@ -237,7 +237,7 @@ void aegis128x4_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. * * WARNING: this is an insecure mode of operation, provided for compatibility with specific - * protocols such as for QUIC header protection. + * protocols that bring their own authentication scheme. * * m: plaintext output buffer * c: ciphertext input buffer diff --git a/src/include/aegis256.h b/src/include/aegis256.h index 6d456e2..6da2a04 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -222,7 +222,7 @@ void aegis256_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. * * WARNING: this is an insecure mode of operation, provided for compatibility with specific - * protocols such as for QUIC header protection. + * protocols that bring their own authentication scheme. * * c: ciphertext output buffer * m: plaintext input buffer @@ -237,7 +237,7 @@ void aegis256_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. * * WARNING: this is an insecure mode of operation, provided for compatibility with specific - * protocols such as for QUIC header protection. + * protocols that bring their own authentication scheme. * * m: plaintext output buffer * c: ciphertext input buffer diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index a580f96..797ecb0 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -222,7 +222,7 @@ void aegis256x2_randombytes_deterministic(uint8_t *out, size_t len, const uint8_ * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. * * WARNING: this is an insecure mode of operation, provided for compatibility with specific - * protocols such as for QUIC header protection. + * protocols that bring their own authentication scheme. * * c: ciphertext output buffer * m: plaintext input buffer @@ -237,7 +237,7 @@ void aegis256x2_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. * * WARNING: this is an insecure mode of operation, provided for compatibility with specific - * protocols such as for QUIC header protection. + * protocols that bring their own authentication scheme. * * m: plaintext output buffer * c: ciphertext input buffer From 2e042ee49765a4036f3e56839bd143b4f35dc814 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 7 Oct 2023 12:42:41 +0200 Subject: [PATCH 058/219] Rename randombytes_deterministic to stream for consistency with the spec --- src/aegis128l/aegis128l.c | 4 ++-- src/aegis128l/aegis128l_aesni.c | 2 +- src/aegis128l/aegis128l_armcrypto.c | 2 +- src/aegis128l/aegis128l_common.h | 2 +- src/aegis128l/aegis128l_soft.c | 2 +- src/aegis128l/implementations.h | 3 +-- src/aegis128x2/aegis128x2.c | 5 ++--- src/aegis128x2/aegis128x2_aesni.c | 2 +- src/aegis128x2/aegis128x2_armcrypto.c | 2 +- src/aegis128x2/aegis128x2_avx2.c | 2 +- src/aegis128x2/aegis128x2_common.h | 2 +- src/aegis128x2/aegis128x2_soft.c | 2 +- src/aegis128x2/implementations.h | 3 +-- src/aegis128x4/aegis128x4.c | 5 ++--- src/aegis128x4/aegis128x4_aesni.c | 2 +- src/aegis128x4/aegis128x4_armcrypto.c | 2 +- src/aegis128x4/aegis128x4_avx2.c | 2 +- src/aegis128x4/aegis128x4_avx512.c | 2 +- src/aegis128x4/aegis128x4_common.h | 2 +- src/aegis128x4/aegis128x4_soft.c | 2 +- src/aegis128x4/implementations.h | 3 +-- src/aegis256/aegis256.c | 4 ++-- src/aegis256/aegis256_aesni.c | 2 +- src/aegis256/aegis256_armcrypto.c | 2 +- src/aegis256/aegis256_common.h | 2 +- src/aegis256/aegis256_soft.c | 2 +- src/aegis256/implementations.h | 3 +-- src/aegis256x2/aegis256x2.c | 5 ++--- src/aegis256x2/aegis256x2_aesni.c | 2 +- src/aegis256x2/aegis256x2_armcrypto.c | 2 +- src/aegis256x2/aegis256x2_avx2.c | 2 +- src/aegis256x2/aegis256x2_common.h | 2 +- src/aegis256x2/aegis256x2_soft.c | 2 +- src/aegis256x2/implementations.h | 3 +-- src/include/aegis128l.h | 3 +-- src/include/aegis128x2.h | 3 +-- src/include/aegis128x4.h | 3 +-- src/include/aegis256.h | 3 +-- src/include/aegis256x2.h | 3 +-- src/test/main.zig | 6 +++--- 40 files changed, 47 insertions(+), 60 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 7326f24..79b82a4 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -152,9 +152,9 @@ aegis128l_state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t } void -aegis128l_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +aegis128l_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - implementation->randombytes_deterministic(out, len, npub, k); + implementation->stream(out, len, npub, k); } void diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index c8ee8b8..c99aece 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -55,7 +55,7 @@ struct aegis128l_implementation aegis128l_aesni_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index 96d97a4..dde0b51 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -59,7 +59,7 @@ struct aegis128l_implementation aegis128l_armcrypto_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index f4e3409..3b0d214 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -229,7 +229,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, } static void -randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { aes_block_t state[8]; CRYPTO_ALIGN(RATE) uint8_t src[RATE]; diff --git a/src/aegis128l/aegis128l_soft.c b/src/aegis128l/aegis128l_soft.c index efa16e7..9b71f4d 100644 --- a/src/aegis128l/aegis128l_soft.c +++ b/src/aegis128l/aegis128l_soft.c @@ -49,7 +49,7 @@ struct aegis128l_implementation aegis128l_soft_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128l/implementations.h b/src/aegis128l/implementations.h index ef92753..8a52544 100644 --- a/src/aegis128l/implementations.h +++ b/src/aegis128l/implementations.h @@ -12,8 +12,7 @@ typedef struct aegis128l_implementation { int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); - void (*randombytes_deterministic)(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k); + void (*stream)(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k); void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index 430d58a..85f74ca 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -153,10 +153,9 @@ aegis128x2_state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_ } void -aegis128x2_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k) +aegis128x2_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - implementation->randombytes_deterministic(out, len, npub, k); + implementation->stream(out, len, npub, k); } void diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index dd6c829..177a24b 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -91,7 +91,7 @@ struct aegis128x2_implementation aegis128x2_aesni_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 9c73b28..d1b1e9c 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -94,7 +94,7 @@ struct aegis128x2_implementation aegis128x2_armcrypto_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index e3ac417..b918880 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -56,7 +56,7 @@ struct aegis128x2_implementation aegis128x2_avx2_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index a2ec46a..0ca2409 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -259,7 +259,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, } static void -randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { aes_block_t state[8]; CRYPTO_ALIGN(RATE) uint8_t src[RATE]; diff --git a/src/aegis128x2/aegis128x2_soft.c b/src/aegis128x2/aegis128x2_soft.c index fa458ac..a9b80b1 100644 --- a/src/aegis128x2/aegis128x2_soft.c +++ b/src/aegis128x2/aegis128x2_soft.c @@ -83,7 +83,7 @@ struct aegis128x2_implementation aegis128x2_soft_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x2/implementations.h b/src/aegis128x2/implementations.h index 9872dce..da43aed 100644 --- a/src/aegis128x2/implementations.h +++ b/src/aegis128x2/implementations.h @@ -12,8 +12,7 @@ typedef struct aegis128x2_implementation { int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); - void (*randombytes_deterministic)(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k); + void (*stream)(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k); void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index b6c33ce..cdcfef5 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -154,10 +154,9 @@ aegis128x4_state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_ } void -aegis128x4_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k) +aegis128x4_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - implementation->randombytes_deterministic(out, len, npub, k); + implementation->stream(out, len, npub, k); } void diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c index 35b52e4..2ad2816 100644 --- a/src/aegis128x4/aegis128x4_aesni.c +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -100,7 +100,7 @@ struct aegis128x4_implementation aegis128x4_aesni_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index d1e15fe..86c9a92 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -102,7 +102,7 @@ struct aegis128x4_implementation aegis128x4_armcrypto_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c index 2dc4837..b865d08 100644 --- a/src/aegis128x4/aegis128x4_avx2.c +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -90,7 +90,7 @@ struct aegis128x4_implementation aegis128x4_avx2_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 7573383..9dcc3b4 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -59,7 +59,7 @@ struct aegis128x4_implementation aegis128x4_avx512_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index f6ecae2..936f3d2 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -272,7 +272,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, } static void -randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { aes_block_t state[8]; CRYPTO_ALIGN(RATE) uint8_t src[RATE]; diff --git a/src/aegis128x4/aegis128x4_soft.c b/src/aegis128x4/aegis128x4_soft.c index 2ac197e..8b111fb 100644 --- a/src/aegis128x4/aegis128x4_soft.c +++ b/src/aegis128x4/aegis128x4_soft.c @@ -91,7 +91,7 @@ struct aegis128x4_implementation aegis128x4_soft_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis128x4/implementations.h b/src/aegis128x4/implementations.h index b3f8099..34ab769 100644 --- a/src/aegis128x4/implementations.h +++ b/src/aegis128x4/implementations.h @@ -12,8 +12,7 @@ typedef struct aegis128x4_implementation { int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); - void (*randombytes_deterministic)(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k); + void (*stream)(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k); void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index 27e6761..5a251b6 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -152,9 +152,9 @@ aegis256_state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t ml } void -aegis256_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +aegis256_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - implementation->randombytes_deterministic(out, len, npub, k); + implementation->stream(out, len, npub, k); } void diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index 2366b5f..9ab8b48 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -50,7 +50,7 @@ struct aegis256_implementation aegis256_aesni_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index 3c48e7e..fd892e3 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -57,7 +57,7 @@ struct aegis256_implementation aegis256_armcrypto_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 2cabe26..6e898a9 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -214,7 +214,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, } static void -randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { aes_block_t state[6]; CRYPTO_ALIGN(RATE) uint8_t src[RATE]; diff --git a/src/aegis256/aegis256_soft.c b/src/aegis256/aegis256_soft.c index 9027e24..5bd6935 100644 --- a/src/aegis256/aegis256_soft.c +++ b/src/aegis256/aegis256_soft.c @@ -44,7 +44,7 @@ struct aegis256_implementation aegis256_soft_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256/implementations.h b/src/aegis256/implementations.h index 20d6149..e28ea71 100644 --- a/src/aegis256/implementations.h +++ b/src/aegis256/implementations.h @@ -12,8 +12,7 @@ typedef struct aegis256_implementation { int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); - void (*randombytes_deterministic)(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k); + void (*stream)(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k); void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index fe5cc39..b126601 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -153,10 +153,9 @@ aegis256x2_state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_ } void -aegis256x2_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k) +aegis256x2_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - implementation->randombytes_deterministic(out, len, npub, k); + implementation->stream(out, len, npub, k); } void diff --git a/src/aegis256x2/aegis256x2_aesni.c b/src/aegis256x2/aegis256x2_aesni.c index 0bc9c63..af1f785 100644 --- a/src/aegis256x2/aegis256x2_aesni.c +++ b/src/aegis256x2/aegis256x2_aesni.c @@ -86,7 +86,7 @@ struct aegis256x2_implementation aegis256x2_aesni_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c index 3b1ddbd..59040f9 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -92,7 +92,7 @@ struct aegis256x2_implementation aegis256x2_armcrypto_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c index 0a23066..85d2055 100644 --- a/src/aegis256x2/aegis256x2_avx2.c +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -51,7 +51,7 @@ struct aegis256x2_implementation aegis256x2_avx2_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index 84d74dd..5e0cbe9 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -260,7 +260,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, } static void -randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { aes_block_t state[6]; CRYPTO_ALIGN(RATE) uint8_t src[RATE]; diff --git a/src/aegis256x2/aegis256x2_soft.c b/src/aegis256x2/aegis256x2_soft.c index 873ee6c..eb65c10 100644 --- a/src/aegis256x2/aegis256x2_soft.c +++ b/src/aegis256x2/aegis256x2_soft.c @@ -78,7 +78,7 @@ struct aegis256x2_implementation aegis256x2_soft_implementation = { .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, .decrypt_unauthenticated = decrypt_unauthenticated, - .randombytes_deterministic = randombytes_deterministic, + .stream = stream, .state_init = state_init, .state_encrypt_update = state_encrypt_update, .state_encrypt_detached_final = state_encrypt_detached_final, diff --git a/src/aegis256x2/implementations.h b/src/aegis256x2/implementations.h index 947aa4a..7201279 100644 --- a/src/aegis256x2/implementations.h +++ b/src/aegis256x2/implementations.h @@ -12,8 +12,7 @@ typedef struct aegis256x2_implementation { int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); - void (*randombytes_deterministic)(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k); + void (*stream)(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k); void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 51904b4..345e8ba 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -215,8 +215,7 @@ int aegis128l_state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, siz * generated from a given key. * k: key input buffer (16 bytes) */ -void aegis128l_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k); +void aegis128l_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); /* * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 8e099d1..69571ea 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -215,8 +215,7 @@ int aegis128x2_state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, s * generated from a given key. * k: key input buffer (16 bytes) */ -void aegis128x2_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k); +void aegis128x2_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); /* * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index 251d1d2..16bab86 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -215,8 +215,7 @@ int aegis128x4_state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, s * generated from a given key. * k: key input buffer (16 bytes) */ -void aegis128x4_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k); +void aegis128x4_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); /* * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. diff --git a/src/include/aegis256.h b/src/include/aegis256.h index 6da2a04..52c6b2e 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -215,8 +215,7 @@ int aegis256_state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_ * generated from a given key. * k: key input buffer (32 bytes) */ -void aegis256_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k); +void aegis256_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); /* * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index 797ecb0..d31a77f 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -215,8 +215,7 @@ int aegis256x2_state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, s * generated from a given key. * k: key input buffer (32 bytes) */ -void aegis256x2_randombytes_deterministic(uint8_t *out, size_t len, const uint8_t *npub, - const uint8_t *k); +void aegis256x2_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); /* * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. diff --git a/src/test/main.zig b/src/test/main.zig index d04959c..7d9ca19 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -567,10 +567,10 @@ test "aegis128l - Random stream" { var nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; var msg: [100]u8 = undefined; var msg2: [100]u8 = undefined; - aegis.aegis128l_randombytes_deterministic(&msg, msg.len, &nonce, &key); - aegis.aegis128l_randombytes_deterministic(&msg2, msg2.len, &nonce, &key); + aegis.aegis128l_stream(&msg, msg.len, &nonce, &key); + aegis.aegis128l_stream(&msg2, msg2.len, &nonce, &key); try testing.expectEqualSlices(u8, &msg, &msg2); nonce[0] ^= 0x01; - aegis.aegis128l_randombytes_deterministic(&msg2, msg2.len, &nonce, &key); + aegis.aegis128l_stream(&msg2, msg2.len, &nonce, &key); try testing.expect(!std.mem.eql(u8, &msg, &msg2)); } From 7a1cdbd58bdf1f50aaec0698e2c13fa721b1c187 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 8 Oct 2023 21:43:19 +0200 Subject: [PATCH 059/219] Add AEGIS-256X4 --- CMakeLists.txt | 2 +- README.md | 5 +- build.zig | 7 + src/aegis256x4/aegis256x4.c | 208 +++++++++ src/aegis256x4/aegis256x4_aesni.c | 111 +++++ src/aegis256x4/aegis256x4_aesni.h | 9 + src/aegis256x4/aegis256x4_armcrypto.c | 116 ++++++ src/aegis256x4/aegis256x4_armcrypto.h | 9 + src/aegis256x4/aegis256x4_avx2.c | 101 +++++ src/aegis256x4/aegis256x4_avx2.h | 9 + src/aegis256x4/aegis256x4_avx512.c | 72 ++++ src/aegis256x4/aegis256x4_avx512.h | 11 + src/aegis256x4/aegis256x4_common.h | 578 ++++++++++++++++++++++++++ src/aegis256x4/aegis256x4_soft.c | 98 +++++ src/aegis256x4/aegis256x4_soft.h | 9 + src/aegis256x4/implementations.h | 34 ++ src/common/common.c | 3 +- src/include/aegis.h | 1 + src/include/aegis256x4.h | 250 +++++++++++ src/test/benchmark.zig | 68 ++- src/test/main.zig | 22 + 21 files changed, 1718 insertions(+), 5 deletions(-) create mode 100644 src/aegis256x4/aegis256x4.c create mode 100644 src/aegis256x4/aegis256x4_aesni.c create mode 100644 src/aegis256x4/aegis256x4_aesni.h create mode 100644 src/aegis256x4/aegis256x4_armcrypto.c create mode 100644 src/aegis256x4/aegis256x4_armcrypto.h create mode 100644 src/aegis256x4/aegis256x4_avx2.c create mode 100644 src/aegis256x4/aegis256x4_avx2.h create mode 100644 src/aegis256x4/aegis256x4_avx512.c create mode 100644 src/aegis256x4/aegis256x4_avx512.h create mode 100644 src/aegis256x4/aegis256x4_common.h create mode 100644 src/aegis256x4/aegis256x4_soft.c create mode 100644 src/aegis256x4/aegis256x4_soft.h create mode 100644 src/aegis256x4/implementations.h create mode 100644 src/include/aegis256x4.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bf81f1..ee5f7d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ endif() include_directories("src/include") -file(GLOB SOURCE_FILES "src/aegis128l/*.c" "src/aegis128x2/*.c" "src/aegis128x4/*.c" "src/aegis256/*.c" "src/aegis256x2/*.c" "src/common/*.c") +file(GLOB SOURCE_FILES "src/aegis128l/*.c" "src/aegis128x2/*.c" "src/aegis128x4/*.c" "src/aegis256/*.c" "src/aegis256x2/*.c" "src/aegis256x4/*.c" "src/common/*.c") file(GLOB HEADER_FILES "src/include/*.h") add_library("${PROJECT_NAME}") diff --git a/README.md b/README.md index 1023514..70e604c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # libaegis -Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2, AEGIS-128X4, AEGIS-256, AEGIS-256X2), with runtime CPU detection. +Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2, AEGIS-128X4, AEGIS-256, AEGIS-256X2, AEGIS-256X4), with runtime CPU detection. ## Features @@ -9,6 +9,7 @@ Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2, AEGIS-128X4, AEGIS - AEGIS-128X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto) - AEGIS-256 with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) - AEGIS-256X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) +- AEGIS-256X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto)- - Encryption and decryption with attached and detached tags - Incremental encryption and decryption. - Unauthenticated encryption and decryption (not recommended - only implemented for specific protocols) @@ -51,5 +52,5 @@ Copy everything in `src` directly into your project, and compile everything like Include `` and call `aegis_init()` prior to doing anything else with the library. -`aegis_init()` checks the CPU capabilities in order to later use the fastest implementations. +`aegis_init()` checks the CPU capabilities in order to later use the fastest implementations. diff --git a/build.zig b/build.zig index a2f88e0..7538253 100644 --- a/build.zig +++ b/build.zig @@ -59,6 +59,13 @@ pub fn build(b: *std.Build) void { "src/aegis256x2/aegis256x2_soft.c", "src/aegis256x2/aegis256x2.c", + "src/aegis256x4/aegis256x4_aesni.c", + "src/aegis256x4/aegis256x4_avx2.c", + "src/aegis256x4/aegis256x4_avx512.c", + "src/aegis256x4/aegis256x4_armcrypto.c", + "src/aegis256x4/aegis256x4_soft.c", + "src/aegis256x4/aegis256x4.c", + "src/common/common.c", "src/common/cpu.c", "src/common/softaes.c", diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c new file mode 100644 index 0000000..e07e339 --- /dev/null +++ b/src/aegis256x4/aegis256x4.c @@ -0,0 +1,208 @@ +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "../common/cpu.h" +#include "aegis256x4.h" +#include "aegis256x4_aesni.h" +#include "aegis256x4_armcrypto.h" +#include "aegis256x4_avx2.h" +#include "aegis256x4_avx512.h" + +#ifndef HAS_HW_AES +# include "aegis256x4_soft.h" +static const aegis256x4_implementation *implementation = &aegis256x4_soft_implementation; +#else +# if defined(__aarch64__) || defined(_M_ARM64) +static const aegis256x4_implementation *implementation = &aegis256x4_armcrypto_implementation; +# elif defined(__x86_64__) || defined(__i386__) +static const aegis256x4_implementation *implementation = &aegis256x4_aesni_implementation; +# else +# error "Unsupported architecture" +# endif +#endif + +size_t +aegis256x4_keybytes(void) +{ + return aegis256x4_KEYBYTES; +} + +size_t +aegis256x4_npubbytes(void) +{ + return aegis256x4_NPUBBYTES; +} + +size_t +aegis256x4_abytes_min(void) +{ + return aegis256x4_ABYTES_MIN; +} + +size_t +aegis256x4_abytes_max(void) +{ + return aegis256x4_ABYTES_MAX; +} + +size_t +aegis256x4_tailbytes_max(void) +{ + return aegis256x4_TAILBYTES_MAX; +} + +int +aegis256x4_encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->encrypt_detached(c, mac, maclen, m, mlen, ad, adlen, npub, k); +} + +int +aegis256x4_decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->decrypt_detached(m, c, clen, mac, maclen, ad, adlen, npub, k); +} + +int +aegis256x4_encrypt(uint8_t *c, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + return aegis256x4_encrypt_detached(c, c + mlen, maclen, m, mlen, ad, adlen, npub, k); +} + +int +aegis256x4_decrypt(uint8_t *m, const uint8_t *c, size_t clen, size_t maclen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + int ret = -1; + + if (clen >= maclen) { + ret = aegis256x4_decrypt_detached(m, c, clen - maclen, c + clen - maclen, maclen, ad, adlen, + npub, k); + } + return ret; +} + +void +aegis256x4_state_init(aegis256x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + memset(st_, 0, sizeof *st_); + implementation->state_init(st_, ad, adlen, npub, k); +} + +int +aegis256x4_state_encrypt_update(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen) +{ + return implementation->state_encrypt_update(st_, c, clen_max, written, m, mlen); +} + +int +aegis256x4_state_encrypt_detached_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_encrypt_detached_final(st_, c, clen_max, written, mac, maclen); +} + +int +aegis256x4_state_encrypt_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_encrypt_final(st_, c, clen_max, written, maclen); +} + +int +aegis256x4_state_decrypt_detached_update(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) +{ + return implementation->state_decrypt_detached_update(st_, m, mlen_max, written, c, clen); +} + +int +aegis256x4_state_decrypt_detached_final(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_decrypt_detached_final(st_, m, mlen_max, written, mac, maclen); +} + +void +aegis256x4_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +{ + implementation->stream(out, len, npub, k); +} + +void +aegis256x4_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->encrypt_unauthenticated(c, m, mlen, npub, k); +} + +void +aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + implementation->decrypt_unauthenticated(m, c, clen, npub, k); +} + +int +aegis256x4_pick_best_implementation(void) +{ +#ifndef HAS_HW_AES + implementation = &aegis256x4_soft_implementation; +#endif + +#if defined(__aarch64__) || defined(_M_ARM64) + if (aegis_runtime_has_armcrypto()) { + implementation = &aegis256x4_armcrypto_implementation; + return 0; + } +#endif + +#if defined(__x86_64__) || defined(__i386__) +# ifdef HAVE_VAESINTRIN_H + if (aegis_runtime_has_vaes() && aegis_runtime_has_avx512f()) { + implementation = &aegis256x4_avx512_implementation; + return 0; + } +# endif + if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { + implementation = &aegis256x4_avx2_implementation; + return 0; + } + if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { + implementation = &aegis256x4_aesni_implementation; + return 0; + } +#endif + + return 0; /* LCOV_EXCL_LINE */ +} \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_aesni.c b/src/aegis256x4/aegis256x4_aesni.c new file mode 100644 index 0000000..0f165d9 --- /dev/null +++ b/src/aegis256x4/aegis256x4_aesni.c @@ -0,0 +1,111 @@ +#if defined(__i386__) || defined(__x86_64__) + +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis256x4.h" +# include "aegis256x4_aesni.h" + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("aes,avx"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("aes,avx") +# endif + +# include +# include + +# define AES_BLOCK_LENGTH 64 + +typedef struct { + __m128i b0; + __m128i b1; + __m128i b2; + __m128i b3; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_xor_si128(a.b0, b.b0), _mm_xor_si128(a.b1, b.b1), + _mm_xor_si128(a.b2, b.b2), _mm_xor_si128(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_and_si128(a.b0, b.b0), _mm_and_si128(a.b1, b.b1), + _mm_and_si128(a.b2, b.b2), _mm_and_si128(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { _mm_loadu_si128((const __m128i *) (const void *) a), + _mm_loadu_si128((const __m128i *) (const void *) (a + 16)), + _mm_loadu_si128((const __m128i *) (const void *) (a + 32)), + _mm_loadu_si128((const __m128i *) (const void *) (a + 48)) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const __m128i t = _mm_set_epi64x((long long) a, (long long) b); + return (aes_block_t) { t, t, t, t }; +} + +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + _mm_storeu_si128((__m128i *) (void *) a, b.b0); + _mm_storeu_si128((__m128i *) (void *) (a + 16), b.b1); + _mm_storeu_si128((__m128i *) (void *) (a + 32), b.b2); + _mm_storeu_si128((__m128i *) (void *) (a + 48), b.b3); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm_aesenc_si128(a.b0, b.b0), _mm_aesenc_si128(a.b1, b.b1), + _mm_aesenc_si128(a.b2, b.b2), _mm_aesenc_si128(a.b3, b.b3) }; +} + +static inline void +aegis256x4_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +# include "aegis256x4_common.h" + +struct aegis256x4_implementation aegis256x4_aesni_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +#endif diff --git a/src/aegis256x4/aegis256x4_aesni.h b/src/aegis256x4/aegis256x4_aesni.h new file mode 100644 index 0000000..6bdc027 --- /dev/null +++ b/src/aegis256x4/aegis256x4_aesni.h @@ -0,0 +1,9 @@ +#ifndef aegis256x4_aesni_H +#define aegis256x4_aesni_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x4_implementation aegis256x4_aesni_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_armcrypto.c b/src/aegis256x4/aegis256x4_armcrypto.c new file mode 100644 index 0000000..52fa1e0 --- /dev/null +++ b/src/aegis256x4/aegis256x4_armcrypto.c @@ -0,0 +1,116 @@ +#if defined(__aarch64__) || defined(_M_ARM64) + +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis256x4.h" +# include "aegis256x4_armcrypto.h" + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+simd+crypto") +# endif + +# ifndef __ARM_FEATURE_CRYPTO +# define __ARM_FEATURE_CRYPTO 1 +# endif +# ifndef __ARM_FEATURE_AES +# define __ARM_FEATURE_AES 1 +# endif + +# include + +# define AES_BLOCK_LENGTH 64 + +typedef struct { + uint8x16_t b0; + uint8x16_t b1; + uint8x16_t b2; + uint8x16_t b3; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { veorq_u8(a.b0, b.b0), veorq_u8(a.b1, b.b1), veorq_u8(a.b2, b.b2), + veorq_u8(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vandq_u8(a.b0, b.b0), vandq_u8(a.b1, b.b1), vandq_u8(a.b2, b.b2), + vandq_u8(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { vld1q_u8(a), vld1q_u8(a + 16), vld1q_u8(a + 32), vld1q_u8(a + 48) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const uint8x16_t t = vreinterpretq_u8_u64(vsetq_lane_u64((a), vmovq_n_u64(b), 1)); + return (aes_block_t) { t, t, t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + vst1q_u8(a, b.b0); + vst1q_u8(a + 16, b.b1); + vst1q_u8(a + 32, b.b2); + vst1q_u8(a + 48, b.b3); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8((a.b0), vmovq_n_u8(0))), (b.b0)), + veorq_u8(vaesmcq_u8(vaeseq_u8((a.b1), vmovq_n_u8(0))), (b.b1)), + veorq_u8(vaesmcq_u8(vaeseq_u8((a.b2), vmovq_n_u8(0))), (b.b2)), + veorq_u8(vaesmcq_u8(vaeseq_u8((a.b3), vmovq_n_u8(0))), (b.b3)) }; +} + +static inline void +aegis256x4_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +# include "aegis256x4_common.h" + +struct aegis256x4_implementation aegis256x4_armcrypto_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +#endif diff --git a/src/aegis256x4/aegis256x4_armcrypto.h b/src/aegis256x4/aegis256x4_armcrypto.h new file mode 100644 index 0000000..bd8e9c8 --- /dev/null +++ b/src/aegis256x4/aegis256x4_armcrypto.h @@ -0,0 +1,9 @@ +#ifndef aegis256x4_armcrypto_H +#define aegis256x4_armcrypto_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x4_implementation aegis256x4_armcrypto_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_avx2.c b/src/aegis256x4/aegis256x4_avx2.c new file mode 100644 index 0000000..113723b --- /dev/null +++ b/src/aegis256x4/aegis256x4_avx2.c @@ -0,0 +1,101 @@ +#if defined(__i386__) || defined(__x86_64__) + +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis256x4.h" +# include "aegis256x4_avx2.h" + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("vaes,avx2") +# endif + +# include + +# define AES_BLOCK_LENGTH 64 + +typedef struct { + __m256i b0; + __m256i b1; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm256_xor_si256(a.b0, b.b0), _mm256_xor_si256(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm256_and_si256(a.b0, b.b0), _mm256_and_si256(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { _mm256_loadu_si256((const __m256i *) (const void *) a), + _mm256_loadu_si256((const __m256i *) (const void *) (a + 32)) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const __m256i t = _mm256_broadcastsi128_si256(_mm_set_epi64x((long long) a, (long long) b)); + return (aes_block_t) { t, t }; +} + +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + _mm256_storeu_si256((__m256i *) (void *) a, b.b0); + _mm256_storeu_si256((__m256i *) (void *) (a + 32), b.b1); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { _mm256_aesenc_epi128(a.b0, b.b0), _mm256_aesenc_epi128(a.b1, b.b1) }; +} + +static inline void +aegis256x4_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +# include "aegis256x4_common.h" + +struct aegis256x4_implementation aegis256x4_avx2_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +#endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_avx2.h b/src/aegis256x4/aegis256x4_avx2.h new file mode 100644 index 0000000..31a16b8 --- /dev/null +++ b/src/aegis256x4/aegis256x4_avx2.h @@ -0,0 +1,9 @@ +#ifndef aegis256x4_avx2_H +#define aegis256x4_avx2_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x4_implementation aegis256x4_avx2_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_avx512.c b/src/aegis256x4/aegis256x4_avx512.c new file mode 100644 index 0000000..9ad0699 --- /dev/null +++ b/src/aegis256x4/aegis256x4_avx512.c @@ -0,0 +1,72 @@ +#if defined(__i386__) || defined(__x86_64__) + +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis256x4.h" +# include "aegis256x4_avx512.h" + +# ifdef HAVE_VAESINTRIN_H + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("vaes,avx512f"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("vaes,avx512f") +# endif + +# include + +# define AES_BLOCK_LENGTH 64 + +typedef __m512i aes_block_t; +# define AES_BLOCK_XOR(A, B) _mm512_xor_si512((A), (B)) +# define AES_BLOCK_AND(A, B) _mm512_and_si512((A), (B)) +# define AES_BLOCK_LOAD128_BROADCAST(A) \ + _mm512_broadcast_i32x4(_mm_loadu_si128((const void *) (A))) +# define AES_BLOCK_LOAD(A) _mm512_loadu_si512((const aes_block_t *) (const void *) (A)) +# define AES_BLOCK_LOAD_64x2(A, B) _mm512_broadcast_i32x4(_mm_set_epi64x((A), (B))) +# define AES_BLOCK_STORE(A, B) _mm512_storeu_si512((aes_block_t *) (void *) (A), (B)) +# define AES_ENC(A, B) _mm512_aesenc_epi128((A), (B)) + +static inline void +aegis256x4_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +# include "aegis256x4_common.h" + +struct aegis256x4_implementation aegis256x4_avx512_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +# endif + +#endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_avx512.h b/src/aegis256x4/aegis256x4_avx512.h new file mode 100644 index 0000000..47b87f1 --- /dev/null +++ b/src/aegis256x4/aegis256x4_avx512.h @@ -0,0 +1,11 @@ +#ifndef aegis256x4_avx512_H +#define aegis256x4_avx512_H + +#include "../common/common.h" +#include "implementations.h" + +#ifdef HAVE_VAESINTRIN_H +extern struct aegis256x4_implementation aegis256x4_avx512_implementation; +#endif + +#endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h new file mode 100644 index 0000000..399546d --- /dev/null +++ b/src/aegis256x4/aegis256x4_common.h @@ -0,0 +1,578 @@ +#define RATE 64 + +static void +aegis256x4_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) +{ + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c0_[AES_BLOCK_LENGTH] = { + 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, + 0xe9, 0x79, 0x62, 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, + 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62, 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, + 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62, 0x00, 0x01, 0x01, 0x02, + 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62, + }; + static CRYPTO_ALIGN(AES_BLOCK_LENGTH) const uint8_t c1_[AES_BLOCK_LENGTH] = { + 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, + 0xb5, 0x28, 0xdd, 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, + 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd, 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, + 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd, 0xdb, 0x3d, 0x18, 0x55, + 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd, + }; + + const aes_block_t c0 = AES_BLOCK_LOAD(c0_); + const aes_block_t c1 = AES_BLOCK_LOAD(c1_); + uint8_t tmp[4 * 16]; + uint8_t context_bytes[AES_BLOCK_LENGTH]; + aes_block_t context; + aes_block_t k0, k1; + aes_block_t n0, n1; + aes_block_t k0_n0, k1_n1; + int i; + + memcpy(tmp, key, 16); + memcpy(tmp + 16, key, 16); + memcpy(tmp + 32, key, 16); + memcpy(tmp + 48, key, 16); + k0 = AES_BLOCK_LOAD(tmp); + memcpy(tmp, key + 16, 16); + memcpy(tmp + 16, key + 16, 16); + memcpy(tmp + 32, key + 16, 16); + memcpy(tmp + 48, key + 16, 16); + k1 = AES_BLOCK_LOAD(tmp); + + memcpy(tmp, nonce, 16); + memcpy(tmp + 16, nonce, 16); + memcpy(tmp + 32, nonce, 16); + memcpy(tmp + 48, nonce, 16); + n0 = AES_BLOCK_LOAD(tmp); + memcpy(tmp, nonce + 16, 16); + memcpy(tmp + 16, nonce + 16, 16); + memcpy(tmp + 32, nonce + 16, 16); + memcpy(tmp + 48, nonce + 16, 16); + n1 = AES_BLOCK_LOAD(tmp); + + k0_n0 = AES_BLOCK_XOR(k0, n0); + k1_n1 = AES_BLOCK_XOR(k1, n1); + + memset(context_bytes, 0, sizeof context_bytes); + context_bytes[1 * 16] = 0x01; + context_bytes[2 * 16] = 0x02; + context_bytes[3 * 16] = 0x03; + context = AES_BLOCK_LOAD(context_bytes); + + state[0] = k0_n0; + state[1] = k1_n1; + state[2] = c1; + state[3] = c0; + state[4] = AES_BLOCK_XOR(k0, c0); + state[5] = AES_BLOCK_XOR(k1, c1); + for (i = 0; i < 4; i++) { + state[3] = AES_BLOCK_XOR(state[3], context); + state[5] = AES_BLOCK_XOR(state[5], context); + aegis256x4_update(state, k0); + state[3] = AES_BLOCK_XOR(state[3], context); + state[5] = AES_BLOCK_XOR(state[5], context); + aegis256x4_update(state, k1); + state[3] = AES_BLOCK_XOR(state[3], context); + state[5] = AES_BLOCK_XOR(state[5], context); + aegis256x4_update(state, k0_n0); + state[3] = AES_BLOCK_XOR(state[3], context); + state[5] = AES_BLOCK_XOR(state[5], context); + aegis256x4_update(state, k1_n1); + } +} + +static void +aegis256x4_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state) +{ + uint8_t mac_multi_0[AES_BLOCK_LENGTH]; + uint8_t mac_multi_1[AES_BLOCK_LENGTH]; + aes_block_t tmp; + int i; + + tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3); + tmp = AES_BLOCK_XOR(tmp, state[3]); + + for (i = 0; i < 7; i++) { + aegis256x4_update(state, tmp); + } + + if (maclen == 16) { + tmp = AES_BLOCK_XOR(state[5], state[4]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(mac_multi_0, tmp); + for (i = 0; i < 16; i++) { + mac[i] = mac_multi_0[i] ^ mac_multi_0[1 * 16 + i] ^ mac_multi_0[2 * 16 + i] ^ + mac_multi_0[3 * 16 + i]; + } + } else if (maclen == 32) { + tmp = AES_BLOCK_XOR(state[2], AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(mac_multi_0, tmp); + for (i = 0; i < 16; i++) { + mac[i] = mac_multi_0[i] ^ mac_multi_0[1 * 16 + i] ^ mac_multi_0[2 * 16 + i] ^ + mac_multi_0[3 * 16 + i]; + } + + tmp = AES_BLOCK_XOR(state[5], AES_BLOCK_XOR(state[4], state[3])); + AES_BLOCK_STORE(mac_multi_1, tmp); + for (i = 0; i < 16; i++) { + mac[i + 16] = mac_multi_1[i] ^ mac_multi_1[1 * 16 + i] ^ mac_multi_1[2 * 16 + i] ^ + mac_multi_1[3 * 16 + i]; + } + } else { + memset(mac, 0, maclen); + } +} + +static inline void +aegis256x4_absorb(const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg; + + msg = AES_BLOCK_LOAD(src); + aegis256x4_update(state, msg); +} + +static void +aegis256x4_enc(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg; + aes_block_t tmp; + + msg = AES_BLOCK_LOAD(src); + tmp = AES_BLOCK_XOR(msg, state[5]); + tmp = AES_BLOCK_XOR(tmp, state[4]); + tmp = AES_BLOCK_XOR(tmp, state[1]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_AND(state[2], state[3])); + AES_BLOCK_STORE(dst, tmp); + + aegis256x4_update(state, msg); +} + +static void +aegis256x4_dec(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block_t msg; + + msg = AES_BLOCK_LOAD(src); + msg = AES_BLOCK_XOR(msg, state[5]); + msg = AES_BLOCK_XOR(msg, state[4]); + msg = AES_BLOCK_XOR(msg, state[1]); + msg = AES_BLOCK_XOR(msg, AES_BLOCK_AND(state[2], state[3])); + AES_BLOCK_STORE(dst, msg); + + aegis256x4_update(state, msg); +} + +static void +aegis256x4_declast(uint8_t *const dst, const uint8_t *const src, size_t len, + aes_block_t *const state) +{ + uint8_t pad[RATE]; + aes_block_t msg; + + memset(pad, 0, sizeof pad); + memcpy(pad, src, len); + + msg = AES_BLOCK_LOAD(pad); + msg = AES_BLOCK_XOR(msg, state[5]); + msg = AES_BLOCK_XOR(msg, state[4]); + msg = AES_BLOCK_XOR(msg, state[1]); + msg = AES_BLOCK_XOR(msg, AES_BLOCK_AND(state[2], state[3])); + AES_BLOCK_STORE(pad, msg); + + memset(pad + len, 0, sizeof pad - len); + memcpy(dst, pad, len); + + msg = AES_BLOCK_LOAD(pad); + + aegis256x4_update(state, msg); +} + +static int +encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + aegis256x4_init(k, npub, state); + + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis256x4_absorb(ad + i, state); + } + if (adlen % RATE) { + memset(src, 0, RATE); + memcpy(src, ad + i, adlen % RATE); + aegis256x4_absorb(src, state); + } + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x4_enc(c + i, m + i, state); + } + if (mlen % RATE) { + memset(src, 0, RATE); + memcpy(src, m + i, mlen % RATE); + aegis256x4_enc(dst, src, state); + memcpy(c + i, dst, mlen % RATE); + } + + aegis256x4_mac(mac, maclen, adlen, mlen, state); + + return 0; +} + +static int +decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; + + aegis256x4_init(k, npub, state); + + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis256x4_absorb(ad + i, state); + } + if (adlen % RATE) { + memset(src, 0, RATE); + memcpy(src, ad + i, adlen % RATE); + aegis256x4_absorb(src, state); + } + if (m != NULL) { + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x4_dec(m + i, c + i, state); + } + } else { + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x4_dec(dst, c + i, state); + } + } + if (mlen % RATE) { + if (m != NULL) { + aegis256x4_declast(m + i, c + i, mlen % RATE, state); + } else { + aegis256x4_declast(dst, c + i, mlen % RATE, state); + } + } + + COMPILER_ASSERT(sizeof computed_mac >= 32); + aegis256x4_mac(computed_mac, maclen, adlen, mlen, state); + ret = -1; + if (maclen == 16) { + ret = aegis_verify_16(computed_mac, mac); + } else if (maclen == 32) { + ret = aegis_verify_32(computed_mac, mac); + } + if (ret != 0 && m != NULL) { + memset(m, 0, mlen); + } + return ret; +} + +static void +stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) +{ + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + memset(src, 0, sizeof src); + if (npub == NULL) { + npub = src; + } + + aegis256x4_init(k, npub, state); + + for (i = 0; i + RATE <= len; i += RATE) { + aegis256x4_enc(out + i, src, state); + } + if (len % RATE) { + aegis256x4_enc(dst, src, state); + memcpy(out + i, dst, len % RATE); + } +} + +static void +encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[6]; + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i; + + aegis256x4_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x4_enc(c + i, m + i, state); + } + if (mlen % RATE) { + memset(src, 0, RATE); + memcpy(src, m + i, mlen % RATE); + aegis256x4_enc(dst, src, state); + memcpy(c + i, dst, mlen % RATE); + } +} + +static void +decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k) +{ + aes_block_t state[6]; + const size_t mlen = clen; + size_t i; + + aegis256x4_init(k, npub, state); + + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x4_dec(m + i, c + i, state); + } + if (mlen % RATE) { + aegis256x4_declast(m + i, c + i, mlen % RATE, state); + } +} + +typedef struct _aegis256x4_state { + aes_block_t state[6]; + uint8_t buf[RATE]; + uint64_t adlen; + uint64_t mlen; + size_t pos; +} _aegis256x4_state; + +static void +state_init(aegis256x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) +{ + _aegis256x4_state *const st = + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + + COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); + st->mlen = 0; + st->pos = 0; + + aegis256x4_init(k, npub, st->state); + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis256x4_absorb(ad + i, st->state); + } + if (adlen % RATE) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen % RATE); + aegis256x4_absorb(st->buf, st->state); + } + st->adlen = adlen; +} + +static int +state_encrypt_update(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen) +{ + _aegis256x4_state *const st = + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i = 0; + size_t left; + + *written = 0; + st->mlen += mlen; + if (st->pos != 0) { + const size_t available = (sizeof st->buf) - st->pos; + const size_t n = mlen < available ? mlen : available; + + if (n != 0) { + memcpy(st->buf + st->pos, m + i, n); + m += n; + mlen -= n; + st->pos += n; + } + if (st->pos == sizeof st->buf) { + if (clen_max < RATE) { + errno = ERANGE; + return -1; + } + clen_max -= RATE; + aegis256x4_enc(c, st->buf, st->state); + *written += RATE; + c += RATE; + st->pos = 0; + } else { + return 0; + } + } + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { + errno = ERANGE; + return -1; + } + for (i = 0; i + RATE <= mlen; i += RATE) { + aegis256x4_enc(c + i, m + i, st->state); + } + *written += i; + left = mlen % RATE; + if (left != 0) { + memcpy(st->buf, m + i, left); + st->pos = left; + } + return 0; +} + +static int +state_encrypt_detached_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + uint8_t *mac, size_t maclen) +{ + _aegis256x4_state *const st = + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + + *written = 0; + if (clen_max < st->pos) { + errno = ERANGE; + return -1; + } + if (st->pos != 0) { + memset(src, 0, sizeof src); + memcpy(src, st->buf, st->pos); + aegis256x4_enc(dst, src, st->state); + memcpy(c, dst, st->pos); + } + aegis256x4_mac(mac, maclen, st->adlen, st->mlen, st->state); + + *written = st->pos; + + return 0; +} + +static int +state_encrypt_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen) +{ + _aegis256x4_state *const st = + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t src[RATE]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + + *written = 0; + if (clen_max < st->pos + maclen) { + errno = ERANGE; + return -1; + } + if (st->pos != 0) { + memset(src, 0, sizeof src); + memcpy(src, st->buf, st->pos); + aegis256x4_enc(dst, src, st->state); + memcpy(c, dst, st->pos); + } + aegis256x4_mac(c + st->pos, maclen, st->adlen, st->mlen, st->state); + + *written = st->pos + maclen; + + return 0; +} + +static int +state_decrypt_detached_update(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, + const uint8_t *c, size_t clen) +{ + _aegis256x4_state *const st = + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + size_t i = 0; + size_t left; + + *written = 0; + st->mlen += clen; + + if (st->pos != 0) { + const size_t available = (sizeof st->buf) - st->pos; + const size_t n = clen < available ? clen : available; + + if (n != 0) { + memcpy(st->buf + st->pos, c, n); + c += n; + clen -= n; + st->pos += n; + } + if (st->pos < (sizeof st->buf)) { + return 0; + } + st->pos = 0; + if (m != NULL) { + if (mlen_max < RATE) { + errno = ERANGE; + return -1; + } + mlen_max -= RATE; + aegis256x4_dec(m, st->buf, st->state); + m += RATE; + } else { + aegis256x4_dec(dst, st->buf, st->state); + } + *written += RATE; + } + + if (m != NULL) { + if (mlen_max < (clen % RATE)) { + errno = ERANGE; + return -1; + } + for (i = 0; i + RATE <= clen; i += RATE) { + aegis256x4_dec(m + i, c + i, st->state); + } + } else { + for (i = 0; i + RATE <= clen; i += RATE) { + aegis256x4_dec(dst, c + i, st->state); + } + } + *written += i; + left = clen % RATE; + if (left) { + memcpy(st->buf, c + i, left); + st->pos = left; + } + return 0; +} + +static int +state_decrypt_detached_final(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, + const uint8_t *mac, size_t maclen) +{ + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + _aegis256x4_state *const st = + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + int ret; + + *written = 0; + if (st->pos != 0) { + if (m != NULL) { + if (mlen_max < st->pos) { + errno = ERANGE; + return -1; + } + aegis256x4_declast(m, st->buf, st->pos, st->state); + } else { + aegis256x4_declast(dst, st->buf, st->pos, st->state); + } + } + aegis256x4_mac(computed_mac, maclen, st->adlen, st->mlen, st->state); + ret = -1; + if (maclen == 16) { + ret = aegis_verify_16(computed_mac, mac); + } else if (maclen == 32) { + ret = aegis_verify_32(computed_mac, mac); + } + if (ret == 0) { + *written = st->pos; + } else { + memset(m, 0, st->pos); + } + return ret; +} diff --git a/src/aegis256x4/aegis256x4_soft.c b/src/aegis256x4/aegis256x4_soft.c new file mode 100644 index 0000000..a619fad --- /dev/null +++ b/src/aegis256x4/aegis256x4_soft.c @@ -0,0 +1,98 @@ +#include +#include +#include +#include +#include + +#include "../common/common.h" +#include "../common/cpu.h" + +#ifndef HAS_HW_AES + +# include "../common/softaes.h" +# include "aegis256x4.h" +# include "aegis256x4_soft.h" + +# define AES_BLOCK_LENGTH 64 + +typedef struct { + SoftAesBlock b0; + SoftAesBlock b1; + SoftAesBlock b2; + SoftAesBlock b3; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_xor(a.b0, b.b0), softaes_block_xor(a.b1, b.b1), + softaes_block_xor(a.b2, b.b2), softaes_block_xor(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_and(a.b0, b.b0), softaes_block_and(a.b1, b.b1), + softaes_block_and(a.b2, b.b2), softaes_block_and(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { softaes_block_load(a), softaes_block_load(a + 16), + softaes_block_load(a + 32), softaes_block_load(a + 48) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const SoftAesBlock t = softaes_block_load64x2(a, b); + return (aes_block_t) { t, t, t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + softaes_block_store(a, b.b0); + softaes_block_store(a + 16, b.b1); + softaes_block_store(a + 32, b.b2); + softaes_block_store(a + 48, b.b3); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { softaes_block_encrypt(a.b0, b.b0), softaes_block_encrypt(a.b1, b.b1), + softaes_block_encrypt(a.b2, b.b2), softaes_block_encrypt(a.b3, b.b3) }; +} + +static inline void +aegis256x4_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +# include "aegis256x4_common.h" + +struct aegis256x4_implementation aegis256x4_soft_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, +}; + +#endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_soft.h b/src/aegis256x4/aegis256x4_soft.h new file mode 100644 index 0000000..5456b78 --- /dev/null +++ b/src/aegis256x4/aegis256x4_soft.h @@ -0,0 +1,9 @@ +#ifndef aegis256x4_soft_H +#define aegis256x4_soft_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x4_implementation aegis256x4_soft_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis256x4/implementations.h b/src/aegis256x4/implementations.h new file mode 100644 index 0000000..2a56d10 --- /dev/null +++ b/src/aegis256x4/implementations.h @@ -0,0 +1,34 @@ +#ifndef aegis256x4_implementations_H +#define aegis256x4_implementations_H + +#include +#include + +#include "aegis256x4.h" + +typedef struct aegis256x4_implementation { + int (*encrypt_detached)(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, + const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k); + int (*decrypt_detached)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + void (*stream)(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); + void (*encrypt_unauthenticated)(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, + const uint8_t *k); + void (*decrypt_unauthenticated)(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, + const uint8_t *k); + void (*state_init)(aegis256x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + int (*state_encrypt_update)(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + const uint8_t *m, size_t mlen); + int (*state_encrypt_detached_final)(aegis256x4_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen); + int (*state_encrypt_final)(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, + size_t maclen); + int (*state_decrypt_detached_update)(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen); + int (*state_decrypt_detached_final)(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen); +} aegis256x4_implementation; + +#endif diff --git a/src/common/common.c b/src/common/common.c index 91b0c04..2797457 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -38,6 +38,7 @@ extern int aegis128x2_pick_best_implementation(void); extern int aegis128x4_pick_best_implementation(void); extern int aegis256_pick_best_implementation(void); extern int aegis256x2_pick_best_implementation(void); +extern int aegis256x4_pick_best_implementation(void); int aegis_init(void) @@ -52,7 +53,7 @@ aegis_init(void) } if (aegis128l_pick_best_implementation() != 0 || aegis128x2_pick_best_implementation() != 0 || aegis128x4_pick_best_implementation() != 0 || aegis256_pick_best_implementation() != 0 || - aegis256x2_pick_best_implementation() != 0) { + aegis256x2_pick_best_implementation() != 0 || aegis256x4_pick_best_implementation() != 0) { return -1; } initialized = 1; diff --git a/src/include/aegis.h b/src/include/aegis.h index c197fb9..7a25129 100644 --- a/src/include/aegis.h +++ b/src/include/aegis.h @@ -15,6 +15,7 @@ #include "aegis128x4.h" #include "aegis256.h" #include "aegis256x2.h" +#include "aegis256x4.h" /* Initialize the AEGIS library. * diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h new file mode 100644 index 0000000..8a508bd --- /dev/null +++ b/src/include/aegis256x4.h @@ -0,0 +1,250 @@ +#ifndef aegis256x4_H +#define aegis256x4_H + +#include +#include + +/* The length of an AEGIS key, in bytes */ +#define aegis256x4_KEYBYTES 32 + +/* The length of an AEGIS nonce, in bytes */ +#define aegis256x4_NPUBBYTES 32 + +/* The minimum length of an AEGIS authentication tag, in bytes */ +#define aegis256x4_ABYTES_MIN 16 + +/* The maximum length of an AEGIS authentication tag, in bytes */ +#define aegis256x4_ABYTES_MAX 32 + +/* + * When using AEGIS in incremental mode, this is the maximum number + * of leftover ciphertext bytes that can be returned at finalization. + */ +#define aegis256x4_TAILBYTES_MAX 63 + +/* An AEGIS state, for incremental updates */ +typedef struct aegis256x4_state { + uint8_t opaque[576]; +} aegis256x4_state; + +/* The length of an AEGIS key, in bytes */ +size_t aegis256x4_keybytes(void); + +/* The length of an AEGIS nonce, in bytes */ +size_t aegis256x4_npubbytes(void); + +/* The minimum length of an AEGIS authentication tag, in bytes */ +size_t aegis256x4_abytes_min(void); + +/* The maximum length of an AEGIS authentication tag, in bytes */ +size_t aegis256x4_abytes_max(void); + +/* + * When using AEGIS in incremental mode, this is the maximum number + * of leftover ciphertext bytes that can be returned at finalization. + */ +size_t aegis256x4_tailbytes_max(void); + +/* + * Encrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext separately. + * + * c: ciphertext output buffer + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * m: plaintext input buffer + * mlen: length of the plaintext + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +int aegis256x4_encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, + size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k); + +/* + * Decrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext separately. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + * + * Returns 0 if the ciphertext is authentic, -1 otherwise. + */ +int aegis256x4_decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, + size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, + const uint8_t *k) __attribute__((warn_unused_result)); + +/* + * Encrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext together. + * + * c: ciphertext output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * m: plaintext input buffer + * mlen: length of the plaintext + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +int aegis256x4_encrypt(uint8_t *c, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k); + +/* + * Decrypt a message with AEGIS in one shot mode, returning the tag and the ciphertext together. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * maclen: length of the authentication tag (16 or 32) + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + * + * Returns 0 if the ciphertext is authentic, -1 otherwise. + */ +int aegis256x4_decrypt(uint8_t *m, const uint8_t *c, size_t clen, size_t maclen, const uint8_t *ad, + size_t adlen, const uint8_t *npub, const uint8_t *k) + __attribute__((warn_unused_result)); + +/* + * Initialize a state for incremental encryption or decryption. + * + * st_: state to initialize + * ad: additional data input buffer + * adlen: length of the additional data + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +void aegis256x4_state_init(aegis256x4_state *st_, const uint8_t *ad, size_t adlen, + const uint8_t *npub, const uint8_t *k); + +/* + * Encrypt a message chunk. + * The same function can be used regardless of whether the tag will be attached or not. + * + * st_: state to update + * c: ciphertext output buffer + * clen_max: length of the ciphertext chunk buffer (must be >= mlen) + * written: number of ciphertext bytes actually written + * m: plaintext input buffer + * mlen: length of the plaintext + * + * Return 0 on success, -1 on failure. + */ +int aegis256x4_state_encrypt_update(aegis256x4_state *st_, uint8_t *c, size_t clen_max, + size_t *written, const uint8_t *m, size_t mlen); + +/* + * Finalize the incremental encryption and generate the authentication tag. + * + * st_: state to finalize + * c: output buffer for the final ciphertext chunk + * clen_max: length of the ciphertext chunk buffer (must be >= remaining bytes) + * written: number of ciphertext bytes actually written + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis256x4_state_encrypt_detached_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, + size_t *written, uint8_t *mac, size_t maclen); + +/* + * Finalize the incremental encryption and attach the authentication tag + * to the final ciphertext chunk. + * + * st_: state to finalize + * c: output buffer for the final ciphertext chunk + * clen_max: length of the ciphertext chunk buffer (must be >= remaining bytes+maclen) + * written: number of ciphertext bytes actually written + * maclen: length of the authentication tag to generate (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis256x4_state_encrypt_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, + size_t *written, size_t maclen); + +/* + * Decrypt a message chunk. + * + * The output should never be released to the caller until the tag has been verified. + * + * st_: state to update + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= clen) + * written: number of plaintext bytes actually written + * c: ciphertext chunk input buffer + * clen: length of the ciphertext chunk + * + * Return 0 on success, -1 on failure. + */ +int aegis256x4_state_decrypt_detached_update(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *c, size_t clen) + __attribute__((warn_unused_result)); + +/* + * Decrypt the final message chunk and verify the authentication tag. + * + * st_: state to finalize + * m: plaintext output buffer + * mlen_max: length of the plaintext chunk buffer (must be >= remaining bytes) + * written: number of plaintext bytes actually written + * mac: authentication tag input buffer + * maclen: length of the authentication tag (16 or 32) + * + * Return 0 on success, -1 on failure. + */ +int aegis256x4_state_decrypt_detached_final(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, + size_t *written, const uint8_t *mac, size_t maclen) + __attribute__((warn_unused_result)); + +/* + * Return a deterministic pseudo-random byte sequence. + * + * out: output buffer + * len: number of bytes to generate + * npub: nonce input buffer (32 bytes) - Can be set to `NULL` if only one sequence has to be + * generated from a given key. + * k: key input buffer (32 bytes) + */ +void aegis256x4_stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k); + +/* + * Encrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols that bring their own authentication scheme. + * + * c: ciphertext output buffer + * m: plaintext input buffer + * mlen: length of the plaintext + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +void aegis256x4_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, + const uint8_t *npub, const uint8_t *k); + +/* + * Decrypt a message WITHOUT AUTHENTICATION, similar to AES-CTR. + * + * WARNING: this is an insecure mode of operation, provided for compatibility with specific + * protocols that bring their own authentication scheme. + * + * m: plaintext output buffer + * c: ciphertext input buffer + * clen: length of the ciphertext + * npub: nonce input buffer (32 bytes) + * k: key input buffer (32 bytes) + */ +void aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, + const uint8_t *npub, const uint8_t *k); + +#endif diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index e9d2553..ba111d8 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -11,7 +11,7 @@ const iterations = 100000; fn bench_aegis256() !void { var key: [aegis.aegis256_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; - var buf: [msg_len + aegis.aegis128x4_ABYTES_MIN]u8 = undefined; + var buf: [msg_len + aegis.aegis256_ABYTES_MIN]u8 = undefined; random.bytes(&key); random.bytes(&nonce); @@ -40,6 +40,70 @@ fn bench_aegis256() !void { try stdout.print("AEGIS-256\t{d:10.2} Mb/s\n", .{throughput}); } +fn bench_aegis256x2() !void { + var key: [aegis.aegis256x2_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis256x2_NPUBBYTES]u8 = undefined; + var buf: [msg_len + aegis.aegis256x2_ABYTES_MIN]u8 = undefined; + + random.bytes(&key); + random.bytes(&nonce); + random.bytes(&buf); + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + _ = aegis.aegis256x2_encrypt( + &buf, + aegis.aegis256x2_ABYTES_MIN, + &buf, + msg_len, + null, + 0, + &nonce, + &key, + ); + } + const end = timer.read(); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-256X2\t{d:10.2} Mb/s\n", .{throughput}); +} + +fn bench_aegis256x4() !void { + var key: [aegis.aegis256x4_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis256x4_NPUBBYTES]u8 = undefined; + var buf: [msg_len + aegis.aegis256x4_ABYTES_MIN]u8 = undefined; + + random.bytes(&key); + random.bytes(&nonce); + random.bytes(&buf); + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + _ = aegis.aegis256x4_encrypt( + &buf, + aegis.aegis256x4_ABYTES_MIN, + &buf, + msg_len, + null, + 0, + &nonce, + &key, + ); + } + const end = timer.read(); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-256X4\t{d:10.2} Mb/s\n", .{throughput}); +} + fn bench_aegis128l() !void { var key: [aegis.aegis128l_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis128l_NPUBBYTES]u8 = undefined; @@ -138,6 +202,8 @@ fn bench_aegis128x4() !void { pub fn main() !void { try bench_aegis256(); + try bench_aegis256x2(); + try bench_aegis256x4(); try bench_aegis128l(); try bench_aegis128x2(); try bench_aegis128x4(); diff --git a/src/test/main.zig b/src/test/main.zig index 7d9ca19..ae4f680 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -549,6 +549,28 @@ test "aegis-256x2 - test vector" { try std.testing.expectEqualSlices(u8, &msg, &msg2); } +test "aegis-256x4 - test vector" { + const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; + const nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; + const ad = [_]u8{ 1, 2, 3, 4 } ** 2; + const msg = [_]u8{ 5, 6, 7, 8 } ** 3; + var c = [_]u8{0} ** msg.len; + var mac = [_]u8{0} ** 16; + var ret = aegis.aegis256x4_encrypt_detached(&c, &mac, mac.len, &msg, msg.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + + const expected_ciphertext_hex = "a0b3f5b6b93db779c9d1b9de"; + try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(c, .lower), expected_ciphertext_hex); + + const expected_tag_hex = "2b05e91bb786a64b41064351a375a54f"; + try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(mac, .lower), expected_tag_hex); + + var msg2 = [_]u8{0} ** msg.len; + ret = aegis.aegis256x4_decrypt_detached(&msg2, &c, c.len, &mac, mac.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); + try std.testing.expectEqualSlices(u8, &msg, &msg2); +} + test "aegis128l - Unauthenticated encryption" { const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; const nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; From f51893673ad28f090b254e962ee329fc0eb4b65a Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 8 Oct 2023 22:52:53 +0200 Subject: [PATCH 060/219] Typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 70e604c..ccb13f5 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2, AEGIS-128X4, AEGIS - AEGIS-128X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto) - AEGIS-256 with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) - AEGIS-256X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) -- AEGIS-256X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto)- +- AEGIS-256X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto) - Encryption and decryption with attached and detached tags - Incremental encryption and decryption. - Unauthenticated encryption and decryption (not recommended - only implemented for specific protocols) From 0ff5ff424055a3479d58f67c6258bfbe39eca754 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 8 Oct 2023 23:07:49 +0200 Subject: [PATCH 061/219] Nits --- README.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ccb13f5..cf6de36 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # libaegis -Portable C implementations of AEGIS (AEGIS-128L, AEGIS-128X2, AEGIS-128X4, AEGIS-256, AEGIS-256X2, AEGIS-256X4), with runtime CPU detection. +Portable C implementations of the [AEGIS](https://datatracker.ietf.org/doc/draft-irtf-cfrg-aegis-aead/) family of authenticated ciphers (AEGIS-128L, AEGIS-128X2, AEGIS-128X4, AEGIS-256, AEGIS-256X2, AEGIS-256X4), with runtime CPU detection. ## Features @@ -33,6 +33,12 @@ To favor performance over side-channel mitigations on WebAssembly and on devices zig build -Drelease -Dfavor-performance ``` +A benchmark can also be built with the `-Dwith-benchmark` option: + +```sh +zig build -Drelease -Dwith-benchmark +``` + ### Compilation with `cmake`: ```sh @@ -54,3 +60,47 @@ Include `` and call `aegis_init()` prior to doing anything else with th `aegis_init()` checks the CPU capabilities in order to later use the fastest implementations. +## Bindings + +* [`aegis`](https://crates.io/crates/aegis) is a set of bindings for Rust. + +## Libaegis users + +* [`picotls`](https://github.com/h2o/picotls) is a TLS 1.3 implementation in C, with support for the AEGIS cipher suites. +* [`h2o`](https://h2o.examp1e.net) is an HTTP/{1,2,3} serverwith support for the AEGIS cipher suites. + +## Benchmarks + +Benchmarks of the `aegis` crate against other options for Rust: + +### AMD Zen4 + +| cipher | speed | +| ---------------------------- | --------: | +| aes128-gcm (`aes-gcm` crate) | 1.73 G/s | +| aes256-gcm (`aes-gcm` crate) | 1.86 G/s | +| chacha20-poly1305 | 2.47 G/s | +| aes256-gcm (`boring` crate) | 5.14 G/s | +| aes128-gcm (`boring` crate) | 5.92 G/s | +| aegis256 | 14.36 G/s | +| aegis256x2 | 26.92 G/s | +| aegis256x4 | 42.82 G/s | +| aegis128l | 23.35 G/s | +| aegis128x2 | 42.68 G/s | +| aegis128x4 | 55.28 G/s | + +### Macbook Pro - Apple M1 + +| cipher | speed | +| ---------------------------- | ---------: | +| aes256-gcm (`aes-gcm` crate) | 139.66 M/s | +| aes128-gcm (`aes-gcm` crate) | 173.09 M/s | +| chacha20-poly1305 | 265.48 M/s | +| aes256-gcm (`boring` crate) | 5.14 G/s | +| aes128-gcm (`boring` crate) | 6.08 G/s | +| aegis256 | 7.94 G/s | +| aegis256x2 | 10.56 G/s | +| aegis256x4 | 11.20 G/s | +| aegis128l | 14.27 G/s | +| aegis128x2 | 15.98 G/s | +| aegis128x4 | 12.01 G/s | \ No newline at end of file From 965c898ae22c0fb8359b2f93007b6efd8a0daf4b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 8 Oct 2023 23:16:35 +0200 Subject: [PATCH 062/219] Update benchmarks using zig cc instead of gcc --- README.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index cf6de36..9b06f39 100644 --- a/README.md +++ b/README.md @@ -75,22 +75,26 @@ Benchmarks of the `aegis` crate against other options for Rust: ### AMD Zen4 +rust 1.73, zig cc 0.11 + | cipher | speed | | ---------------------------- | --------: | -| aes128-gcm (`aes-gcm` crate) | 1.73 G/s | -| aes256-gcm (`aes-gcm` crate) | 1.86 G/s | -| chacha20-poly1305 | 2.47 G/s | -| aes256-gcm (`boring` crate) | 5.14 G/s | -| aes128-gcm (`boring` crate) | 5.92 G/s | -| aegis256 | 14.36 G/s | -| aegis256x2 | 26.92 G/s | -| aegis256x4 | 42.82 G/s | -| aegis128l | 23.35 G/s | -| aegis128x2 | 42.68 G/s | -| aegis128x4 | 55.28 G/s | +| aes128-gcm (`aes-gcm` crate) | 2.19 G/s | +| aes256-gcm (`aes-gcm` crate) | 2.03 G/s | +| chacha20-poly1305 | 2.00 G/s | +| aes256-gcm (`boring` crate) | 5.93 G/s | +| aes128-gcm (`boring` crate) | 6.33 G/s | +| aegis256 | 15.40 G/s | +| aegis256x2 | 30.60 G/s | +| aegis256x4 | 46.17 G/s | +| aegis128l | 26.16 G/s | +| aegis128x2 | 50.35 G/s | +| aegis128x4 | 66.22 G/s | ### Macbook Pro - Apple M1 +rust 1.73, Xcode + | cipher | speed | | ---------------------------- | ---------: | | aes256-gcm (`aes-gcm` crate) | 139.66 M/s | From d8089184a7c598494cc2daa0c2b63499f149f7a1 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 9 Oct 2023 16:32:29 +0200 Subject: [PATCH 063/219] Benchmark AEGIS as a MAC --- src/test/benchmark.zig | 103 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index ba111d8..8df8930 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -200,6 +200,105 @@ fn bench_aegis128x4() !void { try stdout.print("AEGIS-128X4\t{d:10.2} Mb/s\n", .{throughput}); } +fn bench_aegis128l_mac() !void { + var key: [aegis.aegis128l_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis128l_NPUBBYTES]u8 = undefined; + var buf: [msg_len]u8 = undefined; + + random.bytes(&key); + random.bytes(&nonce); + random.bytes(&buf); + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + _ = aegis.aegis128l_encrypt_detached( + null, + &buf, + aegis.aegis128l_ABYTES_MAX, + null, + 0, + &buf, + msg_len, + &nonce, + &key, + ); + } + const end = timer.read(); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-128L MAC\t{d:10.2} Mb/s\n", .{throughput}); +} + +fn bench_aegis128x2_mac() !void { + var key: [aegis.aegis128x2_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis128x2_NPUBBYTES]u8 = undefined; + var buf: [msg_len]u8 = undefined; + + random.bytes(&key); + random.bytes(&nonce); + random.bytes(&buf); + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + _ = aegis.aegis128x2_encrypt_detached( + null, + &buf, + aegis.aegis128x2_ABYTES_MAX, + null, + 0, + &buf, + msg_len, + &nonce, + &key, + ); + } + const end = timer.read(); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-128X2 MAC\t{d:10.2} Mb/s\n", .{throughput}); +} + +fn bench_aegis128x4_mac() !void { + var key: [aegis.aegis128x4_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis128x4_NPUBBYTES]u8 = undefined; + var buf: [msg_len]u8 = undefined; + + random.bytes(&key); + random.bytes(&nonce); + random.bytes(&buf); + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + _ = aegis.aegis128x4_encrypt_detached( + null, + &buf, + aegis.aegis128x4_ABYTES_MAX, + null, + 0, + &buf, + msg_len, + &nonce, + &key, + ); + } + const end = timer.read(); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-128X4 MAC\t{d:10.2} Mb/s\n", .{throughput}); +} + pub fn main() !void { try bench_aegis256(); try bench_aegis256x2(); @@ -207,4 +306,8 @@ pub fn main() !void { try bench_aegis128l(); try bench_aegis128x2(); try bench_aegis128x4(); + + try bench_aegis128l_mac(); + try bench_aegis128x2_mac(); + try bench_aegis128x4_mac(); } From 7e31ed0bd3c94a0f250ca1616f2cc1cd48ea9bf7 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 16 Oct 2023 18:33:31 +0200 Subject: [PATCH 064/219] Zig-master compat --- build.zig | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/build.zig b/build.zig index 7538253..5174c30 100644 --- a/build.zig +++ b/build.zig @@ -29,7 +29,7 @@ pub fn build(b: *std.Build) void { lib.addIncludePath(.{ .path = "src/include" }); - lib.addCSourceFiles(&.{ + const source_files = &.{ "src/aegis128l/aegis128l_aesni.c", "src/aegis128l/aegis128l_armcrypto.c", "src/aegis128l/aegis128l_soft.c", @@ -69,7 +69,13 @@ pub fn build(b: *std.Build) void { "src/common/common.c", "src/common/cpu.c", "src/common/softaes.c", - }, &.{}); + }; + + if (@hasDecl(std.Build.Step.Compile, "AddCSourceFilesOptions")) { + lib.addCSourceFiles(.{ .files = source_files }); + } else { + lib.addCSourceFiles(source_files, &.{}); + } // This declares intent for the executable to be installed into the // standard location when the user invokes the "install" step (the default From 2cc0cf498ab4b071d377a563863937c28b6683cc Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 16 Oct 2023 18:35:22 +0200 Subject: [PATCH 065/219] aarch64 features must be enabled after including arm_neon.h This is counterintuitive, but arm_neon.h pushes its own features, and that can eventually create errors at link time. --- src/aegis128l/aegis128l_armcrypto.c | 14 +++++++------- src/aegis128x2/aegis128x2_armcrypto.c | 14 +++++++------- src/aegis128x4/aegis128x4_armcrypto.c | 14 +++++++------- src/aegis256/aegis256_armcrypto.c | 14 +++++++------- src/aegis256x2/aegis256x2_armcrypto.c | 14 +++++++------- src/aegis256x4/aegis256x4_armcrypto.c | 14 +++++++------- 6 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index dde0b51..414a30b 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -10,13 +10,6 @@ # include "aegis128l.h" # include "aegis128l_armcrypto.h" -# ifdef __clang__ -# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) -# elif defined(__GNUC__) -# pragma GCC target("+simd+crypto") -# endif - # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 # endif @@ -26,6 +19,13 @@ # include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+simd+crypto") +# endif + # define AES_BLOCK_LENGTH 16 typedef uint8x16_t aes_block_t; diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index d1b1e9c..060c98e 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -10,13 +10,6 @@ # include "aegis128x2.h" # include "aegis128x2_armcrypto.h" -# ifdef __clang__ -# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) -# elif defined(__GNUC__) -# pragma GCC target("+simd+crypto") -# endif - # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 # endif @@ -26,6 +19,13 @@ # include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+simd+crypto") +# endif + # define AES_BLOCK_LENGTH 32 typedef struct { diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index 86c9a92..c451fab 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -10,13 +10,6 @@ # include "aegis128x4.h" # include "aegis128x4_armcrypto.h" -# ifdef __clang__ -# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) -# elif defined(__GNUC__) -# pragma GCC target("+simd+crypto") -# endif - # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 # endif @@ -26,6 +19,13 @@ # include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+simd+crypto") +# endif + # define AES_BLOCK_LENGTH 64 typedef struct { diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index fd892e3..407fa01 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -10,13 +10,6 @@ # include "aegis256.h" # include "aegis256_armcrypto.h" -# ifdef __clang__ -# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) -# elif defined(__GNUC__) -# pragma GCC target("+simd+crypto") -# endif - # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 # endif @@ -26,6 +19,13 @@ # include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+simd+crypto") +# endif + # define AES_BLOCK_LENGTH 16 typedef uint8x16_t aes_block_t; diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c index 59040f9..db23545 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -10,13 +10,6 @@ # include "aegis256x2.h" # include "aegis256x2_armcrypto.h" -# ifdef __clang__ -# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) -# elif defined(__GNUC__) -# pragma GCC target("+simd+crypto") -# endif - # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 # endif @@ -26,6 +19,13 @@ # include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+simd+crypto") +# endif + # define AES_BLOCK_LENGTH 32 typedef struct { diff --git a/src/aegis256x4/aegis256x4_armcrypto.c b/src/aegis256x4/aegis256x4_armcrypto.c index 52fa1e0..5b6a504 100644 --- a/src/aegis256x4/aegis256x4_armcrypto.c +++ b/src/aegis256x4/aegis256x4_armcrypto.c @@ -10,13 +10,6 @@ # include "aegis256x4.h" # include "aegis256x4_armcrypto.h" -# ifdef __clang__ -# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) -# elif defined(__GNUC__) -# pragma GCC target("+simd+crypto") -# endif - # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 # endif @@ -26,6 +19,13 @@ # include +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+simd+crypto") +# endif + # define AES_BLOCK_LENGTH 64 typedef struct { From 0bd5e65a6fb9ced44d745b9e292e38f3bfd32851 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 24 Oct 2023 23:01:21 +0200 Subject: [PATCH 066/219] Define NATIVE_LITTLE_ENDIAN if __BYTE_ORDER__ is defined --- src/common/common.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/common/common.h b/src/common/common.h index 5256a6f..d66321e 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -35,6 +35,12 @@ # endif #endif +#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +# ifndef NATIVE_LITTLE_ENDIAN +# define NATIVE_LITTLE_ENDIAN +# endif +#endif + #if defined(__INTEL_COMPILER) || defined(_MSC_VER) # define CRYPTO_ALIGN(x) __declspec(align(x)) #else From 60b35ee3ab9de8243195e2ff3b3b60b503c6477d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 24 Oct 2023 23:16:43 +0200 Subject: [PATCH 067/219] CRLF --- src/aegis128l/aegis128l_aesni.c | 1 + src/aegis128l/aegis128l_armcrypto.c | 1 + src/aegis128l/aegis128l_soft.c | 3 ++- src/aegis128x2/aegis128x2_avx2.c | 3 ++- src/aegis128x4/aegis128x4_avx512.c | 3 ++- src/aegis256/aegis256_aesni.c | 1 + src/aegis256/aegis256_armcrypto.c | 1 + src/aegis256/aegis256_soft.c | 3 ++- src/aegis256x2/aegis256x2_avx2.c | 3 ++- src/aegis256x4/aegis256x4_avx512.c | 3 ++- 10 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index c99aece..96da6d4 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -22,6 +22,7 @@ # define AES_BLOCK_LENGTH 16 typedef __m128i aes_block_t; + # define AES_BLOCK_XOR(A, B) _mm_xor_si128((A), (B)) # define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) # define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index 414a30b..fe09d98 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -29,6 +29,7 @@ # define AES_BLOCK_LENGTH 16 typedef uint8x16_t aes_block_t; + # define AES_BLOCK_XOR(A, B) veorq_u8((A), (B)) # define AES_BLOCK_AND(A, B) vandq_u8((A), (B)) # define AES_BLOCK_LOAD(A) vld1q_u8(A) diff --git a/src/aegis128l/aegis128l_soft.c b/src/aegis128l/aegis128l_soft.c index 9b71f4d..fc52a45 100644 --- a/src/aegis128l/aegis128l_soft.c +++ b/src/aegis128l/aegis128l_soft.c @@ -16,6 +16,7 @@ # define AES_BLOCK_LENGTH 16 typedef SoftAesBlock aes_block_t; + # define AES_BLOCK_XOR(A, B) softaes_block_xor((A), (B)) # define AES_BLOCK_AND(A, B) softaes_block_and((A), (B)) # define AES_BLOCK_LOAD(A) softaes_block_load(A) @@ -58,4 +59,4 @@ struct aegis128l_implementation aegis128l_soft_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#endif \ No newline at end of file +#endif diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index b918880..2a2442b 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -21,6 +21,7 @@ # define AES_BLOCK_LENGTH 32 typedef __m256i aes_block_t; + # define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) # define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) # define AES_BLOCK_LOAD128_BROADCAST(A) \ @@ -69,4 +70,4 @@ struct aegis128x2_implementation aegis128x2_avx2_implementation = { # pragma clang attribute pop # endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 9dcc3b4..f0fd251 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -24,6 +24,7 @@ # define AES_BLOCK_LENGTH 64 typedef __m512i aes_block_t; + # define AES_BLOCK_XOR(A, B) _mm512_xor_si512((A), (B)) # define AES_BLOCK_AND(A, B) _mm512_and_si512((A), (B)) # define AES_BLOCK_LOAD128_BROADCAST(A) \ @@ -74,4 +75,4 @@ struct aegis128x4_implementation aegis128x4_avx512_implementation = { # endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index 9ab8b48..b1a0087 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -22,6 +22,7 @@ # define AES_BLOCK_LENGTH 16 typedef __m128i aes_block_t; + # define AES_BLOCK_XOR(A, B) _mm_xor_si128((A), (B)) # define AES_BLOCK_AND(A, B) _mm_and_si128((A), (B)) # define AES_BLOCK_LOAD(A) _mm_loadu_si128((const aes_block_t *) (const void *) (A)) diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index 407fa01..8709552 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -29,6 +29,7 @@ # define AES_BLOCK_LENGTH 16 typedef uint8x16_t aes_block_t; + # define AES_BLOCK_XOR(A, B) veorq_u8((A), (B)) # define AES_BLOCK_AND(A, B) vandq_u8((A), (B)) # define AES_BLOCK_LOAD(A) vld1q_u8(A) diff --git a/src/aegis256/aegis256_soft.c b/src/aegis256/aegis256_soft.c index 5bd6935..4e8a10f 100644 --- a/src/aegis256/aegis256_soft.c +++ b/src/aegis256/aegis256_soft.c @@ -16,6 +16,7 @@ # define AES_BLOCK_LENGTH 16 typedef SoftAesBlock aes_block_t; + # define AES_BLOCK_XOR(A, B) softaes_block_xor((A), (B)) # define AES_BLOCK_AND(A, B) softaes_block_and((A), (B)) # define AES_BLOCK_LOAD(A) softaes_block_load(A) @@ -53,4 +54,4 @@ struct aegis256_implementation aegis256_soft_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -#endif \ No newline at end of file +#endif diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c index 85d2055..cc4ee70 100644 --- a/src/aegis256x2/aegis256x2_avx2.c +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -21,6 +21,7 @@ # define AES_BLOCK_LENGTH 32 typedef __m256i aes_block_t; + # define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) # define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) # define AES_BLOCK_LOAD128_BROADCAST(A) \ @@ -64,4 +65,4 @@ struct aegis256x2_implementation aegis256x2_avx2_implementation = { # pragma clang attribute pop # endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis256x4/aegis256x4_avx512.c b/src/aegis256x4/aegis256x4_avx512.c index 9ad0699..ecdf127 100644 --- a/src/aegis256x4/aegis256x4_avx512.c +++ b/src/aegis256x4/aegis256x4_avx512.c @@ -24,6 +24,7 @@ # define AES_BLOCK_LENGTH 64 typedef __m512i aes_block_t; + # define AES_BLOCK_XOR(A, B) _mm512_xor_si512((A), (B)) # define AES_BLOCK_AND(A, B) _mm512_and_si512((A), (B)) # define AES_BLOCK_LOAD128_BROADCAST(A) \ @@ -69,4 +70,4 @@ struct aegis256x4_implementation aegis256x4_avx512_implementation = { # endif -#endif \ No newline at end of file +#endif From 5b6fd28022766a3d89982555106ae0497548a5fd Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 2 Nov 2023 06:38:30 +0100 Subject: [PATCH 068/219] _M_AMD64 is the same as _M_X64 --- src/common/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/cpu.c b/src/common/cpu.c index 9b0e11b..ff13be2 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -137,7 +137,7 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) static void _cpuid(unsigned int cpu_info[4U], const unsigned int cpu_info_type) { -#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)) +#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) __cpuid((int *) cpu_info, cpu_info_type); #elif defined(HAVE_CPUID) cpu_info[0] = cpu_info[1] = cpu_info[2] = cpu_info[3] = 0; From b50cdcf763865975ba4c3958d5d0a0cb39eec328 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 6 Nov 2023 02:06:05 +0100 Subject: [PATCH 069/219] 128X and 256X: sync with the current draft (editor's copy) --- src/aegis128x2/aegis128x2_common.h | 7 +++++-- src/aegis128x4/aegis128x4_common.h | 13 ++++++++---- src/aegis256x2/aegis256x2_common.h | 7 +++++-- src/aegis256x4/aegis256x4_common.h | 13 ++++++++---- src/test/main.zig | 32 ++++++++++++++++++++---------- 5 files changed, 50 insertions(+), 22 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 0ca2409..a857643 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -32,8 +32,11 @@ aegis128x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const sta n = AES_BLOCK_LOAD(tmp); memset(context_bytes, 0, sizeof context_bytes); - context_bytes[1 * 16] = 0x01; - context = AES_BLOCK_LOAD(context_bytes); + context_bytes[0 * 16] = 0x00; + context_bytes[0 * 16 + 1] = 0x01; + context_bytes[1 * 16] = 0x01; + context_bytes[1 * 16 + 1] = 0x01; + context = AES_BLOCK_LOAD(context_bytes); state[0] = AES_BLOCK_XOR(k, n); state[1] = c1; diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 936f3d2..cba5525 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -40,10 +40,15 @@ aegis128x4_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const sta n = AES_BLOCK_LOAD(tmp); memset(context_bytes, 0, sizeof context_bytes); - context_bytes[1 * 16] = 0x01; - context_bytes[2 * 16] = 0x02; - context_bytes[3 * 16] = 0x03; - context = AES_BLOCK_LOAD(context_bytes); + context_bytes[0 * 16] = 0x00; + context_bytes[0 * 16 + 1] = 0x03; + context_bytes[1 * 16] = 0x01; + context_bytes[1 * 16 + 1] = 0x03; + context_bytes[2 * 16] = 0x02; + context_bytes[2 * 16 + 1] = 0x03; + context_bytes[3 * 16] = 0x03; + context_bytes[3 * 16 + 1] = 0x03; + context = AES_BLOCK_LOAD(context_bytes); state[0] = AES_BLOCK_XOR(k, n); state[1] = c1; diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index 5e0cbe9..fe7a6c4 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -42,8 +42,11 @@ aegis256x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const sta k1_n1 = AES_BLOCK_XOR(k1, n1); memset(context_bytes, 0, sizeof context_bytes); - context_bytes[1 * 16] = 0x01; - context = AES_BLOCK_LOAD(context_bytes); + context_bytes[0 * 16] = 0x00; + context_bytes[0 * 16 + 1] = 0x01; + context_bytes[1 * 16] = 0x01; + context_bytes[1 * 16 + 1] = 0x01; + context = AES_BLOCK_LOAD(context_bytes); state[0] = k0_n0; state[1] = k1_n1; diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index 399546d..b5748a4 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -54,10 +54,15 @@ aegis256x4_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const sta k1_n1 = AES_BLOCK_XOR(k1, n1); memset(context_bytes, 0, sizeof context_bytes); - context_bytes[1 * 16] = 0x01; - context_bytes[2 * 16] = 0x02; - context_bytes[3 * 16] = 0x03; - context = AES_BLOCK_LOAD(context_bytes); + context_bytes[0 * 16] = 0x00; + context_bytes[0 * 16 + 1] = 0x03; + context_bytes[1 * 16] = 0x01; + context_bytes[1 * 16 + 1] = 0x03; + context_bytes[2 * 16] = 0x02; + context_bytes[2 * 16 + 1] = 0x03; + context_bytes[3 * 16] = 0x03; + context_bytes[3 * 16 + 1] = 0x03; + context = AES_BLOCK_LOAD(context_bytes); state[0] = k0_n0; state[1] = k1_n1; diff --git a/src/test/main.zig b/src/test/main.zig index ae4f680..89323c3 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -416,13 +416,16 @@ test "aegis-128x2 - test vector" { const msg = [_]u8{ 4, 5, 6, 7 } ** 30; var c = [_]u8{0} ** msg.len; var mac = [_]u8{0} ** 16; + var mac256 = [_]u8{0} ** 32; var ret = aegis.aegis128x2_encrypt_detached(&c, &mac, mac.len, &msg, msg.len, &ad, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); + ret = aegis.aegis128x2_encrypt_detached(&c, &mac256, mac256.len, &msg, msg.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); - const expected_ciphertext_hex = "9958ad79ff1feea50a27d5dd88728d157a4ce0cd996b9fffb4fde113ef646de4aa67278fb1ebcb6571526b309d708447c818ffc3d84c9c73b0cca3040bb85b81d366311956f4cb1a66b02b25b58a7f759797169b0e398c4db16c9a577d4de1805d646b823fa095ec34feefb58768efc06d9516c55b653f91"; + const expected_ciphertext_hex = "5795544301997f93621b278809d6331b3bfa6f18e90db12c4aa35965b5e98c5fc6fb4e54bcb6111842c20637252eff747cb3a8f85b37de80919a589fe0f24872bc926360696739e05520647e390989e1eb5fd42f99678a0276a498f8c454761c9d6aacb647ad56be62b29c22cd4b5761b38f43d5a5ee062f"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(c, .lower), expected_ciphertext_hex); - const expected_tag_hex = "179247ab85ea2c4f9f712cac8bb7c9d3"; + const expected_tag_hex = "1aebc200804f405cab637f2adebb6d77"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(mac, .lower), expected_tag_hex); var msg2 = [_]u8{0} ** msg.len; @@ -512,13 +515,16 @@ test "aegis-128x4 - test vector" { const msg = [_]u8{ 4, 5, 6, 7 } ** 30; var c = [_]u8{0} ** msg.len; var mac = [_]u8{0} ** 16; + var mac256 = [_]u8{0} ** 32; var ret = aegis.aegis128x4_encrypt_detached(&c, &mac, mac.len, &msg, msg.len, &ad, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); + ret = aegis.aegis128x4_encrypt_detached(&c, &mac256, mac256.len, &msg, msg.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); - const expected_ciphertext_hex = "9958ad79ff1feea50a27d5dd88728d157a4ce0cd996b9fffb4fde113ef646de46e4c5230174a6268f89f01d557879360a9068d7cb825bb0e8a97ea2e82059f69aa67278fb1ebcb6571526b309d708447c818ffc3d84c9c73b0cca3040bb85b8193fc9a4499e384ae87bfeaa46f514b6330c147c3ddbb6e94"; + const expected_ciphertext_hex = "e836118562f4479c9d35c17356a833114c21f9aa39e4dda5e5c87f4152a00fce9a7c38f832eafe8b1c12f8a7cf12a81a1ad8a9c24ba9dedfbdaa586ffea67ddc801ea97d9ab4a872f42d0e352e2713dacd609f9442c17517c5a29daf3e2a3fac4ff6b1380c4e46df7b086af6ce6bc1ed594b8dd64aed2a7e"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(c, .lower), expected_ciphertext_hex); - const expected_tag_hex = "58038e00f6b7e861e2badb160beb71d4"; + const expected_tag_hex = "0e56ab94e2e85db80f9d54010caabfb4"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(mac, .lower), expected_tag_hex); var msg2 = [_]u8{0} ** msg.len; @@ -531,16 +537,19 @@ test "aegis-256x2 - test vector" { const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; const nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; const ad = [_]u8{ 1, 2, 3, 4 } ** 2; - const msg = [_]u8{ 5, 6, 7, 8 } ** 3; + const msg = [_]u8{ 5, 6, 7, 8 } ** 30; var c = [_]u8{0} ** msg.len; var mac = [_]u8{0} ** 16; + var mac256 = [_]u8{0} ** 32; var ret = aegis.aegis256x2_encrypt_detached(&c, &mac, mac.len, &msg, msg.len, &ad, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); + ret = aegis.aegis256x2_encrypt_detached(&c, &mac256, mac256.len, &msg, msg.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); - const expected_ciphertext_hex = "a0b3f5b6b93db779c9d1b9de"; + const expected_ciphertext_hex = "73110d21a920608fd77b580f1e4428087a7365cb153b4eeca6b62e1a70f7f9a8d1f31f17da4c3acfacb2517f2f5e15758c35532e33751a964d18d29a599d2dc07f9378339b9d8c9fa03d30a4d7837cc8eb8b99bcbba2d11cd1a0f994af2b8f947ef18473bd519e5283736758480abc990e79d4ccab93dde9"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(c, .lower), expected_ciphertext_hex); - const expected_tag_hex = "fd2e93a6eb0b74dc30eb984fbec1d657"; + const expected_tag_hex = "94a3bd44ad3381e36335014620ee638e"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(mac, .lower), expected_tag_hex); var msg2 = [_]u8{0} ** msg.len; @@ -553,16 +562,19 @@ test "aegis-256x4 - test vector" { const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; const nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; const ad = [_]u8{ 1, 2, 3, 4 } ** 2; - const msg = [_]u8{ 5, 6, 7, 8 } ** 3; + const msg = [_]u8{ 5, 6, 7, 8 } ** 30; var c = [_]u8{0} ** msg.len; var mac = [_]u8{0} ** 16; + var mac256 = [_]u8{0} ** 32; var ret = aegis.aegis256x4_encrypt_detached(&c, &mac, mac.len, &msg, msg.len, &ad, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); + ret = aegis.aegis256x4_encrypt_detached(&c, &mac256, mac256.len, &msg, msg.len, &ad, ad.len, &nonce, &key); + try testing.expectEqual(ret, 0); - const expected_ciphertext_hex = "a0b3f5b6b93db779c9d1b9de"; + const expected_ciphertext_hex = "bec109547f8316d598b3b7d947ad4c0ef5b98e217cffa0d858ad49ae34109a95abc5b5fada820c4d6ae2fca0f5e2444e52a04a1edb7bec71408de3e19950052194506be3ba6a4de51a15a577ea0e4c14f7539a13e751a555f48d0f49fecffb220525e60d381e2efa803b09b7164ba59fdc66656affd51e06"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(c, .lower), expected_ciphertext_hex); - const expected_tag_hex = "2b05e91bb786a64b41064351a375a54f"; + const expected_tag_hex = "ec44b512d713f745547be345bcc66b6c"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(mac, .lower), expected_tag_hex); var msg2 = [_]u8{0} ** msg.len; From 98e083b94cf14bd5fd97c34470dd5dd14b6e0a93 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 30 Nov 2023 02:16:37 +0100 Subject: [PATCH 070/219] Fix CPU detection on ARM --- src/common/cpu.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/common/cpu.c b/src/common/cpu.c index ff13be2..7959264 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -48,8 +48,6 @@ static CPUFeatures _cpu_features; static int _runtime_arm_cpu_features(CPUFeatures *const cpu_features) { - memset(cpu_features, 0, sizeof *cpu_features); - #ifndef __ARM_ARCH return -1; /* LCOV_EXCL_LINE */ #endif @@ -71,7 +69,7 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) # endif #elif defined(__arm__) && defined(AT_HWCAP) # ifdef HAVE_GETAUXVAL - cpu_features->has_neon = (getauxval(AT_HWCAP) & (1L << 12)) != 0; + cpu_features->has_neon = (getauxval(AT_HWCAP) & (1L << 12)) != 0; # elif defined(HAVE_ELF_AUX_INFO) { unsigned long buf; @@ -182,8 +180,6 @@ _runtime_intel_cpu_features(CPUFeatures *const cpu_features) unsigned int cpu_info[4]; uint32_t xcr0 = 0U; - memset(cpu_features, 0, sizeof *cpu_features); - _cpuid(cpu_info, 0x0); if (cpu_info[0] == 0U) { return -1; /* LCOV_EXCL_LINE */ @@ -266,6 +262,8 @@ aegis_runtime_get_cpu_features(void) { int ret = -1; + memset(&_cpu_features, 0, sizeof _cpu_features); + ret &= _runtime_arm_cpu_features(&_cpu_features); ret &= _runtime_intel_cpu_features(&_cpu_features); _cpu_features.initialized = 1; From b4e2eb2d9f73cfe9fd0728cd5f78b32ff1110286 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 30 Nov 2023 02:13:24 +0100 Subject: [PATCH 071/219] var -> const --- src/test/main.zig | 52 +++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/src/test/main.zig b/src/test/main.zig index 89323c3..37398d8 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -22,8 +22,9 @@ test "aegis-128l - encrypt_detached oneshot" { for (0..iterations) |_| { const msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); - var msg = msg_buf[0..msg_len]; + const msg = msg_buf[0..msg_len]; var c = c_buf[0..msg_len]; + _ = &c; const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); const ad = &ad_buf[0..ad_len]; @@ -37,6 +38,7 @@ test "aegis-128l - encrypt_detached oneshot" { try testing.expectEqual(ret, 0); var msg2 = msg2_buf[0..msg_len]; + _ = &msg2; ret = aegis.aegis128l_decrypt_detached(msg2.ptr, c.ptr, c.len, &mac, mac_len, ad.ptr, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, msg, msg2); @@ -59,8 +61,9 @@ test "aegis-256 - encrypt_detached oneshot" { for (0..iterations) |_| { const msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); - var msg = msg_buf[0..msg_len]; + const msg = msg_buf[0..msg_len]; var c = c_buf[0..msg_len]; + _ = &c; const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); const ad = &ad_buf[0..ad_len]; @@ -74,6 +77,7 @@ test "aegis-256 - encrypt_detached oneshot" { try testing.expectEqual(ret, 0); var msg2 = msg2_buf[0..msg_len]; + _ = &msg2; ret = aegis.aegis256_decrypt_detached(msg2.ptr, c.ptr, c.len, &mac, mac_len, ad.ptr, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, msg, msg2); @@ -94,15 +98,17 @@ test "aegis-128l - incremental encryption" { random.bytes(&ad_buf); - var msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); + const msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); for (&msg_buf, 0..) |*m, i| { m.* = @truncate(i); } - var msg = msg_buf[0..msg_len]; + const msg = msg_buf[0..msg_len]; var c = c_buf[0..msg_len]; + _ = &c; var c2 = c2_buf[0..msg_len]; + _ = &c2; const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); const ad = ad_buf[0..ad_len]; @@ -146,6 +152,7 @@ test "aegis-128l - incremental encryption" { try testing.expectEqualSlices(u8, c, c2); var msg2 = msg2_buf[0..msg_len]; + _ = &msg2; ret = aegis.aegis128l_decrypt_detached(msg2.ptr, c.ptr, c.len, &mac, mac_len, ad.ptr, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, msg, msg2); @@ -164,15 +171,17 @@ test "aegis-256 - incremental encryption" { random.bytes(&ad_buf); - var msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); + const msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); for (&msg_buf, 0..) |*m, i| { m.* = @truncate(i); } - var msg = msg_buf[0..msg_len]; + const msg = msg_buf[0..msg_len]; var c = c_buf[0..msg_len]; + _ = &c; var c2 = c2_buf[0..msg_len]; + _ = &c2; const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); const ad = ad_buf[0..ad_len]; @@ -216,6 +225,7 @@ test "aegis-256 - incremental encryption" { try testing.expectEqualSlices(u8, c, c2); var msg2 = msg2_buf[0..msg_len]; + _ = &msg2; ret = aegis.aegis256_decrypt_detached(msg2.ptr, c.ptr, c.len, &mac, mac_len, ad.ptr, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, msg, msg2); @@ -294,14 +304,13 @@ test "aegis-128l - incremental decryption" { random.bytes(&ad_buf); - var msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); - msg_len = 32; + const msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); for (&msg_buf, 0..) |*m, i| { m.* = @truncate(i); } - var msg = msg_buf[0..msg_len]; + const msg = msg_buf[0..msg_len]; var c = c_buf[0..msg_len]; const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); @@ -320,7 +329,8 @@ test "aegis-128l - incremental decryption" { const c0 = c[0 .. c.len / 3]; const c1 = c[c.len / 3 .. 2 * c.len / 3]; - const c2 = c[2 * c.len / 3 ..]; + var c2 = c[2 * c.len / 3 ..]; + _ = &c2; var mx = msg2_buf[0..c.len]; @@ -358,13 +368,13 @@ test "aegis-256 - incremental decryption" { random.bytes(&ad_buf); - var msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); + const msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); for (&msg_buf, 0..) |*m, i| { m.* = @truncate(i); } - var msg = msg_buf[0..msg_len]; + const msg = msg_buf[0..msg_len]; var c = c_buf[0..msg_len]; const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); @@ -381,9 +391,12 @@ test "aegis-256 - incremental decryption" { var st: aegis.aegis256_state = undefined; var written: usize = undefined; - const c0 = c[0 .. c.len / 3]; - const c1 = c[c.len / 3 .. 2 * c.len / 3]; - const c2 = c[2 * c.len / 3 ..]; + var c0 = c[0 .. c.len / 3]; + _ = &c0; + var c1 = c[c.len / 3 .. 2 * c.len / 3]; + _ = &c1; + var c2 = c[2 * c.len / 3 ..]; + _ = &c2; var mx = msg2_buf[0..c.len]; @@ -449,8 +462,9 @@ test "aegis-128x2 - encrypt_detached oneshot" { for (0..iterations) |_| { const msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); - var msg = msg_buf[0..msg_len]; + const msg = msg_buf[0..msg_len]; var c = c_buf[0..msg_len]; + _ = &c; const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); const ad = &ad_buf[0..ad_len]; @@ -464,6 +478,7 @@ test "aegis-128x2 - encrypt_detached oneshot" { try testing.expectEqual(ret, 0); var msg2 = msg2_buf[0..msg_len]; + _ = &msg2; ret = aegis.aegis128x2_decrypt_detached(msg2.ptr, c.ptr, c.len, &mac, mac_len, ad.ptr, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, msg, msg2); @@ -486,8 +501,8 @@ test "aegis-128x4 - encrypt_detached oneshot" { for (0..iterations) |_| { const msg_len = random.intRangeAtMost(usize, 0, msg_buf.len); - var msg = msg_buf[0..msg_len]; - var c = c_buf[0..msg_len]; + const msg = msg_buf[0..msg_len]; + const c = c_buf[0..msg_len]; const ad_len = random.intRangeAtMost(usize, 0, ad_buf.len); const ad = &ad_buf[0..ad_len]; @@ -501,6 +516,7 @@ test "aegis-128x4 - encrypt_detached oneshot" { try testing.expectEqual(ret, 0); var msg2 = msg2_buf[0..msg_len]; + _ = &msg2; ret = aegis.aegis128x4_decrypt_detached(msg2.ptr, c.ptr, c.len, &mac, mac_len, ad.ptr, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, msg, msg2); From 4e0fe00e3d856f75744128d9dc431bdcd0ca86eb Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 30 Nov 2023 09:50:41 +0100 Subject: [PATCH 072/219] Update benchmarks --- README.md | 58 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 9b06f39..16f8958 100644 --- a/README.md +++ b/README.md @@ -95,16 +95,48 @@ rust 1.73, zig cc 0.11 rust 1.73, Xcode -| cipher | speed | -| ---------------------------- | ---------: | -| aes256-gcm (`aes-gcm` crate) | 139.66 M/s | -| aes128-gcm (`aes-gcm` crate) | 173.09 M/s | -| chacha20-poly1305 | 265.48 M/s | -| aes256-gcm (`boring` crate) | 5.14 G/s | -| aes128-gcm (`boring` crate) | 6.08 G/s | -| aegis256 | 7.94 G/s | -| aegis256x2 | 10.56 G/s | -| aegis256x4 | 11.20 G/s | -| aegis128l | 14.27 G/s | -| aegis128x2 | 15.98 G/s | -| aegis128x4 | 12.01 G/s | \ No newline at end of file +| cipher | speed | +| ---------------------------- | --------: | +| aes256-gcm (`aes-gcm` crate) | 0.13 G/s | +| aes128-gcm (`aes-gcm` crate) | 0.17 G/s | +| chacha20-poly1305 | 0.26 G/s | +| aes256-gcm (`boring` crate) | 5.14 G/s | +| aes128-gcm (`boring` crate) | 6.08 G/s | +| aegis256 | 7.94 G/s | +| aegis256x2 | 10.56 G/s | +| aegis256x4 | 11.20 G/s | +| aegis128l | 14.27 G/s | +| aegis128x2 | 15.98 G/s | +| aegis128x4 | 12.01 G/s | + +### AWS t4g (aarch64, Graviton) + +rust 1.74, clang 15 + +| cipher | speed | +| ---------------------------- | -------: | +| aes256-gcm (`aes-gcm` crate) | 0.05 G/s | +| aes128-gcm (`aes-gcm` crate) | 0.06 G/s | +| chacha20-poly1305 | 0.10 G/s | +| aes256-gcm (`boring` crate) | 1.79 G/s | +| aes128-gcm (`boring` crate) | 2.12 G/s | +| aegis256 | 3.14 G/s | +| aegis128l | 4.30 G/s | + +### WebAssembly (Wasmtime, Zen4) + +| cipher | speed | +| ----------------- | ---------: | +| aes256-gcm | 62.97 M/s | +| aes128-gcm | 73.83 M/s | +| chacha20-poly1305 | 88.92 M/s | +| aegis128l | 537.49 M/s | + +### WebAssembly (Wasmtime, Apple M1) + +| cipher | speed | +| ----------------- | ---------: | +| aes256-gcm | 49.43 M/s | +| aes128-gcm | 59.37 M/s | +| chacha20-poly1305 | 177.85 M/s | +| aegis128l | 533.85 M/s | From ce0a1e575d3f802bddf7a150a4679e26a1469612 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 18 Dec 2023 19:57:23 +0100 Subject: [PATCH 073/219] up --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 16f8958..66b90bb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # libaegis -Portable C implementations of the [AEGIS](https://datatracker.ietf.org/doc/draft-irtf-cfrg-aegis-aead/) family of authenticated ciphers (AEGIS-128L, AEGIS-128X2, AEGIS-128X4, AEGIS-256, AEGIS-256X2, AEGIS-256X4), with runtime CPU detection. +Portable C implementations of the [AEGIS](https://datatracker.ietf.org/doc/draft-irtf-cfrg-aegis-aead/) family of high-performance authenticated ciphers (AEGIS-128L, AEGIS-128X2, AEGIS-128X4, AEGIS-256, AEGIS-256X2, AEGIS-256X4), with runtime CPU detection. ## Features From 0687b86833b685bdc3979f63fadfcbdd1ea30685 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 4 Jan 2024 12:16:28 +0100 Subject: [PATCH 074/219] Update for zig-master --- build.zig | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/build.zig b/build.zig index 5174c30..68dd2a1 100644 --- a/build.zig +++ b/build.zig @@ -8,10 +8,10 @@ pub fn build(b: *std.Build) void { .name = "libaegis", .target = target, .optimize = optimize, + .strip = true, }); lib.linkLibC(); - lib.strip = true; const lib_options = b.addOptions(); @@ -71,11 +71,7 @@ pub fn build(b: *std.Build) void { "src/common/softaes.c", }; - if (@hasDecl(std.Build.Step.Compile, "AddCSourceFilesOptions")) { - lib.addCSourceFiles(.{ .files = source_files }); - } else { - lib.addCSourceFiles(source_files, &.{}); - } + lib.addCSourceFiles(.{ .files = source_files }); // This declares intent for the executable to be installed into the // standard location when the user invokes the "install" step (the default From 657b6ca4aabd642bc8ee045b6f9d56c5360e0094 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 4 Jan 2024 12:16:44 +0100 Subject: [PATCH 075/219] 2024 --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 862656b..1eb5b62 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Frank Denis +Copyright (c) 2023-2024 Frank Denis Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 6b83b497f8886c2b15d750c4f8f7982f2c7dc994 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 4 Jan 2024 12:57:47 +0100 Subject: [PATCH 076/219] Use zig-master --- .github/workflows/ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa2caa0..62c0507 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,8 +18,6 @@ jobs: - name: Install Zig uses: goto-bus-stop/setup-zig@6fede2f0550d71291c0accf2834b216e69a2d67a - with: - version: 0.11.0 - name: Unit tests run: | From 2d90425a2b7246df15f0771516fe4da696b9a2d4 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 4 Jan 2024 12:59:01 +0100 Subject: [PATCH 077/219] Update setup-zig action --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 62c0507..52043a0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v3 - name: Install Zig - uses: goto-bus-stop/setup-zig@6fede2f0550d71291c0accf2834b216e69a2d67a + uses: goto-bus-stop/setup-zig@d866436887ad1b24590684f9d00480376663dd36 - name: Unit tests run: | From 1986b9ed2617218cf5d735e54fb2ec995096d616 Mon Sep 17 00:00:00 2001 From: Mingtao Yang Date: Wed, 24 Jan 2024 17:59:42 -0800 Subject: [PATCH 078/219] add c++ guards --- src/include/aegis.h | 7 +++++++ src/include/aegis128l.h | 8 ++++++++ src/include/aegis128x2.h | 8 ++++++++ src/include/aegis128x4.h | 8 ++++++++ src/include/aegis256.h | 8 ++++++++ src/include/aegis256x2.h | 8 ++++++++ src/include/aegis256x4.h | 8 ++++++++ 7 files changed, 55 insertions(+) diff --git a/src/include/aegis.h b/src/include/aegis.h index 7a25129..c188143 100644 --- a/src/include/aegis.h +++ b/src/include/aegis.h @@ -17,6 +17,9 @@ #include "aegis256x2.h" #include "aegis256x4.h" +#ifdef __cplusplus +extern "C" { +#endif /* Initialize the AEGIS library. * * This function does runtime CPU capability detection, and must be called once @@ -44,4 +47,8 @@ int aegis_verify_16(const uint8_t *x, const uint8_t *y) __attribute__((warn_unus */ int aegis_verify_32(const uint8_t *x, const uint8_t *y) __attribute__((warn_unused_result)); +#ifdef __cplusplus +} +#endif + #endif diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 345e8ba..1b28205 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -4,6 +4,11 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + + /* The length of an AEGIS key, in bytes */ #define aegis128l_KEYBYTES 16 @@ -246,5 +251,8 @@ void aegis128l_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen */ void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +#ifdef __cplusplus +} +#endif #endif diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 69571ea..8e3fea9 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -4,6 +4,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* The length of an AEGIS key, in bytes */ #define aegis128x2_KEYBYTES 16 @@ -247,4 +251,8 @@ void aegis128x2_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle void aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +#ifdef __cplusplus +} +#endif + #endif diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index 16bab86..f7bf8ac 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -4,6 +4,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* The length of an AEGIS key, in bytes */ #define aegis128x4_KEYBYTES 16 @@ -247,4 +251,8 @@ void aegis128x4_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +#ifdef __cplusplus +} +#endif + #endif diff --git a/src/include/aegis256.h b/src/include/aegis256.h index 52c6b2e..c080534 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -4,6 +4,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* The length of an AEGIS key, in bytes */ #define aegis256_KEYBYTES 32 @@ -247,4 +251,8 @@ void aegis256_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, void aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +#ifdef __cplusplus +} +#endif + #endif diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index d31a77f..968a8f3 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -4,6 +4,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* The length of an AEGIS key, in bytes */ #define aegis256x2_KEYBYTES 32 @@ -247,4 +251,8 @@ void aegis256x2_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle void aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +#ifdef __cplusplus +} +#endif + #endif diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index 8a508bd..478ba7b 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -4,6 +4,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* The length of an AEGIS key, in bytes */ #define aegis256x4_KEYBYTES 32 @@ -247,4 +251,8 @@ void aegis256x4_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle void aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +#ifdef __cplusplus +} +#endif + #endif From a0b6d0d1871fb9561bcfb866754a21d57aa1e707 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 25 Jan 2024 09:15:02 +0100 Subject: [PATCH 079/219] Include for __cpuid() when using Visual Studio --- src/common/cpu.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/common/cpu.c b/src/common/cpu.c index 7959264..8473028 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -16,6 +16,9 @@ #ifdef HAVE_SYS_AUXV_H # include #endif +#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) +# include +#endif typedef struct CPUFeatures_ { int initialized; From 5caead75b2685fb0ab28e36cde4ac38e7f67726d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 25 Jan 2024 09:16:20 +0100 Subject: [PATCH 080/219] Fix inconsistent spacing after the C++ guards addition --- src/include/aegis.h | 1 + src/include/aegis128l.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/include/aegis.h b/src/include/aegis.h index c188143..5bca273 100644 --- a/src/include/aegis.h +++ b/src/include/aegis.h @@ -20,6 +20,7 @@ #ifdef __cplusplus extern "C" { #endif + /* Initialize the AEGIS library. * * This function does runtime CPU capability detection, and must be called once diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 1b28205..1175af6 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -8,7 +8,6 @@ extern "C" { #endif - /* The length of an AEGIS key, in bytes */ #define aegis128l_KEYBYTES 16 @@ -251,6 +250,7 @@ void aegis128l_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen */ void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); + #ifdef __cplusplus } #endif From 2344e83d90df2c6df39dae8e99aa1682c62c0d20 Mon Sep 17 00:00:00 2001 From: Mingtao Yang Date: Tue, 19 Mar 2024 12:52:44 -0700 Subject: [PATCH 081/219] Undef HAVE_GETAUXVAL under old Android API versions `getauxval` is only available on Android API levels >= 18: https://developer.android.com/ndk/guides/cpu-features. sys/auxv.h in android is defined as: ``` unsigned long int getauxval(unsigned long int __type) __INTRODUCED_IN(18) ``` --- src/common/common.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/common/common.h b/src/common/common.h index d66321e..3723bec 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -12,6 +12,9 @@ # define HAVE_GETAUXVAL #endif #ifdef __ANDROID_API__ +# if __ANDROID_API__ < 18 +# undef HAVE_GETAUXVAL +# endif # define HAVE_ANDROID_GETCPUFEATURES #endif #if defined(__i386__) || defined(__x86_64__) From d983ed487d1c03b6efa63b5d30d50a1f8252d707 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 25 Mar 2024 22:28:43 +0100 Subject: [PATCH 082/219] Remove "lib" prefix --- build.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.zig b/build.zig index 68dd2a1..744b16c 100644 --- a/build.zig +++ b/build.zig @@ -5,7 +5,7 @@ pub fn build(b: *std.Build) void { const optimize = b.standardOptimizeOption(.{ .preferred_optimize_mode = .ReleaseFast }); const lib = b.addStaticLibrary(.{ - .name = "libaegis", + .name = "aegis", .target = target, .optimize = optimize, .strip = true, From 5b0af702f6f9925d87e99f5776d281e5641939a4 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 25 Mar 2024 22:30:00 +0100 Subject: [PATCH 083/219] Fix benchmark option --- build.zig | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/build.zig b/build.zig index 744b16c..713285d 100644 --- a/build.zig +++ b/build.zig @@ -22,10 +22,7 @@ pub fn build(b: *std.Build) void { } const with_benchmark: bool = b.option(bool, "with-benchmark", "Compile benchmark") orelse false; - lib_options.addOption(bool, "non_temporal_stores", with_benchmark); - if (with_benchmark) { - lib.defineCMacro("NON_TEMPORAL_STORES", "1"); - } + lib_options.addOption(bool, "benchmark", with_benchmark); lib.addIncludePath(.{ .path = "src/include" }); From 20bba29df0141d703962f0cd7bac1d7dddf5e792 Mon Sep 17 00:00:00 2001 From: Manuel Frischknecht Date: Thu, 25 Apr 2024 16:14:39 +0200 Subject: [PATCH 084/219] Fix CPU architecture guards for x86 and x64 on MSVC MSVC uses `_M_IX86` and `_M_AMD64` for CPU architecture guards instead of `__i386__` and `__x86_64__` [^1]. Because of that, libaegis didn't upgrade from the software implementation to those powered by AESNI or AVX when compiled with Microsoft's Visual Studio build tools. [^1]: As per the table here: https://sourceforge.net/p/predef/wiki/Architectures/ http://web.archive.org/web/20240211072249/https://sourceforge.net/p/predef/wiki/Architectures/ https://archive.is/jRq9r --- src/aegis128l/aegis128l.c | 2 +- src/aegis128l/aegis128l_aesni.c | 2 +- src/aegis128x2/aegis128x2.c | 2 +- src/aegis128x2/aegis128x2_aesni.c | 2 +- src/aegis128x2/aegis128x2_avx2.c | 2 +- src/aegis128x4/aegis128x4.c | 2 +- src/aegis128x4/aegis128x4_aesni.c | 2 +- src/aegis128x4/aegis128x4_avx2.c | 2 +- src/aegis128x4/aegis128x4_avx512.c | 2 +- src/aegis256/aegis256.c | 2 +- src/aegis256/aegis256_aesni.c | 2 +- src/aegis256x2/aegis256x2.c | 2 +- src/aegis256x2/aegis256x2_aesni.c | 2 +- src/aegis256x2/aegis256x2_avx2.c | 2 +- src/aegis256x4/aegis256x4.c | 2 +- src/aegis256x4/aegis256x4_aesni.c | 2 +- src/aegis256x4/aegis256x4_avx2.c | 2 +- src/aegis256x4/aegis256x4_avx512.c | 2 +- src/common/common.h | 5 +++-- 19 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 79b82a4..f6273f3 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -185,7 +185,7 @@ aegis128l_pick_best_implementation(void) } #endif -#if defined(__x86_64__) || defined(__i386__) +#if defined(__x86_64__) || defined(_M_AMD64) || defined(__i386__) || defined(_M_IX86) if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { implementation = &aegis128l_aesni_implementation; return 0; diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index 96da6d4..6ba60b7 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index 85f74ca..dda159d 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -186,7 +186,7 @@ aegis128x2_pick_best_implementation(void) } #endif -#if defined(__x86_64__) || defined(__i386__) +#if defined(__x86_64__) || defined(_M_AMD64) || defined(__i386__) || defined(_M_IX86) if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { implementation = &aegis128x2_avx2_implementation; return 0; diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index 177a24b..dc4340f 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index 2a2442b..44af2f6 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index cdcfef5..c68c356 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -187,7 +187,7 @@ aegis128x4_pick_best_implementation(void) } #endif -#if defined(__x86_64__) || defined(__i386__) +#if defined(__x86_64__) || defined(_M_AMD64) || defined(__i386__) || defined(_M_IX86) # ifdef HAVE_VAESINTRIN_H if (aegis_runtime_has_vaes() && aegis_runtime_has_avx512f()) { implementation = &aegis128x4_avx512_implementation; diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c index 2ad2816..6917f4b 100644 --- a/src/aegis128x4/aegis128x4_aesni.c +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c index b865d08..f704a4b 100644 --- a/src/aegis128x4/aegis128x4_avx2.c +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index f0fd251..5b325a7 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index 5a251b6..3699d60 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -185,7 +185,7 @@ aegis256_pick_best_implementation(void) } #endif -#if defined(__x86_64__) || defined(__i386__) +#if defined(__x86_64__) || defined(_M_AMD64) || defined(__i386__) || defined(_M_IX86) if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { implementation = &aegis256_aesni_implementation; return 0; diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index b1a0087..1f02c22 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index b126601..787b7e9 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -186,7 +186,7 @@ aegis256x2_pick_best_implementation(void) } #endif -#if defined(__x86_64__) || defined(__i386__) +#if defined(__x86_64__) || defined(_M_AMD64) || defined(__i386__) || defined(_M_IX86) if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { implementation = &aegis256x2_avx2_implementation; return 0; diff --git a/src/aegis256x2/aegis256x2_aesni.c b/src/aegis256x2/aegis256x2_aesni.c index af1f785..cd96d15 100644 --- a/src/aegis256x2/aegis256x2_aesni.c +++ b/src/aegis256x2/aegis256x2_aesni.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c index cc4ee70..ed8aa13 100644 --- a/src/aegis256x2/aegis256x2_avx2.c +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index e07e339..f11f9c4 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -187,7 +187,7 @@ aegis256x4_pick_best_implementation(void) } #endif -#if defined(__x86_64__) || defined(__i386__) +#if defined(__x86_64__) || defined(_M_AMD64) || defined(__i386__) || defined(_M_IX86) # ifdef HAVE_VAESINTRIN_H if (aegis_runtime_has_vaes() && aegis_runtime_has_avx512f()) { implementation = &aegis256x4_avx512_implementation; diff --git a/src/aegis256x4/aegis256x4_aesni.c b/src/aegis256x4/aegis256x4_aesni.c index 0f165d9..4cdd774 100644 --- a/src/aegis256x4/aegis256x4_aesni.c +++ b/src/aegis256x4/aegis256x4_aesni.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis256x4/aegis256x4_avx2.c b/src/aegis256x4/aegis256x4_avx2.c index 113723b..404fcda 100644 --- a/src/aegis256x4/aegis256x4_avx2.c +++ b/src/aegis256x4/aegis256x4_avx2.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/aegis256x4/aegis256x4_avx512.c b/src/aegis256x4/aegis256x4_avx512.c index ecdf127..652fee9 100644 --- a/src/aegis256x4/aegis256x4_avx512.c +++ b/src/aegis256x4/aegis256x4_avx512.c @@ -1,4 +1,4 @@ -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) # include # include diff --git a/src/common/common.h b/src/common/common.h index d66321e..a822558 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -14,14 +14,15 @@ #ifdef __ANDROID_API__ # define HAVE_ANDROID_GETCPUFEATURES #endif -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) + # define HAVE_CPUID # define NATIVE_LITTLE_ENDIAN # if defined(__clang__) || defined(__GNUC__) # define HAVE_AVX_ASM # endif #endif -#ifdef __x86_64__ +#if defined(__x86_64__) || defined(_M_AMD64) # define HAVE_AVXINTRIN_H # define HAVE_AVX2INTRIN_H # define HAVE_AVX512FINTRIN_H From 3ce51b1ed591a84fc69852337e4c29a88947a02f Mon Sep 17 00:00:00 2001 From: Manuel Frischknecht Date: Mon, 29 Apr 2024 19:47:43 +0200 Subject: [PATCH 085/219] Add/expand compile guards for VAES Some hardware accelerated implementations (e.g. aegis256x4_avx2) make use of `vaes` instructions without being gated behind `HAVE_VAESINTRIN_H`. This breaks cross compilation using rust's cross [1] build tool, presumably because the MinGW GCC implementation it packages doesn't support `vaes`. The resulting output of `cross build --target=x86_64-pc-windows-gnu` complains about GCC not knowing `vaes` as an attribute and about the respective intrinsics being unknown: ``` cargo:warning=src/c/libaegis/src/aegis128x2/aegis128x2_avx2.c:16:17: error: attribute(target("vaes")) is unknown cargo:warning= # pragma GCC target("vaes,avx2") cargo:warning= ^~~ cargo:warning=src/c/libaegis/src/aegis128x2/aegis128x2_avx2.c: In function 'aegis128x2_update': cargo:warning=src/c/libaegis/src/aegis128x2/aegis128x2_avx2.c:32:39: warning: implicit declaration of function '_mm256_aesenc_epi128'; did you mean '_mm256_bsrli_epi128'? [-Wimplicit-function-declaration] cargo:warning= # define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) cargo:warning= ^ cargo:warning=src/c/libaegis/src/aegis128x2/aegis128x2_avx2.c:40:16: note: in expansion of macro 'AES_ENC' cargo:warning= state[7] = AES_ENC(state[6], state[7]); cargo:warning= ^~~~~~~ cargo:warning=src/c/libaegis/src/aegis128x2/aegis128x2_avx2.c:40:14: error: incompatible types when assigning to type 'aes_block_t {aka __vector(4) long long int}' from type 'int' cargo:warning= state[7] = AES_ENC(state[6], state[7]); cargo:warning= ... ``` This change introduces compile-time checks for `HAVE_VAESINTRIN_H` where they aren't present yet and extends some existing checks in some implementation picking functions (which would produce missing linker targets otherwise). I also took the liberty to change the indentation for all nested pecompiler instructions where I added new #ifdef checks in the effort of keeping the overall code style in line with the other files; however, this makes the diff seem larger than it really is. [1]: https://github.com/cross-rs/cross --- src/aegis128x2/aegis128x2.c | 2 ++ src/aegis128x2/aegis128x2_avx2.c | 40 ++++++++++++++++-------------- src/aegis128x2/aegis128x2_avx2.h | 2 ++ src/aegis128x4/aegis128x4.c | 2 +- src/aegis128x4/aegis128x4_avx2.c | 26 +++++++++++--------- src/aegis128x4/aegis128x4_avx2.h | 2 ++ src/aegis256x2/aegis256x2.c | 2 ++ src/aegis256x2/aegis256x2_avx2.c | 42 +++++++++++++++++--------------- src/aegis256x2/aegis256x2_avx2.h | 2 ++ src/aegis256x4/aegis256x4.c | 2 +- src/aegis256x4/aegis256x4_avx2.c | 24 ++++++++++-------- src/aegis256x4/aegis256x4_avx2.h | 2 ++ 12 files changed, 88 insertions(+), 60 deletions(-) diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index dda159d..bd436f5 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -187,10 +187,12 @@ aegis128x2_pick_best_implementation(void) #endif #if defined(__x86_64__) || defined(_M_AMD64) || defined(__i386__) || defined(_M_IX86) +# ifdef HAVE_VAESINTRIN_H if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { implementation = &aegis128x2_avx2_implementation; return 0; } +# endif if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { implementation = &aegis128x2_aesni_implementation; return 0; diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index 44af2f6..88bb4b3 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -10,26 +10,28 @@ # include "aegis128x2.h" # include "aegis128x2_avx2.h" -# ifdef __clang__ -# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) -# elif defined(__GNUC__) -# pragma GCC target("vaes,avx2") -# endif +# ifdef HAVE_VAESINTRIN_H + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("vaes,avx2") +# endif -# include +# include -# define AES_BLOCK_LENGTH 32 +# define AES_BLOCK_LENGTH 32 typedef __m256i aes_block_t; -# define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) -# define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) -# define AES_BLOCK_LOAD128_BROADCAST(A) \ - _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) -# define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) -# define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) -# define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) -# define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) +# define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) +# define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) +# define AES_BLOCK_LOAD128_BROADCAST(A) \ + _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) +# define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) +# define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) +# define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) +# define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) static inline void aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) @@ -50,7 +52,7 @@ aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[4] = AES_BLOCK_XOR(state[4], d2); } -# include "aegis128x2_common.h" +# include "aegis128x2_common.h" struct aegis128x2_implementation aegis128x2_avx2_implementation = { .encrypt_detached = encrypt_detached, @@ -66,8 +68,10 @@ struct aegis128x2_implementation aegis128x2_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -# ifdef __clang__ -# pragma clang attribute pop +# ifdef __clang__ +# pragma clang attribute pop +# endif + # endif #endif diff --git a/src/aegis128x2/aegis128x2_avx2.h b/src/aegis128x2/aegis128x2_avx2.h index cdc18b8..6567b92 100644 --- a/src/aegis128x2/aegis128x2_avx2.h +++ b/src/aegis128x2/aegis128x2_avx2.h @@ -4,6 +4,8 @@ #include "../common/common.h" #include "implementations.h" +#ifdef HAVE_VAESINTRIN_H extern struct aegis128x2_implementation aegis128x2_avx2_implementation; +#endif #endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index c68c356..da30d14 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -193,11 +193,11 @@ aegis128x4_pick_best_implementation(void) implementation = &aegis128x4_avx512_implementation; return 0; } -# endif if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { implementation = &aegis128x4_avx2_implementation; return 0; } +# endif if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { implementation = &aegis128x4_aesni_implementation; return 0; diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c index f704a4b..aa54fba 100644 --- a/src/aegis128x4/aegis128x4_avx2.c +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -10,15 +10,17 @@ # include "aegis128x4.h" # include "aegis128x4_avx2.h" -# ifdef __clang__ -# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) -# elif defined(__GNUC__) -# pragma GCC target("vaes,avx2") -# endif +# ifdef HAVE_VAESINTRIN_H + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("vaes,avx2") +# endif -# include +# include -# define AES_BLOCK_LENGTH 64 +# define AES_BLOCK_LENGTH 64 typedef struct { __m256i b0; @@ -83,7 +85,7 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc state[4] = AES_BLOCK_XOR(state[4], d2); } -# include "aegis128x4_common.h" +# include "aegis128x4_common.h" struct aegis128x4_implementation aegis128x4_avx2_implementation = { .encrypt_detached = encrypt_detached, @@ -99,8 +101,10 @@ struct aegis128x4_implementation aegis128x4_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -# ifdef __clang__ -# pragma clang attribute pop +# ifdef __clang__ +# pragma clang attribute pop +# endif + # endif -#endif +#endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_avx2.h b/src/aegis128x4/aegis128x4_avx2.h index bd99052..62ca093 100644 --- a/src/aegis128x4/aegis128x4_avx2.h +++ b/src/aegis128x4/aegis128x4_avx2.h @@ -4,6 +4,8 @@ #include "../common/common.h" #include "implementations.h" +#ifdef HAVE_VAESINTRIN_H extern struct aegis128x4_implementation aegis128x4_avx2_implementation; +#endif #endif \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index 787b7e9..98b6960 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -187,10 +187,12 @@ aegis256x2_pick_best_implementation(void) #endif #if defined(__x86_64__) || defined(_M_AMD64) || defined(__i386__) || defined(_M_IX86) +# ifdef HAVE_VAESINTRIN_H if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { implementation = &aegis256x2_avx2_implementation; return 0; } +# endif if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { implementation = &aegis256x2_aesni_implementation; return 0; diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c index ed8aa13..c17ce5c 100644 --- a/src/aegis256x2/aegis256x2_avx2.c +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -10,26 +10,28 @@ # include "aegis256x2.h" # include "aegis256x2_avx2.h" -# ifdef __clang__ -# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) -# elif defined(__GNUC__) -# pragma GCC target("vaes,avx2") -# endif +# ifdef HAVE_VAESINTRIN_H + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("vaes,avx2") +# endif -# include +# include -# define AES_BLOCK_LENGTH 32 +# define AES_BLOCK_LENGTH 32 typedef __m256i aes_block_t; -# define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) -# define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) -# define AES_BLOCK_LOAD128_BROADCAST(A) \ - _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) -# define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) -# define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) -# define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) -# define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) +# define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B)) +# define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B)) +# define AES_BLOCK_LOAD128_BROADCAST(A) \ + _mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A))) +# define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A)) +# define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B))) +# define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B)) +# define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B)) static inline void aegis256x2_update(aes_block_t *const state, const aes_block_t d) @@ -45,7 +47,7 @@ aegis256x2_update(aes_block_t *const state, const aes_block_t d) state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); } -# include "aegis256x2_common.h" +# include "aegis256x2_common.h" struct aegis256x2_implementation aegis256x2_avx2_implementation = { .encrypt_detached = encrypt_detached, @@ -61,8 +63,10 @@ struct aegis256x2_implementation aegis256x2_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -# ifdef __clang__ -# pragma clang attribute pop +# ifdef __clang__ +# pragma clang attribute pop +# endif + # endif -#endif +#endif \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_avx2.h b/src/aegis256x2/aegis256x2_avx2.h index 223095a..ec78360 100644 --- a/src/aegis256x2/aegis256x2_avx2.h +++ b/src/aegis256x2/aegis256x2_avx2.h @@ -4,6 +4,8 @@ #include "../common/common.h" #include "implementations.h" +#ifdef HAVE_VAESINTRIN_H extern struct aegis256x2_implementation aegis256x2_avx2_implementation; +#endif #endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index f11f9c4..2c8dea7 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -193,11 +193,11 @@ aegis256x4_pick_best_implementation(void) implementation = &aegis256x4_avx512_implementation; return 0; } -# endif if (aegis_runtime_has_vaes() && aegis_runtime_has_avx2()) { implementation = &aegis256x4_avx2_implementation; return 0; } +# endif if (aegis_runtime_has_aesni() && aegis_runtime_has_avx()) { implementation = &aegis256x4_aesni_implementation; return 0; diff --git a/src/aegis256x4/aegis256x4_avx2.c b/src/aegis256x4/aegis256x4_avx2.c index 404fcda..a1bd5ba 100644 --- a/src/aegis256x4/aegis256x4_avx2.c +++ b/src/aegis256x4/aegis256x4_avx2.c @@ -10,15 +10,17 @@ # include "aegis256x4.h" # include "aegis256x4_avx2.h" -# ifdef __clang__ -# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) -# elif defined(__GNUC__) -# pragma GCC target("vaes,avx2") -# endif +# ifdef HAVE_VAESINTRIN_H + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("vaes,avx2"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("vaes,avx2") +# endif -# include +# include -# define AES_BLOCK_LENGTH 64 +# define AES_BLOCK_LENGTH 64 typedef struct { __m256i b0; @@ -78,7 +80,7 @@ aegis256x4_update(aes_block_t *const state, const aes_block_t d) state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); } -# include "aegis256x4_common.h" +# include "aegis256x4_common.h" struct aegis256x4_implementation aegis256x4_avx2_implementation = { .encrypt_detached = encrypt_detached, @@ -94,8 +96,10 @@ struct aegis256x4_implementation aegis256x4_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -# ifdef __clang__ -# pragma clang attribute pop +# ifdef __clang__ +# pragma clang attribute pop +# endif + # endif #endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_avx2.h b/src/aegis256x4/aegis256x4_avx2.h index 31a16b8..e46700c 100644 --- a/src/aegis256x4/aegis256x4_avx2.h +++ b/src/aegis256x4/aegis256x4_avx2.h @@ -4,6 +4,8 @@ #include "../common/common.h" #include "implementations.h" +#ifdef HAVE_VAESINTRIN_H extern struct aegis256x4_implementation aegis256x4_avx2_implementation; +#endif #endif \ No newline at end of file From a71b0ba1bd11602577a5ef56c4eadaf3e84d51f1 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 29 Apr 2024 22:14:17 +0200 Subject: [PATCH 086/219] Indent --- src/aegis128l/aegis128l_armcrypto.c | 2 +- src/aegis128x2/aegis128x2_armcrypto.c | 2 +- src/aegis128x4/aegis128x4_armcrypto.c | 2 +- src/aegis128x4/aegis128x4_avx512.c | 2 +- src/aegis256/aegis256_armcrypto.c | 2 +- src/aegis256x2/aegis256x2_armcrypto.c | 2 +- src/aegis256x4/aegis256x4_armcrypto.c | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index fe09d98..b6714e5 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -21,7 +21,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) + apply_to = function) # elif defined(__GNUC__) # pragma GCC target("+simd+crypto") # endif diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 060c98e..7224071 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -21,7 +21,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) + apply_to = function) # elif defined(__GNUC__) # pragma GCC target("+simd+crypto") # endif diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index c451fab..b45ad84 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -21,7 +21,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) + apply_to = function) # elif defined(__GNUC__) # pragma GCC target("+simd+crypto") # endif diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 5b325a7..1501b6d 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -14,7 +14,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("vaes,avx512f"))), \ - apply_to = function) + apply_to = function) # elif defined(__GNUC__) # pragma GCC target("vaes,avx512f") # endif diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index 8709552..52ed1a9 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -21,7 +21,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) + apply_to = function) # elif defined(__GNUC__) # pragma GCC target("+simd+crypto") # endif diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c index db23545..bf91920 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -21,7 +21,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) + apply_to = function) # elif defined(__GNUC__) # pragma GCC target("+simd+crypto") # endif diff --git a/src/aegis256x4/aegis256x4_armcrypto.c b/src/aegis256x4/aegis256x4_armcrypto.c index 5b6a504..c8d5345 100644 --- a/src/aegis256x4/aegis256x4_armcrypto.c +++ b/src/aegis256x4/aegis256x4_armcrypto.c @@ -21,7 +21,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), \ - apply_to = function) + apply_to = function) # elif defined(__GNUC__) # pragma GCC target("+simd+crypto") # endif From e42e98f07a18e3b61b0a089eef72664501decf47 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 29 Apr 2024 22:31:30 +0200 Subject: [PATCH 087/219] Indent --- src/aegis128x2/aegis128x2_avx2.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index 88bb4b3..7fd1df8 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -68,10 +68,10 @@ struct aegis128x2_implementation aegis128x2_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, }; -# ifdef __clang__ -# pragma clang attribute pop -# endif +# ifdef __clang__ +# pragma clang attribute pop +# endif # endif -#endif +#endif \ No newline at end of file From ed43018a0072dc857fab8fd8b6e6496a5f9c18c8 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 9 May 2024 21:25:26 +0200 Subject: [PATCH 088/219] Replace .{ .path = ... } with b.path() --- build.zig | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build.zig b/build.zig index 713285d..4391d90 100644 --- a/build.zig +++ b/build.zig @@ -24,7 +24,7 @@ pub fn build(b: *std.Build) void { const with_benchmark: bool = b.option(bool, "with-benchmark", "Compile benchmark") orelse false; lib_options.addOption(bool, "benchmark", with_benchmark); - lib.addIncludePath(.{ .path = "src/include" }); + lib.addIncludePath(b.path("src/include")); const source_files = &.{ "src/aegis128l/aegis128l_aesni.c", @@ -78,18 +78,18 @@ pub fn build(b: *std.Build) void { b.installDirectory(.{ .install_dir = .header, .install_subdir = "", - .source_dir = .{ .path = "src/include" }, + .source_dir = b.path("src/include"), }); // Creates a step for unit testing. This only builds the test executable // but does not run it. const main_tests = b.addTest(.{ - .root_source_file = .{ .path = "src/test/main.zig" }, + .root_source_file = b.path("src/test/main.zig"), .target = target, .optimize = optimize, }); - main_tests.addIncludePath(.{ .path = "src/include" }); + main_tests.addIncludePath(b.path("src/include")); main_tests.linkLibrary(lib); const run_main_tests = b.addRunArtifact(main_tests); @@ -103,11 +103,11 @@ pub fn build(b: *std.Build) void { if (with_benchmark) { const benchmark = b.addExecutable(.{ .name = "benchmark", - .root_source_file = .{ .path = "src/test/benchmark.zig" }, + .root_source_file = b.path("src/test/benchmark.zig"), .target = target, .optimize = optimize, }); - benchmark.addIncludePath(.{ .path = "src/include" }); + benchmark.addIncludePath(b.path("src/include")); benchmark.linkLibrary(lib); b.installArtifact(benchmark); } From 666b752ca2359f411792cb8a1f5f4fd7dc36c357 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 9 May 2024 22:26:49 +0200 Subject: [PATCH 089/219] clang >= 18 requires evex512 to use AVX512 --- src/aegis128x4/aegis128x4_avx512.c | 9 +++++++-- src/aegis256x4/aegis256x4_avx512.c | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 1501b6d..610aa0f 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -13,8 +13,13 @@ # ifdef HAVE_VAESINTRIN_H # ifdef __clang__ -# pragma clang attribute push(__attribute__((target("vaes,avx512f"))), \ - apply_to = function) +# if __clang_major__ >= 18 +# pragma clang attribute push(__attribute__((target("vaes,avx512f,evex512"))), \ + apply_to = function) +# else +# pragma clang attribute push(__attribute__((target("vaes,avx512f"))), \ + apply_to = function) +# endif # elif defined(__GNUC__) # pragma GCC target("vaes,avx512f") # endif diff --git a/src/aegis256x4/aegis256x4_avx512.c b/src/aegis256x4/aegis256x4_avx512.c index 652fee9..20ff319 100644 --- a/src/aegis256x4/aegis256x4_avx512.c +++ b/src/aegis256x4/aegis256x4_avx512.c @@ -13,8 +13,13 @@ # ifdef HAVE_VAESINTRIN_H # ifdef __clang__ -# pragma clang attribute push(__attribute__((target("vaes,avx512f"))), \ +# if __clang_major__ >= 18 +# pragma clang attribute push(__attribute__((target("vaes,avx512f,evex512"))), \ apply_to = function) +# else +# pragma clang attribute push(__attribute__((target("vaes,avx512f"))), \ + apply_to = function) +# endif # elif defined(__GNUC__) # pragma GCC target("vaes,avx512f") # endif From 8ce98783098790b6ffa7ecc344a80a7cc63ce1f6 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 10 May 2024 14:40:09 +0200 Subject: [PATCH 090/219] Start implementing AEGIS-MAC --- src/aegis128l/aegis128l.c | 43 ++++++++++++++++++++++++++ src/aegis128l/aegis128l_aesni.c | 2 ++ src/aegis128l/aegis128l_armcrypto.c | 2 ++ src/aegis128l/aegis128l_common.h | 47 ++++++++++++++++++++++++++++ src/aegis128l/aegis128l_soft.c | 2 ++ src/aegis128l/implementations.h | 2 ++ src/include/aegis128l.h | 48 +++++++++++++++++++++++++++++ src/test/benchmark.zig | 18 +++-------- src/test/main.zig | 32 +++++++++++++++++++ 9 files changed, 183 insertions(+), 13 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index f6273f3..35baef2 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -171,6 +171,49 @@ aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, con implementation->decrypt_unauthenticated(m, c, clen, npub, k); } +void +aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k) +{ + const uint8_t npub[aegis128l_NPUBBYTES] = { 0 }; + + memset(st_, 0, sizeof *st_); + implementation->state_init(st_, NULL, 0, npub, k); +} + +int +aegis128l_mac_update(aegis128l_state *st_, const uint8_t *m, size_t mlen) +{ + return implementation->state_mac_update(st_, m, mlen); +} + +int +aegis128l_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_mac_final(st_, mac, maclen); +} + +int +aegis128l_mac_verify(aegis128l_state *st_, const uint8_t *mac, size_t maclen) +{ + uint8_t expected_mac[32]; + + switch (maclen) { + case 16: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_16(expected_mac, mac); + case 32: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_32(expected_mac, mac); + default: + errno = EINVAL; + return -1; + } +} + int aegis128l_pick_best_implementation(void) { diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index 6ba60b7..2b723fd 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -63,6 +63,8 @@ struct aegis128l_implementation aegis128l_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index b6714e5..fe71516 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -67,6 +67,8 @@ struct aegis128l_implementation aegis128l_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 3b0d214..b7146ab 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -324,6 +324,53 @@ state_init(aegis128l_state *st_, const uint8_t *ad, size_t adlen, const uint8_t st->adlen = adlen; } +static int +state_mac_update(aegis128l_state *st_, const uint8_t *ad, size_t adlen) +{ + _aegis128l_state *const st = + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + size_t left; + + left = st->adlen % RATE; + st->adlen += adlen; + if (left != 0) { + if (left + adlen < RATE) { + memcpy(st->buf + left, ad, adlen); + return 0; + } + memcpy(st->buf + left, ad, RATE - left); + aegis128l_absorb(st->buf, st->state); + ad += RATE - left; + adlen -= RATE - left; + } + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis128l_absorb(ad + i, st->state); + } + if (i < adlen) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen - i); + } + return 0; +} + +static int +state_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) +{ + _aegis128l_state *const st = + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t left; + + left = st->adlen % RATE; + if (left != 0) { + memset(st->buf + left, 0, RATE - left); + aegis128l_absorb(st->buf, st->state); + } + aegis128l_mac(mac, maclen, st->adlen, 0, st->state); + + return 0; +} + static int state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *written, const uint8_t *m, size_t mlen) diff --git a/src/aegis128l/aegis128l_soft.c b/src/aegis128l/aegis128l_soft.c index fc52a45..de3e597 100644 --- a/src/aegis128l/aegis128l_soft.c +++ b/src/aegis128l/aegis128l_soft.c @@ -57,6 +57,8 @@ struct aegis128l_implementation aegis128l_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; #endif diff --git a/src/aegis128l/implementations.h b/src/aegis128l/implementations.h index 8a52544..2219ada 100644 --- a/src/aegis128l/implementations.h +++ b/src/aegis128l/implementations.h @@ -29,6 +29,8 @@ typedef struct aegis128l_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis128l_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); + int (*state_mac_update)(aegis128l_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis128l_state *st_, uint8_t *mac, size_t maclen); } aegis128l_implementation; #endif diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 1175af6..590a719 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -251,6 +251,54 @@ void aegis128l_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +/* + * Initialize a state for generating a MAC. + * + * st_: state to initialize + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + */ +void aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k); + +/* + * Update the MAC state with input data. + * + * st_: state to update + * m: input data + * mlen: length of the input data + * + * This function can be called multiple times. + * + * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. + */ +int aegis128l_mac_update(aegis128l_state *st_, const uint8_t *m, size_t mlen); + +/* + * Finalize the MAC and generate the authentication tag. + * + * st_: state to finalize + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). + */ +int aegis128l_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen); + +/* + * Verify a MAC in constant time. + * + * st_: state to verify + * mac: authentication tag to verify + * maclen: length of the authentication tag (16 or 32) + * + * Returns 0 if the tag is authentic, -1 otherwise. + */ +int aegis128l_mac_verify(aegis128l_state *st_, const uint8_t *mac, size_t maclen); + #ifdef __cplusplus } #endif diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index 8df8930..a7fb53a 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -202,27 +202,19 @@ fn bench_aegis128x4() !void { fn bench_aegis128l_mac() !void { var key: [aegis.aegis128l_KEYBYTES]u8 = undefined; - var nonce: [aegis.aegis128l_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; + var st0: aegis.aegis128l_state = undefined; random.bytes(&key); - random.bytes(&nonce); random.bytes(&buf); + aegis.aegis128l_mac_init(&st0, &key); var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - _ = aegis.aegis128l_encrypt_detached( - null, - &buf, - aegis.aegis128l_ABYTES_MAX, - null, - 0, - &buf, - msg_len, - &nonce, - &key, - ); + var st = st0; + _ = aegis.aegis128l_mac_update(&st, &buf, msg_len); + _ = aegis.aegis128l_mac_final(&st, &buf, aegis.aegis128l_ABYTES_MIN); } const end = timer.read(); mem.doNotOptimizeAway(buf[0]); diff --git a/src/test/main.zig b/src/test/main.zig index 37398d8..c26715b 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -624,3 +624,35 @@ test "aegis128l - Random stream" { aegis.aegis128l_stream(&msg2, msg2.len, &nonce, &key); try testing.expect(!std.mem.eql(u8, &msg, &msg2)); } + +test "aegis128l - MAC" { + const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; + const msg = [_]u8{ 1, 2, 3 } ** 30; + const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 30; + var st0: aegis.aegis128l_state = undefined; + aegis.aegis128l_mac_init(&st0, &key); + + var st = st0; + var ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_update(&st, &msg2, msg2.len); + try testing.expectEqual(ret, 0); + var mac: [32]u8 = undefined; + ret = aegis.aegis128l_mac_final(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + st = st0; + ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_update(&st, &msg2, msg2.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_verify(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + st = st0; + const msg3 = msg ++ msg2; + ret = aegis.aegis128l_mac_update(&st, &msg3, msg3.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_verify(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); +} From a59935d4ac5bbc126ea5dca433f3846c1ae6f808 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 10 May 2024 20:15:08 +0200 Subject: [PATCH 091/219] Implement all variants of AEGIS-MAC --- README.md | 1 + src/aegis128l/aegis128l_common.h | 94 +++++++++++++-------------- src/aegis128x2/aegis128x2.c | 43 ++++++++++++ src/aegis128x2/aegis128x2_aesni.c | 2 + src/aegis128x2/aegis128x2_armcrypto.c | 2 + src/aegis128x2/aegis128x2_avx2.c | 2 + src/aegis128x2/aegis128x2_common.h | 47 ++++++++++++++ src/aegis128x2/aegis128x2_soft.c | 2 + src/aegis128x2/implementations.h | 3 + src/aegis128x4/aegis128x4.c | 43 ++++++++++++ src/aegis128x4/aegis128x4_aesni.c | 2 + src/aegis128x4/aegis128x4_armcrypto.c | 2 + src/aegis128x4/aegis128x4_avx2.c | 2 + src/aegis128x4/aegis128x4_avx512.c | 2 + src/aegis128x4/aegis128x4_common.h | 47 ++++++++++++++ src/aegis128x4/aegis128x4_soft.c | 2 + src/aegis128x4/implementations.h | 2 + src/aegis256/aegis256.c | 43 ++++++++++++ src/aegis256/aegis256_aesni.c | 2 + src/aegis256/aegis256_armcrypto.c | 2 + src/aegis256/aegis256_common.h | 47 ++++++++++++++ src/aegis256/aegis256_soft.c | 2 + src/aegis256/implementations.h | 2 + src/aegis256x2/aegis256x2.c | 43 ++++++++++++ src/aegis256x2/aegis256x2_aesni.c | 2 + src/aegis256x2/aegis256x2_armcrypto.c | 2 + src/aegis256x2/aegis256x2_avx2.c | 2 + src/aegis256x2/aegis256x2_common.h | 47 ++++++++++++++ src/aegis256x2/aegis256x2_soft.c | 2 + src/aegis256x2/implementations.h | 2 + src/aegis256x4/aegis256x4.c | 43 ++++++++++++ src/aegis256x4/aegis256x4_aesni.c | 2 + src/aegis256x4/aegis256x4_armcrypto.c | 2 + src/aegis256x4/aegis256x4_avx2.c | 2 + src/aegis256x4/aegis256x4_avx512.c | 2 + src/aegis256x4/aegis256x4_common.h | 47 ++++++++++++++ src/aegis256x4/aegis256x4_soft.c | 2 + src/aegis256x4/implementations.h | 2 + src/include/aegis128x2.h | 48 ++++++++++++++ src/include/aegis128x4.h | 48 ++++++++++++++ src/include/aegis256.h | 48 ++++++++++++++ src/include/aegis256x2.h | 48 ++++++++++++++ src/include/aegis256x4.h | 48 ++++++++++++++ src/test/benchmark.zig | 41 ++++-------- src/test/main.zig | 42 ++++++++++-- 45 files changed, 842 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index 66b90bb..58c1d52 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Portable C implementations of the [AEGIS](https://datatracker.ietf.org/doc/draft - AEGIS-256 with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) - AEGIS-256X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) - AEGIS-256X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto) +- All variants of AEGIS-MAC, supporting incremental updates. - Encryption and decryption with attached and detached tags - Incremental encryption and decryption. - Unauthenticated encryption and decryption (not recommended - only implemented for specific protocols) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index b7146ab..3d5d7a9 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -324,53 +324,6 @@ state_init(aegis128l_state *st_, const uint8_t *ad, size_t adlen, const uint8_t st->adlen = adlen; } -static int -state_mac_update(aegis128l_state *st_, const uint8_t *ad, size_t adlen) -{ - _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - size_t i; - size_t left; - - left = st->adlen % RATE; - st->adlen += adlen; - if (left != 0) { - if (left + adlen < RATE) { - memcpy(st->buf + left, ad, adlen); - return 0; - } - memcpy(st->buf + left, ad, RATE - left); - aegis128l_absorb(st->buf, st->state); - ad += RATE - left; - adlen -= RATE - left; - } - for (i = 0; i + RATE <= adlen; i += RATE) { - aegis128l_absorb(ad + i, st->state); - } - if (i < adlen) { - memset(st->buf, 0, RATE); - memcpy(st->buf, ad + i, adlen - i); - } - return 0; -} - -static int -state_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) -{ - _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - size_t left; - - left = st->adlen % RATE; - if (left != 0) { - memset(st->buf + left, 0, RATE - left); - aegis128l_absorb(st->buf, st->state); - } - aegis128l_mac(mac, maclen, st->adlen, 0, st->state); - - return 0; -} - static int state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *written, const uint8_t *m, size_t mlen) @@ -574,3 +527,50 @@ state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, } return ret; } + +static int +state_mac_update(aegis128l_state *st_, const uint8_t *ad, size_t adlen) +{ + _aegis128l_state *const st = + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + size_t left; + + left = st->adlen % RATE; + st->adlen += adlen; + if (left != 0) { + if (left + adlen < RATE) { + memcpy(st->buf + left, ad, adlen); + return 0; + } + memcpy(st->buf + left, ad, RATE - left); + aegis128l_absorb(st->buf, st->state); + ad += RATE - left; + adlen -= RATE - left; + } + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis128l_absorb(ad + i, st->state); + } + if (i < adlen) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen - i); + } + return 0; +} + +static int +state_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) +{ + _aegis128l_state *const st = + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t left; + + left = st->adlen % RATE; + if (left != 0) { + memset(st->buf + left, 0, RATE - left); + aegis128l_absorb(st->buf, st->state); + } + aegis128l_mac(mac, maclen, st->adlen, 0, st->state); + + return 0; +} \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index bd436f5..45ba837 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -172,6 +172,49 @@ aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co implementation->decrypt_unauthenticated(m, c, clen, npub, k); } +void +aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k) +{ + const uint8_t npub[aegis128x2_NPUBBYTES] = { 0 }; + + memset(st_, 0, sizeof *st_); + implementation->state_init(st_, NULL, 0, npub, k); +} + +int +aegis128x2_mac_update(aegis128x2_state *st_, const uint8_t *m, size_t mlen) +{ + return implementation->state_mac_update(st_, m, mlen); +} + +int +aegis128x2_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_mac_final(st_, mac, maclen); +} + +int +aegis128x2_mac_verify(aegis128x2_state *st_, const uint8_t *mac, size_t maclen) +{ + uint8_t expected_mac[32]; + + switch (maclen) { + case 16: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_16(expected_mac, mac); + case 32: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_32(expected_mac, mac); + default: + errno = EINVAL; + return -1; + } +} + int aegis128x2_pick_best_implementation(void) { diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index dc4340f..5a91bab 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -98,6 +98,8 @@ struct aegis128x2_implementation aegis128x2_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 7224071..42ff965 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -101,6 +101,8 @@ struct aegis128x2_implementation aegis128x2_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index 7fd1df8..a435395 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -66,6 +66,8 @@ struct aegis128x2_implementation aegis128x2_avx2_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index a857643..76c00b7 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -561,3 +561,50 @@ state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, } return ret; } + +static int +state_mac_update(aegis128x2_state *st_, const uint8_t *ad, size_t adlen) +{ + _aegis128x2_state *const st = + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + size_t left; + + left = st->adlen % RATE; + st->adlen += adlen; + if (left != 0) { + if (left + adlen < RATE) { + memcpy(st->buf + left, ad, adlen); + return 0; + } + memcpy(st->buf + left, ad, RATE - left); + aegis128x2_absorb(st->buf, st->state); + ad += RATE - left; + adlen -= RATE - left; + } + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis128x2_absorb(ad + i, st->state); + } + if (i < adlen) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen - i); + } + return 0; +} + +static int +state_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen) +{ + _aegis128x2_state *const st = + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t left; + + left = st->adlen % RATE; + if (left != 0) { + memset(st->buf + left, 0, RATE - left); + aegis128x2_absorb(st->buf, st->state); + } + aegis128x2_mac(mac, maclen, st->adlen, 0, st->state); + + return 0; +} \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_soft.c b/src/aegis128x2/aegis128x2_soft.c index a9b80b1..9dc33c5 100644 --- a/src/aegis128x2/aegis128x2_soft.c +++ b/src/aegis128x2/aegis128x2_soft.c @@ -90,6 +90,8 @@ struct aegis128x2_implementation aegis128x2_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; #endif \ No newline at end of file diff --git a/src/aegis128x2/implementations.h b/src/aegis128x2/implementations.h index da43aed..20cc0df 100644 --- a/src/aegis128x2/implementations.h +++ b/src/aegis128x2/implementations.h @@ -29,6 +29,9 @@ typedef struct aegis128x2_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); + int (*state_mac_update)(aegis128x2_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis128x2_state *st_, uint8_t *mac, size_t maclen); + } aegis128x2_implementation; #endif diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index da30d14..540a880 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -173,6 +173,49 @@ aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co implementation->decrypt_unauthenticated(m, c, clen, npub, k); } +void +aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k) +{ + const uint8_t npub[aegis128x4_NPUBBYTES] = { 0 }; + + memset(st_, 0, sizeof *st_); + implementation->state_init(st_, NULL, 0, npub, k); +} + +int +aegis128x4_mac_update(aegis128x4_state *st_, const uint8_t *m, size_t mlen) +{ + return implementation->state_mac_update(st_, m, mlen); +} + +int +aegis128x4_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_mac_final(st_, mac, maclen); +} + +int +aegis128x4_mac_verify(aegis128x4_state *st_, const uint8_t *mac, size_t maclen) +{ + uint8_t expected_mac[32]; + + switch (maclen) { + case 16: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_16(expected_mac, mac); + case 32: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_32(expected_mac, mac); + default: + errno = EINVAL; + return -1; + } +} + int aegis128x4_pick_best_implementation(void) { diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c index 6917f4b..7425efa 100644 --- a/src/aegis128x4/aegis128x4_aesni.c +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -107,6 +107,8 @@ struct aegis128x4_implementation aegis128x4_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index b45ad84..876eed7 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -109,6 +109,8 @@ struct aegis128x4_implementation aegis128x4_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c index aa54fba..d8ccbac 100644 --- a/src/aegis128x4/aegis128x4_avx2.c +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -99,6 +99,8 @@ struct aegis128x4_implementation aegis128x4_avx2_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 610aa0f..8c96f90 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -72,6 +72,8 @@ struct aegis128x4_implementation aegis128x4_avx512_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index cba5525..dd8e962 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -576,3 +576,50 @@ state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, } return ret; } + +static int +state_mac_update(aegis128x4_state *st_, const uint8_t *ad, size_t adlen) +{ + _aegis128x4_state *const st = + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + size_t left; + + left = st->adlen % RATE; + st->adlen += adlen; + if (left != 0) { + if (left + adlen < RATE) { + memcpy(st->buf + left, ad, adlen); + return 0; + } + memcpy(st->buf + left, ad, RATE - left); + aegis128x4_absorb(st->buf, st->state); + ad += RATE - left; + adlen -= RATE - left; + } + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis128x4_absorb(ad + i, st->state); + } + if (i < adlen) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen - i); + } + return 0; +} + +static int +state_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen) +{ + _aegis128x4_state *const st = + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t left; + + left = st->adlen % RATE; + if (left != 0) { + memset(st->buf + left, 0, RATE - left); + aegis128x4_absorb(st->buf, st->state); + } + aegis128x4_mac(mac, maclen, st->adlen, 0, st->state); + + return 0; +} \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_soft.c b/src/aegis128x4/aegis128x4_soft.c index 8b111fb..9c2ad31 100644 --- a/src/aegis128x4/aegis128x4_soft.c +++ b/src/aegis128x4/aegis128x4_soft.c @@ -98,6 +98,8 @@ struct aegis128x4_implementation aegis128x4_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; #endif \ No newline at end of file diff --git a/src/aegis128x4/implementations.h b/src/aegis128x4/implementations.h index 34ab769..0d0e0a2 100644 --- a/src/aegis128x4/implementations.h +++ b/src/aegis128x4/implementations.h @@ -29,6 +29,8 @@ typedef struct aegis128x4_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); + int (*state_mac_update)(aegis128x4_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis128x4_state *st_, uint8_t *mac, size_t maclen); } aegis128x4_implementation; #endif diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index 3699d60..db0a551 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -171,6 +171,49 @@ aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, cons implementation->decrypt_unauthenticated(m, c, clen, npub, k); } +void +aegis256_mac_init(aegis256_state *st_, const uint8_t *k) +{ + const uint8_t npub[aegis256_NPUBBYTES] = { 0 }; + + memset(st_, 0, sizeof *st_); + implementation->state_init(st_, NULL, 0, npub, k); +} + +int +aegis256_mac_update(aegis256_state *st_, const uint8_t *m, size_t mlen) +{ + return implementation->state_mac_update(st_, m, mlen); +} + +int +aegis256_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_mac_final(st_, mac, maclen); +} + +int +aegis256_mac_verify(aegis256_state *st_, const uint8_t *mac, size_t maclen) +{ + uint8_t expected_mac[32]; + + switch (maclen) { + case 16: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_16(expected_mac, mac); + case 32: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_32(expected_mac, mac); + default: + errno = EINVAL; + return -1; + } +} + int aegis256_pick_best_implementation(void) { diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index 1f02c22..570364a 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -58,6 +58,8 @@ struct aegis256_implementation aegis256_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index 52ed1a9..669514a 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -65,6 +65,8 @@ struct aegis256_implementation aegis256_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 6e898a9..60b60fb 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -513,3 +513,50 @@ state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, s } return ret; } + +static int +state_mac_update(aegis256_state *st_, const uint8_t *ad, size_t adlen) +{ + _aegis256_state *const st = + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + size_t left; + + left = st->adlen % RATE; + st->adlen += adlen; + if (left != 0) { + if (left + adlen < RATE) { + memcpy(st->buf + left, ad, adlen); + return 0; + } + memcpy(st->buf + left, ad, RATE - left); + aegis256_absorb(st->buf, st->state); + ad += RATE - left; + adlen -= RATE - left; + } + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis256_absorb(ad + i, st->state); + } + if (i < adlen) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen - i); + } + return 0; +} + +static int +state_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen) +{ + _aegis256_state *const st = + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t left; + + left = st->adlen % RATE; + if (left != 0) { + memset(st->buf + left, 0, RATE - left); + aegis256_absorb(st->buf, st->state); + } + aegis256_mac(mac, maclen, st->adlen, 0, st->state); + + return 0; +} \ No newline at end of file diff --git a/src/aegis256/aegis256_soft.c b/src/aegis256/aegis256_soft.c index 4e8a10f..9115471 100644 --- a/src/aegis256/aegis256_soft.c +++ b/src/aegis256/aegis256_soft.c @@ -52,6 +52,8 @@ struct aegis256_implementation aegis256_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; #endif diff --git a/src/aegis256/implementations.h b/src/aegis256/implementations.h index e28ea71..ffaf37d 100644 --- a/src/aegis256/implementations.h +++ b/src/aegis256/implementations.h @@ -29,6 +29,8 @@ typedef struct aegis256_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis256_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); + int (*state_mac_update)(aegis256_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis256_state *st_, uint8_t *mac, size_t maclen); } aegis256_implementation; #endif diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index 98b6960..deafe09 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -172,6 +172,49 @@ aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co implementation->decrypt_unauthenticated(m, c, clen, npub, k); } +void +aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k) +{ + const uint8_t npub[aegis256x2_NPUBBYTES] = { 0 }; + + memset(st_, 0, sizeof *st_); + implementation->state_init(st_, NULL, 0, npub, k); +} + +int +aegis256x2_mac_update(aegis256x2_state *st_, const uint8_t *m, size_t mlen) +{ + return implementation->state_mac_update(st_, m, mlen); +} + +int +aegis256x2_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_mac_final(st_, mac, maclen); +} + +int +aegis256x2_mac_verify(aegis256x2_state *st_, const uint8_t *mac, size_t maclen) +{ + uint8_t expected_mac[32]; + + switch (maclen) { + case 16: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_16(expected_mac, mac); + case 32: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_32(expected_mac, mac); + default: + errno = EINVAL; + return -1; + } +} + int aegis256x2_pick_best_implementation(void) { diff --git a/src/aegis256x2/aegis256x2_aesni.c b/src/aegis256x2/aegis256x2_aesni.c index cd96d15..b6e03aa 100644 --- a/src/aegis256x2/aegis256x2_aesni.c +++ b/src/aegis256x2/aegis256x2_aesni.c @@ -93,6 +93,8 @@ struct aegis256x2_implementation aegis256x2_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c index bf91920..3a70504 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -99,6 +99,8 @@ struct aegis256x2_implementation aegis256x2_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c index c17ce5c..f458dc9 100644 --- a/src/aegis256x2/aegis256x2_avx2.c +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -61,6 +61,8 @@ struct aegis256x2_implementation aegis256x2_avx2_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index fe7a6c4..121ff6c 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -562,3 +562,50 @@ state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, } return ret; } + +static int +state_mac_update(aegis256x2_state *st_, const uint8_t *ad, size_t adlen) +{ + _aegis256x2_state *const st = + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + size_t left; + + left = st->adlen % RATE; + st->adlen += adlen; + if (left != 0) { + if (left + adlen < RATE) { + memcpy(st->buf + left, ad, adlen); + return 0; + } + memcpy(st->buf + left, ad, RATE - left); + aegis256x2_absorb(st->buf, st->state); + ad += RATE - left; + adlen -= RATE - left; + } + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis256x2_absorb(ad + i, st->state); + } + if (i < adlen) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen - i); + } + return 0; +} + +static int +state_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen) +{ + _aegis256x2_state *const st = + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t left; + + left = st->adlen % RATE; + if (left != 0) { + memset(st->buf + left, 0, RATE - left); + aegis256x2_absorb(st->buf, st->state); + } + aegis256x2_mac(mac, maclen, st->adlen, 0, st->state); + + return 0; +} \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_soft.c b/src/aegis256x2/aegis256x2_soft.c index eb65c10..2110b96 100644 --- a/src/aegis256x2/aegis256x2_soft.c +++ b/src/aegis256x2/aegis256x2_soft.c @@ -85,6 +85,8 @@ struct aegis256x2_implementation aegis256x2_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; #endif \ No newline at end of file diff --git a/src/aegis256x2/implementations.h b/src/aegis256x2/implementations.h index 7201279..040cdda 100644 --- a/src/aegis256x2/implementations.h +++ b/src/aegis256x2/implementations.h @@ -29,6 +29,8 @@ typedef struct aegis256x2_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); + int (*state_mac_update)(aegis256x2_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis256x2_state *st_, uint8_t *mac, size_t maclen); } aegis256x2_implementation; #endif diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index 2c8dea7..73bb647 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -173,6 +173,49 @@ aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co implementation->decrypt_unauthenticated(m, c, clen, npub, k); } +void +aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k) +{ + const uint8_t npub[aegis256x4_NPUBBYTES] = { 0 }; + + memset(st_, 0, sizeof *st_); + implementation->state_init(st_, NULL, 0, npub, k); +} + +int +aegis256x4_mac_update(aegis256x4_state *st_, const uint8_t *m, size_t mlen) +{ + return implementation->state_mac_update(st_, m, mlen); +} + +int +aegis256x4_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen) +{ + if (maclen != 16 && maclen != 32) { + errno = EINVAL; + return -1; + } + return implementation->state_mac_final(st_, mac, maclen); +} + +int +aegis256x4_mac_verify(aegis256x4_state *st_, const uint8_t *mac, size_t maclen) +{ + uint8_t expected_mac[32]; + + switch (maclen) { + case 16: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_16(expected_mac, mac); + case 32: + implementation->state_mac_final(st_, expected_mac, maclen); + return aegis_verify_32(expected_mac, mac); + default: + errno = EINVAL; + return -1; + } +} + int aegis256x4_pick_best_implementation(void) { diff --git a/src/aegis256x4/aegis256x4_aesni.c b/src/aegis256x4/aegis256x4_aesni.c index 4cdd774..743a99d 100644 --- a/src/aegis256x4/aegis256x4_aesni.c +++ b/src/aegis256x4/aegis256x4_aesni.c @@ -102,6 +102,8 @@ struct aegis256x4_implementation aegis256x4_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_armcrypto.c b/src/aegis256x4/aegis256x4_armcrypto.c index c8d5345..5194ac2 100644 --- a/src/aegis256x4/aegis256x4_armcrypto.c +++ b/src/aegis256x4/aegis256x4_armcrypto.c @@ -107,6 +107,8 @@ struct aegis256x4_implementation aegis256x4_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_avx2.c b/src/aegis256x4/aegis256x4_avx2.c index a1bd5ba..493b340 100644 --- a/src/aegis256x4/aegis256x4_avx2.c +++ b/src/aegis256x4/aegis256x4_avx2.c @@ -94,6 +94,8 @@ struct aegis256x4_implementation aegis256x4_avx2_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_avx512.c b/src/aegis256x4/aegis256x4_avx512.c index 20ff319..cdaf9bc 100644 --- a/src/aegis256x4/aegis256x4_avx512.c +++ b/src/aegis256x4/aegis256x4_avx512.c @@ -67,6 +67,8 @@ struct aegis256x4_implementation aegis256x4_avx512_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index b5748a4..260019b 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -581,3 +581,50 @@ state_decrypt_detached_final(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, } return ret; } + +static int +state_mac_update(aegis256x4_state *st_, const uint8_t *ad, size_t adlen) +{ + _aegis256x4_state *const st = + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t i; + size_t left; + + left = st->adlen % RATE; + st->adlen += adlen; + if (left != 0) { + if (left + adlen < RATE) { + memcpy(st->buf + left, ad, adlen); + return 0; + } + memcpy(st->buf + left, ad, RATE - left); + aegis256x4_absorb(st->buf, st->state); + ad += RATE - left; + adlen -= RATE - left; + } + for (i = 0; i + RATE <= adlen; i += RATE) { + aegis256x4_absorb(ad + i, st->state); + } + if (i < adlen) { + memset(st->buf, 0, RATE); + memcpy(st->buf, ad + i, adlen - i); + } + return 0; +} + +static int +state_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen) +{ + _aegis256x4_state *const st = + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + size_t left; + + left = st->adlen % RATE; + if (left != 0) { + memset(st->buf + left, 0, RATE - left); + aegis256x4_absorb(st->buf, st->state); + } + aegis256x4_mac(mac, maclen, st->adlen, 0, st->state); + + return 0; +} \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_soft.c b/src/aegis256x4/aegis256x4_soft.c index a619fad..f7a7446 100644 --- a/src/aegis256x4/aegis256x4_soft.c +++ b/src/aegis256x4/aegis256x4_soft.c @@ -93,6 +93,8 @@ struct aegis256x4_implementation aegis256x4_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, }; #endif \ No newline at end of file diff --git a/src/aegis256x4/implementations.h b/src/aegis256x4/implementations.h index 2a56d10..fa0ede2 100644 --- a/src/aegis256x4/implementations.h +++ b/src/aegis256x4/implementations.h @@ -29,6 +29,8 @@ typedef struct aegis256x4_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); + int (*state_mac_update)(aegis256x4_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis256x4_state *st_, uint8_t *mac, size_t maclen); } aegis256x4_implementation; #endif diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 8e3fea9..4d40e38 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -251,6 +251,54 @@ void aegis128x2_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle void aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +/* + * Initialize a state for generating a MAC. + * + * st_: state to initialize + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + */ +void aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k); + +/* + * Update the MAC state with input data. + * + * st_: state to update + * m: input data + * mlen: length of the input data + * + * This function can be called multiple times. + * + * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. + */ +int aegis128x2_mac_update(aegis128x2_state *st_, const uint8_t *m, size_t mlen); + +/* + * Finalize the MAC and generate the authentication tag. + * + * st_: state to finalize + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). + */ +int aegis128x2_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen); + +/* + * Verify a MAC in constant time. + * + * st_: state to verify + * mac: authentication tag to verify + * maclen: length of the authentication tag (16 or 32) + * + * Returns 0 if the tag is authentic, -1 otherwise. + */ +int aegis128x2_mac_verify(aegis128x2_state *st_, const uint8_t *mac, size_t maclen); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index f7bf8ac..f3321dd 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -251,6 +251,54 @@ void aegis128x4_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +/* + * Initialize a state for generating a MAC. + * + * st_: state to initialize + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + */ +void aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k); + +/* + * Update the MAC state with input data. + * + * st_: state to update + * m: input data + * mlen: length of the input data + * + * This function can be called multiple times. + * + * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. + */ +int aegis128x4_mac_update(aegis128x4_state *st_, const uint8_t *m, size_t mlen); + +/* + * Finalize the MAC and generate the authentication tag. + * + * st_: state to finalize + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). + */ +int aegis128x4_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen); + +/* + * Verify a MAC in constant time. + * + * st_: state to verify + * mac: authentication tag to verify + * maclen: length of the authentication tag (16 or 32) + * + * Returns 0 if the tag is authentic, -1 otherwise. + */ +int aegis128x4_mac_verify(aegis128x4_state *st_, const uint8_t *mac, size_t maclen); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis256.h b/src/include/aegis256.h index c080534..2e562b0 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -251,6 +251,54 @@ void aegis256_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, void aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +/* + * Initialize a state for generating a MAC. + * + * st_: state to initialize + * k: key input buffer (32 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + */ +void aegis256_mac_init(aegis256_state *st_, const uint8_t *k); + +/* + * Update the MAC state with input data. + * + * st_: state to update + * m: input data + * mlen: length of the input data + * + * This function can be called multiple times. + * + * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. + */ +int aegis256_mac_update(aegis256_state *st_, const uint8_t *m, size_t mlen); + +/* + * Finalize the MAC and generate the authentication tag. + * + * st_: state to finalize + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). + */ +int aegis256_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen); + +/* + * Verify a MAC in constant time. + * + * st_: state to verify + * mac: authentication tag to verify + * maclen: length of the authentication tag (16 or 32) + * + * Returns 0 if the tag is authentic, -1 otherwise. + */ +int aegis256_mac_verify(aegis256_state *st_, const uint8_t *mac, size_t maclen); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index 968a8f3..ab78390 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -251,6 +251,54 @@ void aegis256x2_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle void aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +/* + * Initialize a state for generating a MAC. + * + * st_: state to initialize + * k: key input buffer (32 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + */ +void aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k); + +/* + * Update the MAC state with input data. + * + * st_: state to update + * m: input data + * mlen: length of the input data + * + * This function can be called multiple times. + * + * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. + */ +int aegis256x2_mac_update(aegis256x2_state *st_, const uint8_t *m, size_t mlen); + +/* + * Finalize the MAC and generate the authentication tag. + * + * st_: state to finalize + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). + */ +int aegis256x2_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen); + +/* + * Verify a MAC in constant time. + * + * st_: state to verify + * mac: authentication tag to verify + * maclen: length of the authentication tag (16 or 32) + * + * Returns 0 if the tag is authentic, -1 otherwise. + */ +int aegis256x2_mac_verify(aegis256x2_state *st_, const uint8_t *mac, size_t maclen); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index 478ba7b..4b833cb 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -251,6 +251,54 @@ void aegis256x4_encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mle void aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k); +/* + * Initialize a state for generating a MAC. + * + * st_: state to initialize + * k: key input buffer (32 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + */ +void aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k); + +/* + * Update the MAC state with input data. + * + * st_: state to update + * m: input data + * mlen: length of the input data + * + * This function can be called multiple times. + * + * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. + */ +int aegis256x4_mac_update(aegis256x4_state *st_, const uint8_t *m, size_t mlen); + +/* + * Finalize the MAC and generate the authentication tag. + * + * st_: state to finalize + * mac: authentication tag output buffer + * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). + */ +int aegis256x4_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen); + +/* + * Verify a MAC in constant time. + * + * st_: state to verify + * mac: authentication tag to verify + * maclen: length of the authentication tag (16 or 32) + * + * Returns 0 if the tag is authentic, -1 otherwise. + */ +int aegis256x4_mac_verify(aegis256x4_state *st_, const uint8_t *mac, size_t maclen); + #ifdef __cplusplus } #endif diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index a7fb53a..97e124c 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -214,7 +214,7 @@ fn bench_aegis128l_mac() !void { for (0..iterations) |_| { var st = st0; _ = aegis.aegis128l_mac_update(&st, &buf, msg_len); - _ = aegis.aegis128l_mac_final(&st, &buf, aegis.aegis128l_ABYTES_MIN); + _ = aegis.aegis128l_mac_final(&st, &buf, aegis.aegis128l_ABYTES_MAX); } const end = timer.read(); mem.doNotOptimizeAway(buf[0]); @@ -227,27 +227,19 @@ fn bench_aegis128l_mac() !void { fn bench_aegis128x2_mac() !void { var key: [aegis.aegis128x2_KEYBYTES]u8 = undefined; - var nonce: [aegis.aegis128x2_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; + var st0: aegis.aegis128x2_state = undefined; random.bytes(&key); - random.bytes(&nonce); random.bytes(&buf); + aegis.aegis128x2_mac_init(&st0, &key); var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - _ = aegis.aegis128x2_encrypt_detached( - null, - &buf, - aegis.aegis128x2_ABYTES_MAX, - null, - 0, - &buf, - msg_len, - &nonce, - &key, - ); + var st = st0; + _ = aegis.aegis128x2_mac_update(&st, &buf, msg_len); + _ = aegis.aegis128x2_mac_final(&st, &buf, aegis.aegis128x2_ABYTES_MAX); } const end = timer.read(); mem.doNotOptimizeAway(buf[0]); @@ -258,29 +250,22 @@ fn bench_aegis128x2_mac() !void { try stdout.print("AEGIS-128X2 MAC\t{d:10.2} Mb/s\n", .{throughput}); } + fn bench_aegis128x4_mac() !void { var key: [aegis.aegis128x4_KEYBYTES]u8 = undefined; - var nonce: [aegis.aegis128x4_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; + var st0: aegis.aegis128x4_state = undefined; random.bytes(&key); - random.bytes(&nonce); random.bytes(&buf); + aegis.aegis128x4_mac_init(&st0, &key); var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - _ = aegis.aegis128x4_encrypt_detached( - null, - &buf, - aegis.aegis128x4_ABYTES_MAX, - null, - 0, - &buf, - msg_len, - &nonce, - &key, - ); + var st = st0; + _ = aegis.aegis128x4_mac_update(&st, &buf, msg_len); + _ = aegis.aegis128x4_mac_final(&st, &buf, aegis.aegis128x4_ABYTES_MAX); } const end = timer.read(); mem.doNotOptimizeAway(buf[0]); @@ -291,6 +276,8 @@ fn bench_aegis128x4_mac() !void { try stdout.print("AEGIS-128X4 MAC\t{d:10.2} Mb/s\n", .{throughput}); } + + pub fn main() !void { try bench_aegis256(); try bench_aegis256x2(); diff --git a/src/test/main.zig b/src/test/main.zig index c26715b..6e9a80d 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -600,8 +600,8 @@ test "aegis-256x4 - test vector" { } test "aegis128l - Unauthenticated encryption" { - const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; - const nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; + const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const nonce = [16]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; var msg: [100]u8 = undefined; var msg2: [100]u8 = undefined; @@ -613,8 +613,8 @@ test "aegis128l - Unauthenticated encryption" { } test "aegis128l - Random stream" { - const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; - var nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; + const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + var nonce = [16]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; var msg: [100]u8 = undefined; var msg2: [100]u8 = undefined; aegis.aegis128l_stream(&msg, msg.len, &nonce, &key); @@ -626,7 +626,7 @@ test "aegis128l - Random stream" { } test "aegis128l - MAC" { - const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; + const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; const msg = [_]u8{ 1, 2, 3 } ** 30; const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 30; var st0: aegis.aegis128l_state = undefined; @@ -656,3 +656,35 @@ test "aegis128l - MAC" { ret = aegis.aegis128l_mac_verify(&st, &mac, mac.len); try testing.expectEqual(ret, 0); } + +test "aegis256 - MAC" { + const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; + const msg = [_]u8{ 1, 2, 3 } ** 30; + const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 30; + var st0: aegis.aegis256_state = undefined; + aegis.aegis256_mac_init(&st0, &key); + + var st = st0; + var ret = aegis.aegis256_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256_mac_update(&st, &msg2, msg2.len); + try testing.expectEqual(ret, 0); + var mac: [32]u8 = undefined; + ret = aegis.aegis256_mac_final(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + st = st0; + ret = aegis.aegis256_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256_mac_update(&st, &msg2, msg2.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256_mac_verify(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + st = st0; + const msg3 = msg ++ msg2; + ret = aegis.aegis256_mac_update(&st, &msg3, msg3.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256_mac_verify(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); +} From 7ed815ae906f026a128037024d4a2bdbc31f3ca3 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 11 May 2024 22:20:39 +0200 Subject: [PATCH 092/219] Add the ability to clone MAC states --- src/aegis128l/aegis128l.c | 6 ++ src/aegis128l/aegis128l_aesni.c | 1 + src/aegis128l/aegis128l_armcrypto.c | 1 + src/aegis128l/aegis128l_common.h | 11 +++ src/aegis128l/aegis128l_soft.c | 1 + src/aegis128l/implementations.h | 1 + src/aegis128x2/aegis128x2.c | 6 ++ src/aegis128x2/aegis128x2_aesni.c | 1 + src/aegis128x2/aegis128x2_armcrypto.c | 1 + src/aegis128x2/aegis128x2_avx2.c | 1 + src/aegis128x2/aegis128x2_common.h | 11 +++ src/aegis128x2/aegis128x2_soft.c | 1 + src/aegis128x2/implementations.h | 2 +- src/aegis128x4/aegis128x4.c | 6 ++ src/aegis128x4/aegis128x4_aesni.c | 1 + src/aegis128x4/aegis128x4_armcrypto.c | 1 + src/aegis128x4/aegis128x4_avx2.c | 1 + src/aegis128x4/aegis128x4_avx512.c | 1 + src/aegis128x4/aegis128x4_common.h | 11 +++ src/aegis128x4/aegis128x4_soft.c | 1 + src/aegis128x4/implementations.h | 1 + src/aegis256/aegis256.c | 6 ++ src/aegis256/aegis256_aesni.c | 1 + src/aegis256/aegis256_armcrypto.c | 1 + src/aegis256/aegis256_common.h | 11 +++ src/aegis256/aegis256_soft.c | 1 + src/aegis256/implementations.h | 1 + src/aegis256x2/aegis256x2.c | 6 ++ src/aegis256x2/aegis256x2_aesni.c | 1 + src/aegis256x2/aegis256x2_armcrypto.c | 1 + src/aegis256x2/aegis256x2_avx2.c | 1 + src/aegis256x2/aegis256x2_common.h | 11 +++ src/aegis256x2/aegis256x2_soft.c | 1 + src/aegis256x2/implementations.h | 1 + src/aegis256x4/aegis256x4.c | 6 ++ src/aegis256x4/aegis256x4_aesni.c | 1 + src/aegis256x4/aegis256x4_armcrypto.c | 1 + src/aegis256x4/aegis256x4_avx2.c | 1 + src/aegis256x4/aegis256x4_avx512.c | 1 + src/aegis256x4/aegis256x4_common.h | 11 +++ src/aegis256x4/aegis256x4_soft.c | 1 + src/aegis256x4/implementations.h | 1 + src/include/aegis128l.h | 13 ++++ src/include/aegis128x2.h | 13 ++++ src/include/aegis128x4.h | 13 ++++ src/include/aegis256.h | 13 ++++ src/include/aegis256x2.h | 13 ++++ src/include/aegis256x4.h | 13 ++++ src/test/benchmark.zig | 12 ++-- src/test/main.zig | 97 +++++++++++++++++++++------ 50 files changed, 291 insertions(+), 29 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 35baef2..441194c 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -214,6 +214,12 @@ aegis128l_mac_verify(aegis128l_state *st_, const uint8_t *mac, size_t maclen) } } +void +aegis128l_mac_state_clone(aegis128l_state *dst, const aegis128l_state *src) +{ + implementation->state_clone(dst, src); +} + int aegis128l_pick_best_implementation(void) { diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index 2b723fd..cafc317 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -65,6 +65,7 @@ struct aegis128l_implementation aegis128l_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index fe71516..192fe58 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -69,6 +69,7 @@ struct aegis128l_implementation aegis128l_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 3d5d7a9..cb75168 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -573,4 +573,15 @@ state_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) aegis128l_mac(mac, maclen, st->adlen, 0, st->state); return 0; +} + +static void +state_clone(aegis128l_state *dst, const aegis128l_state *src) +{ + _aegis128l_state *const dst_ = + (_aegis128l_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + const _aegis128l_state *const src_ = + (const _aegis128l_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & + ~(uintptr_t) (RATE - 1)); + *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis128l/aegis128l_soft.c b/src/aegis128l/aegis128l_soft.c index de3e597..e3cfd9a 100644 --- a/src/aegis128l/aegis128l_soft.c +++ b/src/aegis128l/aegis128l_soft.c @@ -59,6 +59,7 @@ struct aegis128l_implementation aegis128l_soft_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; #endif diff --git a/src/aegis128l/implementations.h b/src/aegis128l/implementations.h index 2219ada..d9c245f 100644 --- a/src/aegis128l/implementations.h +++ b/src/aegis128l/implementations.h @@ -31,6 +31,7 @@ typedef struct aegis128l_implementation { size_t *written, const uint8_t *mac, size_t maclen); int (*state_mac_update)(aegis128l_state *st_, const uint8_t *ad, size_t adlen); int (*state_mac_final)(aegis128l_state *st_, uint8_t *mac, size_t maclen); + void (*state_clone)(aegis128l_state *dst, const aegis128l_state *src); } aegis128l_implementation; #endif diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index 45ba837..c121d4b 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -215,6 +215,12 @@ aegis128x2_mac_verify(aegis128x2_state *st_, const uint8_t *mac, size_t maclen) } } +void +aegis128x2_mac_state_clone(aegis128x2_state *dst, const aegis128x2_state *src) +{ + implementation->state_clone(dst, src); +} + int aegis128x2_pick_best_implementation(void) { diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index 5a91bab..7c06664 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -100,6 +100,7 @@ struct aegis128x2_implementation aegis128x2_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 42ff965..6a7fbc9 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -103,6 +103,7 @@ struct aegis128x2_implementation aegis128x2_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index a435395..4af0a8a 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -68,6 +68,7 @@ struct aegis128x2_implementation aegis128x2_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 76c00b7..6e23ff3 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -607,4 +607,15 @@ state_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen) aegis128x2_mac(mac, maclen, st->adlen, 0, st->state); return 0; +} + +static void +state_clone(aegis128x2_state *dst, const aegis128x2_state *src) +{ + _aegis128x2_state *const dst_ = + (_aegis128x2_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + const _aegis128x2_state *const src_ = + (const _aegis128x2_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & + ~(uintptr_t) (RATE - 1)); + *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_soft.c b/src/aegis128x2/aegis128x2_soft.c index 9dc33c5..16bbeef 100644 --- a/src/aegis128x2/aegis128x2_soft.c +++ b/src/aegis128x2/aegis128x2_soft.c @@ -92,6 +92,7 @@ struct aegis128x2_implementation aegis128x2_soft_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; #endif \ No newline at end of file diff --git a/src/aegis128x2/implementations.h b/src/aegis128x2/implementations.h index 20cc0df..374309e 100644 --- a/src/aegis128x2/implementations.h +++ b/src/aegis128x2/implementations.h @@ -31,7 +31,7 @@ typedef struct aegis128x2_implementation { size_t *written, const uint8_t *mac, size_t maclen); int (*state_mac_update)(aegis128x2_state *st_, const uint8_t *ad, size_t adlen); int (*state_mac_final)(aegis128x2_state *st_, uint8_t *mac, size_t maclen); - + void (*state_clone)(aegis128x2_state *dst, const aegis128x2_state *src); } aegis128x2_implementation; #endif diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index 540a880..2c24895 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -216,6 +216,12 @@ aegis128x4_mac_verify(aegis128x4_state *st_, const uint8_t *mac, size_t maclen) } } +void +aegis128x4_mac_state_clone(aegis128x4_state *dst, const aegis128x4_state *src) +{ + implementation->state_clone(dst, src); +} + int aegis128x4_pick_best_implementation(void) { diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c index 7425efa..1664139 100644 --- a/src/aegis128x4/aegis128x4_aesni.c +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -109,6 +109,7 @@ struct aegis128x4_implementation aegis128x4_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index 876eed7..ebfe6db 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -111,6 +111,7 @@ struct aegis128x4_implementation aegis128x4_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c index d8ccbac..f95e081 100644 --- a/src/aegis128x4/aegis128x4_avx2.c +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -101,6 +101,7 @@ struct aegis128x4_implementation aegis128x4_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 8c96f90..86c7cd1 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -74,6 +74,7 @@ struct aegis128x4_implementation aegis128x4_avx512_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index dd8e962..d0096d9 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -622,4 +622,15 @@ state_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen) aegis128x4_mac(mac, maclen, st->adlen, 0, st->state); return 0; +} + +static void +state_clone(aegis128x4_state *dst, const aegis128x4_state *src) +{ + _aegis128x4_state *const dst_ = + (_aegis128x4_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + const _aegis128x4_state *const src_ = + (const _aegis128x4_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & + ~(uintptr_t) (RATE - 1)); + *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_soft.c b/src/aegis128x4/aegis128x4_soft.c index 9c2ad31..6c24629 100644 --- a/src/aegis128x4/aegis128x4_soft.c +++ b/src/aegis128x4/aegis128x4_soft.c @@ -100,6 +100,7 @@ struct aegis128x4_implementation aegis128x4_soft_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; #endif \ No newline at end of file diff --git a/src/aegis128x4/implementations.h b/src/aegis128x4/implementations.h index 0d0e0a2..9d8d3e8 100644 --- a/src/aegis128x4/implementations.h +++ b/src/aegis128x4/implementations.h @@ -31,6 +31,7 @@ typedef struct aegis128x4_implementation { size_t *written, const uint8_t *mac, size_t maclen); int (*state_mac_update)(aegis128x4_state *st_, const uint8_t *ad, size_t adlen); int (*state_mac_final)(aegis128x4_state *st_, uint8_t *mac, size_t maclen); + void (*state_clone)(aegis128x4_state *dst, const aegis128x4_state *src); } aegis128x4_implementation; #endif diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index db0a551..fa4da72 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -214,6 +214,12 @@ aegis256_mac_verify(aegis256_state *st_, const uint8_t *mac, size_t maclen) } } +void +aegis256_mac_state_clone(aegis256_state *dst, const aegis256_state *src) +{ + implementation->state_clone(dst, src); +} + int aegis256_pick_best_implementation(void) { diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index 570364a..40a70ce 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -60,6 +60,7 @@ struct aegis256_implementation aegis256_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index 669514a..f5f5839 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -67,6 +67,7 @@ struct aegis256_implementation aegis256_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 60b60fb..1d5ff8f 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -559,4 +559,15 @@ state_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen) aegis256_mac(mac, maclen, st->adlen, 0, st->state); return 0; +} + +static void +state_clone(aegis256_state *dst, const aegis256_state *src) +{ + _aegis256_state *const dst_ = + (_aegis256_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + const _aegis256_state *const src_ = + (const _aegis256_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & + ~(uintptr_t) (RATE - 1)); + *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis256/aegis256_soft.c b/src/aegis256/aegis256_soft.c index 9115471..ea636b3 100644 --- a/src/aegis256/aegis256_soft.c +++ b/src/aegis256/aegis256_soft.c @@ -54,6 +54,7 @@ struct aegis256_implementation aegis256_soft_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; #endif diff --git a/src/aegis256/implementations.h b/src/aegis256/implementations.h index ffaf37d..f8ec8a5 100644 --- a/src/aegis256/implementations.h +++ b/src/aegis256/implementations.h @@ -31,6 +31,7 @@ typedef struct aegis256_implementation { size_t *written, const uint8_t *mac, size_t maclen); int (*state_mac_update)(aegis256_state *st_, const uint8_t *ad, size_t adlen); int (*state_mac_final)(aegis256_state *st_, uint8_t *mac, size_t maclen); + void (*state_clone)(aegis256_state *dst, const aegis256_state *src); } aegis256_implementation; #endif diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index deafe09..0a3affb 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -215,6 +215,12 @@ aegis256x2_mac_verify(aegis256x2_state *st_, const uint8_t *mac, size_t maclen) } } +void +aegis256x2_mac_state_clone(aegis256x2_state *dst, const aegis256x2_state *src) +{ + implementation->state_clone(dst, src); +} + int aegis256x2_pick_best_implementation(void) { diff --git a/src/aegis256x2/aegis256x2_aesni.c b/src/aegis256x2/aegis256x2_aesni.c index b6e03aa..98020cf 100644 --- a/src/aegis256x2/aegis256x2_aesni.c +++ b/src/aegis256x2/aegis256x2_aesni.c @@ -95,6 +95,7 @@ struct aegis256x2_implementation aegis256x2_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c index 3a70504..6ffbab8 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -101,6 +101,7 @@ struct aegis256x2_implementation aegis256x2_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c index f458dc9..d5d7e57 100644 --- a/src/aegis256x2/aegis256x2_avx2.c +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -63,6 +63,7 @@ struct aegis256x2_implementation aegis256x2_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index 121ff6c..8858d3c 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -608,4 +608,15 @@ state_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen) aegis256x2_mac(mac, maclen, st->adlen, 0, st->state); return 0; +} + +static void +state_clone(aegis256x2_state *dst, const aegis256x2_state *src) +{ + _aegis256x2_state *const dst_ = + (_aegis256x2_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + const _aegis256x2_state *const src_ = + (const _aegis256x2_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & + ~(uintptr_t) (RATE - 1)); + *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_soft.c b/src/aegis256x2/aegis256x2_soft.c index 2110b96..c45cf8e 100644 --- a/src/aegis256x2/aegis256x2_soft.c +++ b/src/aegis256x2/aegis256x2_soft.c @@ -87,6 +87,7 @@ struct aegis256x2_implementation aegis256x2_soft_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; #endif \ No newline at end of file diff --git a/src/aegis256x2/implementations.h b/src/aegis256x2/implementations.h index 040cdda..ebf66c3 100644 --- a/src/aegis256x2/implementations.h +++ b/src/aegis256x2/implementations.h @@ -31,6 +31,7 @@ typedef struct aegis256x2_implementation { size_t *written, const uint8_t *mac, size_t maclen); int (*state_mac_update)(aegis256x2_state *st_, const uint8_t *ad, size_t adlen); int (*state_mac_final)(aegis256x2_state *st_, uint8_t *mac, size_t maclen); + void (*state_clone)(aegis256x2_state *dst, const aegis256x2_state *src); } aegis256x2_implementation; #endif diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index 73bb647..98d3eae 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -216,6 +216,12 @@ aegis256x4_mac_verify(aegis256x4_state *st_, const uint8_t *mac, size_t maclen) } } +void +aegis256x4_mac_state_clone(aegis256x4_state *dst, const aegis256x4_state *src) +{ + implementation->state_clone(dst, src); +} + int aegis256x4_pick_best_implementation(void) { diff --git a/src/aegis256x4/aegis256x4_aesni.c b/src/aegis256x4/aegis256x4_aesni.c index 743a99d..b9bbebb 100644 --- a/src/aegis256x4/aegis256x4_aesni.c +++ b/src/aegis256x4/aegis256x4_aesni.c @@ -104,6 +104,7 @@ struct aegis256x4_implementation aegis256x4_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_armcrypto.c b/src/aegis256x4/aegis256x4_armcrypto.c index 5194ac2..42aa0d4 100644 --- a/src/aegis256x4/aegis256x4_armcrypto.c +++ b/src/aegis256x4/aegis256x4_armcrypto.c @@ -109,6 +109,7 @@ struct aegis256x4_implementation aegis256x4_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_avx2.c b/src/aegis256x4/aegis256x4_avx2.c index 493b340..cbd2c30 100644 --- a/src/aegis256x4/aegis256x4_avx2.c +++ b/src/aegis256x4/aegis256x4_avx2.c @@ -96,6 +96,7 @@ struct aegis256x4_implementation aegis256x4_avx2_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_avx512.c b/src/aegis256x4/aegis256x4_avx512.c index cdaf9bc..22d3b69 100644 --- a/src/aegis256x4/aegis256x4_avx512.c +++ b/src/aegis256x4/aegis256x4_avx512.c @@ -69,6 +69,7 @@ struct aegis256x4_implementation aegis256x4_avx512_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index 260019b..4f04bf9 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -627,4 +627,15 @@ state_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen) aegis256x4_mac(mac, maclen, st->adlen, 0, st->state); return 0; +} + +static void +state_clone(aegis256x4_state *dst, const aegis256x4_state *src) +{ + _aegis256x4_state *const dst_ = + (_aegis256x4_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + const _aegis256x4_state *const src_ = + (const _aegis256x4_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & + ~(uintptr_t) (RATE - 1)); + *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_soft.c b/src/aegis256x4/aegis256x4_soft.c index f7a7446..4b2c227 100644 --- a/src/aegis256x4/aegis256x4_soft.c +++ b/src/aegis256x4/aegis256x4_soft.c @@ -95,6 +95,7 @@ struct aegis256x4_implementation aegis256x4_soft_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, + .state_clone = state_clone, }; #endif \ No newline at end of file diff --git a/src/aegis256x4/implementations.h b/src/aegis256x4/implementations.h index fa0ede2..ecdf2cb 100644 --- a/src/aegis256x4/implementations.h +++ b/src/aegis256x4/implementations.h @@ -31,6 +31,7 @@ typedef struct aegis256x4_implementation { size_t *written, const uint8_t *mac, size_t maclen); int (*state_mac_update)(aegis256x4_state *st_, const uint8_t *ad, size_t adlen); int (*state_mac_final)(aegis256x4_state *st_, uint8_t *mac, size_t maclen); + void (*state_clone)(aegis256x4_state *dst, const aegis256x4_state *src); } aegis256x4_implementation; #endif diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 590a719..40790f2 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -263,6 +263,9 @@ void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis128l_mac_state_clone()`. */ void aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k); @@ -299,6 +302,16 @@ int aegis128l_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen); */ int aegis128l_mac_verify(aegis128l_state *st_, const uint8_t *mac, size_t maclen); +/* + * Clone an AEGIS-MAC state. + * + * dst: destination state + * src: source state + * + * This function MUST be used in order to clone states. + */ +void aegis128l_mac_state_clone(aegis128l_state *dst, const aegis128l_state *src); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 4d40e38..20c951b 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -263,6 +263,9 @@ void aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis128x2_mac_state_clone()`. */ void aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k); @@ -299,6 +302,16 @@ int aegis128x2_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen); */ int aegis128x2_mac_verify(aegis128x2_state *st_, const uint8_t *mac, size_t maclen); +/* + * Clone an AEGIS-MAC state. + * + * dst: destination state + * src: source state + * + * This function MUST be used in order to clone states. + */ +void aegis128x2_mac_state_clone(aegis128x2_state *dst, const aegis128x2_state *src); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index f3321dd..de4e2fe 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -263,6 +263,9 @@ void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis128x4_mac_state_clone()`. */ void aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k); @@ -299,6 +302,16 @@ int aegis128x4_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen); */ int aegis128x4_mac_verify(aegis128x4_state *st_, const uint8_t *mac, size_t maclen); +/* + * Clone an AEGIS-MAC state. + * + * dst: destination state + * src: source state + * + * This function MUST be used in order to clone states. + */ +void aegis128x4_mac_state_clone(aegis128x4_state *dst, const aegis128x4_state *src); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis256.h b/src/include/aegis256.h index 2e562b0..fce99ef 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -263,6 +263,9 @@ void aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis256_mac_state_clone()`. */ void aegis256_mac_init(aegis256_state *st_, const uint8_t *k); @@ -299,6 +302,16 @@ int aegis256_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen); */ int aegis256_mac_verify(aegis256_state *st_, const uint8_t *mac, size_t maclen); +/* + * Clone an AEGIS-MAC state. + * + * dst: destination state + * src: source state + * + * This function MUST be used in order to clone states. + */ +void aegis256_mac_state_clone(aegis256_state *dst, const aegis256_state *src); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index ab78390..a77d511 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -263,6 +263,9 @@ void aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis256x2_mac_state_clone()`. */ void aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k); @@ -299,6 +302,16 @@ int aegis256x2_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen); */ int aegis256x2_mac_verify(aegis256x2_state *st_, const uint8_t *mac, size_t maclen); +/* + * Clone an AEGIS-MAC state. + * + * dst: destination state + * src: source state + * + * This function MUST be used in order to clone states. + */ +void aegis256x2_mac_state_clone(aegis256x2_state *dst, const aegis256x2_state *src); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index 4b833cb..de19637 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -263,6 +263,9 @@ void aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis256_mac_state_clone()`. */ void aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k); @@ -299,6 +302,16 @@ int aegis256x4_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen); */ int aegis256x4_mac_verify(aegis256x4_state *st_, const uint8_t *mac, size_t maclen); +/* + * Clone an AEGIS-MAC state. + * + * dst: destination state + * src: source state + * + * This function MUST be used in order to clone states. + */ +void aegis256x4_mac_state_clone(aegis256x4_state *dst, const aegis256x4_state *src); + #ifdef __cplusplus } #endif diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index 97e124c..71475e2 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -212,7 +212,8 @@ fn bench_aegis128l_mac() !void { var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st = st0; + var st: aegis.aegis128l_state = undefined; + aegis.aegis128l_mac_state_clone(&st, &st0); _ = aegis.aegis128l_mac_update(&st, &buf, msg_len); _ = aegis.aegis128l_mac_final(&st, &buf, aegis.aegis128l_ABYTES_MAX); } @@ -237,7 +238,8 @@ fn bench_aegis128x2_mac() !void { var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st = st0; + var st: aegis.aegis128x2_state = undefined; + aegis.aegis128x2_mac_state_clone(&st, &st0); _ = aegis.aegis128x2_mac_update(&st, &buf, msg_len); _ = aegis.aegis128x2_mac_final(&st, &buf, aegis.aegis128x2_ABYTES_MAX); } @@ -250,7 +252,6 @@ fn bench_aegis128x2_mac() !void { try stdout.print("AEGIS-128X2 MAC\t{d:10.2} Mb/s\n", .{throughput}); } - fn bench_aegis128x4_mac() !void { var key: [aegis.aegis128x4_KEYBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; @@ -263,7 +264,8 @@ fn bench_aegis128x4_mac() !void { var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st = st0; + var st: aegis.aegis128x4_state = undefined; + aegis.aegis128x4_mac_state_clone(&st, &st0); _ = aegis.aegis128x4_mac_update(&st, &buf, msg_len); _ = aegis.aegis128x4_mac_final(&st, &buf, aegis.aegis128x4_ABYTES_MAX); } @@ -276,8 +278,6 @@ fn bench_aegis128x4_mac() !void { try stdout.print("AEGIS-128X4 MAC\t{d:10.2} Mb/s\n", .{throughput}); } - - pub fn main() !void { try bench_aegis256(); try bench_aegis256x2(); diff --git a/src/test/main.zig b/src/test/main.zig index 6e9a80d..4f86e5a 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -627,12 +627,13 @@ test "aegis128l - Random stream" { test "aegis128l - MAC" { const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - const msg = [_]u8{ 1, 2, 3 } ** 30; - const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 30; + const msg = [_]u8{ 1, 2, 3 } ** 100; + const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100; var st0: aegis.aegis128l_state = undefined; aegis.aegis128l_mac_init(&st0, &key); - var st = st0; + var st: aegis.aegis128l_state = undefined; + aegis.aegis128l_mac_state_clone(&st, &st0); var ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); try testing.expectEqual(ret, 0); ret = aegis.aegis128l_mac_update(&st, &msg2, msg2.len); @@ -641,7 +642,7 @@ test "aegis128l - MAC" { ret = aegis.aegis128l_mac_final(&st, &mac, mac.len); try testing.expectEqual(ret, 0); - st = st0; + aegis.aegis128l_mac_state_clone(&st, &st0); ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); try testing.expectEqual(ret, 0); ret = aegis.aegis128l_mac_update(&st, &msg2, msg2.len); @@ -649,42 +650,94 @@ test "aegis128l - MAC" { ret = aegis.aegis128l_mac_verify(&st, &mac, mac.len); try testing.expectEqual(ret, 0); - st = st0; + aegis.aegis128l_mac_state_clone(&st, &st0); const msg3 = msg ++ msg2; ret = aegis.aegis128l_mac_update(&st, &msg3, msg3.len); try testing.expectEqual(ret, 0); ret = aegis.aegis128l_mac_verify(&st, &mac, mac.len); try testing.expectEqual(ret, 0); + + const nonce = [_]u8{0} ** 16; + var mac2: [mac.len]u8 = undefined; + ret = aegis.aegis128l_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); + try testing.expectEqual(ret, 0); + try testing.expectEqualSlices(u8, &mac, &mac2); } -test "aegis256 - MAC" { - const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; - const msg = [_]u8{ 1, 2, 3 } ** 30; - const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 30; - var st0: aegis.aegis256_state = undefined; - aegis.aegis256_mac_init(&st0, &key); +test "aegis128x2 - MAC" { + const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const msg = [_]u8{ 1, 2, 3 } ** 100; + const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100; + var st0: aegis.aegis128x2_state = undefined; + aegis.aegis128x2_mac_init(&st0, &key); - var st = st0; - var ret = aegis.aegis256_mac_update(&st, &msg, msg.len); + var st: aegis.aegis128x2_state = undefined; + aegis.aegis128x2_mac_state_clone(&st, &st0); + var ret = aegis.aegis128x2_mac_update(&st, &msg, msg.len); try testing.expectEqual(ret, 0); - ret = aegis.aegis256_mac_update(&st, &msg2, msg2.len); + ret = aegis.aegis128x2_mac_update(&st, &msg2, msg2.len); try testing.expectEqual(ret, 0); var mac: [32]u8 = undefined; - ret = aegis.aegis256_mac_final(&st, &mac, mac.len); + ret = aegis.aegis128x2_mac_final(&st, &mac, mac.len); try testing.expectEqual(ret, 0); - st = st0; - ret = aegis.aegis256_mac_update(&st, &msg, msg.len); + aegis.aegis128x2_mac_state_clone(&st, &st0); + ret = aegis.aegis128x2_mac_update(&st, &msg, msg.len); try testing.expectEqual(ret, 0); - ret = aegis.aegis256_mac_update(&st, &msg2, msg2.len); + ret = aegis.aegis128x2_mac_update(&st, &msg2, msg2.len); try testing.expectEqual(ret, 0); - ret = aegis.aegis256_mac_verify(&st, &mac, mac.len); + ret = aegis.aegis128x2_mac_verify(&st, &mac, mac.len); try testing.expectEqual(ret, 0); - st = st0; + aegis.aegis128x2_mac_state_clone(&st, &st0); const msg3 = msg ++ msg2; - ret = aegis.aegis256_mac_update(&st, &msg3, msg3.len); + ret = aegis.aegis128x2_mac_update(&st, &msg3, msg3.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128x2_mac_verify(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + const nonce = [_]u8{0} ** 16; + var mac2: [mac.len]u8 = undefined; + ret = aegis.aegis128x2_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); + try testing.expectEqual(ret, 0); + try testing.expectEqualSlices(u8, &mac, &mac2); +} + +test "aegis128x4 - MAC" { + const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const msg = [_]u8{ 1, 2, 3 } ** 100; + const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100; + var st0: aegis.aegis128x4_state = undefined; + aegis.aegis128x4_mac_init(&st0, &key); + + var st: aegis.aegis128x4_state = undefined; + aegis.aegis128x4_mac_state_clone(&st, &st0); + var ret = aegis.aegis128x4_mac_update(&st, &msg, msg.len); try testing.expectEqual(ret, 0); - ret = aegis.aegis256_mac_verify(&st, &mac, mac.len); + ret = aegis.aegis128x4_mac_update(&st, &msg2, msg2.len); + try testing.expectEqual(ret, 0); + var mac: [32]u8 = undefined; + ret = aegis.aegis128x4_mac_final(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + aegis.aegis128x4_mac_state_clone(&st, &st0); + ret = aegis.aegis128x4_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128x4_mac_update(&st, &msg2, msg2.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128x4_mac_verify(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + aegis.aegis128x4_mac_state_clone(&st, &st0); + const msg3 = msg ++ msg2; + ret = aegis.aegis128x4_mac_update(&st, &msg3, msg3.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128x4_mac_verify(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + const nonce = [_]u8{0} ** 16; + var mac2: [mac.len]u8 = undefined; + ret = aegis.aegis128x4_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); try testing.expectEqual(ret, 0); + try testing.expectEqualSlices(u8, &mac, &mac2); } From 2579b1acffefe07f6cbf0c98aca581906cb557a2 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 12 May 2024 00:48:20 +0200 Subject: [PATCH 093/219] Try to load twice the number of blocks when absorbing large ADs --- src/aegis128l/aegis128l_common.h | 14 +++++++++++++- src/aegis128x2/aegis128x2_common.h | 14 +++++++++++++- src/aegis128x4/aegis128x4_common.h | 14 +++++++++++++- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index cb75168..5075dae 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -548,7 +548,19 @@ state_mac_update(aegis128l_state *st_, const uint8_t *ad, size_t adlen) ad += RATE - left; adlen -= RATE - left; } - for (i = 0; i + RATE <= adlen; i += RATE) { + for (i = 0; i + RATE * 2 <= adlen; i += RATE * 2) { + aes_block_t msg0, msg1, msg2, msg3; + + msg0 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 0); + msg1 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 1); + msg2 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 2); + msg3 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 3); + COMPILER_ASSERT(AES_BLOCK_LENGTH * 4 == RATE * 2); + + aegis128l_update(st->state, msg0, msg1); + aegis128l_update(st->state, msg2, msg3); + } + for (; i + RATE <= adlen; i += RATE) { aegis128l_absorb(ad + i, st->state); } if (i < adlen) { diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 6e23ff3..144e271 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -582,7 +582,19 @@ state_mac_update(aegis128x2_state *st_, const uint8_t *ad, size_t adlen) ad += RATE - left; adlen -= RATE - left; } - for (i = 0; i + RATE <= adlen; i += RATE) { + for (i = 0; i + RATE * 2 <= adlen; i += RATE * 2) { + aes_block_t msg0, msg1, msg2, msg3; + + msg0 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 0); + msg1 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 1); + msg2 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 2); + msg3 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 3); + COMPILER_ASSERT(AES_BLOCK_LENGTH * 4 == RATE * 2); + + aegis128x2_update(st->state, msg0, msg1); + aegis128x2_update(st->state, msg2, msg3); + } + for (; i + RATE <= adlen; i += RATE) { aegis128x2_absorb(ad + i, st->state); } if (i < adlen) { diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index d0096d9..dd38ac6 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -597,7 +597,19 @@ state_mac_update(aegis128x4_state *st_, const uint8_t *ad, size_t adlen) ad += RATE - left; adlen -= RATE - left; } - for (i = 0; i + RATE <= adlen; i += RATE) { + for (i = 0; i + RATE * 2 <= adlen; i += RATE * 2) { + aes_block_t msg0, msg1, msg2, msg3; + + msg0 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 0); + msg1 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 1); + msg2 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 2); + msg3 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 3); + COMPILER_ASSERT(AES_BLOCK_LENGTH * 4 == RATE * 2); + + aegis128x4_update(st->state, msg0, msg1); + aegis128x4_update(st->state, msg2, msg3); + } + for (; i + RATE <= adlen; i += RATE) { aegis128x4_absorb(ad + i, st->state); } if (i < adlen) { From 15b8a3c6a5231ed965087c31f942e1ca8f2929e3 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 12 May 2024 00:56:17 +0200 Subject: [PATCH 094/219] Add AEGIS-256-MAC benchmarks --- src/test/benchmark.zig | 81 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index 71475e2..1dfba34 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -278,6 +278,84 @@ fn bench_aegis128x4_mac() !void { try stdout.print("AEGIS-128X4 MAC\t{d:10.2} Mb/s\n", .{throughput}); } +fn bench_aegis256_mac() !void { + var key: [aegis.aegis256_KEYBYTES]u8 = undefined; + var buf: [msg_len]u8 = undefined; + var st0: aegis.aegis256_state = undefined; + + random.bytes(&key); + random.bytes(&buf); + aegis.aegis256_mac_init(&st0, &key); + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + var st: aegis.aegis256_state = undefined; + aegis.aegis256_mac_state_clone(&st, &st0); + _ = aegis.aegis256_mac_update(&st, &buf, msg_len); + _ = aegis.aegis256_mac_final(&st, &buf, aegis.aegis256_ABYTES_MAX); + } + const end = timer.read(); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-256 MAC\t{d:10.2} Mb/s\n", .{throughput}); +} + +fn bench_aegis256x2_mac() !void { + var key: [aegis.aegis256x2_KEYBYTES]u8 = undefined; + var buf: [msg_len]u8 = undefined; + var st0: aegis.aegis256x2_state = undefined; + + random.bytes(&key); + random.bytes(&buf); + aegis.aegis256x2_mac_init(&st0, &key); + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + var st: aegis.aegis256x2_state = undefined; + aegis.aegis256x2_mac_state_clone(&st, &st0); + _ = aegis.aegis256x2_mac_update(&st, &buf, msg_len); + _ = aegis.aegis256x2_mac_final(&st, &buf, aegis.aegis256x2_ABYTES_MAX); + } + const end = timer.read(); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-256X2 MAC\t{d:10.2} Mb/s\n", .{throughput}); +} + +fn bench_aegis256x4_mac() !void { + var key: [aegis.aegis256x4_KEYBYTES]u8 = undefined; + var buf: [msg_len]u8 = undefined; + var st0: aegis.aegis256x4_state = undefined; + + random.bytes(&key); + random.bytes(&buf); + aegis.aegis256x4_mac_init(&st0, &key); + + var timer = try Timer.start(); + const start = timer.lap(); + for (0..iterations) |_| { + var st: aegis.aegis256x4_state = undefined; + aegis.aegis256x4_mac_state_clone(&st, &st0); + _ = aegis.aegis256x4_mac_update(&st, &buf, msg_len); + _ = aegis.aegis256x4_mac_final(&st, &buf, aegis.aegis256x4_ABYTES_MAX); + } + const end = timer.read(); + mem.doNotOptimizeAway(buf[0]); + const bits: f128 = @floatFromInt(@as(u128, msg_len) * iterations * 8); + const elapsed_s = @as(f128, @floatFromInt(end - start)) / time.ns_per_s; + const throughput = @as(f64, @floatCast(bits / (elapsed_s * 1000 * 1000))); + const stdout = std.io.getStdOut().writer(); + try stdout.print("AEGIS-256X4 MAC\t{d:10.2} Mb/s\n", .{throughput}); +} + pub fn main() !void { try bench_aegis256(); try bench_aegis256x2(); @@ -289,4 +367,7 @@ pub fn main() !void { try bench_aegis128l_mac(); try bench_aegis128x2_mac(); try bench_aegis128x4_mac(); + try bench_aegis256_mac(); + try bench_aegis256x2_mac(); + try bench_aegis256x4_mac(); } From f1c4745ad014cd90ce881e90c754944c83b80f2d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 12 May 2024 01:02:15 +0200 Subject: [PATCH 095/219] Preload an extra AD block in AEGIS256* as well --- src/aegis256/aegis256_common.h | 12 +++++++++++- src/aegis256x2/aegis256x2_common.h | 12 +++++++++++- src/aegis256x4/aegis256x4_common.h | 12 +++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 1d5ff8f..6131b42 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -534,7 +534,17 @@ state_mac_update(aegis256_state *st_, const uint8_t *ad, size_t adlen) ad += RATE - left; adlen -= RATE - left; } - for (i = 0; i + RATE <= adlen; i += RATE) { + for (i = 0; i + RATE * 2 <= adlen; i += RATE * 2) { + aes_block_t msg0, msg1; + + msg0 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 0); + msg1 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 1); + COMPILER_ASSERT(AES_BLOCK_LENGTH * 2 == RATE * 2); + + aegis256_update(st->state, msg0); + aegis256_update(st->state, msg1); + } + for (; i + RATE <= adlen; i += RATE) { aegis256_absorb(ad + i, st->state); } if (i < adlen) { diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index 8858d3c..46a1f18 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -583,7 +583,17 @@ state_mac_update(aegis256x2_state *st_, const uint8_t *ad, size_t adlen) ad += RATE - left; adlen -= RATE - left; } - for (i = 0; i + RATE <= adlen; i += RATE) { + for (i = 0; i + RATE * 2 <= adlen; i += RATE * 2) { + aes_block_t msg0, msg1; + + msg0 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 0); + msg1 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 1); + COMPILER_ASSERT(AES_BLOCK_LENGTH * 2 == RATE * 2); + + aegis256x2_update(st->state, msg0); + aegis256x2_update(st->state, msg1); + } + for (; i + RATE <= adlen; i += RATE) { aegis256x2_absorb(ad + i, st->state); } if (i < adlen) { diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index 4f04bf9..bcaae68 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -602,7 +602,17 @@ state_mac_update(aegis256x4_state *st_, const uint8_t *ad, size_t adlen) ad += RATE - left; adlen -= RATE - left; } - for (i = 0; i + RATE <= adlen; i += RATE) { + for (i = 0; i + RATE * 2 <= adlen; i += RATE * 2) { + aes_block_t msg0, msg1; + + msg0 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 0); + msg1 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 1); + COMPILER_ASSERT(AES_BLOCK_LENGTH * 2 == RATE * 2); + + aegis256x4_update(st->state, msg0); + aegis256x4_update(st->state, msg1); + } + for (; i + RATE <= adlen; i += RATE) { aegis256x4_absorb(ad + i, st->state); } if (i < adlen) { From 1f3e7040640ac88f61b9186f5ffc26ab05a125b2 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 12 May 2024 01:06:36 +0200 Subject: [PATCH 096/219] Add a little input byte to trigger more possible edge cases --- src/test/main.zig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/main.zig b/src/test/main.zig index 4f86e5a..6a85e06 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -628,7 +628,7 @@ test "aegis128l - Random stream" { test "aegis128l - MAC" { const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; const msg = [_]u8{ 1, 2, 3 } ** 100; - const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100; + const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100 ++ [_]u8{0}; var st0: aegis.aegis128l_state = undefined; aegis.aegis128l_mac_init(&st0, &key); @@ -667,7 +667,7 @@ test "aegis128l - MAC" { test "aegis128x2 - MAC" { const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; const msg = [_]u8{ 1, 2, 3 } ** 100; - const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100; + const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100 ++ [_]u8{0}; var st0: aegis.aegis128x2_state = undefined; aegis.aegis128x2_mac_init(&st0, &key); @@ -705,7 +705,7 @@ test "aegis128x2 - MAC" { test "aegis128x4 - MAC" { const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - const msg = [_]u8{ 1, 2, 3 } ** 100; + const msg = [_]u8{ 1, 2, 3 } ** 100 ++ [_]u8{0}; const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100; var st0: aegis.aegis128x4_state = undefined; aegis.aegis128x4_mac_init(&st0, &key); From 1349e7f6cf35901887bddea42e6e9c9686620710 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 12 May 2024 23:23:59 +0200 Subject: [PATCH 097/219] Replace benchmark text with graphs --- README.md | 76 ++++----------------------------------- img/bench-encryption.png | Bin 0 -> 148210 bytes img/bench-mac.png | Bin 0 -> 89653 bytes 3 files changed, 7 insertions(+), 69 deletions(-) create mode 100644 img/bench-encryption.png create mode 100644 img/bench-mac.png diff --git a/README.md b/README.md index 58c1d52..3e48cba 100644 --- a/README.md +++ b/README.md @@ -72,72 +72,10 @@ Include `` and call `aegis_init()` prior to doing anything else with th ## Benchmarks -Benchmarks of the `aegis` crate against other options for Rust: - -### AMD Zen4 - -rust 1.73, zig cc 0.11 - -| cipher | speed | -| ---------------------------- | --------: | -| aes128-gcm (`aes-gcm` crate) | 2.19 G/s | -| aes256-gcm (`aes-gcm` crate) | 2.03 G/s | -| chacha20-poly1305 | 2.00 G/s | -| aes256-gcm (`boring` crate) | 5.93 G/s | -| aes128-gcm (`boring` crate) | 6.33 G/s | -| aegis256 | 15.40 G/s | -| aegis256x2 | 30.60 G/s | -| aegis256x4 | 46.17 G/s | -| aegis128l | 26.16 G/s | -| aegis128x2 | 50.35 G/s | -| aegis128x4 | 66.22 G/s | - -### Macbook Pro - Apple M1 - -rust 1.73, Xcode - -| cipher | speed | -| ---------------------------- | --------: | -| aes256-gcm (`aes-gcm` crate) | 0.13 G/s | -| aes128-gcm (`aes-gcm` crate) | 0.17 G/s | -| chacha20-poly1305 | 0.26 G/s | -| aes256-gcm (`boring` crate) | 5.14 G/s | -| aes128-gcm (`boring` crate) | 6.08 G/s | -| aegis256 | 7.94 G/s | -| aegis256x2 | 10.56 G/s | -| aegis256x4 | 11.20 G/s | -| aegis128l | 14.27 G/s | -| aegis128x2 | 15.98 G/s | -| aegis128x4 | 12.01 G/s | - -### AWS t4g (aarch64, Graviton) - -rust 1.74, clang 15 - -| cipher | speed | -| ---------------------------- | -------: | -| aes256-gcm (`aes-gcm` crate) | 0.05 G/s | -| aes128-gcm (`aes-gcm` crate) | 0.06 G/s | -| chacha20-poly1305 | 0.10 G/s | -| aes256-gcm (`boring` crate) | 1.79 G/s | -| aes128-gcm (`boring` crate) | 2.12 G/s | -| aegis256 | 3.14 G/s | -| aegis128l | 4.30 G/s | - -### WebAssembly (Wasmtime, Zen4) - -| cipher | speed | -| ----------------- | ---------: | -| aes256-gcm | 62.97 M/s | -| aes128-gcm | 73.83 M/s | -| chacha20-poly1305 | 88.92 M/s | -| aegis128l | 537.49 M/s | - -### WebAssembly (Wasmtime, Apple M1) - -| cipher | speed | -| ----------------- | ---------: | -| aes256-gcm | 49.43 M/s | -| aes128-gcm | 59.37 M/s | -| chacha20-poly1305 | 177.85 M/s | -| aegis128l | 533.85 M/s | +### Encryption (16 KB) + +![AEGIS benchmark results](img/bench-encryption.png) + +### Authentication (64 KB) + +![AEGIS-MAC benchmark results](img/bench-mac.png) diff --git a/img/bench-encryption.png b/img/bench-encryption.png new file mode 100644 index 0000000000000000000000000000000000000000..90e7c6b4d90d6a9ca2cf2ebf3d8ded2e692d9264 GIT binary patch literal 148210 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

9E1n0SHAP2;r zEPG}#AC7BU0Ro39@Bq>`0Uy<302KtZ8!V9zAErR-l118NEL;t_YoD2G=CE0kAV>k! zG^Cemh33>6bEk%OK;30Ixj^!geN?tJqv+g|O`Y!S2W zZI0ztCko4X$8vr?e1D*{{Q2zWZ2szf2;C~8b`>Cgl9B-H*@*(M&PZCmKCIfQnBIPC z_hoVV`)Y!i;?EiAnwMr_X0U5d`Tdt=X=Sg;I?9z{_jSAy^r9~4Q%q&A``b_n#d_D1 zlmMgi{Y7)Q80~R2n^mXqXW)DyB_;L$cB6L>7uRbzDfLv z5XwSH2j!6_Xq`{zxgJQu5r~K07!mWo z&#=6^$tc7vLydob&D?MFy*25J=Xo5KkT8=X>Qh%&2gI8bpz(h7#Rv~*9!h_^@eO%@ zHTn}-5AY-M5JB-8M--%7@7i#h;LWgP!DkR`t9`&8R{b?H5Sf#>x> z$J;pWJf$ogZ!lg8>ZPW4s{>hp7ztcU%in2LoRNtcGGEC`L0{&^?pjS<9-jkU8eFYE z9H~>L9!z{WT!ZCiYDi~uZm&*o8pGMeVKLS>@}MuFhzzxUN~^l5UQ2q|lylTR+<1qS zW$Au4>+~JPo}ox}J2^N%MBbRJj@Hdl9_l0sMX#f8jQ5n}{iT z;Z!b_%zV_=v~8;9+e9lB&HoOT@2I%`6g!xKB^o^v1y`~B)}lB+JijY*2{04BD!c)7 ziA(UJi8c0p+<%Z#$n~jR4%(jbX#`IZc&#B4JxsdbbP5EQdsWLgNT7826dq`|%cj$b zVx2w?O1__|!CrFMq}pXEW(LAI)9_a+?VP=~#w~D{z;Kf_yh4L8J_5*v%)DSf1qquu zlErLZ^@$8(I>^xGszI$6D};S4zB`f0xp+S8s{e^0;OZ@QS&Al@N`)$R)gtP$?WvVO z3i90gsg#U$>hdYPx<0%$e_6GVACDK(sgiY4&<~~q3G(cB`C8TRcH-00%%7RAe2fh4 z5i&5)I8TTmFRbrPEM`IKJ6^fq#qVppWumqIz|N0dfDMz-h!oGJC%^TaYgf^1I zRx$Bh{DzUTgb}MXu3$W0gP;yoE${R>66jT3UHz%=1G~n-h=f$K%kuKgVzsS#kiIy1 zEwb)Le6p1u*vNWb1rxgC&o`Y|m(b&`Ee|kvT>iA_L|gQkQkd6BEmm5pBMh-#i7cO^ zmK?Cc z6*c|{-1;l-7+7-AL&E8CX|KM`ToE()=V1z%|L9T1aMiPi)cs&lTlPVWAUQ@L00ZwR zRcCQa;1k@hY@q+;Zr$DORq=KGx|J}D^;Hq1KnN}Txh8DMfZqx&5RSOUtxORJ7=j&~ zB`)EuR%A=qweyw06{4~~q#E(W4e99m>FcFe-FQJ(?r#Vxc{n~`0^Z?Kfhm)+X4e_N zrOLnCmyhsssn@nZrY~g=p^y9Id0_}(Eef{yizzqro>v8LwV&V++HK5Q&Ivk@!U%lY zo*X_|#^%1C0MQSCp4n^*#%iyLeWLGOBQRKC=3icm)llJEHmaB>tEKHNw(&iZX@#wR z!17k~q5LJ%PeMbkfrXwQtgJ?Mu`)E>d(V_$dae;c=@>mwOV2yL_*vcr*1A2gotUW+ ztUCvyj9)~(e{(_GAYii68IA<+rXA9YvgTu4|1eDPGm68svj!`QBex&{&6EruF6z(_ zxk3d-S8$`F$mqklH;Y>t{mC=7TfurpQy!MqD&9piu~QDLVX#DjW)2_{{xxk8tM8Kd zeb*Dk4*5FRhvJ*Gf_&xhnp z(22=Xu+ZhC(tFy~OZi>-Hm*w%zisg!;qdI452iHJqc-I1Oqms(*oM9*cT&v<)8oD_ zf?f{km)RfIml9pr8+%}@Jm7)vYjt8~b=*&|?!LZ9@|D^j33L|Id_~}D<@B%ww1wQf zLfhwISzdRyNMI_d7W$DO;X~qme~bD+VTN7k9UNi5l|7|RDMM;V-FfdFrgDPE1(gFk zAZUerIln}Mu$i}Qj_9NDXr$yry?syVEHj+YMaGWpe{4RH!fQSR8y-iCVN~Mop19>$ zfBeQGy#{~ZatJr~UFe->T?>}q^Q0D5t^g8DstRFSdS~be_d1GzO-xAo5P4mG>Q@i; zeHr?!e!v^zS`_R%x#BeM!Q&kfLD(K*Cj&?&A1_b922s7%2^dma#P;9;U!L#0f1=>d zXR#q*Np#cR5_RB1-WyU%;U zAUE(gZ^KhwqP;*&v0&m7Tq-|*;=i)GhWZ#DC_|6s-5=s5Q)NEEHFLvrc*IRjO-xLk z<{#+G(3u(5*Ma43ZmZ#gYv;6oXEVl8$ti%t56W5^s)=e^Gtso3gLq{tUh=uwdKDDP zPzcCi_IiZ;V3^d_6Ze`>83p9g#8IGU8Z42Sm6K&1gX(?*Xof*`jjIv^A#CNz5@`Hm zP~Z?^Z(p>whMIa)rx??NOks8n4%Ps1guh-%HW~v56Cs9zuogPVEd9t8D_aNMVJ!9P zBu*TMZk=5IJ(a?nn4g@rPii2bV<)(-Dedy4v0?F=dAYf1>0_otk~nnf zdeI}$cIu7C_V}vyLzU_*k4Y+HzNT9>3#&N{rjS&gvpj4(X0gYw;v&4jza&>g8AhSQ z54iChSQ|tjrRnWB3Xp|#OURhB!@DvBpNIG{Xa201G}rom`a@w9zfpR>%eX{6I0T*X z89rSCrRMX*h%STvKv>#UF>HxGK$=Os(_*8{GWuQSRp?pZ4;?o39Az$wYAu+h1tM%W zRXWeK+!SAPlRDhr$a_=;n3M>(;^i*R>vTg>5r^s%U9+aEwtR`Op3iH%rS5O6ysXsh z&u?yrE8#zB;`@fPUI_D=(q{3bxjqeQGqi&oJWoRuZ=Nq@EvS>Wj}bR68FY(#1p!&3bqr8w#f;;OCT9f)UY)tYY1!K;mNE(&#S$`rop$R8^)ZU< zpq5j;iYCZTYL?f$0oqT4Rou_qT_edjW==6F6aQ&wry}f3U6vOkLSAib2Q(*#Yaw{NcsN zzaaU*9^bKNOcnFTRBpjkT7_xeV{xEx>hPl%efvCBf1rQ*eL@bBT0!3^L75F+@m^R0 zkW|C{jrEbCIPa<49S75`;`jnUCinynp56bUX1Jd!YVD74ls%3aQGK~$`h{vD$QNGl zALS~VqpB8?y)iKUHaj!^F4sH&MrhLIY5eZ<@ohoyfbGnxuAIDPKKkXqONI+EAyByg zqucxn9Q;60p~?xzLslhl-r(9GA&DfQ2yQfO7MJp&A|V024hcMf@fJLQSO^|~>IxqJ ze)ax$!SVm~OU|D=<}?TbezPGZhf#m|MI|R4P5tr3#Un?h&d!C*VtK-6q@wrFZ8EEm zFeOneQ1G5%GKu0!q7Y%?{gN-iVyJ#muaE{ziCF==s{R+k^Y}1rLXR zALifT=D$yLe+UwT|NR6!Wdjpv0tj&mYEzHOG?_Ag4b0XcDPH{+pheRea*QhLD@bu@1i6A8pSqMjL zuU?5k85mGIo&&2Upue(4n{kmP4}kw;t4#9``88zxt$*{x^&0ybj^7s%k-RYutg>W) z%^9$n;ZA<|R~4m%NjAnMN7yK-}*5d)khknghSAK7Kl`5vT{37gex&(F^z^uhVT z>lp9@KtVVjm9H3k@&H~x>D8DfFOFWfR@D<5bzhRw|Q+e z-|89~C_MZ^;?lx$EcPmj-; ziiLq7O#D(q-~E>~Bv@a!?z5bbT%4CO#XSb`f2x=npWuZnD=WjG4AEg^!s6j7KSRmLlU!>4DeH z&aF8|EDC+Nv`*EBg7KZ5PGhdLx*MW{upb@Em3tugUI*3Z%OO0fhi*W#cJ@a(diql| z6z4g;26RfCh{`n2PrqNshuoh5qDz^9kUtTJp2bT9G=@u*Ld6^;#R3Fd=9h!38_-Z1 zYqVH(zPC`V?g(SyiP1bPK%h|#jGDjx0w}%RS)Pqgusl<61LjL{e8rmf-@UNaq$0;r zTEE3LEt|wb0_0ziST~RRw|?2R{wKri_8G`Q+dXkD89>dLQrgEuBhiT3`|}=zoFe6p z02HE}RS~lMhsQZm43AwNhOR)%jtl=X;!O@u>lDFbSL&CIK%c}Q$O;gr z#izy^bX2wNZ_1fKZGFvl{$al8DtByZz_h?ac&ogzAnDF3#bTON>&kWassVNv^yaOG zK+l(lkAH$4;i%>yYN@*isEDZ?U%Ey+| z6)c)GV3XHB7Ocu)o|;eZhBJaO`x5v@j^v@~zje)w48DQ7WsQ;OX7pYjeVoS^7Fc72 zYy(lJTYo~m zp#26zeL~r5FEUJAqu(1G;GIFD%y*N&e>erOuylDFDcT8f9-tiT!heY6?{fRM11PE# zI$5<_cvuT^Utb@%)NYMQE>ES$1tYlZN`c2ZwQAR1`YFv|xHd zHB*#4uMjp~y+79#anwx2H(akCLRm-a7oRp4?MDKh7il=3Zfo3<#ljACiBH$@C~hDk zx*?Z7tuOTXOIW()tA3zw50I~JWBXNo`Ro_tMx z&fPVo;nA1oA3nxsG+y@keN^p*4qm(^bCZN@i)lNek=J$wZ9IGE4#b^E{5)rR=6g9aHs%jyK-#Umnm8yDR9snn(HN5Yo9MgVuORjC2dSjr@bvi) zhOYI5Vw1F!EbUZmVGE#D=XHA&WivkU^}Mini-NcMpYIdKnxy%nG3*fR{1Y$4AX4?Z zt7W2D?ym(_LOh+(=C(NR%h|*KGzxDQy!~1S>$8bRYts8y+K;{25phZ z&nV`nk!K~$cOS_G9I@zLe9aDe`bv?9lk@l~$z@ny4^2A&F}p-%peo}>^bPbYv3)Uo zAR+Y5@eN1wP5__cvwxj2Lf+5kx7RBUwT7$dSRuF9^$!1YUJVb%f#8qR5ONZeaI%fc zM^CAbUHCAudu(+CDig)b_zn_6Au#?qY_-yh&ENkCX#^N_?8%BgHCk2*K;z!*m=ed4 zcB7$7WFdf5D8BXTh>W}Jo9wx!w^LTH=5MgWbbZtD&ge2z10tc)_mGnF8JBUGtTJEX z@!_h>&q5&SuQCOCKiXLhz_({g686#_xmXX(+BT2slcAQ1C?FxQe*bsbYj=jvK+fYV z%#VkR2UX&XJ@FB!DTool;h^Y=VktvX!1&BOA2BbbG@AkHp!cKL1GbGs6a7T+PV@*r z15I?R`RQUBpaDMjga=#16H_iyX+|KG72)Uci2N6xHGu{ww@ZU6W)% z`)5}9`3Mi{5$NhZ|8c*mt2msW3io6!$2=*Nq$j(uARm(ptSgK&ou;7ClS#MAeHW< zQc|0G83b{cW+x(BUFKV?W1P zN=5v-=lwR!i_)8}(KGy%sETmF>fK*cF)>z`6DTyC!zUrtIm6wH&tPfzXbdJg4h469 z#vA&bUC99n#}K-(Wk8m7=D4W6o->^K(--VPSLy<7?bM1da({U)S4}2KBX;E-iiSW!oQCgKASreIAI%MwW;N;2fYe`*{X-|P8#2kE zP<=j{M=p(jS@yliqsM{r@2SU_Ovo+`wLfvns`_7+FK8pZ6P$2^Dx2l+kBaMLmDTtI zoRVTe-9ZCAMq01s7q_!rB5WJ=6eA4ufiq=p#Jl@*TNk%r@UlVvlfZI2c>L7h;qN#w zN?q+QibFZk$|nz5od11e5pjqu*)2|-;GZ8-eu@SJCE=NKio+UKti$G2X>Kv}S(sTa zE}+yIDJEZz<4f2-2Yy=R1>3csk1oiDG34H(0bM)9I*2zd<)bf(M z^nA?v2b2hPNw7zR3UNliVQ$iKIlVvwMHCAa(v{Pf$cbP^?FnABuC56hUiuMJ@+?*x z6&<1?1ECOd9Yr=9&xh7x4Svsv+Ko4!?R*2{Wp3in+V<*v{}bOlzktrv*2QFrX|j%1 zFJqv;B_>BH>k=I+7}WotluNVXju2b9e-_{M}2Y(?AI5oObNC+7u2-_0K6PF>KoT4BD zCvYj!*@LTi5~cS~*Kyx<1@91>2)V2v9_7&UM6!z6OlEy0lAZO)I5oN%Obp7|{du+i4A{@#2wHdxdtN&ad!L&Q zDU#GmuPFsCaD~l}%hW+1=zs8*LiK1LDM;^CyzmJOLT~)tH%vDl?&ov;`n##x1RyPh zXRxE0(D!Q&eAkhJ|FK;-v>ygTO>x#E01<9}({XI(c-8s84>_JfAo;yY^ugb8%iqAcI;VU^RL5dRQxc=NtFC5=lH77Rr2wXY6|43{whb^QuC+ zqF6NZ2`w1}$Cpp3t2$RI9q_D%e_gd8+b^wiCLJDcD1E3Cf$!aZpmfGpWLNw9`dYi2EbxyV8yz#{eF6Nu-ztR6EZ;sIgJBX@hNs{n8b7WTgk zfxzDP(UIf$sU|ZqdpiK*9_J|L0CZ%g#pU_AKRau5&v7P2K3MGP2j6&l@sbk_myQK|&2e53iz^^dTVD^@LvryT z-dI;3yn~4qs9FVOw^8phlmC{1w8-VBTc+TbkQac`1Jx< zWhEcre};4{A7_5pc_MJO=lX%X!{*x8R~}WEgMrk54ZSPP{SG;=G)%ZDRFV`szx9Pr z{yRr04ifX4GRee48veKZEo({r8!(=ZGxy9r#=Q>b?*n`zwf$vp_JolrS2L7fp3uo; zjVxME7?mwP2P#62GK#3q09fD`eHKf_H3*UN*=PaV2Dft{*=IzLBNoZ{b-e8O)(O(e zkxMtUv46+$;lz&PUMG||Nb+X?4{3-L5_t!^%FE>A9|>H^0}l*1NXdpk$KVUN?;Nh9 z8}>-x_d6@53*NyL?Q1{&%>7W1yOMEqaeZe|J84cF+Chbh>J#1LTmRRy5rTjs0S(ET zmyM!IyXcDu68;V!BXN+6AZ5~8Z2p+30&MspT~XaDh)cb;UkjDcU48NZfbIS#-aaZthBuS)QWBD%=MJ<<#}dRa&ek3CHViK$}zaR0Vr4ZXty9NYYsr zub=&V;w$#Rd(wP74v{gAnxg!Yy`2H#Apui7VCOSoBVl;>?I#!2H+dK}I4%DM=4cs1 z2fTr!9mi+hBO4K}gXsw%l^P56AyTC8;PL^9_n2v)QCXZVJWacZsc$v1ptofamm}wW zjycWnueA8(DviLXpg1@3KaaRP)BHR%sOoS7-J=`n8A>O3pSY^IZeX ztDPB9hYd*8rf~6Hy8y=LvIJT*V&P0pF0^dgN(9;;Rkqp&I9>1`|*zP)R-~ zxzHP41GmH)Fa}*;9I=}P$1OPkF^Cc`o2x;+M9)`h!NIRjkVy0T0yu!aiVS3fo?{E1y5Cor z*eiTs=50QDOX-qPXakH@OPYV6@@8gn#eTHJ_T-3xB2ra@QZ+4tC zjFw9h)WC@G`rI311DrNT#Lu!34R^P0+Oc!|nK5`I1CW-=dCzG{$idHLd}mK*?l)5E zy5sL`W;2u0HBW)>uvKeIq|B)AL!+lh4#NA)NFt2z?|`X(a0!e9e2Klg$YZ42SV#8w zuUqhJrcAQR*J(FBsK3tUSM;qmai1byW|G1n4}2!5k*y-zaVQ_WO;NXLFU-Ok6X*pM z9x0P8G?)`1Zy(mqYw<}w9Mg=jltihPq^<50c|a|~twq7Nm0w1!2NogjLaK?!z#_Qf zE6tz$2HYmJhg#O|ygq4l*r0_sRD-Mg$#sLyM4|w?_jcxumXy^orJE-sN!1Em=5lHH zz^rDrNrd(LV3(8hH;?m0znsVeJ_aWOHIKuXfGbp6F!1^rwlfnc zo!*c>Ztj-JVnO8`y!6Y%CxZK7;yB^EqDAt*$0^(T<`0ESr3Dw&p9wvwiDc9V%Mw?} zre0TLw9P|SY~86W1a6RP9UrNxloj=YuuaMie?WqB+r^P0Fro^cFZetpo9(J?C?do3 zdWv0#bEcMKahby4FbpbN$nn<2ytJO_2Rp#o!6kNl3T!hpobZ&z@;}-mp7>14BmaxG z_l$~a>AHncQ3NDP5)=>{njneb{ zhFkcY^Bm9n-f@3@-#%kB9-6&(?Oj!?YOOWboG{DVC4NThNm!tI=pF&1{XGq+)p&v6 z=`VJ%i;Gj65itV2Gca?~uV+L^CEBJd!P@T^8pX&8wk`6&>N;Xw!T!U|p8E$4jndPh zn^wUS#zW}r{_r#jMjBJmjbqjj{;c;Qx6L_^$khht9S37nbr{m^K_#`^sK4((1mrP9 zk^f}n5s6Avz;$}%buG`G76v~?GUY_u4~$;&PIri(091e%sB+Bi<+|?(cG(^qh2kQq zEYX}_dLLUpAQZtf_ljF`DYcpVkUH;&$1gXN4EGCp$Xx4BDwSz-pfy6>A%*>JREalp zE8CrKK$@8+SXG7bUYWw{IG%7IFCvj;w^>sWSPgTMZ-0f1x{v6MrR{NwqC5zyUzCi! zHlh$FzENW@1C=LBS1n&j3uPIusiVEEYth~TY4_(?e)-~oi^}!{K;(74G;24=N0eI( z>R*&UZzWrY7=%4*-FQOHMdOQf(1{VYkQOPZ$XkWfiUo+E=e>X#zIersF4_#RV&Vg^ z6$-QKF{Dm`Xxl;ca#4PSw0wc5Kcb=!o`S!TwBgVPoaCo)kMLhujH{RJa! z`vLHVt6|(JiqRUdBb=ijY@p^HqZV(D(56pBUT6BAKI{4&$N$l-H+f#>sZ{ST8E`%s zVi2R*X?7At*G|rULntKrW1X)nJCrPoAIV;jdFPt@APfrA8qHS? zAt_OH#%9fx56KxTJ^pg*1pThz889wNW;a&|dY;IHgn!`me)ZpBNkc_x()1rc}nf@$;ap0xr~l$5KTh zNx@vyOQxw8=wKlAHh6-6<(sDZEKv=@*sVso-zgMJng)giUGc=_d7dR5T z-9>I%k^QG=SJ9hw7!KBL%@T9vd)1<=LmvYvB?tTQd4k&^FVco}aPAPNJAt&- z^w5&Y^y{?VF+7;>xE6wf#w(q21&YI;weoa;b?e#P2txDD#OqFRXx3R72%j1Yk$(DU z5tX3^CMcO8R6p`MkE-WNOE&Z1Mun2#rU2w#SuqL;;Nlf0XTDuVo|nb|pH=`ur4J5WLZZ zJf(*6iZ=u`26_C&#)Q7U?T0m|h&KbqiZgoJ^#@1FrFTI!R$oFY(~%k zkjs#$NyUIBT;9htI$p<1yV18TJ2|v4pTHEp9De+`e@Ga87ipIcS7>_RGDkHD%ns5J z%!PQ&x2{B@SuApwbvGB|v*PkZp#vDhT@r-RP}46`I4wau!7I8(b6Lun4>&l@G9{OS z1{0-LQm{-^I^|@`ezT54G6W6HWw9yS7|L%cfzhLAWjaP1NK7m89F>M#^E*yn<%__LU;XP)rPCC*Mn2_i}iD4`>f?2sx zHXCvKSdy5`gOngEcQ?8hR3NO>1H_XVUf5fWlDKa9Y=qJtSaI-99Hz(&J|jTClCd?g z+}3Iuj>xJvRz9svgkRr;Fv!YngqkOA)f~crY8}*?7UCXn|Ko z!x!qzSn{2Lv*ra2a`~ZA*s@^y;1$wY>CGsMLU^Y;`-`$GyC{`cXl=Vu*hYwY0ahc{ z{MQeHXmVCjUuhz4z3?9khJMJBw<`e9zz9pwonPO*oySrMzwT?C zhTSQZFH9VNtJ`S|Mn0)*-~FsD3vHzKLHG zsSNXoQW31Jd#UZW)wzucO3|4axGjJd*xBYajQet@GA~AiS0E)%>>rt%i36Qbs{t5a z@>!5d|C<3lM)3ui1_~K#msIYWleJuoHAo1Kh5k=hHJMLLvY2fs5Qee*njT%31-qq0@%&k;nje6y;svl6 zhf)cC&MjdJl4-L@pfLA1odb5_ct?mXD%d{fEAhKzy$3ELNF`QDXF~jCC3tz}G#ynM zRL65i)TuSb!$Y#>dTSa2v_1=8`PLO1MD{#D)(;oEs$`ImHGhxBBd1vQ`%29RbwiWG z-Pu!s01~2PEOXRsyWp3bm`m%eVRb=r-`sg6WMyDgOR<^?*UI7p>oO2Zuj$-0hG0Go z4X36?<-b@HG`%v1VQ0*=8YR7ozu!O?L%P(wGGPl8jYH9JZT(m&o(HO)e@FcYSZyat zllH*30yTfUhU4Z$qKy1}k`=it>j~w7xeT@ocxr;}SXH)91~AtyI2ps|4GMq~e}>mR4xHpB!2Y zYXO8PK1>-pKc-df}na zpr>_bgx50JEiMG8;IhqR%5coDWR@?49NpKkM;5q{nFj5P~OkQv6ZtL93;mw zJSLX%ov8)SY(z%#1b=3yM+&|_KGwBsA-)y>UqA>R&QQ(#W9j`ilUq}m1gem_-sj33 z;voAAwtRAZ1fO+kcmy$!A{=cHQ#tOp@0Zu2Dso9!o@L)~oIu?=^QDWsDlj3^8DJHw zy`yQd#FJZO;{ryTLm6;FqYItZM`!7II^A4*JbTi+3oxT&^~B2A#VT@NW>>+5ehv`a zBLF#|CY7Hl!z~5ztXv>(?lvdE8Wv&wi=kNTS0f_WnDThjAfGBif%|6um6u8+gQ5(b!UJ(}M@(OHy2`zA)x-1a z0npc9bcbN52ib{_a9Tk5Tje@rf~hx_C7WONO|V=N@ng->#~k=I)xecLzTWTFn<9{s z!*p=+Y>z1=D3Buyrwe4#A3QqlVC;;c%D9o6R-I`-Iu1&2*sXPc1_n_q3@SE=JlF?; zggE(|Z(tt>ai9vl!=KJ`WL*~G)yykUXI8X(H1y8vX}39`@OE3+mR>-)5r<0?Tm1v2 z7fQI27686nVbekn!@#Cp{~iXa?Ga7FqAwyH37ueA*S9^Eu2`zJg*KxX+gVfyZH3<9 z`Kdp7jF|apH)!Jfr6QOw&HdJXPzVSt%>F%M$=G%ZmZ78xdAk6`EzA%S^3++A zh^Z;)5FOC!A43Pa_RG%!+u3Wt1PQxqQsl4!DZX(gB&THXQvJNeJ zwC4UTH@Q)ax#n%fx#qdjzI!4=?}z-?^`ALJDz(Dd80CBHW<(#}MKco>*?zZ*xyatm zO(Pa^FtID}YfDvGpWf&D(aWE-=+7o!Uz;1GXS#Li)9?^WEYy^++nhsRWkrl^qS{}JW;sVqf4f%P^iyj>6Dd|cnO2)l&DSD(jXBU z&EwxIG8Gkp z92goJJJ5~bMS^H0+s!%VuCF>@#Zh`yIQ~Cbbg;Fa9{p68TX z;=&|==7=yCGY-QW6zru2`5Axj&$>X~nJ#s&`~Tw&T?OL->hu5l`7QjbZe2wFv~7Hi zfL86p-`R!gM-$wqksy(9)xBZMsAE+)Ttn^HvsUeKD-3|?fHG1PzmnZ@AaK?vFsWfcLOb>-d_0gBv5?D6xX$b z2jHcE-;OaxG718B^7OnfR9;i#By{a+T+D87qTFjJe>gZfDKp00a>!E&#a{UKjoRPV z-k$KXVrFJ0JUkq5hH^=L8c@^LmdPB7k)*}d*3ki6oGklxZrov9FJ6Q{0y&08B?}9S z0HKF)AdB!o=;&)5l}WZr?y95v>(@0?n>?uBZwAQs+236*?BPn$`Es}!*VfiXwJ}{6 zy6}<+$4^Fy?K^&@7*8HUSn+`Q&{% z>oN)e2xRntJtn!~W5{Zzlr}(b%14RU`XVRi6_ALLj9NT!7esU|jUzPjj8R@EpPD~C z?gA)&!eF1)<-NjXfPh4+@7N$F3`R!_@)mK2VS>Q>f1>*K+F?pTU19v5Ok1vexPa~1 z&yL?F*?+Zrq!pIbBX&fC27sK;OXeP-!t6z1bj1YI1{o`h$vnMW7V~6h$0NMXtPf5QS*0uCi zi7|a>bq)_NTEnc@GtYyJdv|Vu48kMAjEPNWkQQJ9gHq>9-?D=-0Jf*m zlWFhFB!#dhNFTYUD|8qaeSQ2zg{j6PcjQ&#wnp;)_g}y4EA({biMF@Bfr!wmV<%^e zREt@S4xSA&qC+C8*@oMnZRhOMKv3PC&+BHm&l?M=Z==1JOt+ohKAiCWrhw)Hq$L?S z=dAbfnr-vO9V%y@nEq_NJe~;GrP@C_imP$J4rlCY{As>PMrIQ)k{N#ESt5FmVzk;L zx=+F6-7P5ppvgx%zTa5LOz?Mn`~9$JLVR5!xx!Y+o~1H3W77xGphRyH6Y2WP%L|H9 zDOG=K`jAp{a{pKM_iROWB^Qn}DtefDoVN0ZxCrm_bze1Gmb>VY^aRIacmia2L~{i{+dngeKX7@H+@M;a)G;avJ_!m#seG0B z6*HvY=&{D80CL$mP=Up(jQ0(2q_)Nn30$bD$x-75&4cY6xqO`52YM$y<^<^sY5xXu zT0%@aA78=D5;~V@lhcbYbFxW1%J*#py{Y&u`BXluJ*1K8>ET&l_BFgKcHJOzIqKIN z*QZAnXxq;uw6&4JsTmn!BF}AREg%0Be5GFHoELm69|*^A0Ck516ylwW%eto6dZ}G~ zn~svw@E2VHX;$*Ct(hu2PE23Bil@4@WO(ts1fYIy-boUqq5vcrJm=zJJpAOooq@Ac zRAumQ%h3yJc|&jF?UT-09PTA^J2d+y*E>;rR-Q7)0OzdA()YW||DFJ10FDJh+Q=$>NI_o0FZbHziq z-1ebALF}jC^oj~@6=(@J59SZ-z>dB?(nx@j{k{x}vqi0xDOmJ;g6<1=O{>YxFq4Ge zG`ckii{!!VV;kLiYhh{0E{I=eZ&T;E8m0ELbv~zn=u4%0lp4OULtOu=3szgRR1CgQ z7JwClUXh`}$Ui~I7E;g&@`U<4CEf5>nr`ySq%Y*7FP4f8y=1AyDY`#g^HqR@w1{$@`N z8qjr3GH0K-#>6`+3>IlyyF|5qO>6M=E(EH1_qyIa;1xj+ei$y&vXFr&w$83tH8Jjv zzm|~BA+5$n`UKwiKxA<^ThY4b`B`dhu~!9)1&!~8&3C)aNshvA7&%Z||WPoF-0U+Ri$ou6+CbiL&{ zP-`Si0|Q80)b!H_ey;DeT5mY1z7muUj$;J25=sCDod0{RheJezHYh}~>J-Mz$SXm0 zLNC#NvByx^5A2ixo_9A=07^*L3^Zw+u0H{Zo|A%>>rO_#dZ;I#5gMABO?^L}KhxiZ ze}d^+F${LYvnCmKT@%((AojXy_Imr4U=W~V_S(LbI=Ur3V241k(39v|HYv=$M4 zBs(;GNhDGqo2Fd#Vr8~%h?YZ7e@$K7=G>etSqG}&?srHxe42bdXo&v#(!FG7V3C~+ zr%5v`&xz9!(~eR30uI8$d&_;C4_Pc}Nu(3Zco?2v_-UKHay!}2#`KNKC;;5B(3ZGAQ~T15V$11@E?_2L9B_w}Jg_kY>n&ccMZl%sv5( zbtSEw1mq*rgH?!ObeOP%#@5cwf+Wy%%`v5h!;rOL3)b?NoqCkOJ z49Z={xUxkM2@F*tzUfDjuG7Qqp%ql@590$4>(_Yi41M)FUQ0k%i(1wpj)6(|fmM~o zKPmid%-&%res4pvj=?lbEeRrlPCOa@hSS>G8tcF}M7I|7THZ@?e$Vp4Wd7G0BK=51 zAD6iX`MX@dxrv}xF#oHK7UMFs@~yD+z6mO42PcKIf~5RQ zm&^|E#!arT43FF*xW}<3ySgXh`uVAkEm~nRmt7-z!wqdD`YECUenm!yxf9{Na3c~} zm;E;38%jS`QMM$j2kT?4yQ@Q)QBeal3JMB@Bdy_|`vG}%T@Ir7i0=;nwQ%x#*v1ng z=t(nSHykNz1zjpPuZ$ZBGvO5n$5~ad5zud`Rsu`we~h93qBGB`>IS?KqO@3`Sq%3z z?RQjAgPNJ%26nKO>*XgR5|Z)`>W$s8^b3ZkZ#o{2jn$V1UD@Vb0i9}B{TEWEF zy;{MNe6}hl;U|_ii^C7;>S8Zk*C?R%F8hIxTZZ@$*n-PtpSD*X+Ujl<6h9`*?LK)c z#ev_ht46%x{eJBn8VjZkg_MoWm$|Kf8R>i*XY3hDf>)hs@Q^PHTc;iOoE^&D4{~(( zw6wJD+`NHE`+6&PB^=||1fIzK*4;LON7P1(6kyd5r*4m-W_dhGwRrld&=hu;Rq|Pr zb%&uElwqy9pi?FSqd-u=w))MD7S={eyydo?VZ(}d86Q6i^08Vq!q3K!}|t2I?pjkc;SvuU1x8`ulM3WEmt64aCPUe#Fo!1LevEVSFiN zW#U(otzUtZ&VxIPf2^vIK#4~Y3ml5Sa?1&(fG#0I6?aR*yF9V^i&6z4v zMj5_>#tpz+NY@_2q8Y?D#?wf9KFg)RfDVfHnZj;#*R$9O03?j#;m^U9rdGD{ z(Z>nWweAO40TV~ukrF5rqLCHZ$(!{!H-mJdRcqu-Gpj^&J)mrb27xb_%3 zth&w(tU6)^G;a0H5Us`nOj7ylU%R`YL`~u2Y3cCAhm@3|tyz;-d?5l^05L<|YJD)z zA>E?ef-iJ-%9r`u7vcW;3Tb6m_=;!M+u2hqgh`K-l$6T3d11PLFm6l*)@98AwGx`N z2=$X!--_v4!fzZHhzun99SC4{aB(3O8b2;{aBvv1F7v1XLiCziIM@$~umV(aON`+s zMGeVBvJ`#QWo2<4UwM^!Nhm>-LN-w>(G~hD^YLWVDr)iM zgva03+dE}x{QGx<#54QTYgfRvf*4S(yS~1@y1EM7y@rN{j%@@Gmvvf>BGDD&{q5pS zyuB0H)Ya7mWEvi~0qxV?zCH}UHy(KZmw>_lD}-=S=zzg_yO{+aZM7~9MOa0A8qgd{ zwV*G!Wh|*C%54H%Te;tOy43&p#lLGJeRzI{CWgV6ziT7G=l?f<^vyVjk?m1h4hkUn zz)g;*X(*o(Jj4OlABOqxteRAMY|hN2#kV_mIX{`A)m;Bof9`BGW|=otq!eQbH7PKX zWtp3_8G+TOb}K<~-UYwouevDL63MV=QnAiOc`(U-|zaENAo(H zDn(1ZRiWImxqKU#phmO|Ve1&ZdDF4%QpEOdL*e~01mBbAP-<{l1e#NnF4>2TnL^1& z@?>x4hbq)Cua(JRKg%_pw=#Umi>aY*nv1L`Z*l`$8z$ABTEsadMR zl#^$WGk0LdOKu4?cYcWCV%Y!Sy*z8{B@4?dR1WreMr9*H2~-9A8pbuCL09@T8!P0R zb%O)2CW4U9O*RvWR-240J z+E6XbdPSfU!U?3v(Lz+9qTXuhOU&DYync9`fBnsI*M>_7f)Vd*vzi#Xnn?#PLVnlWSTEXz-6$SVce%)2KiI}z01N=@#ICrvJPdpm2HFBkTp;| zoZeLw8j?CIr6y^>s?&T!%Gf*T*{9 z3J))wTQ}?oSzat~%}!2EPEUJ+SVmv}`hl~HOGHEjV(#buKEOv7mX*1v0;p8q?;ah+ql%|C0|El@h0+zc1qABq>b{JvZ}*n0 zX+)Bz7Znw~SIF~9a&%G{cyh~)^sif9hMns;--QY;%CE)E)Ot+d9N~f3Qr?KUE-9&S z=hIw-j*eG>%hp5XO*f)T4Y%Uqt>OKPrVnEfyR;3_@R5>!#mF*i0-{HY(%i6qzk;A) z2)5N{cE%)#2ers{ngAm`n}>S84~ZZi7RH#JHk{-x?q;bDKDL$bCWrd{p z_|&PQgRo!5*s&A@Ylcq@vRJ73jvi z)XTJ;dQL=f{FMzT%7r$)qkM4!ijtPXD=T?inbt@1X8;eIk@6BKIDzTH>}hF4fiQ<)5KR4LM4M@9^mMt%^i$Lh<+pDJr zq9HVqk&&I(bwW+$vit+Nl#}(%%(AB}Ja-mEvu_bV%O3JJr&^ZQ1BvaRvoi;56oS0> z{Zx&mr{!Yco4+3B>bWjH_u(cAD0lje#X1vu+n7Nkwe6CF zyGuK|Rb>4Q@@KD_7g|E&o@h^I%2Evgk}fWR_rW0{gak=F&q0=zjMKotKy)tx1zFO2 z@s&Ffh{yGS2i%&j0L)-S7!};y8N3}maB?=|u$SEJw-o8v*zWdWVXxEE05-yXa-YdE zo0Kp5W#EsgmrzD129;29yLp?aAY&?Liyt}H|9+_7bz!-zaT{ofx9jVz}yB3+{%FMxZ&5OHE9oEwdpPr5*8MPJbOkEFxtCX z@Q}xCkqL?3lqHk&oW{5Ry}j-FXkLB&OM-^sq+K+tXR| zYPTYLqt0js<7AwvpC6<}2Zl0bV*-FD=e_~y?!UK8&wZRCaY&D08^<#I)}VR{W^7dU zmdklV%~T>NsGiMtYAIQrX;wLG1ySxRLi~0$IskY!dyRp3RFnh+`hby`VxIdVHZCrc zy)F|$qtOT7tv)=-kR|wUTlo*p)l)FZFErt zO7*~JfYeRG{vokCQ^koZB`MkHEF@IDn+i%~XncbZV_T>rf7b!McHALn3CO&3w4aR> zw1Ka&KUwh?AlmC}0PzaZy9Cc{0oL&dTl0O24XY#wN&Kdxv|VV%v_r$dB8GSR+V!)1 z4kX~tL=JRJHdZwRjK;~9aVA4|D!0!I=Vk$xE zs|trcIvz88ly<6sJt^pnXH#`aQb-86x3|(CPnX+0;-aUAK$^qaOA3&NHiHk;nhxFm zupxP0`nFJ1kfjDj>x{e9t2I*yFGg_1yoC3UYLT~XBPK@O=+k;x-@%MCmeQM zrpl7}HZ$HJ8lxR!!~l8^pPG@LKK{8?q8SIPUijq~8R$H1ka4}wH2^(U$gc*@2?2zF z+i~T+{Y?RF5uUdJ>X-C-54qVwO(r{cgKngT+KFQ+t z-DdZX_jj(C(qt{|hOa?+QAqP}6S8YiWY|GSunK}}%E~ccSwKw_0kGutzktVDL;jLZ z0JCioNYISy6zIJP5)l()RApf@xu2Y@^|Z;_6=QT{L_f3S2E|Z0H-R%uG|MC<6{++(Q$06Rq#H8j?G(yw20t&#M*>j$N!`6L!D46m%3EZ^ANKcxv!*zga=^_l(&fkg<1kj`K^4Lj8u_E~vCeaY);l*J zBXl#e-2v06DJQ>%`r70>J@T{d^ z=$@l5x6|R4_Ogpls9qRQgAB=j^&oxmF)Jl;K;62D~T;o?$bzYB#s z)`q^9YMf3swMBC*7yvPp20sh~1E5NxQ-uh_K?lZI+%(MfWs*-+6rrwj)N+9)&`>|R zWl_d}6UJs4nsKGL{_NS0He8Hb!*Ld5H&OBTd#4<=v)%=*xY zq=Ifqzd-r_Zb#Nmi}*bh#s!7d9IOLK*ft@9Scb;NZv);2-++XH>R@#p9qS=K15mSr zWh&0_^eJ8f^}4S$Sl3HRN~~vQ>&~Cw2p=}~@3Ag3xXE4=uOTlVxm=KhiSclMxJKNi z5ZI(+>ZNc{>+C)Wa}_XPg?rxckl@bB&VCbUgnc65;etmfPJYYQGY5O|w!dj6$OZm* z`Iy--FIfYdb#@@tW>NV3<$S4?>#`>FxDw{T*o~(>L@SL zrA^C_^}^CcAxf!5^uv3?Bf7u$x$fu2&=(~*>M2fM6B`+OQrwtE9l$RhtE=@o-ff$m z)!F^g+uM7Vvez-R|5R2bF)2w?N2m52RR_wZ3Ynk0`_4&hlSZGIkkIiu39PRN2M5(| zfb`bEflXC1YOWmY=6HFNE^ACoOe%^IVGFq1aK@7kU#h>oj-drvm`hYtpphH*yM+r& zM8ZXwI?9~c;*57~A2%=!GeNOtq5a)jy`vV-dH2VguCv!iIi zX|v+tt+RB#u~m5VdWWwZ=mUZ!^ZfiAxBy`57mAT~u)lwMpeY)`+JY!uU?Bhd^u+Us z0!Q{a@ebi^TvcPQRrvL-2rzrjQn#{vGBPqeyP}S!zZ;hoO!>|GVgB7}#WnBG_EAO^ zQGp5%q7goWg|)T(TwLRWgS&fEWq_nYTU&d=^4Hm!mZ9VrlIX*GV(*>5oUqJ^Z3cLH zQ@lfAz&IoHT3=dnG-mH&h<7C5;kh~lfN-ILquWbMCocx*wQ>V)hP$kbtcpMTH2Fbv z?)Q;meA(neGydL4T_^T?T8oNh3<8a)8;<2+WNpU!RATqTJX+GYI0gP9>1-` zi$3eH?u0$Te1+}O#ccD~=9?!|X(ivca$?OT2wEj#!`thGjiCE5vNMP|8euu;2=^K9 zv{@?agrPY?Cp@n`U{|np>H4_%F?VZX5z{)nJhsEe?pVXvnGi_W+LmcqrhmiNEF{(p z${X)&pf2r%0gn4}2x@gJJaEF|)ff`JaO60B@fv7orww=^EAXhRh7JyJUwg$=+6OIt zURA-dknF=$STccgb?P*un}pG~{7(+P7WcYS?cla>pQ|A(2lwsD8xLV_2Hg|?kvIGC zJIxtbZ`rHdWb}GtPT8h6RqqslE^hqNd@^;ZE&Tm|?nV!V-F;XJZd6`2J}HrPXRSP7 z3Z8Ftb=FJn4%%yjB5ipSFx%-6p!mvV-J;?JzMvjiLb*(QUyNZm;$Ct36!M>O^q;}h z{-yad_>0XYl=KQQ%}<_&zlPA&4{tva?ha#4G@}_n*4HWsJ&|q~_5Ih$HY!MaLZ9fb z#l_Ll2rM1Z{QH7b-~V#-uYO!^hd!@LK%#%cbcEh4{y=gp?fL!m@4Rq35C0BUT>bPrt1uD1-&P5Fd~*X;C6Mv)sO|4DclG^^v%W994DSqgO&{psfmwg1d(Y2+O})hBI=#ZWI0R4gbF;@yarI`^*`0 zE@$90v22V!7&Cj2omv^3B>TGBCjI8LEXREa@D%EF9^++rj6+$DIHP%;QfGj9TW97!nX zbgQsfcvE9|P#}w0*grV>c{{aW^ig2YD2Y_C(vkQ=H)5~V1>RRvGbZzi4ROj>5$Q1N zxt+NTADmrGIDD5$G#s1p0Ygvxlvky{=w?36S)$1_V@wG!! zJa+-g_OB0)6#402J=XV~KV@C|@BUg!N1>WqTj?XKwotq-Tl9+R>guB(OPiZTh`^qV zIR?0l-=1@Em4E&$O*I7yIaqH-OdRQlQ@+p$%LA`}Wg%a?3f<}A?AW^*Zts5iY5SbX z|IgcXK<8RbTn6W6VBQ71!D-T9e~K5|lh`fIzOgY|Ls6u`F>w#X4*-);4w6tWOibA2v%g0AC96^#3xFjH-K*%f#eACjB zU%)-kR94O9szOFrF_SulebE2Vt1(yMkQr7D>er*9Y?G3cE!F({Xw>-Ftaq|nGJvaN zqUJw!)!i2x6KvCB93hRGUyF*u*P?bf7dg+X^~*Fawr^&Z(Hw({O8)hDmy;iYjOH| zvHOVu)~i+L^`H!_sBeCBYnYqo@ZZqw-VwkEiI4F(*=NvVGs226REpadei&P2U5W6# zZ2Wma^LM}hX9OGuZ>wTw#3M!ITjc_U-`0V5T?F9Ez!5LCno>!q+*wXJDN9$(glGA` zeG89gxz^fK|K`S0H(+LGHwR9dg0zH0{SS_K8D@=Qxw#Th!CB_40H~FS+Yf{?r4ynO z5`tYs#l+GE0T>@7_$Z$6IB&#j@~(m;K5%ix;t+Z7kQRhCs2L_tEG0lIOnYkx;fz-_-**DNx5hm z{;i39M>3)87vnINux3xNzL$w<1^WA^24!|cTg)wXAB4oG@#xxnS#M}g?5vl zlu^Q?{un-BAf479meE^J!iXLrSXSRgTO3i3x&xqpj6%Ca)KrE{;({~yKQSjDLri!8 zRARr8&mu&KYP`-T3s!(of%PUtI=|zNwuI?z>&SQhUQ|udVW{)UEmbx6he|}X%?_YT zdg3Z(TeaU!e)1ObO9I84V`*T~mm&c8AcC7+4JaNw0dzG>4{NAWL@)eS@JB?vuAeN(srm@<}A)pVN@WQJ9atAsT5 z>Ef80mq1g^XepW31^!x9Nr{LiIgH%@g|#b$y8=kQGK}^VByDSF&&~<`GY7B!Ws_@L zl$6f9iZ=<1uESq8 zQPwYkXbjwU?^1XG0y3iYZn*vEiEQ0E#m@hjW0zHM-eB;)Xa^~VP)@hiMcWs}E(ZXk zp58u)a41c|;w2R`@MF%s6+sP0iMAdb$0m~PZ78UVT-Gm2x{V`JQBeUTQ6iNd5jdZn zCL;YKQl)|RfOfU(z{rUpc9g;zXsVdge5TYz*+Inh*17$(%5SOE_xg+0z;sy|DG;~&4+vXoX${ruY7>kpid{~wANBlG0wxg$0{-f z8`m;s^C|BCcEj%n2riX>;IyIag+QTGy#NhPi2H783sUG*Xh$XbnzCwy#ST>1vL(O4 zQ~q9%RJ8^1e}U-<_=sE?@g{^#E9_e&4Weg<-(pCyvY`MO71IPPI5?PILqNlFPfeX7 zkXw*pG#sha6|0n4#`9kT`@5TK@l4J>U%kobItvh`mCOdkOA|uT{V0PTG@JMc1ZW z!b6#`7nzV?rljibUb)Y{8iIN{&-c7aUpP7b6;}qHbPB&V-&23*@4r$?5Xm~1`=|Ck z|6@hdSuCIkoS~Ow2XQ^j+*Y3FR-OCnW3mZ=VEe;Ugj@dS&yROpYCVsA>8-i1=#GxV zh4yf*pXI&vw3t=_@%IVAmL_9P_M`SqP+&hGi&8}e_XVJ*Q$;MaE!Gk~6?_;TTL?d6XD6zV_^LH0-4%je>Q34%9ruedu9E*s~^5X6p=#l7HM**EldlwVC71F$UbaXi61WZWpA@5ChlPiW3My1H zB@-$a@-j&0?Qq2Y{L3%D`mqkr8Alp|6Gcf#Nk7rn__0=2R;I<$9%R3AQRr|I7|6I2 z0ImJ}cdqlw1(N;dZ8ZaPcD|9*1?=_8im8jsVIZFO<=&2gxA*1r^w{~4GF?xHbwG|| zZfwq+A$~e=MzAGuK&KKN-|OGYp;t3|MKUGofTTPP_*FOjTYDd#z=obPHFiRO2rCU zmhjo?qnsSpa^56O{^sCd)FhA12%ye>nY zk^${LAJY1Zi&`#*nl^jkdk$SVMyaKgHhi(42DuvC))VzSvB7xhN1~UZH;F{Nvz@)D zolG2G0B4uS-J7eV`<+jpCe#y(-5W(cT-nV+wAnA`S@?R~8y-FSeS5=u62i9e@0YA9 z%9ehvtN^lXmRgS5-?DFR)jO^?gl(5MbG@nwp7Gi^jeJ~8OwH{*8a)7~)+d|N%dg`!tgz$rtI;ADyHr_dhL%*vY#*`BZdeQ}nF z9=TTk$B_G-S$S}D#9QiHPBp}C^+&%ORd2{Ce6LKC%SM#4S2N3MrUgdXB}$o(iU0da zBi@;xvc6><73mNDR(QV>A^qez98iRVT)7Wd2gNO$)>ObRe)n44k?W(~0wC5$HayA& zWahw&4$q%#oC1&kkZZW~NgB_yti92iI|9R?wbY>&(ASAoaCiTmFL;+K^Rue|jH97n zSAudzoUclq34NrUp~}_zs{DlK#Q&YS7scm01{DXxj{RyFa>?kaqjm~vHJTot{w^4Q zMZkb>JL!d(kq+U6DJG+Ta{-cZ5z{SHb?0rm3>L;eu15LqLw3rhtW9HspAP=@Ln0UE zOIUJr^%7SHFYQ0~GCy&GuBH}Rd;njA7ZXuOD(SWT_xWJ5Oi{VGsm(!a+MC|_r}2P+ z80g}R&E)C&{Ah(v0^!RQcx?MCWu>>T}Rj-YQXI66m#w zZzm^}H8tn2PfwegnsnK^dwK#=8bQ2vK{y$Sl#!Li!^Qn|aDan{2d2>6>?}!Fd3kw! zd^{N$*~;eT19I|2B(kQu`f)4^KR@Mp@}<{>*1t{Pg`pR3)rf8~s+6G>HVVJa+6=g) zY}-ahRi1GJqyjTDvmkzVcQ;X&nwpxarR5zj6u|K6IF?jbPxsqiMgW1^xC;re85kh- zaCbK!LK5+NERXH>{SzfIJ8l8jRR9PPx$j#j5U~Jp3ShEc2?1g$vbTcG!ghlo2>T=s z+cz~kdldizCwQm&$xpf7dAIRdw$e?scC$D{luW&t$H8L2t9rCZ92MPyjrTMvNM{V7l5)@;ZxYe`;DIX*qT<%p<)3@_x~?N>=)mp~PT?M z&;;x%pUnasZjgIR@Bwdo;(hc3t+>2?sW;UyX;+er#XSv5iPf1cN~!2HHXR< zY|Yhq0~M0SMxlEzJb-Trbm`XD)~>R<@GQUyBV4t zly@iZ zB!BLTYR5dK6e&T*2YMc|3b6)}5UK$XO~Jsue>;%<`_Sa1IkzK-XyBHJfLy{>zc(Oj z?Sdib8Xn$b;svC@J|K1G^@Z0Aplx>*(Is#7qv$&J`@l%!_}=U85ywu-?`FpW7a^u76x?C&oh-nX$_f7rprOCEC_=rgao2NXz6Bw z!`f$NVS#vVfd&NA5r%r)tA zMu<=R6I=q(o~yA?J-gAmNIC>7Mr5VP-@JJf4NyaVyZ>VE*c0v69kQQGU8G1mDVWU7 z0^o!Kr!oZ$ff-EkOPYpf;l2*tP zh+YMGGD6(JVD7@e&o43OXpxX$2**e3xmqhqd%*Gt_Us_UF-D67qKQx3FE45gL-o3J zH^%(TRbdLSZdP>j;VgL`deRcct)I`U-(E7`{nOX+Xk0et)cD=$Y4mp&D?sE80Ktu> zr78Fc-@PQyZkGvB1>$WB~24o83x7XZ?30GLb|r`kXqN zPxC4@Kxl$Em_6qa?+j{DVps5X)FcdGj{I^#=F`ZI!ZLyOT^f(}=9cjxiBiA^E`ObK+l z4z2Nw_h0^1%~BGO%C%!dHd{#X2Cu0MsAgnZsvA&YpfJtjzmQvcAAdC zNvq>3BV%K{RS3ftexEwwO)k)7NHTW&M0SU!QBe1j_cBktsI>)dUY3rW%K@m11lLG4 z`HveYOSC1yRTN+q%|wAJ!uIwnQ21%o1xV8|$?bNQU`dYFaOad)d5z2H`gyoS?Qyy^ zXZ~rsyvFt>kVG^3oElCWaNrr8JF?z2*YL9{c3M{%kMgzpUIgm5mVq^k6$b45YhoQZ z6--kTXuzqRS;YbCGHkZ31s>IZ7Y&pWL%O&@t`*IbUw63*G3-yyZNCW6EP2}!$zQzA z3DH1#fW{k*!dEwa20pQUdcHC0l*`ET0I?YK>zgcS7+EdO9 z!WD&ug$1-bv{tK>yv~n(l9NGfXKN(^5Z|-LXUJ0@MC35$>RA9Rz+ftbo?&DZ<83hl zji^y`=zD9p0iF866FX zlI^fZ^)7C~er_-)DWt!@pUut1CBt~gvK6ge)fV42WAn;9Z!kk+aCK*Ad)pwtbUgn3 z`)IFfNVTN)%)1CTPpvn_#eEqv7g~Bd0i4XgKdsw_*Nm<>mb+cBt@Krk%UTS_p3-D1 zc(gn@DHHX~*;(}LsXJ^~PQX8=%ljkZ-)WXz$Reae$Qg_ovd#y^!hiheeU&C%J>c?Yu4M>Eqkk z{b2G9manCA)~CDwx!0n|)Z7T9^5l{XP_5%o`=^lrWnw6o!pGB(%mgJi-xA>#Z zv1CyN$d-*VkohI6%}@6<_dK4U1H-Z6CeaLXG3HCV(%?Qq+lpS1^SxZkEjg6&f1h%2{arssKUH{IR`=YK5aZad&Zi1` z40)df6zK*8tK^*K7-0>sFIb9MWSi$b>lSgUCLc~4PE2VaHXadDf|Qy-zy6{wuq z3{mw*->=7kdJspSSuHXt8xXI_zeAoId@TcZu!gKnM2VV9*cjj@D6J5 zxculEMeLu_SN^z+xU$F4g5?&jUVIAHtkQ#+mb~U&%mmF!GZHa4{*^AE9r0hA%PZ3)WeP5Sy58C{E)Q^o}p!{v&w zw)?^`d8qcgBdUKz8z0@xL;Xl|B4_ke-YMa$xWt}YC0V?6-1twNBz{g%nxNID;Jg={ zc={5m7aQLrdh4G}J*!@lTZIxWh94(s%Xg2`oKyvSU}_a@!#KTAcP~|GztPs>2(k($ni3 zi|Y4hmvG^lsKnxX5~DVUTdV&DxN6;EMs-Bc(@ZC!%bP@%UR5au9f<$aisK451?$>8 zE%PG5y=NlCQn`kxWY>mgNB=oNJNo62$WNCbf6Z9$^ZaLOC#*iDn^d_k{&t(Eb0``H z3bozi&Ep$)ZAIccZZnqQONOuaJBpQ;TNxpJRRr8A&p6Xn!hvM1u((I>rDC+%W z0!Wlqm`vnUuSEEnQW&qZbIbHnvRmZJCtl@}M~|okDLzr5I4^tR+`~<|AI^=(k`6X7 z4?p@@5W0P!7GuwE`?LMqnfBQCt1eV*Bf#s6cioPvUjs@Ntg(;X8u5>4ax6wg0u5lb zTfVWoKE+!y9R_%mUk`_QaU50#mlS8v%1Es(Pg~pr~xjzfS zd%qkwl4tJ%&jqBF7)3GG5+w{!86H%;*kmaeNUC;k2T}y|6WU zBJK>7*5B%u7cP4~T^h)RRYWCJR4%h$KCNK4b(-YGY@7pbyQmzqk2+Y1x?%q4?%m)M zZP5=1akaFeYI_uj%I*3e_ov-MtzH2*XwAYm1xDBKurPe6F1}JkGhPXMSw-H8@I1u+ z&T5CkP~C%(3C}juc-ZCMCQSW(^z5K^jqIi?;lMU=mgY%ya0^hQa0gT z=GCrqG&GoMK&1`9HXK24k}Ssq*cJ%GI6HM$dmG9s7#sK4&MhYb2 zg=T|#c)(Ld&~->2yYvj9b1j#S%EsN@!vA-Bx|P+cN?f1cuL|KJ*R*3!|D`yO?3#=c zwq^5pU*QDKyPZ#ouko#x3;Nk|u0eU{F37)&|7yDiz^I(k-M!g(kb%24(mRAlM07=c zT!KpRIW{xtaJmsXU><3f*vvpefUC|lyQ0B25%QCKj+>i3%6^IB<#Y(cmajBnJ|r~z zp+!xtyMXs4Qi0ISdemdFOV!nQ1TS=`Cx6CRN=yY^E03$Y`FMT+3P$++$OhukS)zZ8VSl&&c~T5aPYvY`Q-A6+v8fN>xRL52{Hq z9;D@q8pG}x$9MWDyxDnk9vw9WRniIhY^HAo0#oAj>szk7o!9*EH44q5q7DJ*39RDJ z_0`g%h@BDJkosA`yBaTVsIbTf$&WGHiAwf z?0frdLfZd%hR_S9fmoGqCGDB*nM=qnGsg)Zn)0i4p@P~c35nvOA7w{Qy%r^t0(}Qh z<*weoC_v)8}ev02RnrSVF|U?uN--b8OK^jF#FLcmUG!3?e4X#(BDMpNh}2zKQZM zrHSCB7s2x{pXYYh#$f#EuRMFY)FfkdE=yfd_~|_>zNlvg?oj9aX^40O!PG#U&j-=I zQae*bhMI|(D0`Hkm7Y0;n%e856NfsMa2&li5YYk&uZNhFrP^dR&N zo&kM2beoEl7s0h%xVxraslv{};zeK`Y>t}gFO$8t-4Z}U@W0u{bsm*A-WGO>wyC>u zgP{9lZ%J=SL>!WqK!nTKyc-ez_AREmJj`(nqbpi);`vf1g%p@tOI`7#Ml~MUK+2tNyd#R;O;^ke!-C?PKPdnq69`C{Ll>&gx#YNR$j}>>tY~6qrtP}bYqj?Bg=OpT6Gr!g+!HxQ z&6nh1Z=Qb^xPEl_ptKpir88<3G90SFK-_3vG-~j=K@r6o|47+|>c5k|5f;)rd?laU3>adS*+xH;szf-I>y?~5*9LMxlIgE;ECbPnZ$`7tj4PtM5 zc|90BetsufAgzyF;Jq&y{X+KBt8_5UuHPv0$(JLc<`Mz``eCGN2Sj0O0}m#CjC}!o zX&0@`qeqtzZ9H=O5iPeBpB9zWqp(XfciU#M+FwRpvtP% z^_OwqKiIb&xLW)QCjR{YjofT*B^maRsyf^Ya{s$ND&Uy+1QiK_Z>jd-*A>Jz>AEPY z>cFA^1QAge1>e@wO1&R9K*`#P0wjg08F9PpvB!==7ofiGC7qT3#OI>+7a{8vYPC zLk%pcKYk4A(DT3U<~r}+yVvtV_;;%7;~n5Ta7%Fg+BP5D4C0c7+f4_k%d{wK1Jdf; zMh46xLu1fI0*^z50ww(ZUhDizG|i6pGCq8$#%~B=TovcFSBgrVUrwrXe>gI}^WW9b zg3@XC=id#A8WbHrjVp9uH0^N9p<009F|&@S(}3vfBr#nqAV)_!Y|qosIMWzF$g0xJ zpGz~ZuIl53F}!Ny>pYrM+3@=P@lATt%$`KSuh=szEi*1(wneC!kgVqo_ zHw)`uTHJ!g2LfI^D|WI&dDr;)LCz8L{ykYEXuXX1v%FlbwrvrgXI4{)~)#m`wfa>w`Ew4y9IF8a_hk2>@ttq_bT^eme)eec?1>^ zmZp~KI7K$5IyU}`xlzoh^YW0s!FD~3_AZI$shMRC_i5Mt&2`Q(jn!q}DN5BRPmX8? zmm~WZy=ap``Il%a&)i$8kZ>g3zx=qQUy)TsQR-QS6mQ~abn{8yPbDp zbZ^V%Q(|1muHespeMhh%p#-bM4L@>2#H$;m9*|=h&=s_Ne04J%i}gASF-)kW8f=t z5r#zhjEos@aB#@Tyl{%S68HVof0qNdQN8;bS)`hI*!xVpTzaT9Sl0OFnGfHfy|bA_ zc}#8x>k6~2?F0rV5jW+kdOr%3li+=r<%&Q)XwqDR7P!4$#_C;bvDlwITPi3jwcBw# zQ1*1h`{m`+wUM9vPfao;B_y3u9Pn)EuELnRij z*7jqG_zvZ4C(9y?D#vG0_U#C7Q_25*>)|G8nY5WEgR=P2w($Vzm1W8FQ418hdvObj z%vcnWFtr)v%O_gzbHtvF7>E<#DXWT7BR z{$AMh+|F;!$N=SlQFKXp<_`r7*$LiD|2A}!WvfEk>*Hevy;h|>i$Qd?L4K4{YVAbM zu&XoU88$3BI;C++Ri8n4$=<(QwN0_>@AYlYD=aK3$xQH&kD`~5xzA8|yD_>&M3O#I z|2D@xzp@DX!!`buUGMxsH*nhVt#naxF8f6)?xKGitQ_y=?IymA97VU-+_>@_h4(2f zF1%xTr8GI|PancXg?#UqCU{mdkS7hXhxBKt%zo3ZwYrpZbltKbjXw};m8es92ouNK z!0d605+g*>94v)vp^p~THOUs$%@#*zCfF_DFYx67^lQQ#F|k}t?1t~mg#6nFMDXu3 zMQ_IQupYE$Wpq&DSzK>h-f_Qekur-AY_YjOn}=$$WU7KIE5-h}^@fduUUyWTx9}t; z1C#5Mf5**KSqFuugA%6Hx!hWMU4Za0!+G}BOpLQ<{uw<^+}CtajwjVllM!fIw2nsJ zoHwdEk7)w^KSXktkTby>C)KPLx6@iLQRmxz{!C`*?3pF9mw6Z&M_7Gtn$!etgbhMS<7+P`sg^P(|6bo& zZH=$Ja@+`8_a}0}SI*SNo8}Iir!Qw55GM@?jCuH2IZ+g7WJ@*5FP(el<=GVN_AHZ| z`{`5OM;YqOldS#`kM4$1+-bXTa8aPkkwNLI=oxaGcayOWReS9}Ykx|9Q=WvBCsZce zHD5HWFSwr0a`G8Qsh-)ajT>MFT2EGyEJ`BJKUHP(M;M2``t!l{siKH@p#XB7!N_|L zh=}CcHkI%_6f>3h$?cYCzl*JbO%nGx`*kXms`RhyqM6NmEa{2lm*IG^qDpFgeW5=S zf?oc6s6;pvgMh5vmp4RX7zm_@)}hPFn3f(%q?^-U{P$QlHtxmMu`Ato)LM5|jFpwV z4j}h6dY$vnH!EPC zn6T2gQBqd+d*k51Z^Y4-Ww=S7f8Ww5nk{BzY^<`P*N%jXIq({D0u(a8aAvb2Kt56LY=EpucJ_?T;EYXx zG|(s|q3)CH^wE)5iZO(@uW39MjQO_pbkIy)mX1u}@>$@%H0y6nOz1`^15fc#qkI0# zg%@J)ZPiiittg_H?0;^~V<)$OnTx6AV57m&>4 zKO>t6GTfH7gF{9UZW~8OaX5E`@p$5HY47$zTJ&ur)}MifcO2g`f4M!E$s~L8&ee$2 z)ynB!m4k^i6;+BX6Ao8bgS(_xy(MMuBqNy#JLF{Uo4hwMDG0dWW;wGHsJ$(mI{R3z zWM~!D9lMfW);=aGZr3idSmt*8tz}>EsVG<|qoSe&Ek;ykthW|=LAGm)^R%Bke?D#F z3Ol!~L4T>1loPMsF_zt7^XXq-N|qH9OH}lF4qr z2SJ|!MDGc1DJpUniO$1?foIf5bn7OBE7-pQn+p#B2<#4^!9IN#fF9kOtK*DPN=jsw zZzCgtlyuv%MpzVqOUPCVyB!qAujsrwoS`WTHKe7YBKTl2TFSuv1D61|P6afVd-4kM zcWI7ZU}5=D6Zthc?ahCFtD+YIY%DBcX01wkD>&C ze*lV)o3{I##=j+vKqh}jd+U>G;@m2{@`$2gkYdtijEy^SCI=?nA*e<1_3KxiHFFf~ zHZDo&=-`->QNfeSKHlDlPmjyCVa-ue3wH{lDbF{i(KAYVljC>-=0o2tj0bX<5I0y0 z%z77yNIQHCWviMcmJ=or^tSR~B$-T9ke6p;W24<^`O5N=jgwQ+_(F`QZ!_1-WkEq2 zDOfLE2-}ag51Sfam#a;Hc6g1^AVeluw(yB_4Im-!09Yfy8(PaNkM^kcPQ^!%Bx}U ziSY3Ye^@%!$INg(%pyEVh!}wS-WzzCJdbn`#T-?4g=?feD*LO^Um#0t9S_k`sr={j zY7$ur1FvpG^}0j$8iXczgk@SFr1%nV^a4+(rpTr`P4EeIshOC8oAX>JlR2s&ZBw`C zcGjb_u3a>Le-Al6@s6T5`c(H_(>2qT!nDJbC`G|^--0Bw0<*6FN`TGUy_k3ePAYCZ zfFZmrF8;XW+KV+E1js_B&7G7HZW()1Fd`zn4h~$j=aJWL(tL<^F;M1^-8%C(cp(=Qk$4eU77+duijmLu%Vp_#^G)Uajpyp=VzXXp z|CA`Y8@*AeWu_wCjrRQEdzZ3nAMl~v59JATmXR_0x|((=y5=dmP}tpm#O$j#F``(` zvFnp6%Pxa`V$=yzq8_2t1_p~8PdFL*zSS8El}SF-&v(d`i1qsd5R4F!RETFv)l%h- zQU8*KZCd{CoM!#geErCO zP{Fb5qZ|p02@+d**xUlvp*V{78cdx+G#h>?5U2va>izRfe3#E6@)Zj?UwJu?eJ+uH zdQb7^h&d6J-^OlcMPUAm&M!7+$B-i>p_=KIV{!UB8J&x_{?o|Q``vNK$VP|IjW-+? zdleCX9>vibElLk3yTz-fiFC3G3d7I4VP0#!?r|sk20fM1tHG!|`{f~aoEE3C+f>`0 zGX5n<5k}^gstpK=G;wi@?zLMV_8PORA|oTyH-4P9fM7qsV%8-P!+~{a0$9sO#a0P6 ze!5qTfDxJ{AjbFTAp#6rU4`bDrc6g?cMRqDclzMn zfAB!tcN7_LxnG@&d_pnf))o6Ol?nj4;Nt?yA(X5<-K!asDN&Q+%W{*GlL&C$ZEVBc zO=xayy+`)5J&xpC-WMC+QK;@kb{UEE-eX&}+rM~f(mv~T$0dZ?+a!+hJMZ}izdVa! zVi=eqg-^Wm$cwa;t%)XwW3L{dM$vjG;)oM8 z(%0hp?1gXaUj|K?r*HkhZEQ>oNp;7npIjjI#qrdPjJ9ynP$&Wa&hT8VC;~77CDj+J zp4~uQzkZ%JMoI5O^ANgy?(AEg{9G2E9qRM+=8^ZOiegg)XR5y=r#_?e^#7%b|P^7Ww_{gmgxMi zx4w>#SM2{Yb|(Lf9o!VYadz6$a{&DnRhxn|^7Qm%W?`A($X zVeH>D8Zi9h%Ub*UIG*i>=m<{l__1vgz|I~E}ICEQxR*iZf}?H(*6 zYz*%@Id!}j|8|Cc!V%1wjYq;ibYm#Q$cOzK+YBt8eoWhFYW>aV?2th@c(Fm(KK`tk`Uh#!lMzt>mU3zCjm?pYrLeWA0PEWtbF3ZuIVNh1PDOxJO4p@pS>P^KJe?} zJ5>4oJ?6h@VRyEJQf!;j?fRD)mLgSj_C0&7N;3AE+S2}l4eQ`=Xzo*;*2Nq#Jngh3GcL8LN53F<`272(t*%km(9rmV zi)NFAfq{XWiAkwDM=WK<(Uq0%4!f`QtpBv&vCZX_4`Ej>{=B>B(AfzWxbD$U0Ply z?bupfSz(~32Mj*h)A9!?g?^)Ym2P*$>al7T^EV6nDCnCeL3 zOzFa#%X&9NiL1+&lulQD@=Xp}PwuR<5Xev>EJhVuT++c<#Ob)2x`MjlvJ$@@Rpbv) zjHqC)e)>eVLfluB1-b%+wVM6=_8(Jy<;1PBVp>Ioui--^%1zxfx~?QRVBlpXPu60~ z=jN6_JUqyveXGXP!TR5)qw6Rls=u4{ z2YDdraWi#T`@d#;Q;!13nD_#b?s^4qGKNhA@m9je4)A}8j; zeVjr_?JTO^OfmhCIu1A9;3$e#pMb8=&;4Ef3znsyL1W@C)|O6%!n@Vp)uno{l(ZX%KKKh|9PhTYr!;G&r=@iKK;56| z>^X>rOMfH6m8=HTasofIshoSgPIHw8Fm*VfiL zh`|4$SjEf51#t)Y8Si6{Dry>l9}*D}q1f2IGA>>fWv_Yat2f?&d)VS-sw`V|7mbu& z4SjuQOOY=`e5(cA5-YEP$~;#O;9-~jO-xoSEPW&^T>==cN=UqS_5{-E90f#H9xB<| z{_5`T{@j2*9}^7I9^r$()1Le3L((r5T{BEd-4FZ}b_gHaO*-$u^Pw`kk_2R$tgI}c zyv)^~Atjwz0b9rJzMZwbePLoEi$f!b88)S~wY6U)17y<7EQ3$|lq4(E{P;*D;r{-V zPxy38fGcr~+Tv;I;MX#@N9e(|DQ9M z37tGYUIx>q)ZKy6(Ze-fXG2=GnL@wyRBWwr;qV>ZQ8OM+q+&?X#Lx)`dl_0L(YpdY zQdqg#>op=bdZecPUY-1;95HtDWO9@-)i({-obN`LSy_UYu(>Po1p~aR7PH&l#+G{r z0|R5jz4=9fMf8j7$L>dyhX^zp-EtRPgST#-@&KIp6~WO`I|3`vGd~d5yCA)G-x;>3 zu#Lt8K*4wSb4BNWJZh~a|I3&gXWx%qk}obA!N^-vJt_LK3gAND>cihV_wL<0=Cl(H z2nZ9{+?>C+#mXS*=CU+!Rns0I0(p7-Tdb!~p9V4`hX{Zva6txGXSKAHLY)8`ESOZl z#JVbhea2jdX36F`3e01gP(Tb7nsWx*v@}4J0FUs9)=0t}?l7MJ`X(s&ABb;IHh9B2 z9-Eg7>tvvY-$wR0iI9Qv{-GBwwYeq?n{igI*rJ;O>Y!{mMcixK) znkYl9(evOW(U@rtphA6c1cAI5ScOh>g6^e+w`SOKtUNTkCGbgwGu}Xo~JDdk{aaHY=FbP&pj2D}l`gQYpdW)6Hw>DfYWLT-kS`{`E@ z>}QUnfsoHAB_&lI&VH|M{Gx=5kbwKa)yKx5jW0XQzk~pH;MJ#ku#J*f7*G7Lu8RVD z1qE%?7TZY>Gc10sg@PkM`|e$0n^BsiW>==>enfZ~5L!4qmrl!T@H2FlJK7>Pu5)m- zoRim-JSFgvy(3$rM21>cR@OgUEMu|RqCj$OxALDprT^6NR9M%JGF1rJSyq-MMZkXS zXn<5r1wrPspdraeMJF#`?Y+$sAd~X_meXW-42V5sKnR5*@6XmI|6tscGI^F=5F#ph zOGwUF!xpH3MM9}FT)!kM*tw!_nA3Uyg$2f;UBHQxI#BQVcD_yxez7qjt^%!9{eUqcWf4F!=3;C2UzrQF?m;uzYy5rduZq6zow=wea zqeVu+fs~$}9v%#GF#I<`$Yf{?sR!UK*p(Yz)05~l1YPWY*Y`+NMUR|aS$15(F6=(? zA{7Uuz1~O0#m1JK_VYX-1u?gIU&cibSnmexB@2N46>``ntjl(k4M^Vb&`>7%2=;eQ zYd>CQ09WqDNYf=CH54TYq0O*q6_iM-^sHrMf4_HmX*t8b2Kq0x(cu+tnC|plRHrvr zc~X?2fn;z7!@!$Tsjt4EAx9EpPA(4*e|u8lbRyXMf#S_5E}dgN%0;yhI?Ev_f$Js=v@ zS_^R;1Rvg*-XnIwu(8q44|x#;L}VE~OG()kB`yM*FX(Olf%uVirN+s=DAzqFn2q_G zE<*IEtxbt}8nbb*XB%*50n*>)eD-19r)yAfwxt_JPbyu~#P$}mkM~|rN;qyLrJ3cu z@l%ZC3Y8a|K|gx*2w;o}Q6hHfS&HcwpGuWMeK$l^69Pg)v_C{iYPS(dfyb9W3dOmL<^)qP^adht)q*RfMNMW1@IF^!clZ@Ng*>dczhh zPFI$Ll`vYOI*b>0X4AdX*(4>H9O{7o4e+U8GmfD7xcz%|3ij6JlJs@kd8GqM!R-Tv zF_cshD9G^n%8O-`7Gh157C+6unA%tSNc7JHO|frg&oY8hvet_rN}I8RapY+71?yi6 z!7M@#n6licKYj;CIpWd{GnHt#FoJiY4p|$r-LDbFT0AAZ#J3T3etFI}0nNgnIqnzt z9Vo5{_oJwfW)L9GMPs$`%!a-+>yz&h?Gn5ZVPWKU?o3Ke<-7!Ve#(AQ9hi}CvzS{T zAfe8(KGD(ukx>K)43k$r7Ml*LO{C8|{xb{aZwe0vAB>)+UE$8h8hKH|b4m^G62?~$ zTaCG6%Fdf-lbGoCo0PWse%@s82ZdD>D{BDBQ#wYf8%R0{7mfE|@i>JG(}ohVrV)gx zECUDyZ%r2!)tvy=vT?AEl~5?2qBS<@G5v{mflsG8m6vHHV#e`e+R~C)Yul?}dQ-|! z2(F|GY>di7JqoYpb5I-=!bJ&#u#a~gLT6=*mF_-~`sWG#An{r3)HNd`ucPpO?q9Ai zM!VA!<78~oS8?F5SAfHhf78?-^;-5#BHk}`&*-nkr*#+KJC&!Lz^^T;?1pj4Mu5!7mqbL|G zi;FTgE|**UouF^S)Ccu7ey|~tNbryXvZ@+hDgZ>J{E~=_5bY*8S-lZKNlA&+L=V0} zAH#kd?Q9-vEJ?;8b@; z%>s$nGDG_`>5gicEZZ{!0}fu~D^Y&_?r}+khnw?b_3S6+u6aVbc`=KNP;u`sOOZZ7 zSv0`v6;;UV5zJQ?##95hW-@r9rem1oq+m-0QA+E}i7+1T19M=EfGOdkdXS;|t?Rg*b^Db-H{fvdAq0|@ueUHYT``W_$h+zaH(^@MWUj)x>T>!o9Q!SnsOiVcLW}Zhc zI!nYfgOB-tvrWE8fR$y{;#l5b@SeoMoy!c)tpnCZ6crT%!5rf6|Hj%3yig!+ zW#{6$PpgiqKZvgoy`_HkN@Ak^dn%+`G z1?@*}gq#*XOo$v{SK zoQUAd$aA#{J5!NnCr(`Y{I{0<@NOE}`k#XkH0(qYeG#--bYLbYSir!%MBP-!Q{AJps;=Vk_D76&BA1R9h!6BPs0sXrlETutw zfapQzu)Ya+r0{9@MTs38xP^P^*=8o_)d)S}^c6iwG#C1knci)j>W=)3G4-rCW21=s zRt{E-0PR`p18Y2`)&#pRV=dfsa6a6Zk}A5!JP02arCL~Ov@P`Ar$1@xnI^K|=LDDb zgMEddRdzXexsQ-^x-a@iptn_MXSCF~%qYkp9;IS!+M!Q6$ExLIP^EpCrp%GN)dY(_ z7yfqi) zO37y7!V^!?i?$0_iaJG1EVVp*N|XQGG!N)wthOF1lz$AZ>sal>Wgm83+M;*4Ysg0A zWo0r>9I;)94Vy>4^}S_P5`lr=9BECvKElqT1?W+omFH?s$2Cfi_Uuj$XYQ~y$rdM} zJzKe5>YKxfTuE@9e%}D)C>lWM@R4LWm;|5AXw9)A0%M8l(!q^^IKmGDO1GDg%cSgy zcHX7Wyqvrmp2(xo%JrR}k<(A_| zDOKt4x+_BBr+q~x2or=p_he22 z@Oqgy-m+(_yuG|Ep54)DqU(A!g}b7sO1WduVRS3oT|rf~3#3*YHhGxW)5yn^_c5-I zvW6CxgU7~B#aTYUl!$r1#`LP&gxzX@&5ww~%1FMU@>_3M{#C(J8D!E9A?4*@p3DaG zW<N*qg&~0yq#({PnWU&Yc_xgRd>dShJ$$Zqiw6p|SGo!qi z{dl>6JA^a8jW`pBPB)`Xy1xrce<~arH*x0_MjxC2OC>(I_g^aNfM*y4`eG9o}uY_L~? z6&SqxjmD<)lzGjTaS4)~>EWn$j&i30OKGIBJLiFER326~`9pE>E)+}`fiq&8(Kzb> z{t6Ud#$7LLpde~5TMc}`Nj+TR7?0jo1X#R#P@LWbR_ypMI3MmM@SODE?Rju2gUQ2P zz<5&6Y_v2&PaSIYkps_4cO{ALdf9xBO|Lq}Dq$$SP^RF4`2$RX_&XE0X7BQ?J`DZQ zU;?cC`2YY98!1^o3J+imm0W;qTB`L)oWNb{Oc~>LamfW(;eLKxcEbZ;bfvf3!Drtt zx+;c%eVx^L83<{6u!UpA+SqPDg)SQ#lyP1R4{^js&n43Qw*ik=kO@OAd#uej|JU8H z;CYwD80~SAlupQIx@o@0Fx&}AFJz_D9xHs{1BKxZz?>j(v4qfVcf#-B>K-iOrz>2K z_GZ63#5RI5IOs)pPtRj9c%dSAO6NYpnnNUnn2HVYNj)<J3+7g#o6m_p#^qYL(^1-b((j zF?^Q(g4*EefCB4xh0VZSaqjEaD<8qGvI;MPSOH@-&2t|Qa-ZU9*?zk|LA!o*@!Sml z?itN1w=E&{_FmM1hjFw%A1G-@E;B6=tm=j!sRS(pN3IC4r>A*iE~Z<=iMU*LYt0jy zO>x~i?~(HMNlX6&H@IuhP{y2zMXzNn>FtzM%zaESFAE;z$4Jn22}{@Ys(-VXRF(>! z`bxrk=f2~ejWsX3E9=!>5+9(__F(-0EQZ0caaQ?TbivP#_*FeVC1-$sNv>DLyXl=( zOS9?D?~ow*067(&_mDEa?2%4gm0TJ+cA38V-NDs%uSz7MXw1oUkn|pCI@X$6TNk^N zNe~kxzOZQ6W6Rp?5sC`LFUS6JS1p|$dLPf-`tIjU+?cY8jq&;f=C!=*SYMm zV@%!!wK7FKUSRHpUm1`Ks(8wZ=K|xqGPdrha?Qf@`zILqLHah`%SFyMVMQY06?&hs z2A}hx1O{$p0^XPMrMy|zUS=?eqse4boAR_kp$xhr}cr#O_%Id07?$v~seV4Gt3w@tSet^1qitjp24!|Zj zvx@Pnxr;{hG7Y~gAj+qn>EzG0PM_a?P(t{wVYv+ZG2xw_LvN9`wj_IV>Fk|6T_XYf zfx@56Ytj8&u~!6l?49>++*tBXQbyT9s$qyig(Ve9=oE^8SB~6(h(0<&n;j&A@ zTmC~&Wd={@!D-P}D28U@IqIHr#~S@1nFJ5?_iHmqy)jPv+&zBv)l&{(RU)h9RJkHS zlS;5bkKH=yam?FjAPCO~?Q4k&iXpZI^O8Iw{XFT^W0>PPxFK2qw+Z?X>RxHatX36|dO6lrL6FX77{*{0tTx%i&|Y{j}Zd2@27-WYC9nj$-{7J}~D1mXUid z6EwQ{7e2AmU)?yH%gtGi zX;Azf5-XY$pls!aqZnMHVx7`ZDDUnl2LCgjDdPoWj$2qNX{GJSip|azakdjrH(%h&_t*0$;Tt;hs$xsWoSr zD7%@`Qta@>^?`*KHfnet8El&EYkEx-QqGS~G@*r$`opm2a?`kr3j=Vk%8nnVQ6p#@ z)O_saFIBxq>Nefu;j{7X40so#qMrA4p1VomcXPyrBI#b^YsA1nFDJ2?{IA)bkV~Sk zt-Fpc6bDeT$qJOo&9NIq?t!mP3%{+j&}dEeWt-mDyJtXaPWv7)Jjg}a`@SU88Y zMs@ib3{KS7*S9EjtIK~XG%@S4=G-jQ!gcybErwTl|+_xn*>N@BXgG*>FF3& z123Ds!?zkXFN$y?4{}Utsb&e`_gj53VLs@pUS@BOxNmsGD{S2K#+}K-wv&ueV(GS* zt9i3iCoZ13?I@=sJV1E4;s)*Rlq6S9BLMXE_dlj@$gnWgA&lzK`RvCPwoz1nH zkhzz*TMse8Z+Guao`s6JpMpCC#aVL)xmA_)uF<$l>Pf|ne{YB~jkR4B6WVC2`@kL> zLygweWx~G_FHHX0;8)Bps6A#KI(&kTc8mxCxKv|mFM53?3E0QXIv}d)vgxK$7Q_3X z`OBc)OSw0)VH$~nw}=3y^G!mnFFsh5a^q?4@LcJQ!^sK|+MwhTuz=f-cfWQ+H@IsG0;xZX?x$q5w!Ov9E$Vt>eKc%~CEUN}T7#Nz z_MI>SUIANLGS5+45+`iJ1c%}oJ{k!(|Lmb?pUPL5pdEDjGxmON=k*%*XH~FXDM6gJ zN+HgB?xu|apC+DFCFX>jHK!>0EulHpR-fuzai&(mgQtPGRsGzfltY-GVII3Ohfa|7 z^vGxkPP10=!FvN#VvnGpGx^h@jv+p!o_0>VT88UH zrrO@=$imZ)G_K_4Qk|2ok*WDAuNG(4uE&G&uRUus8?v?aL|8JmtfSO))z#H}1!|!& zg2rW6%n_EuqH(FxzyYuDx3p1`y zaz1h{(E#Er#qQqLk)ht<*6lv~m|>)7`%$}V>$R7w{9j9+xhM+H*W;lA_f6~YU6WL< zd}2h!DFvQ*@L9Ef@P-FT;E5S;&{1Pvr>cLhX_~^`LUuYX#{y!5S^F|d*brcBq9sA; zk`}$@u0pXw63zOQ&88vxC0ajiN;(7u`F`s2j~nD`azs#u+LxJg@!g!qx|W>Ix>Dc} z<-Afk9&oEf>joLNSyp!Qp@{IT4V1j(fBRA+@|%IH10{n`oxs}(t2q*vCiO-8vSc-4 zo3JvG_p{>VA`!Rcei7C4UpVt7#P@jAqNt`%NiXkGs}w)s>)2~Qd z#S7#7mC3Q2uQamz6T6Hg;%{zws9lRw0(o^w0{Z-wt<0sJ--@qOdrguhXnM6TONrt6 z)lR&fc_9|T4p@$Q=or7Wgjo+NnpK9 zFXv$d-m$S=dT+Y_^e;yO&*v!NkKL7JK{zp@K%y(| zoX)$ZMN;je=bdNUxjP8$k;ps9>8R@6NUL!*CFX_$-PIMlGpE1uy;eq@Tk#N8xpMw? zpWQ&Fd1CjR(FlQHf(?_x1kytKV-9IdhOEZmT^EMfammxY=akv5b%_0{w9P7KnEADL zR;EPj{T;TzdOeZ2?cayy3P9^`WHW}_$cAMQ;9l{}owv9yJklA*6B8>;|1`+WkUS#ekmq=Q5|fYA%NsXKHZ4@DO@k zkIpzFpg-E&(y7ksnZo2Roms?8zE*Squ*Q%M7l~E-vMr~I`y3BG_Zs92(~q(xgyus+%B+Pgo*OR~(*5KnQNn0Rrc-%E7j5&?8G*iJO?GKa>D5PnS_}I4CeN~q zwu`qgLLwq#Mjk$nt>YUw3P`{MP(x^3TuqXiPGC}uB{cPP{C&I8M&f1F436kghmQ8G z_Uws-^Iy1spU4#7-E<5z9sbzvUw^SwX9mar*OP67pmU+QO0TXwDy^NL&6@BHMB2W85SR*OQy&OY;! zDN;JijG`|-9B{L6dX9ALrsUM5AVv9VZA&NhB=T-Fgoz^mw(ma5xYFY^E%gXalajum zHbtcsJkYv}Sz3KIriA}NgxI3hxYg6E@Jlkcks^lS%ok{1I#x&VMbhvk#{7qMSt7(= z9_+C~`L;dG5l)X{M~Q2mf`Tc&k>c>C(dWT$z5dtnh=xq;3E*gjm{1~4f}+=bgw7Ys zrJvr-VXKCcns~ens0z}D&Q;mV@vZJ<2|<=FQ*V-dE>&<&1K)teSii_23s0 ziVe~5H*Cb{j4!!rW@bx-a$HHK(I zsq+PPHqEm{tX}t>{*#Va5+YiZxiy)}{@ki%zrj<+Ep#J%^ zjHhLmAR4fO+$PlV7NhuoRJ{dMRnhvzi->fKfRup10j0a81P*ZoM5IN!yBh?g>qvvt zp`;t>4gnRA?vn2AxA5NkfA2XQ4v@{>XV=jIX>+Wt?LK`Sf6V*4h{sr}AL%R6;+>)_(VeTPzKD~~7N;EJB#Zd5YTq(HFPVxMw$NK~ z0QZ@$ef{u!-#}n1Uc}EpKxta!nk8EZX66aY{u9{bAv4%IrJ;e7|Lz)?X>Jt@{T- ztaxMKk+5(6CZjO&{Oe6Te_uFQtEZ@syZg5;=zI=t-Ut&nNPzaq9XW8l2C2}dM3|2* z62z#fxhZfx7~o*qz?-6IiWo67^KR5F#izwbzmAM2TB554A$Mda?z2R8!+Pvx>dYo% zm3@X4*~&Aav(S|EKR5q6v+gcI-qP)(wTJ+1Iz-JjMsApR$esphylSA1lbhT*Jvy?H zFtBnN?(b)F{`ujx9V6y)UYWY{3reHV>LVN}sb{Su2Tv?f2p-a!8!6#$6Oj|3C|4c4 z!L&jlK?&3Vv`Upy`GmxtHyz4hj|8)^NzhTDJ%>P_$anvXZ!c<#vlI&cjJw#OlCxVhJdM}fg(Th(BW{fs^=6-B8(_X(p{-ILl` zv9pUonx3_DiuC1IBoJsoSb?VI4wbS*2Fpe6;DR2jr{VNcC%*ji#SZ!*4dS8vQnGOs5wuJ?3aEcMVbnOUy|&kM6Jw_ z#k%pW%o98|@Z?=O3GuMxC8vWVDJ*>iy{oG_+N>l4WIx|ZJbK$rxppKF`Q&w*Hon@` z@KV)*YY{zWkQ#fwT;7N)l4_F3R|SO+>lC`fc zj~F&j1PfAO5NsNX>qB=A=H3c+eB93=jD#VR;a_H-d5q4An0V}I?{)TNZ2i*v8Q?H3Vlp4WwYKJSGoHv{!0$`Z z6*DoFMk0lL3=9|^wvfK^ZWR1h^_FctjIDXWKY>MyAqG$&(sgzHg@AeqMc-!l1aEy= ztXUl^3u0%4+zt(cJPAIsIt4a`r5?KKr3P17O~+G}1K#aGKZa`(%FfiJA^R4%fk=T! zh8_TVaqU(T)1NRiRK?737rfkl{Qx!#WMg{rjkA`AW;y&!*YVmaDzvmS3tJY>F9$@G zJT*f{YcJL2H%Z>lM}O|4qO`J_S5GyJS`8B3-a~;eA{btJG6GWLeUVtv3CQ4R#hKtcx$%FfjfF{+{6!0xHoTw7jqwVm^Lds+RkL zFBKKm8%ZgopGx!x*s=he2Je|DMQ=|3&(Of}L*1pW&&Wr}>!v)3{a}zZNR?Xt zSoaf8^c=}RvlW_m=aoEC*DHp~)XtE^}t)o!Sd?IZNl%$&aiX^$cFfx80iO8brLNOkUkfq6##@wCWa7Ed2mZvb3E zL5xbo{ZFnUIl%@f#II``Pyz%b8$HO1at3O84}JvRXXEsis+f*vJ;Bxf4EjNK?a?8T zt{;VdEYR&glRRio;{M`S_=O@cip|IzL?ZYGhM>Fj^pM%A)Cp_L{@em>e4XI}bNz10 zAAuQe{q{$Wd7BIGrZ5bnWm2-PtU#508G;SKLN&(lT1^qzAY9s|L+yrt`@&~@A3T%_ zctwr|c}H?Wmvk2hE531QEOKzKzG=$|{#dJNf{El~)km6z7r6a*v2I3L?13{ow#MK|51+eNbb| z)_Lx^5J;!l=vrQpa;@3o-4wh~_aMSZ#e)_(YmCksymiQ7OdU>|q&w}-Bz^LQpYt|* zAqVMmKUSS9(3S$F8ynWoq^c0zDtu#G!jWD3v;jd$lLcRjWm)@gD+cs^jNQ=lPeknC z9&?7=mtkJhTFQ&4&43!Ri_ewyZC7VZCr9K9mU1npojLcqSKb42Ab* z8xn4xdopss+P`$#0oM#~IXc}1Y*@AcEc)#0@6UlTE5J^eHJ>pRML27m=}VLSs@(NM z)P@KM*`Uc_YPHXuH!Ia2TE@c#{Gf=7Kv-4Cb)Qd@>4yDJ#jnBwBO?h(PthJ6r0NUy zxW;JfnpKip`LYfJN~!aun9{v=1>m$;MX;Xg@((v9DM3)ebBW?*X_g< zBIfF&|3O7|5o(4`@?5vd<$&dRHyy!_-ePm^oAg~(jNOkxls&)(nc__nXV+?6JsjQD zKF0JNmL6+y)E?6vwdctc*louSdRi4Zso-Wz>kRHh45y9ZcT&N&n1&FhMDB*BRw#(G z7z~6TvKiM}`-FeWcLo<%i1(V7ewl<9uS&OL&_fuXim?~4?jbYD2_q?Xj`+Q;ru|<2 zHbLF%epkKiPKs&z4f*@n^LMmH3Pt0!z9wf1_CMfG{i9@dL|{JOEb@~~fn&lG@S^z3 zbc%f!*GIohP)En4KUZ^S2l|r+m!(GUQbhS>>-?lgez}hReMb28T8xvZ>wbp36lRq4 zr#xQ;gZA+vo$T9;7P`yvgJl{kH0%{ZCqM_|M+0nYBcQ^42D%IhM*j$PvsGE#rDIiD zE>uZHJdl1WzA9x1Isg|bp{DjBqBqBHtx*41gt;j-4O%;vueL)2*^FJWrjSAoj49a@ zLP*9@Ihbvq=kRZ=rF)P472@65>V}Tuc;hO3=uP0N#Fq#7G3LQ z!M`#7gk~feLr2I!dO!#a>co=Kpjr?pb5?~s*@sUds#+#7Gu&mdA$kQo2wx)%KI4|I zz%HG;YL~hws(|?4G=sx!or=rv5E9HyNWeP1I?DV^@@HR33Ft|FJ>x`8jm@-tURZj& zvKe}C$6Xge&WFni(g8l;Lv9TEi4XMMxcKkQ+e%7617fg`Oi!yFvo3INv3Kf{8`fu_ z)vB=s)*znFY(3DtHzfY>ucBUL5-Y9>BOOG3-#dm2#TK@a_Lj`(USa#fLV)>xaVow5b#==E-0c!qt3K zkidhFcC4JVqR>XrI!INA_i4IRr{OPcnxK;$6DnFO7A`Ptio0-pUvm8u@3}?HB2y;w zE`s}85RLT(T2){!uW<>JErvef(`(wal=#pK( zSp{8NKtq1b+d$9HG`KJ7acUV37oND3vr`bvOg}DMKwV{JlTW!<3FiL zv=}dXH%#(d1%JnE?@G5nZoc?>UfMivR#vbCm!kXYF~6A^Duh6!1mi=5FFbUgl4wbz z?0)v4b)&Cqp*+Lj@ca4_mrP5mAI6DoUQx}{v!oRS2Tk^jy8FR;Otg6#X1MwT@waaT zXR9i)_lfc&IAczCgnU`pGtm!)=>x|1?RSWtpXb`T5Y9SW>fVWmAk+F)u1mR9M6?g^ zxMCjtb@G12knLV;036C4QEnG~sQzjdi8v-1ab~jjM-LSD{Z=S?&n%b7XYf~QWvjF$ zvJ$?2Yf&e}^fe)>|EbL!-zrhT_gv77JAf;EpgiOAfJ1~w7_LLY=&4Zu~gf?pmg0;h*+WA zfBZAyFEuG*Pu;g{I6&RhG%UH;SLO$TROcBh4>fP&D?pd}U$=Vjpo~s$qoTj0fE3u$ zg!G4DQ3R zXh-@(LR|%vc-wWq6%_?MW3mtBBOH#95fU;RC zqZ5pEB-T;_$=onq`D$?E6G6%axaT1Wpjm8_w`)}3$?XOfn3eUgy8M3{`~I>lCokb=Vh|ln z=4)_Rim5dA=q@i9l8YO)wDqBS4(hvJ2`l9l; zNX*|2Oi701h17zODakDSeY`O>(l&E<(8FIg}s)?N%0Lu6_01p?a!ocjet|i9pSIj zxIv<*D6DkaN%}Q{J7rF_(<`sg`hm40VOOha&pX9KB{}+Gv6zDpRnA<&aZ2G?wo&mORUl|e>c+eURkgp zAmJWhx^+9b(Zr4atU8P4&FmsUECeLh+qwP$SbGFM+Qe&r2KQ1G^6`}CYtL)oGgU7M zlhPaoZ*_v7?nJ-lkjYjSYmAb>vp;1io8GCP-5sgTyCOVV zT+AFYRi!qLH%fy+6gNt!)BXsGO4pwMUF~G||KE|_M8_bDiZuS+%G1WvRuAAyezkZ7P;UU2^0v$+58BGQ!(lm{SuBuxGdUh!We@HM;D&?KM9b zZub-=f!uu1`UxDbOpL^|b|Pvhf`W=Lu3653GQI%1`7kWA#t1ffy{5=4m4W`<6y8$( zpByYp4EE?8YaE<5mZ&dPtD9rVdTjrvr<+h~*pl|zYwlK2Xv%D{Shf8}*I%OBi8w`N zuB-Q2Kb7t*vY!3cQOna-EOMu5yv(M@mIe85#zBN%KtH`F`vP~ zdrJZ_18uouD4;FZ@Wy%gsAp}J&8sT1%1i9!vLXr}LDi})aJ~A!TE`|o6A|Q|NtM?6 zJ*J34F-;!x*+s>b{dfEu5TA8U55t^=*=NaXsY!ceTLWdCHzps3{mpvEh=1rl2MeH| zPn{h$6JKNP8V(dZx5{+-Ge-(=)K!~*bq5gQcE&s&Thd~iRV-8mmhyl9 zU$G--w$)!~XmqaC*O#0duX1j9Y#J&|YWi=**8=yyJVmZ1y@d|E+fPsdl7k zjsB~6sI(b!CJh=ZFBOe%9k@1X7RO#!XfeVn=zouy30MJUnOxn*Y%3n^4-05Utuy4O zsL?D2B6H!WVA@ap@?h3=AfZ~HiQEd^`h@vJD&&o);fDVtf|sP`FUv8dHLf&=KMf^wd5A+ zuxe_FTmJ}N|1>>xMq*U*N8(BC8v74XUddx&@#$y7B`n18Ke9-%bV}gAQpPt%#>AuP zuZUo1zlj@vV1oN_&wkF$W%uiaXNg+js{I9!KTF;et8tM(Rcb^oW1~KV z0X@@MBX8uv{>I{B&j;1Qcg~Zp!ob=J$x$$Edgrg(oPIfQ(n4ZQkgxXnqF*Sw|f&n@~ z50Olz;3w}3XcbF6YoySnh1V{yQi~ zAb}7G$H#{k!bl^1F#XgKLtv^Uw?PNCB;T&HJNLV1o2e7FLFZqUvqGXl1-5&`a#9Pn z*Dzb6&FVmL#)Tg&oz2G9GUo{&+j7bt0^fmaYGk8PAS-{?`p8ZcAKjMXeSs=CELS0G zZb)Pi#x3*mBy@x!M=^ZHNN!EKNZu`XHy&z?L`dqoAp%74kHJn~lBNv)t)-Ttjgg`q z+HroZynW*CPaWQ4u;C9PLoB(0p&35~Yn+^=G|$xsaeV3Q7{*X=xxxDaBr@HbfUG>h zn5AD%ijDfV;ExOi?d`==-$_g3UoX)m3P)pM$L>u>bOnpH;DQ4_1!XR~72y-x{LPaS1k6&h%a|ERki=hzFoUI+K>k5|Toq_hp#G6SFx8$3x{! zHz?@sXCA-S-fWRvih`dBYuMCR)Yn>zNK$qmT}f)!w=}g>$M0#)SEir2-R1Dy_wwD| z0=b%l}048V+x=)ETflr|JomLm3LUXot-u(bsDrng+6uD$cwMQHzk&ivRP ziUEJeQ6gCuC%jwBjmpVe$QF70{*Y=BH^cxBs7PRyRe%xNt8j?^$teQ`Dh9gafZD2d z1ZpcFAxc(JMMVW93g<)ufiVo|Uy@Y}z-D8~S33u{^DG!0U{@#exFAhFUsftMHg?W# z$Y!>lhm{o!+BRfD&PBmu0+`Rs6`KyZLCk4I0*MCj9~g8s`pWdi*_rpJ#X)Qr;XZ(K zi!@L8BA{RzEoImh`lPufMWa09&~ft*l!8>S@R?L``k3MQ{vxeEM-+!p0aF3!KU2H+ zER!b!o;1!f;Zac}F%=aR?w~cDQz)cXOOA>{OU~(f4D5Hi$5Sp-S4HYZ2HRN`*d?8> zq3>^t5vJefR$xjDK;)X(D)CRKfuT_(GWdGjK#pG72$lsI@)?}27adaZKnh~js=g1uks&SGuwgA z^@Z))5m2w*$cZQAT8r{y>ms&Y?SU@B50#dt$qH^e>GMME*kyeoc2sPyo zXfNg2XGK|AMpo7mMHm?eZ8Y3}(r^2nh)@Wx5RiEQRJ{#)V8JWXYXtBr-gjP%VmB{% zn654L`_rD}lZK|;)Xr&^o_GU!{u&A`iIAjS#2e>XV9dD%{?mTgq!k22y+&z%vQDCj z!_3RT-Rf>|AieP+C#)Cf*`6X(AO;F#lrz#kM8#Hmhc5kFM#^ydbVn1%yjek4TqjO? z@f{%-+LM8#<>hpGq&qVATp%NSiv-|zD7q>FF#7Vo7<{0OkL>YF-Adc6#SWQ;V=pcq zir@Xvu?XC6Nx{cE)8p?;GF`j@)vqv8e&=)%?Ud#IOMI1JLAvjKyiSYvEJ}k;V4x;e znPbQ@C`V+bqA)nY65gnR-BK|TF>8z7;&CnR$C3d4Ui{=2xKFAVZ&k+Dh;oH<&?mIv<>Hf+U%J`jARonr1ZO%yZO( zF_l4GBTHZ_28i+MQ7Cv@LidlnaG~DKe|W}g2l_8J(_3zW0&>BzZ*2?U zrNc=d_zZ$~y5A^+j*n#}Yz8kiYOT|Zc*V&^kX9aJ*mhYPD^`qz2dhYAegH}gb@KvW z^8}9bxBX)uk;6iMTItr|9s&a*p(o@SvMds?O)xaLnmaK$cWfuxa~u8m!k$U789NBG z6u|hA7UFn9bD!uwEp^F;XhgYA;Q5Wm}#AH-@Djy8UuD4(Yq-tTf=% z{R5hh{1_+?(|1IH{Lb4mnco;AAERN8DCGr70-r$UATIP1wcE8Aa!O;_<=$vs1#XNq zQQeOR@lWBhL@0zI{M76PFWSqFvdfNlLEv8?j~5N-yVr#QA~89*H4MSwS7czGj0&Qx zU=)A757om7Dyj_LFJ?kpa3mNZG~6PWUW=R_*{LXAifz-zkebwhXnTuz8G(>mly)oH zanQ4gJ`S!*T(Wkj{_@pZ!2c-cKLJSUC-H)h9nysOKcJwz5TBU1?a#>#XUBFp&fw5+ z%pw0nA;lB2+;F|u$i~FWju!Gzu}5`uxS|aV1hkGEqy5FRbGCo|K9vZJP&X`RwO`<( zD#Rd;IdY(gncqS$)Nkw)gLNi4r{TUHf%wPq0Zp+%&2^TkD!a!^SslE#udF8tX}0P47PHzD3a+~eFr`wOs)OfDj=Qt-pCy>T#y~}f zvTN@)owX5qPkbPYc5Oh^s&*}f7GeKt8>4lJRwT|;w$w&t1|#!zmS8UDUW zW&eoGojqkp8LZLr23Aqe<+~UW4R1d>Nm3l@vW~uMOeGQ#O02MTZs&Vl0v|JM^M6E( z{OFr**sQ%vGZ^x;km>Qfw|XTch#L;bbtDQRx4;Nk*K&VR4fjOaJOlO)JUsqX*RA>~ zXCNn2ec#P!;}<|+OR<;eF_EfSQWLs{u%=M21m^`qJ60ty z$hHG+=`!!0iF%suQPBwNG`Wus*To>0a7=!8$m6F@H$&2_1biW2KM7^r+`gk0X*5Vv z$YSD!&dx;%VU#Z|)p=gnTMC$glup`1tJ7LC->A^G1AB0H>+5GJ=9^r6NYL67zHV}W z>;yYQF6!G)1q3de+hX;cRc=J$9bR@!+5bCpQGA}v5N5I^9=|IsaM7(I&hWmF*kyDN zYK8LJ%u$e#u;C^~ZL4n`T0b!8iCl~V&m%P>;vdlc6Y7mViJ~Fx5ATK!??5`?x-^6qj4;^R61I>*cNYOB z%N;yCWlMp+%aI4i%atx|6qBC+u2Jl;^t5KLJADkfO-5#BZbf_*o%~g&ovBf9PfOb! z#f#M`u4F$SXL0M8s3;4(KdE4-yNw@5`2kITvX2m>C6L)tE6%V39m&D6YHIQPoLpRk zu@CQHw6}djz>>lv?x_~A;3#PgZKvQzC&HAKHN6L0d+pUmL9@T?j#%1|IdH;d!v#OM zNRNqGY={-#Q2N{@FNt@Uj%j2Otygq*2da71xC@P-ar#l+`=so(!ehs)d|+1b9`x76 zTzo6yX5M%MT{4}ix1(ujHjbZ8%4M6M)PF1Sy?(kGs;qQ>zw**wAj4kQirZwasaZs{gySo8m%K zxUJ>)7Qk+DAVaXOd6w9{PriLY!*Q@6YV5_0y&w;~Aw})9M7_uFb#w#_&6S79c&}=r&SF z#VFDMYJ^5cMpc;@m_(j0L84RX;DO`at=GABMoVJ@k{_P!>9z(IBot?k2t#Sl-mdLw zo1|g2C8N*dnETd5#c1P*kA4PNp($fr`?_8iMv_u$lS)0PM~{qfHlOI`bbBOI%D<8E zjP-YSfw(DeII*tMiOvB)Nz1m~>8ek7PD%f7eNJH{$~a2>CKzWEpdt-x{Ecpl~7A8Yv0P2mge<}j50zG`{3wDDB){+JMLtG`6Qce8X!tG zBI$?M!!fHuevtPAkEq{csrQ|}(Z5q$=iBQ5a=LT`Xdi4E$A(!zj?V8Hgdbg8J7(=1 z9N6gcPVdyH6#~m>=Ke!YK#|e}wCUMij=Y_9bg#IDoPBEObZ{kWdeA0@c-b|+F#bS zDgV6YM>dYHZiY<1(Dfa-4%h&p061BjRBCuT4Rha|9Ur^DcNzLTJD29--~!;)?>yE3 zUbP1BD)KU&(f8htRFK)`n>Cb%a73{xH87e9$#^WTfjbMuB{{;#xR)!Cnx8Y+GL;vh&hhHnjHyi`M=PoBM@_J-vBYkk2x4VfYHsusuX_&bTl8JY*EAP zP0{a_9IUBO@z+l5kp0^3e+laaf*(xEX6kMH6$2!b!2*jfVfDi2TKhod5lclOo{20u zM8!p4&nOu1l-F{B9Oz~IcYP{zWt>WaWWY2Q=VP3=#A_Bw4REA&nE$N(RK)@~hF}kd;{i9@1qHvOPH1g**4?wsQ@#a5wsP_g z5f;JXBY7bdKzt5`s$SzmFUIl z9m$=DPviVmQ_JyLC8slGSB8>c{ip6!BnN*xaPVvw`8T!&o|M1x`uSn?W^V5$rzKqx z(7jqddi$ zswd2^@wK|z**fJw+kuYK?hj_x#NHyQw4rlheA0n^+Ryz?KZVv(`={-{!E20XRnj`W z|Wb+!}i8*NE9Tf}n$59l1+i*~dB7+gRw%>VCPTOI650qOAKv#40yVIi!_yjKu@F z5?%(^(*d&7h38lP0mP(b?#PC8_D3OOYdo`;YACr6Mz&Qc9skrUgC?@i|M! zq28NT*py>zAL7?q!#^Mu69pMGCU{W;L{Ktwf6KyEf{}>qZq;6ZN3nEVK1W5j6lA!L zS=aU~9}Jlynla1O6{G;!2?nMveSuf6*b@595n{Cnkh#P5)HPusU~L<52T=Rny*;Dk zn;S1srTIAojMCyX>SlLcB4hyv%Q?8ZY6S8LQ{DiP6a3-l&mZ4fwip7mrFq=(mDfLbVcKvL4LEu-Cofi#>G_Zx<7gm(*Gk0QgBaLQnb1%wh;?!zy)_CFUk6{1^} zw?3n5kcNY@>kb?n{?)df__t2sh&KzWl+$N3^A%~1k|3V8c-(+9sWTGrmr9Jm>(CQA zXOvIkv_L#wqGOxa4VGn1aB0vfm&_i*9|9hE=GBC?1E$>V8u-eEql6N&BhZ<6gfroU z^jxFvUR>@{GhLdayW$4&R;B1xOQqW)ze2kO0r;G-ntCtGtY0+t#nXq;aSJ z${u2@kZ^CBGp?j3#E??$`~V(Nmb_t40BqTqnf;b1t{23c&k?&ERaP^KyWCB_UUeItrRKqi5=C*2H1vHu^I)mSWT;R z9R2T#y#OLTAYjopc%*iE=U+pHi(uN#4KK~Gb#1v@_7FM>vhCpT2KO~*`GaS`Pw-RQ z!qG+YV6H3Hmzdyt?e)r;F#c`9mo9xfehS8O{c`*sU%V&a!jjIO-z!ypftE&A(=HG% zM_-<)Yoix+u34_lOnfk;M*QkMGYMv()gV{WK-Bzo=K~5WB=xmHeO%OsMEh5$st*s+ zvvK-Xrz~V4+Xz=-n3P-&VMBwt;Ks_#IjEXu!wqF6mk9$tmL+%Ori>^O^zL1tOKp<&(!0NVS ztA8r_hzK(fiFLAZb90lH(Ef2NbRo`^dsA3>t7q5d!6A>J;N~tC$;9MjQp?9w*MVT9@qDaWQL+dHv%fxmoEcl2j+(#^#s;RK}?^K-`q(NmTLF&7!wMDXq`l z`{sy$V|_h1cijKUgn7gbxIw!SbXIzLtq|}+zy6V%kFRH0uU-R+!DCn=M06Qvdv9%$_J_(5_xp!vdYTAN5J*RZC|u>6 zJj+dV;VJEn4;p?Cajf21=1Z) z(!`gQXs=1N_wO?;CrS+isv&L}sxV@e7biTm(fS-dG>`0JWm%IVkni-$wY;x7;0@?n z-r&&QnR`!94n}_#5lptU{vZmg=&_fiI!)5!Og+}GE-PC|?Z93lQTSLMljl-C*J|^BhEK?{sSRt12sZKDV`#u58v7hr*+)3hJAiaksafFLzXDq4`yaFH1ZjG#v{I8PS|4 zlF+=oPFV>E{B+T;FQDRpjI0Y`_D%Igm)_gA4sBRW!SFvr-Df7YkSEt-DR=#c;F#St zUSRb=#~!z(qMxc;bGpRtECImR(80pts%4q3=w(w=(-(e`qUVy_JwtQSt>_PEU%bd8 z{Tx0sGvk|D2JekG4^72a@)Z@*G{_l_=VM3DB-}@TY8X#Wh_O7n7e9w5ru>wO;l6(8shQ`K-V~BM9x~~tGmksEt%@zIaeqZmp#!rB>-lv-&1`pLg9{Y8+-f(9_Pw83iHPz zfBgLtql0#384*QE>D`~%GXqUYN%7`Qw(6_0ZE)f&XY;yin|oT>31|{mnq1k|sdfow zUUk#LG)onh$@7O5ZLnZJ#A7US13KBMz={08xKMqoS~EIKUjGS3URqxNS04|{N!TiF zoT*;czc@%mBqn)z$fQRZt{u%Bv9djfV^}Pc%EZ}_n{=9cdsBray{?puv?m_M%Pq%% zyqj~_b{&${U$Y&)58Se9R6cq4;pACW^9=Mdq9hf4SVUwF-Hj3QniUV~Q1}bum%9lc z)vTLk_l@{Dhm~Sr5cTt2Ju(W4>)GG5KHGYBLqUFAq|y!)J%2?q@xoLR-^Nlrh%(hb zJg|-s&x1gSK4@rQ=*NNCLt0rKc~{-TJhNTB@!Hy20eb9)siHTdZxAliRJL;?B>8!H zJs7>6odG-v^vX|RSvc%ob}lZpzm=lnttQ2!6nh%>#dJh5BH`zep6byQQf!MC7jARx za!uYR$qDAwnxL7>(h~8xdH^O7KfIIWG*qHhF?xRPDg^ISoOKMU4W^(+S4O&B!eaWB zCdK}JXMNl(Rkc}B)>goQ>}kQ}x6;cf^$*H3_HOIX>k!|){PSU?s#|Jz2~b6cm#N1H z6#Z7?!`+<*Y7@Z-xU`H6mhw}k3>>h@0k&j2GebiZifA5s4Ig6v_Bu8u)*95x+Oj6H zJmURuf66hv$D{?qVV~L4B&4f89S{Zt8<;9D$t_adHOuAHQao&l%`ck7`5V_PTbO*+ z=znSFLRiTw408*~sN#HMTJs8QBtjdsO%~%JUB6+M8TszFNvh{2_EU zAL!HrXyF@kwbYksBQ_seG;hYR3Kp=KNFa-44))`1+lc9827N`rMahcI!sg9a?p`-z z$}K~q+1ZF5a-LT6SvmVr5sl8GZ3KkQMzn&?GL9+heDDh520*`2RLb(^hoI<;42EI6_<0x|n2647*DC_AV%J zb8l}gCou3)Y0y=MgCx!;+bw$2C}Uv90J%kbf0MN`ZMj%_TO&UfI=+{##kL(#))>E$It+8v-( zaxpxta%pjd5zg1pWjDN%z_z2nkY*SDrj{dCmIpTeQL?bGkcDLU@84V&I`$7#F#j04 zN2kX~lhD;GkK+@*!}tI0?8@c}`0;xF_qYJ@z|CVDe+0T)vDPAj_g(2Y7LEpMg@v(k zcZnA9;nY;J)r_~Zb39ee*;(mOep8bO`N-@n<+Y=UiOKi5lch&FrevHR1kRas9}*Fy z9k&O5g8_`|5|Vj&d8xz8-LqaVy~Y6{RsJMcf$+&ywubm$nym?YWQpPEG-M@BZxOn{ z6rl|&yIAs0TwGk_)Xo9^NDSxoSE8cMeE7BKL5n&S9~EL6;QIV#J}s1~C^Vr8e}T6) z$?WDMn~LRyNQ9JK+9>j)eht}q7Q2wZFILV+e`N@p1w-LeZ|)*qHOFhwx92x+7T#w6 zdG8#nuziWnYGz#>2G^z<7Ae*8f+>BS@`-}CV)D(bBnXL{SNm+I{gRVV#_#5fW3i@2 zwH}C@kX91MaJlvKd_dqCt1CX<q?k%l=vueM(t*mUO)Uv|a+6=h@m zm5r6HD)L-5Ott=?Lak6)VpWrlgP{J@mjyp_zsQ`eKa%upZ0D4D$4-84{7n#AIo`-i zo}~jlZ^lo?tw5RTncq6o5Uc;{*#iM8h_q{bd9k+!j*F)UndW)Lvu(wOol&(Xtse zLwq-a2}hlLi-_e>Xg5@e3gU3_j?-i$>6ci!I*NF%huL>8*D>+U6VGS_%zdg2ygbO8 z{I#(gZmtjU;wD*qb^ZAceigN)NQ55X&#+DXNO6VN9r6ejCu}B2|6stD5M4};7@HVr zSvEGngv~#cboAHH6ZZ%`sW6a~My^EOhC89B;yX*%*U?!LMEqnYI=^yA(Q6_sig&Z7y7!W=|a#~TKqw0^_+Q5x}K5sN+%U% z;)h&rovvWgKEFw+`-dFz`d=!QlL5~*s4u4T9-jRa|M9~4B z+xtHDcXm$UEen~4=wVdce&WAYW>A}>9LVn;BSR=H@+0cX$yHhbMf>J`M$e+s%ap-x zdqkUFMwkdgL9cnW+*#d6{p0}Q8tLpd3U{wFT22kr5ZSv{@n)X@gAQSj5FcVS6dxbkb7j*)&Enm&s|6OovpAS5%(*vNBPXYQIpDlpfR)3)@CsT(k`gQK zbUTl4$`UUf!6-aK(_~tsT&(8cRcA%p_eY37hN6D9BnNJJ#IsR^s^w00^3(dZ?Nit@ z&~4zebUnjj;?{A9TGlA8r9$QF76z0f6Fp#@fyVt5?XUZ~UbW`NiERcH_e)Lmdv%6^ zaV1J4>UPM@pk`*NFsgX^maWySM$N5Roj#yB~_NS3sf4~-6P=cJ(f zDk|=oP{=CI6mr#Tt*S=|@gZU%3{ULJNoJ3P8$t=zgvu|973+?IWWQ|ru~nkhCLMS^ zNGcOwlIFw^=`K*UFKy1M_N#JZ?h5#Sp zrvI3kKSfq+YM9r=BWW6H4bgbq`ahgiEvSZlBFnmZRjIa$<&x!}2kgD00!V+sz;|=i zA1NbGT@T&-!vfgLf6f*fGy&AG%Z8fNI1a$v`qoU5TM1y}XgvOp=HI$QH$gZdRs8&q z)oB$ESg{$F$5S5*MZlWkLncAMto$q)nZFj*Q?vfjVxBf#RG{Aj$$yFNmsrIDd-Q76 zjF~`HBrtXG|DRFD6!{L0x~-Ge=Kpxxq2vWMN*{|RAkyy>xkOrJopw8Kq2icYDDFoD z{J*@dn6eEd5I_H)2P}2wW1X#gr-}oSKmW=Pwq~iv*N3;$kjqQAl-pRxqHw>WcFm_# z^&xtu==w@q#k~*zQ}?j#E1R~nKR#MJeh$+&vaH=Crp0rT*P4OAhU3G8i!i``F>dZ4 zjvt4>0fWo(IqrbLKLs7Q;-(qaCB8wjGP{@mjZ(ib$XNe>DBPWh-VPzAd!7{nFy7QK zI1CM{Wf%KcXG)OebG;F$3^d3%>HqVE<-0HX99}xBT-pis6&U%md1J9SoZG;J>6cC`sw??;4fHX{s4WgdyL;DQv&p|*mVEC_YZY_D`Z$oCS z?=ef-0Q}gLe1yK*yqnVh{%uhS_(`0n0 zi0-0CSrk1Mo_p3`p>WjR&wjMa^=qKD(~5O3i-_K^IZ<1PQ4 zJ^@YqCf@$45ufcfJ&HI|#>mD5`DsY?^iFh#o%VNaW3(zwmL^?10prT=^Lv#KPnp_!+B_23Nlk<6#mShpqASJfiGg1nPDE;eC=SuRlG^wlfyHPHJb*An#C&f^$iUV7i{?v8YboH>deG|7+zFaLD+xab`*RyGr#;KO|5?g zxIqP@`&08oN@jQ~d@5YJMRTQ;N$+CELnUaGl`ZM6Vo%VNwzJ*X?J{GJdXyG zeAr1Nq}6Jj8*m=-7CmdyW%C8t_B_U$fR06^R<2tmfsGC5`{15sq|KAdjv1)Wz?&HO ziuLyuwVDP06*c>p-{WTFtm$k0x7+Ay=ikG!k^%#xQwEJ0;00=hU+~lq|9-1;;HNO% z|5)oO`id00L@gEEfkZqNla{Or7TjdhJE!K0RMM7UrsQ}jEhQ+!N^Aek<@FzK9He4C zRTIZR&0^zA>wzsZeu{Rza`kmgU<-kox|8sJ%~klX#LqRZXa5gvZy8oq*Y^D?(kR^} zz33K@lxEQ-(nuq*=oXOfmIkSXlG5ERqSDXxzhWPuF!%`Z9FPmw(vbPK+Tel+)}%#pyyG;%ZjxxL}^ZUB)JtdY*cg!Q9| zV}gv=?(S$!fC`NrE#rzbVeSm#ElHzK9(@_}q-G?Kl^vTO-*#y$eT?`7v)3_a`N-q) zH@89OM^51NflnM(ZH{zM;xxKj{^pVYs}K8;X7`svizK^nTqNUEM4DWxH!X(LjcDP> zEP@iK&noe@tx^!sNfou@iE^};0zL(Vgy>S~&ZurVckorOML zLisf$_E#$3E7VFstR=&JZRPKC;MiSB@jSa`ZlBE$j2ymS#^Q7TgcLrWPnR(!y`O)l z9Fil((XFqnDslWrNmT}iW$2`)ovd4tA-{$5Y3@PDnuFs&v>oZr@+CC=X*@0mK6<pxDRu(>4lw- zh3%tRkTuqt)Mvjaq(?;ykHY-Wo3xupPWMP&Fza)7dKa{KQqj2vR*z9HExfh1Wvv;p z65eN0pk6f947L=4&)`&at21dgq+Ajmf5NcC3~8DUEOAWjalAXj1~-6P0j}YA++!1E zzKkU5T^1#aK`F5?3x_5D#BpHIav?d!yUdv@zOdjo|D<))Y<6X3NvlL!^yI3=<5$Uq zs=zy5(t$rm+au3Y4&Dh|T>J&em){`4Rf!S2>@?|`&cdq1&EDOX|?1Ld>RD56*`-|cPPPKs$>@^*p`g%j2i zt!hxyG(O5$*CMddritauxW!rXKBABj78nl8MYes6&`a(>e#D!h6!JPJ^Mg35m&KvJ zVM$XSr>_rP9yDG1ML-zUtoBiOEb3}AX2LaNKtvuUTuY72K@~@dCIZbwy>K;0``xRc z9AzmS3IQ(Z0z9-rR4tsW@Jp0&|6!v;?!likjs5w3yhTeA>+?QtzZTuI6TOG7HuRQE zhz2xB9C3AXhZ75{tMMA2?RQ{i=WZuh0G7~Y)T@t(4Arz$`Vo$}OJQ{hAd42GA8BBu z!L%Q z4iOkIxjNqX)cae2NgdJ(7Fo2&oAfn#@ zqiAM^Dev%{dx47kd^C_**Tu%lss<-M0-w^+#HlAa877O^29MT$o%FoYe_sGpSZj0J zrW!L52fcvJR25(=SKTskw{Wl0?ex3qRb*G#igI7>8N3a*qsU|g)(~k17=-LmKyEyb zNU>_xmbrKmuzVSBnz=pz3r5J1d7gscsk{U{urXHP0Gk`?84xx&&CXFy#S(pHHhU?P zCKL6P+b`C!rnYv*(c!VmGQ83G_qDf6W)08lte~CfmAz3DdPz2duX?2_g32^!L&8&H z08G-7sQFCRuT^b}Pc3!>6b@|hh})D5AqF4VyZYUTbwK4zovu0(1qw2RNYXMAP&~~h zW5$$zXno_L#loPq6cm_0!WrYqC5ISy-}=(tr;~F%eT#yoT1T{av^7GzB<-as?mAkt z?aA{wdm7NpnMJ~tGWf2LJ?ML&0Cb{2-dW};*F4y4?l*Ma;(4-K327~Swm#Gf@ z&-qEe*ow_P|Ez3Mq{A<;08D-Mma#>|wyBjP_6Lee?ejUKL6W-%O0`23Yy19OJrU_O zfRHDPZm)+`nlzHcbIn9+970kQCGnvghAn@7Z3`4_f5VwokXP`^uhPq0W5|ThNj>y} z+}iy$n-VDrV^xEC^t&18lDV$l3SBH2zo66A@`_l2p0*_$#er%@RKG`cE>ud=^a+Ka zpx3(|Vo1EW1=JGJqss+K8IlI<@$psqa65O%c4ioeI4HMXnCdEEOR_e5ri=0`w6bS1x7lmDJ{ha@|_y68Ip8-nbY#cn9q z8(ihlHvup_*9GSFEcmXLO-WpU%+$lB-pq-{Cc@T_#i`F@LxmdlmkaEa6$jgNkXds& z#J-c>T4lm7!(0yHaiXzv?~Fg*hP8*%GJFf3ppBf6M4XgcNFW;B`oTV{7z}(KCdj2U zH1PiZ9T~w{rQ`QTH?>_Hx&aBb?0JCcZ8!h(u8t|~uU3|s0Mo0Npv+>P{p8%PmL%O^ zCUL=`%-Y^Qw1YxDsC&49hp?)GYFp!+7;xFWV zzE|0_ht`})uaHbU?|BhM#@|MAWE>kU$IHhztFph?N~S2OK;E7uXzuf8ppNjusm^UD z()?6eViVVtl&3I+u+adAzHc>fZ>fFhv1;a?MYP45QWiJ&8o5Hj3cL~u*Z`yO>Eihx z86oR4Bsvi-J$m1Fw}LBS3xX#&mSieAYdrl71)9 zvCHg?v^>8>=sk3Uq=hJ@_w`<`c>zLLE3nk)Xl23%$KnY3 zdfMm>>+vcnd7XK|Cc&Cmg(;`I_YMD3WSX3#BhHl(iR0*eqXlgiFB%OeF}DMurUPwP zx(lt9td0gMsc^;F`pxM%gWvlj;o zHUlBHc))AtSkxlQj@KGPSrI89tr_wL0YdLP;C?tOy#`Q#xI|B`nfjq03r(9#Yd&U2 z+Yn*0lRmXSHsi-7#!K}7J|gP6Gp@3og$VI_80G0vJ-5nZ z?Ga8jr1>gr@tMa*;&@uJaF4s|7pHXhOIR`dbuT3)JyVH!Q4Ru&zg;QIWJ*!(RgpNo z=L{_vUo$>?8L~D=?y3IU=-P0Fr`Lb_TtJW!Hl0*0ae*|DV4QU;SV1oQ&>Mc8oJijW{P-Ea_>0=V-1O#u*?=6 z_PGrqM<(|Q6@~bLDe-T=)53Sgdi{ECFeg&lpK5AS`*|A0QMm`$~#IBH%}*jrfJvt3V)Of$M*L>Anm%$q--TX>S!+iZTMa>e1S zX(>`#(g?x}6T^TJ+4NUH_V6%ubH!D=u`8p<-HWUOHBtVV({<7q+Y^AUurStyJ3UUo z2=7Wn2s}x!=CSxeJX#y2xus&n+l;HLr#I$^i!>`QFK_z>6fe%w{O)E{?HU#u$Tb5+ zA+9eFi)I;QEE#bre%yV(cFAoLlN=#m@G5$k7*CUO=A=XfnOzpn%WGeoM1IvPE0b6< zZ)%^g3~*3aeC1e7$z>w-mF4^3AjlE>^g#$a@l?@WO_$6jVKR z89G{4N}Q=&haMsKgC5%Cq$HjEB(!RrGS0ssp}t5XnT6a4^Z74vi9E#QDtzX#<>ehE zO7iBaH8{W(j!#ZvO1URu37`&`qq?oh&`57%uI?&%*^K+a=~(Ct*3zW zwkwpev8^z@Vhr*{-`40-LTe%TG#0Vat&%BVj7uF0T-zqc$2p(-acDDu;x!SU-ua0P zC)@L5PLJdlYi9 z8|@e`;Nz5uZxbK%&`?3FV1S{22HiOF6ieQ10xi@wh_9=+uyn4Fxh{S^1S%)hR^KZ+ zvK&W&w0#sJ)Sn?a5*~bi@36exqcY^MrHrRj{!j*wXHdOd#?JikNc@A8Vh=Sc&f^p+ zdV0w?M}z?CbT%}*NCWtYRjbJH(yPlI`Uu>M3irbw~k>a7eZ;T;&BG(}V&uIY-Vd_(BV>@fb$rX7vAEn9r<|^cq zE8%A^hJ=NRIE4m?<#6?FUzojQbJxWz%D>aH6$c!uM$eP+ISF1fk!dIi+SKp<8}FST z))4~{tvRf|^tojbMLdS_8R^U=VVFQb=Vmp#RN4PP23 zaL#nkD_vsZlJVfwnMY`VMcgZYm{i$izup9+(tJs;-sA!GWf+;q*td3M#oM$blM=Y? zLQ0hU3^@?!KyG2XXM$;pK=_*x09D+SI_VQx6UxPJKDw9!)D>w}6Nh=vKZem2;`{Zi zSi|+F4^9_Z7WJEMbt?P-*=1Ni$)-&?SvDPECn^Nh{dHUc`2b*51@ImCr8F-*#w0SV zI1Ly9yOymkHn=Y2>5c|x}ish_s#Tmwy)$xySMIK9?gDwnU zy0GW$jVCIBOU5DhEe=4ZeQ*O6O^}zaw)u$e+`q@wY^hy8KA1ndD*Ou(D^8RnNlolJ z9*#qDOAzU7>h+Tw+(!Htq4pL4Mi9{0>mJ%AuxjV6N{)RQ_{c|Yqr3CJmR)TY5z|nW z(&-weyV#VAg}3yE0T&Eh3hsRP*HdItM9txrAHFPg768bF{U1mgT`RRYm1_-bCZ~P6 z*>s{OfHPu^Ur8?8ClLO#O)4UbFD%*Q@QLM}@01lD`e_pgg|#sVu^PT82#9NF|@s{K2R z*OYz#)FWs@8vjPQUq}rvg#rtZ9w_^}biDt`p;ygXKSt6Vu2@zcq&`-CokE(uY}KRN zx3qet``I1$(FD{%S6Ppc9GFPkiR;ZCzs&&^1*%zy3SBR=7B9KIrT2<~TT7A=4c7nI zQY-6a;aiKf-<{a{dQ6)_- zz5lM(HD2|p^?X-lVr|sJ2Urq7>^@bE!MLYG(vL3?SnNeH;bm6nDOv0%O}XV-H0zcy+6o_HFld*pP7H zX(>Hf;(Dmfu1O^LU~OOs?hMf9+d!2K#?~#dJc(Rv$S*Juw6wI`c-8Bc;lg?;7DuE&Uf;A7QB{;)126ph z8lK%?H24d(ptJ=P=m^jz4{q%5+u=*AsEDoF{XX&J%ZRRPY-;kly}z6?0@?f{d_+V< zAp2Pqw|Zu8@a*i`D7JqMkr${p{QUeE7Z*qNliBnUdDgY*Qit%s<9sURQRD<9cWMmf z!K~yt!LIi=zlfc0TCRH5}P4G81dxfp_%TiL*;Tumfz@rn4cy#q?ltz-G)Tfh6Dic zk0N`!){dysByvC4qah;5^&MUS#vLb9#?Q};z}lLP5IqvT8aEriLKM$vxR8H0rPQ4L!Z+89^Daw3WZQm8D;2gNz8y74%)?{ zy2!5tWM(w#`zCpM-^fHgDP41Fe2N?hQn{mLKxlyqb!wMj7le2A-GqQk5-zZ5=E@#& z{n}G8VXgEfrUS?G?o90pGtxz*R+x9;8Vf_d6Eg`?f? z?;>#^lC0x+p_+$HlR$(JaRo(8+V>Xero@J%mHlVYllbi;8=GuX$*Z%tOD9bQ4ej*G z*ItO%V*sZVJ_)=rTBJ+?jgX21m+ex&CHGgkQ9C;mQ@m9)r3l~=&-LX4q|4`mf~(_j zKG^)$9Xa5#zVZQ}zObL?NR*G+JU!iPY<7Q!RaI993ZRuot(HFb;~lYv!3bF@*n|=F z9*oq&mKCFAfdnVx2yAW_={_fns-sx}pJE10X=!Pi(c$6c-_7CQK#{e$Cve*6MVBqu zYy(6)yfR=+oF6mhc;^Gmh2yM@je*yOb<|9|UppeGtT(6uN!~b(piGmf6KXD6h<~ie z*X+pB9a0LbNLra44e$6&9YOptyIzVC|Dt|=2^Zoj_L%E*Z$_gLIiS$EK26L|^fE>U zwK2`gB$$=@RU)9-beQB5G{ouOq$1;jf?-oY90Fr3B>a!~|227q5w) zDVKoB`_cZ!@85Z&fE0*Z0&t6DEOw`0XJ={2*UW?!(O&ygByHxwZe@zCTrc8V;1uX3 z*YAO!h7%2zFN10iRP#;o=g%@y%g&Dv9i)4nGNlgt7M|@+MWW_}-w@)T0c9gcfSp5y zW$S}RljF`f6CMs}sjAERDp1mP6qp$qAK^Nki~~j{i`G{6sEN6BftG`Z^#`Y0BtfTj zxu=;QcY$5;A9Xasyore^@5F@Sy}dX6a+J+mhE0jyW?g=Hmc-2l!C0nVT`FZ@(K#E6hgn*y2NR9#ylcPz`QK?D|siuAbuktM5^-0`%{I8%>1md(f#82k8PjQTUz{7rB^c z0$9BS=8t#^)K}j_6R}YaqPea!E%*h#yozz@tn^}_=}}lwdS_#U5xyEyTvDPIDqEE3 zsD9f<=Odc2aQW;>JIUIty1t$uPSf`Ovv?F|^#+vuhPrtOHpG?RUtZYj6t$0VUGU2n zzg>rfC(mbBUO4|&gkwC`rgEK=3NqxY3_$7cNmh>n<;iIu;{KM6h#A7w4Gj2TAYqblC9hWSGb2`5g?S1lF>C%iJa#^O@pW67V4{ClC zoQke2iXKbXSCInefoVjxqYy(u$EpqPf#z14A^=GiKC$j;bJ=^ zoUmN2HXUIbO9DFv-oCer8HBEcdaOyah`YduHtj`N-b>Ym>@RxJYwwjm)VRg_%!l3lf)VkV+wT%THFgfqmrYHo8G4pa}MAqwOY(3Pow2#JUo z&oz=sH8Trg`AV)m@tFAZF_JfTo%lFAQ zfL`*Q<3|fo##W0-FFJ>gs_?o4E;d$NX#LzS7_P~OhQ&YHL$txDsS0f=ry zGS{=XujM5~I8kIgkBxOR!`^DP`-3c7Cp&z14XOyT&(xK=)fUkqTu8xz<9|MDe?sGSs-$e!-H|8elUMT>me)Zduv70C4>|@1$@g( zQLH@#lqE>~w;=1{Z;(S%N{>o8>p7cD;(|j%yH7pJMX-X*U?z{bfx^# zGL}EL5#N5y_@bq$32%KP@JZDj*FoK?TJL~ySJ~Q$K*U2D^4C}Xms7BVBl(9ge4>;N z?*eJF#LbP3+%Tv^7@6#Y*;Bgj-OdC{3L!A_!LO8{s|%-AW%lv$2m{w_YMMVe@~DvI z>d%U#0l)jfFU-28y2-1u2OK>^QCF8l*(3jVp%j>lyP_ThIj8ZBCxs8@`*4dK5T-#Km#+e)cE zvFxZ@>q=F4p z>Z&%00%Z)dA4)tNl4fI)lolU;AuW~A4(+3EbaqcwRGXq>iHaUea*_4EyLLU=0+zPA zDmQ#eQrO=X2n3ksQ+oF378e~@y7gourr5X`d8`-@@Y)V`lP^C_v0b3`K*u5Di;ITZ zm(RT|%hR>7Lspp1drGkRDw3FNgZ7a+``7?r9w<{MQ6DHW*g}b#{ zxg`=*sRC_CV7&N+>olG&gJ%2Eg*oQE8Lw;7c}zHKhWcAl(Ro2=2hvctUso@{lFUE`THB>Ud!bP* zto|`~tY$1<_Rt3DrRcDV+PevpN>zdkznU+F=ki!p`s@U-rcTU_C0`o7pQ53L)rO6? zR1+z|8@5Jk+DvTT{&&9RkJRuN8qXC6Xa?gV!KUc9{^c09VBCw`o&$ z?$=tmWF9lJs4GB%#o&pIZB*jjxa8Ap{l`?VQU3a5bxfi31E8{lBYdZjm6UuqAk@?ps* zSMwlUs&z5aEFY8&?@svayNsS}HmL3OsfQ@YvQzkTJqAr~SDp{DYi*-B89MA|)%TDe zm7``W%NIH-2%qlXlzTI|nKtzvzh!!|C&-BrclF3uc+My#{*7A4R*lh{RidawGd;hS_BA!6(iEK(ZNL z+5tMk2LWhCVO?R_EUc)G9XCQeTJODERdNx~NU$L~xWf#j^^3|~4X^beR-CX2t%uyl z9_XiODU7d5ntHXb=ZN$MGnJhL2Qok0|L09zlG@&0LZHf!uW8vW-F*!G(h#jz3lb|= z=@bxXuvBcD_Ch$C@&wliYbX9WgAQF61BkNMVx2zFU>dcMYinC8+4_M76L3#>2hJl? zxho+@sm8UZ!NADQz?KU(L1>e9KbZ+=ZouK=5y;K`kVL6%*X~L97<>naVBi2k6FB~P z8@&JU8rW}uuO9@^9=`ei_(QgX0x|E>7h(0l;1p3@4gW;=Z#UN8`|4<>L8tn;3D>); zRAb@{U7e3_uDIoVxIK)`{^+XkG>|eg2las6Wf?0WtJ2!@Q ze!NO2N4<-lA+u^N#<#QH_LY4$wj)-&%;&h$y)pp|IMHEjS}o|zm2}o79G9^KwAy1( zd-%n*3O#je{301V9{GORf1{zgnJ4qk?c7IH|JSdynL$xYx8FWXo(j0W0F~?z(g|Se zX(vAn*R%lp`uTkdW^&lx3fNTHEVbRSl(&o)s?jpMuZJyQQVLtmCqE>A02eQBfMM3g z1B8m!$4`)lt-N(+-i~>K-#7AD2_}crn}W$0Y!TNjt%27O@FN6X_36`g^9_!6vo*Ox z4;*knDFKV${73U%Ms9zzWTS|IQzDBmk#81&BXCbPJe!Aibs}2q!J&y!da(`!A%Gz+ zF>4wta(+6d;s?Oe7miEIroxnY<#ni^y+T=;B z;0`0qY99Tt{jcw9^sZha{6S!?olgDZJ$tmC!+N}|R>4{ip2`p6$l6nIHnGo&jN0!3 zNGEFUo9^aUG(h^9X>u*uH#g4?_!G7H$s0xjH{T1fimLPvC3iv%i5-QZV3Jz_f^F%X zaVSMdQbj=HS^J(SSOG2n;2DaFZarw)t+*qpUsPfyH)wLfvDemrD8`<}Z#rNg;O=j{G1_%Esb_x&5b&8Hl>x&KuJvI3xPg4=Bm=<5I< z(6*7Rrz&UV2`;;;zYeybJF5Wv4M}dUcgqznfw@LL0P0xHBM7WR51S9$NKsaX?g2jj zjXy4Qp`o{CL;&qerW1Os-vE7z*=1yS9tL~Ehi*yu19-`%%gB4bmQlLT4s6do6>++} zqoWuw==rikIPWG+vaTyn|RNukWz!M%kSh$T*G|mBO_0|KOWM zUsNcW_6?L>8Y{$*0#`ZKqdS1k;)IEV$H-H$1?ziT_qTZ3cqY??CdZ60fSf0H1ewg_ z&Obnc#@ID>4Z=&t2p~$tkosM3L*ixR-gGw7BcEhC|5_ojZ`%G0knVsTXvIdq+;v{{ z>K5FWizUDI(^tz6O*fns{)N#M_vKm?&*@1KQs6igk|i}Laxq`+erWijs=~m=>v#$^-&=@QAaSOBD7d;`kv5w6?H*OT17TOyv zF}vh!CNvK?c!exj)ST2CDg1Zk$n0u|pdWd2Cw_ z3`7_!4UbyuzyNaRx2A{vtHK=Ub1$-5cb%pyjKd>6V<|<(McohPBi8wD&D|@VH2D&EgfYpME3Q9^4e*9C^zG6;?>4Rx`GzMwX z)vs_gW0FQP(`!}B1tFN5Vb2=<5RDosxw@kD7rmoilVaevpfmou23R83OHAcO^ zC(H5IJ!hUYr@b6_%L$h;EofA+IWn1&x@7TwyLA`&n3c-^H(e>U{0!jU4_QCY0zQ{^ z^$Ri>hA(vwqV=YT6ww4=VElRdBwMb#F};ib+eT(3o}u_87W+hh!`;!$>T$jcB$V2Mg^|Makm2nIvR?9V5RXBTpCq`{S^iuxl#7PHK$br-oj9;I1u(`}uTdMfCbRN*bpV6QUIsda!YCsBS;J(b)&a4x zOXi5fx9($Dh=r^83Kx>{I0j8eE@1S6{d>8~po!n8GjqGWxg!!dS=BO~_u?z!6eE?w zH2BXb@LE7yPmZ9+ft7;KzE$2o(qR9U8uV zIH%JGewgXzdY2@Y$VZ&*KF^pYXe-@pfN+)H-@A*XH-^y281iU6=`7AWFvUN|&3aow zCg89fOk^lWo5q03dCI`}dNMW@4m;tiEW{2^^jPFpR0~25V|Vf+u79La^?M%>Q6?lZ zKhrF%BgjPVn_o?2-10=fH|CD%=^(=)$^GQDQ^b4r85lxGTouc~?l`;!HNUG`jThq7 zV(K(e%kPNrF|-h)Kit>jsg&hU>jv_?5Q5}6hZW`)MaW7GH$QN{o|r@|S6`;d{GZ`& zK)c2&{vs-VJ;ogC>BDr~S+*j2Yz|27Azher? zbU?tG1M8&Ppg`NP@1jpcFPERJ@d>s_+fC98(7j*wN72;LVX<^|ec@xvF<7*?p8XE7 z7h5DZJ6!(U=laxGRzrk4O;|Pa<1E8X4f&kLhU2c^43GG0hO?fl!RS{X<&8kJG2>%< zn^b8;vZ*pNL;Xru(sSb2PoBR?79u2B(Ys0N#pV42|MzCYDRHfXovQQV+?9-Q^bG&g zp%Z=NDkjzJTt;Jf^EG7Iqvxa`Zs<>rmJeG_lubfkI{yxPNZxF4)vo2r-zTmQkBjSH z{~@RPJv>jp9FN{LqaK!^mbQ=JU!AIq^Vr|1c*$&DhKdNwf>xv`bNgGHxO8qILhC;_ z*I~4ZQWHEZn{m%*@YkA|8?W^meBIoRf;1k?Pb5Un-_SE7U;P=2W9~o@*c|eB0YS zS#Biu9+gLT_^&Ky!4wEZk$5|A zg()L_qz~U2{_8q6nwX$fTgeiw_jm9>#XBXLA?h?heFS6B?vf$NLlSE4@hT;TJ~G-u zC>!ekMjO^0ToN@`XFH?5P+|0xl=s`dsv@jA34wi(maQTqE%7O`B=b63I4-4){cKGU zv(Y-))* z=D;E&;lq=Kxg=#&X9ZWC6!^iD@UON?aqH2^#P5DlcPzZps0Ra8aVSAxS$$9guEUCT zpjpcD43Gouymfrf82&2KepNc-AFGq2-?jqKxNPws2@=<4wRlKc{`1#HZhmUYxWqPR zZnRp99&6EEPGoJ+g7idg@xHB9Co*>Zf=BHy&pNMF=o;p7|Cyv;%3NAm?f!RIG&02kex_a?bxrq54t{=29N{cfKb?{lNvEPp3pa~$ z_m?cBha>3=B z97E7~DraLbBfi-+sK*zMu0B(NdOZ1FE-h7nnZ_3uWRGrg@5c{mHLv_7pCAg;LIek5{C4a ztxIIo57T3nGje?oc}AwGi|T`=XGl}eK3{|1SC(_tC#=b<^_0DS6nA6SmlGIeQr%Th z;w8(C=4vtta=uxmn;U!uZgl3eJ46$`BK~zLhA|ni*?57CogFrpkN$^iZUWp{{$gf6 zlGm!L;T8F+ANxR{wL!h{ncs{7>~SeGU0Rc_8i{CLJ3(RalI%aLm6>^TlE%b{AD}%p zoLDlDs!!hn;nQ*VHM&0R2^8a@BZDsR01>S;lxr0aU6-^CMo?#X+#l=zB%8N@U=(0nl&~0WJqY? zPlh$F5k0@lX_&#!P+#IyEtcS#YP|2*yWQV|@L1(BgCM+Tj@_qy1mUj0BDQYK2|`pP zHHKI%ahkrAzIIzeVk@EZ@me&rMYr+pU4_?k^Q@d7lwE5JD%lfcEAjX&olF%5v>KAx zh!;;M8uZ!q!%H|-MP2kVA6I`i5;#Uw^~D* za$fJ9De7pE9dDx)0e=UzC}r%P`U?G2)f5$qT6abpDKF3DpO78F{-#Q%klg{__VUdh zoE23b70IC5P1g74=B3(m_pzW zw2`uhEcLe~#rR4%%%8W{s~TG(Uh9{?nf+wsi&vW^ZI@!6&hQkWh<@*j&5V%W81c`W zvnS7Ird6G>vYA5UI&V19!g}K!4D9}5)=~()vA!7+7dNW8xBHwZ^`8SC49?^~2Uivy z&3}&n{(zJsBs}b&<9)R$3c`a%_3FMnIxcq>3etsN@52H0t=LWd;k8iF!|N=~|JQ4f zAP5d?$isivCO*9W_gDY#*Z=>048Gg`r-@5}n6=BPm#)erKktQfe!$d!t)p==@kjO> zV^3By2QFBxJSM)!L6(n~iq9~6weCLgx47ijt6v*mPklxFmn^R_4}Bjl{Lv#SU?T8v zeE3JR123HZ5%nHD`u3prf#d)21Ak0FaV2aTR=-2?`=s&f?%I*|f-;cjo&f_FgSWh- z+aaJg9pq~=OXrVhm7L9cZrbsY-2n$qK5|UJDDr9m**Ck_FH|nPMDBuQ@+%F?Cn(mP z8l`Bsh@T2@KYFDMZifdzl}kOndT%Hq$(KP8?;-pZ2Ej%Rqb7b@jN#F0$R$OC9TvgY zjbRZYj=@0l?XPd@^V_t|mpp6a8Asg5cP$>ozhClfifxi(W@3Se%EfaiSW2k}m$%=0 zv5Z0gbUeX=hs-;4Kl^!^9{Su@yFy3s-Jj*o2WisC?`|S}qt*!WAchqYf(kCNi+ShQ z#=v1et03`f>-nr^BnZEr0J$uhv=9xC0X{i0F+u+hs6A~H#HLZM30!@|ravaTfj~!S z2a~1rgu?+T2IeEU4Yr-iXSwa~E*9L&H*HXpX*R8nR(nCE*q0w>CoZ^i3Qa)1(`{>E zD^L9JG~YDlrOYUhcj_^-@aNq?GyDuSkY_Vl>x;fQXy(|3v<$eDnMPGAbAvw@HACtF zwn6m!RfFuBKj(qwk^r)bBHOL16xgR`KhCwaDChkR3)`v^WHPbodMy3OO$jVqAn(3p zxiu{ZU_?AXe?^&9wICyE^xNH7VzyVu+&zUr1Z*0pu;$aNw)knWOV@C*=uN+0JtX?f zO&rgtNWe|>`0oT%-y$>S{b$|UOD2uaa_PdJRrUhlgtE+{Kr>Xoa5(BEQph`C`0hX> z{u^w@3a@y5!T#)IbKZt8TupO{9Fb+Iv~l`qD<-{I@0Oq?6xw=#WFDt+AkzY(|Sfz4KfN zCOW8{GF%bA6nfk7h^7F@HyP+TriF2#x)W!h5vN)HBW<$ zorF5CTL}Oil#D$uIo0sIs^0cj%^p;6X2PwVv4W zNyweu=mrQ(C)Ys7Y+j9EDI8d}W^KL{fa|~1f7G`5zr8}yQt}9Os3Sr2{&G!o1?X_` zF5j8HjI&~Oik9j(RvESXQip6MND>wzJQ+-8H_&yv=@Sg!1GYn(CCHfM9>d}&MF?e* z!rA=gi4yNY+fcsPl}&9Px{wu@ADO}z4^5hYf?Mx?+my^<4@Balr3!)|%h1^mV=7`I zDga1pl^NN>)d#s4jwa#xT&hee;#EUOt`um1?MU%X%3&kv&F|uRePx1n)Vdi9vc5$} zY`S1C!1tYDaK)94$|rp@1vcNO7bS^&w$l~+b#wAwcV|dVTsD+7+S zk5qq-InC_vZqt3*yb4Lpk3IjMZQh{mvVI4od8HjXH;P&{j@DCkW=^|VUZ|SWC_|RZ z`HZDPUP?vn;2P?mP7f4nxeWz3MKzLBpoXs>UIAjJ#7A=1aW#0EB?S-2$Ps5Pf0-5J zY%FRZM~+@jdKhrdWlQ>{%Hu6laRi6)RAX|40!<8O$}?BHXD+x$GHUg;C%=R^bgJO= zKVe{Nriv6}HwjJAcY?}Q@(c-|fIA>bkYpe%<#7chtgX2iu0CxDi7B{d7ru|Tawb)J zu8k;m8VR43vvjNHP#-oI;}q)A$^t7vg|C^KeMGXP@RI2$XCoWOB}1OZOIbT53WiSs z21b(9n)(jrnGlFTr108ImY#3J3-vsA%j$KTg}}#^}}hMrk>&`pE1*N)6(&=NBe2vRY$rQ>>MIhZ&7SpTGYj9;EV6`bgk$ z*m^-XA|jQhm?(&*K@~omX5@QCkJL!Y@;vB#3l28oMF{bNWd@Wu(g~`ufCC8_pdR>k({D6xic7K__XI9^r<9!^~TAKLn>N|?(31Rj= z+f>V;@c$03V?~@(!mF;IfEMwWkm|H)+B@kTs?bSBkl~Tf@@6A5wR$!N@uMVJDv-QHo?>>1Syqrft`2$Z>MxRkD zOZ?jSn-uz#Lg9>wp!e?XVkwks257B?nbsCW`cB2KSmr^b=QDauNP(cf>%{AX!laV6 z%m!tePiUAg*Rk7*OO;J#c+mgU2H6ogS4lz~U42~YTs7$gj%o7Z#fz$&2d(_y*}ri9`} zy|RkJ?OX?f%nm@iX#|5Bb*){v0!ORnC|mvfs6-axR)T=d&%J=Q7Hzgj_+!q#yccrq zG7 zlu^irv|>a2zFrW1NLRu?kK?y^;nY%wr&F=>nd*Y!0_%k=IzVg%nQo>zLXN_A6VQ(o z(jCr&DYCs9mpGpn3J!!pkWL4(p)81yq)rib@R@iAC`L>LiR?{VG*Cq07u6U6U-N_^ zW+X3n6RaL9xB`M5oDMl}W3Z_IV+Y9Ml_gqRAz3!WW6+bntdqtf1ND0uBKd2 zkxaLg&0^?Ml@#W6F|xiFT($-6(*n z<5%+Cv8WJPkHq5DrVmKho|UfITjUn#D%3Tu2^+ zZV+K1at8Y!vwi#Tl#3-1kS`s^nlX;8>q=7=lBPeQ^9_V_4eD%l(2Ko_KDd?Pf1GJ6 zOk4)boY>Z(41SK+;JY^(K@xdXz;^Bjv71es*TaWodXHXN_>S|VS%iv;9> z5Og6rn3;z9>_Dii_#s@hQ%>*5WN}NKls*ED;>l;+1MASWTbWv%rAZGWMMYXcX5H4~ z8&=!l9C5Y4KFSik0b;B#=zx$WuWAJ81d)20fvtzfOG2>dcGdq0{W}2SYC{4u>A$OK z#n8^RgHDv^nPeYHPe5eZ#94xOee(+Ff-pAD8&7mZFEYDOu82r$28*1zRwQQH?X3VFNpSW2XW(poiOB2};Ht;)88_qefQ33! zi(r?^u6qjBd{(oS+E*C5xQN&K`fXgeCH?BE(3RFES)PZQbAr@eb$upZ5Nds-DBjt( zK@4~xbYmdb)9DM-*REdO{oik=s4PCG=_V)+*d zr9E!_a=sBk2VY#h=L+lv0I%)Z{H^{i@TNbdK$!y%84sp>V$=z%WxszQVfzoGvdLw< zO$hw?pJKi6JmPXD1STsOy3UcTP;b;$bb#XDoZ zM6U=`ybQeQ_xt|fAHX$Jw)cP=J~p_Dxc0g|{+OS*c!OHW$>a6eX0!8IwQe5X-`8OK zzTy)X(*)o;n@f-WR(Qx9?>@Td`fJ|y!vVHJ>-{xY`YyNt&pXQ6YBe8t!0U>rwfojd z{)$RG1l;-gWaq(z4KaG}zyE%04D5xf^iTNd6!+&)<-UC2wx8{{-!6ZC;!xAsG-0vx zX`9mxez8rmsd=&F{Q3KP+(13mhAGdMEP37guGDU6*lJ1FTfik+HFoiO)16-$^D$CJWt(3e}pr>E@fd{pP(PK;Hz40JmH%W&pYNiHfD>%!?Uc_ITXZxb(PcFL1jN z@EY0U8#BQj@S;g`rbH|aI+kMx~E48xGe2!h0VSgJvT)z4*}Q$iB}T&-MK literal 0 HcmV?d00001 diff --git a/img/bench-mac.png b/img/bench-mac.png new file mode 100644 index 0000000000000000000000000000000000000000..dabf5bbbf23a0274ab0821d8fc16b612eabfa09f GIT binary patch literal 89653 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 literal 0 HcmV?d00001 From 7e532f94391a03217f787281a08eaf1e7409d5fb Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 12 May 2024 23:35:43 +0200 Subject: [PATCH 098/219] Mention the target CPU classes --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3e48cba..fe6ae0f 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,8 @@ Include `` and call `aegis_init()` prior to doing anything else with th ## Benchmarks +AEGIS is very fast on CPUs with parallel execution pipelines and AES support. + ### Encryption (16 KB) ![AEGIS benchmark results](img/bench-encryption.png) From f21010888a06f517b6ea16ea2cdcfda92974688f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 13 May 2024 21:46:16 +0200 Subject: [PATCH 099/219] Add Facebook's Fizz as a libaegis user --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fe6ae0f..c49dc5e 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ Include `` and call `aegis_init()` prior to doing anything else with th ## Libaegis users +* [`fizz`](https://github.com/facebookincubator/fizz) is Facebook's implementation of TLS. * [`picotls`](https://github.com/h2o/picotls) is a TLS 1.3 implementation in C, with support for the AEGIS cipher suites. * [`h2o`](https://h2o.examp1e.net) is an HTTP/{1,2,3} serverwith support for the AEGIS cipher suites. From c7b61bfad9cf0aec3d6b56a0861c0b3df8af558a Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 13 May 2024 21:56:55 +0200 Subject: [PATCH 100/219] TLS 1.3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c49dc5e..f26e875 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Include `` and call `aegis_init()` prior to doing anything else with th ## Libaegis users -* [`fizz`](https://github.com/facebookincubator/fizz) is Facebook's implementation of TLS. +* [`fizz`](https://github.com/facebookincubator/fizz) is Facebook's implementation of TLS 1.3. * [`picotls`](https://github.com/h2o/picotls) is a TLS 1.3 implementation in C, with support for the AEGIS cipher suites. * [`h2o`](https://h2o.examp1e.net) is an HTTP/{1,2,3} serverwith support for the AEGIS cipher suites. From d298690e0766b6b50d015353166d5aab5d8aec44 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 14 May 2024 12:47:01 +0200 Subject: [PATCH 101/219] Include EliMAC in the MAC bench results --- img/bench-mac.png | Bin 89653 -> 125425 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/bench-mac.png b/img/bench-mac.png index dabf5bbbf23a0274ab0821d8fc16b612eabfa09f..b05fe3e43cc273346d98cbe748f69928d6a189f8 100644 GIT binary patch literal 125425 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 z%0D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 literal 89653 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 From 90ded1316b987a609990907a209ba36e4d1946f7 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 14 May 2024 12:50:18 +0200 Subject: [PATCH 102/219] cosmetic: remove table selection --- img/bench-mac.png | Bin 125425 -> 124482 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/bench-mac.png b/img/bench-mac.png index b05fe3e43cc273346d98cbe748f69928d6a189f8..114025e1d2aa2b2c9f488896de6efc0fa447f810 100644 GIT binary patch literal 124482 zcma&O1yof}_dZT{gS65ubwRo=Akq!eeWkm*kyMbDZWKvr1f=28-64%M()mAp;(hh~ zt^ZozyIg0%WzL*AduH~2_Ves9LRs+@CK@Rk3=9mWjI^XG3=HA|3=D!13LNl_4a`usWfRRx_{QfVkZe!~1)8;1-y0(Bm~1 z1Goe*!vE(=34Q$f@9W=9erx!9^Z#?hzkB~b^!R(j-segPt8Ws- z)mwYlbmm^fqU+LV{&r)2JN-s5zHj&Ew7r$vJICSD&%17Y-LwxcTJFy0S#@jmzIlwg zINqG^v$L}4H=5le>eV~IQuuC

nNqUmPsf+Lp+mP<6h4Ng|Fy6@rsnBR6&P!q?O6 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

s7< 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%0AGD*SUB0CicY(>hOK;=otO z`m~>xvP_AXLwpm{xLFp|FLoEwSYT4}qhi9bZZfv5S#+SLZp-6tl7#m^xNXvvp{Ihm zi*3l1CLxpJpdS?tQ%2#L$Clw!Mxf}w z366^WnH>5AkLWpaADn1y#6a_48>&VfPXOXL5ywPoc5b@m&Wcc`2{*CUNW;CoHAO6d zeU?&C_h}AP0+TL8RaGHjD*Td>7|f~bEA81N7+n$of>j(;P($hE4MYm ztLvC_d!DkbaqFvY=8k!n-YbELzB@y;A3dLH=He^sQoXNs)|8%Ac3E{?4@QlGYHLd5 zoMD$F#0%$|1bq(iP(u@`pFkICyx{I9?vtlU}A25I!N$ zPamqGWNO!NuGGV{^DZ+p7`+ljoP!4pCwZa?vG|}+PPX8q*eC(=ZRk1Buh-W1fm*BxcS%H|YGCkWm-0GGd1vii-u;8kGrzEe8w z5WZMn7_#_1_=jSC{a=s#3p_IT4-RIWvHrA_QcVgmj0y)M4Hvtc{ge6t*-htnbj3^; zb_%V$tWwV2LIp1zFT(}K8fUE`x{A}&9(H@LfrBPflOww)8^$iqm)9n^vrqN(@6`fX zB?&!|lLAkRk;y^cj!$quhm#qH%IHV|nxLBXPZ!K^^gU⪻pL*vAZ-{uhz1n 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 o$e2JUrvK5wkn@Z&p4ODKq!iy8&~KenlsC;$Ke literal 125425 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 z%0D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 From 71b4e600e80366ceaf56e904b58b91607b9afb47 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 14 May 2024 12:58:44 +0200 Subject: [PATCH 103/219] Update graphs --- img/bench-encryption.png | Bin 148210 -> 183220 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/bench-encryption.png b/img/bench-encryption.png index 90e7c6b4d90d6a9ca2cf2ebf3d8ded2e692d9264..3d33ee1392ececb0360ca1fc3c90deef735ef8f3 100644 GIT binary patch literal 183220 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 literal 148210 zcmc$_Wn7ib_CLJokS-CB64*4-NJ_JbO(Tuc-E2Tox@$|95+c&wAl)F{prmwnJ(u@6 z=RWuOz4*U<=EEK~T-VHeXRS3et0r6pDvOOth6w_Jupx3%Y9J6Q8Snw2BLe@y1))3# zfv^~@Bqdd>OiVx^kNJ{hcYXNGW$!3=LfmU@1Z2~o7G(UnKJ<4eaU#f1X)y3)qCR|D zrOd~iX2Ws(tcf3~#X{{yt5rhOZueZ84Kq=9a#hPWneLO=!Xeel%&wPV*{$%Q_d&x} zhL`=x`xB65=Bh&ebv@tf4|#G)c$7m~aY-Xz+>lU6{Xa03Uj;}of!W!~;+PJN<_CBC z2~XQe#v!7(w4x@hmW(prC~LfvAg+)pYPdZYp(Ys&vmyd0s1rU`jQ+##JTi z^Y*36i+(+V$p56ZM^Ksgd1^KXO52ySc>1I=67P}*mWbX>0Ak}?^$!TJlIVICwjUo$ zbo|!)aA}U!dsg9pn2<7RX z6FI0lNKR#R+zccY?5i`zH2w)rGBLumI@_`7=$H-LVc2+0nAbF_VM=(RkQ0*}&G+U> z0#TvbXmd;j=B}0;)AhicAUgg(G1@2_)V0OuKXn&e!oy z1MmAZ@v!yL5%~JX`hu+Do~+g`hZw#sGVk!m*WjF+MXk1T>W%i<KI2*qP8yiY))4)Yf{A;oi~6?#*I3i=}L}o6u6nxZ_ZVaQ?oAvs--za`reLHNz2AVkj6FP{$9sVqsAQP+^asoZ*$9c+J~l5 z)@K{SN{>Uh6*kd@vPwDzvR$PcldC4^#mDt)A}UB1$zT&#Ri=!1fqK!FU7rIFF0CmQ zDLqVdk#Lq8DTPZ`9Ub&wFyCH&z-d|wLbs_jy_eHjr8~q0&!d3=dnFt ze}7#6{{4Gwc6A>dwBm*EGRAj&uLZ$%5@CdjxX-LxK3YohcySz2guWxiHZf)$Lg((aeF+}IKJ7s)S79Yn_a#Yzr;>uiftOUlwa{WiVg zxiU;b%WGd`Vd7Y!)`)j@*+3JDak4HSi-r*iEWu~C4=&&?9M@+pC|!~~{TpVz zGp`}1VzW24I6~Pi@k<>CRWB>T%H#C*$}OurEUYY2Z5#Sd{5K3(LK5pVlcofV%!@>A zTy~GAU5af={AxZgcr2{X+LphvI31WC;hVa!SwLN|7m^gpG6**)S$gjE#plz#>#g-| z5sn6$L#S{l8_s@AeQu~pj7k0)J$SKy0d>lt-}T7Fdv6FjO^C)jK%P(pfaH8&a3$o^k1Xcq&Si z{WkkrwAXw2>irGLHRZ|u;OHF3s6)2Vr9hKYj#E>Q$XVUl*6rcZA=Xu6eNqUe>F1gQHs?}wazt~+12WT7^p4hF;`x2@hdZ#gRmOWZUw4ZmvI3k1AMKekH1D!|b>73rk+cx~Dbj@=n{Aw@nP5tdlqg{)x$lo`oJ5 zv>PNs>o-O=w#NEc%&W6B_b_Ku<>id%!tDIMTmRVnxN0$M(XOHF#Q5}L9ecfClZsJ= zrH@g7c`R`qqWdLPDg9N6_C3-rVgWFi04XVw@RwC7(^0RRoRKD%+EbD0d#x}*8n7Dj3f4FO>(4W7W zZ#US(zEHhql3KpE(b4I}{3Y{ezAhu1Hi_+tXx|jS zC26+I(=IxD+WeSqwEMC!P}j1=zU=EFdlhqIy|5FJIhollM71wJ=XRiX=wJgQKV)CI ze-~@2ytN$E!p3XJ%X_PMQBvG(vr!{*3*L8lWM6OU5!`Bgj)sNvkt!(gB+$=0`}qD` zQZ+OU*Ndw3wtX}7+l%5CX6M@X#W$@X86hJ*)jct}@v`aZcWE(qzfab(Oh|f}V|S^H zJOiAJ`@=uL>A|@d}gYm*z*F2=6aqsc0jfpVVm@_Euj;i<)x`fY*O z9r4*4o0Xu}Qj1Cpq|xNIm+vdK94_0^Z`W=PTUb4=4>ad&a%a3&JlbAe@}2LmxpOa1 zEIZu&Jo>zCGTAGHgo1>m)*6KyDD&xqg&BhI3etB)q_;IlFBzDZA3ug5@F^Z;Yahpa zvb*F@{A{?rx z$T^jHU{Z+;^bX=5EdKKg^a|tuS@-|3Yd~@E|9Aa=y84+~EhegWJ4aPIddw??3|glH z`GcKn=neLijGPHT)L;aVa5CY&B~|!H%nBsdK{WfRbUc)4(78gpi`2cz;08@vRk2`V z*c{HT%br{{x2S;72LXW=b8}Y%r=uL@ZQ?^Ie0N0n0*88~~q9a;kBtr`bCFDXS(67fjdC8*9tLCh0Py^eoYve6# z>lUnQbPF|%qqcK=+a8CPGkaw;OW%R~^eh$Tn$;K+t@X77E^(!46_BlpSWz_O${FRV zUw7#0N!jQ}=ETohOTFg&_%)1tij-K703{)SQ+<( zy^CS~m9Y6Li&zMu`WHp~_*X8QDHHZ*zsFjJ(FeFPj@1ZohxLn<+KuQGN3! zG)$JFp`l@w)BQky?f7Q5OhI4dz+| zo|IG+JPas|HB!42+vR#43m+AYai~NWCnqOoXD!=0+-3~Gv|o#O1k=dULFXj=(3|ao z>~Uu3_|ZnS^w2RNZ}Hl=uXOddgPRM_m?Y1KIc;k>RIkJdhZ8%?h~n#3d>826wg;flR+{z`{1aDKsuPQn z?fNiXQDvo?)ccD)E5z~oOdj`<)Cjnt_pvnL%)|YyklPL;?UhIL&Dn%9Hy4+bX;&D2 z+xQ@YdS{Awm^ZReTn-yOTi<>GegIQ4!c)3dWjfTY33W zU;K+^!?(80yYNZ^~LPm%XUo|E3{&*Zi)_$nU(X3$$1x{GBqvd&i4;USIQp9w^7U9r%FT0&)TM^r=!#PeDBX^dJY#H+Lo%V2wTa- zkQqnC9=(;6uy1&^QOs6+PB(|489bU&=A&6YcUMl$hc9A<1EeL2cHaClpj{>sJHOt_ zHksiifzHg#thlfE>`s?FDWw>-(uS{Q~! z#?vRz6HRXM#Q3UMkw<%w4YSQdDkJYHo>gZEcFtMsYM}hbutmSe`yLaZ$19{IfZa7U zHM6OJT+ys?zWokbXk7J?m+BG-|05-8KJIE)DGS@yV3CKbwdX=GqF9#FdPD@cmqcn9 z5fRZRS(98eejksuX#R3KIboH~hWm>JRX2YkU0>hUn3T^pC5+XudG>3j zkb6Yq>4=b$ZHjAAX{lkGuMe%$_#j7{t=~pirtDQqqx)f2YU=hEb1?uSz>V%Qy*m5l zjTO0ry;Az+g1-eme*uyY$=FN!$Q%vFT-FhYWTp6QwbcY3=`Tkf)vr(Piv+AX zy287=>0iBiE` z!k5RuiW!ZD2Q;;up9ovM>1cw#{0PRRN>hy$xkw57#2K`sLf}L&%@*yZ59}289IdmZ z?>abL+Pfhh0by@5h8dA%Jd6%|5skc$Q4oa=Cu(iyXfe5+nl=Akr8`-BBzK~Qf!mW< zO*Etg!Q6Y%vXYX4VWy_$)PBbyyt8OQ<^7C9y>lPet42k+DZ@N|tl-E0>I}UdF;3^^ zhu))!xn0azM54<>dJex8m16clzRJHVNH~6d+IN6;g40CfdF&Rzqbh+mFair6S*6DZ z|61o&P2u9ktVo6rUw`_Zn2L`vmjQ-GSOAP^yE}RWPa~_$(HprKy?N138|D0LS=~M`p~y1VFCL3!_Xn zhf-^AO%NS-n#0!Jb~mYD>CeGs?V`4-9vo|zL)@dtYjk(E8E>lg^R$yg*`#R$Qbp@B zT?y9mWT|{64NKCSXsD}7SZ>3fi^$?T5nNb^m1v2!oD>#hby#>!RHq+V!zzei z9^}1C?kjfL4#G0A&)7b-IcQEH@+9yCowV1UP(1%pR8q3`U)bX&vn4!vUtHDZAt+As z5PTDL0ZcaQjG(nqT6szSMaMvl*XA^s>gG;6VuY?~Sm5|yUKGa+@>`qU<$3+6Jj-Vm z)5SV8P6@T}qv;AvDcH?kULD+VC?ibYbxgY5Q)DI8U65@S*gtpb^Y2LT8}=#(33R%n z33o?sMs;8_^?I0{!ntxGhe1M1a=}Y#_)X)XSkH{XOZxS1n^-gcA@Rf?;PVe=rLGam zun7UC=FGFLY(FwI*kxGX`HYbRVtMeqPwOV{STbQWx!B0CO?izh5qtktiB45dG+d&i z@U;*|Q>W5vADU+`;KDPR~$nV5z)Ve5eBuIPm9SQeHi=NgvL+Vel z8iNW_oczSVZ3;es0*Ajc?LOV%@guSBHX!wa~7lBg}O3zcg&XNBLSvaY3ED7TqL)L>#a!i)}HyE zXlVt5CRl}&+V6h*5H{rS!#wZS& zw6r~tKOjHi?B~S|j6&&=eRrI_ttLqh^5H4~HEugap=T>^#^-{P@L zstGm%Wf_#x=;Dsb7d{}N?R66o6F)O)eSGj5I{56levgDOPLJP?7SdD}xd|>VE;}AV;SMU97>e+^TCtci zV1p$Wbp84|O27&@=O0hMpW0Yk16#!!n~RljUh+ zhN`c3cUh#bJGq^momJ3JLa4)>_a3PE#RzzWmWfD<>8{#}a-8~4uNptP5|8f4Z z!N9?|t%+Gt0)^D}LKrofKi<_1!BXd;Cv!D6GgrrJO9Ed2Aw>`8vz>i=mzJLHq|zdw zQreD1R?C4R#H*0ZF1;RKvNfGc8?=nwC{3$2Ta@fRrMgj)c)Uh;yJ}`;rY(@U!fixh zN!oJM@q{LMhW}>6=S+3b9{~wCr1w;^!Vy%{!hQ<#68hIs3OK&if+g|ucBU*Zw|G_j z`YIW!&lBRkpGR#VAI$p;8ykE1xDo$_ObRu2dih&&&QuTm_uKh^&cq!d{dEQ2w83BrVtit>$9pv4gUEvNJC%t)q?p02Kn7S}tK!1*@6HdR2=q78T^2!C0Z z$>Vuq>gAbYB)NeJx5O|qJW)B9XkZdzSqO0z55;-j;pCugTkUfTQ~I4?Q6;ulF+SIl za>P#h(d+U4vSJLwrtQV_%Z<&=2y{`}f6!QD9`Ycy?U>-Cc0jwSP*gk7JM^F_#V zoPlwsX@)DqZ~gSFuI!U6uY*_k?ea|j)w{#ShZ5)&r09x#NJ6US=jSi>7ed)4NwEp> zhgxfDYZ>stiAwC;7Kjm0M#gvf@s#7)jX!jE7Roqa(soOYiH~Rm_?*x`whgU3HzRFg z%ySlmhDVFT2Tei@#FzdHo0>S|TiEtAABeWq@*wgYRuU1efWO{~^&iQxm0Ck+Y+i!Fq?>|Xp($>a`NFe zPSMP6o7m;>8IlTMZoZ}&-a6GPa`W``1Xh8!x3{nF!_iTk6FXDy!f4&X!h(5Ks&B%v zhqs@fQK828bFHGOgM)*R&d&{KpP+vNc_24}KlKjXpL!B7MnRyje;LJpdIy32|9XkS zA5Wq=u8Rga7eL`Jh|!1N>tw|gWAg7mRlq)JbGFmlt|WeBm?nDV6?Wu$r?qh=yD24} zHn!K?wfnGz*|fSItxV*v@I?X@Pg@B3XS-#4d#~J+*`Mdr)2f;l%f_}P4kZp#kngp0 zkR0gzV(p@uxl5g1VrYI;MfXKdZS(J4TY?@UWgnM=2v3kYrBEdszk>nc;^52L>AD@d*O}|QaY;Wts0SSe z?`tXaWM}kDBF{_CO9U}gz;ny9%WpC4mnqLKWV&sa1vPucW{?YZiX999Wd3iQo_eHO zdac2Bk+FLKC}4tBafun^UA-YaH-f$0?L0b2RES={J~k!Y8M(oXUQ|hi=8DO(?#ef~ z|K&8qD1D;1?DyeH=jv$2;m}nAhf%Bd^~uIyGKbMa*2aRe=P!V?IQQ@Brf!w0d)UCY zVt+mR_e*VJ*E@7>34$0IP~EFpY^Fzrzgq)ef=As2`**LWAg{GDiAtOb`ftVm-SuB@ z9YR_K`@IS$A)lZF9fvQ|3%Px*D~-1eBFoRM&RK-uG?!=h1*`b7_|Ne z-G30^UQ@yr{P6){GA&nJ+!1HL952s0+$> z^b#Ar^$PBWjBPwjt=>pof6Dg#<8SzPRg{qJMBokvHWo3y!{wI1&Aqv*oua;>A!Ix} zyifWb$E)36RdatvmBlJcNCZ?mT^;=j!6y5j`t#@8hJ0rRv;BoSG&}-=)op=7tcl6| z`WF>PxZ!5EObd&aIXhOKtsF&1&kR@5082xPmO2SN549OUC?Ig8wxe` z%hwHfgoH?dVsDb?SZ&-LVLqHDUInNR`Te7#fWgV`kBUvkYS75@;)Nsu;~EwQHj}cf z)xl!JkD!o{_kvJnqm7!gHme_hkNXFKSWLFlc%41i$(?{kGZ34cAB*(m&txMq$+g-{ z*IymM02qX@*w{DH&F|0U8zn%EuG=|00RKP~II{NkrOdSS^eAbPp*V$Qv|zAo>-+pJ zNdBWi&R(0>@4rb15cA>N)>b)r=n^S79&>ZGJCdBwR=d&^qOY&7tE+2hxV*I*Rialn z(0OsNq^F|tX;D>M+XHYsb#-+C=W@iwM1e9OgQCvseZX7A>(Z1e#b~a8k^FJ;WAKxw z^7)pdSt4r2YJ7kKhpdF*q-Jf+>>q+nJ|LV~Sz*5<2oe<)-CSZ%PXJZhFX_(3%^*fE zR;kI`pNDPs!@&bRYrV0tmi8;H2DW`rYZXI7!~Xt$P)A1x^PXv)W!=+_hyNoIA=yRs z&;E!+V#n#$Xl_o<&yHr#(+GM7E^$+(uWm z5{2TmhxV+yTcw`soH987Kf?T%SQmZEc2Wz@*kd672(TkNt<~oi(b3}-?TZ%{BN?x} zF7`;+bYBBb#Ah}W+Ub0DAdg!Qz^Kp-NY4`SlHj&q6i}$~zIL|Mt+izWmno&Z{A@Mx zg^~6Z)7(Du0busO9$H=|80h1A;i;7==mzTBDp1a5ep+j{a?$Xvj!mzYLd;kH6}R0y z4@g{GT){@8C+E_!wBOH|M)Z+BMdR z<8<`&sai2uWreiUWk$He{e85Y{uUE;4@jyNa0SLK1L*GSGzYeP{l8Jf^8- z`VFi3EKsiVFZywIi&_~P%)oRmoCQF4_Cn2%>;3R?DB{oET^mFW?g!Xf5BBZ+p<&B= zgt({lON`+e%`HBlp%hNZxwu09>)J5cgSm`nXw=2V3&3V0>N$Cy_RpPW`?2&s3eL<6 zUG29IVu7>E-1E!V>MOj@u?-3hMv8k5k$(~T2|*iht2&$i_#_VMiKXJ0Nf1dTmd2$L z)!+lLZ`Nkgnb??zjL^weK8MVU$eYNFn||G2Y;ehrgd-v$X;WDcF=f&%ZxL<4M4? zTdY^DWyt@MmlmTIO~wm5TrRPt5O4%Z-xb*#6f!Z9Gl;|AiS#FaRQa%swn2VK0^_>dQTjjq^Wdbc7HT>QsGE8?aSRNQ4Za%vJCE&MKY$ z9?NYH3?L}D~xCP0XblCrb=zZJvOq%-%l-uLp(4|lH^UG?Jq<7n9~cnm$^hThcf(`D_+ z_&Vp=Pt-e^fVi9(gc|bwKE}t>m{_W+`jiMj9x$Sd2OgBdqVI=MQq|!FyI1DL&NKo7 z^+5vtj`ug`Q$=rZ0jtuMm#gpDqnRDJU%{V&hvy71s|P}KrZgnWtmkWNlAUE_u0fNf z1`9Wz-x@Y`{_>Y$AM(#?r+5ht3JQ`VEf5RsGthZt>Ps$)dso-irb#ocHugV<#YzdV z@v*dJ0-o8s^`SK0C$C%HpF6v_Bu0z++-L(H(PWM#)Ys)AU!>7u*F}UtkG~FL{7X-tTl1*uE8Euv!~= zvk29b_lYw0id;;frA9Y+zW^aYe`HNJB%eATtc=~{>7kMSzidXhvjtcD0p}3}*i%TP zoW@cW^z!EF=Rg?Xql^S?U7#%z8V)jb_J$xgH(^>v28Ef)!`(G~#-6zZ#kKRa-k4y) z3Q<7bpu_s38R{O{qA8H!5ZD_s}Ni& zd->PS6zNkd+siFNJeBJGhUf`|_iJlwO0B2B$$xg{YPtT2=QJka1P7F=1&^LQDGvw; z=<1RJ(RV>E50(PWcP0zJD4WK3ald+FYPz1By+=Y${^XP0LM_$OJG;T8eL3@bd~ zWa`%~SgNsk)1Uaw3cvvJ@bVfoq*LE{ChSpu-Ur*CzrMMVm?$$6D|$`WLYJBzC^M}Q ziRQm&zVqWV66h7$@cuzwe+B&W@#SUgBx!@N2n);ZpgXwV;MZy2oSpoO_EdeOmzN~? z`0tinn*3&)Os1s*UPi4UeSy5?;8emH0;6l^DaJDd*dFqiACZR{j12V553E{OXd&`N z7}IDOoBS$a{2CmLi5WPMQ7#ptj<0h*yZ#tQ%Q~oR5cgpw_4537>$E}b+rs|*Q=|{y zZ>k)i7a}4e7&P_{4s3&JdJXHQbw0a6o;lBJul`%ukG3<M z?R&Yc(`&UtQz{BCFRuj(LInnRt8Dhw(D1Ml4_PL(pmF+P0w-8PG<#IE!#vGAcdR_L zFn?k@b0crcnmD%CPgEG4Z5LC60j}DVFl-)-*V^0b*E)JZzWlUorl`&(LW*|RIQ2ot zxMJ3nYYg}J{$&)jAh)`B<#cK)(LhRFui}YyG7~s8M(b1OE*_xW{JXTW_zXZOV7VDm z>`8z%X3JMJwc{bImHjMQrbgF}Tgm9KSffxww_W;%gVXvM&4;6 zT$B-v@0>#vDc$)JFlSK%Ka2xOT0wY}u>~``#~(AKvK8GOX*kbWdRIbX|1O6N*`4-h z(3}h@eKMwe5!{38>jo7@MFzOr{)>1y4`E6#W{TL~SS|33Sl>9IGGJBwr!;k1R08TG zFlZe(dCcXJ+zr{Uu)U@u&LH=7n$py!l=^T3qlVaW6 zKLBwpM*-W>wXOb)R`-NJPCPV+&i}T0!~~{RwGT~DQ-jh5)fZ<}*9gl^95?10b^YTd zHPH<^oF-M^4XwrAM?t46=sgu+_5Y_NUstbw$&h*#j_2&nVt=nJsGo6k{C6=}pNO~} zhc5~2$@Cdr9FX#UppNLg@^Ox54NGicsy@f#yQtM&CtKA)Rg(iB9<^rY-3v_4iSZ4iK29XHqq*gXH6pd1Q=4sjkN-$j>~*X)$Z5W*jhApx#QA~!+G5*9q0?Zn#&Oy(bpNm z8V2_U*W1S{po?dJYMWY#fP=!|wqyY$`gT(!)-0&RQ|;~n57TZee@1+tUB_L&B=r=eFPntqkNa_$QRQoZVwoKJ=7Np6Q2rHEys3N-XQ5HexUW9@w*a zY~Xut?yeRVrp1rngx^~2yDv-id;$b8{P~+2=wI8FBzZM|=p|pNvwosZS*lk9w0fCo z`p8{5D&^Q3t0iMc1FeKixC6BD`>RXf;VFvZ56kwFB+2!6-wy0% z84NJ4sIRG!mck5{$X9D=zEfjPMA{k~8&iCqugFl<*eEY`dwY8?`f*~rxuHQvM~5b7 zVq!vi^0Q0BB6$^@VI^bJ5LFC_Isr)>e=0s~nv<&){wA7loqKd$ke|6GRdXYwqjh2q z@VC}NOq8*>ITVTV-I8R{J->d@;AduLR(!XvAs8#DsWIj1mjnP~NPNb73mGmw{Q;^k)dFA53@wze!HyAwvY zJjsAVZXb4;e0~35T{AFY$(R1i@hVi;jw|(M-mnZv#4*!hCy8VYlcK#xDSQ8V%u=Il zMod)HnujcVbjH5UGsvN?j?Uu+6!1bx(LvOTrdIK9>Nsal_^xVJ{Mx`dYilNypLI(T zzFYEexqMcMGi&gJ*XTyee$`;E{G`FmdAhmDfNxc!ODUU>C;qLbUcf5L!Kq6BZ?OPa zms@{aM=?tB^6}kaln!Bd4x=}bTjCJkm&*P|t9?7ECoB~e6_t2wtjL@;T}ISW^b1ee zb&#JtcFgObmr}!OVe?EEwC)^-oPkjDcw_?f1|#}a3X47A43{jI6NPa|!0TrIkBSV( zQ8KyW;Jr&P`?z1o$qSmSBy(()-C@FpxX`|>(>Ys`*G)^XMd-XOpFVcytC@BiSZ1GT zjqb2{Ra=C4)wVVa@L_|-w|O$TNwGft%p<@*f8SQU>ncFeXUan+&Y7whW+_bBv}6w| z)QC{Lf}G=a8@#$mpXChxcTpoUn`u}Z_q4I#(V^& zshbs+a8x)(65hKOE|cr-E(Rn+2~dO>3ufwW+Rzao{5-w(u=@SbN*UYx`DYC^*S4#m z%HpywN1}YN1Pu|U_`5j>g;3=jq(U33_^vy7a6^E+`^~eSH=vCBIs3XZtSn{cYB))x zblb|-N5V{X_GE-b?<0giZ2cYiAa*gb zl3yVlvFe_B+#B=6mSlEba;!BX(rUxu( zOr`C*%-bc5>#m-LT)$;*eKpf(YonIZ`9Y<|9I|TXXmqYrF+^e*&0*9VOeu}VEZn&J`e$Z zoh_{T2cqbCp|THvHVG}a-pVtsIMK)!_M(ei7SPvKT_%^7*pjZVJ%{-S2KV;%vVF_* zWBPl|J3HInVOtC!fBp6i(+bw9-W9;mR9MKQK}T~uFL3e=Dp5$3wwbX9G;}=CH8FWX zHg|*_iSAgU+A;ZffA6#Q>*z@3fQf@cHVBUKvo@%cKB=MM)f!`c=EtK9jg9-$=l{m^ z7d)Tjn4!zh8{$PVS6pq{nNqFqf51@)3rb6&h?Z^ys2LDO%e@YBvAL_yV`Hj>pYrqR zyP%D&tq1%2#JDM!RFN_@6KrxjWgo+u?;gzLRMp(vYP3T_Lf*1H>n5BEA`w1M$V}8y zSARiksmYDgwh+w2Ncj5p9FLlwgwz5J4Xx+ca@hXWU31bKN6`Pkf)Q{GT6zBX_M#e& zuIftLD#+2@Eqy#9uoKJ2$M^Qk6$TR&!gw*&b#ky&WBsqm>m2?*um%#I@t9n#jaWW2y!Q+Adbc5-gG@}&Wlx}+NnHSgMf zLc;rED@X;`%DRU z7lQ=m7Z#*V9UYIv!w5poytw_}68Kcc?G(#aT}!ny~-KUmtxC7k)i?CH+5H-I9oI+qY_V4UdZ4tk|f? z&y=DJ|L_3;yQoKi&tjmurY0PvM!^sbjqpA>DQR-0p{YsF$mpp8SL&oPQG~k`@{+Zz ztZaScNae)EM^DPg^5y_5AnpGVH_S zXpg=_NdJlbS@-auGnDGZT-s6!uy$Z^AL)`D6ckJQ+{T+Kr8kiv{Rzkl*Qq3PAo`BU_)jwY`0hv6&gYcILV*^)Oq6t_Fqj%JTAq zw-Cmmd}ZLAT~9*)UGMUjJoiefGNM%~?4 zhRymZBg`rLI}>zBd`QeZLJJ|&x(1V#eSCs4d6#>hS=?jQ_6(|>zh0sV^?wmGow?7! z0bu?cuj!8;dsUzhVxwa%V4#OIL^)VtwM${P5D7+V}7;yuqhXZYDbOA**7&;KG)m5|QY0pfd@Ubw{wCwKvM{lG* zjQDHFyWi9C{q}Qqw0)P5H{SLYJLPbdW1dt+qDedB9alkS9b=!$ls$8fj75*{|KVU~ z!9XB0E-P-=yfOH51`+ZH=bG&7$I0Dj`?`hQbD7+D<7S;yT);_LmYwzFUrYza%C>v8 z;C$kvBC(mQMJj|rqp`k|hxHFiTP!#;n7#uOOGx!?nS$dpgYcN&yCt-Ea@pTe{CAp3 zXfT2~NLWobRN}X~CU_}}E6)4BzP0Qi2sqk$HW$) z9wi3Uj+frqEpn`?j_AyEmICMmW}jx$$n(}oiOwc@EY+zA^0^R8P~MHr3zspTJgT-D zo6d1(TVVMBnMf0{3bLK{%a`w_e$m#3EP>W%GtYKe!b8^ha%XQ4-xfyc$<7jHm@R+$ zAkv=ocBv8$Du+|l;ptTn>xHpJHaNP1TdbFMpp`2TY(f~Xdpqs-@(%2uFGV%9#1FjI zIbg%}LhPE(qHYVmOUgtphf^yN=~V>JUU1Z+V$6M-X44mXHP{6_@y}eB^XD0BJckh! z>s3sNBkgM0Zq)73f%fQ>Z6z?-|1=|B7#iVPf;7VSFydAQ9OfXPS%})Rir{vVT`e6P zpn<~S$q`YV8%yn9?PL+PDYIsI_E7m7iv@Q{j9J^F9!OzJ9(Zk= z$UoprN>&N(bD(K610yuTf6B!%Fh75{^arFKfF`&~(bq=#Eg0b~_!Yrh>cK`{9%KVb z5vIWsJ+FW&ETChc*;}wDsv0H^l8*i0Qj+AhWgD?xpToarun~QNs^++RQ8GwQQsq`u zgfo`)sR-(8^QYYrk$aC-&Pk6`Q6Q?Zjq*`+&`UW><+zoOM&MyS;PISP+TCi}sH1tH zd3bg61BiS1KD)7Z&Hriqq{3`PuTG-9)dGyLmsg!hG%o$7F(_9#TlAjm%#D_mjB7Ta zpnKYpb1+adRG`+V5e_mH*t;0ry^p(5{=<0=$?T2Ku0(pm!%(%PD&aj0V2X^MvupRo z4WVM{x*LiZR}SwGiJc5d@-w`T0KyVyr_+~2bwv8M$F@Z=*nq%jcS+j<4CL|=+Fn++ zd`8f~JpLO9J+xu@@HfiKZeR;{+b!*UBaC2YHFp3b^wkP&9~Z`*W&eBrsFkx2RK2%L z7j3MUS!6{cLjHSnpY+nc6h6%E!(y2x-JVO#+VXAb?OooEZa525;)Zt4+147CDHlv! zM|A!w*JhQ;9eevSMUmkz*KF2{%~Ma!KY0?NE!?<;)^@p9%r))fsOe~fJT>8!$FaZF z@U5=njV6qgNHmU?4rT7~u|r72)9`0(sXKB$V3PF>&=yCbGI3)J2N0x#t-2B-a(uFH zTgwkcJC_9XN6#r{VkIeH3vMHxbN1ddo>}J}-=Psjr_+PyXdB{xl;NA@lF>an`@vKN zY0IhOtnW2uLBeH#?i6GRqgeJNJ3I_1_=9GjArRn zS@2qoBfnNujA}0Z>~XRV0kRwsf~s*L5J>;PK-w!8^S5uQ{lmi03so!UA!%QHKPRV(ni}i~AW(Y$1eol~!VJto<}ZR8 zmW`V8Yk9s54Ece2p0JyAAyTHN>sAeyGs*k*Z3npR0hm54Z%P%FltkQiJ|2v?4U-G{ zJ=_8L3SHhz%*;2}rv<-afVe+!*@giO&KCAOS!!~p^#zhKfPm9!5D;B7X!aOO)1)f^ za!WX*X<)IW>>Q86Sy;(4>{pRfBk=$I+Y;Q188I}Z2o~x` zf-kKuiWZ&*{>$W$%w8b3cc^cn(bv=RJZjufbF{Mp$D@W`3GC0;1fm$Mxja7jbanuX zGSfI*5VrUGqu<%hxlJKW0E!jMLYtqMKaegUU!OI#zP_!!-{3pT62@W%>3@N0 zk<6Zg0JcUtPlMa~Ji+GeokFTnWe4z|LToN7CHFYD?Qt_;53rdoPUW*p8zGN~j^8jk$V9ybhyXzf5z5KQ1<7s3t4q~2Lkc4j2$&1%^S>yigJxU2>OAv++eRP) zLP8c6mW?p)AWoAW(C_Jz^r#Omk$%|M{QFwizAmV}y}dDWA4o(2?wX*MJO1jR67x+7mgC~Y z{vL!uh!tEf2BMqLC0kWw;`G_ur*p~#ogFMK-0>zo&E&Nq@fQz7ZK#9iTFV8UT z-azuz^e}Xt^MEsh-+s}t7QQMHm#J|}L~x7tua%lFS_DslcQ_0-uoY~y*U(qPh27fB zs>o^Fr0+g?0qN#I8p(LQq=dw$A2o83By5N;9e+?`^e?v>P%b=r=lDy=oJ8g#cLVq1 za{!XgYk>Q&Rj$yG<(O1tdPrW`hj`C43PKXH8ZUq2bdyc-YzgkNadD|F>)G2M9JX2f zCZiVO zL$`bY4Jh)HHOw}On33)L_m2ypb)y!nef0k4Xd}uagR1)l=Wi8|8H;rz-mMb4jMv8&fCb z%y6Bh+d&8oOoeZ*GGHOOAuWl+Ui2x8cXJ6oRZ$V->WUYgbA$4)<56T}&gww>6Zr2u ze*S#2+;q?)@#4j|x3?KYMW<|x=j&Y105y4AJb0!8`BwBr?erD%KMjjHFMuD$7BbV| z=%%#o#Fk8j39aWN!>5E5i zI*v$-7qMmXT1N zU}PP#rp>;8QAZQ_`0?WipSG@U-Xn&ko)}L5jDiAXtR{1$BEQ|LBGu+Pwb>)XRqUM65p#EIG*qXX*XOijF3o1Y|w(ckDX{|N0S>5y@=szMR z0~t_cO|w(~Bt!$N3iq3RZS# zoRX}!%u3{Rc`9G~lmTP_!fPqi40m=#_oNkS<4D)dPCTzy_e%T^2zVr~-fYrPkF1rp zl+D%%Dt_S#n1ui28co6M+k9pV$^-8u_D(M5I`?culHs{Kzc~2*%%^<65`?X#4ufA` z^Bt$eigW9TwLD@s+)1=gf6ZHtM03*kcE-$^y8S(Kujdae6(ESxU-eU#duw4lgicXK zVgkQ0Upnr7xB!^5X;R15c?-^Q&3EzS=8H;06Dg3}5kbPl)Q}43>xVSa?$$T3)p!o3 zD(N`5e8ZADj!WN{)w#=4c@Lpu`+pd!EG4=}PN(`G4E1JnNA{tBamj6;_VFu8E<)}5 ziKSQLDVPk4C5UIwG8khHs{9;#4@;~VD@UhbJ$A7HkI(_`w5>%>!k#LW%JIk8LcIZg z5_N#Ogdio*4gZCuP&{}CL#1Ip3HtqBn%IC38mq7GAzW^WhQ{tfQQLkM6wzT2sOZ2Xy%p`kfL4O-Mk8Df~ULp59#oaY# zoNrKPF1?ce7B)yhl=@kzl>(s5<^Xl%QhLQ>aRVY#J-FOc^oP#c5APvLBv|LI@oUio zCsMw9C_mDBCUY}Kj+wW1;NFwr^oUlgy^~VtBI8Z!qiq+?F{qXm``}kdz|zfKRHb4Y z2&mca&q-(I6a2>90eOnWLIYIIMvya)+~4c8Zq|z9VBt7I{q#{FFM$FGx#hu!js2(> zlpP09>bLKLa_n&S7MVU?p-bEDYstvoma~_+i*Kpx%@&yE<71{H+^o{pEhSAVOH1mh z?42pHb$_*fp83wi@-yzyl zh4I)k$)-8FEjSazy$A$`4Po;8`}>0f19bHC znt9)CMD#vS!Omlj#zg;VDC`O}w8w7z_n)1^*QCN1vENwW-efEZ%E535vAW5~{)rrO z>L6#UL+xBh2yTM0kx}c)!6l2nzJ8pp#G^-f&LXto<_IP_9s4MFE((QuL!8u~PS%R*yx|+&dZgp|7DU{xR?5*SPU5HUk z&_VA{Fy8ckbj}k}Fr(LKshJMFA|_F8(1+qdA~?!`%N9oR=`jNXb+!hK8^={q;Mx~- z>Qg}Z`mw(s(zR53$r-5_*aeskk+Q%yLT(H2Hf$fR9-T!Sz*SY{jGdiPb5@)wHX>X% zh5Wj`tccogL&XWjH#e2K-Va*XO>y}Wc0t#X+CR_py9^(iP=uGzsg$rM>2FaQp({Jv z*GhD48%o90S`Bf8wDrpw(?zWku1NbU!lIe@-sJq4{$t~|Kf3QcF;jao{cg_P>BrbB z7fIOexa;^uL*ch$$%err74$2uZ%9&$Vaw{G!cX`dy)p|pWk}ht<-ijHjg|rgzzE=5 zfDY)cy~{R00Rr@a+%Ic@I3d$|zOFRm6uhoe<)%8tFMuzDyqIQmJxB>8@SD;}d02#l z!21Xt?D6EwBiTw^qA#j!7@-m2w4yDHtRXF_7_W0eb%mH2S2_Z|dq>#3zw$li*)D0wXngbnp6;AYHp4+#$e-X~xFwKHK#tNK}jx4fW$3k@K$a_^sN^=C0z z9DBrb-H_|*Ga2cOFxl*-UR@EehE)oH*xB!W=_;BCktkZFLx z>kfmk@I=N>Wq{xC(?Do^oOGIDqgU(He|Nbv=XvkTnmHH?0z<1V0H%LF64!97sigl0 z!Q-&=(l9M>^mRGqH z7+n5xVB7!*^G74?A=>wNG%=cpSwb|*O;pghlrz$i>x*?{3bBWWhu$O~eb8&bNDm)$ z4_to$ZYZXG@y)tflZ-hw!lIoyi;F*_6Wq@Z{XEDC3x;^=HU?93vtuwyt`=sH4^yIP z`ejK?Wz-Hl*}zDFM^)v%(yFZ=jtIJD3 z+xL8(2e=1=`kucuMM0ol$p#?$#}$wxpaW^(g8nsDsM&!5BDz>MVb(NKmR6@yLk5@+zDsr^nj#$D_KHrjh*=uPx>UnR9n8l30rG)aRdh z*SNc#AB=!hIchN|Nk5s34JpCrxOlaXn1W>pygxh4Mk!WW&AnBB-u0uNtWuML17o_x zz=zDZ$qQX_z{I5B-l2+o^tXGBe>{jF@X0W$n$WvcXsjy9Z7%d7Ex#;5HwW@8~NnRCuxi0&6+GXo&AAg%t*__^<{u+$f zbmzQy*D;slQyJ+8R?!MtX{ zu03G4c^Kc3OpSkE=oNxi1fyL*@8{_qLONem`N5~E!bY`}QLu6>Ed~KDbKBIbll=wZ zfCn$$PFJvdIsKT?4Fs^9;VDppy@ZsQohmLokt2Wb$^spRLfVlmRFLkI%l*^RRO<7u z%j9<}AwQo$PswcLmH9} z;4Fx&JBEN_OpDEVJllR_GHV9xw;)M`-?_<~Y0j<7yC^Rz0#B9fr@T*F;8f;qF;z$P z`0Q{EBSO@scKMOtX&oJI)?%7%hfjr<25v3ceq*uH{5a#k6Pn6h1&Z?$nDoJFxZ~E+ z_c0m8Vc2#D%W{`eb^LZf$Su+lde&KyntQeT(=%S^ho|Qoc%kz?En22RL?tD);9E>D z@l&H#tEH(7;L`KZVN)&j!I8ym6>nV^eK^pLB#SxrT;oZOqRdB4q|Bcg+eCz{E@G>4 zAI!Rkkg%t|x_0d&7M6@}SN0g33#H=62;kHmg|Rd;!Y-Bm?YI}`HQW@5@DXz8STgQQ z#7i(knW#ePrRdNC+)rVr)ZQ^NdLQZYh|wR~EI#I6SubP4XOMc^Hbu+Y?yal~GEM~y zU~yjQQmxyAc-%U(yELf6xBz894+R=`HhV7JGR$zW4R~B%P6d0@fO6kbii2N^D@d8F zO`WaY*Xh!g7QwsS3EnJkOxi+Dw3oFG=HmraXgr}S!~UxM`GRIcUcZw?qpYE8v72z# z1Cqb1y8d}yb}@H9M=vKT~RShnDuJ^d8uiRMpz+J^y&10luG~WH3k-Vtk7H+*}Q1t-E|b z{PkHrmn4!^<-xnelh!~%U%!=3@vC1s zl$IhPd``R1_gzZudlW~0WX&4J)pbaU94x>6yTZkJB#i5jp};Ow^9)L(wU1EY3cfV~ z7PwQ%B@R@Y?~Eb#dDN{treF<5tJ3uZ^K9M^$Ql>=${0I=4&n+L+$xS1uWh76^yg+r z-dnlD-UBxb@9Q(uX>KO7pcTJ6TlBf!_15NWb$J4>#+@{f2lo_d5WNm0Cbiz5K@o-n zrJrVVV0k_ta{?OBUC{YXUls``N_!Lq-^E*QZf`h8*}^&I=dYZw{sZ zY{qPid+V$LTPDMKLe48Jdb2HMKe#H(DDJm zAsBP_8gmPPQPTpg&mBU7U=*kyAb>%x2*41ns_Kj1Z7w`Y#KNpX21kLwk)R1k)QobG zw@`qo7&$=jU?3Ot!%W|)T@Yt0ch8N!6bMdthtg$$5XR@e4PFk|+vIJ2`c0$$AZ+@k zrlu;o`*y(tUI&PZib|X?Oig@!#@V`k+f*ZOTJOG<8`ZE2 zNq-$OkIHjH6iEu|I)2@VOMz%$R4R1lXR?-#O#r>+Z)OSQu(8ZeQa{^ju$TY}tS&zR@t`*_TGxyn-+LfJk+NCz`jeJpn#C-6?B4Q+dbr|l zoXf-)b)RhbHACyq*;>aP^6wTC`8w7hPux6#PDt}OhC{a^j0-cO`qFc%_5+z<29SNo z6acU4*^Zo&iqe@y$G{0jr&k}p=@=NXn6X>*lxhqaHa#uToW<7k-7VsIYqC6bbyYga z_d)}tzWL{r0$%g+WBO0e1XWK)4i($Vf%mZrB_4T+)wyzeCuCuVjpi52YEXT zn>&p=u2-G(S^n6PP1TgevdErO?beSH?fmu(<>joSh5F)0sG9;Ma85ja=JJ@3n%Asq zMcb2pMOzCBZ_zP*NJ$#fzKQ?s1viZN+W4RhvC>8_eEkn%eR$Iw#2-;#C0@@SYA5>+ z>2i^$z&EzGHda<5T0q9)PcVFc~b`lU9c4*u{fee&}sL;I0#wssWbJP@;(GDT?Z;?<>7MvW8t66P`W>; z{fMeta< z#8yzSzh&J#Gh634rQ%6%f9v{i{EaZ0!82$Ok_*K|7`W}`C;)AGk#i?Z6n!0Y1zi4d zvT^kq_xoPN{FAl4#29QHF%QHARlDngw5Qu>LvPc>ik5Tug7l$1mHJG z*z6Qga7@{6|({;D;LlN`S|0oqICVjc9ESaob zdS{x(`Nm*hk$pHNjo<#!98C56B2fIMDJZ_nwq z`YETQWjgDP`VIbpJDohC?Oe{<4PUF|+l!s)@j`_Qhp*X~cO}2}#JvDBI86*E7IQ{c zL4gu=vQZeq-N9{bz+K)b2nB5MK%_^x^9e_otO0FDgiww>4XWI(zlHpjPs(TrBu0l} zN`9C0cIiFo3(P|9ALMlyu*7J_RdVlVWn&hU*sC&7lK@N-PeKe2$PsCPf!%=AzDuXV zEsHL@xoH8+XLPB?x_dQ_sy}tHjNWo?LhS z`Fs=Utm8#?oG_EgMB!I4yjc>hv4n-1n{MmNB|Djy5q90&%cf+(}t=fGG6tIxcpc0Lg6y0$933L8>25&i~hV!ggsFrFHyqpzkjEH zAvO)ZaBs}u%aRu`*TAis;$E3>9?tSSJo@)T*ba+bV9%V!`{Vau1O8xt3)Siu9`z+~yB2>EtvY1I$s0+^Y zDT@xx!^=xIP;mxz=lAd5J35ZN{kF{86La_j4P-h{IAd=G>2jQ1vo*Hzg4>s;rgRN^ zpMn)F15h5##>Ze&`3k(`{|h7tWV+ja)0Hgo&+l$WMv&&g*D-!0HZL9z7 zqY0l56O^1RuFC}IB_%{k^x&VqjU&KuzJA#Lgb_k|*Uzrn4Om)%WCJlsw5&*i1I14-%KpW2|d@j_8CFp!j-{OjN{NF%Jnyum;*Ov3uRtUb@g zAN{Qw{7Y6Y7Y|}5{ETQRbg4jgK}7&f02HF{%}9r+nVXxZ8D;`JWU><&CV+->KFrj+c&n$Z8!q7h0jZGb!P&i z0aII+M1g+eD_Jq;J&==lqpqQm5%9gialRvj;sH5Pmao=pfO&>oy zEAF_%*NuazxSrPLV}JxAeM?)>&@kil;DNQ~I%u#t|7hDSgJh86px4CutYwz3ZTPWh z=lgdpB3qzja2^4nb@V#GyfXfHMAl-C=eUQGPs<&)G>8%;T*?kjfCX;G$B)?puya2x zZSCblfCc9p-19G+l2ZZ!9U!lXR@|x2;h{>hh`Ni{gIE!#fuCcLkd=*Jg zOIQkNMZZ-yI*-6nz~4gCKjiUqWtWF*(!D-EXGh>n=&+|xi6gZOpBNb#0X{L&&!Esy z(*8Wn+~f!NSa_6anU9M=P3=@XQ$CEiUo}CBols8BYFJk8SF)7nHOTk0wzjs*7^KfQ zK+m*nBWOi6Wc7-yf&7N(eoOr{>K&8`jH~DQF*|_>uw|&UoVlm3F>h@8M^hFQ5~Bke zx9?^p&(iiayJM`<)REU^fJj`_`or+|%SJ4suPjQji^D)KSzcalJ0{*1{eYU%__NLl z{V+p9HrLm$UuBKK1K*@PoJI(nVNgM-mizBN@cb{K_N+9SzISS0CUNt!g(?S7YG2Vw zykFEey8Hlp{j`={QSO=MS>nM{M4U75E2wb6jnR* zqj3t~Ke8L$a=vbgF0XYlKJfLn%5605I8iLbSxPkWc}3Y1jd)p5%_0h~w%-Uhdl(YX z`3ncp%&JK@-{_h8=@SDJD8)?_>nnI7d)J7Gj-5C|W>D5E6|WcfZumlPcOjT*-ih$H zAL;-1?YVH{+VJO^hUsG#d?JiWY1@Oe^gxtr46<gn%%$x3~8s zv1{hU+Y0IVpBN{G(n-2~;R>gh;-N;(Ou+g09e94+y{YVO(XFBHX@ClyXh$kwMYXOG z5oM*mHe&BjmkE&N2l;)F6EYCOe?@4hki$rm&Or-k#>{lD6Rzs6O-UIU&wY1eJP)zw zkuFPJmI*}FfHgYfDZj|rv3-C7KtODe@pKN>-9I0?4LEiSd{y4hAJtv>)6BCU+@u3 zr%C%nw*yPOw$_s$jg27tQudI5x??T*7Q3pm#=Q|(za^E~`TzHd+_ZN1kl|y%+;yjc z@ZmQfY*o0G6+p}FEtN<$4v5M~jUx@Mkn6D-QG&4b=fhS3%i1}5&`8P`J>N-FtIMk< zMNXeyr)L2dw_p=s*eDivY+jP1BJk6d=Vc9qT1%YWTF44GpfNHs4tU}kev!mtdJERsD$e_FCAV+4+raiBvqZ85r=U)2O`r581-sYK06W3=m zS6z^voNFj;XlTeDfvK3*VemXU`{nGRtMHdR_P2hj>h3gz$-dTXuOuGShyp7=#U1}% z<8xH)si8h-xbOC9ijP{g_5j*7|P@Ox6~=Fw2lX3EC1p zXU&{n?@yI??wW-J2WwDEkPLIZsOXYNmYQ6QJw!zViNhNM9fwQ`9DAD%NkqNtw?ixg zwqXg+Yd!OyZ5f%Fau6OKf;m_Rq$R8}<+}j)Td1y7<2Adv4dNeu$A6YY=xxrmW(Q*6 zV{xOpP-<2Fa$`T5D~qFaE@uopY@goL#v%yHR1yVXvQbE+ZFNS*6M?`pwvacyu`WWj zWaosnfNrKF3v4QYds^RMFMpKMb35og6+HaaaqVXChajU{@{P1Tbskqc>ff7 zK;fU?@+n>JI#R}(!RRUo!BRUVOKhjaB4PO4qU4bJK7+Y@r5HXokYNM^V zPczvk=`{|tk=|i`Vc!VT0-skg2nG8Iy$JMX@+K!Htr)Jik^XLh1>x|$lJsZv?G4ad zAMB5?hiko?aq)Km1;cA|*ZNnCvJm3PcUl?I{U&2y%>8oAyNyQ#`juwhON6%@a&$(% zXnlBo)evg#d#~Mam>QaA0NZkS5hftUtohlly1+xdp02n=VO=urS8}!9o?X22L(0qZ zt8B?tmNU0k6OIXSd2jajrHF%kIqIS){TZ##=iP)$BQN{tiWRUA&UTKBrEkA2E{5}Q zO$?~M{##(YDgB-1!I=(im;reOh7`eh)oF#I!NdCD^r3tz*}7+~0Kc}ub*_pmX2?}f>)7)ONKu_A*6oNMRW4Q=f@EQF98XIIDEGe0UPcJkz< zC|>i6ce|LQ9I0*!w0}!%9!wDw&s-h`Cw&R82ldQ92`1%d>qkILo8*wA#`YzB`sghA zrR!_QD0Q(}on7}qM!dhp-M_!>x6*RC=i>EaejGqdIvu6F#PuiXz$sr?#a@KggpY~} zl80(3l^cjeyp?iIYTaCP7y=-l&5vD(X|eQ~$N%-f^^PdJ1Q3n+^KRJC@B#~6uij-y zZ~De-5fL3->l+uZf1cRXX(XSz?5&o^@UHwCg)K3fgfl71XB%=66N~%bHeTvPgv-)N z#Mau9I)|~UcvuA?(V8@XS%9O>`}ZyXxm2g>D&PPy5tbBQW=!Fu%~C?Uah-fJ@%V`z z@4XGHcW2XLk|0dRM?@TBPXeKS`b3U8Yu1NZZ8VWn z&5)WFmy|u6*|?LkeEq`jo`9wV;L=!|j&l*772YTx(#j2louaflR>;S>ds}O6TZ)$; zqu02AI%4vM9U;A?IOCDUwTw92nT}VNH){LvLN{&X-8c zBAM=BSgwJ>0nkQ3YbyLk?RK>95==|_KI_E#X7#97Z3x`2X%1$yJ?V6J&$us-*)rWh zYo5}}&+%Ug#3nqdr|A(p7a@l3Yv>e70b(|dD-IAt{*^1p$b9l1jjc@Mrip%b=Y#j< z_>C0dHT2Qo43&h{oG_z`FQW>(h~*MDyhdUb_31`b;Y6IZ2zQ7Pe#nsKvu^$yF(SYE)cIucyElb+We%oIqplkac;~1 z@I_Ys;fthmPs02Ke&D42OLrN1<2Ut)7=8Q{!(7vzf#x9Z!^a~DSOIUBJGl>TI zTH8<0xa^&Yz3$Z_d&nHWr!hSEL#}_>v|NsSjF|SWtjOke@EN&bbGSNd_>|RY7(8e= zbq_8Mx?h7d%Rj>9BAhOhusOOKFQM`JS%b_N#|q(*Zlh>aJ%|Zcn;(j;G%G4J5LRIR zjY(P|xQoTmwwJ}hFF8yv6;77)&-b$VY__|wo{0g1%x}yOw+aB`rU`y7xa(vwd7w_f z(r}92?o5Ufh^(x*9ir>3vACn{9Ca0Yqgy$la(Z|6mHMFFbMtf$9>vPhJGX}Z;g;nO zoS&5nb1?7?#~)c(#qeSQdPu`*dWR|WW2Lm&yHB5hs-mSN$&~7*`@~9+Z^y=d)k?Hc zNS&VULaM~OYrr!PJx75@r-=qM0@&#BnsO9GS7m(X7jOe02sl7UB=tMhzSK6Zoonzc zf6jHdf9Cet^MO=s?kGEF6r}s@x8N0E2BXS~yxf2EBkRj?t;=nmhEwSd;axC0#~p`j zkPcunE#7q@=NHGR8d$QSOrEk3(tY#$;>t{b8n0ned^DadPT(&6?ovIp3Jv1jPI=F=O&CXC6eLEXrl&wfMiCnHE|mH< z3LCo{KQYny>xh1h<s}Tx z+WWmdwgbF-x08ax!u(7+La9L700ff75zi9VaFH(_!XS}GVk|JEp(G)Gz5Z6fTE zp~N*=&6#DkB<*Ju*j30+8oKo^#Ueep1q}4 zK*Z3~0d!zjz(4OMb8uz0O7+qhT0NOiD<1kww=w*Cu6U4*RrS9-!gnqEr!{MdfJfK^ zYfGwf+!=q+cqwBc9>oM4hJORZ^31eis@AzUR1}yz0%$ij@gAJo06IdpKosl(AgJQt z-~jf7_P=*^-!Ow%3^;!`Tqyg)bX@|m<;9(L?_J4FF)k^fy{Ir_472MA2SpEbY_of6 z&z`XeOSzrCmQVooi?6P$x}n&=odW%vY!LcS!k-`^U$ZIB zEPsiUSXCvG&CbrgHT{j#3q;Tg3Z07VFjnu5C}eVG706+vN0!gaHl2(9+8AP#Nz(<1KBF&i6`zi^1EDs;v^Kt{a$tqrXT`6pVk;l-_dBC!^ z*Q=!DAv=rkBL=9P`vULtqJUB`?XPbb*fQi&+#9)Tz6gb)o8FDLf7%y~44gRH9^*6v zVdNK!I?q4X5&enipW@$UN0L7@5{&vR^2TUmAZ19e#sOxPlaq4`uzDleWPALR+xB0; ziN|ofu%EA^rYS>A29j|YAQ0JS5sEJ}5Fia~95ll9{1Y0Dq*rmo0}Bw|!p%QRd0Ne_ z?Cjv)ag${|3KZ|2=Kr(4?aOttZ|pu^EdGlfN@UghZsoWCOJ#{j zYQFYBH90xC9)H^6*o1^LXQJ}2OCawTMk9;`;%o#_V>F1ZX`AT1y|ZxOE%B>C@Xr$L zPhxnLyHz=iiu4-^Xb!zuVqnTJ;u+&Q9dF|&W3r?t&NWEAh>Gjh^8$UEozWE8JNO&1 z*3CGo5MyS>3C!hKyr*ZMC%D%j%P)a7sr+&P1P4Jd9Uvc7y><;sdrz1R#zxdwF)H6( z3m-n#RC;u-Z*B{1puXfpn>C#bdm_RmZ}oH+2fq41hgyLsf4&QlHiKI&iic z&`tfdqv1|nh$A(;hOimnUYgZt*l<*0ThN3veTxGWbru#VSQ_x*S=rg$Xb1aEEci4+ z6&;Gg33jV(K_vPy$h&v%MwwZlP8IgC%JqIbAi z2%qGIf5ZT@@q}spK9QNS_#_ync29`80@HEVAM`A9=crj%o;3 z)8{ANEw-mZJqlDoAPum)v2mvD$|>xZZ{I7wJwm1N+-hamDz)w2(K3X zxp`w_&K>pPhODz6JwVL;;ZVPzMc z3KqV_0Nn{`VCD!_cT?`DECB~0R70WAJBc9m*zo?~iQD64%59*mL!;P(z`C%8z*Ye= z_tT~jY5VQ(?C+Gp?2{5_s);%KDp2ow!j}!|N8G%etgKjG0z-3kE}G`6wZM)K4Y)J2 z%(GQ1a9B*1peKS2IWZQQF^eM_ZdbEq2myPI&IF)(ruX_-H;bZH1C$)2rCsI@t*LC| z5j`;9OE#xJ=bQpz)IxZ;xFj#T6_^9Qq5nKNiPM8HS1Bip5P6AymjWx@Dx(<)4va8a z)ty3{J742J+-SQkXny!i6h>f()E4LDg54@#6MW2XHpDPG!Rr3@3mq>#yNZE9`mZbv zWAGBAqoWTQUvq0tF(yX-VtNx#hRHL?!ILDhlxTKfkyW?_YL&d<>W=Xdv}tAB!xQ%{RlP z)Kzs9asC!anPs7PE81aRH~Z4fT`m|XA2i`zJ9vbI6!mzCfE)rmdPfSl1UKP!jXRx% z0VR?!6pSX$*6-cG0r+V7l zD(p-k(PjTAX`{2VckS>n0)(rSk5pBQLuytIs`RdbB@t1t#O1`9+dw0b|HhphD|D4{ z#Y^|D@u`fy7A3p12N5u^ty*dGv@4&YB?#ESW|@S+mc%Z9Q?x3$9pn=&uvx9)Tbknv zvE>hZMvGg%q0fIB-T4KwaRB}H6n8%;#t&%SSSQ+t2dh2^k6Y+QkeC9rAbHRa_hxna z4^m33vs%Mh&nra^(b9QHVRi!Et_myi$|Lp7lws+ngV-5f&YV>zoWn+H^W~%a%OU!? zr#&=P08iz>?h8~1iU;A}o!)+K3{7tqUXOxQ*DhUOPgn@yN;SbM0g6T#*vEwM2N{HnH+zdcD^XmG&gq4ZD#w94NB!`&8WZMJiqHf>{(+Bla_@Dm*v2@?E*?hv}H#`(83%Vvw#9m*Wp)7t2bsiTl-3~a( zQ&TXfN5}ybu}r6lz5zW4ds&N|>aCG#*}1~6Op1eEIuipN7P5v85aeG_x-gc~20$y@ z{d9*4=n#3um8<1Trz5kr&t88j03QKJ2t=%O=`^U`Z=0#w#DbGTK6pPuAOEXlXtq`Q zi}~L0$~bGVj2G@fF8)GHJ*Oif+V|URG3v3cH#pqV;Qu5OBeDSGRkY`t?=Ugae6R8A zgb(md1DFe}4{$!QzCf8kn`^QQ38(>{`s*oBf()JXCDlt*L`;uV8k#2TLFQn;G5-sw z^YAQ}3_~3AxdI%OW@?;WD1o^B27ca{9-#HM2CBr(Ee7%A4}i458tM>CFR#=mi8;Gj zhdp+Ap|xuoR72V>nOp%%GQTm;xL1KI!eeJ*TAUHtZ03TQ#@#tyC0cb-|D{s(($MTl zSRhXe2m|Z|O9O6_g+vmNp_qilVw!dFSqb7x$0)>Qt#uTN zHow4{4*ti4A^an$w~S2eoL%kOC$U5T;|~f?!Q(NYQjWj<=B#g7NV+&)Z|AK0WpK2w zWX(`dsV`fJ(z~%cMAZxg04o!#i^xc5l$rI3Q&$mt(YJB4C z#=J3!+z_WIHF+8B2!FncXF+M^*cNI>+`Smfhy!q$$2lgb-8H#0Lip4DXV7N5ce7=H ze>3u%c?LED1U;fRf}S^D;62uqdGIK)k;)SpDpRH}vY%pQ9HZ6^ZEu+=-3*qplLj4< z&G@?HOi&!JgkK&p{eH;YLbh7H-CTlM8SLf-@o`BddbIVJhJ4$uE&W-B(yxcuGY`NEkFl zDmXGRfvTyYj`Mb{mz0o@5D@`{2{Px;nVFe`Mn<3aWKLIQJc+$T4I`prtJ9|ffU z+Bc*2zLyMgB9>EW1!D0eZKw)ICt_Ehtm!pykb{}omzb1_sw&DWP=!oC&#Wmg=NA)8 zloXYaaC0rx$jc&>Ijsb$j)n$FUfxK_JnekjePoR&@O$L(m2G7UZU~K#dIXvZ>nl)g zoD%;)HujM%T-6iB3(4ChrGHH7hS7ZIC;D%vN}*sCS?N->A+o&}R2H)LWSgH7Rn!nm z4|RCa2TtO25cY8koV=cVz3d&rRo44ipYbr&_6Z#8(b)%+C+f9xd%R8~KjywIda!k(pYL6|xI5O)arF|%oa{oR z@1?b1CyIoR%EF?!v~dFo0%Sc=IZ<2QzxZ2hw2u_ zDyegm^fuHf4L@HWbcZ{dP0 zwoa z9!)p_*q?sd#){f59*g!!* zAv4krSC9ant63}m(4%%vd!UIi&4&Sd<$%&bq$WdwRBmW#%*Jt1^P|_ncHf5m=I+rM zHX~PW%Li<1-`j~CF?R!nlJEz1ZU&!KcNq*_-m{V=8(p^%Kio=&T}gFl_twK0IG z*teZG{Osj4qWW>e1=%fo9N%x^v!%NgihBIVS|jd2BWbq!gbvpo;$ zC!k@B349(Xl=Cn%Eu;P_ho}G|>1DOS94ItBbw<$8z8gVHiG?qN4Z~h_d;VT>P_Nio zwsUYl`CYmdgB($Kr;#Z*9M^}7^zH*e>6g9`2DBPf>&3p{|2hKCrfrLSRqX6MQB`#+eR_3C z>l3PZEpp+cT|8lK^xaILW$B?Zgt!@Iobp=o542{CsBz|p&B0=(=<>`Dp);MvB8!~S zt)?`;!ijfJw351wZ(-z&=KZ=g6azafCYb;y28(vC*gk1)ZPka-gvqz)y}Di*~7`?y4y2-`Ejd*E2b=1!Hgx_`Si$w zjkHC9)h=p^Z*C1DDjwP`p*lEVSo#o;IYGGv(?`1XR3%VdDg4d)&rSVQLsQ|Um-IDb zDRUK#gBK^VL)Vh7?3wRwdLl&N7r!*HJDg7C?o}%`zGW|1oES zKzh%?-12FQkuz|++fB}d&BR5XVOBCFALtYu*e~Da3VnVW5L8OkCiU8=yd?_LiKQmS zEPa;)TV8F~mkXQRu(C`Y^ER$!0at;EXB~#K_56qVzBDA02fay^{rW(X@CJOo?rh$< z;iyq_q^Zd()8b)RW$8OK3M_Emc%-PhweyJZ0z#UV=80S*@cCZEy(L>PMvn` zK(U~)B{G@(6@;yn=fLEh`uRZni?Hu7mJ1~-{dNj(QUS5s6JvJL(E(bHs>i0)JYk!) z${Q%}KQCGLA?eT6ipHjH;msK!|ved$evlnkdmHWc#k#Id4C~^isXAd{hy6dXezwr zZcm%+bN2Rm$*@&w8X77QM-6bSsL^Z_un?BM*NZlaZD9=g~cS8q_-Vh4; zBfl+(2%iG9**m+4;A-E(F)C%w4Ud2zvF2;rcGfbPeEV7LReE)tg_c>wMSZ4%+hK6PUh3yw< z%M)+V*kh8X);s+ppKEe@dO02JlRBdmtr3ybxTCfmGBPru!%S;F4`1XqHZBlma5G`M z9Z)=^VGjIiLq_MyIq$chf;m1hfh<w?`=IAHDQ!6~-Ij#26T*$O+lK%=iY7YUA+Xrz~ru_q1`Oq17OpKo6LyDk{9-5kK21r;xr|jtzTtqVhNe z)56i!^;SMf8uDH-(Vec*r&;j3U4eAjHQeqOWy|Epqv}%ke;vuIS;frcCL+jcw?+cP zaat&$aG)Q3fVQ?@pHT7JhM=?+jSuN<^lEwfJ z(rJrm;tS%{$Z@+D_&JJ$5h8~!wiR))1#ueL&5v>*PMK>Fi2XSJJ{)fMcs`~~j9#+J z5TzxCLzNhFp?>+C$x*}W1V_ldR>`H}@he!$9Hu&*Sj_M<1?f&q_qc8!`5|8Lzh+6) z_AV>wZRMQ)bWu~fnOC*K3*zP$7NNF)!zzi+g)DI~p-z=BBhasZ@@cz#d;6{C6zN)u zY^?wt-^vdV>v>UsDdf(^D$L6Z3Yh#+JoSl?Kg`Lb^mJ`4+p+e7o5Lw{g=Qr-Hg-~g zx?BB`g3JBT7}Xt8IP}WHvvdZyW6yn3QU@p z@*~E@6)&BL`^j5YI6Zkz9_vlWfWQvUo_v0Om+@@rqk&<(?(GSa!Mu(g;g!BCNk@s# zA9z5i5{i$7u{`!R=0_)K?cCf`_Px_Rf1}d{nuVTI(`thUgr2M-D1RvuH_si%caBlE zG(t%#HULVbXPJqmv^-!7cY{48&*E9;s+_UxnhqpkkL&#&m%cg7)4HTqIr^3@=P9p* zYmpAHx*|ZVyJ(eweMN#S~LAT&O_@$M4d?lpaJ0N!y zhhV3L3$+zFGxt(f1!ZY@ERq+M4F!+gB}^a-8SIdOH{*f?;?&9D`gQPu=WG#jE0MqbD;N zufbW4ueQHp5s_qnlwG@&koi5|WxU94SdR>j+lFX8l$KzyZHX*yd=;d4g*hfSmFNJQ zP()%nz@{v;YqLhp*@|BtG-j*9AgpuQ0S z=>}=(p<5aR1Z0RIL_`K@kS^)&?x90kL`1ql8bKNaX^?KD8=k}W_rA|s&+-q~LKidl zo^$U#cb~mKd*8O3Q%&z@>Zp05GGsI-`jeFhTS`A~tS;&w85zyP^ZnhWYHx?y4$B&i zo6DUljVoGF)-*~*ExLxPj8VIr-xtL&KW>v+@HS86O2iLbg0FllE(%&{h87@tO0DMP^3tj^I7aB@f2vH3$ z3K*&mf3yufMz8Ys&mHNrUVR)!rua&p*(fi3+WPweEps{xSzo;Y3k!MxIAo?LBYyKiT zzPg@RK#zaArYUJ0MV9lO4YE~y?~^f4A=P^Q<3CXk*y)O`@wF?JFr?yBB zksk4mgh@xp=Yt}K8lCVLfX{FB3eJqEsFTNjWu%s1_{O8h_u{wZb7N(&m-$voYzsC7 zJ1V0R8Gwnx>=em8`dLl=rYc(u;kW`g70haj$l$CI>VA^XCvbP;p)smR)k(I6NoEW6 zXtI$|a?PATs-_s?d)>rq6*u$isTcR`#PqY*l93X_t*QIq_5U3=_;U8#`9Dlmq+kJM zJtlmt#F%^@x-l}5KUcP#8g)wd&pkb#Sqo<9a=m3svfd1fSZ(}1w2dnbJKB>wI=?zR zAKyh2Fo~}dz*>AiGA?czF=Sd6ajg!KFy(Crb_b*zr zrhaGVKc%rq2rspZM<6XB`k*wUA6(B+>XwYghjOQJrWVu!5OwwydpLyr?vW+9xRWTl z&cExv)%8M=a&+y8U8P*dE?q_SC$kDn=>cG`4g}kb=YkA*B36EuJV}no3KuKqbHLee z55pIdGWwOs>4`#AXvB)i8iY@{yQq)-MU&b#oczj$!3Ze`6CI|!3 zPHq?6`l#Z(4p_sXVyw=$YDTrOVE+;7)Bg~n5vPD;wWsiv<8ZSs1E-0EK`(k^HZ$}K6k zcJeXC4d+AY2`$Xg9GycLsNXXY(sIr`%>U}HK&r$~m^JGUxpLiph5^yvIA$yu+^rj$ z^u!nIe_bza0kfku&Hj&(*~}Bj?JRco8ELSq*X;gltw|R8hRs2J3g=~+lkSAb&f9gL zUvWNE)-0I{y+$^-s+&7POBU(@8d_4QkJ3XK%HKB-Z%(`kRc#uIo734e8E+PTPjwmv5-|x%zFQQ~Rm7 zdKMc7=AlTEAX!x1Zz?l*J~i_cQY>rGE)BHX2TdBBPB4HI&}hkAXge%oFA^a--*TAR zLhmvG%_)6|!I`rkEj=8}RVfTJi<+uQfbhfhR|Gh#)Q0Xa;WNwcY^YtTo*OB*CDr0K zJ-Qg#F0j8(-`-AH3G9~atF>z+aWCgnd-FlL+$l)RJPM-+<-hq9+-dtWnM7jZGriT~ zo4Ie;HsA|Iq~?lRwB2esCmbd}q?Hatb|(+t$R1W7m_=CYh~`N8~%54vUS-kK74#>?pjer-oXm5B`4!p}ZY37Zx3?Fl)faVMdaq%w`+W?ya%PLsB zzC8$8GaLR{PN`_07>-mSXKm+EjyezBgmq*gmCMkaaypH@19?)}0yUN?n*7mT(D3zE zI0h@U(>ip`(L#V?i=8mMYs+atc_&(vZB6+5;sIXhOG1FH*-Zp;6CqF+cQp<@T4YUl z$jFRgMToG3zSXr|*o=>R;)jO(<6MLqvr#!Jt=%EVs|Dn)vwIhJ0}`Pl(u!bMqr6th z8?F>jFRz;nSfx%WBcS8>6pRPZvLq=I_H7(n2hQ#>6SU~vA09K{qyH0ErQdQ&fBynE zG%#$=R>*kQTGXOK+v_R#j^G=(iNmvi!X_N!>5~jA8h`By+2U`Fpx# zesKPZK3=1^TAO1knYswHg@Dd64pK0jJE!S;>cyJNhxNl7L@2r19Cr>e^R|%q$D*L# zhG-PL$a_iN4=zkseI}GOyf7eU|LDMux|7i%k3#p>>fUeag1<{+mEMedU27Rln*H{P zpw6ZA*k(X*PIOjjaI}_1X7g^FnTwFV3_4wA5yj+mtO!4FzKR@RqIT9Zunb9F7AQ?U`Q}&oqqKRNY)pQ@C1*oLUg(>OPNv>3 zS^dt$8eOYRSh;Zkppm#lp@be_@uAh#5+bXJIf|4 z1KZoI-ZEb291lj@lJ!`%cg@lH`Er7hk#XIZ(TJRvYF&inExvs#JpTvokbQ4i_48@n z{g;(0SHc&}NBXZq{_MF%az3pEbh;_N8+cE`lSLwJ*p+UMLr|xoBVlB>Zo(4*W(DyA zKXKX#y(iCK^_e7Owq3nqBOsho7~c3ej-1dH>8MexS($`f#`;{C3Real{mB$aUx=ay z@9eyg1w!tNPdsbq*U(2pif-ez+xFe3W!2?n~~JC5z`-K(+4Vvd?S31&1Tmg#c6g2gQq4n1|D%Tr)Pe#8>5 z5QiFaxtnE@z8PXl`=m*m!{@zTf{bX^!k)`_13lelBIRC_FDeWW1?~W%NjMgCoYv8O zjq!Sj5FMppar|j7^uy{=X2b2qv+Tv)9@KX?ES>hFBSfAb%F>nbgAISAZax{EfGJ3I ziQ!wxsc}pQTIB~*NdNBPYCy81eNhupmm6KEwGbFqTI2q&%`hCQjBJr`Oxi)!^L}GD zrz!RzlQ-q3ofk))yVWAb8QiRLZsv9`yAwLT^?TzOLo4Uo>HIAHuE{&r*@u`O8E zY(9(Z761};cw5KRoXWs!yjVQhk@4g4J0egvF!mx|;Wya*0dh$$yc3xjict-~l;!CH;-D)tm|eSxVC!a{M{cpA>Th1;J$eZu>6gK8z1R8$bJu#W25sl~7(}&{>I88ljnCh89S&xh)GgK0_M6-%&$h0eZJJje!23&+M1-bq_qf}j56>@?0os39I7Sum zMXuk3G`b)Z(S+dEXi4|3?2nNJxSa~r&F)Q4zewje8e0Jp^=b%13ih!@mvU<*6FQUH_717!gn=TD}_vMj8H$L78vW>2Ayj z0+h}mEmy)k#p+MX$tN_4{cBE83Z=ij!~lPG?HW|5w9wneR5@+UhITp`rh$vW$#|NO#8$BQzFD8*}2w_189bcH@19_kwsi zoK^8(4vwQWgAiXQhHHn)4q%SVN2#KZY@&wJQuT$Qu|kcgDb;q6TQ`QTZ{F;0vxwgl zt$ro?@#j=a*g~0_<_^Rm-uix*VWi?M%;lg84Kn6mH{tX6$28r3GjIEJJ>WPvWzp4@ zT7)hKNzMk(_nD*p7(#5z+YJV`>q6L;n0aUq4o*F$J}NSZii%c#$*Kk|Gh{a|wzvYM z^naZlGgl`W$zCxlhU=6AW0hkAvWr8eCRfUeEFEEtHQTX$1BX_#k2)S|V{@|!Qr=Pj zXjHa~5Z^`JW77glT9t9g!WNsbN;l@m$`+YU9v&3*1hvm^&KCbUUmF>* zf-5DwyDMIn@)e1{qGU*{0U|Ryn-WlRP*|db2w$D@hM016Kta!_S(HaK%RcWsbPIGj zPG35+=lj~O<-}LlHZpI@%0PpI8kv>x&`5s#`H@wFn0Isf8SH-@c$MGX?aB-5NR;(7 zU1KQjYrRXs3H0WPVwg40I1du#_}rmJq|5CHc@+D_`N%>n3wHA~>4lYTR^YQILA;A| zb8fcrp7uzhaMi1jZ_ci+KjC6xVtV5#1hyOyT2LIPrAwOdb)uF`p4=cz7ABb0i!H|0 zkM{Ks_t+b^i&Cl+Vc4<|MT;4EK(0dh;=xlKT9BB)ry<35+|v`{n(kl$G;6B3 zHmHeDD6(|ewmz`hpYb-0$PL?Il9rLW7YyWjxPw~zJ<$1E>r01GW^_aew5 zGqHkNI)w^y$qeQG{K3pLZ_&Lk*5tTINCO!{K)=6gyDZF##vW@t9&M-#^*c7(Sz5)=&}zQdT@75el%9P6!CYgyOtM-~S!v3zx2BOWf*|aC2;N zUEfhD;!hiB=6Z9D~Fx=SX)Y4$UuG-n}6 zF=d8##c>*7?jl3ty%DI8zfUFcGMx%dTnL|9oV~Hgls&&a@lyJo7uJBGDl?p)$ixxL1sV&` z&dwKW^rKIrB~62k^1hd9;>@fMQj2$+J`JEpgjrBiQ->b{lvk&4re7wxxG~zxaEoR= zwcp`HFJ!)5B>hyTq@aix{#%R$Yt)!|5Wfd-8JjUOL6(j)dtKFEePEVS)hWXTc%8ch z=%L}{s?oQCq(7m}u5u1zzn{HM&Pqgu9Cj$7e%yMiB$1lKzW%c`-M*kwMudHG#V9rK z^o<)`p#x!56v5Q%)5!VC$0`3*13!V=Xx&<*Jv)OciYfhOt*(YkLPTVZY8)}VyEfM$ zp$?B<-{k2T6jwU)dZg|S@ZSzCfMr9I?vNPI@2Pr5l~$FiOLSBePfQiw3V9Vm0nN~- zUOMAx&FIHLzsN{y3WK!OOgH3 zJ$*u_QpcLErncJt%~mi9t})%<--0`l%%D?Y2DoUQCN3oD@w+2(+;5%7>|)TxDAw8p zqY~vHwE7l;qd3)wN^!<+t?QtWPUwmEuw1|^H)eFn!Q{>W1<6Wjw)tx&fwqZ0St@pp|(^D_~=x@&4%3-CZAA%*s4FNTiByd&j}F0U*>1A8|faI`3%h zEDkf>mR#36Yj=8pw%<%=sAcS%v^4QtG=7VZA%OcO!mv7|MyL?$h34tu(L6O+i9i-+ zZ6c{V?}zY0{1NzR?|?18@|Wa=((Bj!fgl2*;$+WY7*W^uSsg2+qR!Q;KL*h;4b@}+ z36*^EvE~U8Eg9bD)&_uRLzV7PshpF{wElb|lQ*BiS@7w-L}4YuWp}E*7r`$4GT>O_E+bUVZN=%DNM+OrjQUml#7r9spnBJ zugq$QBAE`H22qn8J5V)y^JT3+xgB?ztXFO5y8=P0lu|i#C^l8(#?WFBPD;uTkFM|AfRzMR?3yY56mM;jOB^PxjVUE8Hv-*x*QTe;a`NTa(D zwL$&LqqOF}XU&V1O88QMRB_W;H0ABGgTRx24W7S2cF(4{p*Z}{^7y~APibk;CB|gw zL!-LlZ{4;u$_d@p<(E5V{knl&AmlL^h!JZX(`0nIKf7UN0lr1z3KJ<|_0Us7hzVU% z2h@PWcaeP~OJFhEE2ozo^&Q38O(SR72&wL3)E4|zx7Ju`zO9`m61&AbTM6tM{FAcX@BP!3X@nAAzoU=EN;Js&Gu8;)!xRvI zK`G6Kv4E(q_jMu-rm%*_rl!&bwtT%GUhbeT1n?CzPJs#1_iT3>SfnpcLGD8Np9#y* z?vK%AlJ0>Z5}~uP;8cZwyeF@TA@6^9HK=K{Rc5EXjI9#MFHr#ZlY^b>_V#y5{dKQm zsB$TFmj8iCKwf-UkAsb^4MVIjHVGQhu(@1EA$kQdR~Ye_4~kK%%F1H#_ok~LGy}js zO(W{mYk&atgd6dgDc*GN>+Sv9@9umcl4m-g3`(s5IQ~i+J3@bNT)x?5&L*bAgQC6z z^Cp|tVt#VLrr``j#(8ED6LR~aYI(_@z?&Em(R10>^m$FC$AQo& zu8TLpyMDcVR&<<$p*a1>;OJcq+b_zi`2cdy{x3CNfD6GG_9f&gA&Gr(PDp5IOH3K2 zFsr`c2k5h2RfbRc)6j>R4X*qt%s@pM=d0|TJU8f0ZK|WkA1f_J-kRE44bL@G-37-5 zjrRlI7LS}kbId`E{z@LDfpBUFGdmsGmxfpn5-J}97pRysS=s927@26-yVes2_EroV zA|?_GORVoxirdQt9I>L{I$E^!WzW>S?;pj^1smebJwF{vnO}!|Hr5&y6c*OjHg9n| zL?+6straBvYutv%uJ@3fQv^n{9{7jD)=NOJ*sdsK~!^ ziZ|}-B1)SPLDEd%wgu)Q8qw{=+iw@lDPtfE&e?C)?tFLS{(S?$WFr|<*}qaLOHqa# zy7?H+YD#1h4>hp{mI`!T1|zDIMoaSxoY}G2@F<{UPPugzTV;S&KDUQbi`-i)(71(73E|C$9SHu_H%65a)$Le^=Qf3&T2@{ zN5W@wh^BaKI~PouGvb1f!m$Ip&SRh2Eik^z9M#S8bYfaOP#I4&y>w|HmQ#N-F=>R` zsrKjeB59xc$26z%9m5sk@1jtaNt3e8 zx9-T>kNIO6n4?`F<0YCA7nyH~EYq+zOD72;UL8|Vz{eklYM*WW5Mx=QymwANL68V1` zd>CTte>UI#YUg-0Y!IKUK(s_X$gInZaO5f3oyl2fxvhm&02;`oUIOJ5350S5+XJe? zADqiXv;E4DG?)fa+y7MbWk#U$+gEfqP9%3W7TT=O)P7p7wYB(9L$73#TKyaT;PRCP zJhAzJ+W(2`_QY2|o6ttnHznjZ${pzq_~xL>8;+du#W~2?Q{3jg zb%m`3mM6Jy3G;t2F>4Hay8cFI3-r(8xMRuiI?I5T|4(B7yi%~UM_?PfvkUolJzT#0 zN8&LC>0B^J(VD%^cV|sI3nlm+>Ego&NEtbd#g1%{n>iM4mP0)s@8MwC&Mz14MTbo{ zK7SLcuEO)?=i=9g5r@C%rsmD6zCrv=(SH%C@_S**R%OJm)-u43F(@(!oKUQXF)$I& z61aAk4|+xP431nagjSlhDboT@71$Q3vpw7*(sg+p_b!t-S*CCc9SU|o>f@5WB;}Su zQBp!^(caj}(Ja|LoMykIl=|iDrOxa}e$Gm8FY{T;emNRTAaNr(rotld zqLd*P)D{^(k`9>zpeQyX%8&-#frrpEm_phlknSK^!;{#g7Y9L)U_D^JBvn=+uLbOX zL4u!nemJ;!KOT`M>?1?#E#NPOOy_S>>@tve^XL)5!YX|pA^<__WFLo#i<`H!v=e8d zPS7P+7lGJhTwbPpPo*jAWdHBU9UEJn#@5UHf+T^m=eIugamU|rL;F1!uUpPDpTxm8 zQGjXMPk#z}L#k4rjk{iVm{FdO6$jrCe^Y0T`e(zuZEcsiz|7)ekqT%Ahx~+tw|8^UNtU5k_R}RBxC=cz zemUp@5x-28FYP8r4fJ-i8i9??&BMRyf@0ym@v7CAp*LW2+ZsZH zC~?3L5_60FA0RfqT;Yp+xEQ$Q`H^clm?%iFk=@=~(gwK$Msps&Ihn-{*i|Ty(hl9` zHjY7=eA%B21;(BgUW9g~&)C+9mmheOmvbg zgv1zsnOH6!o$Kx9b6sO>5)A2*XkPRb+ImNk87f6p*{(PWW387)U+8$XEWapr{lg^$X@*@3sqAHD0_SV`zvO*AdUoJD?EiSTa`<7YLKX2_=wBqZh|nEjiS?J>d_&< zmwo20_{+u5e+-_e*)M##SXh?$3$Od!KzVw(iB;r?|hoIR>FV z5bsR-It|v=?*yL8RfESQNLQPgno4+_^r9^PN{WkHnhcw5bzF<6_($hc0o4HT%C$W& zr`J>wYRy@#FSSB_Yup?*x69LFTwzK|kK5Lz^~|KTNsR{p#~P{HW;S`agl)CJKtI6@ zvh|ZvB55=>CW5ApEzlAzI&TAG@ywy*sD-A^<5P~~*g0}iJXk>H3tQ7;#ft+#%@>sR zeD(a0ho&>R5&GYSN>7PHy)^))T_E}Lc;hh{DC%Q{0pK}Do<4rhInvS|JtYBA4_Jsk z0yy!q0ImWM4{TH>6TIl}9@2?Q)tU2;TWi!+viq zsh8?JH;c=V@;Kc_H2{R_9!HQ6tuU%ke5fv?WlH#IT9(a<8`$@#e7(H{k&&@O+=5?k ze-xwL;^Bo=^r{Qqd$)Ntei$gJ&z>y8}G#k?MnZ%_~-NxSY|yy z(*X`1=nH&HoDB$chqxegP`xoiYaD?{PsYpv7~9Wb^3fEJ9=P?_OLs;Vqj{(`lrIe6 zDCvOKH+qNo^hpxDN7dKIFvv$~SD8io))`Ee!k;MhYjJ{g^pLk1HW95F>?*bb+WN7R1RvD>I|kok91JDfvYDXiz^D)tA9r> z|1eBr+~9NDs2w_Iw)4CA<+HS2C@a54z#8K_YForL`43UB%HIO8GcXO2ego>herxL? zTeMD3hr|=9+a1cZ-DK@#oy0HujDzRJH_9l3=cBL5OH1<{69g@`tpf6DCXV3}t#3rO zt^x4}70H{Os?IJVr&~S*hgnvFv#C&}qjq8q_hQK#kieO+5)-T8evJ=pdnmNXjKzEGdDnIQ}PK)Q19^&{l+ z#Wrkg9m{!SleIo?F}Y+l_q*s?Nj7BjEyI=G=Z(6Ed%e$~6DLKcUlrsur~6FBH^cmc z^TKz6EJ5g1VVyv1-oVfcj|pN)#HTTMAerw|0p{`8RY7Y1>n0bQ!vnQBUeX`(ZF~Sj zAm+Mn|15PEk)Ez7EqlUXoXd?N7eyxdz-%mnWi8_isMm=8bmijT`QYu*XdPcO(8GwrfBhp_cfS3#{nN9qcEn3jJEdyOa;gZl0#$+uQ37TAXHAH$6JIo z7cS&(+3raAoDTv~M`d?#7S>hODyr_Yg*6bxf47{2hLemZ5%yynjO{YYS(Owm>A=BX zH4`(IHZ`>#xS!o>Ci-lDWrx!Df)TLLG=zNw&<6toQ$|ocR@-o!m~?8D+@{oe=Ri(s z`K*~TW5vMGnBw|(J*#Lqa;Efdo#VOh%|!)kKuUwD?Q2=0#jO=$(hq3_;a&KuZ2`eJ zy3N0McEh32T{WeIMIuC4fvak|K;OaE@#SbE=szFo2Ws47DeeReS(7Zl&?Ce1h%_KL zN4zwOV$no({p+CcB68^i*gk!N8}!0fQBkc59$o@ep$x+3-zLFk-^*W*M*7~M?iW=0 z26QF~M8FqqOV(#8sm;omU7R7TI&f#7;?-Ppo6{SuVY@f5t53N)?P<0GEb0w@q1=$u z{dr3Nu*guFY{Ntz@lD9~LW@{ZB+u(H2l?miG7hi2pzXaT0@{G3@v|f$Sp~e3TZnI( z<;7#RfdVhLr0^H$f%9Jb?&_R;GO2S6!;!2qNU13%$PQe&_9A_6#uk0b#lSs64oRoh z+5%-biry8@J&o)tDe9M(xaDz5jnrcaed9?a#n z=F!M&^4m%E7oy;9^CN{dT{^!E<0?I8)1kysqua2z8ikNasi#(Ge{dLPL`&cYs@+m~ z$kMt}KP*JQqA|r?Z0VrHqZaKVxB1Z@@^QrAuU{2lBPEk=2!Kb-zf{Y!`pfs$yS0z; z3DhNSa$+MR5$*P--EqT6Z4PFig{#H-s+($Rr=y7$ACLp7%l1B0O&dM2&s4jAr8xiM zhTLj+Q~}!htO2mZtTLW^1!l~%+>3~WyF=+pI&b4A;?L>~L@YpA9?}=7H*czDi!d`1 z0)$SXi?$>Wj~}ZNbDK9t0E(kHkmNE4awqzBHMMMz+g9)-!@~LyO&$xtnr-wIgFtF} ztj5511j=7}Rsb+1PyVn207*>;-u2Se1I!0`_OOb&7``Wgip*!H)L@hxxJ(^B_W*cw z8|FTWc&p#+*8T)9I~LshB%mv1L)922fMZZ@AC*pLc*h!#0DMDqB|s0ZxV^mmpq)xQ zR07q119K!_00au$WW?Cmn04iwCoApm*T#fJpjt(?^Nmd3aUnYn&d95bTkHi29~6=V zn!M*(3ja|$Q^e#gE^HP@`Ea}y=zpnCR9&kB_f{D>hRe-Ee`N=apBNg(W>gWInwkAt z^^v(w5PoOwOfZ<2lhdXx{6$Y79$c*ae&I1R+QI=UMn$GMsZJ5R`9I}6?unnCHwF8i zHieqN#7-mZb5gO_pGwPyTmkaKjJEDq0!~5Dd?G|Tl)7^EsOyG|p^4zePM-N2ug48w zh&Dfv{1xBRrKz2qc6D`ui`ZhVIhf&IHB-3V!U@UaWK+F)dJk)r@hmG%BZn0#%j*#q zuvTz#;-oDct4dQ?UamIT-v_mI{vsjrn#>B^Pxb3W8O6llqPr{;mpXc&mBm!#t5M}_ z3WS9zdBfMjCEkJlNZlz?Nf5_^HeGaD28K>n zT@Yt1uQs0!2#B1Oz*J5m=vJB1d*b)$n}JC9;~80V27n4#7d?9SuR-nlahrTM-`h~= z?A?N>?LxB!$0$zTBYT1p1sLXJNWgmq(P@=M+fxB`aAZ}8llqAnw(XqJ6)>$gFTpV; z;mpo$mOWZJAuxlD$MS<_3++^$J&nxUNA}B>4fcNnp8f0$x2Q&K&j(-!Dr@d1=CY^g ziMXcJi$8nmu6%TzoSX!bC{kqhAil4E<`S=tB)sL!n5`;hn^via!_*36@mc(#wa|y*`1l0j2Q_% z0@;8r6xjx;wwMRi#~;Aj1K%~FRg{;hEXEk{62XFkzJymsX*qh;A?^K}=Z+dia-mI0 zoFW!opYw{AJkr0^ys56eCps|QhH1Da{9tDB@G04-V}p2)1E%H8_CveCTy-98#7dp> zDo1ayk`hN}Wi!fK0jH4>5ee&n2vQ-1f}(&=B=sI5zmoEVSy;R%kFMV)GjWJxpATjV zeO#EG1=gQJ50g`1I9)s6d90$Ila~PYpj%bMfkmOugm63?9sjzu;->gYP>@K!h+}#0 z7`4}zc(8E4Qm%!qFzV;ZI)g*i-5r9>nmTDfPmVfrR#WR=di3vM_FpqjqJt&rzx*Y$ zwm;Ea7cgh`h*{iE)Sjv{k3;d{k(@^Cb~S59q(+|Utaw@gIB(qtt+(a#{^)uAyi+*d zU@|*0+dZ>U+f^R0wUt=Q7WFdt3EX*A*Vqe9khZ@#YItwo*Y?|%?lC7V^g(Ie%crVA z9%FwqVVl;jTgw~klv4!b`iye|mGw;7!7t*u^LiDq7tNb{`uNxmsi4L1EtrA=fYaJcpwCUDES^5#b#;k7N-B|E3Jpa%UWCR`>oy+<|zLb{ROAu zt0jf6mQHolD0}ZH(?b6G8aL>=h-PWWZm64|pP#F$ss^^xYRL|6&@!uVb92wz)`^Iy z$1ii}wKT?ZLiYF~t4ok4DtFPa-W^Sj;VZlA!r)wXSs33<@!=20+J<&ekVP|Iix}ua zBUH4PDXmq{L3Agf$~)=o%=tidZ4uR1jdW0CeMkk08p+WL)#EI_Y!wiRPar@LCI6vS}nlpG`3eDxD+j}@GK8Pq$kxS=2gD8tAdm1NBBO;Luq zijCH^_+tUjudNwSUKgO^Waj^Qox>2;cG~1qqUm);YMa3Giy{F$zw7^be(m$Pn{KZp z?$4X8Zw(J17l$o`&9+&|oo78~JswyyUypd~q=6!64+(U^DQreB?(qY7bo zW_4QWE-)N-TzEh#!oOjk!1w?(f<$1Q)21D`=W&4BGBR2|J*~0Qwv&;OX>Mszg~3LcQNK{eBqJ0Iy}jQzzg1=?A^;1uJRBT?Jx~Pc z%L?%xtzMLAcep%k=wjw>cTelJw-%}8N}KA~XLNxa^85ci;$Brlb(5o0>Ass5*|dxBKU>6{M!7PEAeC&%ZB*cDtIy?Gi-2B<;@PTLlA3$BLZxm z(X_-wj&CQYr@0UbiT9ftYHCul0KEVrjvbhUns14%u53`43YK|w+0 z*udpivO&9?tCbkxF)_F&o}TU!gHZsmbpn{*JK6jK4DVQBE$%|7kYd?LW z`C`V;&ySw2))sqpeZ8~24Yrow1S>pyt_x6qGSV=Ym%v;=K^{;~P*PIzg@$R@0j$sf zsd-V&u0nfqa?+k#;8E9eE^cltRNbRt{n$E^z3y%~-AGXmTg;g+uwcR67hgP01v4_z z)9o!--kJ!dVqwL$Tie+!PEV@`h7+s;C#x>4-y#Vl@jYntM8a4#ykiQ-J-&B0j zm>Kl+Iwyy=5*2EK&k)r0`!{hSZ2~$DPE!9)8+~G2oK!6tHkvt+OzzjOzqVN_4DIdX zh(BS{0P-0DL4;)qAzBdLVN`A|9sSYyx$l}+<%u>ZS%o6seFiisfgGwnrixrW3q?uk zvj87Dcp)tvU2ZJcLRro!|2;XG5Y*HpW*LX|UgP!a@Lub?+;{|S*~R5$Jc{FO`E`c; z<*&XzIyiuz3keFY;;d-eJ%w>gN`4}?=cYaDt3l*=6MbbqJshuB(UmXVT753 z`^8mz&`j8zKqcxKec0hAe#Gp9O^la2fTeIQq&xluL{*}{3Jqa!nF^+u~r%WCQwrfLSK)8Y{nNUEHC6HEFVD{jg4#o#S*Q*;X)5NQJ6-=a8J@&t&pmcUf)a!Ed z#yu}HyX4m=hc(%PdG?+_sAD^zXin%I^oHolp_wOif@xr7D45pUWK9RkySj~lo1X(w z8z(?dN_fPyJi^OauyaZgiQvH@fAd?yVQf$56Z|HYbTM+inYN$XbgtRF_YIBeNBI8E zq%YA;>%id0oj-M|p$PeWbz-?N>5c$aM!`nUloK>PM4!n&?9i9MQp=U1Q5;0X6#pwl zZSEiFDACD0zT{|@sTg~kiD9WQj9d^GN?*gmGs;DN?UF(D`OnT@fBK|;Q!4{u26sve z#J_Tp_*CLfAECE5weM)7>WtA)44VYXJ(a5Eh0PVy?DYrcZYrX2%wTpw*ZI8P55rGS|urb)Mx_Q z0VOUg#vzarp*Iy`BKpuF7Z=vlU%uc=@cWiaOF+14R%Ws_Ik!0ls^>;Rk!K-1Zvf;8(OHlgFV2nJ5 zZ2|&m9hBH9yjZu5EVtZ5%o?9Hw}`NH7RRr7seuY4aU<5RnHpj8a`}}+3*2jDfk(a4^Zqo{AgrOODV0)PWO=Vz)mC!t08HP%M^)vo52nEHL zK4#IvTtS;v8V)F<;FjIzUxE-Vat(=*5vEGAZd_DP99zQCWFZ2bE@!f?Mu>`fOnLip^zw zFPf{JWTvjHdoLQl>a0}LIbumd`m5+)&lX_YnV{jS%QYq2#?!5a>qufc5auz)d>BkW z&0bs)yQ?d==)9}QgyJ!6I2rdUoiT=I|@f{YBepwy#5ntEB$*FoyAUU1K5Luss;z|h5_vU4m)76PZ z2L4az`WW@sJZq{QCc7_BRn2~^v)7|AWBg5~wb6KtAD ze5<$8gmiznlJ5D#{h_;bmh!eSDL_7VZd*c{8iRz5@waD326^L;3D5=PKp6HYt*>p# z&mS!oA7VI;h(v2yNbQlhk081KCr!k4dVX5OKEK&%8s_iU;g^g_g0h^WrfZBg+*S2q zxWl46d~#B-2Z(V)F9)0)i*u+3^q}D)a)4e}yF7EqM449@{^|Zpud>8nk%C`cZQVH-=Hk^Z49i334M1?D<-)oPTR_slL*eM{?QLCv4wEt5SluUqJ2Xi_`)gU zD0BL53T=O>JrDz5N{!j&aJgINxgiCWPJfdbCSm-iTKm5;kKdp<(JFSm)hD^|EyDS`tL!TX8=Vfs3S&we>Bk;X{(N%@{M@zL@YjAo89^5bKU5Xx{G`|xPl zc~g;06P<<-SBk0XG8)L*irQyB6vXAJGi!dpw_V*|EOi?6U(6Ngu)m(e>F|QpvcB6b znq>y{2_Vy-PvOqC1mmN;q>oAAgljpXipSRbZ-gqox*yRE-vHXxq(}85V(YjehuR|` za#~1f4Gm%F7gVb}e{OrGtH~CF*YiAP1zz-Ac)^K-P)p*^#6%L=LnBjECkDF8FX8>2 zJr(7AU#j4bz>yccBn<0VDaOpKZUyCnpoQy9b}XX}YU{Kn-OB$ls)IV*IKu^$QFjRt z#_TjS>59QR@>l{8Jc5pyny@TlDDw=j>gTM-$D>`rdHf}!jG%sKNELw*9}R4-?Y(6F z5)&0uoLs}j(`%xEJ0(>aKJ(jzx^%0#-T+i#*$#?!pB{~P2FM6+onqTPTmR9!5cmQG zXEFO`fup2i4!7vmjgn@xEd`0F4GTAY(Ubddyl_-(MGZT7xpr<>k)CG0*XxTiuL?_*1 zxVko1HVc^p`|AcBK)3(6_E>ZUBG2t5|4scV=l!70tRHS3V>a57-;>LC?akQjZ7P7& z{`w1T+*m#5$%X6Bj5!Q9lcGkj@eR@aTvF*#5>5nhG{89^KoNmCI%`ltx=ZUN)aZDh z;Am1n2sGmyn0<~wb=`goj<^okf{zx8w%gv?I)`zP-2nKh`v}q6N*1r z2#nYa0gHseG~iwcK*jRne(34)Nt{yHrT2SZAODM_sixYi7oBJu*rF#=wKrblG4S)Z z{*WA}cew22=R2YlU14J0s+(tue{+dmIB;LVGeBU5lk6b!Jc z!SY3W@?@`Pq2zlUYB1+Sc>vn8)qvFTabxez(K~?{tAQju1=)J_v;FxUnt{*m(%+2| zGI?0M0$2RE8%bAS!Ab>Y6fXg5wW>xn;N#X9P$1z{Yh4&cg@boS~_S-LV&&K6~>!<-l0 zK9ff+$J~P#Z##Jd7wjS#HFfve6MG~=$6&0|CNfp5baQevb14pl-p_J^tCWWtc6}Dz zueV*=zhDeB7ozH6Z~GUPNe;KaCF6LYO4d8BVd4>eL5-3jds%FigND428^M-lxrE!n zTdkh?an2^oV(R_VZSq4CpMUM4TPDb{ehxyma~EqH*?pE?4Bd3`@Mh!eE{EIS(3-c= z-Ps9$PYYoQsu6LaG7lbR4^=hu#UEOAYmG4cuj8ks_6d30=#*2>g<4hjl2RPp``rVvwrKGv)=RPJAaJ#LYSHRo*nnT_VxW-Cu%;3 zLvFjMV}c7XL=16w-Ri6fLkpuJN4moZ+4LmO13TB+mU z-J2!#h^~|6#M$F5RZoH%S>3rj= z24s1=Xt`zPhNtz~R`uGIV!g~g)Il1AZEHG%duL}?9>KghQlH+RZyl}NB|oZ6H*1jcYJpR8>g(h5d*kjdt&-Sg zEf3}Y@PK7j9!wop-aA*p|EZ!z{fPR}jskSs*`aY=9!;8d6fNVe;%7*+P`24XL7+H0 zaM8!~EZ~soe`SBL`5%ukNJ058S3w|$$RSUl%lRHLf#f$Ui2c|Rc!Yawt9n{uL^MeN z<>NoG!>#oH@?x}q7WjPAlXt+JhW+KZ2SoTIWYKj9#tLc?DV8RAKB${f75_dNZx>O# zPV=P16tFw9#P`@kHeej|-i`mIUjVGbqE1jvIkO+|2ycF*EL>8pyf>`kLSpe>99p;i zY_Tj(XUbIq_~rkYl8}%!qOE28%(b(8^ktl z^ym464mFj4b6MuCLy(&37I>pfmR`f_0(Q{^l$1$cM!^_r6;JIOaV2E(PQ^+bY|-eq zno+Bp<1sp{5C1uwy=!e0onH!Lyl;~&{DOkHD*~9l6D*bXTyx-Tu30?)*>j`XplYcD zjLIwT9DdXL&FZ+ce9hCW^K_xnQ?0Dolm|q(v4hHXa9O?4)NKB2z;bVms*a8dCnS2F zjR0oy;CReJz&Go#!I-9bF%To{{jC=9@>3Ss;?P*nEVQ_8$k^iTQ^5ZK@3`dV5LEi! zdII}gckNnK5i=dhGn-P<%yN7b|B0zpFtML;z~-3ztK6IvmTblVjCYru%08mM(1xbQ zN$~l21G0U-GGJhQ^|=(enOpt-L~@?<#G&o-#@f1Szj<+a?&zk$4#%A%(I5vBY05-v zkDr5utw9mjjjQ<*&zKCEi(yYQ;&IqKd_E1ZXA=7?PkMqrBoE6u;O|!(&Zh}_d&rnC z%0XknHi1+`n&TjQiq^LCGlsEY`9(dL=-hw?3bIqJ$m03o@>zUJxMNpxP_i z!8;XCvUZPV*pPViTcakBBhe^q>O@`GAim^S{wyxY{OBoAZEbD9eC0@xpkB1+rwRAh z8#I4rBEs0hfXV3mceNKR`~6&) z3AWjiHvf`N)A5W<=ZlAor;KM1%oH6sm-!EzwMfNY;GTyv{Zz~WVahoY2sBXXnj7r? zrm>-cHPYV6X>WTw+cB)qNU{TnT|Wm$L;V4}RYj7S7^vrA?=CMdx$H8!t@#rH+EB5p zv(x`?s4^+gm=B+FWvW!ZF>c~YVWGhB8|wh%pO+fEkxC0c&q>m*`luwui%p$6{I**Z20G;vFrd8 zN329f*4p&eR-Ph&6Q4~mHta8sk+(8$#%E0B2Pu_ybvVJ~*gL;JDt&G86Wc={YWUhP!wO_ZdAbZ8H`;fWIck-HXP zV3h%ufm7kB(wddVEpW3#H|scUQK+f&iZ+Ctk3(e~w=6d=*Xv?6dN&+F#$P}{blbAs z#A`;zv5h-pYF5sjUqSB^r~J9R{11vi12?n4Mkq?r;Bz{NP3|5n#A(hY3l!eLf!SvL z1tda8A)E^YBcIP~{wYePb!R#tJv|x_{^Y#q3$HqerG^OIo-f<|?Il%KqIqNuDUU?V zdEI>zd@pno(R0wpGY_VJlKsuY=$8?mZln?yXCvBWDIXiX}B<4X_`3(jgW5dj33f(vkeu~%L$-VPLaKC z>(ZihbT^wg*m+J3!LvRZdixwt*KR=QOsAL1$Uphl7SZMDv=z91&3)^HZs2m*G*@Bm z)t^zOwFAcykNJeilcB6+&kqKYml^5@ItN7eW*N(mi$p_j=RUV#Z~d8f+pD)wrEPtS zKmKf#Ghep=3z`d+8- z%sHpaw>&M80M1oiOsLruD4_iF$?Ky8>^E0yV!B)v);e!d{V7@Q^JuUP|LKnUIc_$| zc?lgV?uR31hVw_uPL7R~Z(ua&)eki#X)^dX6aqRbsIg!CE6kSXD#4NATo_fLvhLUN91mJ^T~M^}ApkxM zoJugU(pYY@s6$dtqh7G;nD!TVB6KXjo*a1ZeyxVcF?P=p&A6;3vVIZnLOl!Po1G;3 z{8Iea#9$_!$!=YBKf+-$Wy3lWhZhR+twO?k6_}c*Q3l>znRj8maH+}z(W`U`Ubh#r ztacZ5`@b=pu?a=PQ`dsloN8@{fkZ+#jF zZONJpjF!@A>3uH!d~4*;W274QiOyf2w%5IWwC8oQkEXgS{M9Q`x0w3H*zbg}pL1E0 z{1h`^l<0M|6Ud~RZ+*e6RV;%4#D+^9#KCA^D66T|-(GHApN7AsRQL`|q<&?!Kpgq5 z=;W86JQHm&2?ZC*kHc}(c;aZ>K)xr1eVcc2;HHlIVlJuDF+s-`p1u?GA{95?N2kPe z>?Pc1ko&iW5W#p_6#+p$>5uk=S9L6hxM9n-THm8+51snsxJ>Ysnk?&2#+^AMzQUPs z$hgojp?<0f4jKVOqu6;2_NI)u*@q% zx0vt5E5(6!Kb@Zv2e5)H}JnbagRSv7HIw}<5a(9==n&a7KPL04URfIUA?y{T#F&9w>0&=;*8Qk&-BpzC`u1w?Y-gIs zt{uy^l`e6%_DuE(jDL;vjk~jRM6GVAruY}ktgXD}8R+-1@i#1$BhOl3R@*1z_ajxb zpO6(c0#QTQUvoq1{K}|Z;QiD^+oZ$GU0gL;O%1{qg;jc%#dEFF%jOLyPlT_%_3&j` z6V*!qve&Au+OSYPvM}aRX3m<%XQ)_*4JB8iayOK8&8>D54{MNW^8y|_!}S8 zpTY)n@)Z=sNBfsuY*dTWBR=1KxzTXK-yHVdd;s6A*x*kTARmJre2tT={O%T1U{1y_sJud%_#gxqnzItWvLH~92Y9cjw zY@Cg+D~@Z2ySaF3>Y#vPJ}zOj0YbO({*`7;?UUaZhuP>F&rUwM@XS<*bVIswYvy&W*L~aYV1?tKmV;Qk;(k> z-7(3#IL9tJ4LgF^f9r=Z(JDa98oin7~vT!&=vQpS5)6`;k(BNOSoV4X7Gq-g3j}h3Ab2^d9n?+ zSVKsn)Vg8NjofOl1`XjPowW)j+_H2E<4gCk?#DN76@msP$(Molg^^k|jx~C3CcYYb z!ynf#Bi_HU;Uj*fttbtncH#fdUVqrl6hsiktnu6FYl0GAz;x9&Ew1;zv{So!A5K@g z5Ffu^?KOT=ng}w7&rM+z>q=lNN`XJllE6lXD;cR|~Ih~BD^$>7L1S$)IDLUSEJB z6UjM=U12^+jh=C`1#3H~WBpZZ`?P~nJWL|b0oWtm0L z9@uqsv6k$lXYQpsb8*=7>QBD5Pn$R?t`mO=bwlJ5^0?Y3k8&fq5+a&l7^d83Z^19W zM%$keA%|+ACNRTEj5-Wm4kiy1{>@pv&c0wV(rsaQhmHR?BE!mkyRc#TI23U{q?! zn6z+dHmW2!cmo6CXejc-^K zMP!7yU-yUbL2{QEel>|EFygNib*@(F;A5Lj75?{ZXiY!j?hct9eS^xS<{)Q?EXV@t+7-a614Ps zdvpj!v2)yB{O{{-yfNytJRS0{rzdeKFE^?jLE{@d#C2Rgbom?mxv=rp6*iilpsYC4 zOh>yhV>e(y5Y4II9?Y<7e;3&F$i=dHHEPrio~VjCR8Clyu&Udj4v-V)TBRIv(g9Mf z0ZJ<*?0-3~k9KR*lNp#Gz9N<%7HM~;Yoq(C7-Sqe6I+L=as~4e*^A`xg?zN=G+*`) z$!OT`lvBM;=rO?m=&~Bgm1ua!Vq%Bj0+wJk?;U}P9xw-{CA8K@F2eNQwoC8@gsf?Z zdT8PFDy{3SYruiMKPqIYpTA5#rG`r&C)K{!@$`4mYJ4P_d1<^Z+>fGrBI^g3d5h3b zwT;wKL+a@#%)aUlOk2im6H5gTag7>%6@V;KvDIE1@$k3NvX9Qw4I+FDw?Q9~T;B@HOBUfD>({)$`T8Ih{RkPx*l@I?7&;#&f_}$f&0sh~s^A#@ zp%78RWU;#XhMgZ^wV-85W??XJeQ;t9Y1_Dh^X{l9wV77Zga~d~U#SWb9Z(pdIa&say@+-M zug%6rN56I1EP6zDh*4%ly=pk87EGZ!4=CMN=N$l*Lv&-KSZN4$Ba*&E0Um!|(9H_X zqS>bAw?v)&1ACw(IVf{;M5kvhPlU0!gKZVL8n}6Qk_BCcU2q?O`m-d|4Td@E2tGL+EQB^VF`p0gk<@~tpw)>rrQxc zqBHo7fpFYz>A`{tXLtZPVH9Ek|9NMkYXd)7TgVK-nI(vuoRLZj)FuLD4|aTowY&UZ z=8NM*xx2rJzx0qFTv(Fk7E~$;2J*43B>F%-Kz$HJBlfGlvXko3mma^F3M%S93J34#Mx1g#n_e&SC|j&gPM)wq{xX5mMWbzejpLP+nM)Y!P` zv_pBhlo&#E$Hi=-0|t6lIX53;o;O_iqfp8RKCoo+GYd$5YXkZ5jOop!1;`ErnG@aY z?&oMTJhJ6k8nVN^v7AS$`7qV(`D7v&V}TOtsV}y{B_Ldh?lyL}FhXTz0Hh->AM z-fend`;gX-6oVE6CjKFtF)W*USkWe>Pf3-O??HYDvw-cf=d%FrW$gUtM|X8?fxV3J zGf!n9si+Fb;s%&1I7aki&z@_EwegxX&JU~|Ipgu7{Vk<`8Wd|!3qAVN^nPUH*qWD? zke4y+t$6d0dYaHsLg!9!p5^VU2R0nyU0**B2}^E`gmTgC6BAjg2B&Pz{2@q7%uV_u z7lGO)KpC2&6295TThRp7m90$@L(2=Kv(5`Qid4#u>M^_|RP!xo$tv?}(gdL>+!E7d z8hY?a#iC=GKw+8WnSyHbr!Txlq;=*A&CD=1e zRR_ZoSX&DANp&UC9%qogMj@gui*3k=XVS~qtXf*N)opig4$OQd9rwf-Jq00V$jgWf zuR?Oy9*jLTxvaBMNBuL9mLtpVhx1HrlbOHY+y2Fq{&|+CT|)fz$yJ|r9F|#<2R?7A zHn^&&0RCVz_OzMrE4VgGul+`Yh(d3j{wEs(o2E=;ym89Zzby+HH9gjq94iK`KM&D% z*@vcHnh6B%anvHVVTYWeE)6H{(|+`GCwS{*kQ2u2zM~N(-m-R9@*nJ-UOJNR2`VHC zzo2Go+bGU{!Hu-ep4z1~wBW8#*E}l-UES3*wD8+FWDA`3Ftccbno97Zj}XK7+xHDI zHF;d*7c)(nKW^dAU5X5#z|}d ziG-(5ZD;I-u2LEvN4Z5PjE{Fbd)^cIlS-ICaQ@{$$a?Ow)y_RJA|79#5Mp6W5XtjH zlY%RyK&bgCx^CEDQq%nJ8lZQ(?Z5)r6b{7I@zk7Z0vUhFP5nROzAleyy9n`{ zUmU;20su8uPyVW)^WlGx89Eaokv22nCGLqO7LGRXduaCiduaA9Edzx~?GvVDIg~`S zZrgPj$N$hEa3R&Y)|?=uTor<>8pT8XWG`c1C*_|39q_HwWi+c;DlIjv2VVze!vF?^ zzsEZ3evhFNu`q69hPi9hTR>xxYOg#;;_d73UuJdO5L%@zr!}S&VTF+r9q0(G2$Gf-cz)Ej5=>5LaeKv5f zK=TdI_g@S}&l)ifFFmz^(|oD0>`ARtn419Z`Hz&p%Ku?Vinn1OZc%2Tf0H>q37W6o zfUOAN?#nQFj|8Ou`@N1AMY|c@#qo=n6kN=_Gf_c;_G3ei0?7-ets3p~dY(}(ATMuY z7TP=wwd^tJ`Ren}FE69HuXDeF;anz=GYsMk8J14lJGQw?wgA+{;eUg=oLe|4?mOZ$ zrQ3fS9!e6?9DJQx@qJb+WP$)(Y+W8CUq^_qnib@c4SZR3rMbJQAYG_g1J!D9f?ylH z*s=}k&ATyFJUvz%zx*GcJ|r?4_`leCvdgXUW7#EF&s@!MuJMJI3V!QH&n@Uj z7uy1edO8TYO)98p?++wmlKnji1TauF4#MB#2D>a5DS5h}ALw%{atq`wUL8*5hRbtg z|Ikb=O0;KDvY>+m^!Nb=0a$6-f_VAA=GS2T^zbp3`({qo{o4BL*RLRfIi?J3tq1eW zyO)7k7-(4A0(*6wU>Rd4N(ulANDYq>)>S=fS~hJTon{^G4K7{KZrCuLXpaO%Wo|(! z!hQy0OcjTWqEf7U>{8VhUd0Q_T@4DR${!FC5yeWM?#VA z$I4MiM`fOOKML{sP^4Y2<08mu*BiqQ_I~p;D_NOAuKQoHFi`yI?G+A1)0YZGmCsXU zX*2}4Erew+)nGz^8&!(<6@iyqK&A=KbT(?MO2wkB`XgoF(zs3D)H@h{CRUusMC57H z!zU4pN~lrA3BQ1!ia!|XJ{#Lg(0T#MLI7#E@y@fc#MG4^3Dm!`bc8-HQq08ge*D~h z@Y>86{w^m1`JS~vPZeBYi+?tXVl7qhUiju$#w;{e|9$qPTr>)l@^V}u_Qd0y>&{d(qkbE5W=ksc0|_26ebg^jCa18

9E1n0SHAP2;r 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 From 986fb0f7a1c1cdf46f38e8d73ef78aec3318b15b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 16 May 2024 01:00:29 +0200 Subject: [PATCH 104/219] Start implementing support for key commitment (incl. for the AD) In order to do so, we output two AES blocks (256 bits) right after initialization, prior to absorbing the AD. This commitment is assumed to be send/stored/verified along with the authentication tag. It is not a replacement for that tag. Both need to be verified, hence it is reasonable for the commitment size to match the key size and not twice its size. --- src/aegis128l/aegis128l.c | 29 ++++++++++++++++++++++++++ src/include/aegis128l.h | 43 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 441194c..6a86659 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -180,6 +180,35 @@ aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } +int +aegis128l_mac_init_with_commitment(aegis128l_state *st_, uint8_t *kc, const uint8_t *k) +{ + uint8_t out[32] = { 0 }; + size_t written; + + aegis128l_mac_init(st_, k); + aegis128l_state_encrypt_update(st_, out, sizeof out, &written, out, sizeof out); + if (written != sizeof out) { + return -1; + } + memcpy(kc, out, aegis128l_COMMITBYTES); + + return 0; +} + +int +aegis128l_mac_init_verify_commitment(aegis128l_state *st_, const uint8_t *kc, const uint8_t *k) +{ + uint8_t expeted_kc[aegis128l_COMMITBYTES]; + + if (aegis128l_mac_init_with_commitment(st_, expeted_kc, k) != 0) { + return -1; + } + + COMPILER_ASSERT(aegis128l_COMMITBYTES == 16); + return aegis_verify_16(expeted_kc, kc); +} + int aegis128l_mac_update(aegis128l_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 40790f2..74492b8 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -20,6 +20,9 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis128l_ABYTES_MAX 32 +/* The AEGIS commitment size, in bytes */ +#define aegis128l_COMMITBYTES aegis128l_KEYBYTES + /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -269,6 +272,46 @@ void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen */ void aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k); +/* + * Initialize a state for generating a MAC, with key commitment. + * + * st_: state to initialize + * kc: key commitment output buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis128l_mac_state_clone()`. + */ +int aegis128l_mac_init_with_commitment(aegis128l_state *st_, uint8_t *kc, const uint8_t *k); + +/* + * Initialize a state for verifying a MAC with key commitment. + * + * st_: state to initialize + * kc: key commitment input buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to verify multiple MACs by cloning it + * with `aegis128l_mac_state_clone()`. + * + * Returns 0 if the key commitment matches, -1 otherwise. + */ +int aegis128l_mac_init_verify_commitment(aegis128l_state *st_, const uint8_t *kc, const uint8_t *k); + /* * Update the MAC state with input data. * From 62ddd2497bc8d707dbd8c0db8afc2ebe79c145a5 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 21 May 2024 10:27:20 +0200 Subject: [PATCH 105/219] Add support for MAC with key commitment everywhere --- src/aegis128l/aegis128l.c | 6 +-- src/aegis128x2/aegis128x2.c | 29 ++++++++++++++ src/aegis128x4/aegis128x4.c | 29 ++++++++++++++ src/aegis256/aegis256.c | 28 +++++++++++++ src/aegis256x2/aegis256x2.c | 28 +++++++++++++ src/aegis256x4/aegis256x4.c | 28 +++++++++++++ src/include/aegis128l.h | 80 ++++++++++++++++++------------------- src/include/aegis128x2.h | 44 ++++++++++++++++++++ src/include/aegis128x4.h | 44 ++++++++++++++++++++ src/include/aegis256.h | 43 ++++++++++++++++++++ src/include/aegis256x2.h | 44 ++++++++++++++++++++ src/include/aegis256x4.h | 44 ++++++++++++++++++++ src/test/main.zig | 52 ++++++++++++++++++++++++ 13 files changed, 456 insertions(+), 43 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 6a86659..91f0d71 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -199,14 +199,14 @@ aegis128l_mac_init_with_commitment(aegis128l_state *st_, uint8_t *kc, const uint int aegis128l_mac_init_verify_commitment(aegis128l_state *st_, const uint8_t *kc, const uint8_t *k) { - uint8_t expeted_kc[aegis128l_COMMITBYTES]; + uint8_t expected_kc[aegis128l_COMMITBYTES]; - if (aegis128l_mac_init_with_commitment(st_, expeted_kc, k) != 0) { + if (aegis128l_mac_init_with_commitment(st_, expected_kc, k) != 0) { return -1; } COMPILER_ASSERT(aegis128l_COMMITBYTES == 16); - return aegis_verify_16(expeted_kc, kc); + return aegis_verify_16(expected_kc, kc); } int diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index c121d4b..631da2a 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -181,6 +181,35 @@ aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } +int +aegis128x2_mac_init_with_commitment(aegis128x2_state *st_, uint8_t *kc, const uint8_t *k) +{ + uint8_t out[32] = { 0 }; + size_t written; + + aegis128x2_mac_init(st_, k); + aegis128x2_state_encrypt_update(st_, out, sizeof out, &written, out, sizeof out); + if (written != sizeof out) { + return -1; + } + memcpy(kc, out, aegis128x2_COMMITBYTES); + + return 0; +} + +int +aegis128x2_mac_init_verify_commitment(aegis128x2_state *st_, const uint8_t *kc, const uint8_t *k) +{ + uint8_t expected_kc[aegis128x2_COMMITBYTES]; + + if (aegis128x2_mac_init_with_commitment(st_, expected_kc, k) != 0) { + return -1; + } + + COMPILER_ASSERT(aegis128x2_COMMITBYTES == 16); + return aegis_verify_16(expected_kc, kc); +} + int aegis128x2_mac_update(aegis128x2_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index 2c24895..2297e1e 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -182,6 +182,35 @@ aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } +int +aegis128x4_mac_init_with_commitment(aegis128x4_state *st_, uint8_t *kc, const uint8_t *k) +{ + uint8_t out[32] = { 0 }; + size_t written; + + aegis128x4_mac_init(st_, k); + aegis128x4_state_encrypt_update(st_, out, sizeof out, &written, out, sizeof out); + if (written != sizeof out) { + return -1; + } + memcpy(kc, out, aegis128x4_COMMITBYTES); + + return 0; +} + +int +aegis128x4_mac_init_verify_commitment(aegis128x4_state *st_, const uint8_t *kc, const uint8_t *k) +{ + uint8_t expected_kc[aegis128x4_COMMITBYTES]; + + if (aegis128x4_mac_init_with_commitment(st_, expected_kc, k) != 0) { + return -1; + } + + COMPILER_ASSERT(aegis128x4_COMMITBYTES == 16); + return aegis_verify_16(expected_kc, kc); +} + int aegis128x4_mac_update(aegis128x4_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index fa4da72..bfbc472 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -180,6 +180,34 @@ aegis256_mac_init(aegis256_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } +int +aegis256_mac_init_with_commitment(aegis256_state *st_, uint8_t *kc, const uint8_t *k) +{ + size_t written; + + memset(kc, 0, aegis256_COMMITBYTES); + aegis256_mac_init(st_, k); + aegis256_state_encrypt_update(st_, kc, aegis256_COMMITBYTES, &written, kc, + aegis256_COMMITBYTES); + if (written != aegis256_COMMITBYTES) { + return -1; + } + return 0; +} + +int +aegis256_mac_init_verify_commitment(aegis256_state *st_, const uint8_t *kc, const uint8_t *k) +{ + uint8_t expected_kc[aegis256_COMMITBYTES]; + + if (aegis256_mac_init_with_commitment(st_, expected_kc, k) != 0) { + return -1; + } + + COMPILER_ASSERT(aegis256_COMMITBYTES == 32); + return aegis_verify_32(expected_kc, kc); +} + int aegis256_mac_update(aegis256_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index 0a3affb..c80a426 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -181,6 +181,34 @@ aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } +int +aegis256x2_mac_init_with_commitment(aegis256x2_state *st_, uint8_t *kc, const uint8_t *k) +{ + size_t written; + + memset(kc, 0, aegis256x2_COMMITBYTES); + aegis256x2_mac_init(st_, k); + aegis256x2_state_encrypt_update(st_, kc, aegis256x2_COMMITBYTES, &written, kc, + aegis256x2_COMMITBYTES); + if (written != aegis256x2_COMMITBYTES) { + return -1; + } + return 0; +} + +int +aegis256x2_mac_init_verify_commitment(aegis256x2_state *st_, const uint8_t *kc, const uint8_t *k) +{ + uint8_t expected_kc[aegis256x2_COMMITBYTES]; + + if (aegis256x2_mac_init_with_commitment(st_, expected_kc, k) != 0) { + return -1; + } + + COMPILER_ASSERT(aegis256x2_COMMITBYTES == 32); + return aegis_verify_32(expected_kc, kc); +} + int aegis256x2_mac_update(aegis256x2_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index 98d3eae..d94e716 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -182,6 +182,34 @@ aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } +int +aegis256x4_mac_init_with_commitment(aegis256x4_state *st_, uint8_t *kc, const uint8_t *k) +{ + size_t written; + + memset(kc, 0, aegis256x4_COMMITBYTES); + aegis256x4_mac_init(st_, k); + aegis256x4_state_encrypt_update(st_, kc, aegis256x4_COMMITBYTES, &written, kc, + aegis256x4_COMMITBYTES); + if (written != aegis256x4_COMMITBYTES) { + return -1; + } + return 0; +} + +int +aegis256x4_mac_init_verify_commitment(aegis256x4_state *st_, const uint8_t *kc, const uint8_t *k) +{ + uint8_t expected_kc[aegis256x4_COMMITBYTES]; + + if (aegis256x4_mac_init_with_commitment(st_, expected_kc, k) != 0) { + return -1; + } + + COMPILER_ASSERT(aegis256x4_COMMITBYTES == 32); + return aegis_verify_32(expected_kc, kc); +} + int aegis256x4_mac_update(aegis256x4_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 74492b8..d9a91da 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -272,46 +272,6 @@ void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen */ void aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k); -/* - * Initialize a state for generating a MAC, with key commitment. - * - * st_: state to initialize - * kc: key commitment output buffer (16 bytes) - * k: key input buffer (16 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis128l_mac_state_clone()`. - */ -int aegis128l_mac_init_with_commitment(aegis128l_state *st_, uint8_t *kc, const uint8_t *k); - -/* - * Initialize a state for verifying a MAC with key commitment. - * - * st_: state to initialize - * kc: key commitment input buffer (16 bytes) - * k: key input buffer (16 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to verify multiple MACs by cloning it - * with `aegis128l_mac_state_clone()`. - * - * Returns 0 if the key commitment matches, -1 otherwise. - */ -int aegis128l_mac_init_verify_commitment(aegis128l_state *st_, const uint8_t *kc, const uint8_t *k); - /* * Update the MAC state with input data. * @@ -355,6 +315,46 @@ int aegis128l_mac_verify(aegis128l_state *st_, const uint8_t *mac, size_t maclen */ void aegis128l_mac_state_clone(aegis128l_state *dst, const aegis128l_state *src); +/* + * Initialize a state for generating a MAC, with key commitment. + * + * st_: state to initialize + * kc: key commitment output buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis128l_mac_state_clone()`. + */ +int aegis128l_mac_init_with_commitment(aegis128l_state *st_, uint8_t *kc, const uint8_t *k); + +/* + * Initialize a state for verifying a MAC with key commitment. + * + * st_: state to initialize + * kc: key commitment input buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to verify multiple MACs by cloning it + * with `aegis128l_mac_state_clone()`. + * + * Returns 0 if the key commitment matches, -1 otherwise. + */ +int aegis128l_mac_init_verify_commitment(aegis128l_state *st_, const uint8_t *kc, const uint8_t *k); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 20c951b..1f77755 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -20,6 +20,9 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis128x2_ABYTES_MAX 32 +/* The AEGIS commitment size, in bytes */ +#define aegis128x2_COMMITBYTES aegis128x2_KEYBYTES + /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -312,6 +315,47 @@ int aegis128x2_mac_verify(aegis128x2_state *st_, const uint8_t *mac, size_t macl */ void aegis128x2_mac_state_clone(aegis128x2_state *dst, const aegis128x2_state *src); +/* + * Initialize a state for generating a MAC, with key commitment. + * + * st_: state to initialize + * kc: key commitment output buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis128x2_mac_state_clone()`. + */ +int aegis128x2_mac_init_with_commitment(aegis128x2_state *st_, uint8_t *kc, const uint8_t *k); + +/* + * Initialize a state for verifying a MAC with key commitment. + * + * st_: state to initialize + * kc: key commitment input buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to verify multiple MACs by cloning it + * with `aegis128x2_mac_state_clone()`. + * + * Returns 0 if the key commitment matches, -1 otherwise. + */ +int aegis128x2_mac_init_verify_commitment(aegis128x2_state *st_, const uint8_t *kc, + const uint8_t *k); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index de4e2fe..3453b23 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -20,6 +20,9 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis128x4_ABYTES_MAX 32 +/* The AEGIS commitment size, in bytes */ +#define aegis128x4_COMMITBYTES aegis128x4_KEYBYTES + /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -312,6 +315,47 @@ int aegis128x4_mac_verify(aegis128x4_state *st_, const uint8_t *mac, size_t macl */ void aegis128x4_mac_state_clone(aegis128x4_state *dst, const aegis128x4_state *src); +/* + * Initialize a state for generating a MAC, with key commitment. + * + * st_: state to initialize + * kc: key commitment output buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis128x4_mac_state_clone()`. + */ +int aegis128x4_mac_init_with_commitment(aegis128x4_state *st_, uint8_t *kc, const uint8_t *k); + +/* + * Initialize a state for verifying a MAC with key commitment. + * + * st_: state to initialize + * kc: key commitment input buffer (16 bytes) + * k: key input buffer (16 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to verify multiple MACs by cloning it + * with `aegis128x4_mac_state_clone()`. + * + * Returns 0 if the key commitment matches, -1 otherwise. + */ +int aegis128x4_mac_init_verify_commitment(aegis128x4_state *st_, const uint8_t *kc, + const uint8_t *k); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis256.h b/src/include/aegis256.h index fce99ef..f4c4299 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -20,6 +20,9 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis256_ABYTES_MAX 32 +/* The AEGIS commitment size, in bytes */ +#define aegis256_COMMITBYTES aegis256_KEYBYTES + /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -312,6 +315,46 @@ int aegis256_mac_verify(aegis256_state *st_, const uint8_t *mac, size_t maclen); */ void aegis256_mac_state_clone(aegis256_state *dst, const aegis256_state *src); +/* + * Initialize a state for generating a MAC, with key commitment. + * + * st_: state to initialize + * kc: key commitment output buffer (32 bytes) + * k: key input buffer (32 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis256_mac_state_clone()`. + */ +int aegis256_mac_init_with_commitment(aegis256_state *st_, uint8_t *kc, const uint8_t *k); + +/* + * Initialize a state for verifying a MAC with key commitment. + * + * st_: state to initialize + * kc: key commitment input buffer (32 bytes) + * k: key input buffer (32 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to verify multiple MACs by cloning it + * with `aegis256_mac_state_clone()`. + * + * Returns 0 if the key commitment matches, -1 otherwise. + */ +int aegis256_mac_init_verify_commitment(aegis256_state *st_, const uint8_t *kc, const uint8_t *k); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index a77d511..22c182a 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -20,6 +20,9 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis256x2_ABYTES_MAX 32 +/* The AEGIS commitment size, in bytes */ +#define aegis256x2_COMMITBYTES aegis256x2_KEYBYTES + /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -312,6 +315,47 @@ int aegis256x2_mac_verify(aegis256x2_state *st_, const uint8_t *mac, size_t macl */ void aegis256x2_mac_state_clone(aegis256x2_state *dst, const aegis256x2_state *src); +/* + * Initialize a state for generating a MAC, with key commitment. + * + * st_: state to initialize + * kc: key commitment output buffer (32 bytes) + * k: key input buffer (32 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis256x2_mac_state_clone()`. + */ +int aegis256x2_mac_init_with_commitment(aegis256x2_state *st_, uint8_t *kc, const uint8_t *k); + +/* + * Initialize a state for verifying a MAC with key commitment. + * + * st_: state to initialize + * kc: key commitment input buffer (32 bytes) + * k: key input buffer (32 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to verify multiple MACs by cloning it + * with `aegis256x2_mac_state_clone()`. + * + * Returns 0 if the key commitment matches, -1 otherwise. + */ +int aegis256x2_mac_init_verify_commitment(aegis256x2_state *st_, const uint8_t *kc, + const uint8_t *k); + #ifdef __cplusplus } #endif diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index de19637..82d40f8 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -20,6 +20,9 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis256x4_ABYTES_MAX 32 +/* The AEGIS commitment size, in bytes */ +#define aegis256x4_COMMITBYTES aegis256x4_KEYBYTES + /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -312,6 +315,47 @@ int aegis256x4_mac_verify(aegis256x4_state *st_, const uint8_t *mac, size_t macl */ void aegis256x4_mac_state_clone(aegis256x4_state *dst, const aegis256x4_state *src); +/* + * Initialize a state for generating a MAC, with key commitment. + * + * st_: state to initialize + * kc: key commitment output buffer (32 bytes) + * k: key input buffer (32 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis256x4_mac_state_clone()`. + */ +int aegis256x4_mac_init_with_commitment(aegis256x4_state *st_, uint8_t *kc, const uint8_t *k); + +/* + * Initialize a state for verifying a MAC with key commitment. + * + * st_: state to initialize + * kc: key commitment input buffer (32 bytes) + * k: key input buffer (32 bytes) + * + * - The same key MUST NOT be used both for MAC and encryption. + * - The nonce is not used in the MAC mode (fixed to zero). + * - If the key is secret, the MAC is secure against forgery. + * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. + * + * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to verify multiple MACs by cloning it + * with `aegis256x4_mac_state_clone()`. + * + * Returns 0 if the key commitment matches, -1 otherwise. + */ +int aegis256x4_mac_init_verify_commitment(aegis256x4_state *st_, const uint8_t *kc, + const uint8_t *k); + #ifdef __cplusplus } #endif diff --git a/src/test/main.zig b/src/test/main.zig index 6a85e06..757a6fa 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -741,3 +741,55 @@ test "aegis128x4 - MAC" { try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, &mac, &mac2); } + +test "aegis128l MAC with key commitment" { + const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const msg = [_]u8{ 1, 2, 3 } ** 100; + var st: aegis.aegis128l_state = undefined; + + var kc: [aegis.aegis128l_COMMITBYTES]u8 = undefined; + var ret = aegis.aegis128l_mac_init_with_commitment(&st, &kc, &key); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + var mac: [16]u8 = undefined; + ret = aegis.aegis128l_mac_final(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + ret = aegis.aegis128l_mac_init_verify_commitment(&st, &kc, &key); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_verify(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + kc[0] ^= 0x01; + ret = aegis.aegis128l_mac_init_verify_commitment(&st, &kc, &key); + try testing.expectEqual(ret, -1); +} + +test "aegis256 MAC with key commitment" { + const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const msg = [_]u8{ 1, 2, 3 } ** 100; + var st: aegis.aegis256_state = undefined; + + var kc: [aegis.aegis256_COMMITBYTES]u8 = undefined; + var ret = aegis.aegis256_mac_init_with_commitment(&st, &kc, &key); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + var mac: [16]u8 = undefined; + ret = aegis.aegis256_mac_final(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + ret = aegis.aegis256_mac_init_verify_commitment(&st, &kc, &key); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256_mac_verify(&st, &mac, mac.len); + try testing.expectEqual(ret, 0); + + kc[0] ^= 0x01; + ret = aegis.aegis256_mac_init_verify_commitment(&st, &kc, &key); + try testing.expectEqual(ret, -1); +} From 851a0bbf9b76d7ccbaebf65ebb9f0e529b6c975e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 21 May 2024 10:28:06 +0200 Subject: [PATCH 106/219] Update doc --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f26e875..4508a1d 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,9 @@ Portable C implementations of the [AEGIS](https://datatracker.ietf.org/doc/draft - AEGIS-256 with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) - AEGIS-256X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) - AEGIS-256X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto) -- All variants of AEGIS-MAC, supporting incremental updates. +- All variants of AEGIS-MAC, supporting incremental updates and key commitment - Encryption and decryption with attached and detached tags -- Incremental encryption and decryption. +- Incremental encryption and decryption - Unauthenticated encryption and decryption (not recommended - only implemented for specific protocols) - Deterministic pseudorandom stream generation. From 9e1ded134b71fb2754e4cf768146a0aa216216a3 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 8 Jun 2024 20:41:00 +0200 Subject: [PATCH 107/219] Revert MAC key commitment API --- README.md | 4 +-- src/aegis128l/aegis128l.c | 29 --------------------- src/aegis128x2/aegis128x2.c | 29 --------------------- src/aegis128x4/aegis128x4.c | 29 --------------------- src/aegis256/aegis256.c | 28 -------------------- src/aegis256x2/aegis256x2.c | 28 -------------------- src/aegis256x4/aegis256x4.c | 28 -------------------- src/include/aegis128l.h | 43 ------------------------------ src/include/aegis128x2.h | 44 ------------------------------- src/include/aegis128x4.h | 44 ------------------------------- src/include/aegis256.h | 43 ------------------------------ src/include/aegis256x2.h | 44 ------------------------------- src/include/aegis256x4.h | 44 ------------------------------- src/test/main.zig | 52 ------------------------------------- 14 files changed, 2 insertions(+), 487 deletions(-) diff --git a/README.md b/README.md index 4508a1d..f26e875 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,9 @@ Portable C implementations of the [AEGIS](https://datatracker.ietf.org/doc/draft - AEGIS-256 with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) - AEGIS-256X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) - AEGIS-256X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto) -- All variants of AEGIS-MAC, supporting incremental updates and key commitment +- All variants of AEGIS-MAC, supporting incremental updates. - Encryption and decryption with attached and detached tags -- Incremental encryption and decryption +- Incremental encryption and decryption. - Unauthenticated encryption and decryption (not recommended - only implemented for specific protocols) - Deterministic pseudorandom stream generation. diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 91f0d71..441194c 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -180,35 +180,6 @@ aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } -int -aegis128l_mac_init_with_commitment(aegis128l_state *st_, uint8_t *kc, const uint8_t *k) -{ - uint8_t out[32] = { 0 }; - size_t written; - - aegis128l_mac_init(st_, k); - aegis128l_state_encrypt_update(st_, out, sizeof out, &written, out, sizeof out); - if (written != sizeof out) { - return -1; - } - memcpy(kc, out, aegis128l_COMMITBYTES); - - return 0; -} - -int -aegis128l_mac_init_verify_commitment(aegis128l_state *st_, const uint8_t *kc, const uint8_t *k) -{ - uint8_t expected_kc[aegis128l_COMMITBYTES]; - - if (aegis128l_mac_init_with_commitment(st_, expected_kc, k) != 0) { - return -1; - } - - COMPILER_ASSERT(aegis128l_COMMITBYTES == 16); - return aegis_verify_16(expected_kc, kc); -} - int aegis128l_mac_update(aegis128l_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index 631da2a..c121d4b 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -181,35 +181,6 @@ aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } -int -aegis128x2_mac_init_with_commitment(aegis128x2_state *st_, uint8_t *kc, const uint8_t *k) -{ - uint8_t out[32] = { 0 }; - size_t written; - - aegis128x2_mac_init(st_, k); - aegis128x2_state_encrypt_update(st_, out, sizeof out, &written, out, sizeof out); - if (written != sizeof out) { - return -1; - } - memcpy(kc, out, aegis128x2_COMMITBYTES); - - return 0; -} - -int -aegis128x2_mac_init_verify_commitment(aegis128x2_state *st_, const uint8_t *kc, const uint8_t *k) -{ - uint8_t expected_kc[aegis128x2_COMMITBYTES]; - - if (aegis128x2_mac_init_with_commitment(st_, expected_kc, k) != 0) { - return -1; - } - - COMPILER_ASSERT(aegis128x2_COMMITBYTES == 16); - return aegis_verify_16(expected_kc, kc); -} - int aegis128x2_mac_update(aegis128x2_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index 2297e1e..2c24895 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -182,35 +182,6 @@ aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } -int -aegis128x4_mac_init_with_commitment(aegis128x4_state *st_, uint8_t *kc, const uint8_t *k) -{ - uint8_t out[32] = { 0 }; - size_t written; - - aegis128x4_mac_init(st_, k); - aegis128x4_state_encrypt_update(st_, out, sizeof out, &written, out, sizeof out); - if (written != sizeof out) { - return -1; - } - memcpy(kc, out, aegis128x4_COMMITBYTES); - - return 0; -} - -int -aegis128x4_mac_init_verify_commitment(aegis128x4_state *st_, const uint8_t *kc, const uint8_t *k) -{ - uint8_t expected_kc[aegis128x4_COMMITBYTES]; - - if (aegis128x4_mac_init_with_commitment(st_, expected_kc, k) != 0) { - return -1; - } - - COMPILER_ASSERT(aegis128x4_COMMITBYTES == 16); - return aegis_verify_16(expected_kc, kc); -} - int aegis128x4_mac_update(aegis128x4_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index bfbc472..fa4da72 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -180,34 +180,6 @@ aegis256_mac_init(aegis256_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } -int -aegis256_mac_init_with_commitment(aegis256_state *st_, uint8_t *kc, const uint8_t *k) -{ - size_t written; - - memset(kc, 0, aegis256_COMMITBYTES); - aegis256_mac_init(st_, k); - aegis256_state_encrypt_update(st_, kc, aegis256_COMMITBYTES, &written, kc, - aegis256_COMMITBYTES); - if (written != aegis256_COMMITBYTES) { - return -1; - } - return 0; -} - -int -aegis256_mac_init_verify_commitment(aegis256_state *st_, const uint8_t *kc, const uint8_t *k) -{ - uint8_t expected_kc[aegis256_COMMITBYTES]; - - if (aegis256_mac_init_with_commitment(st_, expected_kc, k) != 0) { - return -1; - } - - COMPILER_ASSERT(aegis256_COMMITBYTES == 32); - return aegis_verify_32(expected_kc, kc); -} - int aegis256_mac_update(aegis256_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index c80a426..0a3affb 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -181,34 +181,6 @@ aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } -int -aegis256x2_mac_init_with_commitment(aegis256x2_state *st_, uint8_t *kc, const uint8_t *k) -{ - size_t written; - - memset(kc, 0, aegis256x2_COMMITBYTES); - aegis256x2_mac_init(st_, k); - aegis256x2_state_encrypt_update(st_, kc, aegis256x2_COMMITBYTES, &written, kc, - aegis256x2_COMMITBYTES); - if (written != aegis256x2_COMMITBYTES) { - return -1; - } - return 0; -} - -int -aegis256x2_mac_init_verify_commitment(aegis256x2_state *st_, const uint8_t *kc, const uint8_t *k) -{ - uint8_t expected_kc[aegis256x2_COMMITBYTES]; - - if (aegis256x2_mac_init_with_commitment(st_, expected_kc, k) != 0) { - return -1; - } - - COMPILER_ASSERT(aegis256x2_COMMITBYTES == 32); - return aegis_verify_32(expected_kc, kc); -} - int aegis256x2_mac_update(aegis256x2_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index d94e716..98d3eae 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -182,34 +182,6 @@ aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k) implementation->state_init(st_, NULL, 0, npub, k); } -int -aegis256x4_mac_init_with_commitment(aegis256x4_state *st_, uint8_t *kc, const uint8_t *k) -{ - size_t written; - - memset(kc, 0, aegis256x4_COMMITBYTES); - aegis256x4_mac_init(st_, k); - aegis256x4_state_encrypt_update(st_, kc, aegis256x4_COMMITBYTES, &written, kc, - aegis256x4_COMMITBYTES); - if (written != aegis256x4_COMMITBYTES) { - return -1; - } - return 0; -} - -int -aegis256x4_mac_init_verify_commitment(aegis256x4_state *st_, const uint8_t *kc, const uint8_t *k) -{ - uint8_t expected_kc[aegis256x4_COMMITBYTES]; - - if (aegis256x4_mac_init_with_commitment(st_, expected_kc, k) != 0) { - return -1; - } - - COMPILER_ASSERT(aegis256x4_COMMITBYTES == 32); - return aegis_verify_32(expected_kc, kc); -} - int aegis256x4_mac_update(aegis256x4_state *st_, const uint8_t *m, size_t mlen) { diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index d9a91da..40790f2 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -20,9 +20,6 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis128l_ABYTES_MAX 32 -/* The AEGIS commitment size, in bytes */ -#define aegis128l_COMMITBYTES aegis128l_KEYBYTES - /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -315,46 +312,6 @@ int aegis128l_mac_verify(aegis128l_state *st_, const uint8_t *mac, size_t maclen */ void aegis128l_mac_state_clone(aegis128l_state *dst, const aegis128l_state *src); -/* - * Initialize a state for generating a MAC, with key commitment. - * - * st_: state to initialize - * kc: key commitment output buffer (16 bytes) - * k: key input buffer (16 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis128l_mac_state_clone()`. - */ -int aegis128l_mac_init_with_commitment(aegis128l_state *st_, uint8_t *kc, const uint8_t *k); - -/* - * Initialize a state for verifying a MAC with key commitment. - * - * st_: state to initialize - * kc: key commitment input buffer (16 bytes) - * k: key input buffer (16 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to verify multiple MACs by cloning it - * with `aegis128l_mac_state_clone()`. - * - * Returns 0 if the key commitment matches, -1 otherwise. - */ -int aegis128l_mac_init_verify_commitment(aegis128l_state *st_, const uint8_t *kc, const uint8_t *k); - #ifdef __cplusplus } #endif diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 1f77755..20c951b 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -20,9 +20,6 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis128x2_ABYTES_MAX 32 -/* The AEGIS commitment size, in bytes */ -#define aegis128x2_COMMITBYTES aegis128x2_KEYBYTES - /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -315,47 +312,6 @@ int aegis128x2_mac_verify(aegis128x2_state *st_, const uint8_t *mac, size_t macl */ void aegis128x2_mac_state_clone(aegis128x2_state *dst, const aegis128x2_state *src); -/* - * Initialize a state for generating a MAC, with key commitment. - * - * st_: state to initialize - * kc: key commitment output buffer (16 bytes) - * k: key input buffer (16 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis128x2_mac_state_clone()`. - */ -int aegis128x2_mac_init_with_commitment(aegis128x2_state *st_, uint8_t *kc, const uint8_t *k); - -/* - * Initialize a state for verifying a MAC with key commitment. - * - * st_: state to initialize - * kc: key commitment input buffer (16 bytes) - * k: key input buffer (16 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to verify multiple MACs by cloning it - * with `aegis128x2_mac_state_clone()`. - * - * Returns 0 if the key commitment matches, -1 otherwise. - */ -int aegis128x2_mac_init_verify_commitment(aegis128x2_state *st_, const uint8_t *kc, - const uint8_t *k); - #ifdef __cplusplus } #endif diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index 3453b23..de4e2fe 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -20,9 +20,6 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis128x4_ABYTES_MAX 32 -/* The AEGIS commitment size, in bytes */ -#define aegis128x4_COMMITBYTES aegis128x4_KEYBYTES - /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -315,47 +312,6 @@ int aegis128x4_mac_verify(aegis128x4_state *st_, const uint8_t *mac, size_t macl */ void aegis128x4_mac_state_clone(aegis128x4_state *dst, const aegis128x4_state *src); -/* - * Initialize a state for generating a MAC, with key commitment. - * - * st_: state to initialize - * kc: key commitment output buffer (16 bytes) - * k: key input buffer (16 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis128x4_mac_state_clone()`. - */ -int aegis128x4_mac_init_with_commitment(aegis128x4_state *st_, uint8_t *kc, const uint8_t *k); - -/* - * Initialize a state for verifying a MAC with key commitment. - * - * st_: state to initialize - * kc: key commitment input buffer (16 bytes) - * k: key input buffer (16 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to verify multiple MACs by cloning it - * with `aegis128x4_mac_state_clone()`. - * - * Returns 0 if the key commitment matches, -1 otherwise. - */ -int aegis128x4_mac_init_verify_commitment(aegis128x4_state *st_, const uint8_t *kc, - const uint8_t *k); - #ifdef __cplusplus } #endif diff --git a/src/include/aegis256.h b/src/include/aegis256.h index f4c4299..fce99ef 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -20,9 +20,6 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis256_ABYTES_MAX 32 -/* The AEGIS commitment size, in bytes */ -#define aegis256_COMMITBYTES aegis256_KEYBYTES - /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -315,46 +312,6 @@ int aegis256_mac_verify(aegis256_state *st_, const uint8_t *mac, size_t maclen); */ void aegis256_mac_state_clone(aegis256_state *dst, const aegis256_state *src); -/* - * Initialize a state for generating a MAC, with key commitment. - * - * st_: state to initialize - * kc: key commitment output buffer (32 bytes) - * k: key input buffer (32 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis256_mac_state_clone()`. - */ -int aegis256_mac_init_with_commitment(aegis256_state *st_, uint8_t *kc, const uint8_t *k); - -/* - * Initialize a state for verifying a MAC with key commitment. - * - * st_: state to initialize - * kc: key commitment input buffer (32 bytes) - * k: key input buffer (32 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to verify multiple MACs by cloning it - * with `aegis256_mac_state_clone()`. - * - * Returns 0 if the key commitment matches, -1 otherwise. - */ -int aegis256_mac_init_verify_commitment(aegis256_state *st_, const uint8_t *kc, const uint8_t *k); - #ifdef __cplusplus } #endif diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index 22c182a..a77d511 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -20,9 +20,6 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis256x2_ABYTES_MAX 32 -/* The AEGIS commitment size, in bytes */ -#define aegis256x2_COMMITBYTES aegis256x2_KEYBYTES - /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -315,47 +312,6 @@ int aegis256x2_mac_verify(aegis256x2_state *st_, const uint8_t *mac, size_t macl */ void aegis256x2_mac_state_clone(aegis256x2_state *dst, const aegis256x2_state *src); -/* - * Initialize a state for generating a MAC, with key commitment. - * - * st_: state to initialize - * kc: key commitment output buffer (32 bytes) - * k: key input buffer (32 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis256x2_mac_state_clone()`. - */ -int aegis256x2_mac_init_with_commitment(aegis256x2_state *st_, uint8_t *kc, const uint8_t *k); - -/* - * Initialize a state for verifying a MAC with key commitment. - * - * st_: state to initialize - * kc: key commitment input buffer (32 bytes) - * k: key input buffer (32 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to verify multiple MACs by cloning it - * with `aegis256x2_mac_state_clone()`. - * - * Returns 0 if the key commitment matches, -1 otherwise. - */ -int aegis256x2_mac_init_verify_commitment(aegis256x2_state *st_, const uint8_t *kc, - const uint8_t *k); - #ifdef __cplusplus } #endif diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index 82d40f8..de19637 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -20,9 +20,6 @@ extern "C" { /* The maximum length of an AEGIS authentication tag, in bytes */ #define aegis256x4_ABYTES_MAX 32 -/* The AEGIS commitment size, in bytes */ -#define aegis256x4_COMMITBYTES aegis256x4_KEYBYTES - /* * When using AEGIS in incremental mode, this is the maximum number * of leftover ciphertext bytes that can be returned at finalization. @@ -315,47 +312,6 @@ int aegis256x4_mac_verify(aegis256x4_state *st_, const uint8_t *mac, size_t macl */ void aegis256x4_mac_state_clone(aegis256x4_state *dst, const aegis256x4_state *src); -/* - * Initialize a state for generating a MAC, with key commitment. - * - * st_: state to initialize - * kc: key commitment output buffer (32 bytes) - * k: key input buffer (32 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis256x4_mac_state_clone()`. - */ -int aegis256x4_mac_init_with_commitment(aegis256x4_state *st_, uint8_t *kc, const uint8_t *k); - -/* - * Initialize a state for verifying a MAC with key commitment. - * - * st_: state to initialize - * kc: key commitment input buffer (32 bytes) - * k: key input buffer (32 bytes) - * - * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). - * - If the key is secret, the MAC is secure against forgery. - * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. - * - * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to verify multiple MACs by cloning it - * with `aegis256x4_mac_state_clone()`. - * - * Returns 0 if the key commitment matches, -1 otherwise. - */ -int aegis256x4_mac_init_verify_commitment(aegis256x4_state *st_, const uint8_t *kc, - const uint8_t *k); - #ifdef __cplusplus } #endif diff --git a/src/test/main.zig b/src/test/main.zig index 757a6fa..6a85e06 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -741,55 +741,3 @@ test "aegis128x4 - MAC" { try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, &mac, &mac2); } - -test "aegis128l MAC with key commitment" { - const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - const msg = [_]u8{ 1, 2, 3 } ** 100; - var st: aegis.aegis128l_state = undefined; - - var kc: [aegis.aegis128l_COMMITBYTES]u8 = undefined; - var ret = aegis.aegis128l_mac_init_with_commitment(&st, &kc, &key); - try testing.expectEqual(ret, 0); - ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); - try testing.expectEqual(ret, 0); - var mac: [16]u8 = undefined; - ret = aegis.aegis128l_mac_final(&st, &mac, mac.len); - try testing.expectEqual(ret, 0); - - ret = aegis.aegis128l_mac_init_verify_commitment(&st, &kc, &key); - try testing.expectEqual(ret, 0); - ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); - try testing.expectEqual(ret, 0); - ret = aegis.aegis128l_mac_verify(&st, &mac, mac.len); - try testing.expectEqual(ret, 0); - - kc[0] ^= 0x01; - ret = aegis.aegis128l_mac_init_verify_commitment(&st, &kc, &key); - try testing.expectEqual(ret, -1); -} - -test "aegis256 MAC with key commitment" { - const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - const msg = [_]u8{ 1, 2, 3 } ** 100; - var st: aegis.aegis256_state = undefined; - - var kc: [aegis.aegis256_COMMITBYTES]u8 = undefined; - var ret = aegis.aegis256_mac_init_with_commitment(&st, &kc, &key); - try testing.expectEqual(ret, 0); - ret = aegis.aegis256_mac_update(&st, &msg, msg.len); - try testing.expectEqual(ret, 0); - var mac: [16]u8 = undefined; - ret = aegis.aegis256_mac_final(&st, &mac, mac.len); - try testing.expectEqual(ret, 0); - - ret = aegis.aegis256_mac_init_verify_commitment(&st, &kc, &key); - try testing.expectEqual(ret, 0); - ret = aegis.aegis256_mac_update(&st, &msg, msg.len); - try testing.expectEqual(ret, 0); - ret = aegis.aegis256_mac_verify(&st, &mac, mac.len); - try testing.expectEqual(ret, 0); - - kc[0] ^= 0x01; - ret = aegis.aegis256_mac_init_verify_commitment(&st, &kc, &key); - try testing.expectEqual(ret, -1); -} From ab74d30299436af767939de83c0c7dea89760a60 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 10 Jun 2024 00:18:45 +0200 Subject: [PATCH 108/219] Add a test with explicitly unaligned states --- src/test/main.zig | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/test/main.zig b/src/test/main.zig index 6a85e06..110f868 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -741,3 +741,52 @@ test "aegis128x4 - MAC" { try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, &mac, &mac2); } + +test "aegis128l - MAC with unaligned state" { + const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const msg = [_]u8{ 1, 2, 3 } ** 100; + const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100 ++ [_]u8{0}; + + const UnalignedState1 = struct { + pad: u8 = 0xd0, + x: aegis.aegis128l_state, + }; + const UnalignedState2 = struct { + pad: u16 = 0xd0, + x: aegis.aegis128l_state, + }; + + var st0: UnalignedState1 = undefined; + aegis.aegis128l_mac_init(&st0.x, &key); + + var st: UnalignedState2 = undefined; + aegis.aegis128l_mac_state_clone(&st.x, &st0.x); + var ret = aegis.aegis128l_mac_update(&st.x, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_update(&st.x, &msg2, msg2.len); + try testing.expectEqual(ret, 0); + var mac: [32]u8 = undefined; + ret = aegis.aegis128l_mac_final(&st.x, &mac, mac.len); + try testing.expectEqual(ret, 0); + + aegis.aegis128l_mac_state_clone(&st.x, &st0.x); + ret = aegis.aegis128l_mac_update(&st.x, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_update(&st.x, &msg2, msg2.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_verify(&st.x, &mac, mac.len); + try testing.expectEqual(ret, 0); + + aegis.aegis128l_mac_state_clone(&st.x, &st0.x); + const msg3 = msg ++ msg2; + ret = aegis.aegis128l_mac_update(&st.x, &msg3, msg3.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_verify(&st.x, &mac, mac.len); + try testing.expectEqual(ret, 0); + + const nonce = [_]u8{0} ** 16; + var mac2: [mac.len]u8 = undefined; + ret = aegis.aegis128l_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); + try testing.expectEqual(ret, 0); + try testing.expectEqualSlices(u8, &mac, &mac2); +} From f0d47311f4ba88df883b34a83ec40e56c3d2b5d5 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 10 Jun 2024 10:00:01 +0200 Subject: [PATCH 109/219] Move CRYPTO_ALIGN definition to aegis.h --- src/include/aegis.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/include/aegis.h b/src/include/aegis.h index 5bca273..360097c 100644 --- a/src/include/aegis.h +++ b/src/include/aegis.h @@ -10,6 +10,16 @@ # define __attribute__(a) #endif +#ifndef CRYPTO_ALIGN +# if defined(__INTEL_COMPILER) || defined(_MSC_VER) +# define CRYPTO_ALIGN(x) __declspec(align(x)) +# elif defined(__GNUC__) || defined(__clang__) +# define CRYPTO_ALIGN(x) __attribute__((aligned(x))) +# else +# define CRYPTO_ALIGN(x) +# endif +#endif + #include "aegis128l.h" #include "aegis128x2.h" #include "aegis128x4.h" From 82564614039bc8869f20539f094644479cfde7a2 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 10 Jun 2024 10:13:22 +0200 Subject: [PATCH 110/219] Make the distinction between the state alignment and the rate --- src/aegis128l/aegis128l_common.h | 96 +++++++++++++++++------------- src/aegis128x2/aegis128x2_common.h | 96 +++++++++++++++++------------- src/aegis128x4/aegis128x4_common.h | 96 +++++++++++++++++------------- src/aegis256/aegis256_common.h | 96 +++++++++++++++++------------- src/aegis256x2/aegis256x2_common.h | 96 +++++++++++++++++------------- src/aegis256x4/aegis256x4_common.h | 96 +++++++++++++++++------------- src/include/aegis.h | 4 +- src/include/aegis128l.h | 2 +- src/include/aegis128x2.h | 2 +- src/include/aegis128x4.h | 2 +- src/include/aegis256.h | 2 +- src/include/aegis256x2.h | 2 +- src/include/aegis256x4.h | 2 +- 13 files changed, 325 insertions(+), 267 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 5075dae..74d98f7 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -1,4 +1,5 @@ -#define RATE 32 +#define RATE 32 +#define ALIGNMENT 32 static void aegis128l_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) @@ -145,10 +146,10 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis128l_init(k, npub, state); @@ -179,13 +180,13 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - const size_t mlen = clen; - size_t i; - int ret; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; aegis128l_init(k, npub, state); @@ -231,10 +232,10 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; memset(src, 0, sizeof src); if (npub == NULL) { @@ -256,10 +257,10 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis128l_init(k, npub, state); @@ -305,10 +306,11 @@ state_init(aegis128l_state *st_, const uint8_t *ad, size_t adlen, const uint8_t const uint8_t *k) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; - COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; @@ -329,7 +331,8 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * const uint8_t *m, size_t mlen) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; @@ -359,7 +362,7 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * return 0; } } - if (clen_max < (mlen & ~(size_t) (RATE - 1))) { + if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { errno = ERANGE; return -1; } @@ -380,9 +383,10 @@ state_encrypt_detached_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, uint8_t *mac, size_t maclen) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos) { @@ -407,9 +411,10 @@ state_encrypt_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *w size_t maclen) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos + maclen) { @@ -434,10 +439,11 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, const uint8_t *c, size_t clen) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i = 0; - size_t left; + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i = 0; + size_t left; *written = 0; st->mlen += clen; @@ -495,10 +501,11 @@ static int state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + _aegis128l_state *const st = + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); int ret; *written = 0; @@ -532,7 +539,8 @@ static int state_mac_update(aegis128l_state *st_, const uint8_t *ad, size_t adlen) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -574,7 +582,8 @@ static int state_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) { _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; left = st->adlen % RATE; @@ -591,9 +600,10 @@ static void state_clone(aegis128l_state *dst, const aegis128l_state *src) { _aegis128l_state *const dst_ = - (_aegis128l_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128l_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); const _aegis128l_state *const src_ = - (const _aegis128l_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & - ~(uintptr_t) (RATE - 1)); + (const _aegis128l_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 144e271..4548651 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -1,4 +1,5 @@ -#define RATE 64 +#define RATE 64 +#define ALIGNMENT 64 static void aegis128x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) @@ -178,10 +179,10 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis128x2_init(k, npub, state); @@ -212,13 +213,13 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - const size_t mlen = clen; - size_t i; - int ret; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; aegis128x2_init(k, npub, state); @@ -264,10 +265,10 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; memset(src, 0, sizeof src); if (npub == NULL) { @@ -289,10 +290,10 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis128x2_init(k, npub, state); @@ -338,10 +339,11 @@ state_init(aegis128x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t const uint8_t *k) { _aegis128x2_state *const st = - (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; - COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; @@ -362,7 +364,8 @@ state_encrypt_update(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t const uint8_t *m, size_t mlen) { _aegis128x2_state *const st = - (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; @@ -392,7 +395,7 @@ state_encrypt_update(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t return 0; } } - if (clen_max < (mlen & ~(size_t) (RATE - 1))) { + if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { errno = ERANGE; return -1; } @@ -413,9 +416,10 @@ state_encrypt_detached_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, uint8_t *mac, size_t maclen) { _aegis128x2_state *const st = - (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos) { @@ -440,9 +444,10 @@ state_encrypt_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t * size_t maclen) { _aegis128x2_state *const st = - (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos + maclen) { @@ -467,10 +472,11 @@ state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max const uint8_t *c, size_t clen) { _aegis128x2_state *const st = - (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i = 0; - size_t left; + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i = 0; + size_t left; *written = 0; st->mlen += clen; @@ -529,10 +535,11 @@ static int state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - _aegis128x2_state *const st = - (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + _aegis128x2_state *const st = + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); int ret; *written = 0; @@ -566,7 +573,8 @@ static int state_mac_update(aegis128x2_state *st_, const uint8_t *ad, size_t adlen) { _aegis128x2_state *const st = - (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -608,7 +616,8 @@ static int state_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen) { _aegis128x2_state *const st = - (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; left = st->adlen % RATE; @@ -625,9 +634,10 @@ static void state_clone(aegis128x2_state *dst, const aegis128x2_state *src) { _aegis128x2_state *const dst_ = - (_aegis128x2_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128x2_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); const _aegis128x2_state *const src_ = - (const _aegis128x2_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & - ~(uintptr_t) (RATE - 1)); + (const _aegis128x2_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index dd38ac6..03c7d05 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -1,4 +1,5 @@ -#define RATE 128 +#define RATE 128 +#define ALIGNMENT 64 static void aegis128x4_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) @@ -193,10 +194,10 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis128x4_init(k, npub, state); @@ -227,13 +228,13 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - const size_t mlen = clen; - size_t i; - int ret; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; aegis128x4_init(k, npub, state); @@ -279,10 +280,10 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; memset(src, 0, sizeof src); if (npub == NULL) { @@ -304,10 +305,10 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[8]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis128x4_init(k, npub, state); @@ -353,10 +354,11 @@ state_init(aegis128x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t const uint8_t *k) { _aegis128x4_state *const st = - (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; - COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; @@ -377,7 +379,8 @@ state_encrypt_update(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t const uint8_t *m, size_t mlen) { _aegis128x4_state *const st = - (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; @@ -407,7 +410,7 @@ state_encrypt_update(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t return 0; } } - if (clen_max < (mlen & ~(size_t) (RATE - 1))) { + if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { errno = ERANGE; return -1; } @@ -428,9 +431,10 @@ state_encrypt_detached_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, uint8_t *mac, size_t maclen) { _aegis128x4_state *const st = - (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos) { @@ -455,9 +459,10 @@ state_encrypt_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t * size_t maclen) { _aegis128x4_state *const st = - (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos + maclen) { @@ -482,10 +487,11 @@ state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max const uint8_t *c, size_t clen) { _aegis128x4_state *const st = - (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i = 0; - size_t left; + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i = 0; + size_t left; *written = 0; st->mlen += clen; @@ -544,10 +550,11 @@ static int state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - _aegis128x4_state *const st = - (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + _aegis128x4_state *const st = + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); int ret; *written = 0; @@ -581,7 +588,8 @@ static int state_mac_update(aegis128x4_state *st_, const uint8_t *ad, size_t adlen) { _aegis128x4_state *const st = - (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -623,7 +631,8 @@ static int state_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen) { _aegis128x4_state *const st = - (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; left = st->adlen % RATE; @@ -640,9 +649,10 @@ static void state_clone(aegis128x4_state *dst, const aegis128x4_state *src) { _aegis128x4_state *const dst_ = - (_aegis128x4_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis128x4_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); const _aegis128x4_state *const src_ = - (const _aegis128x4_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & - ~(uintptr_t) (RATE - 1)); + (const _aegis128x4_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 6131b42..515709f 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -1,4 +1,5 @@ -#define RATE 16 +#define RATE 16 +#define ALIGNMENT 16 static void aegis256_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) @@ -130,10 +131,10 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis256_init(k, npub, state); @@ -164,13 +165,13 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - const size_t mlen = clen; - size_t i; - int ret; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; aegis256_init(k, npub, state); @@ -216,10 +217,10 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; memset(src, 0, sizeof src); if (npub == NULL) { @@ -241,10 +242,10 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis256_init(k, npub, state); @@ -290,10 +291,11 @@ state_init(aegis256_state *st_, const uint8_t *ad, size_t adlen, const uint8_t * const uint8_t *k) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; - COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; @@ -314,7 +316,8 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w const uint8_t *m, size_t mlen) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; @@ -344,7 +347,7 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w return 0; } } - if (clen_max < (mlen & ~(size_t) (RATE - 1))) { + if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { errno = ERANGE; return -1; } @@ -365,9 +368,10 @@ state_encrypt_detached_final(aegis256_state *st_, uint8_t *c, size_t clen_max, s uint8_t *mac, size_t maclen) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos) { @@ -392,9 +396,10 @@ state_encrypt_final(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *wr size_t maclen) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos + maclen) { @@ -419,10 +424,11 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, const uint8_t *c, size_t clen) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i = 0; - size_t left; + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i = 0; + size_t left; *written = 0; st->mlen += clen; @@ -481,10 +487,11 @@ static int state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + _aegis256_state *const st = + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); int ret; *written = 0; @@ -518,7 +525,8 @@ static int state_mac_update(aegis256_state *st_, const uint8_t *ad, size_t adlen) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -558,7 +566,8 @@ static int state_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen) { _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; left = st->adlen % RATE; @@ -575,9 +584,10 @@ static void state_clone(aegis256_state *dst, const aegis256_state *src) { _aegis256_state *const dst_ = - (_aegis256_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); const _aegis256_state *const src_ = - (const _aegis256_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & - ~(uintptr_t) (RATE - 1)); + (const _aegis256_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index 46a1f18..caa3ed5 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -1,4 +1,5 @@ -#define RATE 32 +#define RATE 32 +#define ALIGNMENT 32 static void aegis256x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) @@ -179,10 +180,10 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis256x2_init(k, npub, state); @@ -213,13 +214,13 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - const size_t mlen = clen; - size_t i; - int ret; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; aegis256x2_init(k, npub, state); @@ -265,10 +266,10 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; memset(src, 0, sizeof src); if (npub == NULL) { @@ -290,10 +291,10 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis256x2_init(k, npub, state); @@ -339,10 +340,11 @@ state_init(aegis256x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t const uint8_t *k) { _aegis256x2_state *const st = - (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; - COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; @@ -363,7 +365,8 @@ state_encrypt_update(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t const uint8_t *m, size_t mlen) { _aegis256x2_state *const st = - (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; @@ -393,7 +396,7 @@ state_encrypt_update(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t return 0; } } - if (clen_max < (mlen & ~(size_t) (RATE - 1))) { + if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { errno = ERANGE; return -1; } @@ -414,9 +417,10 @@ state_encrypt_detached_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, uint8_t *mac, size_t maclen) { _aegis256x2_state *const st = - (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos) { @@ -441,9 +445,10 @@ state_encrypt_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t * size_t maclen) { _aegis256x2_state *const st = - (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos + maclen) { @@ -468,10 +473,11 @@ state_decrypt_detached_update(aegis256x2_state *st_, uint8_t *m, size_t mlen_max const uint8_t *c, size_t clen) { _aegis256x2_state *const st = - (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i = 0; - size_t left; + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i = 0; + size_t left; *written = 0; st->mlen += clen; @@ -530,10 +536,11 @@ static int state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - _aegis256x2_state *const st = - (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + _aegis256x2_state *const st = + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); int ret; *written = 0; @@ -567,7 +574,8 @@ static int state_mac_update(aegis256x2_state *st_, const uint8_t *ad, size_t adlen) { _aegis256x2_state *const st = - (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -607,7 +615,8 @@ static int state_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen) { _aegis256x2_state *const st = - (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; left = st->adlen % RATE; @@ -624,9 +633,10 @@ static void state_clone(aegis256x2_state *dst, const aegis256x2_state *src) { _aegis256x2_state *const dst_ = - (_aegis256x2_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256x2_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); const _aegis256x2_state *const src_ = - (const _aegis256x2_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & - ~(uintptr_t) (RATE - 1)); + (const _aegis256x2_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index bcaae68..3474b4e 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -1,4 +1,5 @@ -#define RATE 64 +#define RATE 64 +#define ALIGNMENT 64 static void aegis256x4_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) @@ -198,10 +199,10 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis256x4_init(k, npub, state); @@ -232,13 +233,13 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - const size_t mlen = clen; - size_t i; - int ret; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + const size_t mlen = clen; + size_t i; + int ret; aegis256x4_init(k, npub, state); @@ -284,10 +285,10 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; memset(src, 0, sizeof src); if (npub == NULL) { @@ -309,10 +310,10 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i; + aes_block_t state[6]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i; aegis256x4_init(k, npub, state); @@ -358,10 +359,11 @@ state_init(aegis256x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t const uint8_t *k) { _aegis256x4_state *const st = - (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; - COMPILER_ASSERT((sizeof *st) + RATE <= sizeof *st_); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; @@ -382,7 +384,8 @@ state_encrypt_update(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t const uint8_t *m, size_t mlen) { _aegis256x4_state *const st = - (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; @@ -412,7 +415,7 @@ state_encrypt_update(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t return 0; } } - if (clen_max < (mlen & ~(size_t) (RATE - 1))) { + if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { errno = ERANGE; return -1; } @@ -433,9 +436,10 @@ state_encrypt_detached_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, uint8_t *mac, size_t maclen) { _aegis256x4_state *const st = - (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos) { @@ -460,9 +464,10 @@ state_encrypt_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t * size_t maclen) { _aegis256x4_state *const st = - (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t src[RATE]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; *written = 0; if (clen_max < st->pos + maclen) { @@ -487,10 +492,11 @@ state_decrypt_detached_update(aegis256x4_state *st_, uint8_t *m, size_t mlen_max const uint8_t *c, size_t clen) { _aegis256x4_state *const st = - (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - size_t i = 0; - size_t left; + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + size_t i = 0; + size_t left; *written = 0; st->mlen += clen; @@ -549,10 +555,11 @@ static int state_decrypt_detached_final(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { - CRYPTO_ALIGN(16) uint8_t computed_mac[32]; - CRYPTO_ALIGN(RATE) uint8_t dst[RATE]; - _aegis256x4_state *const st = - (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + CRYPTO_ALIGN(16) uint8_t computed_mac[32]; + CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + _aegis256x4_state *const st = + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); int ret; *written = 0; @@ -586,7 +593,8 @@ static int state_mac_update(aegis256x4_state *st_, const uint8_t *ad, size_t adlen) { _aegis256x4_state *const st = - (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -626,7 +634,8 @@ static int state_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen) { _aegis256x4_state *const st = - (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; left = st->adlen % RATE; @@ -643,9 +652,10 @@ static void state_clone(aegis256x4_state *dst, const aegis256x4_state *src) { _aegis256x4_state *const dst_ = - (_aegis256x4_state *) ((((uintptr_t) &dst->opaque) + (RATE - 1)) & ~(uintptr_t) (RATE - 1)); + (_aegis256x4_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); const _aegis256x4_state *const src_ = - (const _aegis256x4_state *) ((((uintptr_t) &src->opaque) + (RATE - 1)) & - ~(uintptr_t) (RATE - 1)); + (const _aegis256x4_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; } \ No newline at end of file diff --git a/src/include/aegis.h b/src/include/aegis.h index 360097c..e9c9557 100644 --- a/src/include/aegis.h +++ b/src/include/aegis.h @@ -13,10 +13,8 @@ #ifndef CRYPTO_ALIGN # if defined(__INTEL_COMPILER) || defined(_MSC_VER) # define CRYPTO_ALIGN(x) __declspec(align(x)) -# elif defined(__GNUC__) || defined(__clang__) -# define CRYPTO_ALIGN(x) __attribute__((aligned(x))) # else -# define CRYPTO_ALIGN(x) +# define CRYPTO_ALIGN(x) __attribute__((aligned(x))) # endif #endif diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 40790f2..3dc1f7f 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -28,7 +28,7 @@ extern "C" { /* An AEGIS state, for incremental updates */ typedef struct aegis128l_state { - uint8_t opaque[256]; + CRYPTO_ALIGN(32) uint8_t opaque[256]; } aegis128l_state; /* The length of an AEGIS key, in bytes */ diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 20c951b..919f8b7 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -28,7 +28,7 @@ extern "C" { /* An AEGIS state, for incremental updates */ typedef struct aegis128x2_state { - uint8_t opaque[448]; + CRYPTO_ALIGN(64) uint8_t opaque[448]; } aegis128x2_state; /* The length of an AEGIS key, in bytes */ diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index de4e2fe..9c97b01 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -28,7 +28,7 @@ extern "C" { /* An AEGIS state, for incremental updates */ typedef struct aegis128x4_state { - uint8_t opaque[832]; + CRYPTO_ALIGN(64) uint8_t opaque[832]; } aegis128x4_state; /* The length of an AEGIS key, in bytes */ diff --git a/src/include/aegis256.h b/src/include/aegis256.h index fce99ef..07a2da6 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -28,7 +28,7 @@ extern "C" { /* An AEGIS state, for incremental updates */ typedef struct aegis256_state { - uint8_t opaque[192]; + CRYPTO_ALIGN(16) uint8_t opaque[192]; } aegis256_state; /* The length of an AEGIS key, in bytes */ diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index a77d511..58e7162 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -28,7 +28,7 @@ extern "C" { /* An AEGIS state, for incremental updates */ typedef struct aegis256x2_state { - uint8_t opaque[320]; + CRYPTO_ALIGN(32) uint8_t opaque[320]; } aegis256x2_state; /* The length of an AEGIS key, in bytes */ diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index de19637..352af65 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -28,7 +28,7 @@ extern "C" { /* An AEGIS state, for incremental updates */ typedef struct aegis256x4_state { - uint8_t opaque[576]; + CRYPTO_ALIGN(64) uint8_t opaque[576]; } aegis256x4_state; /* The length of an AEGIS key, in bytes */ From 9c7677d742aaae312e09b1574998acba620188d8 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 10 Jun 2024 11:34:37 +0200 Subject: [PATCH 111/219] Document when it's safe to avoid clone() Remove unaligned test. Calling a C function with the wrong alignment is intentionally very hard in Zig. --- src/include/aegis128l.h | 3 ++- src/include/aegis128x2.h | 3 ++- src/include/aegis128x4.h | 3 ++- src/include/aegis256.h | 3 ++- src/include/aegis256x2.h | 3 ++- src/include/aegis256x4.h | 3 ++- src/test/main.zig | 49 ---------------------------------------- 7 files changed, 12 insertions(+), 55 deletions(-) diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 3dc1f7f..7ceaa8f 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -265,7 +265,8 @@ void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen * The recommended way to use the MAC mode is to generate a random key and keep it secret. * * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis128l_mac_state_clone()`. + * with `aegis128l_mac_state_clone()`. It is only safe to copy a state directly without using + * the clone function if the state is guaranteed to be properly aligned. */ void aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k); diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 919f8b7..8ff0f17 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -265,7 +265,8 @@ void aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * The recommended way to use the MAC mode is to generate a random key and keep it secret. * * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis128x2_mac_state_clone()`. + * with `aegis128x2_mac_state_clone()`. It is only safe to copy a state directly without using + * the clone function if the state is guaranteed to be properly aligned. */ void aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k); diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index 9c97b01..5e5fb70 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -265,7 +265,8 @@ void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * The recommended way to use the MAC mode is to generate a random key and keep it secret. * * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis128x4_mac_state_clone()`. + * with `aegis128x4_mac_state_clone()`. It is only safe to copy a state directly without using + * the clone function if the state is guaranteed to be properly aligned. */ void aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k); diff --git a/src/include/aegis256.h b/src/include/aegis256.h index 07a2da6..309a244 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -265,7 +265,8 @@ void aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, * The recommended way to use the MAC mode is to generate a random key and keep it secret. * * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis256_mac_state_clone()`. + * with `aegis256_mac_state_clone()`. It is only safe to copy a state directly without using + * the clone function if the state is guaranteed to be properly aligned. */ void aegis256_mac_init(aegis256_state *st_, const uint8_t *k); diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index 58e7162..419c989 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -265,7 +265,8 @@ void aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * The recommended way to use the MAC mode is to generate a random key and keep it secret. * * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis256x2_mac_state_clone()`. + * with `aegis256x2_mac_state_clone()`. It is only safe to copy a state directly without using + * the clone function if the state is guaranteed to be properly aligned. */ void aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k); diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index 352af65..a04b761 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -265,7 +265,8 @@ void aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * The recommended way to use the MAC mode is to generate a random key and keep it secret. * * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis256_mac_state_clone()`. + * with `aegis256_mac_state_clone()`. It is only safe to copy a state directly without using + * the clone function if the state is guaranteed to be properly aligned. */ void aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k); diff --git a/src/test/main.zig b/src/test/main.zig index 110f868..6a85e06 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -741,52 +741,3 @@ test "aegis128x4 - MAC" { try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, &mac, &mac2); } - -test "aegis128l - MAC with unaligned state" { - const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - const msg = [_]u8{ 1, 2, 3 } ** 100; - const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100 ++ [_]u8{0}; - - const UnalignedState1 = struct { - pad: u8 = 0xd0, - x: aegis.aegis128l_state, - }; - const UnalignedState2 = struct { - pad: u16 = 0xd0, - x: aegis.aegis128l_state, - }; - - var st0: UnalignedState1 = undefined; - aegis.aegis128l_mac_init(&st0.x, &key); - - var st: UnalignedState2 = undefined; - aegis.aegis128l_mac_state_clone(&st.x, &st0.x); - var ret = aegis.aegis128l_mac_update(&st.x, &msg, msg.len); - try testing.expectEqual(ret, 0); - ret = aegis.aegis128l_mac_update(&st.x, &msg2, msg2.len); - try testing.expectEqual(ret, 0); - var mac: [32]u8 = undefined; - ret = aegis.aegis128l_mac_final(&st.x, &mac, mac.len); - try testing.expectEqual(ret, 0); - - aegis.aegis128l_mac_state_clone(&st.x, &st0.x); - ret = aegis.aegis128l_mac_update(&st.x, &msg, msg.len); - try testing.expectEqual(ret, 0); - ret = aegis.aegis128l_mac_update(&st.x, &msg2, msg2.len); - try testing.expectEqual(ret, 0); - ret = aegis.aegis128l_mac_verify(&st.x, &mac, mac.len); - try testing.expectEqual(ret, 0); - - aegis.aegis128l_mac_state_clone(&st.x, &st0.x); - const msg3 = msg ++ msg2; - ret = aegis.aegis128l_mac_update(&st.x, &msg3, msg3.len); - try testing.expectEqual(ret, 0); - ret = aegis.aegis128l_mac_verify(&st.x, &mac, mac.len); - try testing.expectEqual(ret, 0); - - const nonce = [_]u8{0} ** 16; - var mac2: [mac.len]u8 = undefined; - ret = aegis.aegis128l_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); - try testing.expectEqual(ret, 0); - try testing.expectEqualSlices(u8, &mac, &mac2); -} From b8410a20caf1fbf5cf0ae959ee8014a2386c1b55 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 26 Jun 2024 21:07:37 -0400 Subject: [PATCH 112/219] Define ERANGE and EINVAL if they are not defined This happens on freestanding targets (at least wasm32-freestanding). --- src/common/common.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/common/common.h b/src/common/common.h index 43358d0..f4d0aee 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -1,6 +1,7 @@ #ifndef common_H #define common_H +#include #include #include #include @@ -94,4 +95,11 @@ rotl32(const uint32_t x, const int b) #define COMPILER_ASSERT(X) (void) sizeof(char[(X) ? 1 : -1]) +#ifndef ERANGE +# define ERANGE 34 +#endif +#ifndef EINVAL +# define EINVAL 22 +#endif + #endif From 9934fe08ac0258cb475553d753f23eaa9ec10819 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 26 Jun 2024 21:12:34 -0400 Subject: [PATCH 113/219] Add .zig-cache to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4a7b522..dc599b6 100644 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,7 @@ Mkfile.old dkms.conf # zig cc +.zig-cache zig-cache zig-out From fa8e617920187d98b51c2299cfa0c42ec82a35fc Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 30 Jun 2024 23:48:20 +0200 Subject: [PATCH 114/219] Missing space --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f26e875..0bc52e1 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Include `` and call `aegis_init()` prior to doing anything else with th * [`fizz`](https://github.com/facebookincubator/fizz) is Facebook's implementation of TLS 1.3. * [`picotls`](https://github.com/h2o/picotls) is a TLS 1.3 implementation in C, with support for the AEGIS cipher suites. -* [`h2o`](https://h2o.examp1e.net) is an HTTP/{1,2,3} serverwith support for the AEGIS cipher suites. +* [`h2o`](https://h2o.examp1e.net) is an HTTP/{1,2,3} server with support for the AEGIS cipher suites. ## Benchmarks From b36f8e16102e5c28e5d8f5c73fd383185e400ed9 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 30 Jun 2024 23:50:30 +0200 Subject: [PATCH 115/219] Link to other implementations --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 0bc52e1..9f48357 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,10 @@ Include `` and call `aegis_init()` prior to doing anything else with th * [`picotls`](https://github.com/h2o/picotls) is a TLS 1.3 implementation in C, with support for the AEGIS cipher suites. * [`h2o`](https://h2o.examp1e.net) is an HTTP/{1,2,3} server with support for the AEGIS cipher suites. +## Other implementations + +[Other AEGIS implementations](https://github.com/cfrg/draft-irtf-cfrg-aegis-aead?tab=readme-ov-file#known-implementations) are also available for most programming languages. + ## Benchmarks AEGIS is very fast on CPUs with parallel execution pipelines and AES support. From bcb8be54067b9a956764772167fabd4268f9440c Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 1 Jul 2024 00:43:30 +0200 Subject: [PATCH 116/219] Add tests from project WycheProof --- src/test/main.zig | 106 + src/test/wycheproof/aegis128L_test.json | 6756 +++++++++++++++++++++++ src/test/wycheproof/aegis256_test.json | 6654 ++++++++++++++++++++++ 3 files changed, 13516 insertions(+) create mode 100644 src/test/wycheproof/aegis128L_test.json create mode 100644 src/test/wycheproof/aegis256_test.json diff --git a/src/test/main.zig b/src/test/main.zig index 6a85e06..630ca8f 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -741,3 +741,109 @@ test "aegis128x4 - MAC" { try testing.expectEqual(ret, 0); try testing.expectEqualSlices(u8, &mac, &mac2); } + +// Wycheproof tests + +const JsonTest = struct { + tcId: u64, + key: []const u8, + iv: []const u8, + aad: []const u8, + msg: []const u8, + ct: []const u8, + tag: []const u8, + result: []const u8, +}; +const JsonTestGroup = struct { + type: []const u8, + tests: []const JsonTest, +}; +const JsonTests = struct { + testGroups: []JsonTestGroup, +}; +const Result = enum { + valid, + invalid, +}; + +test "aegis128l - wycheproof" { + const alloc = std.testing.allocator; + const parsed = try std.json.parseFromSlice( + JsonTests, + alloc, + @embedFile("wycheproof/aegis128L_test.json"), + .{ .ignore_unknown_fields = true }, + ); + defer parsed.deinit(); + for (parsed.value.testGroups) |test_group| { + if (!std.mem.eql(u8, "AeadTest", test_group.type)) continue; + for (test_group.tests) |t| { + var arena = std.heap.ArenaAllocator.init(alloc); + defer arena.deinit(); + var arena_alloc = arena.allocator(); + var key: [16]u8 = undefined; + var nonce: [16]u8 = undefined; + var tag: [16]u8 = undefined; + const aad = try arena_alloc.alloc(u8, t.aad.len / 2); + const ct = try arena_alloc.alloc(u8, t.ct.len / 2); + const msg = try arena_alloc.alloc(u8, t.msg.len / 2); + const expected_msg = try arena_alloc.alloc(u8, t.msg.len / 2); + _ = try std.fmt.hexToBytes(&key, t.key); + _ = try std.fmt.hexToBytes(&nonce, t.iv); + _ = try std.fmt.hexToBytes(&tag, t.tag); + _ = try std.fmt.hexToBytes(aad, t.aad); + _ = try std.fmt.hexToBytes(expected_msg, t.msg); + _ = try std.fmt.hexToBytes(ct, t.ct); + const c_res = aegis.aegis128l_decrypt_detached(msg.ptr, ct.ptr, ct.len, &tag, tag.len, aad.ptr, aad.len, &nonce, &key); + const res: Result = if (c_res == 0) res: { + if (std.mem.eql(u8, msg, expected_msg)) break :res .valid; + break :res .invalid; + } else .invalid; + if ((std.mem.eql(u8, "invalid", t.result) and res == .valid) or (std.mem.eql(u8, "valid", t.result) and res == .invalid)) { + std.debug.print("Test failed: {}\n", .{t.tcId}); + try std.testing.expect(false); + } + } + } +} + +test "aegis256 - wycheproof" { + const alloc = std.testing.allocator; + const parsed = try std.json.parseFromSlice( + JsonTests, + alloc, + @embedFile("wycheproof/aegis256_test.json"), + .{ .ignore_unknown_fields = true }, + ); + defer parsed.deinit(); + for (parsed.value.testGroups) |test_group| { + if (!std.mem.eql(u8, "AeadTest", test_group.type)) continue; + for (test_group.tests) |t| { + var arena = std.heap.ArenaAllocator.init(alloc); + defer arena.deinit(); + var arena_alloc = arena.allocator(); + var key: [32]u8 = undefined; + var nonce: [32]u8 = undefined; + var tag: [16]u8 = undefined; + const aad = try arena_alloc.alloc(u8, t.aad.len / 2); + const ct = try arena_alloc.alloc(u8, t.ct.len / 2); + const msg = try arena_alloc.alloc(u8, t.msg.len / 2); + const expected_msg = try arena_alloc.alloc(u8, t.msg.len / 2); + _ = try std.fmt.hexToBytes(&key, t.key); + _ = try std.fmt.hexToBytes(&nonce, t.iv); + _ = try std.fmt.hexToBytes(&tag, t.tag); + _ = try std.fmt.hexToBytes(aad, t.aad); + _ = try std.fmt.hexToBytes(expected_msg, t.msg); + _ = try std.fmt.hexToBytes(ct, t.ct); + const c_res = aegis.aegis256_decrypt_detached(msg.ptr, ct.ptr, ct.len, &tag, tag.len, aad.ptr, aad.len, &nonce, &key); + const res: Result = if (c_res == 0) res: { + if (std.mem.eql(u8, msg, expected_msg)) break :res .valid; + break :res .invalid; + } else .invalid; + if ((std.mem.eql(u8, "invalid", t.result) and res == .valid) or (std.mem.eql(u8, "valid", t.result) and res == .invalid)) { + std.debug.print("Test failed: {}\n", .{t.tcId}); + try std.testing.expect(false); + } + } + } +} diff --git a/src/test/wycheproof/aegis128L_test.json b/src/test/wycheproof/aegis128L_test.json new file mode 100644 index 0000000..0ec5c35 --- /dev/null +++ b/src/test/wycheproof/aegis128L_test.json @@ -0,0 +1,6756 @@ +{ + "algorithm": "AEGIS128L", + "schema": "aead_test_schema.json", + "generatorVersion": "0.9", + "numberOfTests": 479, + "header": [ + "Test vectors of type AeadTest test authenticated encryption with additional data.", + "The test vectors are intended for testing both encryption and decryption.", + "Test vectors with \"result\" : \"valid\" are valid encryptions.", + "Test vectors with \"result\" : \"invalid\" are using invalid parameters", + "or contain an invalid ciphertext or tag." + ], + "notes": { + "Ktv": { + "bugType": "BASIC", + "description": "Known test vector." + }, + "ModifiedTag": { + "bugType": "AUTH_BYPASS", + "description": "The test vector contains a ciphertext with a modified tag. The test vector was obtained by manipulating a valid ciphertext. The purpose of the test is to check whether the verification fully checks the tag.", + "effect": "Failing to fully verify a tag reduces the security level of an encryption." + }, + "OldVersion": { + "bugType": "LEGACY", + "description": "This is a test vector from https://eprint.iacr.org/2013/695.pdf. This paper describes an old version of AEGIS128L. The tag is computed as sum over S[0] .. S[7]. However, the Caesar competition submission http://competitions.cr.yp.to/round1/aegisv1.pdf computes the tag as sum over S[0] .. S[6]." + }, + "Pseudorandom": { + "bugType": "FUNCTIONALITY", + "description": "The test vector contains pseudorandomly generated inputs. The goal of the test vector is to check the correctness of the implementation for various sizes of the input parameters. Some libraries do not support all the parameter sizes. " + }, + "TagCollision_1": { + "bugType": "BASIC", + "description": "The test vector contains a ciphertext with the same tag as another vector, but different plaintext and ciphertext." + }, + "TagCollision_2": { + "bugType": "BASIC", + "description": "The test vector contains a ciphertext with the same tag as another vector, but different aad." + } + }, + "testGroups": [ + { + "type": "AeadTest", + "keySize": 128, + "ivSize": 128, + "tagSize": 128, + "tests": [ + { + "tcId": 1, + "comment": "https://eprint.iacr.org/2013/695.pdf", + "flags": [ + "OldVersion" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "", + "msg": "00000000000000000000000000000000", + "ct": "41de9000a7b5e40e2d68bb64d99ebb19", + "tag": "8674521d074f983b2e830dd6f3edf4e5", + "result": "invalid" + }, + { + "tcId": 2, + "comment": "https://eprint.iacr.org/2013/695.pdf", + "flags": [ + "OldVersion" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "00000000000000000000000000000000", + "msg": "00000000000000000000000000000000", + "ct": "29a0ce1f5dce8c404d56d00491668604", + "tag": "eb82ca639900a0699c859bfbf3020bfa", + "result": "invalid" + }, + { + "tcId": 3, + "comment": "https://eprint.iacr.org/2013/695.pdf", + "flags": [ + "OldVersion" + ], + "key": "00010000000000000000000000000000", + "iv": "00000200000000000000000000000000", + "aad": "00010203", + "msg": "00000000000000000000000000000000", + "ct": "1c0f229f289844def2c1ef28bea0abf0", + "tag": "86f3cc5e3a68f6e485960820be163808", + "result": "invalid" + }, + { + "tcId": 4, + "comment": "https://eprint.iacr.org/2013/695.pdf", + "flags": [ + "OldVersion" + ], + "key": "10010000000000000000000000000000", + "iv": "10000200000000000000000000000000", + "aad": "0001020304050607", + "msg": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "ct": "79d94593d8c2119d7e8fd9b8fc77845c5c077a05b2528b6ac54b563aed8efe84", + "tag": "4ed71cf3d6a3e568e8085110e92e8bfb", + "result": "invalid" + }, + { + "tcId": 5, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "", + "msg": "00000000000000000000000000000000", + "ct": "41de9000a7b5e40e2d68bb64d99ebb19", + "tag": "f4d997cc9b94227ada4fe4165422b1c8", + "result": "valid" + }, + { + "tcId": 6, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "00000000000000000000000000000000", + "msg": "00000000000000000000000000000000", + "ct": "29a0ce1f5dce8c404d56d00491668604", + "tag": "29c9d93afd7e1276112a1fd0c344ccd2", + "result": "valid" + }, + { + "tcId": 7, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "00010000000000000000000000000000", + "iv": "00000200000000000000000000000000", + "aad": "00010203", + "msg": "00000000000000000000000000000000", + "ct": "1c0f229f289844def2c1ef28bea0abf0", + "tag": "1f0799d68840d2364e7eeca6d41b4d05", + "result": "valid" + }, + { + "tcId": 8, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "10010000000000000000000000000000", + "iv": "10000200000000000000000000000000", + "aad": "0001020304050607", + "msg": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "ct": "79d94593d8c2119d7e8fd9b8fc77845c5c077a05b2528b6ac54b563aed8efe84", + "tag": "cc6f3372f6aa1bb82388d695c3962d9a", + "result": "valid" + }, + { + "tcId": 9, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "55565758595a5b5c5d5e5f6061626364", + "iv": "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf", + "aad": "", + "msg": "", + "ct": "", + "tag": "439ef345a332a4f83c9cc28debea9be0", + "result": "valid" + }, + { + "tcId": 10, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "55565758595a5b5c5d5e5f6061626364", + "iv": "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf", + "aad": "a0", + "msg": "", + "ct": "", + "tag": "a2694bd5658385c137048077018c0a69", + "result": "valid" + }, + { + "tcId": 11, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "", + "msg": "", + "ct": "", + "tag": "83cc600dc4e3e7e62d4055826174f149", + "result": "valid" + }, + { + "tcId": 12, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "10010000000000000000000000000000", + "iv": "10000200000000000000000000000000", + "aad": "0001020304050607", + "msg": "000102030405060708090a0b0c0d", + "ct": "79d94593d8c2119d7e8fd9b8fc77", + "tag": "5c04b3dba849b2701effbe32c7f0fab7", + "result": "valid" + }, + { + "tcId": 13, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b67b1a6efdd40d37080fbe8f8047aeb9", + "iv": "fa294b129972f7fc5bbd5b96bba837c9", + "aad": "", + "msg": "", + "ct": "", + "tag": "f4ebf330a282286c2c2e06bbb068f800", + "result": "valid" + }, + { + "tcId": 14, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "209e6dbf2ad26a105445fc0207cd9e9a", + "iv": "9477849d6ccdfca112d92e53fae4a7ca", + "aad": "", + "msg": "01", + "ct": "3d", + "tag": "319917b5923dbad109dc9e61c5810979", + "result": "valid" + }, + { + "tcId": 15, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ef82ab03129d93cf7f06b88aad17b595", + "iv": "be1c0009a6bbf1cdb86bae6cad029ee4", + "aad": "", + "msg": "1155", + "ct": "4648", + "tag": "96bef0860fcb1d15daafcd19aaf312f5", + "result": "valid" + }, + { + "tcId": 16, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "45d761e2a6a9384b3b69343a83a0dfcb", + "iv": "e117d91548f9c7caf88493a25be62410", + "aad": "", + "msg": "3bf2e8", + "ct": "1c547f", + "tag": "240c2c156d8cff6c63bf63986076670e", + "result": "valid" + }, + { + "tcId": 17, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4ca75d221f93bea97e3571832b87dfb3", + "iv": "934a839a6e56c11f6f4e66ba1bb65671", + "aad": "", + "msg": "ae09c978", + "ct": "f70ddc33", + "tag": "9f183378f0f4152667430c7c6d9f164d", + "result": "valid" + }, + { + "tcId": 18, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dd69b91f5203cc747adba6774b7944d9", + "iv": "8238b76f8089afe3d189126f3a92c16f", + "aad": "", + "msg": "8b72d6cc5f", + "ct": "cb73eebe22", + "tag": "f5f7133972b9f0657a8c18fa9d5b395a", + "result": "valid" + }, + { + "tcId": 19, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d3c38350e5f2734a692c982dc14cd1f2", + "iv": "37ef955586290a179413e4e29847aa90", + "aad": "", + "msg": "0b0c5c6d8d22", + "ct": "acdc5534b4a5", + "tag": "654654363adea18f86ae28eca71935ee", + "result": "valid" + }, + { + "tcId": 20, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8d263349fea29d36d0ec479609a95801", + "iv": "43cad2e7270dad51e21efd4ba7156866", + "aad": "", + "msg": "23c6a97133decf", + "ct": "fbf17b03c921cf", + "tag": "46c5397e95b1d46d66793b87b821e8fb", + "result": "valid" + }, + { + "tcId": 21, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8f3bab40de3735871c19c41f0b92d4b5", + "iv": "ade8ea0a7f7dd8db2b5622496a43ecf1", + "aad": "", + "msg": "502b88f37c444f07", + "ct": "b9c44d22aa43b2e3", + "tag": "d77c70a64cda3ba57cda965248e813bf", + "result": "valid" + }, + { + "tcId": 22, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "691c3419d17c2406dab79dcdc7c9843d", + "iv": "30228b7bfe83993a195d19feeec19737", + "aad": "", + "msg": "12c6725ee79e7ae9ac", + "ct": "57b4c24f7d492feb7e", + "tag": "9d2783ada64bfa71950e223f4aecf9ff", + "result": "valid" + }, + { + "tcId": 23, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d4a048737dc60bed5fd57cf08d22b091", + "iv": "ef7ee939ba01323ccfc87f1d82336d73", + "aad": "", + "msg": "da0e2244040da23ea755", + "ct": "1d2c799c5e51501a4fbb", + "tag": "b7e58540337405a2cd21f447e050582a", + "result": "valid" + }, + { + "tcId": 24, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "399422031abe10a1a9ba1d925c51b112", + "iv": "fadc1aa8fb800face017a235998b72d5", + "aad": "", + "msg": "feaa3250a8e8b4b0a8dec3", + "ct": "162dbf952539fecb9635c3", + "tag": "1df3009594a6dfda4a505f1a3672cbb6", + "result": "valid" + }, + { + "tcId": 25, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2146e34a7894f563076745dce2101ca8", + "iv": "9d710aa3276ee6287924dac9a4d6d554", + "aad": "", + "msg": "ff0c72380bd58ff342477ec1", + "ct": "3f04fbaeea0a7b64f2cb84b8", + "tag": "0e853ee8b2aac49f910526e4eedcfe05", + "result": "valid" + }, + { + "tcId": 26, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8a1354caa05cebbdfb5dbd0317a1b12a", + "iv": "9be4321b5ef4089fe7160685bec3cc6a", + "aad": "", + "msg": "ff65eb93d2556c7077f4638d42", + "ct": "74ce653796438e8742ada5f291", + "tag": "56e51e5c911e5e393143d70001342535", + "result": "valid" + }, + { + "tcId": 27, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b037b2f7799f309ed8e5839532797783", + "iv": "c1fc5385cddd3b4a10f7846ec34743e2", + "aad": "", + "msg": "4483e6bd08a51781aa77f4b41d78", + "ct": "be18d82733f62b85484d7a0ee866", + "tag": "9466fd750d76ccf4d997732e0131a9e2", + "result": "valid" + }, + { + "tcId": 28, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a549442e35154032d07c8666006aa6a2", + "iv": "5171524568e81d97e8c4de4ba56c10a0", + "aad": "", + "msg": "1182e93596cac5608946400bc73f3a", + "ct": "6e8d52f0d610b08c9886a7986b2db2", + "tag": "d849fa1f0d93db658b267f5dc0fd2b5f", + "result": "valid" + }, + { + "tcId": 29, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cfb4c26f126f6a0acb8e4e220f6c56cd", + "iv": "1275115499ae722268515bf0c164b49c", + "aad": "", + "msg": "09dfd7f080275257cf97e76f966b1ad9", + "ct": "477f479aa878eedd2c4bf1478b2ce859", + "tag": "f8982d7396b3ed585f7f18d49d418591", + "result": "valid" + }, + { + "tcId": 30, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d62ee59bf8f9ca7f11d4d5b0fa5e28cd", + "iv": "7063ecaacd0d5c399ff539c898323ee7", + "aad": "", + "msg": "fc9c471eee670e5d4e91ce57451173cab8", + "ct": "cd58aaa845a9e0fcc2877508f7a6df312c", + "tag": "2afa84da3b32f7b7bc8fd6a690cd42eb", + "result": "valid" + }, + { + "tcId": 31, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "28831a46a72301bae27858a917b43af3", + "iv": "5cc1ff921e8833d6899a2aa15ed83c1b", + "aad": "", + "msg": "6d8087273602a96b193fc3a0fe9d9e6e7423", + "ct": "1e771ee3535b4a522379bc9657f5af11a644", + "tag": "0f31f7f19adf99baf1b5855b3dfa36b8", + "result": "valid" + }, + { + "tcId": 32, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "31e8e85a8425dc01e9167f61cb0b5f8c", + "iv": "3658b2da456dad663a01ed2982e36371", + "aad": "", + "msg": "c41b624ea8fc7799c2f2a39dfe68d694860ac2", + "ct": "d308bf2da99ae4a3119546d314598102fef2b6", + "tag": "dc4a1aba4048b6444ec06829a8c66742", + "result": "valid" + }, + { + "tcId": 33, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4e42a6000b285319e4517c8adc59fdc2", + "iv": "ea69f232d19544a3c98f403e553ea5d3", + "aad": "", + "msg": "f11eda9011217ec0016aaf2572f090725e98690f", + "ct": "28e070de22c356c4fd2f84df3bee13eb8a97d888", + "tag": "b68dfd8b5e9ba6fa3a94657b8b90d83c", + "result": "valid" + }, + { + "tcId": 34, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1d7ca65acd89673b89c0510a22f7a4aa", + "iv": "dd8d15bf1b4eec6580cb8f60a41730b3", + "aad": "", + "msg": "24e27690ce286a823e7de04fb72ecef51af36837ba", + "ct": "d1dd06bf513f6dfe57bc237f53df856b0c0f3cc713", + "tag": "68c9ac5d762219d90230f767344eccc1", + "result": "valid" + }, + { + "tcId": 35, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "958bcdb66a3952b53701582a68a0e474", + "iv": "0e6ec879b02c6f516976e35898428da7", + "aad": "", + "msg": "140415823ecc8932a058384b738ea6ea6d4dfe3bbeee", + "ct": "5578e931dc6ebf77d614895c6098592e43faee9342d9", + "tag": "c13bf2567da40c0f5fccb8c3127224df", + "result": "valid" + }, + { + "tcId": 36, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ede8af705e4655817960d0eb263045a7", + "iv": "b777772c2fa883506f4ef10e746c1556", + "aad": "", + "msg": "69c69c089a147b6a22d66cd6bcb9f7a5b75dce0a1b1ad8", + "ct": "f0b7bc93a2debb654e510fa1653ed1c1fd04a58801a6be", + "tag": "16d3db0f06822ab8fffda0726daff826", + "result": "valid" + }, + { + "tcId": 37, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7b27264352148258f434667f6c94c1b6", + "iv": "cfd7a30c9e6460c249138d882e92fa48", + "aad": "", + "msg": "ca4915240b97c70f10b3a97ec2ebdd80d521bd2e023460ff", + "ct": "0c29d663e637f8fcd92cfd765ed84ac4e4e8ff90134cffbb", + "tag": "dd59064a0a16c5a6ed1f75be7644567c", + "result": "valid" + }, + { + "tcId": 38, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "faa8091394e56d6b1a2ad75cf51c1951", + "iv": "977d1955112dbdd13b61c69043006d26", + "aad": "", + "msg": "86b54ce9aa5989fbed76586228bf6dfcd794f73086bf664349", + "ct": "dd81e48e5738457449bb2d8b8e4c061ac99dc0edbf72677a72", + "tag": "a534faa19f1eb8bb2d5f6d42d381fd8f", + "result": "valid" + }, + { + "tcId": 39, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "421fdd9ec975860db90b11d7b7cd8988", + "iv": "a6cdba878e147e60b7cb6e1986733e16", + "aad": "", + "msg": "117bf24912a0b10ac30672cfde59dcc8c128639b5b59ac0a17fb", + "ct": "14ad04bd8c9d6657bc3c953fe75e3fe161d393c143efc3f5988c", + "tag": "cd5ecbf2f9f527394660213a69c15036", + "result": "valid" + }, + { + "tcId": 40, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d5f13ec44339fe7c106d1c17c9db1105", + "iv": "e1dac3fbd0051f7fc73e0ec893b7a819", + "aad": "", + "msg": "fb04f11f751c9b1314c993c5ad124c4c14ca41848687b23a8d08e9", + "ct": "19add89be9f670258f02ea289a9c0cee70fbf5c1386ab4e4d81130", + "tag": "4bb4e63ad4b771d54d7f92cd7c8ed576", + "result": "valid" + }, + { + "tcId": 41, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "43003af40932ef580227487dd7db42ff", + "iv": "accfabad3b5d7ce3a3261c7fea6e3c7e", + "aad": "", + "msg": "83f54052f6b7978fdd7f933f11349ecb9af4fa8c5794d32d1f9d9a32", + "ct": "88beb9e59cf6a38f9bc334be04fc370b0c08fc74f8b77cf45bdf3190", + "tag": "237833ea71cc10101f83a346ecc15613", + "result": "valid" + }, + { + "tcId": 42, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "11b2fbd74b6a2702367daf07181f3bee", + "iv": "573fb32cc86a37f5d9bccd4132c69612", + "aad": "", + "msg": "bfcd6e6a5a144c6664f9a29709a779fa876c6932d7426e5959e1394c1e", + "ct": "713d1b560af09a9b5d5c0dadbe081068fdc08361873dfed9b017ca88a6", + "tag": "0c08564c3c498c19dad15b476c3c4669", + "result": "valid" + }, + { + "tcId": 43, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8c6cf22061979683dde96dc263e00cb5", + "iv": "d3d7be8f4fa8e18bfc2f1f6a8c0146c3", + "aad": "", + "msg": "48474826e0e6a6ad27809e19e51e223c742b09c986fe50b780b423d5c256", + "ct": "0a5944bd755f6e57150b061fcaa8158bc12876d050fdefead83a4a7d8162", + "tag": "268a76b4f97abdef113d4f5b1d024fef", + "result": "valid" + }, + { + "tcId": 44, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d85d6cbb6cdbac1684fc2fae1fb3265a", + "iv": "6b02dc9a0979e64c3ddfd3b16a41c184", + "aad": "", + "msg": "9768c46c800cf247055f4dc07857650a337b509ad71fa3e040e0196b672253", + "ct": "6b4c729d6a4079bfd207d899f15765daff0c68dc7cfab8c89f96c8452d43bc", + "tag": "c81e79442e71dc1152deea8d44983a76", + "result": "valid" + }, + { + "tcId": 45, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0b11ef3a08c02970f74281c860691c75", + "iv": "95c1dd8c0f1705ece68937901f7add7b", + "aad": "", + "msg": "f693d4edd825dbb0618d91113128880dbebb23e25d00ed1f077d870be9cc7536", + "ct": "aeaaca3901e2e93a4527b98db338e199d27ad6dca8f04ef1f947be9af527a20f", + "tag": "a2cf6396303a20042a3838226f6962e7", + "result": "valid" + }, + { + "tcId": 46, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "def4fe10908f9a080cf3fca4f432be14", + "iv": "0cbd4838cf9b29eaace6c6c15c6ed51a", + "aad": "", + "msg": "1878e52c91edfb65ff2c9df60b6183fef54607bbf3aba53b96bc98667d2eb79f13", + "ct": "ff442256f35cd778418a55b0baf3cf0b09ba0f73f6ee3e930dddbe6938367dda5c", + "tag": "f05aff42ccbdafc8bea5125a194e963e", + "result": "valid" + }, + { + "tcId": 47, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a2c191f9bf75735c30e32da1c4006294", + "iv": "7704e9d459a47d1f9350f00959b78115", + "aad": "", + "msg": "c0622772c872736f545b92244d9c02f2e4c73fa80dc1b6cbc4825b223dac2a772cf3", + "ct": "aa2b53f5bb3edcdf30a6bb61995d01d6e048c8f658a487d7f9571ffbc74d6e6ff461", + "tag": "8f7cabebdf423b6066b8d7e9a63ba546", + "result": "valid" + }, + { + "tcId": 48, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bc59288ec36ed0219b8d2c9c0aeed105", + "iv": "6f13a7ffed6de57837f79032bb689958", + "aad": "", + "msg": "78cdaad403c3b056fad70f4d43ff1b621671ecf698533d3751818f713f498c91b1765c", + "ct": "44410577be2cbec486d1a9eaa88c796f5664836ddc59e1988b1692382b79c9353c0b6c", + "tag": "e5b8621fba60bc3faef129748b4d7084", + "result": "valid" + }, + { + "tcId": 49, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "60f59ea6b3d55acdf1ccde92b361b6b9", + "iv": "0dfffb79095357fdc81c8e4844a88752", + "aad": "", + "msg": "72a28ac296f1ec8844ff2f9ece6a5b7dda14fe3a80ab564be79063527e8d177244903d80", + "ct": "494c827de78a1b9e4ffe1422a52105037bf0ccd95bca4dd7762f0eb5eb0de633b9123636", + "tag": "6a607e65258bc7ccb46dfab627a97b07", + "result": "valid" + }, + { + "tcId": 50, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c67aa7491d57c1bbbe0e2176519820b6", + "iv": "030c4f472cddcee5dc98056019a6f0aa", + "aad": "", + "msg": "df23ce0551cb5b5f85b2fe2d2a9565705ab4b06ab6dc13dc8ec83e751a8e9dc0a0184cb369", + "ct": "207b997b6fc41a62937c11ee5d60dc631c60731f7b4ddbc81722a201c138ab71ef449d4fcd", + "tag": "b234078f57f3a2007e4fc44beb74c1a7", + "result": "valid" + }, + { + "tcId": 51, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cdce4cb19ff98dd6638401adec562879", + "iv": "acd14f031acbd3523d7a609e6b68c1ba", + "aad": "", + "msg": "5ffc8dae6eb6378533a68d5b71a602c180babb6e6b62c8510d7af1f20fe0075d5ef72d674600", + "ct": "c0b0ae2db95812d8b9b5b9f35dea8081e96282bcb4438d53990dfaca6bfb1b3552d513f42a7a", + "tag": "7e84f951b0648a4b6364a28a5e57f069", + "result": "valid" + }, + { + "tcId": 52, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "de834b6030eb413aa21a28ee83c268b7", + "iv": "cddea2827d81697ad4926f7c1e742bab", + "aad": "", + "msg": "0ebab8220b07fa16dc9cc112f1a5514e81d407da7e39eca0de8396431df3c860db4353e091659a", + "ct": "760401e5c2b09ccf067580036237426dce1db8e49453791f070a508b595bd3bfc3d1dd8d878a54", + "tag": "d2b51bb0d8479eda991fb10b861c797a", + "result": "valid" + }, + { + "tcId": 53, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cb6e4235463f907bcce8160c991bfbbb", + "iv": "cde753e3441f53ef6ec78333b4262d47", + "aad": "", + "msg": "132c58dbb591cf7b890ec6d77c0d394ee7c907f1865878f9efe9bf3f12f51ee6ee6d831fa560b1e9", + "ct": "c1ec2e3f7cb8146309d949f306554e4dedc01083cf5007673f454755a4cb850be527bfd38f376ffa", + "tag": "a5be75d37e32ac3720d634ba5510bd60", + "result": "valid" + }, + { + "tcId": 54, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ddce6d5ff06fcfe4563617cc35edbd1b", + "iv": "e4b0d8f1b9488ac80f92b4a3bcad54fc", + "aad": "", + "msg": "a67101002832e3e1e89f2fd0605e8f473743a56334abb04403fdcbf8c71413aa2b3363dedf2abe0b02", + "ct": "15a5f66cd0139474c25cf0dfb43cea7fb76b423afedc5956d61ec58493ccd03c078fc9fb3ea63f1afb", + "tag": "22be5a2c60c833fe606f74d70856f694", + "result": "valid" + }, + { + "tcId": 55, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "50381868f2ee2efa37554b477ee8f4db", + "iv": "d3d3ab486059b9ba799d9ba67a8edfd7", + "aad": "", + "msg": "2cdeb4188815bbac732afcb33905f5de7a6fe75caa756ed59beee72885a011a4d5689e4a58038f633f73", + "ct": "42f67cbc8b684b6bcbb802d12d8376b8ca27b36f4fc19e0879438ac436fd8ba67125d048370b56bea87c", + "tag": "8536b2aba021bea2e355404f98f0151d", + "result": "valid" + }, + { + "tcId": 56, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2ed207e73a472881df78d810485d04b4", + "iv": "3c6ac49c6eceec58f06d9263ae1d31e9", + "aad": "", + "msg": "caaf1262789b93a88b36061e6e41344d3f1eeef0437e7d8d9f67e0c2c88553ccb694f036082409f4f9c5bf", + "ct": "d225ab4e48634268472ee84b102d065b90641bb50b140a71d08233e050f4509c730d95d7ff074defda1696", + "tag": "14c4f1fdad33508e2318f7ccbf61588d", + "result": "valid" + }, + { + "tcId": 57, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a3f47f6384e7ce88b778682e72d564f8", + "iv": "cccc6d38579f4a8c879b8a0bbdb3b7e2", + "aad": "", + "msg": "258ad811e7896294060bb38991fa637625e2b75494fc17054490c8322d98f6ef8d6140bf5122bab68cedc36c", + "ct": "0eca20c0206158bfe3ae07e7a6b4fcc38e08f5d1ea4f4f0663eb394880e60b7cbc5c9a5ce0d5f5890d138925", + "tag": "209efb6eb9b43237dea7f1d4dd3cec66", + "result": "valid" + }, + { + "tcId": 58, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4a4af0718f2bb8fd255bada3451e3a2b", + "iv": "4333b5a763e5804c0d88ed58a3f243a6", + "aad": "", + "msg": "a6e1950b503f9907792b6afb64e4d8936e4c79a624733da7a195fcafdab60d0239d2843c3dc87a62fe83af6bd6", + "ct": "143d4cb837521be7d091c7f98ce258785cd8ab04e82541fea1b78d046fb90906244e320b4a3a56bf57dfbc246b", + "tag": "694f643454ecff1b9f08b179ecef6aa5", + "result": "valid" + }, + { + "tcId": 59, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ec3eaf29a80ddebaf40b01ac1aefb2ae", + "iv": "e7b503cda3700bc98e98f239e2059eec", + "aad": "", + "msg": "80bc692725c9bcb5c080df78b8b280d9026e7ac76cdd16193c8234ed1574776007d39d41d91b59e628a2904095b6", + "ct": "f87a366f416ae4aeb31e4d246d784b1c091cb01cf842d90f6d3fd4f7c4ca48cb19173fc007a78d1d1b6c4a5726eb", + "tag": "8e8b0680705f2697946d653fba925ad1", + "result": "valid" + }, + { + "tcId": 60, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e2fb7bdf4019356f75bf944769cf4d7d", + "iv": "e9ec2c4e9d41e2c95281fe39c994882c", + "aad": "", + "msg": "9b8940041cab2c497008bbf30c78d2273cc7a6b3fd3e2129c2b117f664549672586eb8e0584a99bb2eda7ac5ef4eb0", + "ct": "7923bbe41e7a0216a5094b3c82a7d193f92050b8766e0dd736cba16886d8807a437d6c2905b28197757d3be2f6c3d5", + "tag": "5604a9e09cb32ceef75e355fce3d1cad", + "result": "valid" + }, + { + "tcId": 61, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5c65cd78f1b4e52475be55a2f83e69ad", + "iv": "554987fffaa2ddf904b2a140a4ee53ae", + "aad": "", + "msg": "222af3954dcbb0e024097d1b9551c06b26b62654a3115380b41023227dee93fb86cf4bcc1991cdf5b1e590fa9397dbb6", + "ct": "488ceba77bbcee1b8710f5cb6eecd82c007a289e3aea43c21bf7f7deaff172e58809931a49fb069dde3f9a234aa3affa", + "tag": "d03f8efb2cd8387427b33eca421bef63", + "result": "valid" + }, + { + "tcId": 62, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a4d9082ee95e88c00e661e1b20726faa", + "iv": "da2c900b6c9a18bc29f37019dc8b71ae", + "aad": "", + "msg": "69e4cbcd7ce30816474bf500a41f3356a3940d86e5be667a7ba2a461db7a9755e61385c50d50b1c8ba4961adcea2768f57", + "ct": "79380f0e42aa489d0f0e2a620619f24022d38e23fdb716a9f77c97227a874e851d220186e81ba36e5fd28aebdf2a3ce2a3", + "tag": "40aa9d35f536897ff5b6de76738fc2c5", + "result": "valid" + }, + { + "tcId": 63, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f1849309c9b724608b208b4fad3f3269", + "iv": "ecd26659b8f7816f89c5e3b19ca3048f", + "aad": "", + "msg": "a870f1117a70140c29514f4abb8fcbbe486ed8d08e2097208c0a0b3f6ef2c72eaa437427901f3b057a28d397c0d054c84c9f", + "ct": "d875f978e6ff3ed15d759436d99d4d58dd3d40a3dd7c5e0511f7d2ff5368a4c2bb119e439b304338224c5a3fb86617889b24", + "tag": "facdf98c8b6cdd783b6c5f454bc27dbe", + "result": "valid" + }, + { + "tcId": 64, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dde740dc27ec982fec68b8042cafe847", + "iv": "20d91707df8bc593e2d4283f189fcfe7", + "aad": "", + "msg": "c7aa952ff738b8fdce835f75430dd86e9f017962d7bc5049e9dab067ac2528d599e8ed5eb14e04c7f798b038343159e66bad92", + "ct": "31583f1f2418df77df7cdb58c5dcf6aabcaf7cac015264b917bf45f4c8e0ea35ed0c13b098831a435197bee3e361c9242f005a", + "tag": "c2bd98e1680cf12b252a54967095e026", + "result": "valid" + }, + { + "tcId": 65, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3bce9c9dae6b322a853774601790adbd", + "iv": "3da1decbe1de6e8686318f683dcba29c", + "aad": "", + "msg": "cd8d816250531cd7968bf2e155e32ab3c8996d8e7ea84fa8232a9c9cf4220135a6a07d1e99a6336ebad526b06ae7309b81916448", + "ct": "be678905f5c0c21e767c623c465cf2085788aa0cf76effa9bd2450d44be280ea84583747aa6146b00b1d081877b8e93e89c0636f", + "tag": "ab09fb538ff36b9ad59e5b9b966ff44c", + "result": "valid" + }, + { + "tcId": 66, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "fdd068e27c10e67886bfa03013dff46d", + "iv": "b46b6c54788f92578146c4b812deafcd", + "aad": "", + "msg": "43768af71864a0b98dfd8cfc826c9c0b383094b2a435c2d6cf2063d203e86546704f66102fe4e878713d3035557cad9d66ad9f2453", + "ct": "38a45528b8b164edbea8c3b3b4abe98e3d8bed2b573bd943bd1f4fb4a172423eede60d37be1a9f80d290ad0b131bec56ffcefa8dbc", + "tag": "f7b2060882909f513bb21020cfe50dab", + "result": "valid" + }, + { + "tcId": 67, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5e8ebc6d0a1712bd2730ae01852bd6cc", + "iv": "14be886cfe2b6093120e777003cc8087", + "aad": "", + "msg": "20dfc079948034cb0ed1f6a3a0b3a6d8d65b528978a7eed8450a615cd8c475e77c6b8eb45365adcead5d11719a0606849ce34adb7744", + "ct": "6eb2a78d42b75e78c5eb7bc759fb8e2a3282974e521ad30af60b361b8494657e88ebd3c6158f41ba756acdb433a19ce26b73ee12bca4", + "tag": "ab5ed08014faed8f4801e910e8dcd1c4", + "result": "valid" + }, + { + "tcId": 68, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2143939b78b3f537d9cc1dcc22050ded", + "iv": "6104dc246076ecfb9fee99d9e5726dde", + "aad": "", + "msg": "7ccf29ca9382e6869114b218a0467d2a022383918b1280b0645f64d29878c83baf7fa7ee80373e80bc2272df01bd95f39f3de3b443d802", + "ct": "b93dfca2338aef8b0d9bdb6dcd7c365955bfaae095f5f58f38b8ce563266596e1767e1aa24267afa697fe4b04075bdca8b5bf643ba2d40", + "tag": "e5f44fbf3c99dd5ca29694d93f17206e", + "result": "valid" + }, + { + "tcId": 69, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "90161304f8714ed837f78c9ecf497c02", + "iv": "3f09199be74d824386840d91614d7109", + "aad": "", + "msg": "e0fae24d74f2937b9802b0c653de04c8c765d4c4167550839e3b60ef1de1de5a58d7708d55ab45e7b8f860e36532906df9c35e8835249ff0", + "ct": "5e71f0648641be385f6d168bd6f7b1c7dadf5dac815eb7594d8651745b0ec4bbfd5a1a78b68d9a7efa55714773d0d5888cabcc4a7665799d", + "tag": "ba5b648c2b692fd175a78202928fc576", + "result": "valid" + }, + { + "tcId": 70, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8a53e4da3c4b9d3027aa943139091e00", + "iv": "98043eaf22cfc3b18ac5dbf94715d0a4", + "aad": "", + "msg": "d86600289d30ba15d805e8fc3a464ea75112cfa119c084c9bd3973121ca349361c9c760644f6ee7cc228ea135d3b2cf8ab1dd1711b98513e35", + "ct": "c0aaaf0ac45c47a4fb3e703e5d1fb09768dbb06dc4dba3797befc7e67ac59927f9c6756934fedb55fd30205abd59ace0d5e637ee50e1f22a63", + "tag": "1ea2aa759bda7e28d26f5d495e5b885a", + "result": "valid" + }, + { + "tcId": 71, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "12ee9cf0a2cf67c73c02ecc6f8ce1f4e", + "iv": "e09e0fe6705f14b7190f530bf39918e3", + "aad": "", + "msg": "c0984823a8b27a6622741645b34e30dcdc392b03a5205d70740dbade9f97bf2645b01400a9c62afac974c3389d38040cecd793812334e711aa67", + "ct": "b0b0e129ad8f6635bf976caaa1668af0f3136e654935ea532da478f5b17d61f66b2d638255d953bf4c8eb9b76a1201959f226659a8725c60726c", + "tag": "e7c22b042f4e89f386d4e00dcc53f1cc", + "result": "valid" + }, + { + "tcId": 72, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "695f017b18180dd21308d432079f3f35", + "iv": "16ea1708eb51a7884b15519c31382f13", + "aad": "", + "msg": "afbf777883d39bbaf086dbc53228578f4971004c8a81afea3579df4cfbc1adb069d179785b91d9a5ee9c096239df0a62a5a69520b7c8a981ee800f", + "ct": "303834506ff6746d705d06f1513546ca6c68c3593866643d30538d0d7620311219b1ffd4b26a4f178c76f0b6ecaac53c50c58f50883705b4c9bc5a", + "tag": "4ab881110d9c1bcc84d4b091b47b7a92", + "result": "valid" + }, + { + "tcId": 73, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a2d1169efbb01ac98fb83ffc88c752f9", + "iv": "b6e5a7a4db59bc36633631b5c1ed6479", + "aad": "", + "msg": "dba22d711a500cb6e177cf339e532e156b59c6e2f05790ae61f53dd5db0fc6c2ce0ff21368450f9472ac2b14d9c7768f1706628f7f871c3e74cd84ac", + "ct": "3b9a1c355a8ee1db8ff9d93470e91ea76be92067cf399c3274f377c45b2936654866fec4bf516e65d65a8852e3a4eb356618c60443a2cdae3345cabc", + "tag": "b32b2a535121424c5f29f5b62aa103d1", + "result": "valid" + }, + { + "tcId": 74, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "eecc6bd496cbb94f53d13af2ba4c5d4e", + "iv": "43008e357f37eb520992ae43056d83cb", + "aad": "", + "msg": "56fc5342d77d37322801f23c5ea6d3963bfd747c306a7ab92c6db33330c727f55deaace892f50a6041175cc84d0ca779203d3d170e3d1c41145906d3c1", + "ct": "1e10de26e25dabb715fbdc8c9a513395b0bb27da9a986eb600048fff249aa9f9082fb48b6907afa74d506f03900a3e2b860de3af7110267dbc94c15504", + "tag": "c53c520e1f414aa1b936728586407ec8", + "result": "valid" + }, + { + "tcId": 75, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "28953514558f9317a8cfad8b72ca0188", + "iv": "c73f51c9568d8ab7421e3613db4d7b2e", + "aad": "", + "msg": "3cd9fd46af66dd2f38dcf42ecc9d35909946f55ff41cbcdcd0313bfabc2f32b2ec628db5bb16b98fa68cb81dbb80409a565e82ed610fd7a176bae40ce715", + "ct": "e92a3fe2a4b2a7809b43085e8cd8ccb2494a7d193b2c05e7987a5ee7725cdc69bc74da8bb6d0a7c1b787b029394fb1122febe77fba4914c638d1867309b2", + "tag": "3178b3f9fb5c9b7158debcd989234452", + "result": "valid" + }, + { + "tcId": 76, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "986dd9cd1f7e838af1a3bb7761c96d0d", + "iv": "001c59151ccb4ea3a4794c1ef5e08388", + "aad": "", + "msg": "7316f39c32aa32993115185c8062c2ec4a6b252cc26794512e0f9dede17b23f696e5781e69d136a40a1e5c9ab462774be9b025c257b27e8b2b1b7f5fc96666", + "ct": "942ed898837e4adce7f48f13410e5520e16857faaaf24989f840ff74bc91d65ffa0a6dccf51f8216e857e2ebd340e600a51d181f3d5e4102125e4c009a575a", + "tag": "34a7c5c6aae660b1d0c3cfb51cee1bf1", + "result": "valid" + }, + { + "tcId": 77, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8b114fdaca9b993f089d432dff666430", + "iv": "3f182be6dd2f78b5f2138ce68e3a945d", + "aad": "", + "msg": "ef7e9ab3b4f11942fab3417cfae5e75d5055724be67ecb9cf37f57796f594b6e2e892bc23bdf888df2955d7312ef9b76b8f22e54b5ec205cc7dc92084eeebfa3", + "ct": "fff3561c29607c790d7ce1c953ce1691f40b8109256f334bebd505f7e2cccab0e6de08a514a9580aa5b932f637cc6b4900670389532eb9e588084567110fcc1c", + "tag": "e459cb52e3599ac9970b001fecc5d04b", + "result": "valid" + }, + { + "tcId": 78, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d2bb6182da60517719aa02acd533c820", + "iv": "5765ffb9925a221a94af5410de84b404", + "aad": "", + "msg": "89ef0616d929477a504fc3c8ae6f3568cf319520c1a8338324f7d177a67fbf2e849e5e504cf28a149b46dd6659031e7825f10ef703fd757430e75d6cd228bc4c51", + "ct": "a2b3be339d1523e6c5cec890115fbd785b1821dd79ac9f30cb153e0028656d5db56b6b346ebf003a27421163637e3fa5df1b063bec69f37d02a8e4cf2c62fdbf0a", + "tag": "70a3a2acb16def8daf2bb5bfdf4ee419", + "result": "valid" + }, + { + "tcId": 79, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d8f03d4c585dac8f23ab85d35942c2af", + "iv": "b9032e32e17aa032322ddf4bb2135393", + "aad": "", + "msg": "2f41a6a5d3f66a7025c4696d1bc9d24c7cb69ff51f209807e4332c4b63f3b5b5ca7e9b298b3b5015b3e33857491794a18e4d7ea6b243e0d105e0a39683decd29b84f", + "ct": "cc4631c2a0317df274ee8a9d9247f566a0531402f05df88b700534e4cd203b3e70df56ec72a10177d9088beb03ec539720074809f01d2dedb88abb2da9f877040c27", + "tag": "63615a5554f6455b4759182a754902be", + "result": "valid" + }, + { + "tcId": 80, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1c4fcd71d88254d7c17cb44ab523d0e0", + "iv": "b4446656deaaafc9e18520c093bb90df", + "aad": "", + "msg": "1a2c98b7258055af21337f8e3db17eae28c3c04388408bc2a99e2bad6ea1d522f1c0306122823ac5015ef53b6c4eb31e01f1c714121e229709d0e3830d42e55b84c7b7", + "ct": "f0b14bfba9f1b12fa62e95f4ff65061cd0afe54b453111e725787a2a2b3508442377bf2b8f3c7ff86f325019717fa1294733c51d13e42c592f85a6ae1ba1687ab5e9fc", + "tag": "7e24272758c0599559ae734922a295c4", + "result": "valid" + }, + { + "tcId": 81, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "85edc463b6ad1c2dd47897506331689d", + "iv": "f3b83b14f604575cff6c69b54538fb0d", + "aad": "", + "msg": "9a97cb8c2baa315629deef5b44d66e9403013cf18f04c48692133172e9886b1a30ef1ad89c1a02b6d1a2b22d27cb5343dc9e89b59793908495bfd07c2bddc586aeec74bb", + "ct": "fc28a15bb3993254321c4f5144e99db53e0d9bc59a72b2f9a69b321b77f00a98b3daedfc9dad3e55567a46cea5cee4884cee6718813730dadfc6584cf6abf9c6a706da44", + "tag": "1c98e61268a64d2410ad6a6972592890", + "result": "valid" + }, + { + "tcId": 82, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "57ddb8726ffee43db6463929b78374f0", + "iv": "98288de2921a9849ab07ca7753c4153b", + "aad": "", + "msg": "6474fa310aeedd8de69f7cde01ee23bcb2242d617d839108516f38d79865507a799e56f42fa8ccc631ee6212212e0b08026752ade601a26a73759eb4e86a9184b38628864f", + "ct": "5367e24c506267f3e88e6820d15b01bda5eeb2995289b78a973ea6804f262d6cc7e8b6462ffc3aa94af024d426a622d5d1d5310aba3a57aed30c2cca1263cd2c0259cc73ba", + "tag": "be04a6be5b94c3a9ffdc70a8ccb32a78", + "result": "valid" + }, + { + "tcId": 83, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cc38645e5f5990cf4a4861dfb2719dac", + "iv": "4b0c4cbee30d2d394f33b253d764f727", + "aad": "", + "msg": "c8c3d5c17bc7983ad477011a19b5a1309a205526042cd79f870549155e890ded859a2dec74a0c2fff90be568b67e1ea31de268d179a17ed1c10114b8d5756475443310e000c1", + "ct": "35be69edeaa141f734f7dbf169b7c5cfd14e9cfabf2f241cd33e73b8560429b7056a358e5840ab12d3e0bc360fd25c21afc2d19d03c6e3387f7d70ec104e8d7988ceb9f426b0", + "tag": "03a60ea98126171ccb6b2c2e77bdffb4", + "result": "valid" + }, + { + "tcId": 84, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b3de061d7089a186288c8f47588bd5c4", + "iv": "d58d799273f2bb4a645eb3bc22a802e2", + "aad": "", + "msg": "acdb89aa23fa59c44668c1961237cec87d2b29fe375356e9dcdd9c7361fb1836cab4906d48745be52d940db5b8f35d3ee04d6409659056a7da014617d5a6fae8273a5eea746148", + "ct": "5720f89f1650497a670aa62788627dd770305bbdb01f979175cf6865b33c9fd8d10068de9b5e1639e25bd845fe6cd7e0f1c676353a0fa1acdcb1094ba329c9d8997d8e1977aaab", + "tag": "dd27268231cf5a443d872abeae0178ab", + "result": "valid" + }, + { + "tcId": 85, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7c4336dfc3547be9761430c07585b7d2", + "iv": "a2b8b1214231dd074651a4156f795093", + "aad": "", + "msg": "03547f8567ef2a7e0f97fb22bca274fa0892256483d47a2608c36008b7680e810496f6060b20557951e6b09b93e862e3d12ab12a23b04301f62a3a55afa4dd59935c18c0b349c0d4", + "ct": "51df6c24b3c042353cefe6baca40b636f82db1a31245fdc245fb215a10aec521c09c155ca7542c843b04636e20ff8d99060d1ed7c2fba0e25a089709d873c09b498bbbd288144834", + "tag": "b1fb86cb41f33b7c7f0af1c1fb53c4d0", + "result": "valid" + }, + { + "tcId": 86, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "040de6a98f84ab4637fb9387f5ff7d82", + "iv": "4b895b0649e002a5d0bc7c63d85d2388", + "aad": "", + "msg": "710c952a5c6b3ce590bbcfc8a0689a08f7760792e694b010b3072492e6d2d359cbfde9bf679530b0475e82c0d1ccfd8b81a0c0b83a288a0ccee55d167ce4642bc192dbed13e1f1e5b8", + "ct": "618acb0ea875346f13d591ed21b135a8ad45d5a46c3fc914b8c7c36c88c1ae5193a12dc243178eb5246ce2493afb3e2e6aeb6f2e2c451f9e842861355e8b7cef3cfaf4f5b84b907922", + "tag": "8525d22910af3f9dbe2a75966daa2472", + "result": "valid" + }, + { + "tcId": 87, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4ed468acbbd139f79face4c2bf124191", + "iv": "f69042a70a8725667ee897acf86d4e17", + "aad": "", + "msg": "701346160a0468c3c94970b45c16b455bebd4725127d6776cd46bcdf4452932c46fa54998747168c0c127225d2dbff35657cb31e2938dca53d3a0733cb44a8947cc731ccd064a079f129", + "ct": "7d11bcfffa87b22c985bfdbca7617b27108ccd1d56e8464f0f6cec7959a94a315e242aa59835ad2b06a1655fd1bc6dc81e42d1738b70db93ea2a9d1d7b728150239cd999da217a3f0dbc", + "tag": "059419e114f30f49da7c3a0e94f70ab3", + "result": "valid" + }, + { + "tcId": 88, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "880798e256942aa0158ae1645bcebf72", + "iv": "d490ac01ada1da7513d244d09723f85e", + "aad": "", + "msg": "3cbd6dd2c8277e4c4588182494177154a4d9b66f411b59ff6987e89683dc0e18bb9156dfc5a81a70b56ff9d42ff7e83be6721eb7285979240b0f5d7651c75997c39e193844b97750eadfe5", + "ct": "9cbaa6d7021ee4e38905a42057f620f9c246cce2a5fb1817b0a4062ca0b28820db4eb4e3e040accc6f8ffa82cf4ad01692f8da63a0e0c6a413001c6c3cc4dbcbd14e337a2c15ef0924b681", + "tag": "c0003afc176a42be682632999d8367d4", + "result": "valid" + }, + { + "tcId": 89, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dc406564f80a1243705ccdb2e477d617", + "iv": "6ab46a8e69cdfe5951724fdca06a5aef", + "aad": "", + "msg": "267498a93a87c66f1bb483aeb021087e7457788c8ae1eff1fa4ca4f55eccf0797525a8cbeb7b0e3dceed43f111e7e370793f5d5c8836e349b77b81477b76ce53778c02c80d08362dfa8732b3", + "ct": "3364669c9f18771dad46456681d2bb48cdb1dde4f703eac056060c8305475e97269f4c3d42fcd3f12d323426fdb72b9f4506c44fb9c70935b27fdbbb6fd5c60af7d14c88a79b2863c418e776", + "tag": "8498c240f7e8b5c9a5d8579cd0f34886", + "result": "valid" + }, + { + "tcId": 90, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "861a29d228c948e78912c227d4cf3d96", + "iv": "8f5d0ab0b26e09bc06f7a293e766081b", + "aad": "", + "msg": "f47f05f6d447b41eb998f4c39c198fa37186cb5ef136999f73c457bd20f8ae36c3fd907fb44425548c50088374e47d58b6328acaead4a1f9c4889928fe124b1004cc6ee2b530a17db47700c7cf", + "ct": "1f1f8e466c807d831762af53e7c6d4bcbad66d5d49735258963c9c12ddf4f7a4791e0f27c201d57d5e60036461c9e53672f617c3e56046bf8e967b127f8bac02394d55c657e799e4f2043bb120", + "tag": "9f34aa87257df56ef548ec9dc6055507", + "result": "valid" + }, + { + "tcId": 91, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "58e1a170afc2423d77f24021b589ab50", + "iv": "e07bb4d875ebad30cad1d65bc044cf8b", + "aad": "", + "msg": "55cac05909b5a08f395d899d920aa0e77ccb0344485a0d0d218a1ffa35f3ff418a74464db7e2ed957d8d4c3d5fc2e44511e45dff81dca50d912828e0309cd0f8800ae58ddef3656f8656aa355709", + "ct": "ba817b49936b655b365ab22d1bdb4f53b23779be521c6eb53440aacc0e6918669559f44b062881a27df77e958dc4e4c004280bf6a38995150bb6bda1053b24aaee7c4e78101ee09acf18948255cc", + "tag": "dadc945365f114196f705ac5478cb041", + "result": "valid" + }, + { + "tcId": 92, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "549f11b5918e1005cdb646edb1f8bd5c", + "iv": "b2c1c5a59b34cb2b10d5b3e7fa3b6c8b", + "aad": "", + "msg": "a5950b25d44a14ba664527a55936b7d7956b9fe480925ccb4e19203bd5201fbfec9db3c687dac1bbc6d522ae0faa00b60faed2c407558bf1871f37a569568bdba9efd461ac2f2df5f0cd011c39272a", + "ct": "8114610b56b354e67873895926d52acd32011f58a535c9b8912546db4211465579219f617dc47dce2c5c52903c94d677fc50b28895bb417d19ade4c8ee4e292dccabdd8356227458440958ff941a68", + "tag": "529ef6160dcf200965bd848859e5fbf3", + "result": "valid" + }, + { + "tcId": 93, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e449934d7284697a873a833fa1f5f5b2", + "iv": "cf77467cb579cef8f9f9bdb436ceb08b", + "aad": "", + "msg": "0e49f926c8be28449595414d7d7bed38d7b0ea7db5b6aae08ba410eb1ecd9db908ad0c5706c961edcb058c4e934da830d1d5bd14e023f8076dcb5568229d89049c342cd4b36093f57ef352d66c8f524f", + "ct": "1408764b763a125757fb5770e2eebae5e473cd9fb1eaeb64221bd02c69b2f037a6d5a53f6467bee87caa40605ba12a0d2bc68555a753b1297162363a3567fde3d671b6da90e568764558008cf5a9169c", + "tag": "01387916a8311a2ee7cdb7b76e205fac", + "result": "valid" + }, + { + "tcId": 94, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "91e06781fccad06759c0c9659bb39751", + "iv": "3c63ef6357225713a09c402441ff2d81", + "aad": "", + "msg": "8e4e019be8bb5342ffb867a5423fe370be04abac0c18c1ab129b6220a4bdf7a31354d5c6bd307c2d28a92e96d7eb97ede1540d4f144750b7b46c6d94048e8535de2d99044b286772dccd239a2d7eb4ac24", + "ct": "53ab7c93edaf95246c4679bb1e3dfc0c154f48a01ba852852ce3eb0d088b949532e58396be176964c3b61235f0013048f0117119f28b0d876fd5b0e0c5cbe2bae4173d4d88bba43fe35325689bc63c1bd4", + "tag": "ea0f45aa38e5e378fd27238af361946e", + "result": "valid" + }, + { + "tcId": 95, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b927dd4e9d606f0d700a0997911b5bcd", + "iv": "d3717f718d9391826425131203da61a6", + "aad": "", + "msg": "8984822fa78a3d3b1c182f32ca95b10c58054b35524a09b363d2854f9348ca8df9c8be961419519822ebd6b4e60649aa6ca29d82fc51e25633543d3edabf77e864f623e3cddc9f84143484eaa293586eefbb", + "ct": "a29a7f4e59d0751f149009596ea4dae2fa0fb5edc245b7cc5ca310589092ff2c061d1207848ba4bb78ba0472a9a53b977384b228cc0bf80808e8227fe6cf377b97a0122c5727359a1410f8302db559453433", + "tag": "81deb9b8ab43c91151ae5974aba1f366", + "result": "valid" + }, + { + "tcId": 96, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "08d2df21b74874e9a76adcb4f7490260", + "iv": "d676a0fe925e058ce3bbc1342f1222d5", + "aad": "", + "msg": "cc52257513c9756f7a3b7343115c3cf73888c6fcf689f7808335959b38800a9f4d7134da98c5bcfd60bfc9638c57d74f1f859cb4ef5f8388ea8dccd022d5bd93f7dddbdf1296bce13568cccfc07229162d4667", + "ct": "d779c438c49f6d7cfa155fe08faca96877df3fefe23b55724c43a79e9c699dcd259b7310b9ed39461b9586e4463b8c4c0de05cfbdbaf5669b19825e6c5ef2eda6c717fe6af689f9506d9e961f1f67913cfe3fc", + "tag": "ac1e0f62a7a2df604d54c3b24baa787e", + "result": "valid" + }, + { + "tcId": 97, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9471e16cdd71494fbc1acb98b1142c62", + "iv": "571ab1a0f19ad6bd14700efee7dc21d2", + "aad": "", + "msg": "05354e24807aa943de3ec8bea0531296deb50e0cffd144384f13d9b8eaf79bfaea7530401b229d72d68e63397121e73c17b2b0a5306b734e339c52176bb10ed04b7b6b05a82ed6716f9fd6a5988fc073ab7f1835", + "ct": "8014f84c822dd2a330520295ce4f4670af974ee24c63ed0ed06eb6a3a7cd56b62b3b1893a0929f5df598bc7e8d09528cc50ab13a49dee60935777455939964f09adf207814ceaeb041fc22ce06d4705e79f4feee", + "tag": "799dbf7f645ea2a5420563c8acb40f2d", + "result": "valid" + }, + { + "tcId": 98, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8b9705cc0be81b641a53d779cb1419b4", + "iv": "4a3029db6547b867c5315b9985ded83c", + "aad": "", + "msg": "8e9a6d13b97546985cb83da3a42d7863eb771b4de727182b7453f08bb988fd69e6e5ad2f21640db1243d5c6387481cb531e11bb400d3937a9500cb03f5fd530338a1e68d554cec34552e1327d7e15e860fea3ae6ff", + "ct": "df3e45a65a15e3b910eb7f20cb8a926dc10f3027a6180379359815f12d55602bae4d3b199748c95d9eef1cba3107c837866550766d7ce51f2bb921ab6e679b834f5e6c0666b00514273fc82262963ef072905f6f94", + "tag": "0077ab9dee68093308c98e8bb48af2e3", + "result": "valid" + }, + { + "tcId": 99, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "98e7d7eb0a59421203bd82836a4e8e95", + "iv": "1577264e30d0926338267f560f732636", + "aad": "", + "msg": "b763ed33792956ac89f561ba2c0898acf5c2483ffc7722212630c90313eaf432b98a1ea6c089f997d141ccddbe344bb9c5e5b162ba47ae8acad197d31d65b91788b7e306c89a5afa2994feece770c04018ef4aa5020d", + "ct": "38b9291a7de56fadb4c12454e4b39c5fe95b5e1dbb6677ff7eaed418f152ede79427815e32ea1a612852782eb70a911792876aa12a61fd646b9813965e4c5c56602afd49e362944b849f09393f79bceb20580d474eca", + "tag": "4133c8860cc96dcedd9fd5786b6c5061", + "result": "valid" + }, + { + "tcId": 100, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "72e3caf3f7eb0ec56796fb30036d4a1e", + "iv": "b8d32bd0e35c4d94092c3308ee5304b2", + "aad": "", + "msg": "e259140a10c48db3a84510b140d1ba4dc2b0ff41d549f3a6d841c983db2d1112e22f7299e2366d4ab653f25eb5ab2da285e6c8ae75db1249252d28432afc2b449f9537fccac41bd288eb5cccc5b04c57c54ec1745586a0", + "ct": "f7db7bfb3149eaf67822ab5b228ae00257c298787e29ee40a8c764af58fb200430cf5634b00d2742033dc3e0fb5c5a0ab6092f5bd9c6c7c88e520e316fb13a3cdb8144d24fae7af9e62ad61d77601c4ed4e889704e750a", + "tag": "16364fb26658d9998fca9ee43b852cfe", + "result": "valid" + }, + { + "tcId": 101, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "57f98b28bb5c343ae6649fe5be2a2ac1", + "iv": "d9f1b12ca9df6a99853c4894c1f6be26", + "aad": "", + "msg": "b930d6f9a46ab624699c55938c533c0cee6a71641beb8b2ef3522e1138e6ef852449332c81b63f1615dd81aa9785a8354a24c3f9ca48ad7a342289759512b1cc27b9fc47a0165115c7ea6ac6766e4f46bdc2a89f873746c9", + "ct": "253a99ecc38ab0b1939c66e9ea7178bd524414d49dbb690f6872b147f0e0c99189c6a7caf5c5f9f6592a9c9c8815960e26725e15ecb695632e1e31c957c68db9295c4be092dec86490337aeb8a7fb8a69c95fb6b7470db58", + "tag": "91f0707f8a984506e656ee65198d4a38", + "result": "valid" + }, + { + "tcId": 102, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cd8ae4cfb355fe6ea0921b8e19047ebf", + "iv": "5cfd0bc15a057b238b76ecc2496be735", + "aad": "", + "msg": "afdf87958ea3c2833a01c1da01234bcf9930d48db4d2cbeb4f92438158ae5b309ef71b206478a6d34bc347ebae0bfb2191fe1d65759ff36dc612b591b62c9a9591a820eea0e534fe21299f7d760ffe92b342991437fbea78b0", + "ct": "269fadb6411d492819683d2a707c1e3bc168d56efc53599337f249f29a2db8fc97487ea34bb85162d19097087f5b2c74eef2e8073e0e843a1a8d9f60ae89d3c43f874c1c4594b72baf94659b1f8c6ea754aff5de69249ebced", + "tag": "1c51eb2f59c23aef7fcf357f1e5c841f", + "result": "valid" + }, + { + "tcId": 103, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c1c98e956758c4ef413109817875dbe8", + "iv": "7f36e5786e8abac1e6b6089da897fa47", + "aad": "", + "msg": "ecea78c25edac5bb29eb9095bbe2590d5012a558b78241ce370f7982b5e96a12cb052c9b49c1074270dd79a40355832d876439a7f6e98550f5c2be65628d5d3c18b07dfd77409663bf6cdf398a31bcc01ddbf803dfd98627f4c9", + "ct": "0c444b59f75d31fbc10640b634732ee0eee929d61685a1f19c742cafa920f9aeccc4c10936d2c9d50345e001a747f4a50aebe21eaa9f650696760ec3b344b991f6d8517af346ff54bbbafad952cf980cc4e414cb397e4d71fd54", + "tag": "95ae82ad462b4f3a7d626da1271b2092", + "result": "valid" + }, + { + "tcId": 104, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "fbde035414948abc46893bc51743ea74", + "iv": "47cbd113a2868ebf1e12dff0ab17a235", + "aad": "", + "msg": "84fb4854f33eea6596dbdab8c0f2e1343a10aecdf74bd49ae474734092f2f8a6dbb3033c67fb939406c4470a7cae3a7547fd1a218b303a64d69c8d7c43dd204fddbde40e6c485c8f4a81a1a03c065ca088375a26a343e777f31b34", + "ct": "1b661cd5a23d88f1097d28c243a06782d26a91ca30b6141ad86dd9ed69d2a4003cd0fba9ebaa3ec26513cde125dd357475bf9e8b5590040f70d29d73fa142cbf00849542bc50cbb60948dddb190b93e796fd0d99e3930396f9bc96", + "tag": "8ddfbf7d9c37610b724862e55cf63cb5", + "result": "valid" + }, + { + "tcId": 105, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7683ead7be69fe1c38d00e8629c2d1e3", + "iv": "35d1e14c58ed8f8aac6ac6c0ab7b7f1f", + "aad": "", + "msg": "0f7e74b4d43f9579d14abad8dd1622e340ed6dba8bcc62f2375cae1d0b8d8b6b546d9d6727b080517715e7704975b7a881c0f5fc4a1759f5e2a3501c05f82ad663ca02c6ebbeb77861bd3a829503df0555042c06b95de93554412d85", + "ct": "61abf7e39c120c227333a474dd7fd4c8582a20ae4b9775830d362237c0dabaf939b5f3d147edf9d1b15ef9d57631096703daa6d3bfccc859c4e18f7f4031129548322a99b3011c46f449db7cd90392539e8a473b3611449a31fe1563", + "tag": "dd7859561784cda96d136c5d8d1bd4da", + "result": "valid" + }, + { + "tcId": 106, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8c402182fbfbdaece72a21a90c3e285c", + "iv": "861ce0b088ff9a5c03d4f0f49047904f", + "aad": "", + "msg": "3cb4c64fa2d29e834ecbb7114eb6b6c2a816013c39fc59cc03c7624b1738fd20e9891256f0bdd3ada814846195c343fb6bf2955cabdd3c851ba41fce487bf630557811a1029fbcda48c88a1bd7edee45c8b6e6a16a2cd0d07fc6a56afa", + "ct": "31185a8af7b778b56c8458ffd4d1eb708b1bd2abcaa30721042261c8c1e7b369fe011c2391a68784ce33fcf0fb5da434c54e96e772f12d53a5493b2a40582d1550848b681f4195d77ec594ffc41a04fc50a46cb43935f48f5d60774818", + "tag": "8497fa4c681b02a62146cd1c7bd33085", + "result": "valid" + }, + { + "tcId": 107, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5993653177f78cd6d9a1d20d1597bffc", + "iv": "28b2323fd719ad7fa6a558d4f12ba815", + "aad": "", + "msg": "4847a456d18d98e83ec3321a1ad4c1b2419fc52bd755efc1077899dc35d7366ad5dd8fb04be6fd6e089ce1eabac1abd6149d19a5e7c9eb64ed34e9e057623458946781c5dda5359a88aa18b29b7c259338456c75424471a1031c24b0b96e", + "ct": "cd1559cee992a2095296bbb4fbcf4272a75f8a6f11b98d4ea549b33bcbf48340af70d1b43d440768b5e1d58d86d6fdfa6fc501f540e714025627fb464aaa10c2dda7b9bef5aa17e30ccefaa639ac6ca9529587f5637ee9a03d6357282848", + "tag": "3eed3dc801d3a5193ee471f2b646e108", + "result": "valid" + }, + { + "tcId": 108, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1648b2e6a9c1071f6488703b3f7756a0", + "iv": "f1db5d9d0607254485c984f4f7b0bfee", + "aad": "", + "msg": "ebb737c6017141dc14958da5d669461577c6f5b8cfd57d41effc4ad52c9ff77569e8cb1582fdf1d752fc915c737aeee838241d1363f857ee5fcbd29e10a895f06fb8991ef95614b412973948319a76d762dc70048bc9c576ed897f4a830571", + "ct": "835fa22b05861c583ecd861d9c29a3d7b6685d62abd2c45e85e8058727ca0405c10ad98fa902aa33fe0c74299a7273ac81a9ab1f33211c738d74454c19d6f0a9dbedc7e969075ed9e7779c844d11d210f6d8ebfd7bc6e68cf425f47ffeacee", + "tag": "5943f0ff685ce4c4d04f183814443ae7", + "result": "valid" + }, + { + "tcId": 109, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9050a8e13b12cbf91b93b5c5abb630a1", + "iv": "91c2abad6dbd7576d94a307221bf0b02", + "aad": "", + "msg": "c2b4a1e5ca02c5a6bf013ff69571e281fc8c746c1e46cb6a65f4fd6bdc7ece649101db0ae00ed466ffeef4459dad663f6463a16637a4aafeebc2f32132ac1a9644a81653b895ebc53fd9d7520e50064aae9c56339b295244b4810884665f4c95", + "ct": "d09db800e371747c4395b58dd6a8abf4b08559c0c30a6c700f698872f425a516ff1c1a81db0f7a281d3b9b5348a2aa294e83be06f4cb8e744be5fe5f01db8c0cd4a2135c9e50ed04735678664c11a594ba13178a748131bfb97d8e30cdea34c7", + "tag": "50b50dd94eeb1cba7f15ad4f3216bc60", + "result": "valid" + }, + { + "tcId": 110, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7ce6f1420bbe46d6c1d15a18b34b1f5e", + "iv": "f25bbc79b863e40a027884234b8b6fb2", + "aad": "", + "msg": "3074c76f8ddf943b08cb08163f74d7b99e83aec4ca5bef042f6da9c4e0d7e1ec1f4a11cbbca75210abfeabd6b1ad0a0401b12ae343e7dcece85861e8ec29b2c84e7796b7ff19efcabd1a35966f0b1fbdf97b738006b64d0ab760ba52674a694559", + "ct": "29a94d7a0617d5222608dacc7fb53773e220d60e32024d149620f739d4e25d527f9f14714ee63af7c5132c3b212cb1f0b414eab91bb07f2cef72c242081aa635067beece349d86a4780995c0add83fab9be8c0218904e6c5ac615bebc32459689a", + "tag": "b3bad1ab7c8abc1dbbef23c3ed7d3ed2", + "result": "valid" + }, + { + "tcId": 111, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c9e4434f4411197718f75a62a26a2a1b", + "iv": "2bc6ad92f28a8ed8a652db96804c0942", + "aad": "", + "msg": "640f92fee19e982c9e785b748440d15f60aac9e2bee95c561c45f303232a5e3ea9c61a2723c51e6b8de8ddf31f9a6157e58b48f6b43f9301cc892a03d6234dd0d1ad65c3d5926e2a6e461851ddd50689d8d528566988ca8e747a8701764896b91a0a", + "ct": "f7ad5e108d5966c91c37913958370b0c1aab260d1f923d45b375173805f858de956de4d7acee933d10e94118fc2058fc258e8ba321a6a3b28043ef92d07a4da5b2e9d7228ab4b1bd3a98a85602432700cfc7cc2923483139c5d164dd3aa7d5071b1e", + "tag": "5753b9a6c41d9ff43759a8f8f14b5381", + "result": "valid" + }, + { + "tcId": 112, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "35097af9df8d145db6977df2cb6cec97", + "iv": "9458bb1d1de0fcfb853f8e710e9aad7d", + "aad": "", + "msg": "33db5d62d9dae802232d99ff2dad9b8955d91a46e235b33b8b60ef7ec188958e8a33b13c737cf12d8818de5fe070a1880346f679702d9ef97771d73a2a0bd35eea05ff60eb5751c04808997cb30d91fdecb15f682d5c70882ce51423f0666700c406f2", + "ct": "0340ac423d64d4b9bbd01c35120b1d138c033fc3bff4fc6441824540cf20e730edd374f34e0151df3477e06b668ab0da0762c49b47e5c953e37b7031284b490d1b94053ff699f9e177e1cc320f842f57369f907f89be833f27d4267102a8a8818db273", + "tag": "013184fd9f6c3043324694ff894ddf26", + "result": "valid" + }, + { + "tcId": 113, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dead90d600924ca0a36e9ea1c3f43b6e", + "iv": "74294502b61e288ed4ef4d81b655b522", + "aad": "", + "msg": "e49c523ee08f78adb0a55461b4742be1e7906b47b264eaa91cc913febec64c02d177d028dbbca9603fbfe119be6d50e69b6d687596fbba00cf96d02de2fd7f6c36fc189e84985cbef7be320e059a17cbddf98892a7948fdd5ce96e2c24660b7d80cc7d8f", + "ct": "a85959e96494d817b532a636c0586afc7733c0fd9f38c94e1d4bd1773f2a780064853bdb237705b80cd2eae3778e7533d0683ee4b85bea1624e5ce0b7c2ed75b2d19ffd295bb8d702148f677012ff94922f89bcd10f79b77a3c57eec9b99dfd23e4e5d01", + "tag": "6445e1b6e4b1dfd2dc8c5c78761c75dc", + "result": "valid" + }, + { + "tcId": 114, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d70b0d9a60953cf00b702c96046fcd34", + "iv": "ad8ebe96e3f5d573dbbcceea8de03630", + "aad": "", + "msg": "8066b91418bfffb2bb065bf71669b9ac0f06fa6de924644fa1bc49f8cdfbe38c5b74c4af01b89bca49c82abb4735a56314994dbe78f58ca181b44b55550e409d099d5c3cc515a3bd8d26c053881a97d80322b89e9d46c3bbe9d43ec2f8bec577ecb4180729", + "ct": "52efdc95bad0515a424443e45716f356bb9e32a62a6d7fc7d631052e10f194b1246d9e7c473e2e262ace585d684ab9b4f580d16dc0982e4e6723f6ba309a17526a6ab50fcd468a2c18cc9653b43ea364ac5fbbb7bd41106c1c0063e91c6a5d652a709e9d15", + "tag": "a0c9383ee32ac5192551644b8a4db4fb", + "result": "valid" + }, + { + "tcId": 115, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a63f39c24512185e187ed75277d1cac6", + "iv": "80ebdbc0931973ac14d9b7f44375b926", + "aad": "", + "msg": "465bb4975fbabc62ab0e4129bdd9cfab3d95916b8e7d5404aa2ce8db2423b866a54c04633d1d0a5b5e07d51173964577b396f3f53ea2274b5cb3c1e433b1472f6f5c807aa1946c18a2096bce0f7a84aa7f5277e83fb85ddc9b6c407d04c851bf8a2204bda851", + "ct": "20d22cfd53b9c769f10b6caaf86f0bf8c00e5eea7a6f0de62f7a9b6d3a955832cb9733457c8836b09eb59984d19950e54c853d3cbb4c55be0d2ddd8ff3fb6238a670256f77891953319958612750ccb4ff7a62cd9c1a4c55adafd81f57bb1b2e1f62b8ab9f40", + "tag": "0f5e100a128cee6a11a848801154943d", + "result": "valid" + }, + { + "tcId": 116, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "232f188a8e9f04679df20491cc085713", + "iv": "eee1a5ded7a22a6c87794f56f3d73ad5", + "aad": "", + "msg": "38a6a4e39ed46321c82872488957f862ca843cf57a131fcab18acd37fc03e451b62b718fc52e70030bc913ec07f0a248cdbe748acb7d6db742274018021f9a194bdf496d7220d1c2a4caa08997eafe48d4f803539b9804c1da33e27bf1667f8770a84afe003c36", + "ct": "f5d0a39859419f907d88efd3adaa4475d9ce5ce9b53a272a95acf01b1732692c33adec30740219c699a94c29fa09f4b69186c8156c6290e4073da6b0e5a5f40d4ee8bec3d6d5a2494ac166a9b88cfcab1a52142b4c15ed34d0580af50a4f8aab848d4f62b59327", + "tag": "6dd4c36ad872d48a44db653ccc2c5c1e", + "result": "valid" + }, + { + "tcId": 117, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "63cfe910c5ab2321cbfd6f0e03d49f27", + "iv": "41e2e69e9f73f576ea7cf370c594335d", + "aad": "", + "msg": "61edafdb85d41eb0ce5465a791d78410cea753f30a9ef8a09cb64d68d1cabd02593058d9f192fca250c8a2383a42fb1c5eb359844537556fd1eee888e82b9115e76d31c788235e5cd37575e631cd934cbf49742f235da1b08cb0fc0b2c3a6665b858d2b3703caf9a", + "ct": "ac044b6af032653cb6fd12d3c7e86727e978dbc6181a200105e33b01dde75bf60ec063be1413aa8804f9b1253a9b8310609391e82b1476e6a635c2882fec41a8ae7704f250015ce860a26bac6b6a8ac82aeb930c141cc32ba26f3eb1b4afac6737d86b10a9e56010", + "tag": "5fe6c15d04e4c0ea57ed68a6e242ca16", + "result": "valid" + }, + { + "tcId": 118, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "138d8cf142dad4a18819137ac8d166e5", + "iv": "cb95b0ed433f3d79d66d67b017f21a06", + "aad": "", + "msg": "411d7a959aed9d7ec438d2c5abcd072cd8c9e8ea3d3e28160dbeb8f377d8c0d83ec0c34fc4a4f60b8ba3b6a40284a6c3ed5d662367107d9ad5f0629ffba78cc47b61885232954da54fe3fc0536ae12fec6f8354a6c42cb8631f076a7224a2460e205d451d92cbbb79c", + "ct": "2281c605e2b6e8120e4ff1aab426e25cc19faff1445aefd13d53edba8c1ca752294caa821c3dcdba7a9fc9cc60c957ff4f39bd31262cba096b8893d714efd5d7f092170c7f4821e1cd51d27b26304625875954429792f86d9b203c5491643236f515ae4f9d1dea937f", + "tag": "681ac5a265cce3c2dcaf8c3ad27f0875", + "result": "valid" + }, + { + "tcId": 119, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6cd07a04bbf88e6f2d90ffe3245ad848", + "iv": "f313173416b8479dc250f5d57a273e7b", + "aad": "", + "msg": "e0360819001c3a06a9b9ee5ce3383418d2b4c74d6c21ff01f5b987c6659d83add70212f082fb59be3b9b1c22813baaab1bbc51da3825cd5ab6d96bf0abff1cf1c01d7a94b9fef8db2f86decd31178fa29bedfa3ca2c5e4ecea5232d47b7a6bfc647310b27b8ec05c3b25", + "ct": "27a94944ccef693990cc73443a976d6ead0cc4f919bff2903f3434cf3cd3a445cd24c06ae9df69643ad0b0c4539f29c9f48e3fb659f8e41334abc6adec0ab7b7f18df2de2cbffb99479969b725e665c5c72ece39dece1b10ee1e88b4cb4838e9ae11798bc96ce0a4781e", + "tag": "8218fe4ff584e08c96e5c883db4bf507", + "result": "valid" + }, + { + "tcId": 120, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bb19d184728556d2407531aca999fa41", + "iv": "6894b07b7fc92867cdb56ce0ad6532c8", + "aad": "", + "msg": "97376bc24e3f61040af530f20d12c27d86799a4e300e1e0bb11b176f08dcb6bea98c806b08c1d94e8c6242685c5ee502fbb345e3495d6ea9776843cfe6a46dbb576936f2ba6485345336190d533277b8d888bccb5f37274790d79a047906792e9aabeafcaaa9e487b1c423", + "ct": "80361b65764963d2f70c4dc1710dd50344bf66dee84e2c1ac9f6d1f6c8d83ae4e16b6641d4dce4c625eaad209af58be33f396837a67239a7f1986c3420e4273d7fa019f9cc535ee3da4ea733c9e5783d14c6a81704c13ae6c315f3aa7590a3f67a827613b963bbd8552a41", + "tag": "d5f37323241377d28b4b6725619ee0d0", + "result": "valid" + }, + { + "tcId": 121, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3b05a77cf35b01e0a6b0769d3b37ca9f", + "iv": "59fa649a2e9e387336bc649056891a2a", + "aad": "", + "msg": "669e59418658ec7c569235d73cad9e8f09ec009c9d2cbfee2c5da1733a1dcec42c0ea6acc59fd3429fb5d8bd132198e1d57fe75d3d823c088415a152ff77b22e233a0a10f42494d64f9fdef23f751da9a40cc78ee0ffd795056185a9e7a214d7e660df6c7689f09950396173", + "ct": "3a8e5d69a3d1b6f454e95113afd7e8782fdb2fd085800e694545bee668de06ad1390c3c62e05628e816fefdf401e58702639f14c5236abde5dae5fce36b25a4bd362f5cf6c553dc91d339ba2ceaba9f2a776df17766a42382036af10a539db46e9dde1e628b09138dfafcd0b", + "tag": "43c8fbba2498619954d18657e30551ef", + "result": "valid" + }, + { + "tcId": 122, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4363adf5ed5dd296b854f47d0e31e298", + "iv": "41852318629a3ba19c5261f3c22f0419", + "aad": "", + "msg": "f558314d106f3ae7112a4b576dd636639a3052c468ec28e9b142bcbd56f47119ec04a0d591c6e29dd12b1daa412c80febb31a1032478fca2d8c56c991e45a0b8877bdc9886444af3e683f005ac2e05f8282660d9db9d32bcf7b739a688a3cd42df13cba98f1db5b62ac9120e98", + "ct": "6c36c78efccbe2de363ba74fab49c083d42299769eee456254b063f7582738e3ef8bd471af724e251c1917b0c70cf3ae170e0bd578b2b8657f10aadf295aa003462d7676d0ec2c6e241d56d38091299f6cef2e26e81b0c6920d8fc3f6d86633227dafe5d243e01b5304bc7ce41", + "tag": "acff0159568244f9d4a8e9e376cb37b0", + "result": "valid" + }, + { + "tcId": 123, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4b58f6e6080efeb65a46c94e9a3e014e", + "iv": "342a02bd8bd5578da1b444cb5acad162", + "aad": "", + "msg": "154ef710421610ef238fdfab9c44243c9e75cf8029ebf9d6101d2a5a3d7d593230943a89ddbe890648c9faea399d79295b5bb67027238301fff20d5da38c894341fa936e472132ea792fa5bafebdaf73747a70bb57f9922b5d3246da620e75de2dc6a68b9fa879b2d17831aa9d43", + "ct": "7700f63d4dc1ac62e04af6554a7e07fa01a81f983575e434c1449e784a0322fbd6248375170a00489f969de05a1fc88cdac15ee2fa43d4e3bc38bc0c7692433c0d73ee023216e2bdb257de861cbaf249fe91eb17d4fbf6fcb2fee8683f9a57ecd348eea5bd90c25a04eb2f21a36c", + "tag": "4ccd8480332c414b1ee0b40c492d6417", + "result": "valid" + }, + { + "tcId": 124, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1e631400215ff6dffc9790ef24a85b39", + "iv": "d5ae55bf65ddd5d888a3b67a74ecd52b", + "aad": "", + "msg": "469d07622922bbc39b753f574893ceb5afd7a5fc084986c1932979183613a9989345a2b4e95dfc25b1d8e29ad053ac794764585e1e7330f0b52d3021dd637111bfc40c7b3accea1482b7cac78c917932c3ddb1e09e918a2b4d71cbbea62c6b41f2c3d6750552b8dac7daa2dfafb72d", + "ct": "18f7f65f372c9afb13193ebd9b82765221564be763cfc2fb21f7345c875bd9f95d1fb94d96939b82188b132a84e72e4beb065f2d94dc135399cc762b172d687e3781c7ae18b30203d679acd679d2f3cb324755d0d3f1e933d85d352e25f2a7639b6b0db4cc36593e560b784f124273", + "tag": "c71293963d403375f04109e9718a0d09", + "result": "valid" + }, + { + "tcId": 125, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bdf1871c33da5765a5fbd2a85f32c841", + "iv": "a6e19460df695323c0b3a2076dce7a0e", + "aad": "", + "msg": "1117135689fd3757fd91c4b7ffb76611bc021e242deb4bbaf15df2915b066cad96284ff740dfa518ea3e06b833a4a7b4e6873cb3fa971a7970121b049b0814fd3fa89d46efdd670e435e463b380548cfc505d4d1d1ee9d276efbed4bc77eacd01a4a27b6abe182b1375a085731e3002c", + "ct": "99ad8d37f9e24455e3c6ee5d04a9f7ee2b616f24bce98daaf724e283b9bef156ba9550c4f3cbfed5e8703e0451cb0139d7fef0a4b1c809f3f49d0d3448aaee174d549e8c3a99712912bbf959341846fd080ac587327788b3704dd42a6e3866bedc5d38ec00a3ef7c3d69ea80d5c12757", + "tag": "55d6cda362e77af4af39bf7605df086e", + "result": "valid" + }, + { + "tcId": 126, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ee0eabf7e511d8249bc6c4a60500d13e", + "iv": "38dc6400abc95cf4f9bf79fc22951a78", + "aad": "", + "msg": "fb0d51af03b31cd11286b88d7a6cbb3732a07135cdac01353006273174c82e5dfde4a1fb0d0d274963a970d784331aecf72bd997bb3cdd7fb2d6479327c7725799c43d03c3cc198c266297af8562b68b66050a5d85b99b3fcfd3a41c040bc97f51ccc1d348e5e71296a04f587dcac6cb15", + "ct": "3bc1b4ac275b546f80874fa917a03ae2018ab53ea8e36fa4948436ad6c19fa4cf282570b1f8129d590eeabd92cac1575f5ec5a0a4b54a6297a98bce1cbfd4783a4d94676dcf51b570b15eb0399a2891ac656f22079c6c824625dd98b07523a8f8f4fc10297c8b8daaf00235cba521cc228", + "tag": "e2b4b2236ffcbca1377008973821df48", + "result": "valid" + }, + { + "tcId": 127, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f9c931f85262c4044dcd7c50fd320ba4", + "iv": "22f3db7bb96ffddff45d6dffb8b2fb9e", + "aad": "", + "msg": "32f528672fc81ec169c732944eadffdde9c838c68748bfb5b3511c577f46ef5b8080075357493519aceb0a5e342006f66e2b4092a6a72fb599abb96817acbf1ea5da6e96c857270a643fc2d563031ce714fae0a6112baa2f6937b02428fc50f2cc3dc862c210f4b9545c56fb02bd61ead191", + "ct": "431b52378812016477c0a3ca45a08f221dc9102fd99a63a034f27e2047e86937935e7a92c20c1098b44182d3f9802d620d342bf533c3f3533f9c865ae65e7eae13d7e7ad64e9ac99ee9e29bdc690caa23d1114aebe400cc2130c6f2c1337b204d893cf7efdfbd551af9e7371b16d6bbdacfa", + "tag": "93b7e0d14bff72ef54af5666cc90c5c5", + "result": "valid" + }, + { + "tcId": 128, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3f059c47eff37c1ab82b450157ae3b25", + "iv": "a7bab495be716e4acb7a5f9045d56963", + "aad": "", + "msg": "2eeaa81c36c7b349cef85e02eee5ed6e9234961c7445595c417d132aa0a8e247294e649dd46e472dc17a9fcdd215607f141bc6538a599b2fe0acd60758583e7b44985b439e6df61a780fa5339ff766269e6b755ac1191a362e210581cc44530c068f6bc3c504d08f2cf3f0b9fde2fc6808061a", + "ct": "9a4c7afb38fe68a11b2d387d9214333b945874a31cbc9647ce56ddaaa669a6e1269f271caea9f65a8042e3d9061b04af416c9e21000c6d9bea01a64e1150a5cb32ad2d522cfae39c48c588e16c29aade30c725bc17f311a093a21e132a4f83078a6f5f4396f4877f002290c82976715981cb0f", + "tag": "7d959c92bfe3a40d31e8926906f1b99f", + "result": "valid" + }, + { + "tcId": 129, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "80a57fac0b62a1af61b238d7b00f3d58", + "iv": "af50facab54958ac1bf5744555099d18", + "aad": "", + "msg": "547ed8dab65aca8458ad7abdbf3e12e8bc5011c628060d229c64ab1af2ffc2e5cac35c991ebdba08c54d5faecd69012437ef7cfb7aa38e7a8965b0c9b59a253bdf04ead76fb9f1ae6d4577ad89e87a80338881ae824f411702a6a4eee46885c54934ac49983506fccd952552b5b77e281cc85482", + "ct": "0299ee23999a13d95b387388f36f86b0e1ce5956ce4b115178b086b2f0bad9f7ed2319bc315f46427a927583cba77cecfa56e07a17d103397703c810250ef8828cd1f86eda83ebd620a4fcba0b209d63ec543e394ced97099bc4eb244680099bb0c8ef366938d8de755bf2fc33c384a2b3deea53", + "tag": "070019096c1813ccfa43544c2e462175", + "result": "valid" + }, + { + "tcId": 130, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1b9d4d11a0e3207df9842388b5bb1ecc", + "iv": "81f33f0cc2e17ce6b72f16c509bc9a70", + "aad": "", + "msg": "5bcecd69e93efe0d53ac87f900c858dd9017db9b3e297bb168755e4d9534d16dd4f550f87da0756694988222184081707f552ee530f29d9d3bc3bc3e42497526f986df8005e9f29e9f199545199a6ccdf6ec58c622c7560dd55d742b9d675b53f09ec41820b36debc29687046c3e14b19a77a43336", + "ct": "0aaf7faa4268694c6b5b13d0d3a5c2fbe1e1f7c2fddcc1aac46cd06caaf97fcbecaa91580ed2c00868f198adc5bae3c8be8b39a57b090f393e9c57670c77cd5ab7e33a81bced1716bde42356147bf04d30aff484cf2e09827d2583525d62f20fa4b5ab48f04226be89c7c6c17f82b53e3281c64f8f", + "tag": "1c35fa3217a84a85d4b84186c19666f2", + "result": "valid" + }, + { + "tcId": 131, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e890677ef82147e7859fcba1f95bf9c5", + "iv": "585a47e7689a8f8e49c6d3f8c555c1c5", + "aad": "", + "msg": "742e0fad7f367af0b34ec98ad50e13106fdaa0305937410db5fbc583130a7ec18d814f1e3d068503b291168cad1baad19f7285fee8cd1a646e7a0fb6fe1b6ce907619b31ed66074c84f0b1d97a570bb827ce55714b16e2b71cd5d0f866cce7b256a9e4f52f4faa2ef65f9a044083d129b7964e3f963e", + "ct": "f4d9b5ef5531e94139ec57815f2aa128687b1c4f2019163ef7c164dad9f157f184e8c0dcb1e05025d1e45514069ac9c4085e7152fb34389ffc8709d41b6bd280a5f721d6005a9aa8e3ae893f2354bc9fc62d932740eb45cbee93b7b89e572f176741f4c2913f0dcd9acbab4357c1282685c2ace055e3", + "tag": "a55e22196410a3247f1b9c8e50a147bc", + "result": "valid" + }, + { + "tcId": 132, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dec5110a25a1d41a6248c1009355c129", + "iv": "d5ad334f2ba1823f1bb5632d20ed7804", + "aad": "", + "msg": "ec4480fd145a811c56aa1d70c4166e60403d71d65098253a53dde9a939b9c286bf2b4d73f5b9e53a8f52cde00fc38e86814b84625150053e3913b57a3a0b59140af580bf596d2456328c33bf68d17876e9e5932d27ab2663ffad703b99da850a9e86f029ed48f87ec6cde0c73e3a2274f0c26d9a7c42c5", + "ct": "ce99ebfbde0f64ddf893e9cafa297f7d4e8317392cd56c3462da08842052360b2957534c906142b061e38bb3481579b1af5ac38f65a79ad288376422a9daee55a6364aedcfae1f3dd6f6c3e0fe1c51c544fbf413cb026cba27ed91100b5793ef8bbbe6cadc542781d36e7eb4cdf32872e219b80e97f712", + "tag": "9c0dcaa9d0db5329a8ffd189e9d6c0c1", + "result": "valid" + }, + { + "tcId": 133, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ce2dae22f2f49b7b8d67b14296853a83", + "iv": "2048bb6955f19e2a87939521bacd07d0", + "aad": "", + "msg": "a2083f4acaf94ce3898c0af93b11e4d514302c6f186709b6ad07d1c62236442fd4dc8c04e462771da407e57ac9f38de83f8e2e089ad8e5e0726b609a1ee03c895fc7ac1a550bd4ae3762250cd8a67d6d4863bc485ef515a5a6103f6192921b37cbe19bff20de4ab4c9eb92eba0a208e00b3f80eb8437b28e", + "ct": "56b7959591a997f93e3a8d33eb3f8977ad5fcc6756f77d876ce500d6c1973fbb2322126871b770a1ac70712f9132bf28d5f7c152758df363a366f4f8203431cffe34afc4bededd09943afdc9ce29441da91a9866284f9aa3660e2768b8d8ce36deafe848d19d92445a9a3e66654e1ce8b59101a01dc40160", + "tag": "36e91eee3c08601961e6d48d10c62d7c", + "result": "valid" + }, + { + "tcId": 134, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "805932b22752fec04579e8734f260804", + "iv": "36e9acb388058b68cf80ce427c50b6bd", + "aad": "", + "msg": "1fc1a55e4725db2f4529a516e3a143d7f882a1f3b5f0d4237b4ee08a9970fd7ad46c5075eb07ca60c49b215f0513829b873212876035034ace8d7fa2009382c6277796de6a007ad90b4576c2400d2e520a61f9ad9f4c21846e65b90cc26b26d4e4fac25327d525134db22e2609c184689c5a131ce1967f5a0b", + "ct": "e905aa18289c79b377ee8538d9b7644eac066a47582cf3290cf0be2f8caf55b71044bcfe88bbc837e2c1384558551c15b82870910db3333a82294495328eb0774b40d3fbafde458e999d324353dde837b3e37d6b33ead906682afc8675af028862fac0e1eb05a6ed342ee05609678aeaa61b8ce7dcfe9342e3", + "tag": "bdeb625ef332e8d4c3a75a80c2b6c84e", + "result": "valid" + }, + { + "tcId": 135, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5a695ea489dd6bf333f17f4d26e75f0e", + "iv": "eeff1a1dbb6c0c6139eed2967391c38f", + "aad": "", + "msg": "c06cd07b9146fb86a8b1d998e701304baf9a3daec2457ea49d3634580b55fc3409dc3cb826df00ed95230268dd61c856e0fe0208c13e37c0bfa620a28da198ffeb3a728cf617ea81e3d314b53f975d5cc3002d130648fcff1ed5f19dc36acaf12d228073e3472b8676787fa060ac7adbf79770b3f9e4838540b4", + "ct": "cb9c4ad26f4059308e0ff9f107ff83155d8b0b94834ab4eb6adfb28d1057a425ecf8604a1db30506dd063387e92dc4e1663d6860608326822a2c08fe045c6ab687d0348373d4bbd1a4e793a9f5e682387a2c1c45782e3a80af69a6bd6010c94465a6d3119194255cb6c182f3c70f910564707d353e7b15a637bd", + "tag": "f307953283ac55d8d5cd6c6d74f61b55", + "result": "valid" + }, + { + "tcId": 136, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4158ebe5bfc45e1d26cfdbaa6ba811fc", + "iv": "e6da53b0be90f1ae368e455ffde6e8bd", + "aad": "", + "msg": "3aa11fc0cb99b8c6d08adb21695327c515193d6713a9324b854b18a0f2bdf2114c5add36bef113f27f21cf91f193a878520b88aaefb84696876e8959ce664b5835e3c5499d6e33eb14387f373272d4140c3375bf880eb91d380ab1d2c19243775ae2f9b47de19f3e1b76831641f8be04cc9a0d5d7f79dc4997ce0f", + "ct": "465607866eaeb9a84bce163c8f09f7654bc4cc069a5c81c768576ae1648994fa60146b8dc351c10dfa20464a8d10ae05e238ba7e166d2a72a205237faa8612973240a5c31b8eb97714b35d6ad40e8ce0864c670ec4e7819b7817e1d5feacb3ccfa8c43e49d50c7e680c2c6dbe869bd16e5d9ebbdba4a8d73d66fa2", + "tag": "fcd320b2162a4184e3e970ae45f03a51", + "result": "valid" + }, + { + "tcId": 137, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "164e1e3a9ae079bcd0af88a13bca6058", + "iv": "ef07fc4394131b158498c7d10980f6af", + "aad": "", + "msg": "da0570a3324ce7579a1ab6377526ffa0ed6469d8d8ff15612627435ac8513d260720d5f810cf122a763b4fe5c168e74a45efc12e42abbabec918db8041e38131952a3a48db662451726348fd2d640ed3863e4366891f7f40769404adc27b6842af8ff5f815484f8ee8e3b4bc70cf26606d015d59e57f77dbefa42951", + "ct": "fbcf5b61d9de645ca9d9203ba051291a437ef05a5b5ee2c349bb27a42c9326052768b0f596fed8212822acd0424a01b10cf2f1529650a1fd40269c854ddfa5e3e21343d51f1d8b9d1324fb22429d636f707e47b7f3f7f2dc4aec3d2b154602c4e8d70ec13691a5c1406b8d40dcfedf2a426bd986d180a78515337c96", + "tag": "a2ff2ab8407b8a78d6e86cf1c99083f9", + "result": "valid" + }, + { + "tcId": 138, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7d67e97ca7533b4578edf133c1149269", + "iv": "3ed5641fe9a3ed21adc952c9786842f5", + "aad": "", + "msg": "e64994359dd4902f33162f1249e23f4d2f26407cb65e84f4cf40b8c55e73be3274cfd75f98db6152fe1841ca7cc6cd13b55d68961b57863ac8decccf099ac7f4b0012129bc562de4d3fbb8d3341c9c85d0679aa0d0d7243f8b78eb159ab1ec9185a9760cfaf1d7aa745134bab356de88f1e15d8b9b238ccedd9e5c3c06", + "ct": "906aa91353629ee544cc943cbf34455b1a26eeec6684b904d6876364e3be022f24a8ff907688873b89e410a5da3a3efbcc7b511a1f2728962c22b6aba1dab570f676e476e1f7eaad491b95917531edff843f94b84dd23f734b0344a606b4e15109bfeb5d4eeb67a6cc2451c26572137c94faf1eac8e825957efb60da91", + "tag": "8fcbd3c4b609e394d91d4173c7d68843", + "result": "valid" + }, + { + "tcId": 139, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "258e3298f09218f5a04f0700cf84f88d", + "iv": "1760acf7a920bd24fb421f38d6ae31da", + "aad": "", + "msg": "7fc88432c5d6fa4eb3359d887eb6abc04f778308d74736ea5e9d29c45ef54f4d0d0e2b65c214bf9eb69f9f78183e1dd88fdce33bdbf8f2a489bb05f2d950ca226ca6bcc2f5df233bbda322d6c5a2303016c89f297eb99202774f7b147ae67d94327faeec04524a871426d84f114ee49cb43bda72f9b35ef7594e26c1b7fc", + "ct": "23e538c9c644e2700ec823dc65d3cd13f8b2f93b0c875f2d85d4f703b51567876288fed0b18c5b48157c4e83cb6d0ccff5ad03ed9b8bd279f8582bb7661765395a69e6ba4e14a5a2c49161803f955e875a9fd23f6566b5815cf737f759cd1e809ec1f473c61ed8e99a83c65f90db8e3ea623fbb7f445e5652cf063271506", + "tag": "c1032ec1fc68dcfab89756de4b545090", + "result": "valid" + }, + { + "tcId": 140, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "63529e93557eaf6b2e011a6e9ae833ad", + "iv": "1eab81b02f8ce0dcb0a86ca3335310c0", + "aad": "", + "msg": "705e454334cb8047cd2900725f59c5f22c79a45af1ac22f1a6222028937e8798efe15503c405a670ede0e317bd7fca1e1ed325a788728222cfe2ad4b0e47caf236fe2d7398fb472de7fd67c87909233d86768ea4fa1c1fee02e4132ec03542e9e64c7448e93a3aeede5e04d1064b7b625949d9998029cf427e6caf64c94ff9", + "ct": "cc976c6f34d9102ac2b8fc462c9a91ebd684ea31f5661b40e5f7ea5b9c7aa45e514340d2295985b0aef87ccd87c1ae8744d9b410b26cbfc571d17a053a490f7894cab4ce768db7aaf654416d66ae704d3489f56cd305d11ab66c57aee0a933c4b9abaee5e44a2ea769f3994d9f0671d277fb1c6e56d5d6f455c530dcf4c72b", + "tag": "401039fad6c85890a05e0568f4db5474", + "result": "valid" + }, + { + "tcId": 141, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "fef019184a4989b1ea4fd506bf647611", + "iv": "892b0b43323a56c2f7f03c7a4cb3d4ac", + "aad": "", + "msg": "3cc482d7e5b5f4d98097bf64ea7600f3fc6c8edaf5fc778212afc728850393d38b290041800a42712647edd21a84b7ed6c5f9e809fbffb7b33856d3a5a1bbb475048298cac86e8a79be4fb1116f322e81331fcc4ea9493098b1a9dc5c8434286d911daffc91ac2e52c2b55ad631f6a8552fcad4dbf1e2053b8699328eb9c1073", + "ct": "2a2dd1712abbc3773564c9f1209f11bd95d024343304a09388c87e7a771c6608a3a90226c84e2ad0cabaca26592e7d346352339665e3bdff267f63006cd415341a38b2bb43f8a6e3ec72297ca3a7ec2d5b59e68fae0d5c184c008661ac50dbc656c239bd3ccdaaf054e36ef4bfb04b18d0811c99e5c03c96ac1cf3e8a73a7ed6", + "tag": "4ae127da925f20856bdb9c2377f571d9", + "result": "valid" + }, + { + "tcId": 142, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a2626441d6f6212eef4f35f7532c2b5a", + "iv": "28ca833b0c4009ddbd6c4a7e84126dcb", + "aad": "", + "msg": "37f4c83672472fe2a82798953a051aa56e1078faf8006b6057092b7f69237b3df69d3a49955b427b12d14d1b2f65796ce0d80f4289c5c685719a326ae20d782138866c902d7f10c36239ea7fb7473b5e78b9d8d86afb40774aaf5ecb0e279ff5cc022a5a190e49c9e37a085188eea5189ea65717372201dbbce5380cbd1de31924", + "ct": "9d29a682ae045852b28e798b002fb6ae04d1ee7c68a47b76bd8a8819f82a03de3dd444a5715071d36df173ff17a395ec7781203c9cbf6baa248f741107f00cd24e3d82c65b628d2da6141bace8eabc8cc459166f8111975f94d643425145638e89fa9ae3e37463b716817e41bb241bb5eed9f7a44cafe2b2015b98c3a3f665d152", + "tag": "d3e2c42d06004b6b7570134ab658105a", + "result": "valid" + }, + { + "tcId": 143, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c5cf0b69e38547c06728d8d5741e6637", + "iv": "1a2dfc75afa25ea3d5cad62b4169fa55", + "aad": "", + "msg": "7b67a77414a5afc35fdc9301694a7bb0f1df4e476f33ad4fa5aaec4a0f29a617eb10802659b6fb08b9e7562bf3fa38661c46983165a78f5f79f229fd51bf4190fd2721136ff753738936730f883f2a8a450ebae12c986bae4a60aab47a2c94313085358451597c7012c8017d8d286e532de634dca8432b8bbdcbe0b9c4acc6c10303", + "ct": "dd374f8c9b1df2d12c56fdf1725e02b4f1c9a21e4471ad626c44026610cc795268d1ed40558e4a2898f28aca7d5727d2bdea14cca227ba6c86912cb2349eb99a1715d4ee139ddfe3dedc30fbf4a37c0daf3482b99ad9e5ab16fc7a2ffa848edc1d8557b4e056cb480859a3a6fcec8f1bcb084afa00b2404594575b4b9b90a6c33d44", + "tag": "38b4ad49bfbfdde1cc42d31f5895a7d4", + "result": "valid" + }, + { + "tcId": 144, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "56f05ee003138b137f6c6556fa4f1a00", + "iv": "7a9fb60783997696f94d710862ec7633", + "aad": "", + "msg": "ba96ca195b95012ec605c00b604d84c1ee121017a95081a83becd82b56378113b96038075892a81aeb6ab8a2e400096e62ee19f90069a5cb46f98245d7c1c9118a11f1a5ffa0d278143abbdd394a1da18649ba9337d4b280670e374d15d0629a35c21bd4d62249f803ff5e843ced8c682aaf068cb6b91709bb4d44aed62d9d35dc6d8b", + "ct": "e66fa8f2313404a672d12a7743bf7b2a18e99e2b63146158a52db020e53c95b1778c9c8fb381cd56d0c0f437cdafdba2cb95dfa4778d0c701d32802c2df53cea1cd6596c15e3f8e83a14a8ae445253666d66f950b79622cc3496522db98c71614737e99f304415ac1160223103edb2348cc64bb4b3a0469034c9231bff2c4b1820bc5a", + "tag": "ba92b845a15274c3e5cb6be136e7e121", + "result": "valid" + }, + { + "tcId": 145, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c59d7b9ea4769d6ccb3b9361a9b89045", + "iv": "6334f06806e34c79a0a5d077a740ac60", + "aad": "", + "msg": "b8932a94f35fe6d036a8e7eecc2a610072d135b56357c100c3803878b8e10c75e869dcba49d3a641af28b6bdc8704ef48cfacec0bd39058a12504dd7e28c5bffe289ae9f796df43b4cfc3fc6da0780235bfada7b51696a5339bedfb3fd5ebab66e8ecb6e35f2fe854ad532877a4224934a776a67357288951922218fdd0f2007839b5665", + "ct": "e3826b0a4adf19a0f26657d4a0723b51b954251853b951573c7e7d2d1e91be72e19bebb04235f92b7fb3d940206d947390b993b4b9378f02944f32d34ff529c887f6390989c38adda01907b19ef72dc01eb097c56ac739796bd047c2e98e001de805cf32245763047a9400047a250b90913bfcf06c14bb028a1cd0f4eeac4f47f2eb7bdb", + "tag": "a12e233e06bf5a4142c61d4d3a995581", + "result": "valid" + }, + { + "tcId": 146, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7d433b23a047f9a703f405431ac0ff71", + "iv": "188899b14697bb885104caf515bced3c", + "aad": "", + "msg": "5ce5062ffa87d40fc4b5f05fb152a4979cbfb9c678e24698272033791bf5a511535264b7d11661ba38f941af4912d7ff52978badf15be0293df184647bc55b52181bac7dbd388c7ba4a8e319d5f7254a2cb63983f0894c234081d4e6e89b871c822f46504eef9add2a349385bfea2454b8a63df9b88cc61621a30261af5ab7c2c37b07a32a", + "ct": "0e6363731f43c93df28f4a67fdbde23a7bf0008dd99d5cb9ad71d9d017af56007567f67ff77efe3fea39a1489a23c143ee8214620ea995b9de6f57f5f699f94cfea038bf5a0e2b1a29afa4357756ac77e038a28d545d71c3c0ee47b3f9625227951c5aef80ee17f291150b711f5a5388bc7f6aac855511a4298bfc22e1dc96332f266877eb", + "tag": "3b03fe42c2925ec4f256bb0bd3e0684e", + "result": "valid" + }, + { + "tcId": 147, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "891e4ea96cc4896711b6c4e2498710d0", + "iv": "f8c159f05a4425fbce9e79c6631b193a", + "aad": "", + "msg": "50a350e82d4fa13eb88b1226dfa87cffe017b353d6d1b25576395478311f11ad5f4a8d349b6f819ad781337ac9b2aeaa7e932b7f736fd7f12c34e8c5cf4dc881945f350015879dae6ad208fae899bf8363e1e4e6d37f859ba399c656934b8ddda54000bc2539bea2e325752ec11710fab1c10362425ed197533796b89eb4abdcedbdb444d672", + "ct": "438878cb79fecd8e0e4379e9035b4b9b1989a1a1dd45b698de8b5c082980fcf18a22353674a1fe7afcae19de9de69c1115f14ecb844d6bc1aa59b279906b215ac69a27360ef059cb45044f654fc78e0e416f84ea6b66e44cbdb7e93fc5f59e3db3048154cf8a154cddcecd420896840f58ff75ec3afe931062f8091eb49ba25073fb16d54e06", + "tag": "505740d9228170ea52a73ebd4e133355", + "result": "valid" + }, + { + "tcId": 148, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "22c1d2b142545593fd04553e34a6569a", + "iv": "520faca923448c320801e1f76e855399", + "aad": "", + "msg": "18a1f3a8d37f864a0595e9d6e84f9b7343e029d17b7a26bb89d975ab17bf7db660e8d879fa31ad198a261fda0dd0f432234410c209c84f6c455b1d5f5e8f12724c564678cbc17abd5dbff4be3c99c3122a1110d6a7c4d1de7c0a3ec7fca2f85bb6ac627095283ec1cd693a8921ecfd4106d68df91010de7b7c051e7bb1d47ec498fcc6f4f9a540", + "ct": "16801fd3af658ea711b17b5da14e84a039138873d7082930338bfdb0a3b826600c2b062a4a32e709c41496bd7417fc5454296ba68ebf2e935e017506947009dfddc5aa90adbd1a129266f342bfdaf2aed9ff784dace222ecf013d39937323d602f90f405b30e520f81fe9e35f5cedee566c32c8f674964068e4bb6449223037a77c84eaa99fd48", + "tag": "ce8ee87c60b99939a5486bdd237876bc", + "result": "valid" + }, + { + "tcId": 149, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e49f67091fa1711a0fa14779a89935e9", + "iv": "d236ac0856ef555975b3296296ddcdf0", + "aad": "", + "msg": "5ee81d6fc2c892a6ff58dda49e5c05f59fc40446f297bb4ef3aa21740ade48da9b49fa4f4b76b7e3f7d84b7ef01f78b1a900fc0595a35a7f7e5de96e76711b9d80e061ef38862e32d843f6ed693fe3cb1b1a461296b7ebca6a7778adce4a7e70dafbc1cc1b39d952fba56513bd1bed3080ed07ce2226dea4a2f0dc512a883c22c89138afcf3507e6", + "ct": "450c558377013fc5430529c7fa410e47e838ace61adc0ab7d17efe9a9fc8e438c7df5317e1bc14a80bbcaa2b8fde5a7fb62bc23678a26e9610f490b26aa04f5dcd7c37b7091b0a63d47b84c17ca4a085df083628fb350f4e856061fd7d623caa3c35c519a69e6815b17fb291a31897f74d7fde7e53e166763ea8f42be1dc064f8ea7ae56bd2037b2", + "tag": "64e5004034699fc503edff00c8033f4d", + "result": "valid" + }, + { + "tcId": 150, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6bb4b9265edcc62cb4554132683764b7", + "iv": "a42c9edb9cceba601ef8f8dfe01bf77d", + "aad": "", + "msg": "4b48f135a5ae903c16b5e760a99ae90282170c12da9b068768d3caa72bca96df085bd8584ee345ae67ca82a499bffcd951496dbda80ef70b6319d3029a6de74a99acacd3fd7aec01de7335e595c09e56f43abe71cf023dde4d15f69148126ae697b5b4a6d839bce01d2680645ecdd65f7bc2543ab61ae314d547ae3d2c612668b552bbe7f97f453484", + "ct": "455d316626c6c04d8e4534237d786238df4b98843041285e10ce9e3daab57efc3ed331375cd6ad350ca6f67e8f0e32917017787c1304358839547ba5c46be5d267afff383e1f4b8c39486dbdfa9da28f0bc257248ca05a344693de165e5faeb8f9903111b7fe20dab41ef2473de758558f5b0224f59c5a2964a8b4a39cb10eb2f296aa103726723cfe", + "tag": "1d12fc018ec9859eef6676b1302ac4d9", + "result": "valid" + }, + { + "tcId": 151, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0d2c409fc604ec2208497c6092bbe67a", + "iv": "6540244bb287d155c32bbfb4f5a4a225", + "aad": "", + "msg": "a5790b128666ed96844e6fbb2d8c6cf1498cd9dc7de5e42375ddc7d9a1b841bb81109daf4dffda3dcee34b5fc78e905e042a357939128ad59c19abd6abe6004300f27d75c5bbc3d3a72553fcfd93f1785300008c5360640d38b3b37f8a046413130c7ff8d7520afb45b32002fe70895bdc83eff0d574c3afdf89ab1b914393e0e04a7359bbfd491fa59c", + "ct": "a4d0a3e7c9053d4c852205b64a5236e09c20d0cab1a9e5f35944a6f120a1d2ca84283189aa0873f90feaab421c4ebbdd666bd49310a63e728b552444dac0b08258a66e5c18543b4b9e7f62f9e6ba3c3965de55ad2f4e737c675a02552f31634cd297fe23485abef37c89a7f77f2800b1d5618abd7b8a8f96b79626a8843815b758b000fff1ad77df93f9", + "tag": "fad48fd0c1468b6caf1af42dcce019d2", + "result": "valid" + }, + { + "tcId": 152, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "43e52a03eb7650182b11532ef9af38c5", + "iv": "98ab8c9c21910d45760d3c63f34e0191", + "aad": "", + "msg": "fe49b7040b86e225789b79d365222251219156ead5f4d9e936f55cb96647f64556ecf8ef8ec4967beed461dbe6ace31f8f62fa43505279da65f7286dea98515d6b3fa04f9fbfb85c4b4db78fa0aa8592e851238fc462cd48c89bc9fb10c20e95ac6008a752f37819f820d568de547fa0d923541a70593c13549d9e80488d57cf12ccaf74a9544300e27c1b", + "ct": "3547a327590ff5fbc00c49e0b875aca6de857e60d86a8093162edd186e1a2b4ef2c723d4de4cd373c3497dc679fc8a45a3fb95988201733ea09207d76943ccbc1da6a244e32738afa265cf2e506c2b15b63e8dcd0ae824acad1b2e5219a9a7b449b4485d5ddd41599b60c41e6c7b90182e751f38f52a5678059c8f737c0246c968283470054b14b676d371", + "tag": "83eef3ef550b0d930f150f7e725e04a6", + "result": "valid" + }, + { + "tcId": 153, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f8d0a4e7c502c217ff7010724c0b7e17", + "iv": "d24a7f8a3657d9ef49f7b79e27b7a5e3", + "aad": "", + "msg": "126d6e7feb1fd4cb16e14a595664802d57261ab4f746c9ef900c6840fdf3061d18f725c54ca055821e438a46e5909256c86df99078dcb249e16863ee555a584e310437cc886923f3b960dcc3e9034f241413aa31d911a4b6ef2f7ad0c6ea331fbafad0f104f1bb8127643f7e32b308e7ac0d6624a089f3deafeb14d340306ba2e46987c63a3f22f484761831", + "ct": "740b5a303402428f949a069f4a04b5832e83c8ea8802dc29b8a552377eb9344ec3d265e075f73fb013abcc5b8f825c22cb29b730e694031d2b7599fb458b656c0f6b66c029a1fbab51f5979ac0d4e040f792590f101d81bebdc2aed8349ce12a3e68006485ea7f7faaeccb1447c6b14f5f1ef59e91122117157886ddfc17327cf19f94ec8f9c385334e6e632", + "tag": "610cf44a0ec69e253167cb262b641692", + "result": "valid" + }, + { + "tcId": 154, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "69926cba7dfa817cdf10e00fa3d5e970", + "iv": "22ec52386ac9dc8674646ddb25dc2cac", + "aad": "", + "msg": "8ea34bf86a3eaf9c02c07c6c3baf3e9696b752c6c70e3b91b03f6373e91c3baf4c29f8f2e2f2dd0fa0fa253caa429f0753f37a9ae2d0753f906fe97dbf7317bf1733afb2c082f36b79c058769406ce8dc2289a6ad28b923c6d7d8129790f8904b8dcddb4039d6eb26f161b6784df3666db2ffd126aa1e41008d5f5ff854eca37eac6c5821d2d8647c541fe5f40", + "ct": "e0417a3642609a5225abc4744ce62a40efad2bc0b8a8e327d68ba26576a9a5f1762d30081cf8579b5c1e3c0e6d855e1bbafe9ab7358817333a8cb5d4849c14a51cd8aabffa26211d2a9a1dd55197ed432353067e170bab4e979356ee5a56c9790ed0ce4625052f0bd97d5fef3db920eca5fe706623112325260bba156078a6b8917932ca4f28b7fc1fe2339906", + "tag": "0662cbd08760597251e2af65fd999bae", + "result": "valid" + }, + { + "tcId": 155, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "19fafcd751e6c010a51d22028ea83998", + "iv": "285188668bc787a7b5e2fad59d221c12", + "aad": "", + "msg": "31c85fe28cf8d908873b39cd311cba063f13baccd945bdf5d7412875b05e25b0b0c5129a820d5478bf06cbd36689fc11d17affe57d16a4198457dc1c3c4a6008d1632babcd41cccb0f5242c7db887de1f6aa8dc7226953585786c76dd1071094000f7cced9a5c4e824e4f102b32e403fea551b5fd83f0ea5b6bf42b9ef38450e6408dc343283f3a22fd424bf8854", + "ct": "826e33162e592dfd01707b910cfa40729e30b18b33d5e238d467a79d9812d53a59d6dfbb984ccc910b92d3f5f3eb6cd4ec2ae1f8676f7752ac184d8ce6b78c2b079b75e5784a77c39fd53a6ecb7fed594453adccd15612b6924bf7954c31b3f26304be7be8627be41d8e5af18b14421e47634fbee59093de4db665d3584ff65b00244d8cb3aab13a087e2b8137a0", + "tag": "921ede19d27b9141e7f70186c551d65a", + "result": "valid" + }, + { + "tcId": 156, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b0aa484633dbdd6154da3cb56a08f2e3", + "iv": "fc6d7cbc7e5712ec4fdb84a42f1da0b7", + "aad": "", + "msg": "62325c9e44a98d9f22d7ff9fa3c2453fc8d37bb600c1d2d9964e08e87f7bb210ec289261dcfa0f529721a5a057687884ccdd17ca86a93face27523682d09be4471935d1bd75e363b71e9b3804eb7f4e0826fe1010de1792acf2316aef56e3a78febf4afd8c19edec1ab99cb744d537721f0429df24333c457a5de4a08e1448bce3f1191568ed5f964835701914753a", + "ct": "71a5e3763bc8dd38c1e509ab451d46376452109924340b4e93dab3835acffdd6250a7fd7ee901836877173fd925fd9576efadbf5cf380bf4963637b322fa9cde1d85f60a27f50e1266ee74e339d82689713677d656fe3b27aed2dae75d9739b33e3443dd5ef04e7f44d3acecc0b0d26214043941ac617a22b9b5310201caf7adf881ea4217d076f7900398b59c4adf", + "tag": "31c7341ca396177d3d06d51b2fce1165", + "result": "valid" + }, + { + "tcId": 157, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5f64adc28c39d3905bcbb960a6de04ac", + "iv": "5fe4f0318e6fed365a6086189be5f172", + "aad": "", + "msg": "1635f0eec0cdb55aa23ba7269e56f8f6b2a04e776376c31d41a3968cac9b93803df0e8222e6a315f42e7ed35decc7dcd91ee6d40369057fba431231061fa6a4f72824294c89cb774bae8ecfa70a31361dc0039393d68a62dff4bd8af89d9a65591d663b99477beb82fd564ffc58a327122312f4e01a046a01f46e1c5a0b1bc6f56115c4d33e175d0b8149b2850090329", + "ct": "5aa0733f0014d676916e7b514811a3761a0402f9970478148541835ad537567f682cea8c221474c9d1092a29694e8ea67fd3bd84cf42905691c2e9f6d4d25b81e08c279650e5756adf1126c492459a1141a3f7fe8c5d026a38cbafdccbd9646aadfac442716a20c9ddafaec2b9449dd1e3d2387438ee37bb6bfd1e6714ede50675297cadcb4b847a33e6d17eef0c18e1", + "tag": "631bb31c95a3457e3d398d13d50b0f05", + "result": "valid" + }, + { + "tcId": 158, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "404ee616fbe2ebc84aaecf0f1ba17984", + "iv": "34470c63b17f650381e102d7e54c9098", + "aad": "", + "msg": "b41e545f7063ec85c5d01ff0755f4b1986a950c0271ee173b2fbcfa6dbc04fc228315fa02783bfa66ad34683df9659b14eded9d6245f37b0e4b5b5e58bfe09f12df661a287ad7048d4252fe246708407168ef3ac43ceab5f15ca2bbb2a8232aa875f956a7dac3593ec1214617b465466c379ca02b53d4f4aac16b86a1a12098c8759176298041aa776c6bd7073b2197383", + "ct": "3c0c7cb20f6642047d38d74cc66adef8234b9d8665a9bb4224b5af6b0c8c067e4ce3b6a7e181800124c60001fe89fb2833b7841afd46b97eb7f778247a6671153591673721ee9088caef5d70f0f9bc957c7f93e5299b07796ec7bc95dc37fbdd14ce75c5dfe52bdd69f6d54af7f7cf608ef0393496093f959b35b3e86711d6d59271e50e6021af7970fee873f61c8e9e89", + "tag": "9b0a4061299a82b4dcec68f3b903d172", + "result": "valid" + }, + { + "tcId": 159, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a189a82b0bb90239902fad403a9b0c93", + "iv": "0c0cbeab9bfc2832bf6e1b50fa6f12f9", + "aad": "", + "msg": "746c72c66314e34fe9a8617b8fc961cb1558c260a89da93b30bc500cc13f84ea127f62ae6bd4d5e8ea36f1f12c72df3bb2b2b3f3e44fe97106bab7893f5530e751f784f7ad80eeab8513c2af9f9a321754420fa263498a1ea7c69100f6206ca962880ee3dd409daf12e368352509a1f90e30c1b5e717428742aa6489dbdd1783f0cd4fe4cd97b061c8faca4a7a58c743eaea", + "ct": "ece766aeae1485bb23317ebed615ca40d3be60b053f046e3f13a67d9240b625b12975bc58da8f6babad8e54f3f2367a4de7ef5de9e83cea0b01642b40980bdcb314bb62f4171bac2fbe3d427bb8a2cca3534e858d1fc51b46daf34cf0fbb7c57ffa8a75091f7400a609eebf2b18019692bd27a11fd836bdec61b77cd24145d2f41cd4cd21f061f82a3d98c60b71dde3c10ed", + "tag": "c8e620904e81ac8e0de69728efe6cc7e", + "result": "valid" + }, + { + "tcId": 160, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0af179f0b2521caac91c2e8751e1ae52", + "iv": "11cc03a851b8f1e51c5093cbda4e5bad", + "aad": "", + "msg": "b237d43690e38aa46cfc328ebc66f707429be4f98a6f245521aac52a19f83d85b1fe89accf0dacd444e004341aa04b9b2bab5d9d6d059a30a727874fe628025a3a733e04cc398d7250e550910e368728c20100d83f099ff1915607171b6e535002ae9a6fd1387a92de8cd0a55126bad5a19ffb679fbb7d0c377a2318201033f25d97128e833ecef4523aafb9a5cdd26f1f2e93", + "ct": "b29e59ed227d20ac02370b8b631d036d3255b0ab10351e85e5c30c531bc8de9f92cc27812369e5b43aa3db8ee9443abe9df2ef79efdf5e943ceb2ebcaf545a5ea64df69a3110c16f9d24c980afa37aa88c65f5c12ccbe23b0504b1922a11358c18c1da9acaf7bf379c05a3b7e28d7bd66138a22063675bad2ca83a7a2abb2dfdf244cf5368ad2093a86cae83a738f350f6d9dc", + "tag": "89544cf77e9d9a0a6757a8518c3f4447", + "result": "valid" + }, + { + "tcId": 161, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "508da51851d355585f175e5d1e2037a2", + "iv": "a1986a871feb0d33c02a245616ce813a", + "aad": "", + "msg": "3cf201cadfb50a968bcd9039c40925d08b43167df62863c8604aace93aafb527af517fd1269a146b4667e86ca121ae0dd272a324d2c6325b2dd3245d65e56fa2a8ff13b6466e47bade61f2fa77119e409740bc2d90deef56636875c2b83ca9f7ab42ad792a42adb84b654178c89f391a1601ddd34cba27634997e10784a8fc1328dfc5ce76923c6ee75b397c39c5752f1e6aa0cc", + "ct": "ab5b3066651225568bae050a13fc165eedd3086c66a18220d12b3237d94595cb29225ff105b2fcaa4d84b59dec411c86b9d01c8de8a21e7fe44ef156a198c3717c2a5160ecba40a5c9e76b64136366e9a9aa190ba74c347beb370e530027fbe704ed6ff3a9257eb5ac2523a06c7ad0e930f750ccc77ef3a68c5d992257e43913ca2102c52c54a2b3f2695c79c072d61ebbd4e2ed", + "tag": "5a400cd397beb904894fca7c9233b1ed", + "result": "valid" + }, + { + "tcId": 162, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "922a03e790d8acdd3f1bbb271cae474e", + "iv": "60173c91e657488fd42ac520e5eb75e8", + "aad": "", + "msg": "81a6394509682c97d680ee07df3ae82d29bbc5147f901ac681a37dfd68bd15a08f59246f3075be7c6f3a1d5749d530ca8656be6a1d4805fe5f35601baab2be32219a5ece2af46568c457a4482c0070c08ea556c15ece9b216493d292490a9510b684e2d62bf9c43c1d9bd2cd59d4a8716ba9032b7af5913ff9cf880804d7a552a5d09d99214d97170c5fe886a4761b4208865b6c22", + "ct": "f96c75ac2243210242cc3a3fc554d04c0d6e7fd7bc3be74c4cc2407ed432ca67fe3a477f5b915dba3ae31ddcade9f5cc4e0de73832bfd23ff28cc8914b4690ee2397c7c3b9d371a153953d99b062fada85c64022bbeb086ca74a61afe727720ea8274e6721110e7fe990c95ac3221cce8c13d9cd895934757700537a6aaa1ff0e744182eb6cb9ca836ceb7e7a346dd5ce29bc1ddd8", + "tag": "06fc1503c411c5c84bb4499e76428dd8", + "result": "valid" + }, + { + "tcId": 163, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "38a2b40a6be1f9fdd212bac418bc277e", + "iv": "dcfd3da1b4b91c2f61183f4adf18d765", + "aad": "", + "msg": "188ff6390d50975c113c826de26fb5adbacd13bb0f7a3a51e8fc3c8d04cfe46929edb6e93d3994f7826d17550151fb784c05d0d7a50d187886dabb5e8c0e2782e2c0f084d76da492fb80ee2c2b05ee6813e48163af98efd6abdfb758ba7c4f8a390ed5c9e15e2907a2e0f115995b0a3fec16b812cb79970d5d228ebc78fdbb59ec1f37f45f47feff110c541cde0aac5c0e641ee9978a", + "ct": "b7145e8accbe22610150c8f6bc4f7cc4ea4d309332f218bbbaffbafbeb5a46f5aec86dcd28442c9acd36d85e2313f0599127756f8d654ca1d491cc10ee583e354ae121b364121d7b36fa4cdf7ec1050c2a63eb9886d9af56b16289617d3b91ac9eac9211753df6b96601c7ab602f49b11ef7c6edcafccd1e06cc46a1908da1b804ec6450beb2ad6efaee4d329539d76f0fe05d11ec21", + "tag": "4891d5ac73d069db68db7c0a885c5f9e", + "result": "valid" + }, + { + "tcId": 164, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "14539516be4f567d1581da29f08586e1", + "iv": "e5bd70136582ec10421c9bbc6ce40bee", + "aad": "", + "msg": "b8483df531dca5f9bdb929754e8fcb8880db88e2cdccc4750f34f30c2942d13cc5006db24b56186bd6e35da1a2f5af4ce7eb09b99249a0181304cbad69feb3ce4ae9e62e1f71fd1b857742120206e481a6aa95050c1bd30ccbba55c2a64349b6e94cca5a00257193fb9a8a0890226473873928f654a8be04e0faf28345a0fdd89085fb9c2c686027bd1f1110a5278d20e2ba01e272f02a", + "ct": "6dad3beb35419e05a9c4b081cf614d8d5f89aba4f33fb8b13d5ea8ca1d8613bdbc386ef5d0ccd073f93a337c749b2b2bc58f76cda7de0ec34fb8db3320c06f6eb98a4b98ef24f7caa8f32e1d183994d3d391454147b588fa1f4889c21627a66db8fee873264a3f872e999341e6de0707a41432f3b0f91a1cd2ad1c7aec0e5ab0659c587bc743133bc9a88bea9ea006ca095e84ba037d61", + "tag": "9476545a51adc040ab313b89f47cae6d", + "result": "valid" + }, + { + "tcId": 165, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "166e5b07c60146e9f77cab18f8e933a4", + "iv": "62157185451f16048b7e2547eb7124cc", + "aad": "", + "msg": "68667e2d0518f842cb0ea99fda4a4f943d3ec09eb85493e7209e5ae796ccfbea44643d836ec89afcba2b08b7c0bf78af7e465e3e243115b788030cb1bdc1f11b07c0487fef8ff43f26add5948d6ff7f96ab0cb96729bf9244c48af8a3c7e19b95573b1fb0e508dceff26465e8c2aa2fe340d2066ee31f330b3821ad0cdd6d971d9f2e5f90782572ec4b4a9e63aaed5ba7ee491ceaa5d9ca3", + "ct": "a23ea2ff335b5878b266d2abeb8d2dda837b2737625e90bbf00832e9b566a51def703338c96a95881608db983bd2590b543a0eacc071f89ad0d612cdcd960b193ed41ac59d606e9b8d1d865cc1a7673f71f6a2370d350866aba87d44e146a46d03aee004815cc8e5137cdeb05330a164dc00af2357b0393fa15c2f1b252eed3c192ffa9832c3d47fbd5d24acb5d6dc72c2b25dd7df4711f4", + "tag": "c393267d0054deb8ad79dc83efdf9452", + "result": "valid" + }, + { + "tcId": 166, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c59ed88345e841e34b9f40549b11b7e9", + "iv": "466f17a437444c978347381024504585", + "aad": "", + "msg": "307c83173d6b2f42f409ee79c168a2b9894bffbd833940d44d2fc07e3291b02d4ed5d0d861dd2f1dd37a5504657e50784e23780ea73fbac588b6a3f9a028963aadf40416767318e03c4d2b38108c1387db495e2a1c8c3b8d11e17854fa6d6e4750837c44a8a1f9c97892cd4b1fbf360234885c7a8ca5c06433c6899c10702c7a10b5a3fa4d7159fbdf4eb7509a0512af0076f455df24d78058", + "ct": "a6c4f4ba0400aa5ee5542b151e01364853642894ed2c4bd17bd30464b7a7dff95a31a62541206dd3c333d4f75913bfac933b3b990a455441f79f634bcefe8c112e813597e2b5f29cd77a774c0b358edd19687e57a5f151283451c3fc064998f051bdd5c3d0976ddc42140c6109ecd0feada27544ccfe4171aa64f8fa5b256c2ccb35749d4787df9f2b3ef33e95eead2dbe06d79eb3c470d9b0", + "tag": "27fff9aba4741d78b8aa2e4016eae7eb", + "result": "valid" + }, + { + "tcId": 167, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "653d448045f8efb7f5d27db51b6c44b6", + "iv": "d0e01fa9a9af0d08c67ce588f8fb99e0", + "aad": "", + "msg": "371e7c2c5078d8064d284a5d459394a5df00f254059ca8df0bdca2a2c70c9bb45bf65782f283eef2f4bf7339544a9bd275554a3731af75f7ff5d72a3803847919533a9302b7f49227890e7696ae72c97ceb5ddca062be928dcaf39a12a4b042765270710623c4f2966620122e225cb1d8f4709ead2d7ebf8733be01e80c1816fa2c65d56ef43810056206e3eaeefc84461fa4408f15574976eec", + "ct": "8d4f64e1eea0895e08d68523ca0da29249f1e82df3a65de630025ff4feca549f7bfe3dd09d85cb8ce19ad46078778352fbd15b7503bdd4852a4e806e5ed5a01fb47597c17c172c325b839a971e77542d7d1c87db5e5e25987a9396e167dc1bd01336ff52ee9e75f102ad4a95e74451f801f05878a99f2f43c2d5ae6d44c61d3a2aec7eaa8d992218413525c13721cae93aec21e9fa24e71a47d1", + "tag": "3378b27da7418bf3d85f71597d9eb06b", + "result": "valid" + }, + { + "tcId": 168, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7ae4a9829f01116378664d76585018bb", + "iv": "c3e4b834057bf254f8cbee0264bb15b2", + "aad": "", + "msg": "056557d9f41aaba479768543671de6293a3f2c0a4e511c784591ab164c0d294212917df3d9a49b85afd9eda44768c2e3b6a6e7e6eaac4269fe4f337ab9db595737381f96d382567d58d2f3d9c71f41cd0bd03f61690ed6796fecd3bf312333f07e572de3c2646a0f4f86772508ebafbb3b2cd548a8d8fb2ea9e79de7cdd80734138376ba579862ae886797c435fb824ef896dc890915785d10dec3", + "ct": "7ce436b9f3e2717e0437dcd2eb7266b5b1bc63c0fba4c76e3133d4dd764214e4c3a0e75f32de791359336058cabf81e3ec1fd605fec2ad8ae96276276b64d262bfdcb918b1864e3405b9dc4aa68fcb62b41b887c1e4e2fe1fc60a7b45af2a05583296259d605bb54a78f607e89588a19e084a5afab5228d40d9807157acc1bd5d4998f16146abf296a1c54a8ffa66d7c0f5955e2bee3437a27fe2b", + "tag": "ca909a3d33b49096adfdb904514d3f37", + "result": "valid" + }, + { + "tcId": 169, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "fe8b4a0660be6594d8cfe497d186c148", + "iv": "e8ab3c846a34f522d1f64717964ad3ed", + "aad": "", + "msg": "be53a7804e0fea98a10d9c2b2f797040ed2d4296de3910d837cb4ad3fed631b1333fefd38af2bd21507542d2b1ba60154678aaa4796e05d140615236970d34a939320255524e2ee57008811cee93cb4ca8cf36dbc2087ccb741e06d9dcba0e7f1b3a8f8217a45fd60a4fcdae8d407f42479f91114951885a731573cd4028e31fa9361b31df59a6937faadad327db14968bc87690653845e3d9bb0e13", + "ct": "3a0795ecbe4edd545677bc98aefa70aa623621fa7288eb32dea392941de34c3f3bec9ee48cf2c67c7e383bf89b91e65655229454787dcde5755594aa6963ee8bd32cb1d6511c97385ff0623ccdd3e0b1fd9395389e5eb7c7fc9eb8f8d6c89a17199a89d51ea1b90f6e5486757528bf79fdfdabf29e8833031c7bc8c171910e74cea7ae6a99eab1fec8a4f9a2800bd99cb70cfa2879ecd3cb7084cec0", + "tag": "fb593883447fe8be68074b2ddba3ea5f", + "result": "valid" + }, + { + "tcId": 170, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4813cc01d6f6bf26af4907b5b38123dd", + "iv": "d61d991652fc08f0b5660653728cce88", + "aad": "", + "msg": "c75e8075e6dd8341cd5212aa3b642d117d7348dd89b0b7d161a2722f3f1d211afd0cb7a927f44fbd90651821dcb8995716f0b698b6ccb5607eac27a57a3a18268240f6294a165c4090cf890474a27db248dd7841427b34012d2882e8eb9234cd9b38fa77fa1f1f7b982e049b415b2940d0840fb32f9950df6dff4b1c185fc1a3d70de016a5d7c56bb474aaa72c3de714dc20134cf5f747ecb35abd0c63", + "ct": "aff1392b36ebfc071e31dd9a2470247aeceb5b1ad6c9877dbdb43e128b1615a6ea7f7f74191c2724928c2fd477048e40b084842f7d32b1611df8889d24307c72bc8bd150add48bc1e4d9f4b2f096fe2594247d7db280433db5f7f012e1ebb3f11cd53d556b45f9f9cab1756f066f5338dd449be826dd24f9b2cf651ffa8f3313456215639c93e059ee025c5db8da74f5e54341218b73b61d7ffee9c6a5", + "tag": "a7f0320ded80555c2dcf9893e32ad0fe", + "result": "valid" + }, + { + "tcId": 171, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e1eccd6767cd0ea5784cc59fd1d7c719", + "iv": "09bb468136878b913f3ec2eb995b9da2", + "aad": "", + "msg": "0ba8c352132ede6106b8875b86648b472e056dccc3a14efbf09f51e5d74cda82b25fd3d23c7d5a1da0ede952da86104136c574f6b366156d850fd42423bc4e1cdfa3356403f5260257e445eea297b9ca10f944bcc2e7c24a7d712467ee0e170504f3eb53551bebd292f1b276fa0895fd18308b533f1b28ad5a2f5f69ce34865e37916c08e111651e8602c362543a146b26a94ec940ffabd8bf51ebae8cd0", + "ct": "f4470c7c8d6c7c36b0e77dc88c205c70c10b0cd97c505e7523d36e506de96b6cca962b82db32047f467a78f8ed129c3b83aa4289d1a2aaa43f49b452654e2a3295cce3cc0ed27d4dd04b52a457fba2a49ce857a4ba19d71031a876bec202ae1612166a5393a43ef18aca5772781f650054646522b4ea86de6e4fa1833e4ba76d2bcde9efeffe357260132e908a0ae41afcd1c944b7071e9e26e26a9bdcb2", + "tag": "476a9f56eb27ff6267b581179a9720a9", + "result": "valid" + }, + { + "tcId": 172, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "36bff77c5f60164985357da71950c9b6", + "iv": "a4dde626a39086b9344cdc91809ee20f", + "aad": "", + "msg": "3607d412936b9cca34371a6df983ac5d00063ad3d3658b304fd34bb0afcfe6cf5899aff0d57dcc9c5586fd982130e1c216c6ee672cef5581f88d0e7702ee38d609d9d2cb2329eccb052e7e2930e598551cfe5f0ac4081292f77de20225281c19f57fc2df6f78952d1bf3c65678918c1485f818d1d8d0163f6024b3d1506cbaee2de64606eb7ef8a554288c37b380a7bdfb94a485dbdb89f0df9ac464aceec5", + "ct": "2d79f74f3833f38f46a3ebcc47a2a5b5b3e6badc607e948a1d7744e78032508853bc33a8e1c78864bacdd14ece27f819537b3766cc5dcf059798488e7a397ebc32f158df645a367d36d506f01b2adff74cba4e882afa356d3f4fa118463e50e594aca3ee21889b0406053f8fe8a22cc9970e89e86a48d7c4b6b2695e080e2fc733d3824c42eef4fd007d995c275273ad015712ab6b551709a997225eb14104", + "tag": "62243c489a6717afc41d718a8f6f49ea", + "result": "valid" + }, + { + "tcId": 173, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c3c77988064f172f975d754235c18880", + "iv": "471792afd48e81d36e9fe27afe0a3a59", + "aad": "", + "msg": "c042f1e69a2e9b4d737cff620a81a14cb832024325c35ae2d0ef604768181376b62b371af9fb2fae9efaf7889d3b8f36375bb22e9797008db8cc2f43df28b27eab0b0586d33e9a66967ed6974e87f4f264353614225b2df850f2e3ea7b9ad0760ce5b7fa74a2d754a65b254ca25420b3fad17db1c129ba9c5aed9044873de31266d10736d3f1ea62e4064a6be837975c870c734436a0f0ac2db62fbb312f82db", + "ct": "56dd7822b8ec422e0e0fc34824a5eda676448b8f0fc7f7d908faf446f6d404bdd1c33eedfa799582775d426e9f73cc79339a7610cffa2edd0aceada26fb4812d7c9456d290485086e627eb3ca6d66330bee84c4338bf7f48c17ac5178773e9ab150113c76f36db4bfebf935aa5ef76b0cddcfe93d35565bf8d5e8e6269582ceed2aff849df3ca3d390eda800f5e313cf5b645ded845fea2284dfbb4e68d95a02", + "tag": "d2700a28a7c3294ceabbc42e823bc378", + "result": "valid" + }, + { + "tcId": 174, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5a1a3aedb135d6c56a233df2d203cdd1", + "iv": "4bdd3d3d1b592c2e0161f0717bf9277a", + "aad": "", + "msg": "34af65f7af0a8bd6f7ca6d38029119ded75c99518b1e113a5ff5ce442504ab5b9a12182490c7c87929214141ae5896e53f962522d519194a18f005dd058dbf31866f1193d48cda362abb2507fc52e65862de1249bd2fc121e09bf2f5e71aa6f9d1c8b5865108298a38337fb672fca55e476c5e81191b6b96b677ea921c9bf938c100dc8d11ffcadc850543fa947d59b68cf14978378e8bb3bc646f60c7600d268d", + "ct": "aeacd1f000f0d21b41291ae2119a129ebd5809798a964bb3e6de04cd37a82b89892acaee6901ffaf22e6f8864326d6495cb73b72a38e41bb55b1e4d5bc36affb3b066e78dd592b7d122bc8f424312e8a05c3de549af934f46aacc10dc2dd842b4ec8f5aede2ba5a35d854ac7125961b9f0f369d68f80359bcb9f99616095c35e6eca7f522121370c611dabe2ccb7673aa00dcbf78a8a1646cbd98a653997bd8218", + "tag": "f1951f72652331690f1bc0f5154e0271", + "result": "valid" + }, + { + "tcId": 175, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7dd9472a2b0dbf009460fda3bb31c42b", + "iv": "4a01f94ecaa9c2cdd2a95e71c654ca3d", + "aad": "98", + "msg": "66ed824607c0af5517e64a8c7c9ec5f0", + "ct": "19b18cce5a3044d6d383ef6cfb69384f", + "tag": "dddc84212b7dd5b653cb3d59eef84e5f", + "result": "valid" + }, + { + "tcId": 176, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "91cb7bdbae4f34f9381c2ebbddf5b681", + "iv": "444ff58990ede72dcecf653a549ad8b3", + "aad": "d122", + "msg": "c5dff8cbd23c4df16588093163526642", + "ct": "69f96f07749786f5b078493ecda90a1c", + "tag": "9fb2a4a8359e58d5a196a1267ca4e353", + "result": "valid" + }, + { + "tcId": 177, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "195af1694e7c04b445e229a91e6bea38", + "iv": "f136c8f82bc3eb26353288b5cfcee7c3", + "aad": "0c8a4e", + "msg": "c1a68284adc2bfeebcfbad0f6a8514fb", + "ct": "e13a4bb409ff4ff8ade8f1e67b467c05", + "tag": "51373f078d7b8ffbf2edf2f666a6b525", + "result": "valid" + }, + { + "tcId": 178, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "befa35231915590aa162ac33a43f3c5a", + "iv": "52dc433fd53977c954e1ca68400eea49", + "aad": "105585d6", + "msg": "9a3c0638b916df85c34e005ef97032f0", + "ct": "f7d53409672b34b5b9e825800a5f50a7", + "tag": "be30713b114a7dbdd97e05446be6dd48", + "result": "valid" + }, + { + "tcId": 179, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5931905a536c9301ced3d42343d2e03b", + "iv": "1417c36d5a4dbd7c18952c07327ea1e8", + "aad": "4e585ae122", + "msg": "1083eea229f1789caa9f6cf8f6921018", + "ct": "25974cac6d75c3d7bf9adaaece0dbb37", + "tag": "193def8d8ed964e80eddb4f92ed84acf", + "result": "valid" + }, + { + "tcId": 180, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "778e670bc51e98829c201e9b00b57ad3", + "iv": "d669bec8b88730ba76642910982488c5", + "aad": "f5a1c55fe23f", + "msg": "7887ea39272ad58a3d8143ff8c2796c5", + "ct": "7f15e2ea8977c0f851c366e5c1d3f538", + "tag": "c59d968912796f15259febbb17a10805", + "result": "valid" + }, + { + "tcId": 181, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9e8a633e1afbd452a6f74f162afe105d", + "iv": "3f58883308a42058577cedcb3abb775b", + "aad": "09297dacce6881", + "msg": "5944576988344c8534045fc84287f491", + "ct": "2894e9838184135167b5b7584e6b61d8", + "tag": "d3da0d210aa831369022e7118e868a59", + "result": "valid" + }, + { + "tcId": 182, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "965b757ba5018a8d66edc78e0ceee86b", + "iv": "2e35901ae7d491eecc8838fedd631405", + "aad": "df10d0d212242450", + "msg": "36e57a763958b02cea9d6a676ebce81f", + "ct": "be53ad396ad0e1aae6d4760f15112393", + "tag": "3a1f15cd56536179a27b9222e42aee0a", + "result": "valid" + }, + { + "tcId": 183, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c1de56054f72816ea564f233cf5c56c2", + "iv": "79ce031f556d9289be4c5e565afe0164", + "aad": "cd8f031ccd579fc427", + "msg": "ac0a61bab0affe0373647aae7f434968", + "ct": "701ed3826d7a63028c0eac067f7efc83", + "tag": "29abd307bec8fa8c121a90e9285c260d", + "result": "valid" + }, + { + "tcId": 184, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "668e043988f9fe48e5461ac5422d349c", + "iv": "b09536e391aa5dea48be365872bef74e", + "aad": "9a8c58c0d679ba01a91e", + "msg": "f4c233af75575e2179a1f2d283f4e20d", + "ct": "3d1bbf8a5792c53b67512853780b3a39", + "tag": "e5d86a03aeb80d39dc32ac521ae29fdf", + "result": "valid" + }, + { + "tcId": 185, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8b1dbed800c191c6bf00655e022909e8", + "iv": "fbce48c12f35f5c72ff455550b2ca7d2", + "aad": "cb80076f40ff66fd51033d", + "msg": "ea48e41effc6c250930a40ab6583fc78", + "ct": "60cf30b65843d121b0288421f19666b3", + "tag": "0685864d7a560eb4a847711c26e698bb", + "result": "valid" + }, + { + "tcId": 186, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6b3c7a5cf582dd5210d92f4fb1b3a239", + "iv": "c67cabd5e51a8e1944b56111e69b1495", + "aad": "d7c87bd61e1c75d4766b8267", + "msg": "65e1e3651a3b7ed9c7157a1bc141e35b", + "ct": "87cf3f98af04526728783c941a9c2813", + "tag": "2854fb1950a1e1e060ac298d763d3f31", + "result": "valid" + }, + { + "tcId": 187, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "00c6e45a513efd6c542245cfe619fb18", + "iv": "af93bd4caab0f4e96e9792e44e6000ed", + "aad": "f66833e73cdb6ba75d148b3863", + "msg": "de21eae82801d79c288c96e178f0c337", + "ct": "972ddead2dad67e3ecd7bee0a305c141", + "tag": "106f95053ca580383a3e3da1ea07f832", + "result": "valid" + }, + { + "tcId": 188, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "89712dcd2c8c153da06fb158a76ce9e1", + "iv": "a45d3e06159bfd42107edaab4edfbb4d", + "aad": "2bc36ecaa003690b206a58c4ab7f", + "msg": "e3a911c3ea6948d222d371a0df40f936", + "ct": "850136fa9deb2ad9664c0dc7c49991e2", + "tag": "defee66df4b1c372df4768525601994e", + "result": "valid" + }, + { + "tcId": 189, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "88d02033781c7b4164711a05420f256e", + "iv": "7f2985296315507aa4c0a93d5c12bd77", + "aad": "7c571d2fbb5f62523c0eb338bef9a9", + "msg": "d98adc03d9d582732eb07df23d7b9f74", + "ct": "fc8cfff38cd5afe7d34b0989eef0152b", + "tag": "823b6f8b02fd06a92d910f7e27a45c46", + "result": "valid" + }, + { + "tcId": 190, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "515840cf67d2e40eb65e54a24c72cbf2", + "iv": "bf47afdfd492137a24236bc36797a88e", + "aad": "16843c091d43b0a191d0c73d15601be9", + "msg": "c834588cb6daf9f06dd23519f4be9f56", + "ct": "5e678731a6dd960ace3b1f4b21f72496", + "tag": "170bf78c50c2c0b03fd45c866fba9f82", + "result": "valid" + }, + { + "tcId": 191, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e22be45d6965b881281726b2b0873c37", + "iv": "9db8dae8dc342c564b53319b4ec1eaf1", + "aad": "67fd3141f0ffe6003aab27d37e6e87cd0a", + "msg": "66c092056a11ee53ce62939d71dd93c4", + "ct": "829f0c00f5f8d6a3ad2bf5ee5ee43380", + "tag": "1c79ddf16916077d07b5edb8e1c68b38", + "result": "valid" + }, + { + "tcId": 192, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "fce705654d26e8715b78e942ad946dbd", + "iv": "892c39e55fc53646e66ee3eda8befc0d", + "aad": "45f563bab7b67029654b3340c0cbc5a8f819", + "msg": "56829d00321bb38e3ed07a2eb1751742", + "ct": "d125a8e5fda88afcabcc63142d0ef62b", + "tag": "0e9a40cf91d6a8ca28f23345213725d5", + "result": "valid" + }, + { + "tcId": 193, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5143048ec4d634fc42ac093d9571a0c8", + "iv": "51a139527737913662753b3e96f336c8", + "aad": "a91d04eb6d01bba3daef11cddde443a4c7ba72", + "msg": "ea776659897f0d069dd0bfa74f012c88", + "ct": "4c09b139328bd9eaf665c79852b5e4c2", + "tag": "18dabe1fce2c5b292ea0417e6c4137ae", + "result": "valid" + }, + { + "tcId": 194, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c008017fe70fbb3ef157db0ec07c5671", + "iv": "0d0603a40e74e958ff47c755a4567070", + "aad": "3420acf658e8b0c3e7a17eb9ffab8f423b6ae33a", + "msg": "7c5c92aa44c962ee7420502f9efcd6aa", + "ct": "d4e7794eea7c79ac5e6e098146654c2e", + "tag": "b440027ecec36b076adb224a90ea8c84", + "result": "valid" + }, + { + "tcId": 195, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1509e2fe3f925f894dd1607c7562a110", + "iv": "d096bab0540cacc5a069c1e0c2089d8a", + "aad": "ab6a882efcae9bb0311f6ffb58755c68b23ee1144b", + "msg": "6f59b76567d6d0894e57ed2e3e352d41", + "ct": "dbbe84cf5809a3e512dc65e869805448", + "tag": "9de885eedc1d7088e16a75a5ed5ebd93", + "result": "valid" + }, + { + "tcId": 196, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9de25577edce79dfa6e8bf741dc91de8", + "iv": "33262f00746918054dffd3bca54a132d", + "aad": "327b7f736635e7af21f1a3d27c5a8f42ed3c016f6f67", + "msg": "bb1cb0323fd9a08c8bbd126d85aa9da8", + "ct": "a4722860f36e765eef57c8383a9d7875", + "tag": "accc3f1b53f999d8bf557e14c3095ec1", + "result": "valid" + }, + { + "tcId": 197, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "eb31a2cdb16140ef139a88db076f18b7", + "iv": "f40e319c8e51cbd9e802b2175c10d501", + "aad": "ed56df3ece6742d7d1e2a38eee3d0b191c217441829810", + "msg": "09e3071c9cd50d88a82b4928ae03f2b8", + "ct": "a4b6e0850f35e1709a0e886aa48e6282", + "tag": "cdd1924dd9664761e5c47badccbb8cc9", + "result": "valid" + }, + { + "tcId": 198, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2e4492d444e5b6f4cec8c2d3615ac858", + "iv": "d02bf0763a9fefbf70c33aee1e9da1d6", + "aad": "904d86f133cec15a0c3caf14d7e029c82a07705a23f0d080", + "msg": "9e62d6511b0bda7dd7740b614d97bae0", + "ct": "737c148e773b483edbf312d12dfd4fd6", + "tag": "cd4eef2272fff6915723c939525baf0e", + "result": "valid" + }, + { + "tcId": 199, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "25ebfee8e5b2911362205107d5bc6139", + "iv": "5f0d9ca0f8a169e7a490eb6dc2eef915", + "aad": "76be37b3da1f69a03eed23ca4661429546af348fa13a14d33f", + "msg": "dfb10f4a4f131ef46df611d7fe47a75c", + "ct": "b86ba1a8b2191ab506c0380577433c6f", + "tag": "47d691820c5f40d7dab54354ce034b0d", + "result": "valid" + }, + { + "tcId": 200, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b63023715ee51d2807f43dc1ad65a831", + "iv": "4f7d6a2b2ed45e329f420f582c870899", + "aad": "433540b0dc7de3c7d5910a907a922fbed570978f04de5845249e", + "msg": "eb6333c3f9c75679355cce61328a1430", + "ct": "ca6d93202e3ac2dc682c77e28f5b7442", + "tag": "a594d4238a717600f07ff5f8a8a14189", + "result": "valid" + }, + { + "tcId": 201, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9f3af0b6e2cac759fadbd23be47d6e6b", + "iv": "5f986139ef94cf33e90ee280a7079698", + "aad": "dbcbda6ebce1a1937dccfde11bdffdac12acf63a690b67ebd180c9", + "msg": "21c22c1bc969d95e0af50022b8a601da", + "ct": "0433ed1379e13a0ccb1589408ddcd4f8", + "tag": "c3103a65e3630b4bf88b430ce869f5a0", + "result": "valid" + }, + { + "tcId": 202, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d5b34a05e885700ebe7bcaf0b4825de2", + "iv": "919f9dcd02f0a663a09430e48601e727", + "aad": "af450915c8893eb95409eb3bb4117bdd139cfd231472b17e58db8703", + "msg": "86b7daad0d7edfe12ba89a8ef836bfd3", + "ct": "2d049ad977d86d48902249559e62c0a0", + "tag": "aa77890536d40f82e3d0b9f737b87b9f", + "result": "valid" + }, + { + "tcId": 203, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "da56b40b894202810ae53c062df5a6cf", + "iv": "987425f373ec76ed8a1f7683eca7d7fa", + "aad": "ab53e8e75df72086b372645a8d5828e46230c7683def96f4e9cb48a35b", + "msg": "eef7128d9e03b48825fb781ffdc0a7e5", + "ct": "f66d134ff672556c54977b7b8fe845ad", + "tag": "313c89a8d02eeee71d51eb8f214a0220", + "result": "valid" + }, + { + "tcId": 204, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e7c0a7f1cccbc8a2a4703a7e9c823449", + "iv": "61ea4e83344a5fbc15a8e20492e9c82c", + "aad": "8a2f9a2a85007b51850294ebfbd0911b3fc04e1a949038b78af495d38ec6", + "msg": "c28eefcf958a5ce27b1e2ac37169611e", + "ct": "184327cb369b816421c7e9f3ad92e071", + "tag": "df058d1c98b9dc5072e6a5b67a9a5088", + "result": "valid" + }, + { + "tcId": 205, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2034d6459168fa079732f3357239beeb", + "iv": "9214060b9f2297c27d4ef922a59602f8", + "aad": "8bfffa3c6340f363961340ad71849fe7687645fdc6d0cb46601a2fb35fd8ea", + "msg": "8acfddec70399b327bb7c2dfd5e5dd38", + "ct": "669342a261b27142360cff0d2bf455b3", + "tag": "05a72a9edcfba097a7180a6939a9c266", + "result": "valid" + }, + { + "tcId": 206, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "450d47e57eb7dd0489bc2512bbfbb4c3", + "iv": "8dbead063c3ae733317089a6e2135e76", + "aad": "8475f1341aa4be990686503a1f198a7f6a495109f7f680c092d7353a339bb001", + "msg": "0b9272cd71ed4fb53675883c96acadde", + "ct": "80cf2f7bed187ba0a70bf7b69154d554", + "tag": "020f37c0a5775858877cfe133b86bb3a", + "result": "valid" + }, + { + "tcId": 207, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "444d0510e3ab9047377bbb051d50f259", + "iv": "921a03a53c8201b5335bbfb1dcf1ab98", + "aad": "47cfe4c76dd85664aa34cbe6354620b194d1c54908f1c974600eafde4d0904efb0", + "msg": "9088670a384b30343e73c7c4500fc8ac", + "ct": "877b555e2d4197def8c0718d34bea68a", + "tag": "78d355bcf158010f1e0fed600821614f", + "result": "valid" + }, + { + "tcId": 208, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d1cb3d195ad05e31894797ede04dc38d", + "iv": "67a2f520efdfd19edb2ab1ad0dd80af3", + "aad": "32e91e94521bfe7652939c2ece2f6023744f08f895721d69f531bda91a1313bb82ca", + "msg": "30a04cd53960019c0d187f6445fe1a3b", + "ct": "b9dc226a865fb087a4bda295d7bdab49", + "tag": "62958dddacf9f0af15e7bb03fcaf7b42", + "result": "valid" + }, + { + "tcId": 209, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f939738f734f49abc02bd19acc5479e7", + "iv": "1a5298280eaa28d093fe7bda60222e56", + "aad": "c1cc6f74798cad444e4c3f1a6390daf6604f70b90fd7a5cc7bba76cd5a2ee5a9a38f19", + "msg": "845afc866ab1b7faec255a95a81d49da", + "ct": "abbe8d7b8d375e0f792f99a9c86596c7", + "tag": "d9457f5f359a977532bbfd15e151c05a", + "result": "valid" + }, + { + "tcId": 210, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4e54b3e590ab0465b75509765d88fdb0", + "iv": "28b0aec8c47c494b8f6ed55293a23643", + "aad": "ed5dddd14e654ae8bc41c73a4a4ba4513de9a48d36b544ea64cdf9a730afea19027e0800", + "msg": "5127eca771f8230c71992311498852c9", + "ct": "c6311f8ec057d40947f2717aa29941d7", + "tag": "bb1caab5dfbb6b2cf2dc38f006b37173", + "result": "valid" + }, + { + "tcId": 211, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ae75e4a0c2cc5398964f696f58f56b66", + "iv": "eda9016da1345bac63ca26983faae6e9", + "aad": "3424acee9b726a05c5e953852c6be298e92ca60b589010e93e62f32ca9c26be52bdaac99ff", + "msg": "0d43e3757b466ee72dceabe5738f39d4", + "ct": "4d0a4dcd16c8bbb44e84a37376ab2e92", + "tag": "4a0c8dd6122651addcf683f95936c705", + "result": "valid" + }, + { + "tcId": 212, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "043850e74e5ff412bf607e0b1f793500", + "iv": "26e7885336dc06de228f8262b8002f72", + "aad": "b1b8c5f8734a8f9b96cf6940248ce18d21d9723154bb8a852ee366c8c45ca29ec80f87f226a7", + "msg": "394947f0fec5be6b7b6cd1b02e7d9b5b", + "ct": "20bcf4ce472095d6bac2673308a37af6", + "tag": "ddf9e894347c550180dd67f0e906f1a0", + "result": "valid" + }, + { + "tcId": 213, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "977d26cf5d540a59d5f4589677ce5b40", + "iv": "aa3bc361734b8187d3a17d5880df6bb7", + "aad": "607e107bf9d7da23d6845dba2becb4e3a692864623cdf62df03295515e5b21a44198f687d243cf", + "msg": "5c00d26bbacf08f7516ebaeb4ee502bc", + "ct": "2c0444b8fe4082d63d3841c24245de6e", + "tag": "6245a89b85b2d2752dfb8f3234017c8b", + "result": "valid" + }, + { + "tcId": 214, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6985581cbecfdd2d22afae94ae82db9d", + "iv": "94e661d6c8bdfaaf2bb063d0798fb7b0", + "aad": "5f3ad8a3f2599084d2e30f7aa5e95645edb42dfbcbe472a65eb389ffb14360f5a2aef58145124e2d", + "msg": "a67a33752d287d192acb6da39c29dbf5", + "ct": "ed6cc7dd42b37f1cbfe1865ba62e87f4", + "tag": "93d4a9fd19a244339d72374dd599e99a", + "result": "valid" + }, + { + "tcId": 215, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "47d974a95b63a6cd153f5954699ec0e9", + "iv": "d9dbccbba6b701dbf7718f744258816b", + "aad": "92eeefef1b057356bc189f75bc7b27990ba277198103caaad4eae3c42c9768cf9bf4aba7d56d22f9ae", + "msg": "f0e84ac51fb555ddeb512445e613e29c", + "ct": "3478f1d4ba7dac34d011d5571255448d", + "tag": "1cb35a0dc6a46fcf7ac98705dbe70bc4", + "result": "valid" + }, + { + "tcId": 216, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b3049d090da82a5a521fb4fec294336e", + "iv": "eed4288d6c84298651e4f7c07ae4b644", + "aad": "d7150dbbd9223b92956aa2609c95d62db2bc24252ea8e9952a5e0ab8b930e6ca49b9c24565ffd85e87a7", + "msg": "c3b26e3862f7ee45f2ebd9b1930c8eb7", + "ct": "63309d0b37874f97764127f7f002a5fb", + "tag": "571ff7fad4e42ad4990fb4c678e1f692", + "result": "valid" + }, + { + "tcId": 217, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3d3e035c3ad40e23306c07b541754754", + "iv": "21d14a35bc95780c236f47fec940b964", + "aad": "3ed667e2649ecf584feb8d35a0df43b778832007eda52b2de0b2e44ca7eb1b89bc51325360cafac5afd212", + "msg": "4d69a21f00ed2a44361cf4b2fabec7c1", + "ct": "8605a469dbb528b2f3b7b2875106e00d", + "tag": "8aa4a5cd44ce5df98c57d6fdceb41512", + "result": "valid" + }, + { + "tcId": 218, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cc7a647aaf50112e18f13935f119dfa2", + "iv": "2d6dd42e70aedc920cb38ccb887c9bdb", + "aad": "f7fb88af7712975997f43dc8884b1b89d9c3a9a905976d31400c1765734a822e74aa35c5aa03ace53c70878a", + "msg": "6cb547b7c58b8242d5c95196433dd9cb", + "ct": "ae638e063b309f12e71195dcc66ccaa6", + "tag": "c3619e03b97f3956606f62286e356c90", + "result": "valid" + }, + { + "tcId": 219, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d7bdd80a5a557f2eb7a902a7f6ceb995", + "iv": "953732520bc914728bba7078dc1a7681", + "aad": "26d5a39ace2d2cf146dd53a4c91e30af874e68b1962fe236f1b26d33f1c28fea173fb88e030407df56bcd7c761", + "msg": "863e3548a8bbdb372f06cc745d1b70d8", + "ct": "84989e60a47decd5b30d560d48eeae5e", + "tag": "47698b08490a93b3f4ba05d29d14f2a6", + "result": "valid" + }, + { + "tcId": 220, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1353e275a068f08754c3ac387f3b633d", + "iv": "3a9c98987df8f991cb1c3e86e4ca38b1", + "aad": "d44663ec1e2321dfc76ca989ea6119766c9224708075692f574b434ce087ee154545ff72c3c069b4750db0a00a28", + "msg": "4a10892f5bb5d3e3b092f17ea5d1324c", + "ct": "f11378393002090443a0090af2f68f00", + "tag": "9c2ec88d41f0c4de79185b2b96470069", + "result": "valid" + }, + { + "tcId": 221, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "611bc2ea736bc893ea9b81913d456e3f", + "iv": "8e36e252ea05749e248258bed9cac40c", + "aad": "ff0f995f0b9c94b10bbe8144604352c6969321432e1788f7b30a993ac6774c1a263cfad76466c8e93c5d0fe0d94dac", + "msg": "e60dda555d96f572953734150976d3de", + "ct": "f5836612929f175725c8dc584c1a0caf", + "tag": "8add11c9a632b0f71cfcb7619068a79d", + "result": "valid" + }, + { + "tcId": 222, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3a03ff35900b953e7ac59a2b10f4d3f2", + "iv": "2a0653956455435dc0bc93e488093b74", + "aad": "6ef852d85b738a3d1bdbaa321a471d89589747cdd4be93eabdf6c6ea4abae409b0865db6a764c1e0db6714bc937deb71", + "msg": "b06166715a513ba08489058601497854", + "ct": "5bcfa16997b64c6c0f2dbdb235316788", + "tag": "859a98b19118017d6bbeef66cd74140e", + "result": "valid" + }, + { + "tcId": 223, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f591d42082ab59e170977988330930ad", + "iv": "01e032709faf5a9c75b587fb83a5d888", + "aad": "352d94a886e90306548c6c6c1562cf6e32c6802da3943ba30af8ff2e7f324e1f359511698df674423927c6cc8c49ae1020", + "msg": "7f475a892b57e58f9c8c72b0ba5f353d", + "ct": "ae975926f579fe7024d0fcff01d58995", + "tag": "2bf10dd074e3188df67da6528849c45a", + "result": "valid" + }, + { + "tcId": 224, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "502497a3c34fb634d77702f1b0e4cbf2", + "iv": "cb1516358d76ba393266c5f8b4ee3b83", + "aad": "cabb1bdf4f6d9f954ee83d854963138f8c3633cf93f40d2e9eab4f3f67c90c0186fc3c4e24ab597e39a04ecb2f5df937a1a2", + "msg": "ceff50675fda239b371b14a81a50d548", + "ct": "d06c2fff0b5ac99bb3ff33df80cce659", + "tag": "b83837b425f2c128e036d8471d30d447", + "result": "valid" + }, + { + "tcId": 225, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "83aa622c5ce7fed9568b3db7bf35ceba", + "iv": "64f1826f9111eb50cbdc9df15ebec452", + "aad": "0bea7852b528d32e973ca3c5e93f358a906e4504bcdda3666553e232d87f7c6c0fcef4a27cc3915878265c187d3dd75df6a519", + "msg": "fbfa93b3ab50e09812f4c12ec7f1e3c6", + "ct": "38d43f61fb4c92380e4b09b0ff64ef1e", + "tag": "b7c0489f3880d373bcab02a15a97f368", + "result": "valid" + }, + { + "tcId": 226, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c0a9efc6e961397cc34ddd47f62c695a", + "iv": "f1baaa1ebe2f348689bf6b927a27b3b4", + "aad": "7197bff35a96709e6bdb46e8416ff8cd2c90bd72f0af9deb26d9b71948fd07513063e38d21e6a6e591e82afde4207eebec1ea91e", + "msg": "22bc8e743fe9d0f0e37a9c6b7fa01775", + "ct": "0d54bdec6432dd90160f347f107c1c0c", + "tag": "a69cd1967b5af5d6cef3dbeceb95d878", + "result": "valid" + }, + { + "tcId": 227, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f40381380456ffb37fee400063a6ca21", + "iv": "7f1c73c10ad744615307846eeefe54f0", + "aad": "112f98863a8fd279dc79358b5a7cf8c71e08efcdae094856f8a27ae39f006e01990a49e59658b6e855f07df605286c747b3adf9751", + "msg": "c0f561093d4ec2763b2fa706906959e5", + "ct": "6ec329eb1ba7b135d0efb627d8384093", + "tag": "5d54e6ff4724e74355ff22861431daa5", + "result": "valid" + }, + { + "tcId": 228, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ca152b931b07f73ee9da1972ae979f8d", + "iv": "a620a58240f2ef19963d6792e138ee59", + "aad": "7ee6ca71a003bd490ee2d0be7545c027aa6573c3a6a5c3a8c350cb5c422f2327788e7c9b4095385d99680d29527d9ae8a4e4c287b5aa", + "msg": "689acb4a9f168b4315eb70db689f5e1c", + "ct": "e29c734ccd2f86f69a2d8f217c2203b4", + "tag": "9574d59324e5265bb5f23c191e45aa1c", + "result": "valid" + }, + { + "tcId": 229, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2c3355fd07896fe90f714d9aafba23bf", + "iv": "1cb29f32e523389bcbde40bab138f167", + "aad": "7595fd9ba6a6a194ab0869fbd99abbfe42e7e0b08ef1bea2fe502852534993c6c8390aead34069743b28ac3f620aef6483fbc248545064", + "msg": "8afca9b4a81dad80f6a35ea2e003ca61", + "ct": "74f4c4a1957db6bad767b1eb8dcc0bf5", + "tag": "27ecdb0dc6c7b7303fe71eafba14ed62", + "result": "valid" + }, + { + "tcId": 230, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5e46b622d037ce807545aec250842c6a", + "iv": "9cf4870e44bcf0d9b8181c3773a53512", + "aad": "db8654fe43d61e5a8826b3824a13cbb97decd6b7c733ac50456096a241933d67b7485f177872e67af12329fc0c828eb4c842dba27034ae9b", + "msg": "3dc69445edd5bce1fc39a9c5c396d69a", + "ct": "4dd0f28eb06b3eff6fcb3299e919cc5c", + "tag": "053c54fae61665bff9b2f8f11f7eb679", + "result": "valid" + }, + { + "tcId": 231, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d6c5d08f9eef7c9f733a6684e766c74e", + "iv": "e725adbcbbd260392fc018a602806fc0", + "aad": "3762dfe5963fa87675761cfc6e561dbc07651c3e0dfb3a79fe393d00d504b87a8ce9a2b5a17cb74c5ae0b7a325f493d0a251812d9ee82c1090", + "msg": "9e6b1aabf7e1fcfe1c4731948e8064ed", + "ct": "8aa6f01d311f644eefafd1269d0698b2", + "tag": "68008d69a815c01f5f4521d0e3cccf92", + "result": "valid" + }, + { + "tcId": 232, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "475a03b66b47b5d3a1e49e3ff8aa102b", + "iv": "0ae34be9f1ca049ed3f6a159e2c36dff", + "aad": "b5b101211a8cc1473b2deb5b0ec68d4c76f21ba7072db7e15aa271480436f8d7310f1d9b604fa12ad9658670dc9f0283d5a366064ff7de9d1c85", + "msg": "3bce83256e13c296c12eb0cdeb7d261e", + "ct": "9326215930fce4d2491c5b8574ab27ed", + "tag": "d053b3df32de5f2579e7d84bd401d0df", + "result": "valid" + }, + { + "tcId": 233, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d5479cab4d0cb97752e6a26c7c33e4b7", + "iv": "ca9b1d47de99a7751577eb9e25fb10be", + "aad": "2fc7006f8a552b9c17b738c6ffb77a9d9c7a9907f679217be6ae8c15e3a6948fcb3a986498c26538b0f5c509c1b2fe704d635b3e5961f7e8161dc9", + "msg": "e5f9e1c8d0c1dfe2bd7799daf7356fa3", + "ct": "5d3de913870105ee9db19795019d16f6", + "tag": "17d4d8b64d5f6ca33b9f151c1251ae16", + "result": "valid" + }, + { + "tcId": 234, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b4db0bd6a20b780fb26560be473785f9", + "iv": "ebcf8eeef5aea5344dfa9ac803fe3ee9", + "aad": "95694a3c33485098f3d6b6bf092aed826b7678b72c589cc999350f2b9b5dd4af694d2e4037f465ec1b773848603c623dbb52c20032a9b926c55d80d6", + "msg": "c19571e69736dd02294d5e23336b386f", + "ct": "72731b7090596d8a227e6aeb3b0b8ef5", + "tag": "7e8f2788708b7bd32709711547719439", + "result": "valid" + }, + { + "tcId": 235, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e271fae39ba25da463527566d7975f5d", + "iv": "4d1ba16bad61a362238d8a661c9be927", + "aad": "800977eb36011a6751ed6655199b34f43a8ab66f15dcb3cf4c86edf944efbad9272751793054a2b3924ee078fcfa9351a82dde367b1bc223b84ac6b9d6", + "msg": "49c8f7ff57a7209bffb399ab28d9def9", + "ct": "2e4fbf8ff652fed26f306bbf88a1659c", + "tag": "8a66fb4b916115c0ef6e9b3706bb429a", + "result": "valid" + }, + { + "tcId": 236, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7d7fadd48ac54a63eacfdf6e40786c9b", + "iv": "72781ffb699f5a19788c1add17061231", + "aad": "ea4be024ccbea2768a3e2c24b1788f3c9361b17cbc294588f4f3a2099260c6a6e775ba9b5f375aa811cadbc07d804c9cfc16f037eefc6187782d01d7505f", + "msg": "5f92ae22f6f39288fb18cd760e74894a", + "ct": "eb0285702ba9796a22b178d78202231e", + "tag": "60cf873080c9ab84ce9f46ae17bec148", + "result": "valid" + }, + { + "tcId": 237, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d9a95a96b93c0d97ffa57c3602b32a2d", + "iv": "890524d55ec7156b9f1e902babf9bc18", + "aad": "7451173d7ea1f61c9cdef3c163f997e6b903340112a8886649e8a88e69ddde95f8e2e5150dece77da0df12a3beb08ee60838dc562b8aaef04131f0ebfd06f4", + "msg": "5e5d87f4387af6640238f75fa136d138", + "ct": "f867826bdf3ed6ea54ff023be7a35c56", + "tag": "50316c2a99374fa93f5f975fd4a40109", + "result": "valid" + }, + { + "tcId": 238, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c3d91d8a64cb2a98312a04f294a14eba", + "iv": "261f39a73c4eae7d6bfa0cacf0f52d25", + "aad": "1f9ca14b22d40b4e6dc59ae644b0ee45bcee37d85a85b30398b421f105ec9ce0f5a9875c9bed7de52455b9852fe10c72cc8fe32ad1de37482aa6166425f89880", + "msg": "7562427bb6673f7b59f9becc483021d2", + "ct": "6221c5d098f8ae25e9f20b64b4aea76f", + "tag": "9b086aef863a21fbe3d918edc7c22996", + "result": "valid" + }, + { + "tcId": 239, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "edeec24258ecf653786c766965bb5557", + "iv": "7916159c36e10e37a1aaa0f77f59e51b", + "aad": "d3edc59fb311060bdd4c2114053fc07fde60897d77cc8aba90255d14b573cba9f23fb7bb4b22ffff0af656db8294de764ebf06ae3a2b077051bc1ab900e58cff97", + "msg": "0d5229f0a921d292291142403ca9184a", + "ct": "72ddb3e379c60089d7e619b05bec380e", + "tag": "332165df199bf68010732b4784cde126", + "result": "valid" + }, + { + "tcId": 240, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "af4870026d1b396991aeed5d874e117b", + "iv": "5bd96cebc4486ce7e6b6b15c17481a0d", + "aad": "6d8d5bc6faa148c9941f4d13b7a93ff65824708190f814cffcb1259f6db4212145889daeef42f93a2100ba8d2a1049898fde86ad3a4c80ef34ea0cb6818b9dcc4d0a", + "msg": "bc8c303cd40fab27c2af0370447d9ff5", + "ct": "ac0dd8c1fa8687f48f5a3152da003a1e", + "tag": "2571dfe694527f7e75476c0492290983", + "result": "valid" + }, + { + "tcId": 241, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dd244b2a8f8e769cc6380b39fa2bc974", + "iv": "5f3e088982d6d91155108c97bfdf8620", + "aad": "5d04ec7c30a04c04628c623f8cfd970cc79cadcc9b8f37769342b0bf2cafbe7e129b9b2511003f12605a10b62846c034649f68a32f2ed4706be6286d7678b874e2a178", + "msg": "5dc6813305b816bcbe936c0b2489ca08", + "ct": "c313365d062c74d8468d11c171beccad", + "tag": "67a62ec4a78ff0fbab057459e2a3d5d1", + "result": "valid" + }, + { + "tcId": 242, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ba0eb5748554df392e66f2ae817aa6f3", + "iv": "dfa5d050be166eb3cd28e5d56b5ab011", + "aad": "ce16d9408295a9ce1495b17499e9fc93cdea2756c1d319fcf443a3ef193d00cbf3f6bc43b91d417a741e0300669246acb927c03d7a242d6a61b2ae0f00ee7f09c9b3e18f", + "msg": "6d595c3010da5ecd524831f7da772066", + "ct": "2186a2300a96ab88658a25b245cf4cd0", + "tag": "6f11f87a86b1da88f280c6b1dc60021f", + "result": "valid" + }, + { + "tcId": 243, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "542cb16da96d9fc636f9908a4702567c", + "iv": "591e4737303282989bb7d4da424e71a4", + "aad": "5d2e96f12651a6aba34587578632e6d3c89e5a15ca358ad028db8a305c06b58239f43d14892f725342a43c1b621f059b3eae6bfafe0093f9ff9aa62e25caf3c16b0bf8e242", + "msg": "cc306a3bfc92894a3145e557ee735db8", + "ct": "dc5c351e3be98fabe13671c56d1d22f4", + "tag": "d338e1c23fbcd63baa3c0295dd2741a4", + "result": "valid" + }, + { + "tcId": 244, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "33a343404f08572be0bf6b56a3f5c753", + "iv": "81cec1f1ee5a1dd89cbaf1fa5aaec358", + "aad": "04f2adb5cd535af41c027bbdea2afb6ab7eee9778b5bd29c1163f7d4c59ed6b28cc6d90d05484428de2be432de7053f2c4aefad01332242051b38c33ef9730244703cc26b268", + "msg": "15d7d27d6bca82b3fe381e6d5e63f63d", + "ct": "77579cff8aca482db87b3adb169becb1", + "tag": "46fc568add0b54af10ba55b7cc6b8ae8", + "result": "valid" + }, + { + "tcId": 245, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "72b33d48c6e7af7035b0a1b75dffdc80", + "iv": "4210ff2f8ffe5712c9251ea0ad7458bf", + "aad": "3d5e81dad8023e89c6dbac6971d1ab051de7f0c0b6b632fab7b4ee7c88ba671f807eddcf7b4092a40a5e3061a65fd51cbbdb9b5ef84b24dd7f9b53a28588155e017288cb37549d", + "msg": "a7dd700d95a45046deab620d054c9c6f", + "ct": "38a96e9d6ec83c4f4246fc9c9a853aa8", + "tag": "caede9da78b94833c49d319b869ca478", + "result": "valid" + }, + { + "tcId": 246, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1bf66c244f83a8210ae00377664ac89d", + "iv": "06ae6f548e6f91f551cec5b8a968b2da", + "aad": "234ae1f255548f1238bf16ac7f574316fb03aa06e94019fcb004ff0eb4e71ab878c7334e5eca5795c084915b55fc3427422317d6444280f1d8c7fa08a10dc26feb6fc3418b52d560", + "msg": "97a48767007df785a304ac98725c5d4c", + "ct": "b5493cdf9809fd9adf76dcab723127a6", + "tag": "5a14a8902e00d929f4c792430ef79661", + "result": "valid" + }, + { + "tcId": 247, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "241c376686922058d48355898b41d0e8", + "iv": "69a8e72af6001b11dd70e54936c21b3c", + "aad": "35e7b09005d315f789ecceb4eb5d18770ca7bfc58728d0bbe8d42bba48d2c27cb06c6a2932515554919177b1230032c77b7c1e94abf0fdc3c7edae1de84ae2c9338cf117b116a1bcc4", + "msg": "8b04bfc311697c8015fb39330b976a31", + "ct": "4ff3d6c2644248940a7dbec7c0a3e8b7", + "tag": "e5b4405c0a05e293ebb78d299f1a5071", + "result": "valid" + }, + { + "tcId": 248, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b6e0d3d97b267288b43fd84804e49010", + "iv": "ef44dbbbafc1d5578f18df8f1ca005cd", + "aad": "15e25a1040b2d7e24099010ede7e333f16cf9e6fb7238b7dfefb072a2a879bc8ef382c21b0f911ebc4cc8e9147ecefa2bdb41da0c85242a34ff8362dc03c5d8d0b3fbe282a929554af2b", + "msg": "15a794f88040973e908b2ff7288d13ac", + "ct": "0b609478fd2ec117eae1e82006e802f6", + "tag": "2b97d8a7787ab0d0daac02e89b55c2ae", + "result": "valid" + }, + { + "tcId": 249, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "69215fcbfc120e3191796dd12b8bf10c", + "iv": "c2923f1876647b6eb7a13f1e1636fbc5", + "aad": "b497afdd1653f879adb05d1165411be1c2a039f029e1725379033b4fd1fb39fc6f1d74dfed4a629436c8cbcacee65776edb82a6cc39ca8e5d6310d7b05c5e70d57809e5b68e7699ceb98c4", + "msg": "d13366d3fed8473118baba2db942eaaf", + "ct": "2ce8e3e41e4641dc13c62adfb07386a5", + "tag": "68bf769dd7380d9fb68dcefc5a6bb1e0", + "result": "valid" + }, + { + "tcId": 250, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3e15f0f9b345d1a797c35027a279ba9e", + "iv": "a6ac7a40e8a31fb2d96af0796f1ea104", + "aad": "e690852d48afc1590318db0177cc32f3d4b18ab75f9d93e21c791697fb67ea036f2f9c4a947c7cc21625d4952493eb0105384babc2c7067c7868522a510400f47065eab2554906a5d30b006d", + "msg": "854b8b4eaa7a571a41889756b2352d82", + "ct": "e013b82eddb26d5d08f3140a649e0109", + "tag": "0f574d96537ed47c2f8c0d32683d9aaf", + "result": "valid" + }, + { + "tcId": 251, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "97fb23daaf82ad99b984dc2225285235", + "iv": "101e1965285e8c0ae5a77816d2fc35b5", + "aad": "1124b2cada0cceafb8873a84f334912ebda4d36a01d74bc167ff765f294ee217311f150f57fe8d72089665b74c27309f85509f5761b7190c93e45302fffc22529acdbcf8700463b9961c98eb8f", + "msg": "4f87fae1fda5186354e644dffabdd603", + "ct": "7cbc1667863bf07eb93dcc7389ef2640", + "tag": "dffe7d154a2b41e539891678890be38d", + "result": "valid" + }, + { + "tcId": 252, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f8c9a6767bb42093c255cb282d099376", + "iv": "3b2f0a422a572fa27cddfe11a78a068f", + "aad": "5305c85cf535285538cd0ea8189a013b507a20df342698c7a84aea1af24e429cbb9bf2c5d96317a8cdb5be3e3c77e58aef41e3927a91db971738545a95e9e12867e18b3018cc2f0da3cf2eeade9e", + "msg": "13b13106aed4f01594093847836def19", + "ct": "658604a6a0faeda248b144f0096228cc", + "tag": "e26ef486bf37f4257c9e4e161778cfe1", + "result": "valid" + }, + { + "tcId": 253, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7174125e9a5e4c895bab387677a710d8", + "iv": "0e744dc521db2c9f1e788554994671e9", + "aad": "65a62b9add3e63e8e6d1fd652f80e04181f5ff57697fcf09670078a04217958dd51e0068d09459f73bcf8e6474a068eecca4a60d44cd00be91017965db184496c1c70fcbb6631e615324a233fc83b1", + "msg": "dcff55d6cec44a83deafe2f111a81333", + "ct": "d5fb65d5a7a342f5a3d73b50e478b5c6", + "tag": "4cc4b6953eb4554b73e293454568555a", + "result": "valid" + }, + { + "tcId": 254, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "16afc9342bda7b1647276a24d03c565d", + "iv": "6fc97ad030deefcaf1c39375d7add70b", + "aad": "31582281b6213daa980685b3509f9c57d19e77db8dc4399ce713ea2a7d634169741fa0b78c54f8f9683dbcaf5becea42619c7e5ece537dc8d77444cb8ef616271b3fa539530c5177ce4e64c6c511a510", + "msg": "84e70dd22acc7d5848b48d8604597420", + "ct": "656e1947821964d36eb1016880284ba4", + "tag": "a1ff7be10af41fcca0cb256074c82f7a", + "result": "valid" + }, + { + "tcId": 255, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "432a6d54283dc4d969a2ed45572f1d19", + "iv": "fafabb48d57dbcbf4ff76736a4e830e9", + "aad": "ac9723c020e3f06fa41c4ddc80266eaccb055b30ce31c1e654dc9908575de2516535a3af6458d6e5be4a5aaba5c5b2cc8e362bb9f8a0ee3dd0ec78a983b1fb8f658e3bfaa9c2bc8bde74416bc613fa4196", + "msg": "9c0a40c81724f70b88676168b24615ea", + "ct": "906ba7052d35f824ba07124e4530ff72", + "tag": "24f432e175d2f69b13493fdb91523f34", + "result": "valid" + }, + { + "tcId": 256, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "529c0f22109fdf071625a2ca6deb47a4", + "iv": "cb031e2a5a51ee790e8850b47c1fcbd4", + "aad": "63c6d55889c8ab0ad4788864d7ba2e0a2576018c00a713bb0026aecc1a4714eda8cd3ab129fb3be0730d5dd16dec36b4d0c7a19eb427745a76f2510e80cf34a18ecc8eef499301d14a76e2a6b5c8e6604065", + "msg": "43ca9841c9a9ddd636218e2e80d854d1", + "ct": "8a710d9616d1ce9be17d9c509a73e726", + "tag": "333cc5abca474abb18aa3d6266d5168a", + "result": "valid" + }, + { + "tcId": 257, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d2e96f266c67b1399a48bcad0f9c882b", + "iv": "fb30321f7bd965fe8b87e0f9f45be96e", + "aad": "e276ce13c71fb1357362fb2de4b23e852281958fe490508c7d869aee37d5b48c0175140813ce74c0acbb89cfcc235a3926617c034adc0dde8a7963a9c126a810699c73d2842590356ea8ef7969c1611a97e6f3", + "msg": "0af59b57f6684c0598a703a475540d9b", + "ct": "f021635cb0e2db415dc7d436ad3b1b2f", + "tag": "8656d9c9eb2edeb2047ac8ce9b304a63", + "result": "valid" + }, + { + "tcId": 258, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ec673063ed19c0d30e6d25c5d83c80da", + "iv": "61e5f71023935a747a64253981b33fdd", + "aad": "5a5ab6c65dc5d95d6867dc00df3e8056b2c7f3af51781a7e5c19efc09b2369314fb400672d62a4b72fc75f851b62df2a4260e7f22b99884865495355ba38cf79b81508398923352701668b33bcb0cf77cc3cbad8", + "msg": "ee1f54c5f2393895309e58d413ce051c", + "ct": "3e667b8a34584e669edcd54fac7c3095", + "tag": "e55e59635af043ddc2c527f7ac8946e4", + "result": "valid" + }, + { + "tcId": 259, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "68d3cc60ccaf59724dcdf5406e1f84f6", + "iv": "4bc20a444446e5963dc1723a81a6c17e", + "aad": "937a4ef55176c97c2f0d721df9f2dbdd104410785515a82f2a718843013e4fcb1eb1eb97ce7f5affe4b46ef904f59c06acbffbcdbf782251339ede2f0c4cc9ec614cc1e4613cf6aac21eee5dbc3e97c29aeb6dc271", + "msg": "18060ca5f6be442a723c2928a8367c96", + "ct": "5271c3418b31a53102b91b85e29f13ba", + "tag": "db251abefe4b8d937cb27375d6354662", + "result": "valid" + }, + { + "tcId": 260, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "096074017363cdde4f70926becbaf5c5", + "iv": "141df161a5b62bea7131860c614fb96f", + "aad": "7bd71b1ea968ec774943ae72bc6dd16c499a0d4061e8a74631724044f6b1fef720ee9a9aff55354ca53c525a008b362ed901d75e1dd290cd7075ca6215ad99defec1a176b00d3285375d7322890ce71cfc5f31ad6d25", + "msg": "8ddedb75c4a7132f6db6941693aadd84", + "ct": "73a0c40b4063ac57e2c55019b8b53af4", + "tag": "c6aeba9ec1c337a2cd0e091e798ef943", + "result": "valid" + }, + { + "tcId": 261, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "443359810bb4cd0ed5d9aa8cc5289f20", + "iv": "f1fe4567f8911a1c2a0aa4aa040f130b", + "aad": "edc47ea02e7af7b8a85f3da889ad6c9504d2bddaaf34cf01c4d3d67d2e051dc29bcdd1edf846e9ab8643129c8ae5790733c092915a27dba1c71942da967a895355b5171bd6809af788305db6d6b50a7e1b66ee82ab9013", + "msg": "b689ba5a7f7a34d6174d389c920b680d", + "ct": "1a56f49dce91002b58e9e1e6b1022017", + "tag": "1179b7accad1826528888128b9dda300", + "result": "valid" + }, + { + "tcId": 262, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "061366397d1d5e0de6887c702dc1a944", + "iv": "7dd7fb7678fe71cfeaf04229d13ab687", + "aad": "8a74e1ea577fd32bf4c29fc96723c3b754adc6b4577a040af14c335835bf41f5a15b82f9aa695f574de3310d21653ea452a7644af087df7ce737fb3a6e7e6f245c5643cc35cef5a7d521c23e7ebe407a75d22b572c83913a", + "msg": "35a154cd20cc187156118f3dab38be6c", + "ct": "b9035a17b6dc081461398aee431de5e9", + "tag": "f8884ee49d2bbd8419947db6b4369dcc", + "result": "valid" + }, + { + "tcId": 263, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9fb73d16b8ef4fb17af14532be8e076e", + "iv": "61e9a64bc62cc6e8ed5752c57a7ed6d2", + "aad": "9c1ff04499b6c04c1f258b2331da19a35ea38b554fcfb4a96f85c60182b6b187d7cf159c85ca1d97f32922024122fa88f48a25ba3ce555ba01d8b6b4aa76a2c4b44d29076d0ca64e32f8e6f5c1f50273d0ed3d63df8d1a099d", + "msg": "1eedd3142d30d89c4b231deb9979ee87", + "ct": "7220d67505d639fef5d8568f2fd25234", + "tag": "3801ad1e38bdf4743b90d23884341e66", + "result": "valid" + }, + { + "tcId": 264, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bb98cf7a63929ab5e50688598fcdb8ae", + "iv": "c54210b2e51c7920a18de5bbaec044ff", + "aad": "7305106cdc6e3779ff1efc9773a6038a3d2e82c0dd4acc5612945ec2c755b05fb06722b364c8798f972ae2ec63689316e31f4ceeaa9e2dac26997e8ef56d75d35b635695badaf4937bdba02d63225c283968b8991de8b793ba60", + "msg": "eb2b570b8e305e5af190334ecfe5c1f3", + "ct": "f097b7fc0be0fa6cf646c2ea544b2e90", + "tag": "85499f8708d6f84e4f03ec41616e781f", + "result": "valid" + }, + { + "tcId": 265, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "325cbf26bbd61cf1021f2563484c85f0", + "iv": "9ddc50407f6b292eaa3ec09939c42cb3", + "aad": "213aed233ba47dbad60aa44b205f4d432f71b6a679ee6eaca64ccd199ca797b6e4e2183771c4042963fd2e524e7e6a881a3b06e9c31950231ade82b1dbe0ba1e14e1ff738db6bb03827f7c9c8e772c55e505ca52847d8fe0840c08", + "msg": "5f001b375073b6f031ef3559d0286d40", + "ct": "b743a94754e1eca18346d8e9c83e2dfd", + "tag": "dae14393f9bd51ec25fa6c813548a527", + "result": "valid" + }, + { + "tcId": 266, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "72378466edfb8e4f112ce9c937109e0b", + "iv": "2659ebfccbd6054d86da3bf570994e23", + "aad": "9beceb818ed325c6bb54a80af180439bd042f3b03edd403c82bdf88ccb660e3e22070af05c82e3699b7f4863e00361403b5b1e5c47e710a03e62661c5d86fab9b0623c2d2a7a8cc7ced1701dee883dd14304262ebcaee372711e4f37", + "msg": "ac4479435154ad0c839c059ce4b7fc01", + "ct": "bcb13240c90bcfd702ff9ffb2e97f17c", + "tag": "beb6d128ac820eb047ab8aada6de3b89", + "result": "valid" + }, + { + "tcId": 267, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8d79bbb591f46c9a7aabdb3918340b99", + "iv": "d3f90115f970c630de2d5a9efdfd1f19", + "aad": "920556fe568c5d22eefe7cc743347185e492412da10cfb3bf3f703d4a3fd27e3f5db33edcad09716048982d0c2f14a59089916695ef1af46b0c3b649e8c42010d84d7f8f2ba0be5e092e1aefc91e8d8a70cb89ab64626e413460b44063", + "msg": "5d7f4c97fe7198f1f75c41984ea0ba10", + "ct": "6346b39bbb894e615f4a25a392fea6b1", + "tag": "20b6d8b4c72aa37bd264239852e8211a", + "result": "valid" + }, + { + "tcId": 268, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "aa2d1d4eaaaea2dce178d05df5d5178d", + "iv": "594a4b03c3712af0bc0ceefac5a57a93", + "aad": "c483a7f9b5e3578e101c28dc46919d869af71b6d43c36426e2b9aefbae8b82db5a92bf44143c79eab35a010ff5b8fe70333fa7db40e75bef8857904e250466aef375caa1792e62c0bcafa51a84f2cc32afa79eaca9c04cab13714de68e90", + "msg": "90909d38108618466849bb7fd687b8b6", + "ct": "ea00e9f516fac855f2f8c3d933e71ea0", + "tag": "44bce2ac2c6f15f3375f3430b0a6563c", + "result": "valid" + }, + { + "tcId": 269, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "07593aacac6240ef0666fb7036275a24", + "iv": "864b9ce07e9a9dbd21f0d961df50222c", + "aad": "72232730ed941cc2c9c7fc20cbf1685a5a47ebc79ea5851e6ac7c0bc8bbcb828faf7c2e83db126ddc050fe64a07c01a8d4c0c66a5f47ce34828dca0bc9481b59c2222beb23bd649a6bb7eb26ce0a8b81629fda4efe573c26a2c9e26a41ef4b", + "msg": "9a256dd986052c4a355db1f5ea1c2328", + "ct": "2f4f32b5bad765285d75041284ef759c", + "tag": "337d6d2888d26fefa4659fb8dab680e7", + "result": "valid" + }, + { + "tcId": 270, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0635637b29688bed0575fa5aaad6e6c1", + "iv": "c4a4580759518959f531ad72184b8422", + "aad": "43589e49d5cb4b4df9dea5a4d54250d62787150d48f3e8de58b030886084b6127045afd96ed69b9c28f6625dafbb330d063c9ec1c57ced4079a70d8b43a9fe960107cb3f38a9fc53bece87790167453a8be6be787976472a7274c47eece75dba", + "msg": "5f1cb41a53f5115cc5a5adf55e5008a6", + "ct": "9f55b6fdba0365f1360a2e6da0ff92f9", + "tag": "8db655e380fd9d11cbe526e3424f133a", + "result": "valid" + }, + { + "tcId": 271, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4c9cb36aab6abc37a62a6f745938be78", + "iv": "7e7d54d48a421c87a5517714dcdb788b", + "aad": "daf1b8a0457082a0b4424b31917a117d3542e2743bb6bf2180d9d6668310f2a049c7508120bee768c529d9ceb015480e0bd8dc1424f4881c6163a8946023aa651f3fed9e026255f73b23d2d5f3009d554c4dfd17277c1cecd544539e347256776b", + "msg": "c9873c4c91d17904d56174ff16d59cc0", + "ct": "b3893703549f62c292f8c956a852f352", + "tag": "75c661009dbbea5d5a5cca6846fc65af", + "result": "valid" + }, + { + "tcId": 272, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d6de31dff562a4db375170b385c1cb81", + "iv": "4ccdb2884a86016e7eb477509f1f37aa", + "aad": "1d79ca971458c6c4961ed85276c20e1426a6b1a358546239909249e139806d4fb1f8d51aaaf8ec0d4895a5865579f7b1f457a5a197abc57bfc9c924cb89d5ebcf1eb55deeff9cdb6b168b2ffb9e9e7bd65df57e8afd77fc2d8ce0ee9761052a538db", + "msg": "cc002d94e6466227390501f54a7f266b", + "ct": "2551d56751542dd897a2c99f639f0434", + "tag": "7c5286b28b26746d58a97030bada7ae2", + "result": "valid" + }, + { + "tcId": 273, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "daa3d4d168dfbecfed3e4da44b507d64", + "iv": "9a6ef29098f7ea9218749ef3ee7eabe1", + "aad": "e9dbb1c89f7d5f80d783e2cebfe1121d7c0bf03e8bdd56bf4732d5eccac62923629c370849c9b5d21ae3b5abf7eb4dbc35ae162bb0c419519d53e8ae3ecf7b84a984cf84c59d6b16e076a2be34c6dabe09acc95f4ee32299da5b3fab0730b94358d984", + "msg": "d765179ab2cb52870bcb2fe4ff79e24d", + "ct": "22f52bfc84f8271a3b03c2d154256db9", + "tag": "9ecb2a3c444436be60f6bce9af12dc2e", + "result": "valid" + }, + { + "tcId": 274, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d68f6f0a9c49fc1d2a3558062e1d09a6", + "iv": "c474b0603b34203ac86cf7f2cee6cfa4", + "aad": "2eddab5db7815004f95790da0487579e07a933618f9002e6a88c6b2ab0e0d090dea84b2833221e3a1a007448fd76813d5700f970b7af15ff123c46896e6754750acbf402b8fd9d24ac206753188e9112d7f6e65f76e1b9f6f7b849c749bad954cc2c3552", + "msg": "c763e54ef1abcf3efc92f5a3c97ed518", + "ct": "56ca7851b5fde097c1cde5c20d86f306", + "tag": "6a5064ef8def4c7f584afec271d6b5f3", + "result": "valid" + }, + { + "tcId": 275, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1162f90b1e1ada19827eec0ab928db12", + "iv": "36a664e21454bde1330f846afd439b4e", + "aad": "91b4913695dcd32904eeb75e384d5d45201d4ef0e874e1c7fffcf53f37bd4fcb49b930182b35d055b2ca4bf435c8d9f7b2947b64e231d03f1baee1bad15d4b255ef983b014ff0ce47aa5f81d487e88dac2e5ef2261c149ea7b3075a0f7f604983cb175a0e3", + "msg": "63b901aa708c00ed0d9a958097c72337", + "ct": "90208208a1e63fda26aa1bd9df685fb7", + "tag": "c7c005681e3639c0a9cd227f9ab46e59", + "result": "valid" + }, + { + "tcId": 276, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "be889f391e095f9136d7c1bd5f074bc3", + "iv": "6ed30d8f83b60942fe4a08b47db614a3", + "aad": "073192c829a353c6459ef7e932a6e25c73cee878b76d1d053c46bc940edfd7f55fba864ee2da14b1ed6570f3d103f63085e1742c91ee90812b761ad23a6f8fd04a50991c0112d93298049e677c87c20f4012ddff68c063a072b9ec53d955e471d703e745aac0", + "msg": "62ada6dadb668cc42812feda384e7c3b", + "ct": "45a64dab0361311fa226398d68f41079", + "tag": "ddea65d4435be211867efffb0f1f30a6", + "result": "valid" + }, + { + "tcId": 277, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cd6d6cd9ee4c2599d2fe1ca033d64c65", + "iv": "7b7720aadb641e3a78f79da787900e21", + "aad": "9f0646906d196da52731d4d772575a663fde104970dd605ee11982f6d761a9255c1abfa1506d83edcd67e581454979b3633a20ae581dda377373966f8684412dba40ceb2182ce2e613880846158d66d6c0af127ea87ae9538a9ddc10e43e3164f973e6504b883f", + "msg": "8b697b45b6aae4a4885535db8828467f", + "ct": "2d7d8baf892c069356b77b39b8618e91", + "tag": "1de5afc2cf84be469e0be4a2e0691fcf", + "result": "valid" + }, + { + "tcId": 278, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a6b61b2637bb738ca4f4fe403e3dab5b", + "iv": "d19dc0150e917622207a494e54df1d4f", + "aad": "338294acc98159290214dbf029c79db4e081eee624b27424749f5f8ee3704a92f72fd71455fb995bffbd4247761331fe12da8aee2f548da85b99624a1e824dfef0d67d3d75da6fb7209586704a10f0dff2fc4738970d08104cab294ac5b7109a916102b86c770e1f", + "msg": "007041bc35bcae6f036bb452670af5f4", + "ct": "6f2bf6e76cc051ab60249c099046cc62", + "tag": "8b26deee74f688817d126ca57eeeb5d1", + "result": "valid" + }, + { + "tcId": 279, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1c6f5f45fd1e016711f997282e2f59a5", + "iv": "58cf9b73fdd8d61922bf438a3eb84df4", + "aad": "58ed6d49407a1bc7cc3cb9d0fb8226e3324ef9ad8f51fb3fb7cec620357f6ec3067a05199a4e4059483e9c2380691524a6b67d2964214b26445010a9ca56ac797da1113ebf21c7e01d2e42fcf60e3e8703ad86ba1368b7a4f95538d413af978e566cfff1876f22f13e", + "msg": "fc3addbd7f2cf820e27dd653f58ba3d3", + "ct": "49316918a57c7c7092fab8659cb94372", + "tag": "10bf65f1aef091e1328bc962279d8961", + "result": "valid" + }, + { + "tcId": 280, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7ca04ef2ec9fb3f3c8ba853f2e5c6839", + "iv": "d9109e9cfab9c065f4ce8b6c7b1ae185", + "aad": "987a82d3e9219c655611b534b7cf33160084bf35cf45a746639c87aef17ecb050e5e0a6c65c6b5d6fe89388bc801e16d6e17fabbefc16a3bea9cc6191407aeb79071e02edc6e08cd6bf884874969203244106a5a8766ccfc6c4079920c2b21e1781dbd6701dce5080d24", + "msg": "22fb8b4c705a0a05be4e211d6b4b8458", + "ct": "575411fe178d193610873932f143dc67", + "tag": "00553579ebb5209d4eacf10c2b47cb9c", + "result": "valid" + }, + { + "tcId": 281, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5d896648bbdced899ebe35643ce5b0cb", + "iv": "329ac75e12ad8eb5250cdf3f945a1f8a", + "aad": "77dc380caad2c4c10961ca99459deef6337c242f884ef13b7777137a32b365c233fefbe84631ab2ed3fc0fb257744128c1b2ddc3eb00580e1191110b5937cd193a7fd7159e750883fa3914aa964e5546a8e65d26cd873fa0c2fdb5d19ff26ddb569a9f5d825a024c4effb0", + "msg": "6bb7d1b046e0ab9e6dc8dc53c29e3a86", + "ct": "b7b21a1a49d3ecd0925cfeeb93f65279", + "tag": "d888120f9c6dea5b3927121ccd2457e1", + "result": "valid" + }, + { + "tcId": 282, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f9246a57ceda0b8727f603dec3af6f16", + "iv": "2fd815f65a48d2d3ca6527347bcd11cb", + "aad": "e5ca599c4bf32165178f0f86849e274617bc1f93582802bf0d07970f6335e4b9248dba45ce2387bbb9a85134d2e82a288b87b912b957d6b1f857ecdc0f998df4e1644a1975f0efb025faf38407553a938f12821f2b5dc5e57b2eb62da6a39a22bb17d534a6be80826df034e8", + "msg": "a7425971391cc766ec557e15a390e288", + "ct": "d4f734e12539a7e6715ac2f38f34aaba", + "tag": "44d9c53315219394c1bc6ffdced20d53", + "result": "valid" + }, + { + "tcId": 283, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7342725d37d5072f4cb10efef7b712c6", + "iv": "6f33f16965d68f3967fb118b57815d7e", + "aad": "c8d8fdfd4e0a57889af5047a5d81c812291c78cc37566e4fa061b0291d764ac389118bfd07cea5df171d58fc390a5ac6feb720734e9c59fcc13910100e63a51de34515fb7840c60bdfb1a9f60027f1382f3b9fd30a5dc114e06738de0b1e527dc33e6c82f1f442dd9a98848a9a", + "msg": "0442fc9017754b28ebb0ddefc681e84a", + "ct": "dfb03273d8fded8d710088fcee9ddc2b", + "tag": "41def30ff4b431a4a2468dce8da9baa6", + "result": "valid" + }, + { + "tcId": 284, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8d25e9978e2735e94a6a58f6ed729529", + "iv": "4e997308f6d7c4b5be161fb3e2410ddc", + "aad": "3fa32458860c73ef3c76f3fe0a160a5c4e870cd776cb0ee36810d53be49c5d7101587c9797359f06932076662dab7a81eb2c836afe35a0ab184de73e2375414065b307c7323d07f728de10a8fda1f4e18534a7950afc7948ca426f640f5113b95313e558a45b9440d69898178033", + "msg": "72d3268d6f078670a527d4843c67c9ce", + "ct": "e0f0dd46c5d7d0ff24f1542db18e55cf", + "tag": "e0105dc23b800eb425db72a7b6c937c1", + "result": "valid" + }, + { + "tcId": 285, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d0a5ef97a79b9c785ee5eb27d9af8626", + "iv": "16ec8d6e01968736b9f0885ed2f070d5", + "aad": "7f7298f2348fff7cf4c8d62cb09f3b34609619c27519aed09537d738efa05e13a63e8661af2e448b27f85a8510896b87003fab3fbcd7a36110c36f03249855b2a1e6d42e88bde3412998bb9e9a200fe5c3d560c5d528f82139a6b5198a7b4c49dd247eafd8899ec40bdc9a37a9ce78", + "msg": "8ae50fdfd769dc3ce0f1082b187d9be0", + "ct": "d48fd03d9fae7e35c849301e38442b48", + "tag": "2aecbafb04573057db75c7015e8bd518", + "result": "valid" + }, + { + "tcId": 286, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "25532fd6301002f1e57f97e86fbc8c69", + "iv": "3dfdef1a556bef9099ee36333199a8fe", + "aad": "679521d938299058c0d4aec0e06d04fb0c2df4fe525f094cbc82106161cd3ff08ec2d035c78bf7ca146ccd7925b68a15e8efeb3e49b2fc70ff8c409671b14e208d1758fb8b619713c0d7ef70e2d9a877eba9fd74b0680549151fa1e031348553cf732acac7804568b389ebeac08794a9", + "msg": "2d25bf1e324a5062e4a196f8820ca639", + "ct": "67a64358c589e3841dfc16f6aa7fd5ed", + "tag": "68ac273c26f3b462cdf0ff3a9fd1fc53", + "result": "valid" + }, + { + "tcId": 287, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0c9c3e21d3a06b7e017290cfd6dcce98", + "iv": "39a0b8a1cd6cf4ad701af2a1854571c6", + "aad": "9a31ee410a7be2969f97058e6fceef9823e3110788acf548b9b87d168780f3bf2a164eb796eebfd87f629a8523cf2b8264b53736f674a583c2e60d6114b85a299d5f40dc59ce2d3a67bc459fec2cadaa3d529507c1865fe176f830801f79cd1ad6819969c32374c1dd89c259eeec676839", + "msg": "375081c6e662c43637050057bb5ad9f8", + "ct": "077a82f6019d40d158a11bca6da96d27", + "tag": "72097649d6394c21ccc57697ebda1516", + "result": "valid" + }, + { + "tcId": 288, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f945acddf5eec93fc6b7f366ff31c049", + "iv": "4628c5e836465911cbda03322e9b2f58", + "aad": "47179b6de1f8a829be0bb358fd5c8600a8489b49eaa417ed50d57a85d9e9ca6fb11840e8857be5dd07dc432070b7ca0786d8a2e22214d3e3b322458033d7cd6b660494dc59a94ceae57d2d58132b62a9aa8a8bad7fe710d7b42bfead02155a72a0b601c5ba4240ece5617c337aa20db97eeb", + "msg": "cf021b525f34d0d28fd26372c1dfa43a", + "ct": "48205b31438a68705376602476d6ed06", + "tag": "b823b99cf0686cf07f1f8ff895f5a272", + "result": "valid" + }, + { + "tcId": 289, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4ac0fc6d630ea94f165f4298e0493234", + "iv": "1238f419592dd5e1889107c31230e353", + "aad": "bde66bff2153c043c54420bd9f6de0219dfe1b0854e7ed8e484d79c3660bed4ebd55ad5ecbc7224c221576e2209f74c0cc2285a0bbdf213d3b12a0747e2a6e0596467ca5a7c1d75e6883c357f9630c1e6fbdf54130bd7bcd2998ffb80667b22c61886c42d3b8a4b96cbd53cb92a0810bfc2f38", + "msg": "7249ee65b5974616fc2b4b87081e7237", + "ct": "71dc75309f6040a8a653988b6c7b59be", + "tag": "73ee3b71625500c9e9793bfaba3f2de7", + "result": "valid" + }, + { + "tcId": 290, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "417c1201434ce0cd3fd52a7023ef43f0", + "iv": "9ef4c2128ec7ce4ce0265d0a10364b45", + "aad": "275d79e658515d71433958fda9267947cadcde899d645d9087fec59fe92c6e922f6f3baecf23294b0c45aa78358362c3a83ec3733b277cab0531f52b08ee626de720338eb6715555e63e5f68f1735f63474cc61cc8affef18752320dd8ce01818cfce9c27411aa517ed3392f63844de9e1341ae7", + "msg": "8e847ba7a378a45c0bfcf18065ca8f36", + "ct": "261b7315d7ccee35050499c0bd5bba24", + "tag": "0e7ab330158e9a174325e63f76cf006a", + "result": "valid" + }, + { + "tcId": 291, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ea2fbf474f5775e16f5398f085f6df44", + "iv": "d4e31986a42d7a1fe6cfc872eed1031d", + "aad": "950a701138ad3a75d785bb15863bba3c34c95281a562956d8e927da592aab332992dd4e27b820da3dcd49d265288a8eb4c2d1e2b456827da64f5dfc79a5ba4c9ed7173e70f819d8a881e7255b8b95882751a74a4c239d95a6e6390bd49af133b52460c2d654bb67bf2c2cf7f135e81e1a5f35469f0", + "msg": "3dddccae1a0be315de3f190cac1c9796", + "ct": "551f5f5b9f2fb4c2f2aeaf297620868a", + "tag": "810e2a0d7b90937fa85cbad77b79f159", + "result": "valid" + }, + { + "tcId": 292, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2507f678ada4ea68c925c94caa346b03", + "iv": "48e544fd96111b81e77cbd472e374020", + "aad": "62cd5fa03366d6c2f3a028ed86dc8247f1b7bbdb82dd4aff2c119481f7dc7bb82015314529d8c0444ef4530f9c2d22ac59a67c680ce24b37229262f8b2efee10dd4a72270c7fb1ec1da502618264730911f4807fe9e662d7ac2e6517a21dddc07c4deb59584122a04ee7551b43e3ba1c929545ec53a5", + "msg": "3770c698c900e7e7863a02f5b02d49d6", + "ct": "51019a996ec3b2fa421efe138b96c9a9", + "tag": "c29013a1c6dc1c3a8a19043682a44f4b", + "result": "valid" + }, + { + "tcId": 293, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7f14e228c927e11a93fdbfad64326642", + "iv": "39efbeb678f4225418d16a05abb61b66", + "aad": "e677b2d11a2ef36b3bb8e4dc33d6aded8a2c11bca6ba653e0b19ab517a7bcb40c21bee6bf2a98a32be0e11ef4be263a46fe14d41118bc9e6338186128f3b55174fadecb2ed1d3ee4493cfa225624566df44e09b4b3a377e4be865c61b35edfa660989168be4a8b0f98243341d0bf7a49258ee5567a205d", + "msg": "6abdf1ea33d727ce38c2fec4e4f698e1", + "ct": "810ab0195339467db71ed6ea2069c12d", + "tag": "6d053dba3061331b8e574d0c0061bc85", + "result": "valid" + }, + { + "tcId": 294, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "532dfea1609e143458377ade35c1ff0b", + "iv": "e3fb791931c42eaf8b3c319eee277d1b", + "aad": "2d475fc7a0a5843302e9dea7df3605e9187a090947afd2cc876e874d6b814200d98faadb472f5ea7f88081db37c4435d3f790b673cf9262d32127afedfdeae1e6ad0c19175e97ea4b3c6546aa0543543a598ba4067c318ce51434500e6592b336d74500450e944133c1434b8f17bfe1464a40ad75e6cc8fc", + "msg": "a232e46dd0cc496f149263a9e423eaa7", + "ct": "127a0618abaacdb7bb5e2d0d6450dac7", + "tag": "4ed6a2fcc5a212aaa41d48b8ec1964f2", + "result": "valid" + }, + { + "tcId": 295, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e250a3065874c540ec008e3d79e53407", + "iv": "f76b4cfc879a610383f602b57f0639fa", + "aad": "93f759f8b63ffc66aacde4639cd5979176159f20ba47b36310a2b6ed7e0f6d0ee909b772bdd53c0fbfb8f1fc5ecf2e06b8164b8003c0983efdb0a126b7835bd9c97509cd76b656017f2cf82e89ab2918b8f1ddee5f68458e9cf195b747d37d68356575681cd91276fb48c9c3eb8650f1af231a5beba1074e2d", + "msg": "06dd019502d2ddb1f16dd03d2903b6fa", + "ct": "e30eed9096699c9eab2412595fc7b7ea", + "tag": "a6bd3cba36f10f6af42d496391bf5ea3", + "result": "valid" + }, + { + "tcId": 296, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bd81c5f2861226d17b44a7a9baf3df11", + "iv": "4108353a047dbd97bec994cdbf18843d", + "aad": "f0acf004935cfd512189665898f1541115c9454144303d6f2b39754d2ca470930ff4cf424dfc3f220ffea21704e005983c5935d33c819ccfa4085458df51f66cdc14a4255958bf041acf22248f6dc97c7aec13231a55286a90644964977d6418c8d9f41a1e1c3d27efadd2b035e9752d5c8b8d2416cb9d6d94cc", + "msg": "0375dabd783b86c6ec8ca9dcf365e12e", + "ct": "b11908024c4a7c5bf0b053273d2baf60", + "tag": "d031ffe1b3129478f6ad8145eb64ed75", + "result": "valid" + }, + { + "tcId": 297, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "61f650cda32289cca5e762386ab6497e", + "iv": "e7b1505e0e506970e1783ea196e1ff73", + "aad": "589d49732c22b0a91da259c68f678249d517f05054743fc1ced3404a854cdd0a1f277fa8dfb38dc7ae36a5be1f5f1a00af84bec93c67d70e0161c2e7248795b03ed58191d7dbc6f14b6dd61d6b665641c7ff768e0646f447172ea893eb3baedfbd6db7dc85d7a7746a4739956d1da2ea0c3251f3b371bacb843e69", + "msg": "1e2d97272812525988928f48b6bfcda5", + "ct": "17a984eb7a6268ae98ddf085e9490bbc", + "tag": "3e4063575e189f21194aabf56d1c8379", + "result": "valid" + }, + { + "tcId": 298, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f9cb80a9c13fda81e2a83f716d039bbb", + "iv": "c9307f77f93895469b7ff6150485ed57", + "aad": "c238338d2ca3528e5297232ddaf97942c45eea243fd8a51063e40630e78fbeabe881e52b16914535a886affc85a3c64f55d0c34849eec26a1095fae96c9b3c16355a1184fdcf34ab2bb37dff3f9b8879f59cacc491b88b27aebc644378ba65d2894f3c7532beb80de6ed0415690820c76a6a76041730b6adb25ab824", + "msg": "cdc2dfc7bec8708c3c3690bb553e8a65", + "ct": "de40645127e3a20bba0aab3a31dafbf9", + "tag": "7a3bfd3d5b47c0893f2b7a3730bbb997", + "result": "valid" + }, + { + "tcId": 299, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "fcd64d5ecfb896cb7f8ad2e809f706b4", + "iv": "3125253b7073724732569ee2c3882d1b", + "aad": "d380975f917430b47bbf63fc4eaf06b7c3b5d2b63a4fdab7a2299e2ce8b62f39a8579a4e34dc65fda33e68d7a01ddcd5016976c9d214567eaa3b2f6e618ead69fbce66b913752419bbff928c3da539b91e95bf53a06f74d692bb6193847621056cf9c56cac348012bc5ac8cd098a6939ab3d7658e3e8d6e98efac5f5da", + "msg": "ddc29deef437d3e738b9e5b5ed4367ca", + "ct": "06ab89aada7084237c3a406d8479df80", + "tag": "c5b61d49ed1e5aa3dcfd95ec9e91eed7", + "result": "valid" + }, + { + "tcId": 300, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bfe78581a9503ab126f55b29c766f58b", + "iv": "119e097a7b1df949d924e8010b128b54", + "aad": "1e8020b7f8c5cc544bc141dca8790606537cbe033e379d7abde8dbec6a38b888f2029a3c5dfee29a3c635a8056e022a47205e7389426fa2c8047c1930fb7e821c88e8fd9385836c7ea445383b19d3460f11d5c5490e8d38d95240a83ec27b90632fc9778edfec7117e924d8cc56990a2c781d5498d2405e4eee6421bbddc", + "msg": "4cdb8759de37b741950a10ff076a3c7d", + "ct": "2283c2a33d59ef86f54f938ad6189308", + "tag": "ec1a7999d176ee244f52f5cd0dd15b3d", + "result": "valid" + }, + { + "tcId": 301, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5fd45d5360694cafd3277dd45a6a43ec", + "iv": "86d54fd9456c3c08e24c0e18caf20552", + "aad": "4f8a1f2d7dc93ede21b28a755cf39d21a257490fbc08dfb56fe2bce17b56c4cca80c931abe663dccc56fbdb1c653b1e8b6bd0846e0ad65aa44e9d20adeba019e719f4d77c7a5f020b1b380c87046c13d024ae47145c035015e18d1b21bb8b3b83ceae1c86332d896154931c716c72cd00e436a2c7e1b20ebc00d245f6f2290", + "msg": "df57c67fd670bf327c2f60bab4bf28fe", + "ct": "82c95044d34456675ae048dc82b34552", + "tag": "796f56f3ac11fcc9c72039d9bd6bec3c", + "result": "valid" + }, + { + "tcId": 302, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9b1dc49fc068d6961cc1e920ea314987", + "iv": "b3b3122e7f0039459bde4baa234848a3", + "aad": "3206c4c21a3f954969b33d8f448e0cdc81627b8b4bcbfafa6ef41bee23cdab79044c72ae0525126a74708b92f428eea246c02b6bc253c578fa737578e9048ba295ab7d29fc95161937ed533391d4c0f62e0cc05f677e34f845db7f6ad38c592cb3fdbb91adbf896a47633ac6c8609318e922d0f195dab39f255d51c92e09ca86", + "msg": "e4d014e51ac9c19dd9a14aa2467fda67", + "ct": "d0666cc4fe42b359b511df91b857cb7e", + "tag": "520d767a6c9e73178a306fe6933cadd4", + "result": "valid" + }, + { + "tcId": 303, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d716016100fef88af005cda2c4f5263f", + "iv": "b25bc76f6b50ad29e2ee56db087472f4", + "aad": "0b80326cb30c55a518129c36752143109a972775fe765b578284c8d852a251dd0ce148f495ecaabf27cf5b16e5778c07b19c7c94dff726f181b8d4885965edcda2169add559e69764c3626a7b8f4d7d1308fd7cecafeacdbac5ac263c0656a226648c09bf328d1a5347ad7b080687f3e1bdbb1f67718c8199a594f5d977ff8a15b", + "msg": "59c590960211bb4dd7e471df39695e95", + "ct": "08c22a7a03a7b57b5e0f201b60f0dcc7", + "tag": "571a0964a9eb6b1418d14ca5556684d5", + "result": "valid" + }, + { + "tcId": 304, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b069763af9995846fe3416462ee5a362", + "iv": "bf2bb6c16e1e6fcb0dd1317876af50ab", + "aad": "31d29aafe8b4150ab39b79a3b596e7489126058466c992f311e80f025a0f61ce51156d64e1a24f253a5d34297aa193d54fcba7c37d5e5d7ae66a017f3e7b04d7d777f3f7401fbb1c49997542eaee88027a1349fec067108bb17de5944d98f209fbe32d7195737ef49517a90857b2b2c01fe11e1997394a528256688d35e77acad669", + "msg": "0b70dcfa90d27b51bc0d0f809fe95778", + "ct": "63f7d9f587b249c579721537e8b214f4", + "tag": "a4dd387f4f2628b42a8e958aac86a2b6", + "result": "valid" + }, + { + "tcId": 305, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9f52efc687eb36c5f2134f0defd136f4", + "iv": "e405de5a5a1b9da6cb34265b2f1e860d", + "aad": "8449c3643bf3b2eb9398eb14b1a64b163ab8db7f7ced6bb6176e62d7947e43c1c81eff41642bbe7ec91f8e289edf246fe0cb97f7cdf997ede70ac3fa78cae48823d2805653bbc2bac75d3d800b9a72a3b67e0ce4ddee9d48ce63cac571aabab635aa3dc01579a8227573bcb0b961f2bb5beeb6384b1cf75b0d45a1982863a7d3d36e02", + "msg": "7dd8debdc4b52de9761714c0ab6378da", + "ct": "fe21c7922991c776889d2f46f4b26716", + "tag": "55687d29ae8388c0738d3c71f101c06c", + "result": "valid" + }, + { + "tcId": 306, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c1405613964b9e43980a7d68d6f2c988", + "iv": "0f0a3671f0d71120e6f4db68d45154e7", + "aad": "8f1fc6bdfccfec0d0066eb3660e6a77eea612698073f14f5a313e13fea186b86043407824bd1b20669bbfb529c22a9223e17be9cc2c3d9ebe9c14ee3b36f05eb00882b6b3405e2c2b726f0564b44f41fa8525e7ab6937ad2633cbac86b79786765092ec9c2f804e816a4d1163736a43d75acddf69044e373ad2166531fe766ad12d65ebc", + "msg": "6dad6ad64e08ed91b004f33a5fc5a377", + "ct": "6bbbf4ed56cc97ae569fcc7850f99eeb", + "tag": "c4de46a00274e53da4cf8b88891158f3", + "result": "valid" + }, + { + "tcId": 307, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "361a64ad7b371623f9716dde277cea6d", + "iv": "f166ec5b3b66fba8b7dc465cba6d0c42", + "aad": "8b14c1ba273aef871313276e4dccb34c0d064dccd1d552a5f690071bd29725e19c8641206b6737ed628c29520edba8868829d37705ef67e9540e4bef681a6381598be8c6192f6d3415e9fe77a8240fd2eff4fc736e1287f9d5ac5e99685b8b7a434bd86371149cbeb5ca60c13137be91f53a331e419b7b4d71296253ad42cf8c80f61d5db2", + "msg": "fe8b870a24ede71b1d008395108f8563", + "ct": "eaf8b3c123306102b0736c433c1b70ed", + "tag": "09e9789f32128e1b9d96d63bd63e89f8", + "result": "valid" + }, + { + "tcId": 308, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cb18b2df8a615f01ce7731ab289c0c76", + "iv": "96c4c6fd7d0f500e44111535c919e268", + "aad": "6ff6bdde6b8b383ed20e5f54e21e1aaf7e3faa35c616da974e418b08900419664a058bd292e9ab604efb2d7f4f7581006fb0f6e7cc4c77f641a74dd571453378faaffc128ffd0aae2916009e4bf9d9ed39f6e8f0c451bc23c7525dfc5d889d7ac7ba69cb1bd8e8f5f6fe5c148fe08e8ef066dc8f2c3498858cbb8bf21d48e3ed4e36be88e541", + "msg": "31d23fac1d766c81f25bf9c18c863885", + "ct": "27f1e1ff5cfaa46ee1224d0e5468a301", + "tag": "5a523ba2084d85c85dfec505c9d5f8ad", + "result": "valid" + }, + { + "tcId": 309, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6701b58ca60d0853ce56dc9716e3222d", + "iv": "e64b0ef64a6580272b1c6415571ee0c0", + "aad": "7ed972443a15ada245515c31e76efe070ed86f9f2012e49fa1fc5d9e522f3995ef6669d525cf8dc2ec627d51c158cd36b74694bf4b90a68f4ceec5fb2ac5560a2da948412063916358976a94f281ece1c3220ba293312629d4bb1373d4e410642145afdd9fa4118a232dc77d4565ac641f6c4698f566ac5d5606138f2e3241881d029cae7a75e6", + "msg": "5fc11c42ce2e0100ae3f701daf89f147", + "ct": "a26f42c2480f366ec8382e52ed9fc35f", + "tag": "6e6ab954d7bc31716561dfb57cbe0bd9", + "result": "valid" + }, + { + "tcId": 310, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7c6155eb49c86667dc53b25a29155efd", + "iv": "9aca9235ac4585ab2fb9f8e14442286b", + "aad": "51f54ec6d2ba4053159cc1a2256956c3f4abea46762bf43a25b287e9cfd8756bd075ec961684891c0b3085f88e136b154fb1f5698b0c42d5e9e4fb34d527d9e2a72a505dfb13852569017dc842f0f19886e5469152907bdef24aa7d2ed2e472d7fd21479744b8765a17b6e4e622e9f94a08d9100ff1cf6356bcd3463a197a72327ab727b1141b9aa", + "msg": "c6089e70257bdcc1e6b7eb367a4ed523", + "ct": "0a304d68a709d719da8c45aace671f7b", + "tag": "e72a7e2b67e41e8357d6ae3e9519a52a", + "result": "valid" + }, + { + "tcId": 311, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "12d419a5448f391ab0bf3d67ec022dc6", + "iv": "b4a7c0c264265adcb050f1a7cd8ef964", + "aad": "6ca52c03497d37fbcf712f5d2c36edcf13b668e53f275d568a60fe8b5ffe73330550576e71fe107111a8c271ef537cd3630cb790210339ce8276df3d7d0893fb5718fbe4879513ea4945e92bc3f00f8246f83d820177ceafa0e7a49e0fbd430a0e83b80907ff1b6cc506b8ba8e3526c158f9db5257151ddf0aa887548cd750553978e0590fa1c83db3", + "msg": "33bf73f390c6d1620edaa9ff47026d5e", + "ct": "1465367af41c99d432694ff21c94ed78", + "tag": "13579aea66df88bf4af18d9f3a811924", + "result": "valid" + }, + { + "tcId": 312, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e769c10dc714e9a29bc27a3a026e4c62", + "iv": "dc3bff21ca35df1006f6cc9842978740", + "aad": "c0da72d886cce8b817ee325c9ae4300b4bb231d8ecaf9883787a63ec055fa536a4eeb6806f9d5412ee44458eafa9ed13ce0c0d5f0f0d5fe891254deb288a47ee513778bc7d82ef47a348adcbaf6d50cff727e113ae9f09635fb94b13b8bfdc2553bffe240786cc20da1bd14e558052f410996428e5be29e646d6136ea538a5585166ec1238fdfd1c6b76", + "msg": "9d355ab72bf6adf96a59a51ff5e29e29", + "ct": "a4e0df8af729f516b60a1bead2469265", + "tag": "edc0dc0fde6ecb8ff4968255f85608e5", + "result": "valid" + }, + { + "tcId": 313, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c34fe0679dc03b052876a811c9c95e23", + "iv": "2ccde948ce42e0a99b0f328b84ffe748", + "aad": "64ddbc4cd3de8c3217dbdd47777d54ef8f045a5e7310f2e9d491d6a95a6f8131175ea52d592e5b4cc7f04c0b221f1c0a6405143fd7a175918db8198cc15036536e0270390ed7ce4d3297a969143e2151df0dd15e26071af3ea1ccdc3094f3e7ebcbd20c413896c4a14c6ba12b6e2ab6bab6a12cf3b9b45e72506404115a8408441c34b1fbb75697f075459", + "msg": "2382900eedc7f31a5a90d6afcaa96bb7", + "ct": "7f80397b0cd8db1a5ae44efe3049d1fd", + "tag": "8411d6d016cb16c2673bcece89e7f2df", + "result": "valid" + }, + { + "tcId": 314, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a05fb2aadbb56ea2000d979f17b8b309", + "iv": "135ff542d4b91a22b2ea083adf050ef7", + "aad": "7b6e94d8dfeb054dcdc31e475dfbeede769e03fa52d814e91fe3230f8967f3dc9b1cf0e7568fe29ec6916213f6c45b0be7cf299e8fff4f2e2f65801abddcbc55c28f6dc73c0b46459c07a7de92519c2b7711a71778d2c88c6dca74303938cdb43be7c5d553da7159e37d314ab4aa0978395a629ea48fa778ea78b82594345fa6b5834277c0f21154db5550a7", + "msg": "c1598521bee85c0b5aaa991d8d3ddb49", + "ct": "00f68619f9fd25631783b2f83da07d03", + "tag": "a58b723bdb131138f30165e62125c88f", + "result": "valid" + }, + { + "tcId": 315, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5404809cd25b59128214d3b2baaa85c4", + "iv": "78d5fa23f377779620797c3ce229a09d", + "aad": "828460e6d16c1e77b8652202095cf8ae4b8d83955f55942b65b1bed99451498cada58ead954ae3673d5903b8631d64a40204daf616444e029f78a033be64f3804ec215a41668cb6dbd9c2c6f764a4b1d574abbf660fcb1e795abab688d3b0c2174f75b8bf9da7366246c9c387eb46bcd0f1010c783348f616c20263f8ff4828d6f20257414da9a40f51f0c971a", + "msg": "8a4b2864bcabb6ae486be43b693e3832", + "ct": "5c73f0ef54ffa4af3f971d6ec4f22ddc", + "tag": "9a4df0fce79c86418fa9701ca5257fab", + "result": "valid" + }, + { + "tcId": 316, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dddc3b9244c6c1a4fff427a5fd658428", + "iv": "b80fd6f1547baf0803534acc7b546200", + "aad": "e1ca0095230d553c541acf56158fa6a6f36d9ad7b275aaf7cce0f83d7f15a9bbf079f058234102220f5bf6fb3d4cf76b9e59d1ec01a86463eae8992effc59a4a66f4439980e9b4e769c8d6a441241bca65981d39232929620df186db80d28adc0fceab315ea144f5bf1cf6d205de791e238ed96f0716adb3b981d5b8bdab25d35bfdf5b9df84bea2ff0874ab645f", + "msg": "0611b43781a0453c234c4152b8ddab8c", + "ct": "1aa74f3b55a5f792fbbad25f1528360f", + "tag": "af7cc54f99bdd5cb22c60c7d07ad2c17", + "result": "valid" + }, + { + "tcId": 317, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b424ac62081ff66f356920494a472421", + "iv": "1eb80cee6ecd302608fce8883d3bb380", + "aad": "b246ef074b5f4a31164797d14f6229549e2f91b2b25307d23ff3e8893ee141dced3da8067eba1cdd9b1d426c79da33af09955fcd00dd3cda73747595a9e0d3318a5a1ed0e41142af977d8d53a64426ddd1d3a0a7895953989313f5c3a16fcdfe3f457c7532f225acb7558c83e1e58b01c51ddb80e5cbdb2b91dfb6f2b1dab64b82157c6b04f3dc9a5a4bc9a6ec728d", + "msg": "4b3bf1ec50fc341ad488e4e5f838383c", + "ct": "20a389acfe35c118f69ae5be1340f487", + "tag": "8c8e5edba1e6fb7de6e15665674cbfd2", + "result": "valid" + }, + { + "tcId": 318, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bbd341fac6c40503d7e95782d4087bf1", + "iv": "d59143678985bf0f79ffbf208d4bbd8b", + "aad": "71aa4ad53977ae620992c117dcdb7ce6024b4ec6f5927dcb4f1ed5647ccfb9091717e5d1414121aace3db93efed84acca70609d323036dc9e9ef089eb597995876bfee6a1a2cb121160b4a6021c71daa2fc900925fccfdbcbc39c255e8da122548c91003a0c3045a83986a832bb6553d6916ec5fde0cb6b1ecebc16ff9abcab89da3cfa00f8f9131eab3620b7a46b625", + "msg": "5b54a81c65f1bc33c747e0c6e01fbcb6", + "ct": "a7c6c31cef3e2ecbc02682f670ff118f", + "tag": "6a8e4f371a3cf8fde45a2fa2d1267d5c", + "result": "valid" + }, + { + "tcId": 319, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1b693fc6240550dc9f80e043c8d01eca", + "iv": "a6221dfe51b79be592458917bee7e7a3", + "aad": "b0e6321c67ca57268d2ab55cb45ec3ce7d945dad3decf672337acacec5cd95fe7a6cd6a3f0d3e67b1277bc6d6635d1cb8e84e1b68c3bec5bcdec226624cdbc4df3e9c33d63ee2e7a28fc30dc89ab7c52c82b17b3ed85140c1e13c0f6da7da843ba56b102f8a408ab2321f042e59bf13dc3fdc215bec1e1dcff22e14d819bde0d417e6607d54d6329b6eece9d6c2cf04999", + "msg": "b08888acff58a941116c379be7b032ee", + "ct": "5d6c2e8422ba5188b91d5c473c9bf3cf", + "tag": "e9f7e24d62c6bc25e289cf3d86348e9b", + "result": "valid" + }, + { + "tcId": 320, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8def9abfe664f5cec8cbd61461ad8fa2", + "iv": "5af3fdbe7ca86caa4a6b6e6bbd9d1c19", + "aad": "9986e4f6255f5ffab7bbf4ba8e7492c33cd6627b6149daa53d6f9b5536c544bbfda7e85dc564c5711b0b07b66f33f4c683008eb1150e54fe3d18afec0e7de8f69c4691e2d689482bc6fbdd54f18898546b42ea41fff90411535453fb21a2dfc958f555ddec3985c626220d3f83210f1df6288cf9e2a442a09baa5fc65485e19a0f9b65b770bc58dd7bb8197036634d237c41", + "msg": "c32a2ffb5967a868e72a5fd338ac9a59", + "ct": "dd05ffcf5ae84c8d73e1f0e2a44da670", + "tag": "8fc532ac3d5cadc409a4554ff95edb8e", + "result": "valid" + }, + { + "tcId": 321, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1e2c31f026b94b0d4d0223303048ea0b", + "iv": "aa19f1c0663e734eca710253a658273f", + "aad": "3a7eea5a930f2bcf7b4f8676baef8c724512a15b814ea22e0244dfd302a8f01c6b3ea62c567a32e058a7efaa0f1de517d0f08a27668dbdd9545c987850dd33a5a861b6d441cecfad8d68729f76d860f1431b81881e3234b11b76af9351aba2d53531f3f7c1510527028dab793ad64d4c4fe65e122c4638a03ab30507fd2b5114b668f5945f55ab2fae87997e46ce429d1ef83b", + "msg": "d44e0576a78a0581bbdc4fc0b57c5c4b", + "ct": "7a397f9fa3384586c8ab09988a0b92ff", + "tag": "894fcdd2e441e3191c9f7f857bef91f1", + "result": "valid" + }, + { + "tcId": 322, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1e90bf65b7f45d06db3c53776d782778", + "iv": "1a83922ef59c0f66eb120b91e455a76e", + "aad": "490e89c77ee845711d84a1af35c3bbf857dd87916c0e2d9d2177544b4188f7e19ef4380cd13ff5e36d8099973a06091da5620e7f842d42c634aa1c2b4cb918c1e39be3bf4472d87107cd0200abebbc5863d4972d78fcb73e1b5d1b62950e590e139a9a292706579787e48aa5b1f983a4a1e5ea72828002f6e8840a706357d25348dfb284f8dbc24bb8678ba8c7eb402ff0c2e759", + "msg": "06ad3689a3e7a2e8151858ee6f54fde8", + "ct": "3f4b16a317494da542e137d63539d92e", + "tag": "dd221f054e577173de5c2c1b5e5d66a3", + "result": "valid" + }, + { + "tcId": 323, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "80a7d59bbac5c88deacee6afb8459fe5", + "iv": "72599c672f59d1f8e3378a4bfcd53ca6", + "aad": "3d14cdc8810ed979182d330aa0e690dad9de71f01a8bf0bc89d5f184827a1d54ad99761297725d349770d138cedaef5f248d9a832833fbd7c283840e9e648804332f9af922adab0b42c31d6f0fa37858adb9830bdffef96c7699402ebe8d1b47accfc16cfa83d7fe7cfd26e8bdaa78a4c63e1c3817fcbbf1f8ccdb9f986c1890df0690a2d1d73a4f6d1a9390c7945dbc8a24d527a3", + "msg": "17e80af0681cc472d2870aa77d4b75ee", + "ct": "35a68daf41859137fca84e82f69d9a41", + "tag": "8c320c17397e449c5cb883f01ac22f5d", + "result": "valid" + }, + { + "tcId": 324, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8123fe8f804d4815d96a8fd4f5c48826", + "iv": "1852c25463630ff3871c22851d519880", + "aad": "69d3204a9da32aaa3d883f9a66f5e5e001e80d90a60e1269ab29a44e56329b06322033ffb024c06366f605f56006b86151a9fc32fd2dbd231c3489ae26e6312f18125f7d724760139177f575a4af4c52a403b2d9fa3723b3ffec601c9e1199c52cb69b949b8403461447ff80d787fc85acf0a67f8820f41e08f744568478c05ee5556cd1b704ec2bb32afe84eef78df38a9438b3955e", + "msg": "329c616a266a28bbc880f94044b14249", + "ct": "ea13050d4fa3e00867b4f6a045783212", + "tag": "6242f216077f10e103c1953371d76178", + "result": "valid" + }, + { + "tcId": 325, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7b30ba25b3ef4ad985cd960641fceb1a", + "iv": "cf901600092c610c7178495da0528c2d", + "aad": "5c356777f1ada391de748578ff4214acfa3013111901375585a71738118c73c19b4bb412215d84f75b9fe0c39e53efccf46be0c5093b1de4af0d8a9782a5da262b472eb919717bfae53c549edcab8fb2a69a17aebaf911b0d6b54390685c3a1b57899e6b9f699c3dcb16ba5aa0a41e39fb764ea816beb94f8f4add1628195db80a2072155257ea4e6f615dc8cb11301b82abdb39633b59", + "msg": "7df6ce3bdd26579cc8b5a9f6d43031fc", + "ct": "429ef8c64be960968b6b2878ea56e452", + "tag": "6400f7fb63819a8de5113f9935302b4f", + "result": "valid" + }, + { + "tcId": 326, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6a93e4ae7ab5ffad16669fd2ea9cc06f", + "iv": "913bb7d631cdab7057090028b96fdcad", + "aad": "ac1f180e21f96592ff71d37c8f7e292acba4ae42005024b326782d2e361011f3254087d93d3950a4799e77e46430531866f9032092b644ace97baaf937732c1a996c558c1cb88144c660b4b092bc10ba1d3a4ea288fb922bc724f2851d8856ab5ff00a023e23b0977efada42216239cf0b497c932d4fff09badd6a75acffbf628a5027bd5885d551145770a7fe86f6ff934dd466b7cc674b", + "msg": "29fb0d7bb1fe03568fe128d6dae0eba0", + "ct": "6fcdaa3fca62c7ed187f18c99f53551f", + "tag": "3fe68b775f1d6771834075102d3fc4dc", + "result": "valid" + }, + { + "tcId": 327, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "19ab16f77c0b9dc273c433ac7fa3f392", + "iv": "0555c1126e0fc7b5872ee2f68410c23a", + "aad": "47f0ece389f9bbac30ac41819175b035512f4b277b9468d6714142cc4aa95d142b2d4955f0afba266be277c4af3672678766d00bf938c69acf6ad3e012583568acf4a313e54fec9903dc9a6f9bb361448e44b6bf3b13b4d7f06c4974ecf986a3e5045737434417632ea9d863fa5c623b5581564a895b639f57593dd9cd6921f8138937ec5fc1ca8cb0357dbfd2652f2745fd01113825a088e8", + "msg": "0bd99d291104b4807d258304d1b8b790", + "ct": "c97ff457681a19c19df9b6354b8d8cb4", + "tag": "5391a2c4677987aacc5a381fc8571a4a", + "result": "valid" + }, + { + "tcId": 328, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "de8915fe0ac35aaae673c35c269cc54f", + "iv": "824647f4feb9a4392d33109a8f890c3f", + "aad": "6682859ae05e018aa1ccb3edf48dbe56c504f65595babd26bbd4bb498da3373fae8e2c3c25cbbb9ce102339f614ad4fabcd380ea15368a2f3e935ec46e1370517d4386be57b87555c608f7f3d83432e375b6926e4fbb4366d38748fb35112cb079cbe9c5150c55c5835b662a11d9997555a1d96ad367c61928bf1fcecbcf0b30f74a2105db136730cc5dd3946f079c541b74b353e4523508cd2c", + "msg": "712da41d313a3e7ca263f253826d9784", + "ct": "f803fee6160416b6494945ba8b582322", + "tag": "51b9819bfe96f42b53fde6e8ad51b359", + "result": "valid" + }, + { + "tcId": 329, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6c9c793690658d9ca2191cf2b470a37d", + "iv": "83f78a04c51a9f2ea98f3566ba9f16cb", + "aad": "f25fd157202d34fc2ad5c31c00886b9347e3e7b39ac956c17d09115d0a799a868e1d984b59578b195d184515ccc6e8e9daffb51cc93c3fe44a229bc637d52529ea81a58b95b770ea837a791d1322ae484f74ff2ce959122788567f03d3b35e1cfcc619b1acef5ce24f3bed5eaff08ff450c1fea2fcacf7e343bd55fd51a22a6282c465e5a6bd0fe18b9e5f4297e3222c1587f0d4ae6d41fff69b22", + "msg": "5473157d4acdcb4884b8baa8093f6837", + "ct": "a1245704cf7e1386fbb38d8601115e1c", + "tag": "6f6dee1ec428fa4f99cb6da6645f4469", + "result": "valid" + }, + { + "tcId": 330, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4dcf4012c8e3858669468b4be1b5f0d5", + "iv": "0f69f981cceed8e3be355d4b0965ccde", + "aad": "635fd87413ca2d1cd11812d41b426f2f9d99aa0dd9ba9a5a1c6477134e26b0e189c13deb89f185384bfbdb7dc86f10d8ad576764d8c67587f3591ac42691dbe012a13b08cca70af2df85426b661a8163bcea55d686dfc8dc2a1cb9c040ff105c0123e8090ebfa9b4536a2660101e98ad59e0eb6f2ece4d378a923c80e633b938d14afd069836b5aefebff86bd74c77dd6811fe03e201a135e2ff8e18", + "msg": "b073163d0ff139d11359731eab8e4e1a", + "ct": "ec8bf3e3d355a2ec91b35f63b56c7c3a", + "tag": "3c47dd2ad211a8ee0f37d3620e576a09", + "result": "valid" + }, + { + "tcId": 331, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5e328e294da9640dfeba94d1e15a6dee", + "iv": "190d0df80df400ace54b0b6048b8fcdb", + "aad": "ba9c3b1738c8d06b02b4d6623806ca2f02c935814ba415636c3aa8b8ff04df910bafe1ca542d7a6d207f4218d343428079eaea2d1b7e12ee2ddffa2753c7ee56f8c43fe56761752202d096d9275ec064039d968112b0a50cd8fc1c3bec8e1a96dc94e19efe62a0971172cb32dd55a4f46a6fd6c0798096d167a4ba3fe93aa6e2f7999d94f706ca2ae99a739afbe542202bff196ecbccf7ecbc8e9c527c", + "msg": "306cf50c0200f62eb704b5cb2b19c304", + "ct": "1f3fd0ffc80f2dbb3e8a6bda31fac458", + "tag": "ba8fc1ec7ba28db51b1bad680f6ac49a", + "result": "valid" + }, + { + "tcId": 332, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "523b8f2922aa9b9eb90fc1f236294d0e", + "iv": "1a549f132e38d5ee805b43f238361729", + "aad": "b4a764f884cb104fcbf8eb5827d62ad70c138b042e9310b77914a85e11c8dc87d9e7d4b7f8ad3deead0ee652e01d41573d8c4db60914db20be5d535719c789051753f749cd26fb43daa371c4d7b52523ffce70e65d953692c45fc38348201ef810d149859cf6b1a7f34100831daec0bfd525e1000395307cedb4a75a5bed4b2c43a74050afa011dba3527c1346bfa1aa282ba72255cc00c124ffa4583468", + "msg": "6f244f28a554627203fab2ac8687d925", + "ct": "68894d927335954febf0c735600a0555", + "tag": "72814d7929a789ef9332850017c1cc43", + "result": "valid" + }, + { + "tcId": 333, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bf5fa9bbcc5acc1a22583630311d93a2", + "iv": "cb5faaa9aabf6dda7088e3e33c865bd0", + "aad": "f3356cbdfe133a70ed44b20299eda7647ce488f67ca75d27e40c4f5ebd9fff16e2dc872870596fe9fe8acafcc4a4e9232dafa8d52453335815aff98e4b34552bf309cf3fa8097b4aec2fdbd8f22cbf557f420fbb620120c5aaba089fec3fb7256e4ed7ed0387e3950a63766050e8dc6249abb840b47e60e081ba693b8b75765d9abee49cd29f7ab9152dc6e42e089165449dfeb1ab0b2634a77dbab5dd7c82", + "msg": "e6abcb6501ef975173bd35661bc185cb", + "ct": "68b424bf0c6c9c5cb6fc25f793dcc250", + "tag": "75c3f342540468ec10f9cf6f65de566c", + "result": "valid" + }, + { + "tcId": 334, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1bcf64662e7878e29a285fdac5b8e820", + "iv": "f1a20b6aca5e8729c8f257f91b619f00", + "aad": "369ae99a377642d63fe1015159904b4191c536ff139ddecf51521586b9d33b3d6f4aad91180651b7125d04b9c4d6c4650346621f3393dde9e1ad918f3b6ac2281200be1343a65eaa3e2c5e6f33503ef8fed0e54bdae83dd625474f051a7a38358214b889ef63f18f5484fd629ef79259f573394fb4f234d16a1d0ccc1d863c1ffd2476df09f4e5fc089df7fcb6c27c8da7e1eee8c35ebdac8c88348c9abbaf7b", + "msg": "b37ffdb71616ce0c76bbff81be04b4b5", + "ct": "e59a31ec8568a9372f8830fda02d4671", + "tag": "9f30946fb569470a13ef02589b650686", + "result": "valid" + }, + { + "tcId": 335, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5bc04ef73d7b1c38030065083620fd1f", + "iv": "761d0d59af458af63a7ef4890796f187", + "aad": "bcb136faa01342d974c2188aa5daeea63ee723e9b57b4d58704271dac7d8e5da1ffa779c48908ca8249768265275963a5f6cb45a2b9d08e462b952da677072ae7970f81ec0a84b5f80927c695dbe0fcb4104098656fd2bf802aea0ab6731dd8e703461a3f6d1a1a05c7f91117c80091086e85ffabafd37644d1342744b56971d8f92378ae5a159a4cc3e2df3688238878afc8fafedde7047513bcb0ca50eb13d90", + "msg": "e1cb8fbfc7529953b3000ee42afd4e6b", + "ct": "94b3c602af31b0a5d1f689cd6945ea33", + "tag": "530d9251d78b6fbf4c9c1a9be9abfd93", + "result": "valid" + }, + { + "tcId": 336, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d9c7c80541cd3b8d78ed9d620f09bcaf", + "iv": "6b8215e09279d3ba0c38b2b13e06c795", + "aad": "", + "msg": "ccd4f1b56df59f10a6e6bd462233ef895bf345944ea50f53e5aacc34dbfc02fe2c6d2d2b1ec957e6cd5d3243e71dab6cba5d7013c17e01a2016094531386c55a77a42aaec745e45c9c40c43062058bde0991f5eb789c492f3a06eed43711a6409cfa72a8165374c1a5e4ecb14519f64084e7e79f1dabb04b92544dab3d8ee12118d28628b896d642e897f45279a8736e1d1740bef6ea32112136dac978919ef8ae52ba9da705291ad31af1b0b648a8c4e01431efc4603f1d9d3af8b29f2f87a88df27795ae406883af496309c3819e7538138187bf647f21657c3e88a73679", + "ct": "fb1051a33f43ad50506e7e5b485d9dc21ebcd9c3126747465e3724909b58572d4b6f34c2da2d60d9dd73ee3dc532657e639a2f0524c42a8bf9e255a5cba312e4b747f746399db6be86a083c804158deff609ab27a6458d01b8c63e367fb62622795e8126a8ee90707ccb913f8e5943d8dcdb04022f82badad1ce4448342c780f911c2d53061ebab8c5e2527eca85eb423f98e53a39cf3d7369789b73c171bedfe93a048833b6f1dd26ffd45398907c24ebe0a1be06be57bcf7f0b22c280fe3c99eee321d9c38a95225c3c7f9a1ac50fbb1ba757e5667e347f0d682ff6156eb", + "tag": "8ac33bb24569d23bfcaacd671596c9f7", + "result": "valid" + }, + { + "tcId": 337, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "07fcd296e4f6e35489f664f6a8bddd67", + "iv": "dd192afcae1fe4ee1ce21bc3fc6d24d5", + "aad": "", + "msg": "649ab52a087f3b4eacb40080227ddebc7e0e65b7cdfbbd287761557aa8fa75f13d62c8f1b1076483c8a43bbdbc46db2e800da881fd8ace348acfeac203c8b7945010776389486f9c359cda19abe113c831d6a48ebc0ca78e8cd65e0fd49956a65896f4a3a4117803ea435a0dbbd4a4cdb4b6c7156ba6d71961f80828facae66a56caa89a6b677b2b023e066d6ab39f4f4546705004923666c6997c18523341a9c1bdba7979203de53ddc5c535ee75f8fd5c25bb6c5657f9a82026c8a836d164ef207135f61e99e5db22f0a8c909580dc42a986b2c8e6336527fe747e43f4eda4", + "ct": "f905cc039106257afddd25ee63684de5e8e28090e870bf64a84bd3234826300588f445ff30b73c3efcdd26544d22a5842d82e1f92327d90cc13d763b2dd4460ab2e03ab239fa0b6eb384c7a81f145334efdd0a4fc14e6e05ae1f3f44e56e4679a2bb545a2df9b45822fdcc784ea650e2f9cbaa507ce8c15ba494dc9b3b03e133886d712b41f7e7bf296412c66b681aa5dec9c0b087a10856a4a6aa74bd0840a96e64560570db5c16dc01b8cbd424e6854bca9cc23f2742211b4e8d7f65b2b670002b04604912f642453a0976843ad456b49f492f1164ffc3fd63164783fbd586", + "tag": "e147da58890630db87843f7d0777d5a4", + "result": "valid" + }, + { + "tcId": 338, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "535144acdde813935f89c39107e52f7e", + "iv": "e93e6c78dd22c3f9751086f5f95e85da", + "aad": "", + "msg": "074ee55677e563df595d4efadc2d43de0ffe5705dba0fafa1a395b22cff8fa9429a15cf2a00a76f27614b1f62d1e03f92a75d0c55dc4fc8bb85d56e8cf61ee0434c52a817b4374dc15d760a76d71a121fc91d4659d543b1f0d862c4c6238b2eab7956529f78b6070607f3f4aa904c17ddf7d1d8f2c4acd4c33be2d34469f98cc3391de33a17f50ce9a13b547e06ce24579350ae807d520d5477c67bb621171eb033fbf70d6b28b679f3b325be9b2f49848b82f5186bec4af1419f80bb3169b33cf28eebd867504062bfe2a188a0eaf4bed9b07d0af22c614595ad85feb3f96468b", + "ct": "726f3951d2a457e09e2d8fd83150083b817ed119278e7d14f4d131b436b51a07a114ce89073d5bb8110d68047710ebd9bb108f2b983fe61efb18b1ba590417bb7a01eab307a9f3556b4f8fdd3cddc978ccf4eca6d98efd3fd0065de3cb52dfef9eb26a893055e1625322ebd951f13b9e5ea175773341ee12d5d0238e05417625214721ffe24bce087359b342983873320cdc7690edd96b689adae34eb2407ae7c873d603ba854b20066a24a69bd4806a0f35466e53ab6404d5f32a3b93ea25e5b704cffe4f2d543903104f955cfc5fab93999be744d2cdaf2a3365bd96cded9c15", + "tag": "eaebebf53024d15933bd2b27576a0de8", + "result": "valid" + }, + { + "tcId": 339, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "44913704b80f04aba2011b9082189d84", + "iv": "9fdd7d936ed848ec4e3fa5b2d5cde32b", + "aad": "", + "msg": "5f253e6eaa3807c71cc18fdaedd91cf6e579d53bcb790212abe99f86930b35699dd821a66ad1e2bd43696aff0221d6bb5580c9be21940eda4c8daf0a7bacf2382baf1fa3f433bb119a58b6c776e849cdcee19ac574d372c3cd069dc7767662ad0146f127685480bb22e3a9489f20c4e1e1d30bc948f2ae7ba99c51474761dd8bb1a392c77f103d1ffb3cd964eb9d4f175eb1ef910dd38a2b8c2b802bae4020963cfa3f6badc1f83bfd6b22020fcb8450f0060b8796e125d8c95d6e6539b746512cd1722061099274614a00ae9f8310ac4fb366a33001670ca783b2c27ff08b115f39fddcf2d950eeb66c86764f28ebe04b8a9df098401fc1a71c78ec3a8f50", + "ct": "a13013b238df9b3cdd32a4b7fa49cfd537543bb8ebb68be4b579b70822892e6edf19d9257c28892868645c036305d025d090a8cca0a1824efde9ceb16f54688022845eb5130878d791ace41f566d397f2d475fd50632a789a8bf7e0814827d45463b049c649038d0c9b3b296c33ffbbc22eb9f54bd1f673932bb52ab504e267608234932d8b0c950b05ee739680a1fc7e28e38f352c27aafbb786670b65f238a4b57a837974967d7fb5ad0a0cf24e6ec6202f7ebc2a983ad5f5b99c213a23687ec731e7f4ef60ea8da4891c1b2be5db37063b386f716b4dc657b14ffab54dd1001147f7c530ff4acac9834f97ea3ae6dfadcd9c0a13a183d936bafe4ac01c2", + "tag": "0be8bb1f9b69d4a75868d03edc8019c5", + "result": "valid" + }, + { + "tcId": 340, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e822e775b394a0eff18ba3a1ad3e3a1a", + "iv": "764c26f0154b4d1a976290dec8f0bfd0", + "aad": "", + "msg": "8dbeb4784d62a4a24afe19f572d97958a0bf674cc665481aad9cf1b1e68c6a6aa7ff724e453e99a08ae29d52ccdc29e4d30c8ea3955c98d38aaa3e78e7012aea23c40248329221308ccfed6b6bbcc8e922b96ddfb93bff859f7c03baaf470ad716117b7e812b15452cd1347229a252bf75533576da0b464f288363c8781247bb2e4b3030f65f62290d82fc6abaf49130056069dccde8e5967274f780911290486290b0745007f249ac68e4877ec14db40b906f29899d266c3b4fbca820e8d34a58182bfba00e0ad1301f274dc3ccfb687c3a2ab0d333ef6ea5e743bc9e8905ab520f7280ad1b421bf30c88904f921b79318545a02aa28d5830cf6f595139290a", + "ct": "34afa447bf5de666e278b4784e1ef787a307c188ee3832c0e025852017edb508f36df40ce8292b92fd48595bcf44e1dc9ca9992bc091b8df98cd0dc6af1d10f2cddb399506b5c0dc58f99e9624269e3aaf3e901d121cac8b45a9ae17251a4657e1423542aa215fec93c7fa9dc11a47943249cf9b9da1f5f8067ebb9be434aa04706539e7cdad49b2129d641423f3a6b32d8c596577d36289c2f59cdb236af6d708c7d62be5ba4e54649b6924bbaa9a239675b94fc44a371566f25331a71e8e3cef3966ca2b2f7f1cbcacf228610b8208742bc9c93c1ce46a66399833a172f12f04e1c697914475c8de636badcfd21bdca299b9c5bd82696e27d7c6c8fd848cf5", + "tag": "2a053396e73b84c8f657140e108b5805", + "result": "valid" + }, + { + "tcId": 341, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a5ef259dd8a39e15258fcf5b5321f115", + "iv": "a9f045e44d8ea532132eda1473ed661b", + "aad": "", + "msg": "4d6ad67101fbac8fe80f02ecb5be31f36c7617286359cd8c46cd12a9d7f522caf8e46a0365412928a44a027f29bfc8c68155418f887954fe08e7e0a5e8a70a8a605003f6c98ac7186d60bf8305074c65477743806124d2bfba075bbad5d985b491f404337c8ede87a0c7221f4976272be6cebb30c3f7a57b0ac49969a065dce47c351c5780b750416663d6b4467c92aded43f36ac954c4e32584cba66d2ab03cbccdd56c4e0a5c77c35cdc7d64acc66c1aaf2091143afaa84f4f20e0fc57a65c6fcb6209ea116c10f4c1030b5c45891d492a232c2c024659663387bee9583c99c1014f8e21355d2e05e1e9d4ac23d94004654c40d4513cf1be46f41b47186ff383", + "ct": "71d3acf2e576636cd6e0d6a9e3f344b63691f8478501a06e8bc8ddf2b4e390170739a4d1cf14dc1f8824743b33371a478b82611e433e9f13bd79f983e9576e5db3a5eb8e022838bbea14250cf522a5e1ad248e39da5970646d758936291a032fcca6ee032c44c6e804c0301b6da54993a23112c51a26e34d2435b5722af56455f49b8cf0ab74dae1eeb8765cd4d057397c0d2dcfb5d4a9fa8c73bb337fb8dda15095c24f939757af9b5bc2d946f2f73cb49f3fff05b3ca81c0b383b5ea4dee1e82f20adfbe86d0e6f93345fae1e4d20f359e6ce2293d7cdeb66acfacd9e8cc83d8534c0f02dba171fc33ef5b5c103f1ef33a7dcb9383be6153cd32be00b4e7986c", + "tag": "3822fe60f0f6d117a29c93860f9c6769", + "result": "valid" + }, + { + "tcId": 342, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7c0759ec1f357053fa34d0dea02234e2", + "iv": "234af67bd22b228b9c0e7520b8712d3f", + "aad": "", + "msg": "34ad7677bb08195920b6115ea22cdc77fe4bd33d596bfe70d966826dd20607239293e1b884ce4e76692d5373d829babd5ca72942603edec473cbe30880d162eecc041f961939742e2893ee7f9b70339055e11725c50d32e432876e0f214a603f2c47c6ac6f50c26db3880a14e74f6a6cf66afa1d3040d06cb8df4baa358f54ce09942756f380b33d9508e6b1562d52e219aee7f51979329e51f2b8dd8307b070ab798927c60b8fb1596f6726baf6f5b0cfa020173be2e36c75d742343d0fb9cb2896b4e568c0ce98bcc4e157caaf7849a8ec90cae83597eb0abcf3e48b9b6b95e24a5cfe1aa1144c4bb990899ed552a375b30b7d3d28142d04b9e366be1cdeb9ff8b08e6e9d16f3634fcdaa3c75fca5b9117d152d259a6e128accee3ba1e84f800bd15bad6434ee6072e003392f56c504c249b2d6134d2195860947d1d2d5c5538994ad98011e8b24599731fb35d4b8196eb0cb433eec842983dc4c8817818ee80f6d419de4757eb31508106e5baa956fcd16f7df0a772ff074afd6010b570d5f14e59e5b28b43e6491b70746b702f57020b613380d32ba288962885db82e7e6c3110213a42309fb182890b67a9f87f9fd923c544920067a25aa831ae22dde9a0f13dc138f4bb28c1e48b469668f48f6b3827874f15e4827c33e35b8957a03e257cc72a8f3e6a975c658c45251e9a726447bca4d4e0124fcb72af3e8d545d4", + "ct": "d54e163ac62fd13d2f6ba99771006d2e9d79fafd73823db74ecaa5a89fade529977c76d08c6e4dbceddc1abb0a0d8eea93a91b5603af7da2f80fee935268e7b4cbaf105c88e2c5dd4c8c861beb77b1ae2b6ded053c3de79a8657fdfafef1c5c1276741c08a65e080390e8a342ee4581287bf00f9c28e081b2cc1ad91ff645ef1aa53d2bd60168dd9af3f894afee03364da60447afb7691c945feac7b26f0bd85d28121701d25ab9b8d7c333c0a76b648ece8be752d1779287fe5adedcfeed7b7b42de5355b6527c779b699190c8b85968e078163fe7b4debd5035b04d815aefe6bd9a86e8043fd8f96aa3771ac5a70f7a57063c602131b3cc70a8f44b39faed80bcb60a27efde95b284ff40d6785eaeba30669b44419cd6601a6e5f65559827f3ab60285204614e8dabedc2558db731fe9d296b54b790f0209740ad851d0c99ac5a46a3ffd75bd573a10e0d453f3ec0b6d68b16e7012f8c8c32d7734216d3a0503a174e27533b6366925da64ac5e96cc2a7a292cb6dcd0fed44be5abe64b57245a97594c23b0babcd382eb01b5a1637a0c703f5852e443d54534f8df7c0938c5750ad7a827ea6f6e2abed15458fde1549c16e2be8eb3cce918507fe718b625ec561f15ea0351f35e7dc7628358d03104f30cdbac8231ca08002745a3385d3bf9dfa988796c65c776a116525410fbb6ee38ddc87b827f255b9c699d51ef4340", + "tag": "d20b27acb682ccc758fd9ac1637a1eb5", + "result": "valid" + }, + { + "tcId": 343, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e6de2b91e0f8f0be0520abff7e6e6a9e", + "iv": "98a14296d860e43049bb4ac8ae3de9f8", + "aad": "", + "msg": "7fbd582d4ec3042b24ce083e5ab5f2a27eeea2ba7ded0f6fab68601b0ca0f7ef2226a616fffb50e2d42796e60f7a5d561b87ab5ddd0350e121938884e146f8990572802634e583e85d1a10d08d7acbcfaf21e5dc74f505d3a277018574365b4e29dbed441dec549d5944a1a645ec8bc085041aa21d43c38d9c1d875888bc5a672003b5ec7b4985777902f9caecd246f7fe868a8c2288b8b6416b2569873caecc63990745ad708b7b9948bc145b54a12656c21eb3abf0e63676ee53b4f4137a4bf7487b273b36ea3208c05f6eb17531e6756231fdddd96ed384c933d666940888006d13e7e77af31e7c0ca375ece11fe62d267e8a24fa980e00b2fc1b7b206f11fe4787db526a9d44a3986d21e432675940fddd070b1a9de77e127d1811e3a3a52f9ce7c748110ae769597825d42fb8e8969a5d41c7dd82f296a80726cfdaec3d2be12aee4a421b6023a89376d8aeccc973f4e2a4662ff5fcfc2ca27e4319d9f4392193699cea73a3584bdcbdd594a5cd4a3dea76c5f9bda7c7e02eacd1fb68c7575c8f13e1592fbe44f1cdeba54da8dea589e35098032218d5f150dd6e3acbb98238f6ae6fe02d9f404c510cea48d287dc565a6e8dd6fea853800792119109fc18fced4b7afe9ba0b090d866fccfbc394abebbe95b919af373775696c3b932ad710c2b10e44b93a68266d0f323d5c1c0c539d197bcb3662d77a4f56e5cc34013", + "ct": "95f76902f0f39ff9f03d0ebf1240ffc4eed3118aaf6d27129b76e96df2bfd65c45ad57921a86e188fb53ade7c1750785dfd9e539632f1c4547b546af729693defa6ed50fa260b9514fa74df63c9c69d7ac3e97df1d8ac9401043af5956786a7c2b95e9c8a0cf30d059cf93c6a3a3cc2247131154ec35c7ac336cf5400184804a676de61b359b610fc3875d1862e5053668197ab763c766dfeb1638a0694fd9525aff196567e0ee0046c0633bc92f3b51a3058bbeb4a9c15fd4bd3dfa883ecc45e6f3169c02d002de2bcb360f493de3b4e9467b716fc50f229701ea43cc4cba76fdb373c8c94844a5d760968bf9f20f57a5cd1a03b1e8a8f162e83ee85b4c772effadbf6d1b1ddec0ebc570e82a725e507dc3abb9fb0d60d4c7f38556332db4921199e542e21db5298c102748d075f4022bad656ec642111bc685013aa3b059ac10a758fabe2767427d465198058b3093997b6bde919767ce793878354e2f9afe6db9878800d485a2d3f99ad4da2c44bf7128622cf94b41c9536f506e0af441e7b8bc149b4c0f7075601f56af4402d7ae3839ade015efb86556086c98b1a7f72389893bc90144abb6cc969523c9990bc1375975bb297c6175eb415f28dadd4549996ca52fc49c2a3801d5558f190ac5220901d7763ed4a6736810fb5b0a23f6edd72b97623594a930c88003af4f5619f3470ad89c7e25d4848a8489bca344427d", + "tag": "c45443f81eccd401877abe62aff817c8", + "result": "valid" + }, + { + "tcId": 344, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ee32200498ad531202c3ba6acdddaf96", + "iv": "ee9f8b1adca434d7f478cfc37d7a5c35", + "aad": "", + "msg": "af96a4aad89bf10edb5875077b0649e21faf8d8082b1e361bbe35383c39c496c28c43877da683dfc318b1b1c6530e711d1e65f24b6a20620b2208ddc7e80b9358d3ef550dfdf6cf86829cae6d0d1d379ae92e9f194608503065640292ce77704b4555522cd89346a1129f6c96aae5c5770dd312d739520c5fb2f27c5dbc1be266056e62ea3451d0175acf40e1c2b98b7f9719138f8cfa51263e26071a0bd0331334f12bce289529e99d032f8ff2d0036dafaae9b6e70786343a8548a12bef914851d8a3c765b3df2256b628e938487c9d7b67303858f2f5d2518e704f121a0191db5772c4cc3b4b4ff1c0bc5ff1cb5c8c11193227739e659fc2e503e6362e8efc84b5565046004fec998d3601594e9a2c7260b92c85dd8f2b7177f7c7f3e3d88a259d0a5f185a28ed81e8728075f535617549b420abc0efbdd3e7c918e64ec6243793657bf8df28d492c84f1868c53caff70663d1bda5a419b2512b1313b02240b7a148fc8def0cf7d9fe9957306b68480f16abc080eea2436c67be16964032a8aff8cffbc7e217260719e8993f259e010988ada506669c0caceac3d1f0335f1844e606a3a9ceb7cc55c3bab17ecb42d0407d3425f269e7711994d1fbd78d5627779814ea3e6453eaecf27aeb66cf0c406b6919e86417a2e71360a134bfe83d69fc3ff5ea494cd72eefeedb38d1ba15bf04860f80bad89aa662f6a1c80ea73d562", + "ct": "f2796400163b283c5a5fd86c7197c043d7b9f8b51ea1c6c17ff3ae25111009a6ec630d758bf4aa5a37b2564b371f78f53cb7cc7d898037a1d27864afa769c1670e5c6febe05d7439a91d53bd98a2868fb8238cb12a89b2b835c7c767e7404f21964f6716175a2249cc20b791e57602a9cb4487a6c1df3dde263458e493a6e8ab769dde0589c0f0539bba880106c33557ae3b1dfd7ea3903b489f5f32d7da2bc8054d7c28a77ed1192a9d70dba1b94e4c95b0195a23194927b4554288c7c482b99653efa0dabd2e5a31a911238b1b5f9010612e8baf9fad90a8a9adfe259305eeb1ad62f9689a679bf59a17d3f8a4bf31bf8b19c2cdc77fcaff964edaecc024793df74f968e1dc6546d396312602a32ecba240389181c87a60e12fad879df9dac810fab8e34660fd83ad468bcd224e438d7c9f70835a0ab136b7aa82ebcb4de58a07db4f0b69b519252ee0b493901c95f8b16a932e4c4ac3ee7e9a37820f084519c526583f8cd8c5d695216e18d733727c225bd166ec55186d582a8c2d43438ab035d6bcb03bced838a71678779ec6ead487431d952b0b59a5b3a97be7e8f2ed4fabde06fc7b60c2b1e335d1e2eeb2dea0127fb9dfd25fbe4d98a1ca73af195a239dd035798cc13461a96fab6308feff79d9583d3084bdbfb0072273b2f6f28120e4a24eac1451c2d435672e45a7b5fe050ddc527bfef7be9c4ca0946bb800d9b9d", + "tag": "6fe53c0e1f9a6e373cb463e7337a684d", + "result": "valid" + }, + { + "tcId": 345, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7de6f6279470e69905b238aa35e8a8c1", + "iv": "ff5da75e9b889a4ccbdeda4864efed64", + "aad": "53d0767cee959423ba1af3b6497fabab7cfe6f3dcd69c079f0850f99e84e1c821b219afea590f8893a245c0b549142f9f293651cd338d9d771b082350527301a25cf791f4f286ccd9ebdc9ec4bcf78ad2375bc892fe6d99b9f20f7e8f4194360d8e5827ef855dad5108f6c9fdad2a62b13e38a198829db74a72295db84a0e3e5d8f8f16efc915a42628a84fcee6b4fdc68205e089daeeb5647afddbdc4e2aa50a3125904558cd1c00abc36100ee49a73e0e45a5afa5a2fd75007d5976bb2f43e38affd13b8bdbf0792079c1c5b1c73c28d20aa55360b070645f6aa6259fd45", + "msg": "a11b838694f1258c04be6529dea1b2ab43872c3f", + "ct": "a53e9955b50be64fd3c6bd89b247939517cd2df8", + "tag": "64d050448bbe60cb0305bf8f679cd18c", + "result": "valid" + }, + { + "tcId": 346, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a26f5e9dba3fb78c5ebc7e7b825741b9", + "iv": "82afcc9b306334ac4c7c6fa836a9e4d9", + "aad": "1081311c42e0cfa8b8a0281d45840eb6dfe199c1c7a744dd86fb0eab371e80ad2d75a0f8dd0aaf6757024682235322c46720c32440bdc253422aefac82911c24d13a415a4698f1849bb88a049b3b00af30cf6a64c21c620614fc877b50af19b451084d22bef6d78f96b79cf8f66a9d5c041345373953aefc5e387b47e27a6484677d950cd7b24e70118a89d33f113acdb002ee4fff6a7b846eb06e1233de6ce87dcd114fac7b276cbe9e8d69adfc0dbe02da6f75cab8295cad2671e2d66ad77be52723b77c70fe84d73c12b8193b44c51083f01f2ad23ddc6291745b87325689", + "msg": "e376acc27ecbab54cd4d53a6a0cf79ebbab80aa9", + "ct": "3fe42cc6cd4ca9e52b8e29c93bd9260c40ca29ae", + "tag": "23f9abf7bb64357d97943723608a6ce1", + "result": "valid" + }, + { + "tcId": 347, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "89c51324f93611db792387e23a4dc4c0", + "iv": "8a3bdca2942845069887dafb397438ac", + "aad": "295dcbd42ef8f9b8e9c5156c0e4907c52dc057190d69d6a20cb028cf426414ad0bc1fb4fc60bb496f9b66392e2f76c85e36c7db923f29bdbabf8061609195b30b86b87c10e030dffb83355ff58b3683bb6ba564d7a81795883dd2d12bc62b125c4d2a905d5fdcee64b04724f280d2ff11e642ec48a20642cff05a664e7daa35f2c198dd23f8ae4c14543ed1c88bfe35ee3aacba3894e8b24055a9a02d6ff6776dca768800c08b684e76d3770e477fc4f74d051d3e25aa42b243550f697e0725fe0beb3a58eba91bf63d1a4530c2b838fe104e4cad1068e3275511ba1826259fdf8", + "msg": "f56d742cf6585ce4b9d30b2995136e7c79825bfb", + "ct": "0b969171d871b4442cbcecb6f1cbfc61bd0c8a58", + "tag": "6f22e0f5bcdc5a579b5a742455c18697", + "result": "valid" + }, + { + "tcId": 348, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d8c32d15ad40cfea1c7b4107057a9f68", + "iv": "bcdfddd8db9d3af9864f593b478fc13d", + "aad": "f64be641ec17c9c8b4fa6e8d4262a2f560eaeceb9fd8675dbb9299d541fb7e1102d5f28f721839834316f065af28b6924828f020713b3827780aef7c09a897333263425991204fd670e73971b26584121775a2b53822496ac572b97e09e39a6c85abd37d27620a97b723a91c33b2e3018de9cceb04ac6f74fbb74edec469257cde3d05462f72a933ee61ba0d672a57f7988cf53ed42d4d79fe1b250558dc581e32c0516db5b34c5ecbd26c00c22a440e3d717fc1d693574f6b389024d96a8f9b51e79529e65b2a2419037db822d22ea1aa1b06f6e0d2b35a6d251fd3facec761b3c533de660740c3be9194240cd04af0a8186e6a86559e8f268e57d3e68689", + "msg": "e24edfe36db9fe4f1a3f54100cea753071bc158f", + "ct": "5d7714aea1e510b4ce6c2cdf14322ddebe6e30b5", + "tag": "43f04cfd22d99634b13f2cb429da99ef", + "result": "valid" + }, + { + "tcId": 349, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2e5fe7cee9ed9d0434794534cf8bba95", + "iv": "d0092db0a48ce828da7366cb59a70d75", + "aad": "156d04cc05cf4c7279d1a0be27c1888166be18f6a60dedb8d7831ef8aaf496ae0d5d145e537a7a9be4032452e2e535aeaf46574c412010d05e1aca40b5ad18007d09011addc6ff5762b188edae1087790db2a551ca70569c2bc79d6a0e59ed4a3ece86a241dfbbce7272a9c3ffb71002d062996a2130c26cc510b52a155eaa11931a0e0819a4a0ee08e58024e7b1933c9b98a965601ca75b0b135728ec4998746b8ce6922d60adb59d54e0507a154e8c23c2357580e558760e11ce08b7e8d5328258d2574fcbf9469a1890093830bab96e5181125f8d21991ead12bbc218efe5267505220117bd03486e3d67731a0d330d76ca93a3f509f49485a3056c80bedb", + "msg": "c83e9a0ba5909117390a9114225cbc095a50d31a", + "ct": "617b2243ba9a497dca9d8f282fa440cbab56835e", + "tag": "03ff1f6dfa00fe4c91ddc9c261e15897", + "result": "valid" + }, + { + "tcId": 350, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c6847f42588a18ccd89ab3aac2ec7677", + "iv": "6c37fafe6aa081a7a9dc9eaa2e9f0087", + "aad": "a7939cf0e178181373467ef3a9cdbaa37f1af6a45790cbf095370c6a3986f334e22adff062d40d4b52c4b2f333125e8e9dbcfc965167e6df7f4197e48c5952451740cac493ab04d0374457cfd59a0fc0552de18d010c89bc868ece510b4f5e5e5380ea22fdfc66b97f6a254a98d86ccf3b12ed763e37414503f1fa1684f673f2977405dd3b890e18d88ead48ca7953fd263e3313bcf87ef979061573fce49c162ce94bb3a5e4de44178321838bb85978515fd5dd240ca987034d9a94bd52006ad470d1aafa744da082fdc47e858300501b8a5beea62a385ef022cb7daa2d184bdfcb3e126e93a304b86bd13c0472720b9990eca4023b26acc8d22202c0919297a0", + "msg": "cd6819e3bb5d3023973c9be6159672424f62278b", + "ct": "d119125bc170c71dc10c6d16c230346f5fd1d383", + "tag": "f1672f2128af98ff1c939c36ddb65c6c", + "result": "valid" + }, + { + "tcId": 351, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "40289b2058b1bf916ccfc56ac27aa991", + "iv": "8bebd053e6f52f2d1f25a1e8de2fbca5", + "aad": "8cce1be9f7e945d5042bd983066d070bd9fe2e5d2973fba3cc444c43aef2a07c7b55737fa56f653b2f548cf2c34af0c7545ae95b7fc486e68e02ea53ba3c653401b51cdd86f6b1fcd7debf241a8898d8059c9e247f57b580b62b5c95678f41061b4a5ae14185e0145fbfb09ccc62fbf8c6f757f0186320a265988148d5ed0b3d23cb135cd5c811962c5552d8b4c5faf090ff123edc2433d387eb85166f739d59a63c2af0b6d516b2205d610f6fadf8957987cb128537b58c5c200cc0312a621fdbebb4b94e76f65b1a68fff14488e4474e8ce65d54e71f2995482f98f0d4b2a1a7f4baabe301e809fe7b0d846268310538181f8a4c06ee6dcc8c49b30b3e2d16dc1c60b8dc0e84e3ec7b33abb8ac28891dbbffba275b53328346da7b8d4126fd577a8e403b5f7ac5703bcfc1ffe1658d54faf1c43ffb1f80eaade935ab8a19ae4442d0d8022b1ec14b17adb65e92544c2ffb87220431583fd7e4a7ac62223ef648c1620a5bbb3ecf5af4d5da10bb786f0a696f7cb61b95f105f5fb2a6fa17ab6bd207befee16463a4a19a1a4acbe35f85a1fb03f6d92aaf12cbfd8ff184f072b5878ec898ff3f76e8c8df1d575a268d4c3012d56aca087cb9e52e7d3428169807d13770a79c8530d560276eb87b89faf13796603656d23014763d2e07ac9b9065cbd96be7c18cc265b75ccb5a923238ed2ee704b0ba67e94f6a991f26b4c5c", + "msg": "524c1e031b2d8bc54c2b5ea1ec64623519e05f81", + "ct": "5560c8e78dfda9af4c9a6811d572b60d7220d16b", + "tag": "c49f4bd90b164807d3eeda89a0217bb2", + "result": "valid" + }, + { + "tcId": 352, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bed7c3c4993d6924c45994a33b3dbb27", + "iv": "4ed0d39364896102ecf4fb05fe3c84d4", + "aad": "281ef9535df6d4213db0b2d00285c423671d2fe486827c1eab29db116abf7aefa99fb1a14860adfc9f6ffff60314ce8403ed242bdbd7fd96575d67ba487b2b7ccc7e96ed57b13ffdcd1c779537c2d08c0709d8ff42a345c9c65a952135ec5e7fe0007c434312ed7545c51016229587c694d03299eedd3ef45bed241c9336a05e12c25a8efb9567585791009413208d6a52ff9e0b182e07d4a55b4f6abf85179debdb763be9d8814e04b1141889d0e8b04c71a3d6dfaadfb0fca47939cbba920a28beb8ccd9d159a80d720d11e81e55a82987997d2a57f8a11c2630e84e32a4a15ed4abb2bd69eb2ee1e2d3cb036b76437208d315e4d146b0817ed3db23113ed5a4b9c0379566633993d892cd51acec9ff6676d40b09f9eb07e25bd2dba9a0841ca19e991e256983d00d384ab0c847cf612ab1a426a529c946615ac6f6393d2dcc12b45d5a2482e649af572f806e3a278e69655955049b674e238cf39e51a28c6bd0255b0c227a2c79403e110e0ffd632898e4c3919aae80d451ee15d4afbeaa32606d8d26b3d67b61cdd3523885b3f9e680376a9a6096ccdc3427f8b966073181386d09ae16e7ccf9f6b878c810dbf84518a505098469dfbd2e9e421e0209d53bfc39b276ec27fd2b8bbf2aedd7ee0b1f3fc885fd38699af70e0be9a35430d12551e08adf8985c7cc1fe22b83ad4c0d6360af4c7c05a0378b7685a7c866d1bd5", + "msg": "775596e0ced0856e6a9deaafde8c8fb51ac6eaeb", + "ct": "435f2def89ed679f6039a0a8b74023d4797e68a6", + "tag": "bdc45db2588b1e7f6bd35d30d1b26715", + "result": "valid" + }, + { + "tcId": 353, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "060df3ba963d8f3cc26689730e3d00fb", + "iv": "9582de1557fb872d99f0b9a9df6bfc2e", + "aad": "6efccd5bc30fd6f7e51548e31fdcda0f345a819500aa86503ab55fc25739304c240121eaac54309ff0c2ddc854ceb25fd155b2cb089562a9c009894822c13e185c1c1e2283c40033d15162a05bb06fb2b28ebc2413b077c803bae63a12e4ea21744bd5a01a8fe3742183aeb2ec058436f15199f1c2f323cfa1dbf4801e821798fb46e7312d8e8b776dadfc2ccdcc7e8af6cc4f011b60da695f0ddeb63667a577cc83d62cb25dfa75fe7aadc3d23dea17e90aba772441ca7680186853243ea1051099b250e4363c7f5296b7a95162788a2e743804d71d108ab0dd10affa422c56047a453491860f7f85569adc0aca7db0adf0a958d03941e37c1ba6b813e497903565a7dd3afd22018f690f05494e52a763072fee71f3cc1dbcd033baad9f60526baa2ab198429d1f12b20baa35dfbccf2a1d0e0e4955677839c5f0ddf96379066abf5e8b071129116d5fe4f69d8a900f9f846fd5341412ba78d4f66af34ecf0fb317a63dfdb0a09c7fa3aa0b4e8493cbe02db52689792bc7f60ff60a4921a96f3a36540ff3defc7c2a2bf8858474d9af8866cf7a71215fa4314b451810f4ce5e360a9c961bec3b9b43e7b6c7f2890a9cf64234e150f2a7076b2c229e077d35571722d48de93fdcc26e0bf1d3aa0a8d043fab6ff72daa49a931056d1428130210c0d08713d03aa1f3f755470a0f20e1d2707106c1b1b7ab73aed20e08746ab36b52", + "msg": "637ded31dc35fa04d7f735c3cebf7ae5bc649696", + "ct": "36444a04c1af73f7ba8bf4fd465cfd8eb3bf330f", + "tag": "b64f4768813c61b24c7aabd4442d03a5", + "result": "valid" + }, + { + "tcId": 354, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b10c5db54046f0dade37205a95884045", + "iv": "595acc59b511863451a5ac301fa601ce", + "aad": "7f0f15b09932e5cff738d57938544b678450817c8dd433f22923e8188480b93394b8f1136fecf85ff604129699bb2326cfdca26cc65c3ef2b1e72d864d178b", + "msg": "851eea75f819b3c4009bbb6831551c48b43b81c22832fdecd34346806dd3a638fd5b8c3981633dfe9e3165387ae6e3e70015c0fc8c8c654ed3e7f874490223", + "ct": "7478e47d77b841751458979de7435d89ade4cb8030824f483b14878d071e999b35da7be913344af52ed3ea699e4126763f73172d1731c688f7259feeab7d46", + "tag": "027c856f579866d92a4f0b85a7d4bc2d", + "result": "valid" + }, + { + "tcId": 355, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3f529b117ed1700b6d806433a6253f00", + "iv": "012e78545995229901d298a635e6c9a5", + "aad": "6b1036d2d95876c1c0cb8c6ab3a1d7337b5c87a6e053375aa36c320db87c5e4add53e6adc8eb6246eb25bb8fb84ab94d063499aa40c7d26d811da5be96227cf0", + "msg": "058650e9450a641c614a9e1250743a8a015a5fb139abfcd6c5660f1faef876ff99ee1cf19ef026a30235473974df15a80ac245002f0ca2a5016f9e6db0596b", + "ct": "32703bfbf7e4be042ee9c0a53526968a7956a532cac30f85fa570f8e620bd86cde803122242d4b2776f690edd4243f997bd564bb89613996b35800420416b8", + "tag": "c771ffd1ab9c856a508b2e53ee2adb7d", + "result": "valid" + }, + { + "tcId": 356, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4b24b9bcaef4f6a45c45a88467220a46", + "iv": "88587331d4c7b05af49e8476aae70289", + "aad": "a947cc2e290460ca7dcd21d258c9747b819a725e64d9c5f6504ce32fd9db2aef89222c8f8db809c15d01d56dcaa2a4894d354337adc4b621b712b54ae9e0dfb8d7", + "msg": "a42056d5f7de17b0d51b442e7c97530c98a24df5a59feda36cb6ee3e2dbad26c388e5203fdf201b3ecda73403aa9cf8c78a7d3b3f2547c327f87257dc7fdfa", + "ct": "69499427a62cdb94c3995f9f9d01fd33d8cfb7455de4296f19ce467dd6191a873803ed86b08f932347f033ab5a88f800d33d367032b4f8ed3a1ffbf0ef3130", + "tag": "a12af9eee931d961c1c02b3dd171ef1d", + "result": "valid" + }, + { + "tcId": 357, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "35dc63165b92f7aa1138a1c7b4de79ad", + "iv": "e5e223d520e59c081b92476ff4dc2791", + "aad": "44051f89a9827f26de2cbda14e4c5ca7be2ef4273998d2a061d25aced4fd48c15b3e48858cb9f96373cefdcbcb8761efcf214dbc420bbedc5df8d95d6b2629", + "msg": "58a3cdb7bbec53aa56a44dc99c126b0f15b311a06120da9feb2b86f2ba01902539e7aa4d49f5d0d2c49a40f3b15e0ae81a942b523fcde062ade4a94ae8e8e02f", + "ct": "5a078a412dc4732e407b9610b76888116d511d33abb33e3a2fd6ff51bb2d55415b6f5593dc4622f4acf12bbee1670c9611630a0d6e5de874c85d2316c93964c3", + "tag": "74bc4081edd726818ce409abffaad9e1", + "result": "valid" + }, + { + "tcId": 358, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c485a693a803e841285b5d4b93305b71", + "iv": "e6afd36bf6b82ce4a26f0b8cfdfd9ee5", + "aad": "0a8396257c8892b3eea8d888aea5b4635fa0dbdfd8513d839f550597e0703cba4b11ca9f6fc56db51147e7c7e0b2e61d111dfe4f19cb3f7510d866741a84e392", + "msg": "e8b06e3d4a5f92a6cdc9874d45b04b7c0543f19b7efb2f06dc4973a248a585d25e5aa4c400fb5063da7661f17fdfbc0b874f22be3221cb2e7f2dba0ba0b452be", + "ct": "dbcc4e42c2048ee06974c46c63d8df3c7949527683c9dbfa8d2f59104ba0f0e9f4cb92384cb1e3a0d790a81cb86c1a6ac8222fb4402ea57fa13420565bb0d205", + "tag": "f4adb262db224e245be3ea4ebd8cc189", + "result": "valid" + }, + { + "tcId": 359, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4a20440d97a8af5e947d1a97b7d6b962", + "iv": "d13e852475bc240cd7e272b3deab5101", + "aad": "49a8760a7c7a793c9e967980016d2ddafe3e2797dc099407b1a95d59dff07f41d0ed9b2fd29a35b7055343155d6a7021b70fb99d8dda1cdd23dac96e580e035b3b", + "msg": "b42700726981b0a636cea845b8d1184e91643f28323b3f3919aaa4a3ce1497f23b7aebecac32e4b048318d153cfeb48c3f0dfb01b0311e9e019396970997df13", + "ct": "02ab333f0f618727957c5dce79212f48d5e21fe8152bb2f0a5bdf81a0d4be3e6b5aea55197d6d0b5f66a4a385c84512d6d8952d3cf45592976203081c095963a", + "tag": "bb665b42b44370a89c383e211e4fdb5b", + "result": "valid" + }, + { + "tcId": 360, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "10434761c932032695680077b75f5b5a", + "iv": "c0f942c9a9d049c3ca9da2ab27edb83f", + "aad": "4c145ba8ea35115d51d7d6eae70601534578508add8ee1470c7697e6f32e8f4282df9fcf981e367342200de89d0d0fe5d13465436bfba3e42ccbf1af57192c", + "msg": "8d179293f45793a6ff3e445420ee0d3e8e4f4d129a595fc576913d2168ffcd0822bbc3a24c1779da0ecd640ce9b74b63b1c65fef3cbfcc3d07b6403363819c7204", + "ct": "d42f89d9b69f9dea1933dd1247538445eb586a3c0dc8ba2176f1ff8ff9a3fba4f5084e48c2f653aabdc5d3910dd3dac66c3e0e82b6adf6322de7f6f78f025850bc", + "tag": "8116a13846fea913b0fbbd33db8e2e45", + "result": "valid" + }, + { + "tcId": 361, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "693b05bd6f612587856f93c68423eb37", + "iv": "285240ead7cf7cca3766ac689201a32e", + "aad": "d15eb2c424e939ddc09a9604cd9d40306436d1d60fbfe1f5cddc3d04b6486ab8e333591a0f9f841451db1b43a8a10a81722a5d3133d45676f47d547dd36110ed", + "msg": "156141cf278da068e725f86c5534a480fb332ea40e1790b6fa9e5975d195e88827dcc86fdba9e1f6561ec17ceb70f9d32ba0643063b7100956aad5b69983b99f9a", + "ct": "1c213d26ff50a25879b7b3052ec54caa3b3d72a9ad21861751ba371899c2d2c97ea80e3d08a02d59bc452bec0e22c06da24cdd2ea80e9016ec3db37f8682c94e38", + "tag": "fea0b65b4ddf87f38fc4cf76c92aa30f", + "result": "valid" + }, + { + "tcId": 362, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8e7541a87de9efd92355c2dd7efdd379", + "iv": "c5093cd6929a528580cfb60d608e1539", + "aad": "a404483bd022c0c87598493932e544bd04b38cf5c981d91df656712919660883d9b3f8b0be0992894e8068d00624177efbb980033e7f541673021bd1686075a38a", + "msg": "40febd259f23619911b5b5542dee089bacb0d2cda413b9fe023d4112a6f50d1bf2d863953075333503b0089b22968cf12f61a52731b6d98ac523aa7928bf59477f", + "ct": "8db3c7a4beea75b9d649cd3fa875f07ab4c3e985783aae2da0fdade4618acd7b3b593a12c4f420666e45521c313ac3570e9e508fbda4084bb1afcf12e19ba11872", + "tag": "7e95255a8c1fd456afd54b6ff96a6c19", + "result": "valid" + }, + { + "tcId": 363, + "comment": "Flipped bit 0 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fd047a573ee9af4210ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 364, + "comment": "Flipped bit 0 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7fb0234127f1c69397ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 365, + "comment": "Flipped bit 0 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5157271f8a35bec8ff490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 366, + "comment": "Flipped bit 0 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2d66a36de6c734aa50730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 367, + "comment": "Flipped bit 1 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fe047a573ee9af4210ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 368, + "comment": "Flipped bit 1 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7cb0234127f1c69397ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 369, + "comment": "Flipped bit 1 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5257271f8a35bec8ff490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 370, + "comment": "Flipped bit 1 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2e66a36de6c734aa50730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 371, + "comment": "Flipped bit 7 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "7c047a573ee9af4210ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 372, + "comment": "Flipped bit 7 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "feb0234127f1c69397ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 373, + "comment": "Flipped bit 7 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "d057271f8a35bec8ff490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 374, + "comment": "Flipped bit 7 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "ac66a36de6c734aa50730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 375, + "comment": "Flipped bit 8 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc057a573ee9af4210ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 376, + "comment": "Flipped bit 8 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb1234127f1c69397ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 377, + "comment": "Flipped bit 8 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5056271f8a35bec8ff490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 378, + "comment": "Flipped bit 8 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c67a36de6c734aa50730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 379, + "comment": "Flipped bit 31 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047ad73ee9af4210ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 380, + "comment": "Flipped bit 31 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb023c127f1c69397ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 381, + "comment": "Flipped bit 31 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057279f8a35bec8ff490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 382, + "comment": "Flipped bit 31 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a3ede6c734aa50730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 383, + "comment": "Flipped bit 32 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573fe9af4210ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 384, + "comment": "Flipped bit 32 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234126f1c69397ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 385, + "comment": "Flipped bit 32 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8b35bec8ff490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 386, + "comment": "Flipped bit 32 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de7c734aa50730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 387, + "comment": "Flipped bit 33 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ce9af4210ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 388, + "comment": "Flipped bit 33 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234125f1c69397ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 389, + "comment": "Flipped bit 33 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8835bec8ff490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 390, + "comment": "Flipped bit 33 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de4c734aa50730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 391, + "comment": "Flipped bit 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9afc210ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 392, + "comment": "Flipped bit 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c61397ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 393, + "comment": "Flipped bit 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35be48ff490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 394, + "comment": "Flipped bit 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c7342a50730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 395, + "comment": "Flipped bit 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4211ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 396, + "comment": "Flipped bit 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c69396ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 397, + "comment": "Flipped bit 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec8fe490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 398, + "comment": "Flipped bit 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aa51730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 399, + "comment": "Flipped bit 71 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4290ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 400, + "comment": "Flipped bit 71 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c69317ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 401, + "comment": "Flipped bit 71 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec87f490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 402, + "comment": "Flipped bit 71 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aad0730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 403, + "comment": "Flipped bit 77 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4210dfea1004445b71", + "result": "invalid" + }, + { + "tcId": 404, + "comment": "Flipped bit 77 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c693978b3972c43f0607", + "result": "invalid" + }, + { + "tcId": 405, + "comment": "Flipped bit 77 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec8ff690dafe661deb3", + "result": "invalid" + }, + { + "tcId": 406, + "comment": "Flipped bit 77 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aa50530b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 407, + "comment": "Flipped bit 80 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4210ffeb1004445b71", + "result": "invalid" + }, + { + "tcId": 408, + "comment": "Flipped bit 80 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c69397ab3872c43f0607", + "result": "invalid" + }, + { + "tcId": 409, + "comment": "Flipped bit 80 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec8ff490cafe661deb3", + "result": "invalid" + }, + { + "tcId": 410, + "comment": "Flipped bit 80 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aa50730a20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 411, + "comment": "Flipped bit 96 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4210ffea1005445b71", + "result": "invalid" + }, + { + "tcId": 412, + "comment": "Flipped bit 96 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c69397ab3972c53f0607", + "result": "invalid" + }, + { + "tcId": 413, + "comment": "Flipped bit 96 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec8ff490dafe761deb3", + "result": "invalid" + }, + { + "tcId": 414, + "comment": "Flipped bit 96 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aa50730b20a4ab75c4", + "result": "invalid" + }, + { + "tcId": 415, + "comment": "Flipped bit 97 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4210ffea1006445b71", + "result": "invalid" + }, + { + "tcId": 416, + "comment": "Flipped bit 97 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c69397ab3972c63f0607", + "result": "invalid" + }, + { + "tcId": 417, + "comment": "Flipped bit 97 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec8ff490dafe461deb3", + "result": "invalid" + }, + { + "tcId": 418, + "comment": "Flipped bit 97 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aa50730b20a7ab75c4", + "result": "invalid" + }, + { + "tcId": 419, + "comment": "Flipped bit 103 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4210ffea1084445b71", + "result": "invalid" + }, + { + "tcId": 420, + "comment": "Flipped bit 103 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c69397ab3972443f0607", + "result": "invalid" + }, + { + "tcId": 421, + "comment": "Flipped bit 103 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec8ff490daf6661deb3", + "result": "invalid" + }, + { + "tcId": 422, + "comment": "Flipped bit 103 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aa50730b2025ab75c4", + "result": "invalid" + }, + { + "tcId": 423, + "comment": "Flipped bit 120 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4210ffea1004445b70", + "result": "invalid" + }, + { + "tcId": 424, + "comment": "Flipped bit 120 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c69397ab3972c43f0606", + "result": "invalid" + }, + { + "tcId": 425, + "comment": "Flipped bit 120 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec8ff490dafe661deb2", + "result": "invalid" + }, + { + "tcId": 426, + "comment": "Flipped bit 120 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aa50730b20a5ab75c5", + "result": "invalid" + }, + { + "tcId": 427, + "comment": "Flipped bit 121 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4210ffea1004445b73", + "result": "invalid" + }, + { + "tcId": 428, + "comment": "Flipped bit 121 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c69397ab3972c43f0605", + "result": "invalid" + }, + { + "tcId": 429, + "comment": "Flipped bit 121 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec8ff490dafe661deb1", + "result": "invalid" + }, + { + "tcId": 430, + "comment": "Flipped bit 121 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aa50730b20a5ab75c6", + "result": "invalid" + }, + { + "tcId": 431, + "comment": "Flipped bit 126 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4210ffea1004445b31", + "result": "invalid" + }, + { + "tcId": 432, + "comment": "Flipped bit 126 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c69397ab3972c43f0647", + "result": "invalid" + }, + { + "tcId": 433, + "comment": "Flipped bit 126 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec8ff490dafe661def3", + "result": "invalid" + }, + { + "tcId": 434, + "comment": "Flipped bit 126 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aa50730b20a5ab7584", + "result": "invalid" + }, + { + "tcId": 435, + "comment": "Flipped bit 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9af4210ffea1004445bf1", + "result": "invalid" + }, + { + "tcId": 436, + "comment": "Flipped bit 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c69397ab3972c43f0687", + "result": "invalid" + }, + { + "tcId": 437, + "comment": "Flipped bit 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35bec8ff490dafe661de33", + "result": "invalid" + }, + { + "tcId": 438, + "comment": "Flipped bit 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c734aa50730b20a5ab7544", + "result": "invalid" + }, + { + "tcId": 439, + "comment": "Flipped bits 0 and 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fd047a573ee9af4211ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 440, + "comment": "Flipped bits 0 and 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7fb0234127f1c69396ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 441, + "comment": "Flipped bits 0 and 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5157271f8a35bec8fe490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 442, + "comment": "Flipped bits 0 and 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2d66a36de6c734aa51730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 443, + "comment": "Flipped bits 31 and 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047ad73ee9afc210ffea1004445b71", + "result": "invalid" + }, + { + "tcId": 444, + "comment": "Flipped bits 31 and 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb023c127f1c61397ab3972c43f0607", + "result": "invalid" + }, + { + "tcId": 445, + "comment": "Flipped bits 31 and 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057279f8a35be48ff490dafe661deb3", + "result": "invalid" + }, + { + "tcId": 446, + "comment": "Flipped bits 31 and 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a3ede6c7342a50730b20a5ab75c4", + "result": "invalid" + }, + { + "tcId": 447, + "comment": "Flipped bits 63 and 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fc047a573ee9afc210ffea1004445bf1", + "result": "invalid" + }, + { + "tcId": 448, + "comment": "Flipped bits 63 and 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7eb0234127f1c61397ab3972c43f0687", + "result": "invalid" + }, + { + "tcId": 449, + "comment": "Flipped bits 63 and 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5057271f8a35be48ff490dafe661de33", + "result": "invalid" + }, + { + "tcId": 450, + "comment": "Flipped bits 63 and 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2c66a36de6c7342a50730b20a5ab7544", + "result": "invalid" + }, + { + "tcId": 451, + "comment": "all bits of tag flipped", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "03fb85a8c11650bdef0015effbbba48e", + "result": "invalid" + }, + { + "tcId": 452, + "comment": "all bits of tag flipped", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "814fdcbed80e396c6854c68d3bc0f9f8", + "result": "invalid" + }, + { + "tcId": 453, + "comment": "all bits of tag flipped", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "afa8d8e075ca413700b6f250199e214c", + "result": "invalid" + }, + { + "tcId": 454, + "comment": "all bits of tag flipped", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "d3995c921938cb55af8cf4df5a548a3b", + "result": "invalid" + }, + { + "tcId": 455, + "comment": "Tag changed to all zero", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "00000000000000000000000000000000", + "result": "invalid" + }, + { + "tcId": 456, + "comment": "Tag changed to all zero", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "00000000000000000000000000000000", + "result": "invalid" + }, + { + "tcId": 457, + "comment": "Tag changed to all zero", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "00000000000000000000000000000000", + "result": "invalid" + }, + { + "tcId": 458, + "comment": "Tag changed to all zero", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "00000000000000000000000000000000", + "result": "invalid" + }, + { + "tcId": 459, + "comment": "tag changed to all 1", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "ffffffffffffffffffffffffffffffff", + "result": "invalid" + }, + { + "tcId": 460, + "comment": "tag changed to all 1", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "ffffffffffffffffffffffffffffffff", + "result": "invalid" + }, + { + "tcId": 461, + "comment": "tag changed to all 1", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "ffffffffffffffffffffffffffffffff", + "result": "invalid" + }, + { + "tcId": 462, + "comment": "tag changed to all 1", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "ffffffffffffffffffffffffffffffff", + "result": "invalid" + }, + { + "tcId": 463, + "comment": "msbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "7c84fad7be692fc2907f6a9084c4dbf1", + "result": "invalid" + }, + { + "tcId": 464, + "comment": "msbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "fe30a3c1a7714613172bb9f244bf8687", + "result": "invalid" + }, + { + "tcId": 465, + "comment": "msbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "d0d7a79f0ab53e487fc98d2f66e15e33", + "result": "invalid" + }, + { + "tcId": 466, + "comment": "msbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "ace623ed6647b42ad0f38ba0252bf544", + "result": "invalid" + }, + { + "tcId": 467, + "comment": "lsbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "", + "ct": "", + "tag": "fd057b563fe8ae4311feeb1105455a70", + "result": "invalid" + }, + { + "tcId": 468, + "comment": "lsbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "5a06776094b3f5bb9845bd2f8e92bf", + "tag": "7fb1224026f0c79296aa3873c53e0706", + "result": "invalid" + }, + { + "tcId": 469, + "comment": "lsbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42", + "tag": "5156261e8b34bfc9fe480caee760dfb2", + "result": "invalid" + }, + { + "tcId": 470, + "comment": "lsbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f", + "iv": "505152535455565758595a5b5c5d5e5f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", + "tag": "2d67a26ce7c635ab51720a21a4aa74c5", + "result": "invalid" + }, + { + "tcId": 471, + "comment": "tag collision", + "flags": [ + "TagCollision_1" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "", + "msg": "0000000000000000000000000000000000000000000000000000000000000000d694d4c52124cbe032bff86a482dac5ac1514bc1e32575f71f0577f8c2cffe766e4d2926910e1d5b86c3e3c6028a7b52f02fed8542d4ca0e42d36ce2cb1f3f66e71b9606cf7e5cb697d5984460967ac7a029c9ac0a3eb1e7689de25b47212fe0fbdefb65fd80c7d14ddaeef4f7ab0fce710cd77444a5e07644c0bc498227ce81", + "ct": "41de9000a7b5e40e2d68bb64d99ebb19b3bceefc02ded88eae5328df084aba1dff341ada7cea47a07fe9286ed94b2a5e3c5b23d6d11fa8dea6635ad0673b94d2721822eb751c7d69d74dcf24d5aca444d7e4d53531513e5d06d404c335681e407e2a8edd11c328d02a7b65280bc29c8915b38d7bd69b170e739a89c0441fea187a4998bcb3f223aa3083111fec8e5e1d9fa5ed73e2f893c603177d3a7c445278", + "tag": "78730d33219686a7c6ca27d5206e5230", + "result": "valid" + }, + { + "tcId": 472, + "comment": "tag collision", + "flags": [ + "TagCollision_1" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "", + "msg": "0101010101010101010101010101010101010101010101010101010101010101b6e32427de24486698fd467e533fa6a9db39c91eb7c34e936660beb4f6198021a8426e54da9b7428cc30feb537b685be6a5a3dcd1109e585a1a88f5bec8f8aa27d6b73acab10f720394a8cc9c21c4951580400cc7cfaab6bb0fed95a822cb21088f2b61a1bc1b1fdd9bdc7ae99ee03c3966dbdde84d3d0bb246b16288d4712dc", + "ct": "40df9101a6b4e50f2c69ba65d89fba18b2bdeffd03dfd98faf5229de094bbb1c9f43ea3883eac426d5ab967ac25920ad2633a10985f993badf06939c53edea8548c8593ae25fb98852e56578de7367bf9e0fdcd14e1e0c9ae1a115a5eb76834efa42a657ede272b2e53b30bb9782fdd917e262dc7f37cfcf554c10f365fa055aa3da2d0eb915b0ae438754f0769669cc4c20520efa01c6a890d6df1399c3300c", + "tag": "78730d33219686a7c6ca27d5206e5230", + "result": "valid" + }, + { + "tcId": 473, + "comment": "tag collision", + "flags": [ + "TagCollision_1" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "", + "msg": "02020202020202020202020202020202020202020202020202020202020202024314fe693535f4f1606b535f6ad19dbf1b154404d6785d7480ae5e44e4a20aa563cfe1ca5860c05996c11a333309bcb587ceffdd5655d724f6fc88ca8f1069fb176d1e643fc7a7c5d9153f6baf2c71af9a457fe82fa780d6a5dd4e9850f0b9833d0a57a6f6e6ca3cf99d1fbbfc165bc1e82022726e5e998af49c26449d880733", + "ct": "43dc9202a5b7e60c2f6ab966db9cb91bb1beecfe00dcda8cac512add0a48b81f6ab4307668fb78b12d3d835bfbb71bbbe61f2c13e442805d39c8736c41566001935024b76c564addc943307202dc0ce931764c48bd835771727ef2bc7a5b75052e82cf402cbcc1c50ce572c2121e9d9cd2463b40d7442f644916b807e3071ac2c29acec50517ad115b96e991ec0415970ffb534f366ae8db5268c32714307b5d", + "tag": "78730d33219686a7c6ca27d5206e5230", + "result": "valid" + }, + { + "tcId": 474, + "comment": "tag collision", + "flags": [ + "TagCollision_2" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "0000000000000000000000000000000000000000000000000000000000000000d694d4c52124cbe032bff86a482dac5ac1514bc1e32575f71f0577f8c2cffe766e4d2926910e1d5b86c3e3c6028a7b52f02fed8542d4ca0e42d36ce2cb1f3f66e71b9606cf7e5cb697d5984460967ac7a029c9ac0a3eb1e7689de25b47212fe0fbdefb65fd80c7d14ddaeef4f7ab0fce710cd77444a5e07644c0bc498227ce81", + "msg": "", + "ct": "", + "tag": "c6ca27d5206e523078730d33219686a7", + "result": "valid" + }, + { + "tcId": 475, + "comment": "tag collision", + "flags": [ + "TagCollision_2" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fd3518d1febad5fb1522c4dfd52f2e1df32ea68d85abff7fa7af35546174e85cc73a27db5cd74d3f997aabd80210a2f06628359a980a8fdbc6e196ef3d28d378355bc4045944978ab8890356b3a348d869d77e3ffaee8cfbecc78923265a3ae3faa3b2e0539f83dca626e87cce0ae4dab634362abe78e2ce43b9eda1d66830549", + "msg": "", + "ct": "", + "tag": "c6ca27d5206e523078730d33219686a7", + "result": "valid" + }, + { + "tcId": 476, + "comment": "tag collision", + "flags": [ + "TagCollision_2" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9543b8e7bacf6fd711b3c4d4e5addde14f2f6dce074c123b57e764baacda8c519d69fe0a107db73cc9d5bca65a5b96bbf80141e07c62dbc851ab6d403b83f01d49b055e44fc052beddc51a5c686265036a8871b1e745b117c72776f5aecab45f4e0219e530947b46fa85d68c67864663e720985f64f3bcdd07b1e9d691c54aaa", + "msg": "", + "ct": "", + "tag": "c6ca27d5206e523078730d33219686a7", + "result": "valid" + }, + { + "tcId": 477, + "comment": "tag collision", + "flags": [ + "TagCollision_2" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "0000000000000000000000000000000000000000000000000000000000000000d694d4c52124cbe032bff86a482dac5ac1514bc1e32575f71f0577f8c2cffe766e4d2926910e1d5b86c3e3c6028a7b52f02fed8542d4ca0e42d36ce2cb1f3f66e71b9606cf7e5cb697d5984460967ac7a029c9ac0a3eb1e7689de25b47212fe0fbdefb65fd80c7d14ddaeef4f7ab0fce710cd77444a5e07644c0bc498227ce81", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0", + "tag": "833c02816ed990c7f455a43d6a068878", + "result": "valid" + }, + { + "tcId": 478, + "comment": "tag collision", + "flags": [ + "TagCollision_2" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fd3518d1febad5fb1522c4dfd52f2e1df32ea68d85abff7fa7af35546174e85cc73a27db5cd74d3f997aabd80210a2f06628359a980a8fdbc6e196ef3d28d378355bc4045944978ab8890356b3a348d869d77e3ffaee8cfbecc78923265a3ae3faa3b2e0539f83dca626e87cce0ae4dab634362abe78e2ce43b9eda1d66830549", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0", + "tag": "833c02816ed990c7f455a43d6a068878", + "result": "valid" + }, + { + "tcId": 479, + "comment": "tag collision", + "flags": [ + "TagCollision_2" + ], + "key": "00000000000000000000000000000000", + "iv": "00000000000000000000000000000000", + "aad": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9543b8e7bacf6fd711b3c4d4e5addde14f2f6dce074c123b57e764baacda8c519d69fe0a107db73cc9d5bca65a5b96bbf80141e07c62dbc851ab6d403b83f01d49b055e44fc052beddc51a5c686265036a8871b1e745b117c72776f5aecab45f4e0219e530947b46fa85d68c67864663e720985f64f3bcdd07b1e9d691c54aaa", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0", + "tag": "833c02816ed990c7f455a43d6a068878", + "result": "valid" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/test/wycheproof/aegis256_test.json b/src/test/wycheproof/aegis256_test.json new file mode 100644 index 0000000..9b2f523 --- /dev/null +++ b/src/test/wycheproof/aegis256_test.json @@ -0,0 +1,6654 @@ +{ + "algorithm": "AEGIS256", + "schema": "aead_test_schema.json", + "generatorVersion": "0.9", + "numberOfTests": 472, + "header": [ + "Test vectors of type AeadTest test authenticated encryption with additional data.", + "The test vectors are intended for testing both encryption and decryption.", + "Test vectors with \"result\" : \"valid\" are valid encryptions.", + "Test vectors with \"result\" : \"invalid\" are using invalid parameters", + "or contain an invalid ciphertext or tag." + ], + "notes": { + "Ktv": { + "bugType": "BASIC", + "description": "Known test vector." + }, + "ModifiedTag": { + "bugType": "AUTH_BYPASS", + "description": "The test vector contains a ciphertext with a modified tag. The test vector was obtained by manipulating a valid ciphertext. The purpose of the test is to check whether the verification fully checks the tag.", + "effect": "Failing to fully verify a tag reduces the security level of an encryption." + }, + "OldVersion": { + "bugType": "LEGACY", + "description": "This is a test vector from https://eprint.iacr.org/2013/695.pdf. The test vector contains a tag that was computed with only 6 instead of 7 rounds in finalize." + }, + "Pseudorandom": { + "bugType": "FUNCTIONALITY", + "description": "The test vector contains pseudorandomly generated inputs. The goal of the test vector is to check the correctness of the implementation for various sizes of the input parameters. Some libraries do not support all the parameter sizes. " + }, + "TagCollision_1": { + "bugType": "BASIC", + "description": "The test vector contains a ciphertext with the same tag as another vector, but different plaintext and ciphertext." + } + }, + "testGroups": [ + { + "type": "AeadTest", + "keySize": 256, + "ivSize": 256, + "tagSize": 128, + "tests": [ + { + "tcId": 1, + "comment": "https://eprint.iacr.org/2013/695.pdf", + "flags": [ + "OldVersion" + ], + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "iv": "0000000000000000000000000000000000000000000000000000000000000000", + "aad": "", + "msg": "00000000000000000000000000000000", + "ct": "b98f03a947807713d75a4fff9fc277a6", + "tag": "a008acb1d372d73932ec5e6df9aca70a", + "result": "invalid" + }, + { + "tcId": 2, + "comment": "https://eprint.iacr.org/2013/695.pdf", + "flags": [ + "OldVersion" + ], + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "iv": "0000000000000000000000000000000000000000000000000000000000000000", + "aad": "00000000000000000000000000000000", + "msg": "00000000000000000000000000000000", + "ct": "b286705e6ccf368974ade9ff5550a4c5", + "tag": "367f3f14897b31c6a66eb7b540eccc8b", + "result": "invalid" + }, + { + "tcId": 3, + "comment": "https://eprint.iacr.org/2013/695.pdf", + "flags": [ + "OldVersion" + ], + "key": "0001000000000000000000000000000000000000000000000000000000000000", + "iv": "0000020000000000000000000000000000000000000000000000000000000000", + "aad": "00010203", + "msg": "00000000000000000000000000000000", + "ct": "1f452a22fc07f2471ab4345d7ab121b1", + "tag": "0d80d9c73cd4b8b3422b66cdaa45ae8a", + "result": "invalid" + }, + { + "tcId": 4, + "comment": "https://eprint.iacr.org/2013/695.pdf", + "flags": [ + "OldVersion" + ], + "key": "1001000000000000000000000000000000000000000000000000000000000000", + "iv": "1000020000000000000000000000000000000000000000000000000000000000", + "aad": "0001020304050607", + "msg": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "ct": "f373079ed84b2709faee373584585d60accd191db310ef5d8b11833df9dec711", + "tag": "787347bc96d3d0fdb33ddc8ee5ef4924", + "result": "invalid" + }, + { + "tcId": 5, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "iv": "0000000000000000000000000000000000000000000000000000000000000000", + "aad": "", + "msg": "00000000000000000000000000000000", + "ct": "b98f03a947807713d75a4fff9fc277a6", + "tag": "478f3b50dc478ef7d5cf2d0f7cc13180", + "result": "valid" + }, + { + "tcId": 6, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "iv": "0000000000000000000000000000000000000000000000000000000000000000", + "aad": "00000000000000000000000000000000", + "msg": "00000000000000000000000000000000", + "ct": "b286705e6ccf368974ade9ff5550a4c5", + "tag": "fdeb4a822f3ddd1fd4159e1db11a4c6b", + "result": "valid" + }, + { + "tcId": 7, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "0001000000000000000000000000000000000000000000000000000000000000", + "iv": "0000020000000000000000000000000000000000000000000000000000000000", + "aad": "00010203", + "msg": "00000000000000000000000000000000", + "ct": "1f452a22fc07f2471ab4345d7ab121b1", + "tag": "065a9af5cc2fd9fee11280a51e37fdcc", + "result": "valid" + }, + { + "tcId": 8, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "1001000000000000000000000000000000000000000000000000000000000000", + "iv": "1000020000000000000000000000000000000000000000000000000000000000", + "aad": "0001020304050607", + "msg": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "ct": "f373079ed84b2709faee373584585d60accd191db310ef5d8b11833df9dec711", + "tag": "8d86f91ee606e9ff26a01b64ccbdd91d", + "result": "valid" + }, + { + "tcId": 9, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "iv": "0000000000000000000000000000000000000000000000000000000000000000", + "aad": "", + "msg": "", + "ct": "", + "tag": "f7a0878f68bd083e8065354071fc27c3", + "result": "valid" + }, + { + "tcId": 10, + "comment": "", + "flags": [ + "Ktv" + ], + "key": "1001000000000000000000000000000000000000000000000000000000000000", + "iv": "1000020000000000000000000000000000000000000000000000000000000000", + "aad": "0001020304050607", + "msg": "000102030405060708090a0b0c0d", + "ct": "f373079ed84b2709faee37358458", + "tag": "c60b9c2d33ceb058f96e6dd03c215652", + "result": "valid" + }, + { + "tcId": 11, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cc6657fd5f0014430cd8a2afa1b1270094c29427d5fbc0b0a2cfc0e87c83ba89", + "iv": "c0b1fdebffb7f2e277ffb88c0fa369b65f29c78d55e2cc258705a7e2440cb0b5", + "aad": "", + "msg": "", + "ct": "", + "tag": "5f9302932f6af3a489a6fcca836a9d4d", + "result": "valid" + }, + { + "tcId": 12, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b1336707a426d43755b503b69e0056bd99d169b991c2def3257921af839e2ddf", + "iv": "967304567c8309a58e259eb2141e076710f39dc65c2c0106ec20a60fd329a8f5", + "aad": "", + "msg": "45", + "ct": "fd", + "tag": "684e6dc775e429c59ca141a094087e63", + "result": "valid" + }, + { + "tcId": 13, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2b65da4d22e88317fe0d8c5c6198aadf6ccf17ee369f8dd2f0eeb129ac624cdb", + "iv": "69493a88893bc2c5fd6dda80988d244dafad94ea2d0e9e2bc6931fb2caff44be", + "aad": "", + "msg": "c83e", + "ct": "fce3", + "tag": "8f8d18ee473746e61bb8ff65ff8bea2b", + "result": "valid" + }, + { + "tcId": 14, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a8688eda6fca1f9e061dc9503bb0dd01316a6bda667618fa8ec6a21df06db431", + "iv": "fae7bf07fe8a6e343b2220108a6d52e61487aea62cb96cdf46108c1ae9f52aa8", + "aad": "", + "msg": "ee41fa", + "ct": "269c09", + "tag": "e888bde2d519b8a5b096fb3b19454700", + "result": "valid" + }, + { + "tcId": 15, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "64be0293c47b5f5db4c2ac29280b207cd343394ececb24b57bd8957dc952cc20", + "iv": "71277f82787ecbe27889d0a7c43048b504708a9a3d6abbe9a999a0f8638b9ce9", + "aad": "", + "msg": "9cdd19e2", + "ct": "d03c953f", + "tag": "39284c719da05d71aacb933c0e65634a", + "result": "valid" + }, + { + "tcId": 16, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b3de4c30ec4a098e3c9ffa0ab16e14dde6a27efbaf1fd3941c2ad20ae41a2fb7", + "iv": "31bfb1ca8df96a889ce286550e04227c65172eda139100eaace350a4eb88d051", + "aad": "", + "msg": "88b416974c", + "ct": "d4cb62f3f5", + "tag": "fb8d0aa5e65197c1b1919567e5c9b5d4", + "result": "valid" + }, + { + "tcId": 17, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1c009a156013c649ba9bbc4eea02e7978ae28eea59a89675767d178f88593c08", + "iv": "d4eb8679539a2c4b4ff69d52321fed18cd85735a554456dc9cbae916187302ff", + "aad": "", + "msg": "b88e11631066", + "ct": "2f82f8c0b0ab", + "tag": "8ab9fd0ad85e0bc63c300fbe7929d4d4", + "result": "valid" + }, + { + "tcId": 18, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "39d6df97fc89838297c6f3e60ebb0318a7243ae5a392ee36a6963155ed4e9246", + "iv": "2dd2ffc3b67913e9365d531bb7e0d052a8fdf6e1db7729b785f87c39a79e7b89", + "aad": "", + "msg": "db52a67880de53", + "ct": "c599e2248adbe6", + "tag": "5ca9af6e8d2afa9f496e185190aeb599", + "result": "valid" + }, + { + "tcId": 19, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "13a2d8c246198cd6a3ed9f5813e33d18ff998e13c23b4bb53b1f5bac41890282", + "iv": "afc91c1cc48e29bb8ebd47e30513ed51a9b40fe8404bd04ece456221dbeb4c54", + "aad": "", + "msg": "afe014240f6383d9", + "ct": "5c4442ad1ebad45c", + "tag": "0e9179d97789272ac6d9a6482d8a8a3d", + "result": "valid" + }, + { + "tcId": 20, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "aea4d3059b75103d8b6d663bb9af3410602bd9a42f4d5db385659194450feaf6", + "iv": "263142429a3bc9a0e97457ba21d8678ae5c477e8aab3ec85ea21d4b83fdec799", + "aad": "", + "msg": "2d85aa762b939b2f78", + "ct": "873fbd5d02e4f15a72", + "tag": "ac741b87c0f1da2cf3dd41a7035cc4f6", + "result": "valid" + }, + { + "tcId": 21, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4333d1f986461fa4d69123b2ef87adf900959bb4e458dcd5ed5446552b6885fa", + "iv": "598b6466e3248fa37a61347c260985965690073f5eab6a2300efd37280d7f997", + "aad": "", + "msg": "e82a46abadaaa28d669e", + "ct": "a553bf0d091456c4bc27", + "tag": "8b912708d27a9c38a16f942bf9b75de6", + "result": "valid" + }, + { + "tcId": 22, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e449c1153100263e4f243409cc498035ad9b7a94dbcb91cd4234fdec307dc921", + "iv": "54a76b720018533bb8dd833d7d030dfc8ec0ee717e701da4f28db4c3b6f8d145", + "aad": "", + "msg": "83d555fa74775c3371274b", + "ct": "54b03ac2cd39cbe99fff06", + "tag": "deebd6fc145b097a669b85163be80c79", + "result": "valid" + }, + { + "tcId": 23, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ee4171917d2337496812a2784d6a71300e6b8c1ac3b1ef58cee77c229aeaf2c5", + "iv": "e826a79361f9d582b64450e3edc82589487853d5b22feaa0c889875bd0d87cd4", + "aad": "", + "msg": "94d2f8697facaaa191ba617a", + "ct": "b80d19775104f5cb626a2fdf", + "tag": "c6bd5e50901d8ab9f31c0bcae3587aaa", + "result": "valid" + }, + { + "tcId": 24, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d40dd91fc2a5baf26e28772aa0cf9dc29e55b0f7dc94e438b67ee25c366b19fa", + "iv": "c6a75d3d9d12023d1a5034b14f154cfe3fff5ca826ce9c2e5013e25957961cf3", + "aad": "", + "msg": "34b64f66f98aa37be490136cce", + "ct": "53a79e75135d857a06b734abaa", + "tag": "aa835895e34628f02693c3097a9e6b58", + "result": "valid" + }, + { + "tcId": 25, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0615c046395787f642d83089a506c805d8b7a5bc426500859572b14229d94cdf", + "iv": "b2cb34d3b1acd5a44950c3d66f372e81e3dc36b9324662927d7960207cca8a33", + "aad": "", + "msg": "88d44abb6b2043f9862e79da7903", + "ct": "d627016d08d448f8f889ba0a0605", + "tag": "6f19cc5cb080d4b11f7e00d7a9984cb3", + "result": "valid" + }, + { + "tcId": 26, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dfdbe0ad5be9823963239f9f4dd9f364002a62a7e7648f47b1a33cd296586d74", + "iv": "9881cffdbed3316b2460e80f794bc8b68e5d98c207ac8750813d9a537c21a335", + "aad": "", + "msg": "2fb7993e304a4875316978a70151c8", + "ct": "ea33bd94569bb8d9b8c97ce5524ae6", + "tag": "6a067c556b79f7c64ca6d4b1593fc665", + "result": "valid" + }, + { + "tcId": 27, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "aa5429fd3f178b3885f2c696975e88890102455b5d9e42766429e80d4889672a", + "iv": "e1ed38af5753851b79175e4ae11fd6cf80033f81aec484ecd0448c5e7cc0a27e", + "aad": "", + "msg": "7aa8919ebb950f34690acb98651854cb", + "ct": "5c8f1af7c12997873056004cb403c9d2", + "tag": "43b93cc3a9e6ddbeb18ba8bead2ab28f", + "result": "valid" + }, + { + "tcId": 28, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4248496c86ea6e4e0c12b933e4572de9be5b440503b62030153365abed42bc69", + "iv": "d1c0c2d7457ab6d940eb910b39d101ae5e0a7a83acf7c90dead42357ac24a5f9", + "aad": "", + "msg": "da270cc998cc602eeafe17d513bc71abc4", + "ct": "61ab71fa8c28d748192b698ebb37997dd2", + "tag": "0829d170b7106834ace8516d870cd295", + "result": "valid" + }, + { + "tcId": 29, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ea9a8d0b7d1f51daf324a17d0966c0028c79c45c95b0a41a27b156936b3d3727", + "iv": "3b06ea6fd869afe98dbbbeaa4778dbba7cd736e21efe53c6656e3b161be52c7b", + "aad": "", + "msg": "b56f9db74c89a31114a868aeeed04fa96eb9", + "ct": "f7d2112fd12f86128d38d0f944268f414a79", + "tag": "cecb0f38354e7d904b38083e5465cdf4", + "result": "valid" + }, + { + "tcId": 30, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b8ca0e8e52406c0aa443ab52c06bc4ca0bc97b400d8bf8c35353af48266ae358", + "iv": "3eb0bba40be94c2ad95b02cd37a5ec416bc1e7a013ae6b92b3325b4a80d0853c", + "aad": "", + "msg": "c49d580e4de1e0b580ae37059511bb60fa1baf", + "ct": "90be5d2760c38972b61ddcc19de11ba7da7852", + "tag": "a8fa3c2b9deaae167d9035a52323a8ee", + "result": "valid" + }, + { + "tcId": 31, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bc706ed02cfc0405444bd7785978e7be125bdc1876b4d53bf3dc75c9e3d3473e", + "iv": "87581945f46ee4fe30d163bb0ade51bb485e578ec4de8b043f8a9cb45a3e3ed5", + "aad": "", + "msg": "a617aacc441cb3c18e852aea46332d870bca6e48", + "ct": "ccbbe9cbce7f8fd30eeb6bb081b19bd03a79aebe", + "tag": "16969049e9b7944b407b1ab8a8a88628", + "result": "valid" + }, + { + "tcId": 32, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c7f9c1e03adab533d2e2520eb49dcb4afab2c83b494e17e7c00fe241be966e6d", + "iv": "90bf6c508ee75a7d870cce8a584f139e36fe4f0e0c6d5dfba396becf4fb9cd53", + "aad": "", + "msg": "ade1ca34c4100cd392c352416b5ac4df1ec1d8170d", + "ct": "8e0e4a17e30b53f13266278b785e19111d6fd36796", + "tag": "cab58fa19cee88d673d76aab874f85a1", + "result": "valid" + }, + { + "tcId": 33, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c8134cda02f603b53daaab2ca9a575ce4d9b6411a10d21a533ed2cf6187c7649", + "iv": "21e37934e57c6a4501ade356225e72d4715205383ce3d4d92ee1d98f763f1dbd", + "aad": "", + "msg": "6f48478470a9b519c5ddbfa31c75b3ef0f912b9f2211", + "ct": "63be5057ef1f92f2488489c8f362e1614ff6c62d5967", + "tag": "e146f0449b62581528dff914ffff8bb0", + "result": "valid" + }, + { + "tcId": 34, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "11fec755250087303f694ccbc1d7d9d6045b7b126d0e9ef768ee242fc89e58dd", + "iv": "75d18dbca71ed1dc67a2dce1f981349947c3ae68f17e1bafb314bfa6c65045bd", + "aad": "", + "msg": "0617cfd4820bcc4a286d501373e294e023e82a9ca399d7", + "ct": "3e849bf51d5e0f6855330bf7d853507844c9bbd9a65866", + "tag": "795877aaae0c0f1adfea110e46cc8bac", + "result": "valid" + }, + { + "tcId": 35, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7a52c2b6ede52ba6d873263ef42655c24fcd2c4bb6660024463417aa343b8eb9", + "iv": "8bea66fbca5076afd7d41b2cf4999b5da124338601ff9d909220402b1d60fdff", + "aad": "", + "msg": "8997cde2096d24c4afd4d68fa5bf545f361c7ee7237e026f", + "ct": "8cd20030adaf830392f3aa3ee32489de0bbae56eaefae005", + "tag": "96db6875a2bf9d76515c39f5bbff065e", + "result": "valid" + }, + { + "tcId": 36, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e0613ec8a652a40291709b8cf2a09a54bac7e5ca1ec27307dc0b28b41dcedd92", + "iv": "991994417b809b7ce55a4dd81fdad73334d7123e4ea8e8f8eedef9687774a0a3", + "aad": "", + "msg": "fae03f24077056887b0be4f8d9b7d3a646f4e3935fabea6f35", + "ct": "f98121bed27db96a5f6bced9c731f5f4b7ece686461bc6e743", + "tag": "fe7c3a017e86746481b910734e68894f", + "result": "valid" + }, + { + "tcId": 37, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7d48ab97b65f6e1b9b8f5ed2e9ad19b099b90fdb992ae8577ca9ff79b3a0e2ca", + "iv": "d62fa8fab24248816bfe81ce55c0e991b362fc4913d10220061476e0a489514c", + "aad": "", + "msg": "46d00eb0533e2172eb81316b6e17438be42d6039c31466ca71cf", + "ct": "525b51961222500da8235a175ebbec64579b906733d32dc61680", + "tag": "02f33d53e0b6005b4275e0e6d66d0f06", + "result": "valid" + }, + { + "tcId": 38, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "60dea9f5639801a65a574fe3cdb803a20559ba30e22ddd27727621d60aff8e2e", + "iv": "67e460623e491800f29711d848c6afab7bf8ed558c46a8ec9342a9f3aad134b5", + "aad": "", + "msg": "49cfc182d3781f11cea5bce55eb1326bf972a2534cd5aff2c9d68a", + "ct": "85d770b346d9bb61498fa5b4391c122f46fb3afa4a92ec268d3eb4", + "tag": "f47a384a1cb935614ced948a274f6019", + "result": "valid" + }, + { + "tcId": 39, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "eb90e786a1de316e1cfa253422dbb1c4cd1cd0f711d05fcb45eb173cf0c11910", + "iv": "8db6aae6ec75035ea5ad5ec37c1f96ea1eda4007b5349c91b8746edf1a8e48cc", + "aad": "", + "msg": "74d6c81193af9f7bebbffca16e92b2573ac2b89f0a8cadd96bf3da28", + "ct": "1f3603e28dc9c0da297f5449aba599e930700e1bf7d73a780a3f80d8", + "tag": "13576a5d958b30d80ded8ac24c1145eb", + "result": "valid" + }, + { + "tcId": 40, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "22042b270ca2a6c054eceba6f7715f04ecea27fd0b202fbb66023de79c52fbe4", + "iv": "2076f6b00d155a9e66a7aecf07969aed8b396cbbad77841a6ee09d4e9fcbb438", + "aad": "", + "msg": "b8f0d60c07dad905aa972f4e93ac8bdfbb310d1c775e89dc4ecb065eb8", + "ct": "695190e6d9f5df4997b5f2aea68b0c2d085bef6f2326ba98245a82886e", + "tag": "24d4c15e39ec69e25c593b4baee3c8fa", + "result": "valid" + }, + { + "tcId": 41, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5431d28adda0ffad28ed5cd65ff37548f3bd042741b6e4ed55a224fbbb5ca6f7", + "iv": "948277af82a34d86112b51cfcabedcb1794d12cf4633fe0a1362ffa6c96ae775", + "aad": "", + "msg": "35735b6a9c0bfe8c3d77ab14368aea0bee0e9eeffb551c6f56c555c33c36", + "ct": "211db5946b4796f1adb0f35f76c3337188feb2dd7d4822176d458f728e02", + "tag": "43aeaa135bece6e469ee674045839738", + "result": "valid" + }, + { + "tcId": 42, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d2412f11fb6e76f746a87c3725f28fcd5db53017cbdaf23758a1fa6ce49c9375", + "iv": "01ecd22c6b276cbfaaf48417e04c65fa4fc10a2096b5f40441deb2f106f40140", + "aad": "", + "msg": "cf9ac2cf147c213bd24e6dab49f441ba0049d65a9eb93892b06fe0852ac8c0", + "ct": "4092d6589476b2a3ef5865f5e75aa74f9e1146e6a1269744dcb2f64af7a0bf", + "tag": "2f01725ec98d41badfb9a7d86914bf5e", + "result": "valid" + }, + { + "tcId": 43, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0e1689ce08a40e2ff93cd490793a22ca931c3cb05fda8e56b32a211525ca9cb6", + "iv": "e82abf57dce426592568e33ff31114f56a08684ac297125dd2e80ad4790779a9", + "aad": "", + "msg": "90e8a0a4d3149f2131c0d686a617e8778331aa9222c19c158f3aaa173fe1ae6b", + "ct": "c6bb611909a4d860d384e831bd047161e555a4864a36371783fd3b71d56b8b39", + "tag": "3f484cc57cdde31424ec548db0448aa6", + "result": "valid" + }, + { + "tcId": 44, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "786d80f3d15421f248dfc099fd62245ffbfa1ed83b38f07e534e63a0df27ddfc", + "iv": "82f73bfa6c3ed27f65d2ceb7b25d8c6d6c37d46f8cfd27ffa25646e12277368a", + "aad": "", + "msg": "f0b98e259998532f002e01e225506987400b941620b19df462d1fde3fcad11814f", + "ct": "f03ece79fb391b00369e9ee05fc1da452463fe82e67221677f73a06509207939c6", + "tag": "b64e125d040d109694de19d23f649283", + "result": "valid" + }, + { + "tcId": 45, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "102683bf80a8e6ba600726805d8c28eb6c32e383053d376b81819512f738661c", + "iv": "df55cb6cba92a35617f5a7a0d96570de075ef4904ce64796bbeb5f8341db7d83", + "aad": "", + "msg": "7ab63212edc1786c5519366a7e1c53069b97e1f1cf882c3b55db67f6c14a53dca957", + "ct": "d78b1b2ae6dd5d6cf2b7c95f589c43baf1ee10d3e579f6aacba33b53530ddfb875c9", + "tag": "bdebc4b6cf1a3083cc3c8753d3b09cbc", + "result": "valid" + }, + { + "tcId": 46, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e40ae0e8419ebc6a3aa67f7b70e18e8a1733c70fcd2e9d60c0f1db784cbaeedb", + "iv": "afcfd0103e8f9e8deb953d00f944feeb2bb8297c1e080f6821f17c7f1655ebae", + "aad": "", + "msg": "bc0a0fd548e31b0dbbc8e90f2ec847a55f442aaeef26ed62d35adb0edc4449d2d2de61", + "ct": "47eab239c5599c0003625ea72f3e9f6d370eda954ed913073ebd98c3cb72055a513189", + "tag": "9fa4f57168a021cfeb124b3d2e030363", + "result": "valid" + }, + { + "tcId": 47, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9cef79e6825233190d2d890ff742a0365e07e7a945850beed7f466da5e83b564", + "iv": "1bc94232aec8bad7c0529ec25c652cb97c231d4f22bcbbd1eea57ed15022d2cf", + "aad": "", + "msg": "d4296953764f83c78678d802a0fbfcfdbce2f74445e4ae260d2d3b7560064950e13acb5c", + "ct": "6ea2a4848c39ba8053f1d5cb79e87541b8fa46e8d24858cfd157ac1c4cf831e1b4fc313c", + "tag": "547cba417d57251f9c70d596704d40f2", + "result": "valid" + }, + { + "tcId": 48, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "19ccb4add32f729f2411a593fecf4c99e2a789c1531a8263dd2493fab004af07", + "iv": "510dd4ffe333224234300562fe02f4d38f61682fce03dc55609f7e90cbd4ff95", + "aad": "", + "msg": "1a1f80fe2df06d17676dbf1d291480136655323562dd61322a283252af0f95a42f71b044af", + "ct": "4afac7ce6f9bb02b64cadfa230d764f2549085576ad6fc0a7d7e6ba46d090da57eabff9de1", + "tag": "d8cbec02a96485c01b8404f5ba81f85f", + "result": "valid" + }, + { + "tcId": 49, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "39bf5512622e819a3123c6d9d580b6e9f765407554e82007f1f26815f11fe9d2", + "iv": "18a06de1f345865c7ab50014f6229455a1de8eae981071506d44d96a889c6aa9", + "aad": "", + "msg": "97b9dd9702807d69f89437ee4fdfc9e33c9252bb6b5f06367c2c8e2a8f21d3a0054308fff624", + "ct": "09ca710c172cc8bd2023f0a7fa34d4fffe0a0951c39514eb3ba43f76c3dc2a5fd6b63fa57ab7", + "tag": "cfb37bbedac64c3cd912192218f1b71e", + "result": "valid" + }, + { + "tcId": 50, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "77a765f8d164de88880794776bd7cedd14bbe2526b623d5ce9c1ad1cc804a3d2", + "iv": "3a03fdb72860cdb4648c2c5124ed7b704393ec99d757b920bb422f6cc61cb4ff", + "aad": "", + "msg": "f67d3378b072c0d8f03055a3e19564d6bb4e33b42bd32785b7a76589478b94870197979563ef0c", + "ct": "5f0d027f0874faa3cebf55aaa2ec03a20b8796c51dea0daf66f6e9e19395fade66bbb8b16e93c0", + "tag": "8662382965cca78a0a59b60a512988df", + "result": "valid" + }, + { + "tcId": 51, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c576d5d03ee5ceda8ccc6265fc0b829faebaf1ee6a66d5b0a9597acb35e1f394", + "iv": "067a114219d4661d10d755a714860e2aab85fe2e42a0dc007165d21ee62de9fd", + "aad": "", + "msg": "ed7a8c9978bdecc512a0d9354c653f5cba5a5f1ee876fecc1ae1c5ee87e332e38dabe391631d76a3", + "ct": "23a231656244697ce6be1fe0c71b306710d2fe8a848ad7e1acf292e0f30a200550fe19419b8fbc08", + "tag": "63ec16d14a9707320d3001da16076fa9", + "result": "valid" + }, + { + "tcId": 52, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "08cff3fb8dd3ff645b475adf799974c6cff9b03f32f4c6e87f7b81f6023798ad", + "iv": "fd47686b9a6392126a8f6b5e0c2d2ce658b4ca50d89fdc0e63eb0c6919cb343b", + "aad": "", + "msg": "568e4c98bbc9d0dd194fcafd2bd7f12672e13a3105727bdb9e14347e7d3be079872f1fc0f7b66dc8f8", + "ct": "837c440bb6f0f5f5d4f644883dccdf7d2b23c1bb856380423ac8ce9bfb9d55fb7f4d77908f2137c0fa", + "tag": "149aa82a95c53f652115edd99330d8bf", + "result": "valid" + }, + { + "tcId": 53, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ec1f16c94b6ab78205a7164088df673632f873179e8961eae350f4907c43ee01", + "iv": "70e14fba11ea4893f2b75286f2d1e7b5909ccdb3de1730f29c0e25102c21ec0e", + "aad": "", + "msg": "bff27a6b20d6f0f97e07436b9260c268e169bf49d64ccc569b4d02336441425b84b0ce255b47c839da6e", + "ct": "6b6d9610753b989f6bfaec2046f05bf6b1fd4fd139ad27cfa2904f804b988cf5a86d020a5b68e0ddd387", + "tag": "b47c40cc3b98eb19cbeee280976ba643", + "result": "valid" + }, + { + "tcId": 54, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6c0a28212298e0ef204673a26574c10e354e5bb25354236d17f5684c89d917f2", + "iv": "71d2a5d266df71edc447c20f3b478bafb76e6263f719a2a41741d6ec12da4b94", + "aad": "", + "msg": "fa1422438dfe854700c15388d852c9c39a13257a865039411a530ff8b9add56d1d6224e05e97b41e3570b1", + "ct": "d07248984411a1b417659964e88d5f47a1e4582adf09d562ada36e352e03de9fb119cc6a6d5ecab3e692a9", + "tag": "7386f218e7d1980b24422e582c14aaab", + "result": "valid" + }, + { + "tcId": 55, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "059ea04eebeaffd04f40b4bb6a005b79a4f95a6999beb0caf509db069c2970e4", + "iv": "165d1c32b3c7d748de074916e17a0aefee379cb1275cfef5324be4078f8ce670", + "aad": "", + "msg": "2437f7a9fe0cb755550d289aa5841a630ea95e92c8f6e0e8ad600008e7fc3a528b4f8a899b7a0bd36f4dc41c", + "ct": "e6106f086bbc303d0847db83f8ffc084bb5a390dafdb634e0741e05d2f90f57afef62e3e49eee7e3b3de7598", + "tag": "af968c70584092814a06250ee0a468f7", + "result": "valid" + }, + { + "tcId": 56, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a6111d3bc0b2ff329c4fdd41ad62719391c72853d5ad437cd2e81fad1be5915b", + "iv": "2093a1d900f23456475a22d040f8ee9b73f5064b3b8dad8caf092bddcd9503e4", + "aad": "", + "msg": "58399e6d5568c88a4e8914ccb58af5fcb7d91bc12939bc376e5a01fb217e6a7f3feefba7208378f119979971f7", + "ct": "d89d4c15fae3b7ff140402274e3cd104f053adca1986a693c51b5f422a414ee6c54b84abc5f9d8b16b02821a4b", + "tag": "a84ba7eefbe14bcd9f2acfb4e8165980", + "result": "valid" + }, + { + "tcId": 57, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "170173ec7d0ea706d51ad4295a84a74c8f48190a1c2e03f5e5882e7e865c6884", + "iv": "0ffee875fa186c48b110596e91fcc559a136ade9d42aa8230e2fce7e19cfdffc", + "aad": "", + "msg": "d1851168c0c7cecf7c252e8707bc4da4e472388714d22522a95cea841155a54ad3eefc28047f4b9cd6cf9819ccd0", + "ct": "d736a5019bfd2547ecc203ee7aa43c5005a0570fc02af32bb0d5385854f331b31f9e9fc888e2ff7208d61fe670b2", + "tag": "1c35c6f5c214f55638acf48ee6e3c660", + "result": "valid" + }, + { + "tcId": 58, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cee7fc038d8b87bef09ab9d9f78da476020d211cc71dde5f5e88a6af259d7598", + "iv": "73c0e01d0adf4d2db5163b96ec67d1215d78e222a9e424e6d944f06b86266fab", + "aad": "", + "msg": "155ad7bf00dbcf3daad76fbe60436f5c1b12f0cd811fcf5bfd4e8691f57bad93b35b8a692451fccbaacb377b19d953", + "ct": "b9e1c94087db0437a37c8fc3ddb705c00fd04278816f27ed8522906f352c5d71af03ad3c4efaf5ea75a7ce3079f23a", + "tag": "87843f351f2a2d40b2648cedf7095071", + "result": "valid" + }, + { + "tcId": 59, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d0314b44ba0de03198a07a3c515557223cc586efb7bbb8221f896ef10169f7a8", + "iv": "79a697e790f9b5b4f7bef71e73a68b530feb6aec7600a774935215060d1e4b06", + "aad": "", + "msg": "4f9756da2ee4dc423239d68ca5fd2a30157f75501745e6bcb39c415c93fd829383fd61b2442be34673c958eb9287fcaa", + "ct": "5c720fd442dbb80c4decbd1122db32a2babce4acbd2ea4a0c772ad5bbb609da4f47e1c0779f20f6ffb6a60da43a0a4eb", + "tag": "90843c17395993147fd699aab2b9d572", + "result": "valid" + }, + { + "tcId": 60, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "99bad0ca5bf16c23960b064fb2feaba92a95f4bf96148890ebdcaedef0c6d23b", + "iv": "dbe0450eaef487d3879c04440108a8595aedd55646c5639f361d8b8460ac4a67", + "aad": "", + "msg": "07bc8b49ccb70290a1c3d91f3bc48fcf067fadc70e619bb9ebb1a8fba05670d2dcdbdea436b5a21cf07c3b04e0317d1118", + "ct": "6838370b3a97414a7aec7083ab25b1822c4e33e62d7611e99ec376fabb385ef795da6fe1485f773e0f844c948a9f758194", + "tag": "254129f9e15e6bf5a749f3ac15acbeaf", + "result": "valid" + }, + { + "tcId": 61, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b9489cd707feb0c4f4f459b383451d0e70d74175a68561e7ed467c3d91d4b490", + "iv": "007f3426a8620b4a4b9b0cdecd946675bea089e4982ed5f7d9895846231a721b", + "aad": "", + "msg": "50f03a1c1cbadc2a994d53e2afa0d438a305d93564fef65639151165b50f5e1522833ebd4603b8727c37334c19f658f6f910", + "ct": "ef7e0645a58109bd5da6f3bd58a67d8e41e832e2673849e0c73c18fe0e8cd80d2bfd71736f652535070e17d1e05b877d2e2d", + "tag": "52c5f78eec35cfb0a791d40e98ac21c9", + "result": "valid" + }, + { + "tcId": 62, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f1e7b661b8da935f82f143285cdda6cec2dade47d4a41fda5621be7f33b2540d", + "iv": "97abedb4414a2e37feb57a5e52a25014ce01bf9b0d2175af374f0102ff49254e", + "aad": "", + "msg": "3e1d4b87eee34d0438081e7194876bf5738b4aea1dd7966e27b9573dfe7bfe4d4af0afc8b06d23ea2169c454e403b9d61a9e1c", + "ct": "4755e8c535b53ae296402d6de59784dc80f95426147d33ac500ebe83e60fa61a5bcdf8d6ef08c076a062fea06a299880d0ea3c", + "tag": "3fb0a5cf9fa5766b78929303d2dc5915", + "result": "valid" + }, + { + "tcId": 63, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "eb4d1ff42e314352954acecfb147b88e01402cf56c5fd415b2930056c8ded473", + "iv": "e062f6ee053cbbf50b6b82087454c30cc0b12d763e501909a2955f0c84d33190", + "aad": "", + "msg": "501339d7fef1dee47ce9b605980ac706116877a5220fcdbbc5ddbe380e968ef003e955cc2a82d74d39ab1f9af5c1a7a360159ad7", + "ct": "7710b66619c6422fc65be3dfb9a41d4ac6ce5ec618be74c11c3836072ff26ce978d06e8a94782cf5c71f7c34193d5a5caa98bae8", + "tag": "61c068f0040a6636b1f0bb1c220cbadb", + "result": "valid" + }, + { + "tcId": 64, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a4d4135f6931f562df05270f04791b4aa3ad6a5d83a4e9ff0e49186eb7cf97af", + "iv": "f0873c0776ccc52a2cae902944f440fb2507b7a74c117b32a89b0777db2d2127", + "aad": "", + "msg": "84814fcff9da79889096e0e62c9c6082f3a3e74a2c737e4b50e43a70807e776bbfc174093db425367037ae218f0519cb9eb78c7e16", + "ct": "3a6d572f5045968576afeec5bac25d26ea029a4a8f08c33699dfb131fe48e7185e1970c55c8e4efc1096fe7a16885eb04f97231042", + "tag": "7077e3a44ebd109dd6638740600034cf", + "result": "valid" + }, + { + "tcId": 65, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9600d378abe1aea55aa475e8817df1ff54004296c033938c6ae5f7e971976ed3", + "iv": "b25ee13a9590d492ff8798fa6b3ec4fe7bdceb5c97263cd5b6aa05328d888620", + "aad": "", + "msg": "61b4d3b9dfae824422a6c473638c3b7b34e71f077591dcbff2b5c6033d92b132a05c86d1ee203d18d8d9a8bff8dda053a068ee934e50", + "ct": "171d4b5f03ba5c7bf0834a497ebb264b49a85ee6fbd168cb14c30911ea0fca21de936c31acbe0321b42e2bc05f098320bdbb21001718", + "tag": "804e6e01e2c0a79ae6719a15f52151ee", + "result": "valid" + }, + { + "tcId": 66, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "653d41543c8eb91e25c7affa0dca6388b84f96304df08c86da2a134cbcb8b3bf", + "iv": "17ce792d02b8318bf6ff7c8ce52c1190d6aea913778261f013729f2c1982e70d", + "aad": "", + "msg": "3c8a2d67e2cb8c19a90049aead360bc8a8bcc7c7e6de60a57d3f6c5fcb2612d7bbc2b07b97652bba455310ea33deba89e1e6d2577b7b37", + "ct": "ae7d464d8d29cf0925c44281ad68ae9f97c30328942da3d780f7457ea128c3ac70e07c2b2ee3d249b60b6caf04eff08fb67efd2b085644", + "tag": "49f6707d7894db24728c0fd058a1d16a", + "result": "valid" + }, + { + "tcId": 67, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ff95a15083419826e001cd8b0f642d8281b76422631acbed8258058091d68cc4", + "iv": "95f6b74beb34ab2d7763a34e14a5b542c1ba8a14fdc0b2042f0fd265c515cf91", + "aad": "", + "msg": "cfeff4ad884c6eda113ecb3a6328455c3ce92ebd6cd07af53d5a89e892a9c804cc0b0846d691b398cc28a10c212626d27f4fee8bf1d74115", + "ct": "6adeba9abdf2bd1fec1a6beedbc23b0b859b171556af49e84c2e10d69e9eb7b487c2bcb7d786448afae5d07510d7cb58deae2ebf3755b01b", + "tag": "f62a3372936dfc68c16ce8fe195ba0a7", + "result": "valid" + }, + { + "tcId": 68, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b4b63bc3d343e8e55f8f49082d42675a696427c24e5a0637fd8517e1d06e01e7", + "iv": "8d9696473a1b955654d1e3d8ad4b9e9870222e85fec4d3423b1528010eea4c79", + "aad": "", + "msg": "c0b7a5a8a2c555ca86d6129359297302f67137474d118f82457778502202b5649cc58b52de3c4c5279265bf93ca7cd97b0112654b4d15140ca", + "ct": "7461042777615830130ccd15b9f3dae1185e56ddab98e7c65faffcd5ea403ae0e579afc22f14077f9be0309a812ef6c42d28b2fd9b2720317b", + "tag": "fb3fbcb125519291011a4d1a71e599c1", + "result": "valid" + }, + { + "tcId": 69, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1143ae6e77b8c91c8e54072b4f0fc6c604611eaf2c07395816b67b77695e9361", + "iv": "3843735fd86094225d60bc3cb3862955166f6d553466aea9499adf468deab87c", + "aad": "", + "msg": "7483d0f4cd0895f4b98abc11ff0be99aa0db0d91e95a612a4fdbcbfa3469efbe3b532a1850e9be14eb7bfdd51adb9a92390ac9c9dac4ad104f71", + "ct": "feb1574e018a68c09340295cc207d4a56034575639099db667cc9eb2782bccf37e6ab29ca726e80ee75681ac04be626ec9ac2a5c4a1b8dc7b7c3", + "tag": "e913a3b97acdced223343874840fae88", + "result": "valid" + }, + { + "tcId": 70, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "01b009a40a55c091f5fd85fee8f1e0cf77be9665461a506033640ed3849db769", + "iv": "32a23428d3a2769d3cca7a37728841bf2b6c58c17a33ef91e87427b8b6506ce6", + "aad": "", + "msg": "ea557974592000fc769f64c33a11721375095143bdf5fd0d32202c60eba7c90b25b192bcae602117529b1d26babeadc43eaf704e5ef32764aea8c7", + "ct": "bf83acc81770d3b62fdb47555407e7616fb6b4137c81e71d7c4f75b609d03777f016be7a63de1cd834fa1470ce5b70df305968f1c2973bf561cf32", + "tag": "eac049e5614c826ddbc29e2a44cccb6b", + "result": "valid" + }, + { + "tcId": 71, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "27460f2e35e1709f994b61a629f7281378164ced58478caea76aed85a82b2bf4", + "iv": "3b87be1cad24b501d4a87ab6872dabc23909f91432fd6ff09319a3b09a3fbf3c", + "aad": "", + "msg": "5493c9fe180adc4a4dc70800ea6f075da88727597795b38f89e1e3442723ce05f84620cc05d906d7ce498d67778d5de95a9e5ee6608e6020fc67c7a1", + "ct": "f784af42aab736584edd54c752a1b7bf788ebdd3aa59c44123929cdf2b89cf6d1ff412a377602d30f1f37c5b9ee09426659e9146f980d56aee408ff2", + "tag": "0e7419e9a139ac4f091b0fdbeec145b8", + "result": "valid" + }, + { + "tcId": 72, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5443f9795c9ddaace62627f53874782ce5f1cb46290744141db2f8251a21a0de", + "iv": "0226e83e0d97f85c279340c0ce50d03303b7a52d279a80e954882dd848529717", + "aad": "", + "msg": "2165821844579d2e141a3c2e1edb48cf2cde23ab900757eb5b7233e5e8dda9221af0ff01cc1ae4132e21bb47490da6d5498b67b4aa6e8bbfb2ac15faf3", + "ct": "ea88d460390261525d9032013dfb7f8142865381a0c41acfdc5d8e1d236d199edfa13892cdb6bc90a76e95c9c53421c893752ff5e1eb675c80e8666fa9", + "tag": "1bdf9d129fa87c267acf68dd45f57fcd", + "result": "valid" + }, + { + "tcId": 73, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "813e73725bd955466c67c77c27b697a7bfd5c8979af6b3b7cc9a4b12d229f511", + "iv": "06fa279a6edaf4af3c0a5be5dbbc973f6c6bbf68828ac8a91f40c75347c785a6", + "aad": "", + "msg": "98e89887f0e6483241720889236d393898c7464f1b2150d1903f0ce366c9c0230f03f245398f505a073ffe394c7f37013339f1485ca4ac1b5a45e6eac153", + "ct": "757ecb47f48fcb06fd5457b2b09c8306f163ad2f76a045e7cdf6152065b8133801d0fb1ad7cc99b1a9155b5665568450298e17d578131f58d49d26f4c839", + "tag": "ab34b62acf4c91c310c162dfb8744893", + "result": "valid" + }, + { + "tcId": 74, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5df4c8445be33845121aeb72ce1f7048ae92886b2c5a97933f2e9b722148f09a", + "iv": "c349093758eee3fae81688857a0ba58c4330165c59f135b0f0df8c56fc6edf64", + "aad": "", + "msg": "270be27cec71f34ee677f54920743a24933fc1029d326358dc87d1710a3b0b8e57094c64910f7ee841f3159cc291dd3590c396aea38bbe7aac816e1fa32db5", + "ct": "89977cce8980d2b19aa353aa67284fba969a68978995d8741228b6a3e2e4b7a06c81f3983dd363f4108de02cc69949a0eb1189f9d1f69698a2418731681570", + "tag": "d7f556376b9745a4054596ff98adb896", + "result": "valid" + }, + { + "tcId": 75, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5d6c28779c5f31e5219b7d8859255bf29cee6e76b3860f72ce07ad78d130898b", + "iv": "a69a29c4c859b931ba571e1acafe4c15296bafa0fdf4219bbbdaaf81f376c931", + "aad": "", + "msg": "a68a74e3ffb7a4daa5cf4ec3e7ebf7ee7d527dc4365869c39361bf2c6f1c8731ea12a50d020f57e3df4427ef7ec14fc3f623694c5540dc3968691a9b3f6527ee", + "ct": "946de451019a1b6a5f59e4de4d0ac4b2b98f10fafe38426ecc01014295295c11844a71673137b307baf7d29b4e925b1ae1f2a20205164df3c2e679637ff0b083", + "tag": "27b177c9079a2b73e52841517bcc12cd", + "result": "valid" + }, + { + "tcId": 76, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "953fb0ebd0e74967730826ea56f8ed621a0a2e8daaaa2a0e1d72b57f8bf21cfa", + "iv": "894bf9c66fb49ff6494a1ac42c25b9e1d3b0f53324632f818802c970e5d5754f", + "aad": "", + "msg": "2066f6fa84279e5ab977777917eaed2dc2b5621d30c71d57b663c0c836e04766ebc26792c8ae9e26b8735e7d0cab792e52b56558f790e07ba891b401fc91e9aa22", + "ct": "a8c4b42a77f06b33879c418258101b20636b97420368898d9cfa3acb4bd8b52be9e1c9b71c0bcfa2b7bd36e62e3007a9576e82a337335a06895f18a30e5b2b0047", + "tag": "985c47e4fd6715913d8b4442122a577a", + "result": "valid" + }, + { + "tcId": 77, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4eefa2d3e5d34e6cc425665fa1a81e792496d2825f7a713cb69a01edaf0c1f14", + "iv": "a7466726f78bee2b47cc3a12e685c90c5ae8b968a547b186513b0ce8ea6dfafd", + "aad": "", + "msg": "dba0d7f664e3019f8f2c39fc3e9c1be697a2eda1ea372689f863ece702fa5708e9fd1cd9b77fa23b76d606b7dafc339fd5f92cb90f2691dcd6b069d0ea2ea782dd2f", + "ct": "61ca55612cca30f283c8d5e1bbadf84e30b2a29d3659a81365585b6a7aa0d70a77ee97a9cc70763ae18d2f5b557636bd2ed4ee936575b62dd95250a989a0f1cc9e9a", + "tag": "356455da927fc944eee56062fae5a758", + "result": "valid" + }, + { + "tcId": 78, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "aec0af349fb301eedc771993b3289a3bdb176025e6c33261ca98dab568fbd1f1", + "iv": "aadd938e01e66f46958083e5fbae504aa36a4f742e38daae09217c934dd39cee", + "aad": "", + "msg": "5545038c26290587066bedff058697493bc3f87f15676d9b4d45fe2afabc733dfda71807c6229a0a6adca2229c9279b749e803b41939665d50628cae7bee176c232881", + "ct": "569976f31321e7fc14710121a22b563173d5251ddc70ebacc0091e5c6ef41707ef7a8e89d4438b76f64aec804cfdd598597e7631bf253c4e0ce2dc3d6f78948b140a84", + "tag": "329b819702eecaab69e59a8f7ef8441e", + "result": "valid" + }, + { + "tcId": 79, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "51388b58076c835e0b1886bc06215737deb01ec35f77e1b3a4236b0b80d1c9d9", + "iv": "aa8cf3701287d61965c9d208c64910f94f9a9d340887dde2e1fa8855d79d94d4", + "aad": "", + "msg": "c10414f98454407291d54f0599f90cf69567275b8827cf4684fde196ac31ddd44cc28b0498df8129df08d34858d6187ba9c1efb89d2688728a049bc01185e2d4751e64dc", + "ct": "4a7b366ff8302809577a12f7ef79a6f42da00758e523333cc13407302682a10307e114d9277d225d8e43843bd3804cf80186c74b0480356b4d5db28dadb859a9e71064c8", + "tag": "f37c240239f84ce387142474d841e876", + "result": "valid" + }, + { + "tcId": 80, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a8399c26603e04536c7f9ac449920c84e3a57ab97545de6c65ec9904c9803ded", + "iv": "9618ca90fb3def1eeae6adfd18aa9219aafd75d35e09dc497be6631b6e58dfa2", + "aad": "", + "msg": "e940b3b274368de43474e565be260b6607c8767566a2a018bda69d70bf80333edd8c65d7c59c6f72806cab4e29fc436da3474b0d5069619005df96339bcd3e4b8c1533b0ca", + "ct": "20438fa7bc9152ea67a2f622383b21cf9376abd08c838cb80525f520a2c088abfa01bf2b140dafdb8bdd0451ac3b48a517703f70ade3a5ef19f7673a019e46a62c5a5d8a3b", + "tag": "43c8f87061783506ab61d729716e49e2", + "result": "valid" + }, + { + "tcId": 81, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ab3b15ab974cbea948eaa63f515438dfe53c37c075cf5b256f435a43045d5a48", + "iv": "28a3698c60c3afe24ac16f14b9c532d5ce70400e60d20af8f9fd312a0ff31530", + "aad": "", + "msg": "919c3c766ef17a39baf7d783bc0eb1d9063891b8338669d20095e8d160cfd61a90a2ca20d0aabfb73d8c5a06c7cdd536f274fbcd4023138b04a8163537d946909c52fcc33e08", + "ct": "aec3cad0e8996ad3b74fef7018a8f0c7ad9be6e9ccf7f5381be6ecb377924cafe04bd17e90978c1706e73af0eefe9e8b9f4e1edc5c904dea0b394c4854afd9bfb78693154256", + "tag": "6c2f667c1699f431b9e99d9727f944d9", + "result": "valid" + }, + { + "tcId": 82, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dbafa1ad7586994ed94ebe1fd2960dcb74c8555c0e7d4d3bf1c5425ad334af0b", + "iv": "384527b150febc21459343313105bbed73344476d4794bd51a7bab46e76ab247", + "aad": "", + "msg": "322bc95fe30f3f4c07d8bc4212f2052620b687a3d1fd1eb917a890becd67a510b95c9fb327fdb45449c0bcd44ec0e07fa2818b182d48b9416c5f1148579fcfda1f32ff9fbc759c", + "ct": "733d617f566bca85cd70aa4f241990e5ef7c60142cec0d1fc1e78ad57483c5fc936a84f6e09470c32c3a873e43b9cfb85eb7386b3e04042c7549cf4a01b5c21d055aa28fc4e95f", + "tag": "1bc67d3b079f36ffcf1ca62400e52b16", + "result": "valid" + }, + { + "tcId": 83, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7af1fef7d7da2e6b3305a21c00c253c870db82d11f64405a1ccfb7619bcfae00", + "iv": "4cd47e58fa5902220668c8b7ea61b4804df98d748a11fc7f1352dc4e9b70f497", + "aad": "", + "msg": "ebee3de7b2f2085184b1904d88f7fbaea37ce081eca8bef02579c5df2d5e77ba7c70d321a6f273aeac2aa4dac7863a13d02b899605fe9cd4c1dc0c7f6e11a98514fb9da3d7c24017", + "ct": "c8c65e178d7edb29c8d16d6f31da250a07a0b72463f51c7f3721d138654472c31c6d04885b823ccedd5d4c626c663d1c06be909b457e5190901b74518afd53cf23f42d5bb652a105", + "tag": "5360a31183b0f24860d554b034f6d652", + "result": "valid" + }, + { + "tcId": 84, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "962f0b58b485ba9ff3dd4ade33e16d8dc3b7f0876347c310127613288836cb76", + "iv": "2d4099eee06b42649292dd524df30a5358311201a6ff2474c87a48ede94d13bc", + "aad": "", + "msg": "fc6350466f72975e5a1533b6655d0108d6a168ec9c60faf9c7c23928521a8c84ea043d1150ecdb3b3544d377c5c8381d7665718c6a6a9d3f36b59d23f80b09e724ae1cb575890adbbe", + "ct": "75d0d07a548e6fee14b0b32c7a8e9f6d4e67e67d43f4cc3632bc8bd92b178a6a981a119bfdc62f5af4f2802f0f249a8a4d64b9d3445f6cc00d3e8a8c6d1792e5f7cf87ab87cc8fa0cc", + "tag": "ea94ae5c9ac47bac0cbf65a0ba93d0e1", + "result": "valid" + }, + { + "tcId": 85, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e43d1e1f72ab06d6ca44e137190261667d892e3f249ad9451080b671bd1adc66", + "iv": "8299131f71905eeff053370843ec76527165f944e2c6e6e22d468b6323e8a205", + "aad": "", + "msg": "26aea27c1f92dfd3df1f9815f936802f7acb10b48bb5c39ed9f384a458a6143d4125e0fde0dfa68e7fabff47c73771653ba88b41d1cc35fc820e0d6a4515ca525dfb6ee0ba7d0749790f", + "ct": "8fa604d9334639396537c57df63462693858dddf42a89fadbb1437d9ef8f35b064fe532f7ad3ef3271f5e4c9a9715c8424a73b0ec388d6538c2677b3a1fd2709ca9a6421f2fdba49a6d1", + "tag": "2e557894409c66f817115eb2a2945e6b", + "result": "valid" + }, + { + "tcId": 86, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0c839efb654cf442ae8b1e6e1716f671ec29fad2e90b9c8fd8aecc7fb633c10b", + "iv": "525703fd2483494e878abe057c612cc6ce6e907974faff95b7bc073484a8bd68", + "aad": "", + "msg": "fc566e1fc95b4d8aa7f8724f580c70e41a2ba936f2e16efb91c65463b66ebbc5fc7163a4ad09faa68ed6e451ae277cc2388708156161a819fbe28bb66bf746e24082f406ada1c2dce0e522", + "ct": "a01aac4af93c331a4854c76b29cedfc198e3e2c7e380be9248bea45157a169ad2f47cb7399dca39ec5c645245f623276d2994a4f3ec6653fabdf1dd6451e2b6acb5cdfb812601786626a4e", + "tag": "6fd4b64a68459503e721fb2914682692", + "result": "valid" + }, + { + "tcId": 87, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "800365f95f001fcce679bb5d67e613ff45440c4fb152610a7028f8faa4470cb5", + "iv": "a68d8716a3804b799029afd4d202d7223ecf0342170fb4dbd53551672469e1f2", + "aad": "", + "msg": "73329382eea4f1c758904c06cb76998f6801d42e2565ea9dda197cf2dfe26f83cd47c754fc4f2b6a67a930dda6f7a33c5aa21d15abf12fef2df9ea5b11812cce9c208fb2027e9bab474e0b5a", + "ct": "636cdac619a3383ed9fc699cb7f7f8b049f27ec42f2eef61751908b3424ca30cc1d28cf2345b2e13b6ec2be34164e381abaed57a9bae171718415c90933690ff6fd95a2a20034ae9a22704bd", + "tag": "13000e12020169b183f49141725b7b50", + "result": "valid" + }, + { + "tcId": 88, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f6d89883c6622e9150e498f2254db6b0d8be416d52142c25ca5adb0fecae4765", + "iv": "871b4cabffead7733f46862f56f1821c4f267633ecfd10bb18b2976d051eb1ac", + "aad": "", + "msg": "543eec67f637df5d8b9929021a37865b1eb7aa171706593a1c262ccef485f1f1f987d39c2d4cbd36f219a59b3ff656d53783bfa89b2ccfca2a305261a9a284f9d577bdb0f1db9594f3819e102f", + "ct": "a2d8490f4c74759450d8cc6d2488681804f43f57b88cdb9ab0bd291916126a8d5a3a68eaa4174992f3744c7e2979999f78389dd8235a9026afbb8c91919e9a2935715f5445f119537c099c71da", + "tag": "9f0e4c071172bdfd2aae2405e9fddb9e", + "result": "valid" + }, + { + "tcId": 89, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6d733930637a25e68fdd877f0dcca0449be4834940c0f0aac0e7f02c7a996e0f", + "iv": "b1730671a0a8d27424144a60e0e1d3662c14db8462d041b3f5d398a32ccd21e2", + "aad": "", + "msg": "9155f3d749af3d09cd3e6728be44571fce10d1fee6c6ee51cd820612d2e0ca52e50483f1d945ecfa2a86a84f13409948180742bbb6b23e8751eacf6791150732fd5a81510445e2c1382771052763", + "ct": "a47ddfdbd1e46f8471f20a0ae8325e937ebab7fee3cd667bd2c2c349fdd4f058fed776a15f32188293a58c17b73c5edb8f0e1b3beabf6224e2019bd5a9c6b0d851b2353c8fe992eacbe159341af5", + "tag": "b85cce42feff6123fa771faf691d4c57", + "result": "valid" + }, + { + "tcId": 90, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "387138ed48a8b755d3d8c3f3a352c74b90dd8e6f456bb85d0f4271f40a1b1241", + "iv": "7f1b18cfdae24e0330bd1be4aee6280888c8b7eb2fdc5c1c7efd12940c72398e", + "aad": "", + "msg": "2dc0a6012390d8a9d96c1dce9a59366acbca110b2d9dad005262957c20a05d9e7564e90e8a63f8e2c261951ec92dfb077c88e0fbd38d7ba1267e4bedf2277370cc9d303e95466caf1a19c571481bb3", + "ct": "7d27081a9c45cb9b884392347cd9183e31ae8fd1213f1de8376d1c6697db37f64c2ee3ee431f83a6a3283e31d1222b926fb25e293ee201933b0c73d35c34166c67fd51c942cf77188d556c281a7d28", + "tag": "71cc48d2035dc29549b9d839d01a5c23", + "result": "valid" + }, + { + "tcId": 91, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "546c0cefe699504e0ef07c0f3d88ea9367583103b6dceb9063720f9cd8d02aab", + "iv": "037fca5ef085e9852ae6bdd1f5e1f114c0727160102db68f0c65607e4e3b679f", + "aad": "", + "msg": "54874e67863b4edb2607ac5c531a7005b6f115003b16de389acfd497717b1a59152cb5281b22e63b633d0eae6a7175f026125826b81ca28e3eb1baea33e380ce8f4b4acdd10914f6e71d5f0efff6abea", + "ct": "a83e0e878ad6262347dc8d1af879635265ffce81a5096b9ee19fcf6c884f37db91166016fce7b4faebfe9d2fca9d37386a98685c8eda50547280745ba38a97718f1a78db7709c098ca3c85d62abaf130", + "tag": "58351cad5d13159b047a7d9d730abe57", + "result": "valid" + }, + { + "tcId": 92, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7625793f758adb1f2bb45e3f025d254cef443ff763885f75948f74dc9a2354d0", + "iv": "d171126ee49f266c1031258a806623ef3f9410b16ad8fa03b6c058051a323dfa", + "aad": "", + "msg": "5a446d35481128097c481481d242974bcb7924861eac24dff59b7d9be6e9b3fd47ca6f54b5aee74ef2e730d54f1be83624c574053c6f1d85f85c0a50be65fc347bad5ef332f3f89b0da2f4667595308bf8", + "ct": "84949d716c3a274eaf6d1581842a1a62fb50db539e9bbfa5976a74cb14558dfe28a7404a3cd526d70099b67489d6ffe616952c34231765a89217c638e29dbc69d10d123f4baa1ca74a696ffda74063c408", + "tag": "1e238b72c1158813f2c321529965c077", + "result": "valid" + }, + { + "tcId": 93, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6c63faeb6b187311db36ca931187bfcd2568f596784f9034ee7d30d63bfd97e4", + "iv": "c05f2a92ffbfc2bb2be5798e5719bb9d8542e441f28650b1ed27c6249c3d0ec5", + "aad": "", + "msg": "a90fa860f84a242ce1afcce0a3cb34a438976344a521f63e49c7a30041e3cc7a85ab0ac8aab0351db553de9fdc016f00d1e1619c62fd72a738353751ce7e6934dba413d657dff3bdf1c8a9567fea21b455c8", + "ct": "e8d8325e2c96e6a7d01af42ca1a2429c98b55b7f9dcd91efdbf8f05a9ed283c6cce10f32f0fee19835be7ac683deb2bd259ab24b32b66a4d4265fb12885fb2dac431ed460d79c9424c522e9cf37b9aa29a08", + "tag": "ff9e790ffe95560912432104d3ad9c77", + "result": "valid" + }, + { + "tcId": 94, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e5dc2c78d0c96ef6ed37b18934a2bf84569714f22dc1535213d95ea47515ecf5", + "iv": "c41ea24c591654c0cc29e8f71c9761e8d82eb94c7e76bb6f10c2f33a417f8230", + "aad": "", + "msg": "6d82390933d6ccdc18940bbcdeaa80136c03e818db08c9f0bb456e44593984fd36a3eb56d86d4faf530df3815c18c40e4dab155e8919d9794fd45164ea9bc841effe85899b638d5d5745dc54af2510fb972739", + "ct": "78fae7e537f674086009d54f5355a62696b31f2370006225c658056df2c473f9b845d3bf75467ca5098e8ff16e8c507a04601c076c7c7ca5a8a03ab3f7d4d9d9d29dc128bf7a8b3b17eae37c752e5659277b52", + "tag": "79a3cac6e01bae0225e370db54d1b903", + "result": "valid" + }, + { + "tcId": 95, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9d68be8b4dba89f11a41bc0b4c6cffc27920f5c6b32cd44f65238677024993fb", + "iv": "fe2ef693172e6bc2167cb4ffe3b995592db60ee5bf21a853b643e65978f225ca", + "aad": "", + "msg": "1382fb3e514a8d465d7bb917abbbed945c6eb8b2fc764e8ed639e920a01d03f2da00fcb2332c2e1acc1587929a51f0edb08fd0b0f4b13d28ac2dfba203fe7ee7d889e9689f2b1bf96553b38cf51ce59126c666c3", + "ct": "fe8e475d75674bbb05ccc58211c4fca37a1ca5f447b140a7b34b3e1f6ad29a8c060d1bdbb82f785e911e5ea7d2842e004f1f77e8c61f65a00ff89e8683e5f43535aa5f5d2ff66c8f9492c6c5de14d370d3317e86", + "tag": "61e51c536f9c86a061414c5b5dee45e3", + "result": "valid" + }, + { + "tcId": 96, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b9a3433c5b754c93129f60037a102b3a3032449a6624814d90ac9dcc4695bb42", + "iv": "e6a50207393675b242c3dc271faabe98bc77abd89ac3a4c760c5d03137c9acf3", + "aad": "", + "msg": "f97aa6812235906b91e15ce30e1c2df8d68aaabf8d54f31f3df52d473ac87bc8053f101a97ac263e24e528b0bd20a0a7a02d3b3fcc514307747fa74a4463d801bf6a10f765780a8f13758c09c2a2defa40af8d0533", + "ct": "f1118237d41ce6c56148c1b965f9f18497e81ea3878b6e6f5414e7b3d22dd5ba6a016c67f4559ebe9e7578c7e9f64d2ea75e4265cde88cc9c67b8605e6f52bda13b496f11af6ec7cd91ba99ddf46298684983da6b1", + "tag": "4dc4b075da1391b27d936f853575c8ae", + "result": "valid" + }, + { + "tcId": 97, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "47a0db11b5cb59ca3c1d185fd434865c5b0b47cb95e5b7a4d1e4d1e211ce90e5", + "iv": "f8f999c18c006eed723510d64331a14259d2ea9b88aa292a72208809719fd0c3", + "aad": "", + "msg": "e110aa163c5eab5319793c12502a7b69743fafd0ac06b0213c6385efd68bda7259ff7ce4d9f2895f7e9e13b548d6be292ee18c226bc26b6480a82cde99cd437b7cc48e38b4cffd3ed23754a8567d37c0512116140515", + "ct": "c6de391471cdda1f75fd83ead2147dbe586104e43e8271c256b06332fdd7655e9d7e4b551e5a53159dc348131c885519e8d9c99a3af0682b7f46b64cd3a91384c64683fa2b79480c6e6ade84b475175c812610edea05", + "tag": "0a841ebdd9abadb44509199c1834d0fd", + "result": "valid" + }, + { + "tcId": 98, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a4b87442a2666484d75ae7a7215ec1c468b925efb7235300657c82152adc65aa", + "iv": "3c60cc3f18e77766a13990d4bca80b117c1ed906f7620472bebe167481fec9ce", + "aad": "", + "msg": "22f96e7a282400461cb1a09e3582c45c72728c9eccdda7e36ce6e79f776eb5d436d320ba221f693fc110d1ee14fef041a708ec35db2f0e8a2a9a89b91a276fd1714aadf39d3b9a7cbb98156f8e1d05232325086f1074a9", + "ct": "4328aae6a015c3517ed08696c4479837bacff1cc55486fb3c076a7e645b0895ef06f7383ec2316df04ae94d0fa45bf23585d25c2104755623363c2454d2a421193538a6e828749fb687b19041926cc53eae973c4699124", + "tag": "f8fcf9b8bebfc55b270012608b62971d", + "result": "valid" + }, + { + "tcId": 99, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a68055644644044493ba5a4bae205f13b67ab4e07c752dd9fef4f483983f1ece", + "iv": "cb4e77955c5fdd287c0ed7c5199913db802371e863917f5018adf22d60a7e160", + "aad": "", + "msg": "2785b80aefde20053ca7a8f97a872a11f69833fcb9645ce5febc4e37ca45919a904b9cbe49f254f4aa07d9ea12a2759e53752c34eba1ab34533a2101ddfbc5f20aef50173f92a011e1d0470aa5763de7cd1c5dbf782cec9b", + "ct": "f7e436f5ce23a71a467a41924e91871e76b6b4fc6da94d859c751e46a1038a61f3b8217e354a0777253085ef81dbef78a47bff7d5d91428da59566ccda428704968dddc05eb58718d454796d00287b17da7fce6deed79594", + "tag": "af4ea3e6296642ab32cafa501c757c32", + "result": "valid" + }, + { + "tcId": 100, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6d4e98292d3a30556ab943a056c6a751489aba9a768b5004cc52d51ce09fa5b9", + "iv": "7e86967adf3d6061963c7814bec20e0bca67b14454d1871c878a37b344dfe2a3", + "aad": "", + "msg": "524f5f09a570222127d8eff53d34f49c325206477fe2c1019ae94041a6cdedc7269183e538cfee5f0447dae6f25db078197f67c00c07e0c01a2bb3e2dcafe8842c1eea7569b312e948d182167191836fb2e3f552dfcddd801f", + "ct": "a6bf19c83a9875f1517750b70cb42814185992e8598bf298f58135c8b58f75a074f306d3ee66e897539765503b604051c27b82b32e68cb5fdc2e84744421e21e9dc69cc0499c9cd0d21b99f4edda01ae6b5ea1d0d200dc8345", + "tag": "bb869db149ca28ec26664200bcb2e0f1", + "result": "valid" + }, + { + "tcId": 101, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "38915b14a681bb7962f650f6cb2c41710ec230932cdca5c39e440c7bd07fbbee", + "iv": "bbe4ffa68f788d4930174027729b3cbf0242ed94e0670d37d4ae816298ff48f1", + "aad": "", + "msg": "44dee0c809bb5f630e618649a54791d84f9fb6301fec1e1dba2ef8efd46057b5ecbf3d427a275d8dc78900d64f5f6ad8bb20191a5e0a160a085ade07ea588afb89e818c64ca00d06e623a31b3e3b7b823a7d5fb9fff70747411e", + "ct": "5158994b48d5e8f8e32c9fc3b14f4a3097c648aa99c5562b014b4aa8253443ef04585bf040b66b1522b5d5b12f376a23910a83c468d37e059bd29780250bf0f70b50a4622e5e550f4ed63a437ec2d8b3c20a14ac9e88dc1c188f", + "tag": "e13ef6d793e8ca8650a9ef760e277711", + "result": "valid" + }, + { + "tcId": 102, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "97a380cd6e0e50c6c35803e6334826ee73de30d2e5b95bd97b84c462a3362e38", + "iv": "cb2d1caa5790b272d86bb67150123619dff9db25f725cd04255e470dc23bef13", + "aad": "", + "msg": "18a0db8177522bd244097c6055945083f025c0c68c88470f49ea4bdc0963061023887473ba38d7a97327bdc5392abfef45b9cca2e1df026b0b861a2ac4758d32d285cece8a5bde4ae9856a2253bb8d982bdc72746736370bab5c57", + "ct": "1f1375cf308f9edc70a1a46c58a634c4f4e1ba4ba69443a6e21cf904529627afe092e17d3ecb3756af7b7965dd865ac5741951ed7b1ad640a760c7c8fa0bc715b4f516860857b6c641011bc06c70db5b60ef0a02f542a356d3a571", + "tag": "66c17a19e08960f96b2843f3364ef75a", + "result": "valid" + }, + { + "tcId": 103, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c06ea90f1bf2fd085184bceb941e681876942570fe0032acf313d527b05a546a", + "iv": "2dd9c77db14bc80954de50001d88c3c69b681d99e1e33ad185ba806c93adb86f", + "aad": "", + "msg": "46581b4d1b90fb4ad63268050ba67ae3b675470feaa5b9142e50aa9610ffb723f5a53a4cab571c80722951738b8aead58b2ebc93bdcdcd9aee77c3ad39c22d338263195018655543c62e53f517b4c68f249fb98c91e1a475450d9b93", + "ct": "22f4aad1c6d6bbf634531ad66ae52822d938965c1977dd0d3512e16334b290f8d82e0f207fdec7d3960424c30f37035a928b4e45be1aea02a4784962c810c50e6c66c1b9e58e860b1322f93b3dda4e144c3ec5607fc65c9470ebb9b4", + "tag": "efd01de97a67880506a7a5ae3723147d", + "result": "valid" + }, + { + "tcId": 104, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cae801beb864dd50bc4d8c927c3760a062ef931af21e292c0c7c13d98375f04b", + "iv": "468fb43dea45d420d1cd11edc2817dd1cfa19f45ea39764549a37671c0237a64", + "aad": "", + "msg": "dd42114ccf0a304dd00f98a4bfa798ceb97cadd5a958769ea741017a80afbc01cb60c6ba92826fcc3a671fdad09b07f9ef1ca89ac121ad53aea137f32416683e40a021422616a35d415a53465cb4b8307cddfc0f7a4bd95279ea867649", + "ct": "acb8c83d6922b2b184f2cd93773a938c26c234fbc52a70e4a68301ba6c31152b300686c5758dde58655b6ea201389e5ef18391058c1539adab78a77e1a3d0e81d6ebb48a089aeb0350f58e46408949fca472cc453ccf3973d74c5813c7", + "tag": "f0392f2eeb65821e1daf2b8dd7e3ab30", + "result": "valid" + }, + { + "tcId": 105, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3eda56d5d221eecd63081df6518aa6ce3f037d878e14874e9dcdcd14bae27d47", + "iv": "1c3e8062fb918d723416cde19be8323a4f25b322ac20148a2c5c22f181db0cb8", + "aad": "", + "msg": "c4f661c661a86d25681bc04a63620c82dd21fd461a8445fd92525827bdc80d22e9b27139a8beabcbf40a3b54c76319f838f63edcd76f3417960a52f94e696f649f2e9024155d40c17afd7c4ee6230467a497847a2788f3ce560616325f74", + "ct": "e3c2a3f1b11e441bf3787c92686c4865079a047d7a5a3be9f28ac2a57bc3029c19004335073b0a254861cc03cc95fb86fc79c687f40df5b390acac6e7de29eef886b75433811db678fa7da5d8e86ad0ab8ad5b4802b28f6c8176cd2da01e", + "tag": "3a8fbf876c91ec124166113ed9e1ccf0", + "result": "valid" + }, + { + "tcId": 106, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1db6c36a63b2bdf9d05f117cf26f79845399d36e1e912061ea40e7cd4ea0b993", + "iv": "0f701973294051e9f4e666b71cab5e88b12af7017602d27fb375182e5c579ad0", + "aad": "", + "msg": "dcabcf26eedc5493e42fcb41802d347eb8d74de88ab1003ab90058c8da20edc35d86e95cebd1d65b96896b3e4153e43225cbdbaf72d56c9a0f75d54c6c5a04a42ecc1b4813f80753cac1d4dfba001bb69cec2345dba87023eeadfbbdcb1dda", + "ct": "e7e2001f56b118cdacb349f5e924afdaa80cc6d041aeb09e059209aa9c93e76df2943ffc05c469bfd78cd14d634698f0dfad4623080f973075f64fd5d89bd152b2dfe09e39f3615959bb19522ef9f90fb1b78950384df207e98c2fa08dc813", + "tag": "1a29c7af8e5b38d8c98d87b7ffcdff34", + "result": "valid" + }, + { + "tcId": 107, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9338aeff6495de87344a809830c9421e2a18a58656c50349f26cefbcd13674b0", + "iv": "498a50fb889a1b2d4586fe5e68d89ec471874b22f72d02f5d6e206ac4f704043", + "aad": "", + "msg": "9b9c440ffd524c502072c9c6fca15496e0c8a0c2ae5389367e32fd9c17ccee1453e91d971badfcb584b11f0d0cee960cd0e4042b79a03609e4e9fe557665af5e48fcb09ec3baa1f8930314510737a983e4cd6148d85df07793a041b1efe33a66", + "ct": "9ce4279ac4ddb65a9b35a858ed9d912e343803af65b5027b26530b0d284876bb23461c948defb859944e5b2758995b6a90ba5b7eea8d879dd9b388a318ecaaf69e46c64cbc2c6367cbe5ec5ed5dce7a8d0344ba762ae595ca54fd9214b6fb289", + "tag": "8a5c63f78b8756f6866954593d709203", + "result": "valid" + }, + { + "tcId": 108, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "26f0dbcd4f8a21473ff1bfbd6d10a8a6047e525d232a2450bd24d3b5c9215a21", + "iv": "8dfa6f3dec1896a3ca61714c6220f6393f11e77b5544a28cfba740121ea9b110", + "aad": "", + "msg": "457ddde67ef2657d82088d9bc0a5108a5630db951f5f22613c27344293e7e706ab1d761775826c1f8f541039f7b3d2790455d743119dddb8fa25dc5bb2fe6ac2fd4efc18fcca2bc5b724306ad99a19f4342bd4314b6d97690f99f3088b53a43f57", + "ct": "447d0c6c91b15ba6a4e456ce456d6fa6712f407e866bf7c465f843f5ae549ba2e7b44d4746566eeecf6d8d9a5ff1cbbdf5a75d6f2374e103d7864cbc4fd62f37b379125230a43399b21726159aee9ee3d67bc882a51f6fb349e6e8ceb39d1c477a", + "tag": "62cd4c95d51a93efebd94861ea2c31ee", + "result": "valid" + }, + { + "tcId": 109, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "283287b47e3cb0015e4101e0194f7893cacf06104cbf397f40077a23396a0f49", + "iv": "bb2c1f580a5d783f0b5a7269e2c9172546031885241c0ae5dfbf81f37fe5d917", + "aad": "", + "msg": "0ba4fd638d13460c7c14b5a3f1a9cba6f19c3f56183c08b38fd0a5d552a76c07e9ee074b20c61ab1792a46de1a29586fb23b372ccca407351bd02261effc2e6722704e4a89712ed147f6eddf42b3e8ff218792d17ae590bd6113dd105adf9f0198ff", + "ct": "92fcb8f06bdd93a24f59d7cea55143abccf53d43fe95f628a96384ee352557e6f8423848eb47e3dddde9dc3d60f460b54b6557e4571af9d557ad234b4fd707e3a5c749330c469ffab6e21137a018204e0fdfb70c8f9a8363357fb984856962e763d4", + "tag": "fe1b54ca89b431767165d2de9b868d9e", + "result": "valid" + }, + { + "tcId": 110, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "937759fba53772310a8c4ca4079044a1ffc6312eddd22b10e5ac0acf560fd4c1", + "iv": "2dc84195607333fe77397cb851c79cf74c71a0aa6b5f5e263e910754e499cbc7", + "aad": "", + "msg": "4576cbd4036c3ae32bbb5efa191f432eeb3545f861e4334026c8b57f269a419a82d70ce2762999a2879e0bc271f6090ae0c4438912a35e705f4c091518af0622464653744485bf4193f3eb75635d008f776d03c82f00bd0f60db227746c8d43dc1eebe", + "ct": "04adea81fd805e7ce6c4d1079d05582c883c0e2a1238cec232ed5d9b38b38af8ca649482e514620d1526fda887f75ffb80876b9a729e141af07b11faca2052e434cb2ea10932c0d1e39c9cc13a1ff218333777f30108e95f32c0a7323f1387f4dc20b9", + "tag": "a55d2d755b75bc68cf96b46789ce118f", + "result": "valid" + }, + { + "tcId": 111, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dd67b6c3a25685a1bbd1edfb7b5c11786b72b1fb882c32a9e577e37739f92a76", + "iv": "40e7167462b6697025f725894f5868198d6a54752d5497c2a37a7b7358b0e3b0", + "aad": "", + "msg": "902e8c211351860e0d355fbd3a3bdf7f453d94554d9f06c067bc808fbcb18e09539a19d8bf27af323db330c58a434d0dce018648c6726903660b207ccd3038b39a716988aef28909148b68e37308164fb07f942bc6e3bf9f9fa513b378c5ca7262800cac", + "ct": "b00b02c53ed46d1029557f902be59d7221310587729c17f3b65a2ef65fd1d70694a52af1be79a19c22b62805dfb15391e6e2f290d233bc3687719a0cbe99473b7cae417547589ca1d2c16535bc8e774375378c97f157706a5f733756fb7789dc3a0fe858", + "tag": "c334c082bb37aa106c2f00e0fc537aa3", + "result": "valid" + }, + { + "tcId": 112, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "db840593fbd34782a45fa71ac18d4f0302c2ea8f82b3bdc0d8bd3c5d2b65dd03", + "iv": "fe0aa72957a2ca8a09c6df04bc297f4f34bad0a7bf64ce48c4fce967369880f9", + "aad": "", + "msg": "2ea7813e96cf44fb3d3028b887bbb3ab2552258fcb44e741dbc8fdb23fab3c0ebaca5b1bd611436582399d4bd06eeb6a8c0bb0fb3173b3475c4b29f9ba23148077036efebc599c57ed816e1ea802474b5d872b2071ce19418fc52f4ccf99619181a29daa4d", + "ct": "0bdb4eead96dc43dc8802ba22aefcd865fd3f5a9a9c0a05b55287d7d5d77f5d7e26d5a5f24320914291ed0c77566ba53e246f973645870a69ffb06ab66d3bb3619517d11adbeab2a89e05d2ba647b4bf667d866f460a5696a901ed866113137a90ccf46d7e", + "tag": "f377f4f9fbba2cdbe175d0b60f14dd1a", + "result": "valid" + }, + { + "tcId": 113, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f2dd6f4a9ea60d148a72203322a09dcec7108320dd29dd258d4c0f72b96b1645", + "iv": "d4ef1d71a947a11f8c21b0ee1c77fc1958f92103e6f24973bc0bcc5ec579c31c", + "aad": "", + "msg": "5d383722dec098edbd2873622218d23cd594e3270c8554a60012d37db2450258ef4ed6d46c90ef334b6bc7facbb46c8cf851bb725c40324a21b1e4f664a92945ce5856f38b80853cacdcb36a16d75b9b00e9fe398790d0230b089d4c02c08a2538d5d827e9e8", + "ct": "77db238f1f2d140cd13c0d57a57cd5e6fcc1a17c4db9a75e5f6dc13d3511131e621f400ec5c68f19c236b1c4b467303b6aa9dccb1f07aee7e4a158b904c4bb28dfd45fb178473633970394bc19bdbec697deaa958ea5b326a102a5a6e4371a9b1fd517c461d9", + "tag": "ef86117d4fd10543aa62e58c22598083", + "result": "valid" + }, + { + "tcId": 114, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "858e2e9d85a091a17ed2259936c487ed520899897d58a6228271edfd97efd5db", + "iv": "714f06a2c59acd15b55cb1a6422eb6b7db374c4e6613026962abdc26271a1e1e", + "aad": "", + "msg": "2294d62b6408071a70dabf3db40b8252d53ac131fa8eed4aaef067adc0ba7afb61183a776166fdccb10bf56b3def35529be186a42640ff6afde3ef09d1e7d186267593d77fccb8417b7c2844294179422f19ede6a2fca0ec757022915fb16b29e2da52e29f7e2a", + "ct": "585b094d40aa23f27880e24a71ca29789711ea56ee26f240b06ccca5472fca008886306801da0572aac6f69a95b5d462392b49b110feceece5818606f4254ceaef1575e8be3f9f0d787e01fc47f13ce7b9cc15902d7edfb20fb31f5ad3d6ab2c2617eb1377a40f", + "tag": "c5a5d5c1bd843010b41bf7ef805a2f89", + "result": "valid" + }, + { + "tcId": 115, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b998b9cc298fe42786baf5d9cfe2f7d23cb9b896a90d5c9cbcb202b72cc905ca", + "iv": "cbd9b5db675a755213818253f99596983618e15c2a8ee192a5f0dd9158c3113d", + "aad": "", + "msg": "7aa7fa961f665c58a8dc0419cb0f468d35854f68d6a2ce3c8a96bfdcccd82d310b0a9c6af2f14bce065c934ee420f19aa868674ba2e625bf3a1939a93dd2f4a6c4b74a8e223efa78301a269e83455ece605d878ccb595c5dcaaf3b7f77380887a54a8bce68fbf64f", + "ct": "bd0e41b06a0e77808839266654ea5fde5a604dd1d869a629b2f27a34086dc0f064636451dfe9ee3cc455b7ea26ab97fc36ab651d5bb00a385ef2181dc5362fd032df3cdd590419d471a3491f90da7e319559cbe4744cea728d96639fd91ae103a197e91c3b49c40c", + "tag": "1afb12dad52af29dbe58a4b9143a6ed9", + "result": "valid" + }, + { + "tcId": 116, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9940e0bee193bb33981f1f181825d626938e1f93d5719c38c7818d2a32ba3afe", + "iv": "265d1b0e741badf587b06ba7c439c74053fcab0f0ae025108d03b859d8e39e69", + "aad": "", + "msg": "ce5ec372ac106372a6acb6d0fb5dd42ad2ebe48313cd73f532c9e634855f78bbc9c6ba17732e77dfc0ed6a3dfcea668118ce58915d1d94a66484af6bc23816869213189d446a82694b9c8f7f6103cfad87b579b98dbff7df9e081a5f2005ab3610ef6fd4e50b91227e", + "ct": "e0d48c5a435bdb8c98a58c7f103a17be52985643e4f0d77f720569cb858dec90087acf750b54907f17dbe4ebe9e5601a6a5d9d9002a6522128f759272474f7454dd0331ea4f11595a6fb8407296ca23fce726551cd59fa4cbe6b35b84ebc87304341a5e423cdb77305", + "tag": "e082feec52b84df32d6bc7947a7be5a7", + "result": "valid" + }, + { + "tcId": 117, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3d4ce2161af71d4a966718736a6a6f4459634af2f23041ad885647dbf7291485", + "iv": "3f080c9953439915cc32125192e6e8d15ecf893223d681059a8510ad90ae94cf", + "aad": "", + "msg": "d099b100bb3ef160b285f332e5bc7365ee35b6fadeea514940ac2427406f44963827c88f489af217c15ca85b2532fc4425e41a7cee54ffe01828fa4c449fee2af2a491ed316766fdb64ab555eda3f23b83714fd2b082bbb3166ad0fcfa4c10c54f1b66ebebc1d3c2d922", + "ct": "bcc334685f3934f57f4d176475f2682320aa8b179ff9228df415d8e20213a3ffd9c5d82e7e0b55f754e6edc70d794f328253ecbbaa7e95729efe607874d99528a9fcdca4d82c8ea54939d5dea3aea235d7cffc29fe7f2b3220adfab84220de5bbdb7d75153ca5c6c636a", + "tag": "07aa5ef35eb6425ebdc9aec6de1659fb", + "result": "valid" + }, + { + "tcId": 118, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cd602a0b51a71c5d684707a8b9750d1ee0b688551d8330c97c08dcb006906b6f", + "iv": "a7587bc42b2d84fe26a39d00554c99fa4c7215f585435ada89e7f4edcbb05ee4", + "aad": "", + "msg": "3b22f2a9a35d715b0fdfcdac27a870b3e505864144df52ff18a549530ed3508b9a3b2042d4b63495295479b5c4fa1b156ad48861a59b22dc7a87f650d72782575f7fc4d45ea95faee10a5bc0bc172db11cc5eee7a54cabb336e785ede39dc60ff9b1dd330878245e28d369", + "ct": "8c27689b3c025c37c5ba2e5291249ca86da0680af7e6afec9b4fbbe24f44efab2efb1e5a6d6ba9d1072c62b9dc0916f5d8fc0acb58db481475a62ef09fd43fa809fb5a4568e8c0bdc742e6f3c4b9260129d0a1a187c4fbc70003969a9450fc2cca699728907c470d4c91b0", + "tag": "1c83ca88f843f2ef6c195a12f49447be", + "result": "valid" + }, + { + "tcId": 119, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f3852497c98dc0432903a4a6b2282254f8bbf4586f9be9049d967d994309bb35", + "iv": "fd53e4b8f244fae8584e554a48316b1e4fa4985d35277365aea64d919c20b50d", + "aad": "", + "msg": "56ac8ee505201b918e51f11dc90e3ecbb6d250332fcde986c9dc17cf697780d56fea8739a24734f8345fc9d923a2dd41429d63711259d0171675db29b0b82317f37e917931765b62b4a7a4c29c458247ca7f1e3071a400e3f5ad30df3849d55d993cb32e196c0898bd429911", + "ct": "adce79789539e59805cd3054ce802453a09efb886e151c4bebf83a2859267f15cb22cb88ed1603520ff06a18658090da9b2f8be221a77b73e5b90c6a9b11ce06116b0b334a35f9090e7d9122134a54f60acf481e5b6e235568f667b19fc20111ede0ef20541d0e91aa562747", + "tag": "1ca414a10420629cd8a7c37f8b479ec5", + "result": "valid" + }, + { + "tcId": 120, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "507d2bead399c3757cc2622ed90dfd179c25b6d59683fca223a0b9cdc777ef9d", + "iv": "c54efc411fc4ce2fa878710d80164f0005e08763e190ba6a356e5655f1e7aece", + "aad": "", + "msg": "e7f635c5c6567aedf2eaca58e37f894ee1abfac1568e3416ffd6f26865f6d7cec354255fecd63357bc06c0d25c835861470bb4acafa4488bb1859c5b32637101cb10cc7823c23a84bb3752a2a98e0e3fd08f421232318ba0d25d4907af6af93df82da6ea46f7e64b554c5cb121", + "ct": "8d60687e8c173c3295d92e9a6dc21804687078c50386e46e8dbbcd6fb4024a71be92970308ee07bb5ce2a08be72bada5ac0b1972650e4edd2dcac3c08b690202cb69893676028754da08abbcf321de463c7557e2403d177ee6c038c059c00051cf5f631537b8dc519b9f87cbf7", + "tag": "b8a87a80d7a7e6a035ddc9288948c122", + "result": "valid" + }, + { + "tcId": 121, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2f9fb9d0d2d3212ea06404e95c731d7a8fb57dd05c88c41c78a0fe219f1459dd", + "iv": "7b2c1a71d78ed1c428c622a0b1ed2e24546993553205bf25d1808b552186617b", + "aad": "", + "msg": "c23cc8c2276a61b1d98fb9ed9beffdda88d984436d2ef21f42540b4b610d430514735b605c121f049e8af728d5cf30d53bcd596c10704f59e07f1d2c6414ea6299613527dc0bce9ae4dfa478d947f211c283ddc1ea210853ed4fdb615e935b62253ce4f7524fd850d84c617f18ad", + "ct": "92ccfc7cb5d71462283abfc4abab58695eace0ad6545c02f4677d4907032f59cd4007c654069df66257a142371d4cea9f23d717acfcedb64c2cb4915ea89ddd49bbc4969d955fa6428274997e233ce53dc5641341556b2044bd6573d5220d6a2ea0d1003960dc14b407dfa4326f4", + "tag": "3719887e415b9a7ca049a82a84805863", + "result": "valid" + }, + { + "tcId": 122, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b9a4a4299c39539cbd1c5024ad5e91847448550e0231302709a5ea36c13021a5", + "iv": "467d0eb4546200c89f95b15a4c66b24399e79fa81ccc315ccdfc2a5094918ade", + "aad": "", + "msg": "ffee593006b52f345dceb93760421e1cbf9b14e332ec5394d5974409d5bfeb1fd7df23741d502da4f69f6710f77be3ea2a2b4b5b823fbc08b6bd5b863e5ca116793e5ae55671cab713f4bddce47e27f4ce687d2874fa34e3df91eab40c7ea67b52edfd07de80410ea5309757ffb096", + "ct": "6c94e4b4285185b5eedb33ab4259541c32ed972dff3bef14e2e71d6ea56e25d127294232303b8b90e667d89a1fef01d507b79be1a5d8c6a1b5729c86ff8d38ef7591f1c35dfd65b04ba11d89b77ac20839376a2eaa7f07ad88bc7677ca239b587dd8038450d54b4ad35615490d0c07", + "tag": "d7af6c6fc75ff7bc621cb1c1a40e1be0", + "result": "valid" + }, + { + "tcId": 123, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8390f9ae4385443391ece4d8d75b7c71bced0fa24cbd2946c9df1b20aa0c510d", + "iv": "0080909592f3c9d79bea12779ceecaf4e39f89618b10e02f4e9f54936489506c", + "aad": "", + "msg": "0fd634459b8b516a524e052d915bb22163530391fa721ef52302e51243e6ddd39777f2360d94b3b302ed6b836d735f4a6386229c5c076896de66b89afb9776fc22f70405814ed90e1121d02c8465535c99a1fb670c3b2ce685bcf348ad212d1afdff7429fd98346d7c1c6e8dcc889ac0", + "ct": "63e46572ad0b039c900b58a742d0a20999fbe16e48d082a6449634b188126e788b33a5958f023d3fe2821a227e11f1239ad6ad23f548e9bbe8591be52fa5c77786a5a83ae4eb1a70a8ad7184f2d94197a95b5b91decc0f87fcb3e30a82b61d1b5d43646ab161ab50d257b965427ba167", + "tag": "25278cb1e4d5f6a6549662994231bf6a", + "result": "valid" + }, + { + "tcId": 124, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d7bd9a1c5bd5ecec8ea17ceb1818079e604a8c359752f715af891b104f41bbb8", + "iv": "0a903fa6dd3ca7ef88ec3792f60cf8e947fc64fbd943d2cfbd4d095a01566148", + "aad": "", + "msg": "6f4f60a69bce1ac54877c7f08fe53b5fab8f7e1332ac28dbeb32e9fd64da41f298737cec57b547ce685986701a0bd3dcd969353ca5e37ebe92d5874f244f42ddc137d5659bbdee509fd5367416425099a63099497511fa3e1a64c7c9844fc7eddbb2833ddfebda1e37c627523626f5a17a", + "ct": "59093c8e4b71367853f8a38190483e6974f5c3aa28240debf21aa2ff470a6fa073496f4ce59430baa09072d646e0a1d40960260d758d0a343f8f52a774edcd0dbbf8a630e0baff7bca7bd48ce3bd3e2908317ab321f876042bb14ddafda7846738ae9ddbe11c742561ea7e195493bb4d78", + "tag": "45448b67c17bb93a101f34a11920da60", + "result": "valid" + }, + { + "tcId": 125, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7d5fdbe06d0af6a60cb81b9c78329c09209a84da6f0bd503299ea637f56b2003", + "iv": "8320a4e6e01b6c397bb2b9a90382f34d3ddaa31d8c70afcc343e3d12aefe373b", + "aad": "", + "msg": "b5f216d812126876e54b230267974affb5bdf1253b91fb9fadc56f6004bfa54aea611109eb2c56026220a348d78f1e7243022c8e384c9307915242299a7000d4baa4b4db26841f9b69a2d69c7edd3e076e75465fec797e0e40a64d52d02475e964d9a0181ea6aa23479fefc74386888135dc", + "ct": "25e282980810afc14a59892accfd7e053f0ca6adfb61fe816456301359f4305c07287ac304a6cafa9e873cc5b59bf1824cf06c47dec1cad62d8bf91b195ef8bf912802ade6c0cde9928454b1f8c1ee3fd2a6a121cb95bcbad8eabe0287ecc1a4c80aa2e5ab777a39d3e62ef3b061a0c0f971", + "tag": "ac875eae918723e7fefc9a2b7833676a", + "result": "valid" + }, + { + "tcId": 126, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8adf96a94fd1d5e3f966265c3456e5d7878c03f3322400953303b9a726f71148", + "iv": "e4b34237054ae3eeb794bb10c46e9a4fa59d1d8c9578b3eab9855ff26647bf2f", + "aad": "", + "msg": "0c2997afae25ec57505a03fa81d6463c708514315f047d8355933c8c13d6d59caecc9c1215a1fce62d2eb1f44df08a5cb5fc88ca30a6f7a18d9dd6f376c33889288b2291b582141619896a5325498df9280ff88976f28e17da7b97b5a320490f0b0385fed41ff3b01658b77dd577755f19fc34", + "ct": "1d216366a08cf63c92e79849bc01f315829eb9ca473efb6715a9908662016509dc58e40065e455135473e4ce2f0d821c94612d801930fc11295d97dbef9556dfffbe88de7f141af135203750c8b480dd1145cc283677cf65033c14a4cefd125f8e9215dafbaa44f3a050d7535b90661dfcabdb", + "tag": "ce4afdc7c4e6ba3971682e00b5fdb23c", + "result": "valid" + }, + { + "tcId": 127, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bab7cf0b373b40a31dd62bef56ee5766c196a5b59ee132ed7120596d98371426", + "iv": "8b3932c5cbba99a0dcca4ae57f7512122ea1c32c515aa39717440c3ca1909f44", + "aad": "", + "msg": "46d9d827fb6eb8d6b1ca2b7e3e40a72d9e3a8a72034e8d394ac2d11fabf8631692bf52e1d5fa804ebe2b2790b1489c877c2ab5e3d3d652209d9e9307804e2aca423d0cacdc567d66faf8e1fd35e24d67c0d51f9fac9076c05bac40760d807de0aee2e65fa0569dafc2b8286310f79dffccb4620d", + "ct": "4554f0e67b219b1de9a01656c642441221e9bd1be0dd77687a2bfa9a0eacd9451d95b817a82247918ce5bf9b2f28cb699178c4535d935f08383fd5c345e24d2df970cbe7d949bb662c8f39ad8cbf65f6a532a3b5e89f5f5207380532c697ca1feec466f7f5e5138bb7ca2f16a588d0462c01d0ed", + "tag": "5f39e1d2af3985000ab3959b77109b6c", + "result": "valid" + }, + { + "tcId": 128, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0969bc5d1156948a0f05df7ca352c52d763b987741b1317aa1846cfe6940cf83", + "iv": "3691ac63548ebfecf5fdf637a47e9b42e2ad1c55db1766a53342515f00cbc70f", + "aad": "", + "msg": "282122103266967b77008d246848e65a694ce3f62d06b31cc8b83a6a9ee6b513bf7babce54fd5485fd45c4a7b682a2f427462965e0e0b8240efa22992a2b09205ed84a12c27ff50418a52811d914a69e7dfcc51c29f49c42eb0d3a8bd394b5f2d89c3528455413cb512b1193d05048cd8149793977", + "ct": "87330c6262fafdc6f6fc5a3a4d3b7b21aae80356f512d8b61245de9e1af3a74677398a574ab8ee014a0448b8ad3b94926cace75dbd97cf2e4e43b4c94c7246f123f7d518c9de89e5385a7cd59d8bb0ae08bfac8805f1fc0e10584b82a10b4140267a8fe3bac5e17b6e7fbe0d1b03d579abae6f9b7e", + "tag": "c2536e513370e7bed8afd15b3d215c45", + "result": "valid" + }, + { + "tcId": 129, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "29f690ae60d8d51e4a99f797a58300cd7bb2a74ff70b19f6d3ff8b161475e38d", + "iv": "2302f0d45497f5ad053063ceb15358e583bb48008914925c83a36c09ee096634", + "aad": "", + "msg": "f776dd76a3e04ebc708c142df17a01fd6d46eafd4db84abfe5f9784e0772f258b7e9ea4a4b44469e99c7eafb628af253441485075bb44512c452fa8a7142ab1d5d0e40fc51e1787e74c7485217358aaf68dfbb44e0639a084282997a0b4b2514df2db3f0c34c5f04c48d6e3a701ef7ea8dc9b2e632ca", + "ct": "c3a4e1d0ba58d94f8ff9ead4d3d26e9069fb2b2f1711f20c21cc7283062f1d71dbdce40c513c2285be781dbcd3f780e6de2164272641c483398305769527a31179907e88d346e4974beb8eef9c34dd2a37fdd423f4910b5508cdd26e2ad878ea5dde76e1d64248ddadd5909ad8bc05159e0c3f7ae88e", + "tag": "ecefdc1c94dc19874c3e64fcd1d79a11", + "result": "valid" + }, + { + "tcId": 130, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c58e6375073a85a7c3433165d9b0336bff592be69df616cafa66d8431de75327", + "iv": "c50032dd356bae975a19f71dcb5dbfdec5cdc04826b7bf7b6ccf0a80c716d39b", + "aad": "", + "msg": "a0350e522dcabcb96d403b5943d0f0269f481a8f887acaa496482e3c87520efd7fa4dee46f112dd7185a76a0700dc9c25a8eacd5e44311116287cb883b1beb4a9e961c3e7e09172c1e2833fc9af01fcb47408eb605350b155ad6dcbfab9f4da05c4040ac26f953732e3ee7e1b5c2777049005493904fe2", + "ct": "55857ebeab6a681dc38d4ddaf0822a3dc69bd8288be34954717d18bb99afcb164a0024f15764200ccb5160b819a9549ee404f4ef0b1311706c4f2781c6d9d1ec2869829639c9586a539a217cf83137839649ef720c34b9970a34cc11d13643a025c26df96b0d3b3f36d0f7e6327834ea0425253c701cef", + "tag": "c5ab4cf6d36ac935a54af464a3cb6c8f", + "result": "valid" + }, + { + "tcId": 131, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a36980698943fe4e47744ba17e3b75f04843349d0b591b7a93d4c3df0e950129", + "iv": "60ae9bb6a777c8d4c223967c8d34fe6e56f88f63394914ee54116064dcb24640", + "aad": "", + "msg": "042cefca6e7483f18d5e13ddf72cdc2e8ba3aecc3a2deff248c56cf6c09f1053464b9c29515b8f938b5e8209831bb92104a5c5f261cc80d3dc25185758873644272f67c21c93e3b522f14e70c87679f8b98d4387e40c669f9d0b7791b2a9e16473bf09bb0b3e8f6f380703b9ae45eb9daacbc0f57034d257", + "ct": "9ca904a497754095e48c3feb6625735b5eb134a11a3a3de57bf245767f757319dbdd3b5b6210fff6590f2a0e070a19b41afbd2df7a9914c038d75449c6aa95a1f7390c9b462857b7b93a662cbac561f50eabf73c836ba93740160ca837e03f5cb136aa053e2d6fe0dd2c3317b4aee33de6e3bc3529745040", + "tag": "83148577dfc67f94e14aad34ad7bfd9f", + "result": "valid" + }, + { + "tcId": 132, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6ca8e672aa1764505d0512c08c44899f37cdcdccc473dfac05ce83ba216292e3", + "iv": "aa6afa8bd7f407014ca576bef9155ae6f1be97763bdc587f1f075c538aff0183", + "aad": "", + "msg": "0a46dcd546a4d8742b6d46cdb7a8a6230ec9a07fb310384618253ced374541bd9551c7786bb0a421a8c43462c3ce624a01f289f7129afebcb78908ac3acaa4d9fa23656f0eada5e0ceb8a543e561aaba2cfd542a35a305f25c3aad7e9496e370c74b3cd28d6d5c9591a1c495813988c906d5bcf9ae20143b7b", + "ct": "9f11bad65d28f5fdb543ef759777960e4eddb0546ce220a6069550284364ddafab05ed770d41b4866858e37fa0cf87549a691564a9ddf68fcf41e1ed6f2273fa7460aa215b954db20afca5867aba7914524e1bb14d76cc24cb62fb7814a6ca2ad0de2b6d32ba9d6fc3a24c876bf3d981cf5f84d56f1ff9fe73", + "tag": "cc26e8583f7e68f8cbdd80415daa4aba", + "result": "valid" + }, + { + "tcId": 133, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7597400263b230b7ecc4d6d06103dc43ddf85e51b508e8d27d9d10a5d6dba9b9", + "iv": "9a73aee98b1eb3073055c121b578e0ef6c1477d22477a70ad664cacef130f901", + "aad": "", + "msg": "ba0a9df71d912afa7dc225ef4ebfead1ee8a25ad40279ac9b1d29f37ccaeb809eda884ec6716d1a16fb015bdde948499eb84ad8f39267719406a5fc79ef606fd915d7ab0e6ed154272e38c83991a4119e681923763bfe34bfeaa7f57b1505447bf55d5464150d97bd96c356c3e276694a3bc942251c421262c0d", + "ct": "1eb355ac82463c0318e03c6ca7aee1a4438d493b928f487daddcad3a430d9cd5b765bb3bbad52554edb6294f394c3cbbdf310cc2a5444f7d421118fb907cdf5c022bc15092851ab77c02fb42175bb54bae21f77a03bf230dee4d040a75a9b8fc261c30967d2a6996f4889fb921e205e72c2b4ae53cb7788a5fb3", + "tag": "00bba6e1400ba228a9c9f437aa2bc94f", + "result": "valid" + }, + { + "tcId": 134, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "50ca1dc0fa32e9c1f21caeddbe82980f0f9f96a06bf500c8ee65cb11ff221f72", + "iv": "9afb2539e3c0bcecde70f4d7a6a60ac2198d4919528f53e202af623555314f16", + "aad": "", + "msg": "fa24cd79595321bc3eac7b047872df7a2c58efed1b12499242fb9078032a81133cb3d22d514ff48024a5f7a7531e23f08f7e713c5fb5b7d844a39ea0bd56e6cb3ca80b8339a350d5f317c9b2bce2f0555508a8a9241108908a1818ecfc530f564b683c25970a3e172cff8b8993b4b73f96c19a2cb09a3336e8ace0", + "ct": "a1854338f61e065cdb33e790b2cba2e8e19592d282d8df85217b6491d176dcf6b93183831d7249597a237d3b0d5acc93f5ca99da51f55133f63a7724a5e094ea6ec4ee7bcbd554d4ae088d44ca02ac708cd640fcf31104661e51e84ddb92da6f0e6286450b9f67cdf73ae7f49b244c42c8a6ac3c2af930230207bd", + "tag": "98ee4518429d5e9c0d2de8582dfaec7f", + "result": "valid" + }, + { + "tcId": 135, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ab32de0ded66f67770c839bc1463c5f7bf8bef8dc192c1261291c401a1864aa3", + "iv": "7b85b58a9220c12c28a1c6f893cc639680ec14dd8ef499805ce0e71a5df7ac34", + "aad": "", + "msg": "7f9347a68c1048ae66dd1f1ec1537da39496d0e3db30481181c0dc93d4ba1cd6ee701cfbffc45a178a6f0935da1da065e5e81a3158d0bad050497a4071230a6ca077c698bc72609d773c9a13babe351222078ffffc6ded576c2b9676da2406b7c7462fc9556f562f5cd4258b91682b1c73a8ead6f9fc03f125452109", + "ct": "540b2536acefec71dcb0d536f8098afdfc208cc2cac8e5436877c01378c270f97b6950f19e08d7922ab6de13915a27304d47b01685cccc9d63cde8689befb90239fea4bbe15a184e1616536aadb36f02de3f8c241be52906e3a2540410754510e5a7d355b915426f04f4b6691a5399eb45c6b87146149d06eec0c6aa", + "tag": "28c75d51d88ae07c0148f4a5579bafbf", + "result": "valid" + }, + { + "tcId": 136, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "65b5ffe468047e2055ecdb129a9325d05fc1f9413ae80469b32e3f1b161f8d13", + "iv": "b64df19ae578f99ba016ed0d26e2be6867ca3540d3bfc42bdc0aa1c132e07894", + "aad": "", + "msg": "2b97bdb8e0688973ea99d277eb82984b2fdd9a7475ebae8907b6767dd9e002d40cf1c771a61541919c641aed4ae74fb711b0629d792cc54b2c738b82583d25ee20729ef641fb9f15d2a17d97a32158e06c5dbb3867a89104add1948963592e6932cef815fb0acd7d76621d066515865809f23d71792d9e718fff5ac7c1", + "ct": "b58845b7983057bac87b6b30ba06ffcd898de959e0429e0da6aaa70282592d8b0ac08bca84fc8faf4126f4c34849c87071f68c9232fcfc2060470c2dfb3f8c2ad7f293aadaeb75fb7c81bae7397bb0c6b0ca74397ac965ee96d6b50501dfe944341fff1edf04764cc90cf5e843d7f978c616a109db92879217fed56c5e", + "tag": "4740cd747877d983ffd7e83eba3085ae", + "result": "valid" + }, + { + "tcId": 137, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9b71174bfc475a2fbf95ea28902e501fd4948a18935675cb44ae7af07e85d242", + "iv": "8d1d404021623b5b5bf8afb888675cc9b240c4cd835dd61d8461acbbf9454e0a", + "aad": "", + "msg": "7aaa150b616ae5a10cb1f8085d0d0f026db9e5af1f8026ab1f525f9a67c0445009490ba5f5430ad44c0ff3c060df14ad209e8129d5e297c1696129be9eb25c035b970cfcaf975df806815e2ed67cffa1a4a9b1dfcc3fd4f766865be8bceb7acbc74e3d303719052803e86bdeab568126d3d8ba2cde9e4687b9af626da4da", + "ct": "a00983925bdaae435b3957eba6ba18cffdebf4cce817094f17061c0f190a070586ab9ba90876822478e9648e720d95222a8a1910e8eea5a578ae549e39a17c031f2c66bbfd0b5b82f493b4d3cd2dbc49cf9a082f1ed3ccfc0d3daa05f8fc03f5d9e52aaa9e6b9be2e6629688ff036ecb34e7645b96eeef3897eb33ebeaa1", + "tag": "9e91e2633a807dc54b62fcbf5b342da2", + "result": "valid" + }, + { + "tcId": 138, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c28e4999891d80ec8e2651f49e42be13860584e470208df98cb0708cba035435", + "iv": "9eeae86b92388a8a7abfbaad52ed5b2be19a4b490f4ac8cc929c12478ccb4468", + "aad": "", + "msg": "c8abf7adf6869e0ea1c958f110edac17af6c42c21276f8b62a58e60a71de676b99937e4667b25a9b1db20b4f2ba38b7ba8838c40e80e543cddfa85c976876fb8b0f8e50d0acd4a340470c2cc36dec0ef88723cd9931750e7096251fa5642bca05fd2b2d7e92d71d29c90ae70ce30962d5a18085437f8476f94d9c34bfe5937", + "ct": "7d9e144a8d1180d6fe333105cd0055d2067eba448b3244401eb3ea57287a2254c463b1e66a19a67d29dce7c6e84dcd479ced7551dbd7ae54c04fcf114f13dc717bd88fa47af384217e785cf29a1ab6dab42dce2b4afbf768035269f224599c54559ff985090ed77014ca49013d33348e70e269180d1f50d5d7758cb8e1d73b", + "tag": "dd660d8f8763724e93bcd1ee9f19c92c", + "result": "valid" + }, + { + "tcId": 139, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e325b371ed59218d8d2582eee8e40167bb1e4c4df9f148dda42aedeb4cdf5c68", + "iv": "26f8636b2a54cfc37553533b97c26f96b7ae2ab8f26ea2740043916d261b83be", + "aad": "", + "msg": "54c191502046b23b714e1d40157f3637955237b670f899631e26a4059170868f96915d52c1166ac1e9c906ae065887d1b03e0ff4cd53de646ad4a626a4dbcddda9b895ff325ece8c8bce44a479b0f115066dff942010e1b71895b0c0aec3e6f71fa8f14203454ecd4dfd03f8ce987432b79f1e3c1238c3ff915a0ae8d9145cb2", + "ct": "8793d942377e0fd2cf0bde67ef2fc99722e72f40681552f0d11ddc124fe8c2441758150373f0c5231d4a2151200ed933b650ac8db644adb4d2729ff0a53ce426fa0878b950ee3ea8b0a8c8c440988cedb55e948dffd562ef8b3d50fcb2d5c0a7d9b0b3089d309122e5921c8c9c8778f85a8d52d975553be5c08f247dc2cada3e", + "tag": "66423a2e67e57fee1acc54e1c995295b", + "result": "valid" + }, + { + "tcId": 140, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "44c89039eb9c20a10abc42909ae386ecfebae2668b00f5d0c75111a181b3f33c", + "iv": "2ce9df993ceb13acbec1b833da42572ca1f60e2df9b3cb77c7713fa7b5ba94f0", + "aad": "", + "msg": "6a9147c2c7bfa01f0012432dafdfe6d937b6b2f891bed29401a3f253a328c24633bd3d79a98b38104c13d8729d68d221311ca3926616dac8cbc926569d5e82cd37644716961fbad22753e49d9720df378b9272c6445e1dd82d7153f9d2ad34da1728eb345e97f300dbd6d9853c2a61a67f233dc6a45952c47d3922dc87da1f1c1f", + "ct": "0abcb84208ce0f929eacd5443a85e53572906464eb32db639d6b7b86969a637cee6feb2219d1fad74899f6e982545e246fa9b96b6d9b4d73afd1038adc9dbe0a5c23819a79058bb13148918a81aa10c2ab76c6525a3ba43c788423dfbd49ca3de5dee226bd2cc03be32dff92451ddeb1f36f45063480e614f0a6ffbdb03b19708c", + "tag": "d467f4a74e2edb54e595f8b0258a25fd", + "result": "valid" + }, + { + "tcId": 141, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "40840194bee4d7a96d538f11da4669a21b8fcb091e8995b954aac135c89801a7", + "iv": "6534e57faa8f54382fd88d0550487be3f7c5c7fec2225a6232ea9a21618e8250", + "aad": "", + "msg": "5d47e56252a43295b63ab2e22805a21492e100b3e92e3ed1ed6c9c66d2a8dbc3836d7b8433ced9e08d49f149c16c752238c52fcdb2cd010e72b9e1cddf219ea84ccbcd097bf4057c86c06cf998d6735303e2aadabb906629f7226502af757291ef66258d482c5170543f5dd5d2f5fc05c389a4171b92d3bbf19e16a88aea42ca4136", + "ct": "685c6d1af9f67d6853867a10c8cf76f631decb6e30eb5a15f4e305f4134c8f4c5ffe7b30f5ec3b1be79f3646d4cb8b68fe99e6fa342498e03043f2908d10b4711c7bad08e1f96d8813a62d240323efc2667bf12233d2b3580e6524a064ff685f8ea6a094c9df2ce9f3f72dbdf6f9e61a4927b54e718e0cff048e1040063831935eb6", + "tag": "2b5d6348259489ea5c0889c86d1bfb9f", + "result": "valid" + }, + { + "tcId": 142, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d0d94604aa4c930308a61e720d0db08adbb773f61a6d31d9d8b5133d926db13d", + "iv": "eaa24b0ac311ffc5a2d2bdee50e6c27ba9e97939b0548260b2d32ac99b14c137", + "aad": "", + "msg": "e2584f9b333497716c2d300258e0e072e002b70a7f9053777d6b62fb93b529df2b4540b1d598367f98384de4e2f3db0b0a1bd95eaf37bcf9ea9f4e5b4619241b8c89118dee5d3796f482ec144b9ef6cd69978135ee32406ae10349fe652e1a27581f497070c54cacf543938ad9b5cbafdbf205899e3c9bca40832778359b7599117cfa", + "ct": "43b75fdcab07b7ae0c4ec9499d4cb51065af30e777e7c6d77e1ad5f6ec45c35b18031c2c62ad800e4a6be9a430ce0c98af954c64f684230924bc629f9f10bc1341aa4fd6c14b96b454f456b8fab69389469173019485c8011da69f7a40f29849957efa664ed13edddc2c6cf29838b7f9239273b24cafb068c2d15eb62a71136867ea71", + "tag": "7a913f7d9d438910512b5eff1da0cd05", + "result": "valid" + }, + { + "tcId": 143, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f5d7da52f16544fed21e1b32ff694fb3c2e324abdb78b81e8406546c746c1df4", + "iv": "43eacb632a8da83932048d5463009d54b3b616eddbeb9eb1f46eded6306de2db", + "aad": "", + "msg": "bd6dc3d2dc940add8cb90c8182e9eb027061ca065f2c82f3a0cfe52ba8884c16ff2389b41e54df25e2124294cba801705d244ba2f80128205e34a645a490562cf4192eff77c61ba293765446e6cd06b9a855dcd50e39fd20816e0341892eb726ad5949db9b7498e280e50e4849699998e0625938ddecbe3e79da9700e11447f5158da8a6", + "ct": "4aba068807b49aa9c2fe48356abe7557dd90aa60b956a6f6dbe7b37898c69f6882e2b6bae42263125c1d94c08e65aaa0de47ec31fe5951c84427cb5a036f57f895f1146c8378c0051b5e4faeee43ff790ce7d877ad5846321eb32861c6df5f17f4850d60135dc2f3c0ac6f509c5f9d2f9ff1179ed996ef6802febe531ee9f497623407b4", + "tag": "0e83cf55fa73224f1cfd4c23a78ae820", + "result": "valid" + }, + { + "tcId": 144, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6ad30331244aa5036f50b92405090ab9cc53a56104f76abfc300d24c5b3ef986", + "iv": "e15bfc3009fd88eff1421b8a3ec9e30e858ca82eb6c9d8896398230403945126", + "aad": "", + "msg": "42666eb54e1f78912dabf1807b7cf66f63d0b0eb5461d7f85a8204a083a16f71f58d0eb245eb6e58d6fed48950bebc5dc960391f2736b27fed540402d46034b24d54145bfebae6998a9d9254a7feb3c7fd998516c5235a0f072e2c2648e362fc4ea455bb2588d26fdc09552ebed207927ef175ce02137bc318369c0fcbfbb8e4acc62ca1ff", + "ct": "a1d9ae5fefc26ef9a2d059cfd74037a27cfcbb07d328e17c31eb53de49a677a5e705469d801e414ef74bf058826e8096364cd0f0c116f9f337532a6785542af010e385bca949a7e4647b2bab1e45ca04394579acea71affb7a058e2705ee7d91a3b726207268336d5d51140f9501b098e5f09fc34c49cb06884dd25908092e468e44fb7a99", + "tag": "5c619bce9d64ca3fff173b917c2abb66", + "result": "valid" + }, + { + "tcId": 145, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d52b5444ba851a616b5e142c7f5976fb28dd2973b73a75b5df704b409585fec8", + "iv": "709c8b867c373140d1f11f1c74b88497a5a60979dd1d036ca08e9bdba0c3d301", + "aad": "", + "msg": "757ba48a63f7e38277fa8c6f481d031e6e06b8301e8dabae519906aec241938e79bfd3b33354cf2d11daea6766cec6158d22c555a87b98eda940501199f100e8a69547ce43360830105d326b6308a772bafd2a882303387000d53bc983dd39ce64af501b20c33cabec70f09ba3b321202ced0010cfe3dfef8dea3ae1d44764d17baf0c0ab226", + "ct": "56a195c8a3c6b11feb49c246138ace47516e69e63d316aa4088ee11b023a2ee46e581f9c1ed427cc5d8c21eb5da4cb23b39b62fa495c6f5f4d9cea7423e13d3db60719339b26f8fd7a42b94153ede14d4521c186b1d2726f7def695709440b070a99467a998e65baddf86aa79971711dc3db59b9b62be9061a995f7f7d9768692a7ae3e07f09", + "tag": "4ec572ee2d2689d588db8dc28a3efa91", + "result": "valid" + }, + { + "tcId": 146, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cd9c3316169837f38ce58ee692170a5d56016aa92778edbd2ce14d7566b15f32", + "iv": "56a90332bf2540d4ebfc3ad5d28acd8637944708d58be6e0e976f90bcc07b1c1", + "aad": "", + "msg": "38eac56f40c3168b893032e30a86e757ca843a128e7ce31ee75d3013e8ed1d378cb38fd64a5c0925b3f7cdc787e5a316c8abbcb88e496e85181973db314372a3935a97cea3a437c3d1d35b552461c950944e4621e0007b3f826197f80b2a3ee738586cb0a1e8103ad59c0fdfee5c9a905d84885f71bc5ecd088d712474018fcbf25e804ecd7f52", + "ct": "659cbb7074bcc2676888442b82186ff703a31afa0a49a739be9db35e16a2536dded6a900456c695dbccfe3d4708f66c80a1b4c2e85c83f8aa3bb1800213010729895cac5c9aac2c90361a3666529e67c32e1b01cb0bd985457d21aa92d5da24788d03f40bce4f44885085f7cc04de279d1259218ded5060a79e8e10ebe3cde3aa2875c07f5b86b", + "tag": "b23de3d27d4d16d78603f39b8a2913f5", + "result": "valid" + }, + { + "tcId": 147, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "00070a83d49ec5a4dd7c369d94b27a4d02d1ac9ab5b77b4194322bdf08db96a4", + "iv": "23feb0226737a1b00271245834cba2d56678dc9476c39ecbfda5dede17e4cdf5", + "aad": "", + "msg": "f8e40cac4aba2cc4ac8b6c5732888ed11e0deef04543f0a6ab87927e2ee993867161a66f91a749a629ff0868ea95687926b68dbff84242819823364b605c13d5e478ec802f0accd099ca395bf518a41730197dabf3aaeec0f002ecf1eac63c1386a0079864fabf883c24b43a3f68ffcd2a7800d995542d313b3af7468d7d4e2214978818f8bfc752", + "ct": "631e3b99a7285ca1c8f6bdaffce5c55f8d78af5d61b23a22b85f149bdeeac75d00beb0352200d7d043288f283a0b22e724fa1e20394df3ee1006a4f581cfccf85e68ac3c78f17f9cb12594ec06841a15a34c7fb4174a0953f9fa64b26989034ddbdb57e29c6614805192272a1036f0a49e2000413586d1d814e8ed2105a1cf19b7770875085ca9c0", + "tag": "200c35793cfd489bff1c46e587b9c069", + "result": "valid" + }, + { + "tcId": 148, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "29bbe034557ca009f94a0d84621480b89364c089b67b02fdfd0672789f4ca1a4", + "iv": "ef4bf5ef0527f45df51509c601c8bcac6f5d8c906000fb1f00daad6ef148cb1f", + "aad": "", + "msg": "7f579f5838c44d718044176d50e89cb52131d7ce6d90cca5a68532465c4c303a0a5920952b7ea13c393acaf5748ef606f44f1222ee00bd383b26ed388cc199163f6905c4d3bf9deef2f31548f7dfce2578962bb4c5b82003c812eaf20e8b1a7fe1b84d54ca786f439c094bf1b9f27271997aea6043a61f95c624d28de228d78617e470664453c0d863", + "ct": "6157fc024ab3448567ce0451725f364218933928e2362e606d3fa0dc91d5900f108a394e2db1d89d0a223ff33edd542c20762a11e7d3bcc23318b4f6bb083892a29183b7eef5e6cb6aa176ef26138b8c9ad90b693824bf6ca9b8167f5431bf7576f07d862c93f7fcf8551d4a3f92f20f014962764a5e4db353f6c3edff32092cf2ac71975a65af6471", + "tag": "ea8d39188270e64b385d11d73633ea35", + "result": "valid" + }, + { + "tcId": 149, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c6c0d4a8989cdf8a44bfee2eb6d254843ed5622dc32627ce7cf362fedfeb2c72", + "iv": "a6331a09be856a79cf2f23047ff8210cb087b34de2d457e93a9531bc1919a3e2", + "aad": "", + "msg": "952eed899de415013a3dbc6a6c2dad71b701df448432b028e75d3d1a4443a453b55cbe091fab4ca2735e8a40b027b7feee07111b12ec2f2ac6b5040467d0f00687c4f0d86af2a392ba368c4392f71453635b57c270d796a2da574a7234663fc43199daecf1da7e2637a36b478c1902bfd86bed24c7cc37b9eb7af0e3527fe65134b95494568a9355e878", + "ct": "a1a6bb93c5eceff4ac16bd4e0d7632bbf79d5341ad38d3603f5e7e24c5980b1b4c6de6f4285ee39dda7e22f0b81274edd7eefdc3cd6f99e21e92f1a164b5b10a0d69804f914c0cf3be21aff18bb40ebdf210a713b6a26b1ff14b8743e9ac7964a5c00036d699a91507576a549be59bfcca5cd3b3d3ed3833fc446ec08110ca9d8299559deab6ccd599d4", + "tag": "1ae34260c40a5f6d3e42cb8e511d2c74", + "result": "valid" + }, + { + "tcId": 150, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8ad84edf5cd8a1bb19b1c0362c80c2c1c13a7301c34290643be835fc4cec4f72", + "iv": "e4f80f686b31dea6c76c4b0d0e497ceded5df44a5efb1d29feb726569a55cd38", + "aad": "", + "msg": "4e06e064247fb0cb32772f88d525d8cbff9ec6393ba6ba2d0a443f3dbbd4026a4e7888190181efdf27dc1effc7c8026e9ffb2eb2982a694b16d94121d3595b0905290542217046129ec25717e8f607a56fcaf7fb58246e6c2dac6e13c33802711526acf81c3d94d508dfd8e459c2d923cb40e5c99537470464c151909aa45ae559a3d5c2095f8af3783bfe", + "ct": "da0c3a1fb509cd16e0d46d7a5d4a578298ea6457b22fdda6282f120d47f2ad417f5d8013d5c481b38e8c74406ce54eb5c791e219f11ea0af21acd6f724e408b33690f493127480dcf85fd73f205ccb0e0afa9b107e4fb9242803b931e4e1b6eb9747dbe7c48094b05bdf6d6934466de70526655411a35721cdebd8ec268973d5d965a916880270f219764e", + "tag": "dc262d3391ff28ba5d521f34a10d3ea0", + "result": "valid" + }, + { + "tcId": 151, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "fef769098292fad97a9aeb432a683f62faf3e3baf746dbd1e5816c7012b33372", + "iv": "2e3b5995c3c3bec824f3ff2f65a9e74cecdff8cd3511c8573ac5278a7335d1ff", + "aad": "", + "msg": "3dd5bb1ac4b1a05257dfbb7fffb0fe6c7f0e0df2dabcbbcae53f58de9f9213fdede3a33fca0859cc3c7fcc69a8d49abc1918301fac02692bd83ce935d7f5c6acc918c0c5f237c48db7c81b2a517f7424a55ad6faaac0992dee3ff5be5ac87cf037aaaf3bedc580cb6a7eaf3157a4a74adfe4b9439be56b0061bb3542550308b0ae5e676d40dda7f80ee6561e", + "ct": "1a341c0771e815606f43b2acb34de0abda10ee50e1c66bf3b824d2606351fba7a4a2bc62b4865ab78786c2e044d81ffdee657019786006d63c1f02251b1d6656e712e7dc29f02e1b0710d88a916a5fb0f557cc1a7211146780288c61025a21879838e55184c6b1ff5eab3e5949a134968217c5fcd9b7099387f7aa7138c72e493f7edccbca134b1dfc2d0845", + "tag": "4989593346da49c1bd31dbfa81cffd5f", + "result": "valid" + }, + { + "tcId": 152, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d0ae8af9b80c94ba9b45b685143cd04618bc60d61daef23c3bc74a418aad58bd", + "iv": "cdf113f2409239ffb41fd05cae0f62cb5142aa74543397712139504963c9054a", + "aad": "", + "msg": "a91711a15d52267e904986447d703a51100d4a0b41c1376728a10b90fe810019c3193ef99de0a0c0f4f278c4be6a91c87e4724caaa32d014d6d17a50961c55f4e36242f859a74873047c4f57fc0893a8910a2bed5e3b7aa0c9d61708921d082484d0d93c0736abde2f24a9607eaf3b82dd14d52200c3aaa63d208929cdd71ccb9d684bcfda4c9760274a1cc3a2", + "ct": "a0ffd551fa76784f74b9a3343b15dc1010177f56d389f1ac97b4d92961e817e155c0f3d3759eceb85b0f338715313fbee67943bd6c34f3e6e19a4d541b41ed428e753f09b3924d157820462fc8571d1921cfe652dbcec599d52c4529d400a00b9ec2dd9a3d02eb600281a5e0908acb48a582b7ad1a8ab0fa28e65254fad4f70b3a49cfe106f3ecb071bbd57c0e", + "tag": "69df3c8e6d09b20dc0fd23437496ba14", + "result": "valid" + }, + { + "tcId": 153, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "66a76377e16e8c7c2e7e9c07fd9378683d4c482121084309d6404f107117c51f", + "iv": "b3cae3d0df7172696eba8793c53b10d39d82265ea9224cc11fd838a77894f8e1", + "aad": "", + "msg": "0378e0c59b8157c6828c04cfbe13e0e502c473ac7c629cdabc2f90a36b60d173f16fe16029ae7cf23eb1916942ca89022d232ab26b512edff4c20faa1d1f9a3cc5628c3ada31b7292a4a8c05c2d74a6e2d8a1103def0b64a7488902b685603671fdfe23b39d8e6009556bdb112f24bc78c409be7bfb667fad66529d4ea486bf13b6d5fb56ddc5360c08807c24331", + "ct": "914771caa1982ef04481b77dbfed3e16d44ec5a20d42c97175f69fbeb31cea93c15f1d7874e75a92d029f0e30610ee0a885ce53915bb37e232e295bfc84d1e4b9e0bbd34f5e777e8f8144d9621040a3d8243498477b4356e4e2987ee7ab85c21035d83f124aeba6895950163c986befe4ebdd9a197c30e09d19c65e314f502b8a657c5c528080e8a1a5ab2eb5c65", + "tag": "1e5abe53cddb0ca0c906cd8469247ae6", + "result": "valid" + }, + { + "tcId": 154, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a59ec4afb05d7a3951d30b27368d71fed19e47f3e3b96165598097898f36bb6e", + "iv": "d53acc93a0ebbeb98a9571016925a4281e236e559a84e3e0797a934847b282ef", + "aad": "", + "msg": "c8c837504ff27302fd807dd0a71ada20322f7cc416e63ef6255489de333e090bb913cd449e7f8d7b3b782a28695d8af7137e453b13a9fddf7ede77a31ebb8130dfbec6216d58b7412be1732ec0b16e6526b5779d067927e9aad4b9ada9062488eb5b90d9f5da2b3048e6f8cc4036873c01a8299acf57eaa37c44387b04ab6e374300a208befad7443154d939b2d0ba", + "ct": "2569bed87048c29191053d17692f7e8efc7c1a1698ef82039d0faeb3548acabfa1fb37a2c476e59ed6d5ab0a6cf4015dddb3865a141329652d9c08bdea2416e8883afe3b6d63b2c53ac980d93abbcb0ae4dba7fdc1fcbdf83c06d66961b920aee4a705e362e13760f48613979dd34232fec94d80c7cb1d08ddc1a3fdddec791275f4de6305ccc8912e1f5d58577ebd", + "tag": "aeac93072470ff9c447bed9d88aa4f5b", + "result": "valid" + }, + { + "tcId": 155, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9f498a98521b6e6c7fa357d71792d61fde9435de2bcc45b82d8f9c708d5254e8", + "iv": "dbcf757e89bddfda746331bd4496b81cfac7eccd3cb9358c85bfb175c1f06693", + "aad": "", + "msg": "e6db99e5b46f57d73a91abae78652c1ebe46b4a9139a74ec460ac51e13a19585322659d7400f86a16fe71b57dac4df32a7bacf72187b5531a80fffdabe8c896b6081bb1f48d0dac1c2aba571fde23b24590ed07f1de5f0883212c4c50e33e2695cb7d6e51ca09e929a3404e87ccaf0d6490f7010065a661cdfd3f49868dcb7486376fa9bc4dd593c6c5b0ae1cd39405b", + "ct": "8a1dc82aa250b422a0d9ce03c83d81917c86147a7f9a6e6a212e0876dad5feda5552c130c55fb01869a4a97e3910a55077251b848a3a18b63e49d8de1ab31a4a178aaa063cfaa1f6c829b45c5e21acfc304f763e7cbb7fcc2c72e5165f0e72b2a47b8ff244ed095866cd134aa296d6d786d2e8150f68334c17b9b2ee0a6981b744dec6c37f69620ab17dc040b150e229", + "tag": "d1dbff3b95e596311229a8c6caa91431", + "result": "valid" + }, + { + "tcId": 156, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "301dc5769988dedc7e447214bc08609f6985554614c017d5367a3198be88709a", + "iv": "a06a7e612c3521a1cc98074df767921d017cc6c4c664a2e0b7106e8dfd39d8e3", + "aad": "", + "msg": "096f423e8ef6a78985c149d07c923768d24e316f4b17474e70d0499a0c468e0e537a98c8839958df96da0d0f32f11b04b7ee3325ea83ff67521d59d31c8f89f232f973915382444dac4440cedd40cbd08a6e780605f6d9eaf3377594f41fc44efaa1eb9e9d141eacb92f0e25f5881a2ab946f946c93702a902ed8ecc40a535900ea3bc9d6ec714bcc82583f985b7c89436", + "ct": "0353b31e7a0832c5b40fad2e475a3076b8b675fdb5c1942e59334fd87bbe06a688ec45813e93ec68bb7cb56b0510f36fa708c4d4bcbefbcc5b136a4d1994d15e34ccdff8a4c9059db5c2ac295a47508342084becf8438ba08838a65efd76e31d0bd7c3e85016427cc3a279081f5ae3ec9a855686adad4a8d658f605869afa3f712c1a57ecddccaadce51c5028976485ac6", + "tag": "e033ea5397e0372b6a537bd2648462f8", + "result": "valid" + }, + { + "tcId": 157, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "77930fa50bfac094133496729ea3798673be9785ce3e2744b03ef4b0a048f539", + "iv": "1686342b954de9b968a63f85d638cef2a88a67ec1ad90ba5bc53cdf2336e6fb1", + "aad": "", + "msg": "d262bbae1966de1f3e218db40df8eaacc19c07bab7d990e77ec0ebe33509bba87e1fa57bd745ecff641fd15941e011daaa7a55c7c5fffb49b50f67e27df112b9f49f17b934b535cf3cfecdc85aaf3354c4575fac2f0f25cffdc3752a83e689f0e2a58ca4b228cc06877c35dcd2b45fa8a4c3252410f659e7fd962e1ed11fa442e46aa02a096e946e25731576ba1c3f07ba98", + "ct": "895b8061bcfa91dc8b7b629b7d3f7fef3668eb0b2c7d9cf7040ff719da53c1ab787510d894a2c17047d3fc2e8c60957482ce42b438787831516687aa8950f082e391e598187ad00df93438a6099b5512e66649587d517f2daa638453b6fefb0c5f08cd045545d38699443b4057a209bc9f479a1cea5c4dade16582bb2a9050329bcec8edf2fc0a724e35646c3bf3b87659d9", + "tag": "6ce00bad446748be59bbe682b8829401", + "result": "valid" + }, + { + "tcId": 158, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8ad25da7855aeebd230d02ca9a1dcdb72fff3119f5a675d6e790720c8dc4c5ef", + "iv": "f3a4f8d25877f28cf9a6b27c450acad23ab3fe0eeda03143f7359419260fe3c0", + "aad": "", + "msg": "7896db21746538186d8c7f7e6f2e0097e4b8029319168c6fe92a4fc4d5eb6ae9e74c00b3fb3a8ac5009c285e88617b2e71b8c86dcbb45ac9ba9da22223f79f0558f61ac4bd9258693ba0286e2ed1e91ceb7828d47eb1dde26fd91bcf10fa9fbeb155bff700acb5be92e17cc372027834d4d94c0c7b548899c67fc7a7ae346d63a7a52a789d80c7a88face21a6a3b0702452a67", + "ct": "773df8239ad2559676cc77edc08c5c8fe2234b23c433cdfa5586647e6a5b04f63d17a6ab36c54612abd3c0ee71b2fecc7ba495d6e362382ce18d461e23d42be27f3a982a291b69a814a22ac6077860c09719aab794f50d08a949fc2fb2d349688e372823d2d154b6dfaefa236f83c7ed1450b741f3061ffb979723a54fc81a2cd00c7da6d33de75441fe7d8d54861cba45df38", + "tag": "f00cf1fd4f61fb6eccc7620f81e02b8e", + "result": "valid" + }, + { + "tcId": 159, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "65242c65ac4b9e8e144bac57c8da4bd4f94e2526befca73c6efb5315baf63de1", + "iv": "2fac55c20f8ae550833c80d99aea4166891fb4aa121b1463418b29f04f6bb234", + "aad": "", + "msg": "5f73ada8cc6c8db28cb13ea666bf442f0400c4fcb95d9c1ab693327b4b367b90c94d7bc0ed940501d31e372fc5fdaa4f9fbbf3bdf366f54dad144a23a3ddfbae944b96ba54c96ab64cbb7a94e7dbf1832173f43beae7b5000d5ed0f1ab1c77590544b069e0d82d3c6a6d66cb8f6aff0e5637bd7f4f3bde3fb82aeb4f7762bf68bbc35d808be68332b500664da3971ec1216ff34a", + "ct": "c4fdd7bf76e0b86d1636a16c96dbcdd6d5c1e5c84c383981baceff3f686782abc5a61c1013ec7ca143d0bd7d6458bafc647288a891ad354c61e7ddfd5954c7b47cb6e2cc096f0f258fdc755136b3a12d10e4ce07c12a6a36ca5e2baa2e96118efa615873e4a052d8478ca4819ab65cd094db2ef922b7fd9357b73f5240c7d75744951c43f1d4bfcc3647bcb1f781cc17fecfa81a", + "tag": "945796b8f089876e5651ee2c1bcb7cc7", + "result": "valid" + }, + { + "tcId": 160, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a6f8e5cf7fcee60a17dc216a880cef12567e872ebc2d808b8d8e87f527a99057", + "iv": "4807de9976f8c0d82b7efe98cb5cd1cb889cfa16280ebd8a7c5d7768b06ff65d", + "aad": "", + "msg": "7bc2afc8c02ee88ba8b94741d1399123556581984b15a3e1be8d074207ea9d059981d69844ce6e6cbdd44e24a20202b161e480e8943becf3facbfb6e8a687f431e11b4d026c9bddd24d1a559af5bf8b52430dbc23b955e61679a768cf0268601b373dd20cc4957146227fe00fe130f0b85e2b2bbe36974231582065df8afe86d7e6501eeae27f21c48135a6f0098fc270897676f28", + "ct": "f458641bd495bb6c9146c8614f4b0b31fbc28fb5c22818cd9588101a5f493b4fa8d78ac65310c64ced03d0e6023c27c9ed507459e34a76b846629e193711b4db00b41ca97bba772c1d340cda2ab400155e20c686368f81dd0e9862868493bd8a677027faf05e88d06cbbe2cbf05b57c6d443dfc49a23afd05a74d71d3615106b70129b1f993821e6effaf6bfaaade615739b00a017", + "tag": "fa78fc2fc6b0d9456c9e97b1b67f386c", + "result": "valid" + }, + { + "tcId": 161, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7d26c0b48e93c78a5e8d804ce3341ac5f72571880d5f680f731448ac4d07f461", + "iv": "da33fa6a3b8b8d1a1f5b2880319a0aad87bc230ff939bcc89c69690233a558b2", + "aad": "", + "msg": "bb0af9168bf12a130e8397b5efd7cd3daf2d1e5c894b6264fdf8e57433d206d3e6a24e70f75f630ba4a39a8cfa6f298be57c25ec1af2e9c58f8dee1f536992648da237b71c1ee368257aaeaed8eeffda646b1640612c21b12104e6f408a5d477724a028386dfae247b2e8566f561c8951c0390f9b650bbb4a61d4e77b06d841d7caf4316fde4810cd0325f4c301866b8329c2f2ef291", + "ct": "a412a8263bdb99a90b78a5351a2ed40deac588e8a9726540d1624a468c658535f932a0369f3f8e9783ab4bf481ce95a65ae3994c7748c4b36a4de7ba572b5d5727ad5d57b241667826a51be5f2fc3bbdfebc2bc5653f1681935eeab3cd4d165b7d01254a58acc57a7470ff00bacf579913d6353f43fc8a4430da9caa7e3e932294b4235b683dc71dab91a8c46e31f7c6b12da22e79d6", + "tag": "c956ae223b44fb46fe2e1d6645185645", + "result": "valid" + }, + { + "tcId": 162, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "92d7af55546fad292304af255e8a26f867f465ea06756c06743f171b65ea5c27", + "iv": "a2cafa64ee4a475c3d9e474a5e17e96570eac98377ea37e20360a800503bbc50", + "aad": "", + "msg": "779165a3e7b2e0af17e8f476b357138f712233d4063071d5f1ffdc81cfb88317efc93e18d1dc0ea8ebe7d4385a2faca9ec19f2850dfb61a93e23cb25159a9ca48f42026f9dc6e0cf3efd13726b32966432edad588c5a4168dd5e71fa33d82eebd8cd5c8c13fc2769bb0e9add84c9573994c24ee32a848c851aa76b62b1f0ab140ffacfc53a50f20a67805c0d09bcca5d68b21aabf814d4", + "ct": "abfb230d394652beae6dc66c2e933bcb553db390546e15a100726a047ae9bd43fcb692e02a5312a6e3bf662be5ce6b98493d9e1c36438ff5af7674afe85af8bff05b4a738d2638a7d1c4f7d2bf768defe386af0052b075eef4fd940fe5e3333f3573ef3c6afc1b78fbad97f80efce2fe176c6329119074a90f4e4bd0e428832bfecc6de474ba99909bebd8c0b6ef48258a4f99f0505c4c", + "tag": "5ad109ec32f99df3ff2b917c0822f3de", + "result": "valid" + }, + { + "tcId": 163, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0454b3f06408d9467b1163f3d5dbb30000f32ab8045c903962d33512f1aa6506", + "iv": "fb835444e7110bbf7c85f79d21c602c5f7d14ca01f2b830a2809321833a665f3", + "aad": "", + "msg": "697c91502df2102abfd93870620f6f857825be652ccba33663976d5ae4bd8dcef3c313ea60ca19856dd59c4026371f9515fd2d1ef0328872cb0b6e61a14350231c3ef16b612e2c6ec6ae42b030a31c6a00b96e69fedbad9f4d3ae41272a58bf05fb381ba71662ff7c4a27a9d287f729ff1ea9e117b667c14f61c36b109b77c13c7b351ef1369b7db4685ddb039ee1d96c5436e49cfb642f5", + "ct": "1d9ecac18348c9a41ba98c46516abccb70057c6d65ffe8a58a506e00fe4d1a330e89afebc5c4d146496da099de0c188d22ef24eab3babdf16cf716871f83a769fdc6da8f8e8b5943717ff2124ef9f8bd90958e0c2f539596fe37ef3212890f79c88a2942acf8d52c86aac98a1c008efb5ebdf36f56118f2e34ca5c69f1f275668036785908c2a89055a32180abcb54e57d720540b7f0fab0", + "tag": "98c50a50d66fb9d28af2615e2957f06c", + "result": "valid" + }, + { + "tcId": 164, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "877e5d547243778fbe6aed330f71e91097168b5f6e73f7138c0b2d0f352e7a65", + "iv": "af5fc0fc73f0fe9d7835a4ea743e17951c7a5af81940ac9f72799b6ddb7452a2", + "aad": "", + "msg": "9984f89fa27aeb39f92b0449414480259973bc543d06008da7ea5fe56b49c378bbc3a6230db1720f7d2f5ace758c8f28a73b8da04c3d7a1d8bd6d82cd1aba8459954c1c2373657357bca45f38a22d51879002f9457a239f48f022aabe94f963284f7ce0a70e8c13a8cdc5dcba682ec65f2dd5187102f708147c02315d06acf68f54cf5c8f9df98744701774ea812475747c97a38941aaa8234", + "ct": "4638476ae43be201bb4593d88fc7cf83beab82d71dfc688914b02e8a36b6e32c2bfa2bc97015b7d6270e816360ae09826aef9864d39106fc6644addbcf4fcf81d7cd4e5dfdea76f1cb46d035d0ac627fd01d4e449d2cfa2a77debbddec3d5b08474651a29ded5ffe9c912a5c4b363e6f623d85beab50594a78efa8757dd901436a8599601ca551c95722a2103dd79d45115cb16d9cd1bc1e71", + "tag": "cdbe26d8803086b1dc50a14ecfb04fe5", + "result": "valid" + }, + { + "tcId": 165, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0e38555883d6e637064eedf92f95c5657d1b46fe5f9acd09e2b9118b1fca6964", + "iv": "021b8eea5a26963134f3786d23eab28198bbcf9d41873d5adc91b66d87a6689a", + "aad": "", + "msg": "bb3c721655cde831961fef3625a73141a2311f5111036fc7be59194fc3d6e70bf99c138f88c760aa8ab62260ab14e1e0d274649c52151d36e126cf385444773e0f1799feb37b4bd707625b0cdc0ea46a9630a1806fa96da2eb175c1582584991904d5f9d9419774bf2d0f45cb6299b2e30918e3eb5018750699d51c11a048df102eb2a668e1574464e17e53b56d376baf862633e3810afb29180", + "ct": "2dfa10fbeba5bd043c808845321088d6eba1cead8db048f04c03019247c2d65f77d858c02d16cb0fdd0109e7e015cb9c77cf405f3b188ada49c5e8cddf4331f371e5973e705172178b16f60f97d4f56b875d5cded6518e2575f7c4541f981f4209243d3b691410b65bdd366846f4b36955e551ece0feb5b45734f4be9487e9207a0ad7712947d09c5f269eefaf9eaf59f03700dd8f927a05fad3", + "tag": "cd387927d18ddc72fbddf5cdbce67967", + "result": "valid" + }, + { + "tcId": 166, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5309848f4ca27ecde6f8d4ec77810ff18bac5507b4298df1dff7789bb7b5adbb", + "iv": "21f95cd18d26415b99cf52acdb09f72ce2b3eb2cb8892dc3f002483cba7c59c6", + "aad": "", + "msg": "0a8ccb7d214422fdcb1e36c046b1c0a843e8d169d018a12c178d84a9f8a2f4d92e04e774dd335df5d5397aaa464c12786dcbf55dc89b4126d5e413b4491fbf5a96c721a2fd53a2290c9b3a77f622de7fe59efd2015ef78659e293c1c2e1a0a02b6ca10043735a7e01b4460d712b78fbe54a7b4fc1eeb93a9c6a943be90b593475acfbb23b0dee901c49648210976051c16a786c15403692e65248d", + "ct": "21fdd4fb374f84db029c652f303148c8604e04f1cca14cf70292b5bc73a06c347a6f36a06c673e59e3063d24d49ada7a9f0d89cd1f945907ec341ed65f7e6ad8de1b12ef61ec158e79601bdac6c8829bca970709bbb67f6acdfcf0566bc6778bc034f344ecec4a1be05f40a5a20592cc836bb839237f9cb028a9b1f5fb57e7fa65f38e85ef50bd69ec83049f7b2f7f8525cfb30c4f3a62f56710c8", + "tag": "0a45c9b1c18d853ff153c8a9553b67f9", + "result": "valid" + }, + { + "tcId": 167, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f546bde0c759965f2af897026ae3597795b36b4a6c000a2bb71409c09c170855", + "iv": "d2ae0708c00db059bcb5dbb98be1345ab99f15fce32bce39750007e91e0eaf09", + "aad": "", + "msg": "9b1a8b868db1ac9d7558de1dd29f07ac73189989d591c08ac812b6ace5fbbe4f0932dc65d6d60659ffd4a4d970bc726f7d779d50aa0e04aaf9655ccadccb6b4eba6ce0292956fec5921038b3e59feb7ceba3c7e8b0de2c40617837f9a00863e5442ce64e6f9fe7f3893ed8a97b6cc2e20072d0ae659e8098d87eaa186256933b4417b930de39d9f6b738dbee6c9933eb332768fabca4daffd9f3ddf6", + "ct": "1282ebb389fa24feea236b22bc30a647102d564c8890fa62cb251f88e6fef2773e7e2748e16b76970e869a56bf1bed529636ba641ebd105c66f6f89a32773e408fe15f53f8a8e3c85d36b06eeb8001c7dbccca98b1ccf1552ad0351ce40f93ee25fc90cb20568f3bcde430878ff8880525ea4ea7e2399c2f493d1ee389b45e84b767f65cb31cea102dfa1c032ebb07e50cb87e81c1fb0dbb9cc322e4", + "tag": "bd9f561d76424557a60dbf3970e717e3", + "result": "valid" + }, + { + "tcId": 168, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b95d8caec944b622134bc8fa104980fa132bfebf2be549adab8c19f799bcdbdc", + "iv": "4632d7d9d62e4ea52c7e7540e58d3bcc4c89c58cfd9a8b2e64b62aab31362a71", + "aad": "", + "msg": "2c43567f6ea53be45826cc93931ce9f883120afd86a499d233163b0ce22da55481c10adcd85a54b768cf3d2e9572e6c3846c2ea00df0f61b74a4c71daca33e37d1489b259763d0e626b28faa892e55330669f2fdfa6ada55598db8921c4afa646869bd43e1d1bff3e535862967a21b381c50b1f0e262d0a9cf5d2667c376a46b226aded4d236f4f0a19fea2bb4173509f548561fd8a58edf5e222b3fc9", + "ct": "e51d2ba38584e09d45f9e2b26482903797b0ac52473cde1474b42b39183a7be808612c21964dd2e63e5e17040c78c98ae31c93abc472cc36a5393b54c049c6136892980bdcb49a35f7fb675b01da8b93d0dfe5d990209d7e07d6d2a7048594e27448b965ea020cd9a823c29389cd479ded3075bf11af9cf0cb1dfcfa9091f10370a5f3a986a283d20d85d350946402e8f7e6eb1f679deec73aa9d72e4f", + "tag": "142be223947b2ec8a81911ed0e12caeb", + "result": "valid" + }, + { + "tcId": 169, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "24eecc295729f4f65072efff352335c4d2e0e6a5b879fd8c810a5ac1958afaba", + "iv": "f6d088287d8c72e137794b0c30bdc092c52237942baa59257c87d24f47a0dc3c", + "aad": "", + "msg": "6e6181fb34d48d2a5468d5d13cd4bbc2f4e6e3f26c179bb5257c42af18b7613095acd4c2f588d60528f500e09230345dd732a05e97fffaf0f3518dbefd5b5a391e1de5f47daec85a82444541e5b7253d414a924220ab96965bdbe0d912dea7e2b0c92780f2ef68a08ccf413cf51a82d5f8a65b4424e76fb75ff418a655e9d08c9f23ddb6f8952527e1cc6ccaa3440b8d1d17713836100463ae5d78604290", + "ct": "3a5e0340de04751da514e8a79f0544c90f4f5746f811d0ec3651448a29d9703a206e8db83c53979d676e74e0204d84a4ea1a3380ac9a6b1aae9568b30921c43735ccad8b90f139feea2108992b0b78260cb6eb30ae797a8125a4169f0b01fda08e973593869d3df38260d9129ac06f9030e6f2f6a0a654cbc09e6ae79723b5cda9a76954a562d41df494ffcf2e6b01856212e84f531ac089ebcbc5418315", + "tag": "23ace2946e95fd30f4adf2d131b2265f", + "result": "valid" + }, + { + "tcId": 170, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6f251d4484cfbd7a45ce1e2173fd2d23f60faf5e8d1ebea5c592ec84e6ff101f", + "iv": "9d7c69049bd1ec684821b95324d18c10dac3fd43e0ffbb4d196da7e696ecbc07", + "aad": "", + "msg": "7f676e182acaf6e044d8fb215c52b2dd96e634cc5e1bbc8761e10feda32ef2f6dde292d99befbafa3d98d276dafd6a40b0ee70e5d058a51340f7976c3544619c91824de1fcf4e9b3739fa33d0c3ee276f53c400ef92a9fce4c684e469c751173365ea32c30f4e10501748462d24904078b9f806184c6d9b3cfceb84f0e48a8290342a376cd6239aabca43de6f7e2718cf13862444018b4c8c613b362c21a52", + "ct": "0b987adf162f5c2456f9caa956ca91dd9de48b7af2c00437b9bee5e415c2dc15eecf8cdda26d0f7aa7d70962af1f4c1554e21dfaee0254ad75a62a789d67b2bc71da6bfc28ef277a640406014f606f61751fd1e8c53062a7a7d59680ba7fdd0a06a80b0cf26004ed6429e8edd5ea61f9719640a1688546327dda610e4e8c5d1500a23d14faea88fee2645fd740bd7b651c5c2a397ead779c7429676cd13734", + "tag": "b86a31cfcf6d8c46378fc49363a143ef", + "result": "valid" + }, + { + "tcId": 171, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "87c8a7c231901ba691c257fa59fb0fa709182d8a4593f8dbca6be90d023333bd", + "iv": "32689eb1ad73d446e46ae5eaa35ad64ef57f4236b6e5a886e75a214d610ff80d", + "aad": "", + "msg": "cc32419f089df4baf919af6702a47c603d75837245a7e02ea5a4fd1e1e5ec7fda907acc69662e9f9e989d450fa0fe39ca2c0d56b9728484b75b871cb6e52125611e770a9f93a55c000eb901a29a6b60489a981fbbd40be4eb052bb76607f0706275e2c8c1a61e68b6b42a2b7cc22b2e0a76574756e872bf99c17e725cf4d93086161f659f1b6ac2166802fec3fc19212e718ddca5dd78ab06f2eec0321c0f75f", + "ct": "81a5a81d28b9e362b850baab2710dfd4e122b28490b6f41598d3fe19847ab20e7125261113dee4ccbd554882b12b30373d8546803b9c4a19db4817b90ee4fea66eadcbe9bfa1defefe865170261e4c236550383e25bd513bb940a7f05f0e69c70472dae2859c79368f721eb308c195bed637514ac2e832afe2fd4d2095bb9eba3c1b29359b1ad2c61c84f502139823cd8735f55c81ddd856655c578b56375f6a", + "tag": "3a6f980973450046e12e25f594a55574", + "result": "valid" + }, + { + "tcId": 172, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1e24400dd5cf517c1a228131cc7053b7dcfcb61f539c940748308b1f020cc269", + "iv": "e33396e15cfea4bb1527a50a38b9390030999a8b10a9b509a58d6d5358538e8f", + "aad": "", + "msg": "b4bd4c9682435730cc7ff2deb140f0d4748577565c33736c671f9fcaffe79e882b8f398785b93d672703b5381155b39714413ec5e83c671a63a4393387eec83f4175051f7a03fc689febc9c1da290b1c35564ab2b9e6376ac5be84d790f53f4715c83372a931e9b22d942f3eba8aaa1d2d287f52326fcaea4d960ae764c336b2665e0840b50f4e96c2ea8bf3fecece5e4b58701960d9a8f83a8a1d53819167a2f1", + "ct": "c487c50820a58ad5d5e33b034d2a200cfaded9eb72ae5a8a877389f13254dd9ef388ae3060a9c50abf829aca69a2df86d1c7b67158583a95b8f31fcbbb6af3b36ec67d0bda6eb597403f834586ca94b83a1dfe06fdf3ccbbe84d170bb7603325f3d9236bee2fcc9d36b6b1fd5d6f8895d241176dd1e71e501c0913c694c16e00a0f8e28daed226cf435d543ea1d2d415c10e617d6e2cba8d638748994cd4bdfad8", + "tag": "fdbb84f60b0b9ad611bad23ec121f163", + "result": "valid" + }, + { + "tcId": 173, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f5a6375911231929e1e94198cdcf5aac2588cc51ee90ebc8fb2aafc7d8149577", + "iv": "7bcb8e86c49eb178338921172ae41ba912300a8bc97b1e99d3ec3a94ce649463", + "aad": "50", + "msg": "b9853c71787e125df24f8a9aa36d312f", + "ct": "4e2563d6829dae52d04bca505b9f207b", + "tag": "1b2bb98b1e8531f415e6975343384f5d", + "result": "valid" + }, + { + "tcId": 174, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d5be50f10fbd8089212eb66b6b0c4fa1426989b60d401d6787c5451883cc3efc", + "iv": "3237078a0858f4729d98de63f6e93f938fe8829c0acf7636c926cab595209d9d", + "aad": "93e8", + "msg": "b68c781ce198d1fb944ac3edf32d73f6", + "ct": "d90acc0d2172ef07303c8b51da5a24d9", + "tag": "207262b59ce8dba50505257f5ea5f700", + "result": "valid" + }, + { + "tcId": 175, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8efbdf1b573e33501a5ec915c02f55c61e417292642e89a6e8ad5793271c48b3", + "iv": "77f14a3d087a5b0d78c411785b006f4855a54b8afdc7e36c998477ed9193a2d6", + "aad": "872475", + "msg": "755b843d16379340ebcf8ef15a8df5b1", + "ct": "bec099bbe02baf8e4bd3339232f7332b", + "tag": "d94baa9730bf25720767eb310472c6d0", + "result": "valid" + }, + { + "tcId": 176, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "64655db2e55445e45ec08db8a591e0f3de423ddf2eb28d2bc41fc40d790d8fd0", + "iv": "451e0f6d9a7eed1fa017db2d0d3a1ed13759b5d720fa4ec7a111638388c0ff59", + "aad": "defcd5c1", + "msg": "fd89020ff8e15f565f3afb2ec00fdce2", + "ct": "ff5f9e872f871beabfed294b4a3481e0", + "tag": "4c2480053bb659557fa03733c71b0c98", + "result": "valid" + }, + { + "tcId": 177, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "af19b9b61639fbffc673ac9218146c7fd525d04dc06793e4bd0a05252252b7ae", + "iv": "3e93ac925bd391f66563a30be5d72464a0723b53c6d8a1449bfec6ad19dc3dc9", + "aad": "b003c77883", + "msg": "1e5862b63b8b3f7adf12665fd5db609c", + "ct": "ab10817f17a9b910d067236f351f35ee", + "tag": "2bc7cfc8f893dc19f870ab1dadbb8937", + "result": "valid" + }, + { + "tcId": 178, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "fb2bb26a48765aae5d93a916f7f437a4a3b2cbd0ff9422d19b3165108b1f9b9a", + "iv": "63f5434c2fad72dbe04f2ca669ba959e3af89af9d83e32b41e1561d5372e3f2c", + "aad": "bcee5125616f", + "msg": "b9b9f9c976d9f72bf86ce517d2d8ec67", + "ct": "c2eb063876bfe92eacd3f9abc00b5150", + "tag": "0a9d8ac763f7b94b64922c2f7b0e4724", + "result": "valid" + }, + { + "tcId": 179, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6e37130cb190eedcaa159a7cf0e2cc59580eb343d2ebe48df7284732a513687b", + "iv": "639d9504fc9d95b891dca39c68d1dec201aa0dbd2aebcbe87430da92490ba920", + "aad": "ec86970a449911", + "msg": "9341f3732c26c9f0ed04886dc3760c4f", + "ct": "946a384a661a80a1f05467004bc666f6", + "tag": "f5cc7360746f5a84aac95d47fa17e238", + "result": "valid" + }, + { + "tcId": 180, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3eaf67cc348ebcdf428506105c7b19aee7c982269353055b8fca84c2523d12f9", + "iv": "cba68b46d8f377c6dca613a383d14b4ad13dc77bd40df1bd7234a583d0f8ffaf", + "aad": "8c6ea6e8eef0424c", + "msg": "bbc70d3d504bc5ed24a3228367b8b7db", + "ct": "b5df4b87680bcc9c7ece97a9f0fa5979", + "tag": "f5173a4ae189875dd37ddef8e4803a8f", + "result": "valid" + }, + { + "tcId": 181, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f14163aec54409c64e2ff698e55986fcffc98fef16e52b19f260af93cc385235", + "iv": "0bfd7f5103f5023a73e8cfe8c618a59c339507b845e5d5b913734e6bfffc50f7", + "aad": "e671b129464c29e654", + "msg": "68ad85b8d994e66664857a4c039bc8af", + "ct": "e02616208c3367e3b28f5d9f0b5ce7fe", + "tag": "7a48e0ef7c090a576c3945e48c9f0cf8", + "result": "valid" + }, + { + "tcId": 182, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c3db7a31fb79ccf85d7e6363676520b3c5d3c4d186d880429ef669deb8d6a904", + "iv": "f947af05e37a567207b13d0b21159d4406156083301fd8b1671e50e10d0adbf3", + "aad": "b83580f6d85e89b422e6", + "msg": "d55a0d2374d826cf0473d15a54d2cb1f", + "ct": "5df6b6a3dd724c0898cc7e2b1e158525", + "tag": "ebe18d912eadc32359b412fa1b1094ae", + "result": "valid" + }, + { + "tcId": 183, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b45230f8094227899076808fd29f71915cb5182ffe45330900c0ce2ead5a92dc", + "iv": "f9a53e7dff2849ce6bbca644d3f02f0d2f92a1c9da1a5f0d3db8689a8f4f6beb", + "aad": "5476792a8fccb6520d7e69", + "msg": "fca62e27520a05da487979830b5a31f3", + "ct": "4ae226f5f485ac69ca901650f79426e5", + "tag": "08dc3c57662524571582c40c382a4e1f", + "result": "valid" + }, + { + "tcId": 184, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "65d5bf7da66d73c93978f15edf7e9938a6e2367b74e23d59a8268c87668f8463", + "iv": "32f4f3077b7ad693f8c658fcad5b31c440fa2b3df9ae108c628681cc1df3e5b0", + "aad": "2b5a8e4d6954c5dadf5dd730", + "msg": "fc9c30b931d6c2800c1677effa2af81f", + "ct": "ead5c25764946fe37b3eccf0562b93c6", + "tag": "41bb09db5e139cfac5961da4d7371d3e", + "result": "valid" + }, + { + "tcId": 185, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c189d712ca65d57b25295d1c4b17c8fe9a12c30bb1f266e8abdf914e73a8a314", + "iv": "09814e992beaa319422740eba5ec662e30d89a3550ebb907b41ba2653a4831d8", + "aad": "58619e2e1324d4964f584b87bb", + "msg": "647e7404e0ffd65e6b9e2459db7c1005", + "ct": "a7929442d43392f21e9b80e1b64e3123", + "tag": "6b2fa5302c281c416766cd762c5a48a2", + "result": "valid" + }, + { + "tcId": 186, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8289265f3c7408f9c8137d992e9817a324ea3902908fc9c7ee1030a640cbef9c", + "iv": "88e786090579f95cc4ad12396f9a4e7493a75e6c099f23f54d0c9fc896211ebf", + "aad": "76bc40b22bbd4e2878a62c48a24b", + "msg": "a348ae570eb099ef6a0da23c198eb81b", + "ct": "4f962f96381e4f7757e201347d4460ef", + "tag": "2c411bc6c942d42356043ed3ff0262f0", + "result": "valid" + }, + { + "tcId": 187, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a2535b907026e2d6cedbfebf302c9296faa3158b423aa26e4d6d504359148da9", + "iv": "bdcb4fc291c6788b90e5a1e485672dc822c46a7e370c4d862131a0219d34b758", + "aad": "ca547fbe17b40378c7232f68ee0f92", + "msg": "71da938c536d70377fd420f58d2d5da5", + "ct": "ed6a5014dbd9f0b864e705d8e2e3ba3c", + "tag": "6327dc228ee2a5a453f068612fbdfdbc", + "result": "valid" + }, + { + "tcId": 188, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a636bd4c6f3709917653c8117892afcb7c79bb7467c0c96d5235bbdbeb50247c", + "iv": "780efd4a5c1d9341745da7a1b71891c054dd0eb3bc87c4da984a6b391f10a8af", + "aad": "f582b9eab59858ed9c0e4b401aa2bdab", + "msg": "e9b9455e724af1f37815e5b163890546", + "ct": "4c8ff56160f6c3bf73369824181746f3", + "tag": "40f4ec2959f1c8ebe0e8ef2c1b8d4bfe", + "result": "valid" + }, + { + "tcId": 189, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8d518a2d33c2dac728ff6f026c9d44280ee408814b865c6e57cc6085e71dd00e", + "iv": "1dc3e02f859383c3835bab259f054e7f74f2c1a274fa48de7cfe291de1d188a0", + "aad": "ca1f296d57ef15a54fe6b4171080c3c571", + "msg": "2cd892ab60d5a6efc18dc6e4b9e2fcc2", + "ct": "d9b72bbe9ba176915abdd81581aeedc6", + "tag": "b5b9918ce4c461a1fc7674471886b540", + "result": "valid" + }, + { + "tcId": 190, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "41f7c48ec8befe94a521e3f9778ecdb681598b0598ec84e0aee8e4bf9555f9d0", + "iv": "b8f0a6d2f35589629c1e5bc82c4e8d797e4a74fb2a9d8b6452fc2554f87eff7e", + "aad": "84f61f7ef191a9a43324b19557d8580ee617", + "msg": "13cfc69932814e1994c6e245ad31dcfa", + "ct": "45ea72fa372449480473a7b0aa9181cd", + "tag": "aeba539f3bf4ec48b62b2b75bdc617a3", + "result": "valid" + }, + { + "tcId": 191, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cfdf429e8aa868ba59a9b537ba8753d40a9cfeb5819c3e96320c4fc52517ee98", + "iv": "ebc73b0a6106cad695efda509a208c3fdbd58f1ce9b019126c1db6ebb6eed665", + "aad": "5bc7419ffd47e76330ac930a17cdb84228e954", + "msg": "749a3657de14fd30460697a251aeec49", + "ct": "0e8859ace358521530103aad8739c69e", + "tag": "42b2987ab243a0e9a8b76bb2997ae5af", + "result": "valid" + }, + { + "tcId": 192, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "873865655922adf537c13a6f6bc39b75ae7d2dea8d03ee31ac02d5a793d2f303", + "iv": "a6af2368ff12f4515928023fe5996912e9497de8e74e508b255aed1165da4d1b", + "aad": "4ebfbc84cddc89b9728d120e7186e56354fd4672", + "msg": "afcec5cf4e050cee3bb7869d40f2387a", + "ct": "5ba23e5adb44cb0152c622b01e4256cb", + "tag": "a5981622258526507b8a733c8261fae6", + "result": "valid" + }, + { + "tcId": 193, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "86d884eacb70586523fbf2fc9f40460555861bef572048d9922e3033dc5a713c", + "iv": "8f55eb5d8b930dcd3a761422128ef4b4b43155c46d398682ec7e3ad0e62e4dcb", + "aad": "3435497314f8d3526bd63f9d0cdd6d6c5fea5feb49", + "msg": "29c37ff4ef7d02cb849beaaa45815c13", + "ct": "e57794254c904d58cd751ff94e41bd8b", + "tag": "5da35a6c0ab39191520f4f4ad2bede6e", + "result": "valid" + }, + { + "tcId": 194, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "461fdedfd1ab4c0432dbc3bfa7d72f83eb0dcf4eeb4d92105b6679913b1fb68c", + "iv": "1f9a8ce07df1400f714771e4819b5faf64a800bcb61a3d4ea57d4647ea0df7ee", + "aad": "1ba61937c0c365bafd7b48ea9f9d09903d972c90229e", + "msg": "4b3645387d89df0a7fc68c4e4825d5b6", + "ct": "223fd43858e4b5e684c501828bec3095", + "tag": "5c87e6ab432b7c66891ac355f9fa5416", + "result": "valid" + }, + { + "tcId": 195, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "819dcec2b28dd248b19e89817890f877aa9a342d2fa71f879b51e2584336f75d", + "iv": "483460bbeacbad53268348a6f895a562a2b9deaa2b3cf46a55b91bfaf3c29835", + "aad": "22ae58559cbd43d930d7d33ac607f2cf565517afd3d7fa", + "msg": "842586024c5b9d218cc5243fb95868e5", + "ct": "9e8665a94282bcd0580e3725913ff204", + "tag": "369f632c928418aee71f327761db38c0", + "result": "valid" + }, + { + "tcId": 196, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8910d5d739e2bcb3be3fde14f51a13a8c1c3d80507b9b399bbf4e4ff693cdee7", + "iv": "1e8f347ab8bf06a4daae9eeb85cf56509fcd47b5490fddce3a110c91dfbc28f3", + "aad": "45317bcfc32e3c7766a8ee34c459334a7c459d70adde0f76", + "msg": "925154719d44b6ba7121ac5ebb730bb3", + "ct": "adfd90e79a067ae96f43e901d5fc49b1", + "tag": "bbd17f51867424b7264a87340c6c355d", + "result": "valid" + }, + { + "tcId": 197, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "eb500fffd84e7702682dc02b73f67533b3c4f0712ad3ee27832512ab9f4e7ae0", + "iv": "4725b93caa6892046c2a069951f5dae002a495e9df3cdfab600f186b77ea016c", + "aad": "c753e906fc4bfda724f2a7a9ddb14402924f752384844b5959", + "msg": "b6802ca06c5f4cde44f658750f4f88e5", + "ct": "42c9ae8ebffb79e9d18ec91e467bc264", + "tag": "796a4923f6ceeb2789f4ec3703f925da", + "result": "valid" + }, + { + "tcId": 198, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "908d802698c30749903c5174c34b1eaa6de22e3927c66b1821f6b0680cfb3f83", + "iv": "3caf30fbb10d3023687decf68c2198523a1cad84b47da371e006aef35c439a84", + "aad": "e2f27f35f8e575e7b3ec98674fa1e35a0dcd54fd93242604d270", + "msg": "5d51951e43ef73266ddfefc862e2de84", + "ct": "b94735bc1b4e380c253acc64839116c5", + "tag": "85d180adb5eab8aaeb2f51fda907693c", + "result": "valid" + }, + { + "tcId": 199, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3607114ab35d2f6164d57caaa6cbc4c49c016b165816b58cca3e10642699f2ca", + "iv": "cffee7ba62590201d8541682e5ed6bcfc2263e9731d259a201f54e43a9e2afe1", + "aad": "9823fb4c266e94fdd7976c4c7614e1a6082f88c1701bb129032c8b", + "msg": "0a360cf4bf8161a064d5a1ff38817094", + "ct": "933fe50ac1c2c11ea73244b83f46245f", + "tag": "cc1b8f41aaf6d1bbe1ba3b07e6e6f427", + "result": "valid" + }, + { + "tcId": 200, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c9d312f07eba5cbc312bf2ac812fafd7623b7c1185881b698aa0821d74b23ba1", + "iv": "0af1f9e944e35b5653cffe49bacb5f49ad6ec506046f46418c60bfcd4e7eff77", + "aad": "e893d2739b56b06764f1213e2d29f0e704905842d2c38c94819d8a8c", + "msg": "739e8a0f90efb776c525de92e6b29b11", + "ct": "70e66a76c8035ca02694f7a437d7ebf0", + "tag": "f788c111981c6336e84d688aa811b85b", + "result": "valid" + }, + { + "tcId": 201, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b6763d9567f2605f5996e8a947ea94e0594a4df309ded47d3c01437d3e70c775", + "iv": "c13e68fe490857e9f19787abda4a66d6c9416ba6dae28d49da7a8e2712b83e85", + "aad": "8930277e8addc0d141f8291bc189c58bdadced3632445d9aebbd6ee767", + "msg": "75f661b2cf0e08164e11a3638b0fe624", + "ct": "22e16eacc4415873463e6f126a82f03b", + "tag": "104376b09f39c2931d1548bf251dacba", + "result": "valid" + }, + { + "tcId": 202, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bfbd47241b3e78017dfa4e3e46bf2a5447d36dd7c1fa094e77593ab135a18010", + "iv": "00f09cb42121d3316cf5461f4745d2d8664e0aac42ad9bdcf7706222d234a1ce", + "aad": "3a2fc3382b4c053ccd7e21365f7e748a9386df7e95549a64f9307b723a33", + "msg": "7ed6e0e7af69278f8bd7dbf03c328b46", + "ct": "a2e93027c3567e3e1232fe97fd346057", + "tag": "730f3e36156606ad55619c2bfc4bd7c8", + "result": "valid" + }, + { + "tcId": 203, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4ad1752fc834ecd688bc555361a245e16a984e21cbdda0a4e05fa05bd82be834", + "iv": "f70006b10c2f965e207db8bfd3493a4ddff3603e9848a87c18840fd2bd41ba03", + "aad": "b410cbaef0341aea828daca0101a536367ca5042b0c320cedd0a8c7e189153", + "msg": "d0c526bf2c9b705977f3a067589d0990", + "ct": "cb653fe894c4ffe0606edb2923200396", + "tag": "add6dee0a1eda211d3a544db12c7a7fa", + "result": "valid" + }, + { + "tcId": 204, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ea859d1d59cadebb04e9a125256a857de0c398ba430569dd602670b2b1b54ad1", + "iv": "bda210c4c681c7644aefbe3c0145ca6f826666e01dcd9c0b69da886aa77f2062", + "aad": "c1ca91d97aefe4b2098331f63723896542541ea61adb7c43b96e352d3fa74031", + "msg": "3579e195be14d7d1b122da399e393bd9", + "ct": "f708b2ce0dd9ddc0aad1732e56789e4f", + "tag": "e0a65e9beaa029de8cc050eb1bedbfdc", + "result": "valid" + }, + { + "tcId": 205, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e550634af29b0b70c836dc2071c65f6ddf9830249457f2d17f04893cbcf2e7e2", + "iv": "7089169d17a09ebbcb2d7627a485340340f77043c6b6569e9bd66dc4d511b40f", + "aad": "c9349608d55558a4f28c273f24ee44644ac9e1520719bf6ed1fcd4edc75de48695", + "msg": "af425e8ec4ea8e6e3b726d85f1fdf483", + "ct": "f3580c49a85efc98a7cf9b0091d2110e", + "tag": "f671669347b54b6c5c152e014ff4929c", + "result": "valid" + }, + { + "tcId": 206, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "639f0cbaa87caa325cd2932b01dff8d13660a8ac0210d70f55ee26fe5eff227d", + "iv": "009864ea7d7e2f288ec4f78cb9d27e5f461e6f8a54611beda9f11eb13fb9c572", + "aad": "6aa6c016bb75ad036a8b6b2efee91a5f1d2c1a5fefba638a4b25eac6aa98d1a256eb", + "msg": "2be59862c7efb4da670d32a149eadb09", + "ct": "4377bf669b808556d2de4dade7fe8f59", + "tag": "e140f2eeb335a34b4dc7a86398889084", + "result": "valid" + }, + { + "tcId": 207, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6c787a33ea6ba76dfa727837db0da7b87675a11c7ef45a09d3dea037a6063b83", + "iv": "5a463eb0b7ac72046b685d24ae9fbf41b54b00563a8ad5032a689f7c8c642a6d", + "aad": "d929fe59735db2dfdc74c36b593ba2eff060dacf5195c1c13b2b7aabf16735d41a6d35", + "msg": "08c2ffabd35e1db5734626fa1434e149", + "ct": "443da97694217c8854d5a3f383c8953e", + "tag": "08021c074180835f5dd7293f99c360e7", + "result": "valid" + }, + { + "tcId": 208, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "80f611b4dcfa04cb587a04f62a351dcc649f4f735d4d76217e49f15d4f2f7fbe", + "iv": "bdcfa24c0d203d09858d42a19f4dad3ed9b2a5ccd4e23787857546281f378a3a", + "aad": "35ffc6dd9bcfb8baf28d14f9f26924138a8c9acbc3cecbd329205398e0c351450fcfbab7", + "msg": "cc039cfe40288eb52daf7d64ebdefbb3", + "ct": "623cde0c4f28fdb811fcaba81ecd28c2", + "tag": "81897829ab9bd28e2435e600e52ec9ee", + "result": "valid" + }, + { + "tcId": 209, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7c64c12e76fce47cccf9746bbb98f0125569127c4e13b783fff563431c31f248", + "iv": "160eaac5a21e7417e1e57d87008bdf37e399499bf0c1a237adfca171749cfd03", + "aad": "77b01b6915bf51c98eeda266256c5c38c331e37c4fffb43bfd15c605112c653a2adef6a684", + "msg": "1740d0b32dc1591022cb58a24f83f03c", + "ct": "c7f5657704742abea18e11b42207c7fb", + "tag": "efb8079d10c25b3c95ff1518de939a88", + "result": "valid" + }, + { + "tcId": 210, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "13e167e80c93b0f28622b29248dfdf04d6bd6c427e66d56c0a8904973948220e", + "iv": "08a4b8176d9c8e6576a350eb7d930eab26d1aa9c829ba1521627f40cce989246", + "aad": "572a9a501f88058f54131cb512403043d35816db2e2bc40073b4105c01ada104074623b681d2", + "msg": "3956fd44d2151b743610ad74384d164e", + "ct": "fa5c5131e1c4068ab19e2bcd7136f2f2", + "tag": "b7908a5a6170b1449073f255c5c061d1", + "result": "valid" + }, + { + "tcId": 211, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "02ef63d0fef34ac496459fe02dabb563d27e4ee3937773bbe1fdd504e99a0e6e", + "iv": "11c6b90c91f46455992fac224faaa2a6f25b693f1c8c3643c36a1f47f71051f5", + "aad": "f1c8b2c69d15d6db7d9c423889ad3655f8ca9314e2dcf1da959e1c3ba528e53b87ac839ca7b3dc", + "msg": "f2a7808a4ded05e5c1d4adcc614589d9", + "ct": "fbba7d8e1c7fb0e00e7b656b644d4420", + "tag": "2c2f490b335fa74bc6b24d10e683bb44", + "result": "valid" + }, + { + "tcId": 212, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7fb7978b63e5fa677d414860c1388f5adf6ff7fe9de5406ebd62481831b5eef5", + "iv": "50c9abd0391fe6a980755c40e5246e56108ef3a4c1a263109f799cab004b52b5", + "aad": "dc75051d3317602a50203d4a4f5562e0ebafc62f013f6068fc64b7db9b1bdadc6dc38a5057d9d389", + "msg": "7411da2c6c339ea6f2fc5c4e9dc2fd95", + "ct": "a732a7bc5aa0827a319e1315c8ba7418", + "tag": "06952a7dcac684f39657778ec44dad8e", + "result": "valid" + }, + { + "tcId": 213, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ac108698b6cb6fa838d31915a05a0c3bcbd44bd3c32973cd11beef589c97ad19", + "iv": "9a9c66ec2a890a2e7d1c53f6293a465bf7271d25900143ccf3726975e7bb1d40", + "aad": "1fcb1071e76af2332aa5625dac337c7474b38dd0447dee7691876fd4d95c867bcd58d664ab8c819196", + "msg": "e06133a723acb2b84792ef1ee5afc77e", + "ct": "4b6bb6f471e883e8171bfa80a8b5fe47", + "tag": "af226495d5fe31361c2bca99daad479a", + "result": "valid" + }, + { + "tcId": 214, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "04e15dcd6eced8c32d4c7744976c56ec7c07681a54b5808cb8b3f4ae19fdd3ac", + "iv": "6ffc51f01a84f63a639ebb7238db6ba66ee42511352b3d4caeeb4f34cedd5b07", + "aad": "97842831b281128e17409d910e76aab73b8496b667951c08d72f8af094add7c03e2dcba04e5e995aad37", + "msg": "165f718f6a6f0f5c06172f58f41598b7", + "ct": "a737acefcf5f1e20f2a05dcfdd43de0d", + "tag": "bddc6aec4d4df69a53bc89839b2adced", + "result": "valid" + }, + { + "tcId": 215, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5c3e9a582811438bd5f634a16aab81eeea7e1ae694bdeaafcedda5f63323cc33", + "iv": "24a465b1db39b531dbf8bfcb151b3d65f76b06448e659269c2290a63ee06dc09", + "aad": "32a4fb1786437fecaf63619efa273910ae0550b1aa687e619e01aa049d16023bf1ac95fc5244193346a154", + "msg": "af4cbf88b2ec86186da7964a3751bc82", + "ct": "26c1ce5e844fea53032f9313e1086052", + "tag": "6cda8189a4d2b1e8609b55e04c9b4c95", + "result": "valid" + }, + { + "tcId": 216, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "057f605f8b2e6603eb4372a5554ace0430a051a7e82e71df972e1f1479350941", + "iv": "edaafe170f9d903ff69b6ebf2ee2104cef528e7504d584693d272f727507e08d", + "aad": "c53e68a77f72f5855aaeab9723d468aca43891eadff509ab24c6bbd8164737a940b67cb38fdc80d5071c4977", + "msg": "0c66b785e26cb3aba3c3f276af70b47e", + "ct": "c01173828cf5a51d4274dba95db7eb73", + "tag": "1cc7bcd03c349be8bdcf629c992f2b7f", + "result": "valid" + }, + { + "tcId": 217, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a69e41003df1314049b4e4f252ca3eee2d300b420ed30e2d78cac8cec9824ca2", + "iv": "fec050cacb6d0d35a29bfedb0dee0e9483b260e03662237385063e6aedf209af", + "aad": "ee2ab7f70d66d774fc26e8b2eaaa601f4a961f357a6450c5c40ba6b6a509966220ece46a5ddcc85c744e277416", + "msg": "ac5d0ea045ddbbfce4ca13f0dfe77e9d", + "ct": "5d5bb9d87e9101e48a0c09d07ea8e5dd", + "tag": "5d85bbcca4b1d66425464f87b8295982", + "result": "valid" + }, + { + "tcId": 218, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "373f4d6eb63cb61ffe1e396aad422a0d0692f4d93dc61b835723f71eddfac821", + "iv": "1872978642261a8d18ce1b5ed5078700ef5ae034ae1f664ccc42b769f09824ff", + "aad": "bc33a1692f34c0dbca88825cd0b3671aef321216f9fd5c3db5aa3545827634d906383683046adbeb08e62c9a7206", + "msg": "7bc4c757c991c2e6a2dad55605398796", + "ct": "ad8676174c8aafaf4a934cde0d739a02", + "tag": "c5e500a0159cee641062e3770e331cf4", + "result": "valid" + }, + { + "tcId": 219, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "11ddfde01d942957eecc6b0f607cf1431336cb0bf7be6dcf7b5cda85ca15334a", + "iv": "9e160068e2c51e961b9a06ff01f415c9bfc6283a666215d79d6054dc84149045", + "aad": "fb835b1651ba0f091fc5223f7fedff5cf237d0339c76a3c75e10ab880ad70a2fbf08678a30fe6fa563798e76cd1ca7", + "msg": "b407ad3c96a3021b65a170bb25a5cac3", + "ct": "b82dde466a43173945026a0f04a2abc0", + "tag": "7b06f15cd72c8249734a6e0f80cdf895", + "result": "valid" + }, + { + "tcId": 220, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "83fb3a69e744c03583e27e5d7a596fe367b15a9e907b236230184d0731e2b34c", + "iv": "8bc1b2eb9d1d293fcc34ff8d0c07c2210efc8da40c70a9d1b7a5cb01f3f5471e", + "aad": "76a5dd33a206b7c7a7ddf7f5a8c86dadd8e757339e90636e94eb056283b515afc9dc2f64f25c9f99b378052820f14365", + "msg": "9a20cc4ca773930473787f09155d6009", + "ct": "87107c72db42fdc71bb5a3f8b08006bc", + "tag": "9b6dd172fd8d58b2047eb47290359d19", + "result": "valid" + }, + { + "tcId": 221, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "9e0b338bbe5a7830553f3fefec6212774a0c97d2f68efc21ba48de8b4df20162", + "iv": "01d9469201e829617689d3a09a34d229ca9f0a770903d192cf5a8e2eedfbcd97", + "aad": "d47d3959eaf042d63b79eff7470917f1da03b48f1d80632f6f6a9628966978aed65a3a4402f100bf86b2a1b0aed00b239d", + "msg": "3949efbb41d83543a9d02c7d73370386", + "ct": "88b786416c24514c8ca9e21c345d1d4b", + "tag": "97631f8f45c12f0512f1f241b7421014", + "result": "valid" + }, + { + "tcId": 222, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "13dcd7162ac54f27d0427f18c67aba5ab308a9fb252efbd69022da434fd265b2", + "iv": "8ada45dbe75d31aff40c491bf859ee874eb243f71f4f511e4145912b6e36a153", + "aad": "7b4a5bb55017201c8b38be9bb4b615000000075c2879e5ecd8effbde880573a219ef1a7955dcd488ccb00e65d9319083fd34", + "msg": "c71029d6b8a7d3844c17639b70f1d8dd", + "ct": "33d66adc55cec1eadab9df54268b5773", + "tag": "ed1be24e3238fa766cd509988cdcb103", + "result": "valid" + }, + { + "tcId": 223, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "41ceb4f21b18a117bf5c4c606b523b2f094c4b9550cd3ff02c35c74944d44f6a", + "iv": "a9adad66f3f1793281ef172f5112aa6be215e4491e796871b7bc674640262671", + "aad": "1610911f43ec87eff660d900694649020c92a95a7d79cae53ba033df60ace21be861381066d327271007059568a769bad18b5a", + "msg": "5a60718b6fb3c46f83d452bd6b80f131", + "ct": "b5567e5321b2ffecaec573a186b6ed18", + "tag": "f1a5e7aa3abc052c4c89481b3b7bb355", + "result": "valid" + }, + { + "tcId": 224, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "14c05283d90e4d2f639cd769778b44c37c6b865b5af313b53ec6d41933cef114", + "iv": "ca294cb1dc05f07d69e786043a7ef3e69d334052af0943e45a7df08febcd3e4b", + "aad": "a34442fcdf8c2a6e1a8ff5386de2c5447d882a1e265b590792b3804576f0db067a2ba8efbb1db6c8ebb1bbe0d686a7625ff0ae66", + "msg": "47211c201d0f3548f01f44e1e2c36747", + "ct": "6ef40c4208cb66155441789cd0771c98", + "tag": "2e536097f9283365b6987fd027b17bb0", + "result": "valid" + }, + { + "tcId": 225, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b1d00c6d357e510f201d2fa1fb1b8f63b5f6a748af6a2bd4c04265318575b284", + "iv": "41892a56714e30e45e72a578fc15bb9854d5bff3e607be150c07a4cdee397b81", + "aad": "6c4b345a7581412bc21aed2dcdb778cbe239c18ea4ce485dcb85476773dee5b2fb3b00ea2c33e024a47cbd486c857e2d5510bde306", + "msg": "b44cc57c382aed6934656a797fd5aaa9", + "ct": "0e95910c01de933df63933818c27dc88", + "tag": "0423183b42b41a766379e26351eb672f", + "result": "valid" + }, + { + "tcId": 226, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "73e707ee9777c860f17d093924ab49f0d4776c467edb976e26c63e741477e1b4", + "iv": "f847d40adf39279e125dc2bd5c5fe16f443f541a105857b37c1d92d3ee028883", + "aad": "27b91b52b7108ab84cbcd658b877f11997764c13e8c24a1d448049123288703c875d1c1b35a10fa4182e8b9f965585f3e375e8e270e6", + "msg": "fc0af6c0fe8df637600612b39acf3ab6", + "ct": "6243381b3fc1ebf10dba97353511519c", + "tag": "93d86bd841357fa76fe288e663e521d1", + "result": "valid" + }, + { + "tcId": 227, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b42fd84a6aa5d30ec86c6ee96cbf8f5ebee428be8c58aceb7df227841aa2e1f9", + "iv": "a083713d307d25090e7c945d4b05c9d2f4ef18ea7e05263e48b6556e68996704", + "aad": "bf4d4b25427244830eac4ca37aa5abaad05fc06213e1ef4b84cdbd681dfebd385b499deed1fe725c60fbb5c35d3a787f8c5e6f0ba7c42c", + "msg": "f5fd93e5cfe93ff94600cc2496336902", + "ct": "14c6b0e197f25cd5bbe2aca4d6e066ca", + "tag": "52ded2639c6d3b60dcfbecce75bd4122", + "result": "valid" + }, + { + "tcId": 228, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1512dfcd61047aa155af57aa1b8b82682713f506396fb87959f2597dfd321d18", + "iv": "334e5de9977deee89aebf5dcb946611cd894852b2bfa2e2b88f61efa2ebd6d76", + "aad": "40405fe795d75762b7c4652732554794ee1852ec060f189a10de18a056b280549b67919662f857e9e52fc1b93f0f1e1aecab4e08ac750a94", + "msg": "daf9c5ad9a20268ce23a351a80f3ca24", + "ct": "4881f2e843c37b7f9fae8d80082ab292", + "tag": "d81cc86671ea3b14c8ab319669472850", + "result": "valid" + }, + { + "tcId": 229, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "43307e94933d951992e4ad5b774883064e101ae2f476d0e84d4ba4556aa3083a", + "iv": "b7594b811d5e34abe8c73e8d97171167c57367534e5536073efd3b87d9c28f7c", + "aad": "295e606f210f9efe05bae3e8024154799470a33aa2cc4e44b127ea7a9e3ed3a997433b8ff8b94c2c09602e6395eb08641b7a9f7f41b352ae44", + "msg": "cbc1697acff471f7160c030ccc3d5429", + "ct": "4585dfa118ee45e5babd6903889c2b1f", + "tag": "84b5a43004aae8262b7964835afdf706", + "result": "valid" + }, + { + "tcId": 230, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7180d19a1d60222152c89f9a7b67fa3ad8d79a66e6081def31153fd4bdb28f8c", + "iv": "6eeca0a18002432838106584f6f8f4ee733b4b5385951a7cf84fc4a6af9fd8fd", + "aad": "7862b0c1f41ff1d435c4f00f7a0871c63854b56f76740def184d14720a6e27e47d820ee5e447084fe0e6ceaf494548a029a6129d3c1bdb767e63", + "msg": "486f9b9c146c0434a80caaa9a2f0e1d9", + "ct": "6f30f13fdd53d9d0f020236b7aed1fc0", + "tag": "3c8c3ec4242d4f857711717f39fd4538", + "result": "valid" + }, + { + "tcId": 231, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "035e7399a03e0b710c1d7bf9bd08a8ae0dd15dcccf43c1c799299e21f612424a", + "iv": "85dde470c38f3313eb165eda9bffc31f6921c11fdf29d7c8a8f302d9ff0eaf0c", + "aad": "e6e95849dbf2059668802a5a094a3a8621844127c4266122b96852aac3ed8739497ef7290b2b2644efe69d5902457c1366bb8910ab00ef45096874", + "msg": "b299ae4cec77dd37e67ee7822636c977", + "ct": "cf9c0a18ff82231f613ef51e5a55f09b", + "tag": "cf1181e4510839d4ac5bb46f39747537", + "result": "valid" + }, + { + "tcId": 232, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e8632335e54ba318cd5956801fe42d97b6c72e6310e010a2eeb41a274db1c947", + "iv": "ff95dcb99ce5aee1d520b10f4fad1fe8b1b74697f8581a033e4f0faaa9449b5b", + "aad": "5ad1327616ff56a296e9bac4bb7db766a868d2d7c29e010a3ffeccd8ac3227a7097e0dedb8b26721215220775d8336f34f1447e9266cb1dae7268d63", + "msg": "2ec8581d9ef8b42773feddad935c225f", + "ct": "4c630f2b0decc2b550a7d0a8bf140b01", + "tag": "aa866c8b5d80a8e63b22143a94fe393b", + "result": "valid" + }, + { + "tcId": 233, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7ac065da538b11d9b2d4f40a0d239b23893dce5289d7ea89d817723c6deadd62", + "iv": "090a9a11e4103ac32a7ddfbd4471f58bcfd1a7687f4d0fd03fc66ec6505f3b7b", + "aad": "0245e967d3a1cfff0ba4030ae93554d00abb58f6e9ad886fe907b3e9c4330a0e697419cc8f00c51828043cedd30c3b43d9c70eec52addd645b5ef103d1", + "msg": "8894118b40bc719fb7d81b8d582d9bdd", + "ct": "ecf075e6df9b6bbb9cef6113f1c0132c", + "tag": "03b08f3ec9d8c1be40a86d6b976e13f0", + "result": "valid" + }, + { + "tcId": 234, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0eef0478f34df86ffddd076589b4e5f6fd5caf6964a8617e5b18299f89eca957", + "iv": "b65d152f9cd80ac18b16745ddd1ebbbde4ca3582197537fe289408e6ffaf1521", + "aad": "8c8777285c47a22743f4135bcd6f795697ca11a9a0ce981c85dd2fccd1d811fd695b37eda5318f05ec62051fd9055dc6f7752a6b9ad28524db43e6c6de0f", + "msg": "fdf40499a0a846f135ddcb671ecec0fe", + "ct": "4dd3e8e9a55892d42ed11e01711aa6c6", + "tag": "1df1fac0c29751e833963d0db4b5f380", + "result": "valid" + }, + { + "tcId": 235, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ae1a8f59d2da45509d36f837bdec7fb51d151eb95fef4317f03ccda75045f808", + "iv": "a3fc3a5839ac3be48a54cd25cc48cdc1398478660fbf6875d41764a25f6be3d2", + "aad": "bb630cbb66abca1cc08073e9fc14cbc132ca2acc75e22f1ee275843f3e09c2d7589319e809e1b5792e04af9c0fcbad4b803cc894856aa9573e1154e7fd9b18", + "msg": "09eb253e0e8cd5967afeda427101fc79", + "ct": "749290b48055c732c082380533eec57f", + "tag": "439b9a85303525b6b072b41decc4b28d", + "result": "valid" + }, + { + "tcId": 236, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "626a94118c71e67a7a0affe2eb708c56784431b4b51f68c9f0ff9ff7be1183ea", + "iv": "da32d981b5363582271a84fc9d950800ad7e3ba2a5c0fedcdeb7f64ea435986f", + "aad": "1316fc0dfc805fcb7445c8a79e5b2a3910271b3939bcfe7afd61777bcb4f39bdb35ef59fd5a681454d9ef88c83d56bd025dbff93687719aa29d4841edc2b5f50", + "msg": "3a199d9be297df4e6a8ebbf89fcc2775", + "ct": "4874080cc65597422039f0f8af1c51d5", + "tag": "50e93ed10ab7819ebe6e7b2eb96ac230", + "result": "valid" + }, + { + "tcId": 237, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c34ad127119bc5831046e2392b192163f9e930fd96c1fe20f275a9ab9ef47215", + "iv": "9285b7d6fa334d8d61d97de7c5cb2668818c1c001c572c14ec61cf053a72ea82", + "aad": "67b9e31161d96874074b4cd584058213d8cb1c573a00335d9b1c27f0f06c9804cefa495cd0838a2a741c69237842563eb45dd239e5a5544cd26e1de518c21a800b", + "msg": "fb702b7f6dae9d1e14a692e3529e53d9", + "ct": "afce842db2505717724a6059def9a01c", + "tag": "aae23e917fed7482fd655b08eabbeeb1", + "result": "valid" + }, + { + "tcId": 238, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "24452c2745cf08d34d279dc5a1f60578fe26bbb8f3e773eb65289e2c9814c1dd", + "iv": "4b959a6ded090ac6529fb46c097297fcc561f8dbdad0ee54890bce23881c731c", + "aad": "c9487822018677d444b66ee55854c4508c7169041a83a2dcc5a75268ae20f46441b621d8b3f759f7e0c8d6426c1278c7febbde77e213cbe203eefcb261dc144c7030", + "msg": "36b8f48139318f14f5d1e975a11664d5", + "ct": "4b05e42ae9534dbfb2d526d80637960f", + "tag": "d16062c54251eb0ec8ae339201d1bb2e", + "result": "valid" + }, + { + "tcId": 239, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1b81256ba6d4876f4cb9e02b55c35b2d6826218ca686273559f5aeced0419fe1", + "iv": "e67e257380f72594d7a8eae0152e061d8f89070c8702c88ebcc37bbe83d839e0", + "aad": "4e94b8229a77c58d9149e7d8c635ba0ee20dac7c8a5e7bcfd63df4558a02e299c5cd2d4d9fb722686b3e7bf69a2b60ce6adf2e742a0b504b6af6cd741b9f65dd37e17c", + "msg": "2fb79c3bcfe623e3d27b5bb301ff4bfb", + "ct": "3cc219de9193fa59da30658a0767c238", + "tag": "1488707641693d41fde8418dc8b623e7", + "result": "valid" + }, + { + "tcId": 240, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "71b18b2627d11a807df168850967a2eeaadcb4f13dc25cad5e36be127a147a95", + "iv": "050573f3b41144891d8c9fa6eb2c7767cf6ab36ea4069f1210396a68a3c2769d", + "aad": "72c296ab5bffbf7cce59cf3cc56bc3449184ad7c6a9158ae5a54833cd503f95ffb28b87b8097021f39d17bc4dd2134b6173fee9ba2454bdbccefed5fd042543e23d714ab", + "msg": "a7a67ae5a74f3255e9886f743f1c118f", + "ct": "62ddfb927e0b7c6970d3b9050ceaa14a", + "tag": "f852d7c7fe2ffd66ccb3c6c87ffc7fe4", + "result": "valid" + }, + { + "tcId": 241, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e609a14a0d7ad7d5d395152f5e64d405437166f84dfcb667221062dadc4636e6", + "iv": "43aa0c769ee7962115444bd39e91bc9bf7627e1762c7b2ad64a2538d816be841", + "aad": "463ae71c643dc832ed44b8aba07df59612471c6458de0b0cdb96196cd2ebe7eba62e0e77c77cf0e337c9b29af84f3ee7484642aa6c7e6934b1d23758c25b4c9514f3d01614", + "msg": "91269eaeb6e683551505f3d76064b13e", + "ct": "d322c03594fab9fc11667e23098a5104", + "tag": "1957d40c4aadf54cbab6e2e08612b9d6", + "result": "valid" + }, + { + "tcId": 242, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0e4a9ca89bae1f2d7e19f6d571a94932f917ed22ccbe2834234e21a872604d48", + "iv": "9c6c093f36823c1c0027af9675d0fd2b83981a4f9050aae9403944a116deb0fa", + "aad": "43b0953ecc81768f992dbccf94cd2e0bc226dcfcc00f981c29aa34a5c7307dd9d4d4cb20d9d4edd33b7abdbee9f18eee52ccaf318d1efc513359dc84404437e4d71e034faa46", + "msg": "4731195730b97ccb97cbdc17e8e78a71", + "ct": "3006f28ec79f84604a4b38437f1177b4", + "tag": "49037736a8054a1918cf7b7335c18dc7", + "result": "valid" + }, + { + "tcId": 243, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f094f26892b03c4b87ecb2d540f5407882488a89e02851c3ca1f8729f75cbaf0", + "iv": "0a8c9eb8fecfb20e8e015c937f3ec6b2e4867176afa248396cc0dd9c9a6b4c8a", + "aad": "a9475ff091bc9f79dc700d089434aa1e7d0a7f1066b11e5b4664e06e96376a917f28b765af8390583d5b74822ff7fcd3ea7a1fd1a637cb4158eaa391bc081078327dfce149097e", + "msg": "ce7d9559e72b25d1e5e9badbb34f9f58", + "ct": "a3a0f295c7fdec0e26ba4eb00b3d77b8", + "tag": "8971507c744b64389ff3e31adf6c3492", + "result": "valid" + }, + { + "tcId": 244, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e1a27847b038d285e047696028aeead4965e1cd382eadf8a1dfe658d597a8870", + "iv": "893d5a6ac5b80f648293111f6260a934fc17abe790ffeaeb4e393b7906ae32f1", + "aad": "d35a2666cbe38b8d28d556d056db7edc5b9646ecd2f0faf8415705506f7b92e0773dee1f99c204b125ce31e65864d033873fcaa3e4b866d64584d10d08386a1ff00a0e7a0c078152", + "msg": "d8ff295b046d380b4499a6bb1430ec71", + "ct": "f12785750b95bc419ea02da2486e5366", + "tag": "164bca04334fb4aa5fade701ea8ad432", + "result": "valid" + }, + { + "tcId": 245, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "30aa28cafa515e053223f291ac82ba215502e73523e5929bfe5953072711fab1", + "iv": "127a2aeb588d0bf7bbd8ef804e40e2e1a07422d32ee356c6036e07949c0735a9", + "aad": "2df0628fd02933d430081982d01d2ae56f8c965ade72bac5c450b05c163e7c43e6dee3001bc2e55f8d08924bffa224dfa92de7af4b16ef168531aa4aa52955d4ab907a09886fb5a93d", + "msg": "16ed928cac7121aaa30f4ecf2e40ccaf", + "ct": "0251679289c7338e37663b74df4c7684", + "tag": "d11d0ff1a33554d0ebbba101afdae317", + "result": "valid" + }, + { + "tcId": 246, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2e1febad19c27ed91b09bb854bf792d33c21a64ff2aa2c37b3c11febfbd64c96", + "iv": "51f018c403b9fe15aee51e0d411264182ee1780b4c171978d14d23b4e8fb6f5a", + "aad": "7a025f5543e9deea1ad57b7e596f6c2419acb479c6ed3f5a37a892cc2a7a57e1821a84a2c4e79455a7529246055f0be21b5478ef680703dd92546a0f2fd2b600ffaaf8dce0251608d19d", + "msg": "f260e7abfdae819278fc380ef68ee836", + "ct": "8df9718d0a38e39f69d3812091a088d7", + "tag": "bf4db6538cf9a6d3fa6d434175e59277", + "result": "valid" + }, + { + "tcId": 247, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "61bc3fdff2d2b5e2166f0ed14c315ae97e454bb08ff43509787d40671c3f0558", + "iv": "ea19a60ca082ce13bbd9688586371ac29b66432d6c3875d75394f6ed465e4bfc", + "aad": "b3cfb2da9309182e7660896f6cc17ab904dfab8995e6b5356b9105aeba7df308a4d0595b7b635ee9b897e85ba72295ad8d0f76846f36938eca5d75f210bc310ac954001bc701f077121374", + "msg": "9b8c8579b2d99cedff873f9833ee074e", + "ct": "8b3ee6cca414c06a89f7dc1fa4f408b7", + "tag": "17fde6a01c33aab7876d01a6556d4fec", + "result": "valid" + }, + { + "tcId": 248, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a0a7ab29c11d6588174c2bc35306034265ded9c593852d6de3b791c4cc35b1ed", + "iv": "3f1ad612b05223bea7251684ac834674def69aa6475f66e40e572c934b09eb39", + "aad": "8fbb72629048095392b7ee15616bf521534916014a49e07e67d8ad0cbcff925bc6c70d292a907f198f21c73ebcc1630b0a5ae09dde52da36b6e3bc001f82e5e9a4c0d59c1128f96bac8f94ff", + "msg": "e02c85aa04dbd805a256c9aac06084b4", + "ct": "e58241defb54d00abe288b8fd74e1c76", + "tag": "bea20cb9900f2d65ceb9215d3830f8af", + "result": "valid" + }, + { + "tcId": 249, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c76512967adaf68ef0c41a995afe7307188ba1a368ed702545a88bf3e2d7f1b5", + "iv": "73fe52188131d6abe5aa6749dd7518498126504d9a747df865a598761fd6c84f", + "aad": "6941ee98e63f622faea2c96784445a449f3fd5850b8b26a0036e8dc93b015a42c3a1a0bb8238c0659a103454b8442183b520a10862d0225930ae96e89674bb7fb33611089aac7324ce6285c5d5", + "msg": "de16c4e62d9f32182881ac3e35e4c6ea", + "ct": "5683454f49770b6f65e3ef76bbe0ce41", + "tag": "bac871593fc0aa6346fdf9b0f44c8d70", + "result": "valid" + }, + { + "tcId": 250, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f4a0921b3b24106e9c2e7a921e7c0d1061742e7c5c0fdd72c124ac5594eec74a", + "iv": "25968986b4461b5b2c97f527124bee777f77c73a04517d4d5c5a5b16b22f751f", + "aad": "51081b4b9c559620b6e7f7942189cb094a8c25f65c48e2c7793321793a247436c567df49e054b8f7a4942ddc69989870cee78ad2d2176644ca0ffca44883b603e98d51db75dffd67748c2f625b45", + "msg": "02305e7bf2c7f6ff40b63f1fd33f4989", + "ct": "ca0407d907c6ae0eb5e46cbe4fef34fc", + "tag": "17ef89b87d6fa63a80e12d4011231872", + "result": "valid" + }, + { + "tcId": 251, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "84b6b535a6100f2c73f5f6a244063c10f2cbf1da66a3b65925f7d64066bfd4a3", + "iv": "63ff6d831d48dc2c5f73b056bfd440da0a6ba237bdee48b3963c589135c5199c", + "aad": "da7776c944d168dcd175d3885a581d6a64ceb96c14f2e637c990513bf48f23bed1a036a2838a2d9d036569615d43fa8a1645a516af04d7ecddd7acd23727525252f476d77017ae2bc0a77cc5a63350", + "msg": "d7856bb78727ad7f7063169f2f0ad3f2", + "ct": "02d516f7d4221c90528ca5363891ccef", + "tag": "ea79cf984ad224b3b9b8a0b89463dd6f", + "result": "valid" + }, + { + "tcId": 252, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2f10577cd53eb91974c1b5f5a4b56923975f02872a79b9959208bf63a9835ef7", + "iv": "55193a547921a339060982e6da55ac93501347f964e978345c1723a284007c7e", + "aad": "12cdf8b306799434e2564f354153da7e4a1e41259e1544e602c22bae521cb2eec537bc1ab08dc08cdae46d1541ee2cc957517cd47fa66ec8cbdac623039d32ce0905514e10e44f689c610f3717db9c63", + "msg": "a4f04695ef94f60423f0b9ad96a28c6e", + "ct": "0d439db39bcd263490de5bed9a263582", + "tag": "7cc8f8080c4742f495876f6ea92c62a7", + "result": "valid" + }, + { + "tcId": 253, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "41c6f54f9d60037f5a0b6c48271f34da4cd56ee0bbb792bd31e81704be7ffe31", + "iv": "e5e7146cc69c024fbe4782f9dac63100e507779c6651941d6eedd02c6f571de1", + "aad": "60fecbfe0292b2e7dea9142da680e36ae6c52a2a639c8d9963b9eb8c44cfdb9b3bb9a735a3bf96258ba4c3ac45f858a8954d5024ef2070dd73616e06b530a32753291ae462558537a5e28e7f6afdb14bcc", + "msg": "b836c614028f6b3dffdc6f6d7f0510d3", + "ct": "e5856829869c4e33baaae01f1e2fb76d", + "tag": "ed5bfde112225d38cdf54b409f91fa3d", + "result": "valid" + }, + { + "tcId": 254, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "caffa208b82f6fed41aa0a01510f73e0670f907db06b2d448ba49ded02773123", + "iv": "6300d3aac8a28776795c06601c145e1757e3edd8962e9d625ec2af82b2429086", + "aad": "548a2df28a973841fe27dfc10a7839b6196f1148e8a79957a3590b9819cb00e460f428141fd2e75745a74b2a053763f604faca1968fd7fa99b0b6f937bbe683ab2e134066761e7125e5dd743dfc006911e08", + "msg": "dee663001416d7ba6f37235aab4c4471", + "ct": "eed671c487da9b570d6b5cfa4352f05c", + "tag": "7b9ba538d5fde36c583b52a97afa933c", + "result": "valid" + }, + { + "tcId": 255, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5b6b72b0a2b753196e8ccbf253436a842078512fb03511b29063185f0557743d", + "iv": "387adc7a1ebbef5fc378819d057a1f3bbd23d3a8ca458d85b9df2b45015f1332", + "aad": "886936faffb81ae97ce3222015dc8785ea49aad6b566928cb87a64f0c2460969cb47fedc67d00252b1b1f8c3f2e86d068b7ac4ff4e94ba7b63669ede494b44415e187dd8ae0abd24740b0fee4246c28ae90f57", + "msg": "b693b5e8379d72d4012d7d12d6732391", + "ct": "e945ed3ecd082d1a3f0ce50000f375ec", + "tag": "8f485158ae6842773e28ce708c47565b", + "result": "valid" + }, + { + "tcId": 256, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e23d831d2d56a09af6a4c50d603b4c38f9823bf26491a99d9130df77c161b295", + "iv": "b42402e3fc9de41733b617938f9a537fda0f99b07b4c6faf3934dc524ee98006", + "aad": "a1eae8843fb4ca96016ab6e9a43489d95c790f01a76f80d4b509f84f4b222ceee5a230bb7090cb73a34e7ffafd887f9b82a0a148b87e87767c1437a129a00a894645271e635f59d4af811287924e4bc97ba364d4", + "msg": "0e9ccae6e19f489063ceff06015b533c", + "ct": "a480bdec2d7fdbf883d87aa86100a4e8", + "tag": "0bd4f19bb257379ba168f11a9c6ef655", + "result": "valid" + }, + { + "tcId": 257, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0121f9e686ad0a279abb0bd1ac4e9224643fcddc17d892c2a30cc5ec263efc5c", + "iv": "42ccb610a5c0a538350ba8cecc30f54587b5c03c38112571fcd5b1704977bf41", + "aad": "a367ce2be5851226e7f7abd79c277f1e3cf60973e64c1604dec3425397b0c2ba3eeddaec8e621be8b0e177bb67ba3c0a3f9c6c93fc26f4d0f40b87e8925ec0e507ba6b66869379cf3ebf2b7f42971fbd5c3b2b91f0", + "msg": "23346bd8e30ee7d2ec2e8a9e4bc3dd9a", + "ct": "61e65d220e21786cbc4f2b3ea4c71dc6", + "tag": "907d272cb55b845de71925cb8e45fb44", + "result": "valid" + }, + { + "tcId": 258, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "19d1baf4af53923c471fbf4abb3a0c5539676010e9f63bb0c2ff298539422d9b", + "iv": "7c861fe5fe6abb15b8c83b85c5e82dd330c3bf447a3d29a152b4809c3be06981", + "aad": "b7c4bc5d694a2683ae773005195a9532baca731ce9151d1d6ac85715598fc017c78bc633c75f2a2ffaa2bccdda2f807493524349f3edb0f0ed36969815c83d462a5c312737a917c4684c4d261d976b89c9f94c93010c", + "msg": "de7ec58c8c12bdb7c05aeb8593208bfd", + "ct": "b6d9d7717f37161248e42d15c9f4a1c1", + "tag": "5d44a92ba277003ae0b59120f6d25316", + "result": "valid" + }, + { + "tcId": 259, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e7528969b7b4219adec04860d90c5504bf871e7aa51468b9ae94bd8f8dc9134d", + "iv": "8a6a0253251939e2eb7c74adf60028e9671fc49bee80ad02a69fa10fde09f16f", + "aad": "93dffd829f6e0aa59edf0839f8a133e5e1820cfefdafeffa732177e6da792da8a3377674baeef150c6dea085d827321c5fe4d1f3a1c097ce9f288e8061b5c0b7f78c07dbd9e0ac1dcfe8d4aa049666308c91fca1f11e3a", + "msg": "a597b61f4b160047a833a282d1ab246c", + "ct": "d5ed29e8ff7fc2124b469d46de7cda25", + "tag": "2bca805c29b81ad5d05785cfa0f0b688", + "result": "valid" + }, + { + "tcId": 260, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a0d8e683d491155a1284bccc93b2746e894688fc892d37b267cb13ef3c0d6612", + "iv": "baa0a20ba1504e5e3c6060f34a0527c8e0e3af515c08bef29f7948f8035d88d3", + "aad": "97c6c0c91bec0629a1b8abad536b4411162ebc9baeccb16babc862d7650dbe1f28e4767ceae124b029c3ae93c7497df7061d6287bead3ba1012f676a68c9b4d79238b63fbde7232ac799a277ecd40904c0badd17b925e410", + "msg": "95c029b9914fb4ff464d618ccffd9ac7", + "ct": "e9a2610322cd7e092ce73a8cf410bcac", + "tag": "29553d5d1b7e0891cb6cc883060c98b5", + "result": "valid" + }, + { + "tcId": 261, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0c4a07f392b8a72599fb1f294e45a36a50427a6552ef778df68b097a2ce071cd", + "iv": "d2a72066829be14e4c959accc7116d9945c38e21624602d7918d08527896e09d", + "aad": "b69f811f2411bb68b9dac220fb48ca491cc176e1e9c97acc47fdc17221c14947aecb3201dc7565d79dd71a2e73451f2b7e6204003cd432ecab805f638aae2d5bd599fce1ab307c2b49d2f50915b17b3a55909fccac70adb3e5", + "msg": "b73b6ee1b34a4d5ce685babe84157fac", + "ct": "5508e3db8d71da02eaa336741f961f35", + "tag": "bf393ad5cd55b9b7244fe30e1d1c5c87", + "result": "valid" + }, + { + "tcId": 262, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7e7b339b20dc0da8444b4ec5f2bb4f58cf3772c358d36770eef35088b90275ea", + "iv": "6c72b2d29722f113606d5a31d455cd62a94d539e4705327a96c6d40cd24a1ee3", + "aad": "4bdb44a581df81851b0c169312981bf7b89a1c1e17762f63d0dab4b1fa7c6d55ddd90b7eb931402384a615b166350f774c50963a6285bf394f65a57d6c9997e90314f03cefd688e708acecc44e8e757f45a92d96b24ae7f3275c", + "msg": "3feb3a88e787d6fe99209ba506b1f7d1", + "ct": "7e9a51a186c724be750d6afb894b50db", + "tag": "55489aaea2e17cbdc9aa44a0e31653a1", + "result": "valid" + }, + { + "tcId": 263, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bcb4fac65b01ac468134c8c8781f7f01a75175abca645ba8b6a20d7269bb1b6f", + "iv": "d8a316352a60554e9313ff64005bc50cd48e6605637cc87799ca6309fdd8d838", + "aad": "2411fb3738283f37b0ba7900f8b1231453fbf93206c66510c641feeddd6de0f336d839ebe98ae81ef37395af68cdde5b3e141fa7a4c35a06c711a5f58659089314ee7dc2e0506823325d50cc00e4c70b940b3ef6203297979693c2", + "msg": "6e0a65fe4a6be1968cb9923052f2881f", + "ct": "60fc02bd31301925afa87150ecab6a35", + "tag": "067d975ffd16c38cdd2cb67170d5969f", + "result": "valid" + }, + { + "tcId": 264, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2814d3f6c157bc42d8882f948ae355670e64f68b3bce9b661c67f4c554dd8520", + "iv": "94ea9fa370ebf6582b39b97e7d5b7a1e0f5c820a89bc46a34e54688626360be5", + "aad": "f9450351d71475e46c0badcdcf0dc11005a9461b8c94203159482f08686c09f26e8b754c76b2865df5e5b99ddcf07c95c3cdaa88889dc4ab769a27c9988ccfab14cd957a3804ac0353e0548276bc1307483e17510e3023b3f393b4f9", + "msg": "cdecbd33bd0d0ae3c0c81cf949ae539d", + "ct": "68c1944bccedf09adf1addd3e033f421", + "tag": "7f490bda7e5e123722313c946b3866ac", + "result": "valid" + }, + { + "tcId": 265, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5de900b6c031d2d5139f6b15a12ad09a03ed9c290ba592cbda12b533bac9fe78", + "iv": "1a4098244630149073553abe30f5c521a34b6c13fd439d43ad22f795f0a08410", + "aad": "83788d53166614c33db35add3b3e5f151803cecb4c5d30e9ad1bcacc3a1feade1843fd958e3894f9ac3b0e91019e1a3c672664698b0c437b0da43b151b3ae2294dd5fb4885f756c6925d4e7add139b6212d75771112b1999e235a1a610", + "msg": "c2917b35f7b0f6b02748e648f0c85c16", + "ct": "657f3b19cd5f54d4356460f2a1ff5573", + "tag": "340e7b97b10ea654d0e392b72f4710bb", + "result": "valid" + }, + { + "tcId": 266, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "702c4ae35dc0426244dd81efd7a70fae17e4840d39ec6d5f34917ce77c058f2f", + "iv": "20238cdb554eaf1a8092cb88b794e06fb2e3e54c68db209f0844e092b8a5eeb6", + "aad": "777bd61fcfad1b9fd489d2b30a890f6e4e9ae1264ff6cfa9ea355cc15977b06869bbb0ac8820f16d664ba540873896ceb59a39e54c160cf25eeb92250106e5d61bb0b337599410bea5a1f0aa86cb477b4ec319701c9c8ff7a89b9ceff1a8", + "msg": "b386af2fbb2ae4cc80f5f58d2f2d72d7", + "ct": "7ffbe11ead1f7127989b985447e2c030", + "tag": "d14313e73d99f5bb5d9545ed80afb5e6", + "result": "valid" + }, + { + "tcId": 267, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "be1cdef86b661e1cc6f3c1bfdb2c0de6e70c460bb0cd3e190c6cb09bb575012c", + "iv": "d280928215ba5f5dbc4e7582bb051cf90da25b8e7abb8195a36bc1062c473eb4", + "aad": "b1cc01a51b3534e2637ebc216c9a2017496aee4ae9713975683d859b58a3693488edecede6f3f59483d9ac5a6a57f19abcbfdf0835d00efce30880868ed7080af245bd663c533e29f078eeffd8af9eb0ce1614a38cbd68843cdeb1d29c18c1", + "msg": "eff3bc8679cf11969e34f0f6bf48a25c", + "ct": "3a92fba6b4776f921c6b31d56b2e976c", + "tag": "3d5da253ffa961c09cf4c7744a2b45f4", + "result": "valid" + }, + { + "tcId": 268, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "09da9e49f32cfe2725634886b08a2f12520d7da175c068253cc685feeb13d3d8", + "iv": "e171ef5c829d79b2f8016591d8e2bfc7642135dcdcfacf4e7b2cb226fe9b86e0", + "aad": "2c3db0ab67e9e360205a4ced81388e732e62fef22d0cd47723fca838ae834d449732ed5cd7e9d8f7832c3ea2bb65b93f6e3cc6ed710d4c1889865ec2d8ab39cd463132258c2a7af5a89e9b73eabc5e8e2e4b65b7cf28db56c85884d2a3321b05", + "msg": "ac2a4b2daf0293089c41281de5986687", + "ct": "1d3323643d9a61f5672b7ef22eab9178", + "tag": "10751cf61aa35eda28fa4986532f9f6e", + "result": "valid" + }, + { + "tcId": 269, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "bcc1f09cb2182e4651495e81621767baacfbd7ea73c382fbfabeb935036a1440", + "iv": "6e13a4a4d28ba8de43ac23222404e331618513bdfa6b8f2c8c570b2e822e6c7b", + "aad": "610083b601af873cd9590af9ad0cf3664246a09f834a0ddf479f617c2faf4c62e21a8054b1d6c095001338da39a7695b9154ace60ba632e72bf01c381036c9b2dbbf99b8462f87218349bd43c731f7f455a1b601e66fa485521c222d1bd85f22f3", + "msg": "7b3e40fc19b3310c2efb97584d9dafbb", + "ct": "0c72a3d5b2f4f60cb1c1b7eaa3acd9ba", + "tag": "529365c006df67784ce325729c0a42d3", + "result": "valid" + }, + { + "tcId": 270, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "224684677590e7cdcf611cf46937d0c50a7ba5c39ad860b9f649297263596de7", + "iv": "6ca8e69c316056a16b24e8173447ca5ad7a52831c3730eabe9c235b7f42b7d40", + "aad": "14e8ddbfd2ab5a6192a50510db30373002db77a1bf3551bc2b82ff2d077f8a51dd68cecb7f30224c96e0d7d1c7c65aedeed8f710329370a5f3b8e6e2c36b7acee386f3d9b641ecad17564c69d1e19d49737e0fef19148bb334987b08e07eadf025a7", + "msg": "5161b00334cfd1d83963ca735d353244", + "ct": "fed58b0c31e14d675f8027ea8b1da253", + "tag": "9b6db1868d02970f67d93a34f7d52dd6", + "result": "valid" + }, + { + "tcId": 271, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1d6a4e1e1953cc531ba727b05473317b2b9d2e30f696e938ab06d35b6b574cd3", + "iv": "6b897992194a8881d9d1b257f62527ce0a19891ed786ec74f9123172b72de54f", + "aad": "2392595771787d54e8b625a95755fe140a316491016429bbf509ceccfc49e2320cbb553ba21dca41e07fe64eb11fa5b6703ac7b6fed386f6c5e971abb3437e024e011f13bdb2f56e7322b334626da41a9b564509cdc4033289db1a644cbbb2642cbc98", + "msg": "e15ff96a2582a082af24b4465c920fed", + "ct": "584926e9a6eb84576e5bdfb259f8667e", + "tag": "5e0ff125c83bec9ad9dc9655946ece28", + "result": "valid" + }, + { + "tcId": 272, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8318bddf513a61d389959b7fc7f515a13f0f5be9b2d1ef4bce4fadc807f2616f", + "iv": "006cc48bfbd01eec4beedf69c09405964747319e13c4b07cc701b7d769ee52cc", + "aad": "f129a4fb5eb9a1022df36d48b72b68cd7b2f961b92f64c8a175270ebcdde5a06714a336c092f49750107ed2ef2334fa813bbbbe7eb439139052635c4aa75fae347eb9e0a5d54ad50e69dfd3f6491fe3160b42d955036bcf5898d17dd27f31be37de1c710", + "msg": "f2d0c05695b92642ce809e0ef11b035c", + "ct": "2fc82d75ce999a7ea643fc03c90cfd84", + "tag": "197c28fd7620d5633f8320d400942aca", + "result": "valid" + }, + { + "tcId": 273, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a30bdcf1aff0748d98cfa0f1de64fefc3bd19cb0de65ad11a162fcf8805467e1", + "iv": "aa5c116ef319230ba3c2740d9c1b862806b82e90277f63729676548acc6b228e", + "aad": "ccea499b0c0856e842687145307efbf15b9449caf9c00bea68584502b0c278a6140f7575e6006d02cee9046a0493e90693bce6d59dc8bdea6c570c1686031ea564585fb425773a578aedac63c4f1e7c9006d31e69aeae44103cc32edec539540fe035fc236", + "msg": "ad4a30b555ec47748cbea7f52b62c739", + "ct": "428bd7115430b40cff472cdd30083655", + "tag": "1cfe9c19a203b754b641507fae6ae429", + "result": "valid" + }, + { + "tcId": 274, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4554167b76ea9c6c1291c05ca2b09528dc0e0b0c674bb23aa7ca09e9e4186bef", + "iv": "4be367dcad03966174ae37a216b37dadadd007591336a88c2dc90d1e2389da76", + "aad": "39d2b05a1cb832974589c1be485be99e19c6c36fd3753b1ff5ef635e09eab122f98dd954364e8f58810fc17e708262268c819657422440c6c9a6bad08a811d2d2e7fb5ed00ab17148e148ba24a05ac5ab80238ba374646b541b683fb8b5fd13e2a004badd5fe", + "msg": "0f09e06f872f313775d052c2ec3c9951", + "ct": "0aa3bcbb9583f80f5e3c7218463d00e3", + "tag": "b1c46232ff3e30170041bdcd58ef3919", + "result": "valid" + }, + { + "tcId": 275, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ae4b71dac35882c11fcc292efdf417f48a4d0a936427f4eb2d958f0874b9df69", + "iv": "49d36a05fa922636ea63bc185d513e67e441154a09127d4b4e09b6ed4c4cafd0", + "aad": "941c1e3c2c251aa6b7ccc49ab18eb9581cdd73841f13bf98fd95e89d34302d45632e98e99e6cb350e4f28cc38175d9589d34fbb1f9e5aec38b4503a026192a7d19661f0332a317464d543de82c9bc3af687ee279cd42c62e7c507439b971d29f93fa7b71fe820c", + "msg": "93fe650850d1aaa4a5c150eb7b4edf58", + "ct": "a823a7d3b10303abb5ab72ea7386dc32", + "tag": "a4068ece31be640f07bfa12dba478ea7", + "result": "valid" + }, + { + "tcId": 276, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "517f099de01ca53eba85e95d4fa39c1abb7f566195e5324c7c9900e0149fcfe2", + "iv": "0dda3b0f695a03f8715eb5d91de707844dfc0bfae78516893ff9c29c7db50e01", + "aad": "1ef9da962a4acf52638f67dc9fb8dfe63ce5a09497b0b09ae28fbee8f0e3655cd1b796999a447ba4ea7e8bac25c554623c91e6163397b6f4d54987bfdb58de4ca9d2be74e6083a7500b7ca5e7c6155b652255de45d11201d656e2e39ec443d505286010c8d0c3abf", + "msg": "77d82afceeb49a6391a2c7a8a2b86d23", + "ct": "3e3cff270cffee28c35b576b66876f36", + "tag": "cea89c9070fb26dc791288c2ea28c1c3", + "result": "valid" + }, + { + "tcId": 277, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3695d525d05221eac6dd166f55c16ef710d5b9e241e789625b1e527ebf804769", + "iv": "e2a86fc52d57c832a11c7d17d1bd36e22902042f03a321babf86e0be4d27d0ad", + "aad": "bc6f80cfde4ec59a84e5eff81fd22a7ccbdc239b3a9a38c31a3aeb89df07ad5807c92a513c6313b34e182301ce153b757e90d263b9b63a8cbfbd9425afa30cca529f04315f41ae0be9a1e702e8ad4779f649457d951e9d7a3cad7e97c3e023c5476e71b233913b8ae8", + "msg": "6fb7b799b33e6f521e171cfbf12b9652", + "ct": "296427b482f9b3adb724c0c83d592b66", + "tag": "bd4d5f8ea780a9cef556393e6307a0ee", + "result": "valid" + }, + { + "tcId": 278, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1ee8feb2251e3ca3a3ea1c86cd9120a4800c30b69e8d9cd093713b954ae67706", + "iv": "114b04c7e193afe733417783f6a5f912b5fc62ac3913ef49798e312701352745", + "aad": "7a6824bee9eafc7c45679e64be3c1841464b7b223a465d702218e33f93bc7faa25de2434b4b1efa58981082fe508b64b14e529a5f821ae17abede3edb41c904c30d0d2124cc56602c3f5374efe6d62a8b0365481b26d7c7029eff280e2830009e3d8322fad371b05866f", + "msg": "e7b8d06553ad3eeed4a0c99830042ee1", + "ct": "20789c83f0a4239fb2eb66002a96d6ac", + "tag": "4c45104bb1fd43523eaf6fff938dddfb", + "result": "valid" + }, + { + "tcId": 279, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7be3d39ea92ff383c015f565f0c33b8319a109c75955a41794abe0fbc422021c", + "iv": "76c7f4abfa47f0e1cf3f5dbc49a79e3156cc091374964b7c02afa9cd5c52dfcb", + "aad": "5872e50e4136edc82a480cfc40cb6dd40699a535bd293532555aabc9de4588fd24a3d6e48bb6b258ca9bf8c2e0086972aaded319e358c52f13f3a3043968220f5e200f24b485e42d20b9df3de408829ad3a3da081f139f48a5b2e6de4e35f6d925a1a3056dbc0b2af99d40", + "msg": "0e3f0e365a1d07b935cce24072317a9f", + "ct": "1174ef15463249821e1ed499fd4c8c8f", + "tag": "74f16ec2280c893c163d415d2c180118", + "result": "valid" + }, + { + "tcId": 280, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "10aab2bb1035a8a17cc2a0029fcdf3d6f42479a347e39e8a58c4b432b0457f09", + "iv": "46eab5b97f92b364ded3bdc595c74a36a3ef7d5b154ffbad84b7a9f84590de61", + "aad": "ac4b19ecb4ebcc4eeddd0051e6fafce114c0c44d5e6f49a6a374040f7c0e2fbf21f4e85b65b5deb5a59988df2bdf645848dac7c315bb9e4e47b88c431eea30d5d474349f875f2b0ff552ae34a14f62d3b035859025ed7f2b5da05a7a665b75481583bf14a53c4abbc752ff9c", + "msg": "031f8a6ec4bef5c3f75d8897b5a7c590", + "ct": "77d8c549d92a44e599d5d29835851c1c", + "tag": "01790c745242e51b63e2aaa6ce6a6840", + "result": "valid" + }, + { + "tcId": 281, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c91d41b39e9d9464a2d1c83505e0bb7f5f55452951d79627c36943e812f7c164", + "iv": "740f2333b8c08fde2281e18c4ad68311c4f76e331ea84a62ea68d8c0a0d1b510", + "aad": "71c15694ca4147b29c0ad4e6ac14c83de2ec25918ff9e541832d9348f114acb7425d3fd84edcece9f571a7892d768ea6124c4671b084f72129f046d0a6039a29746389466f124e988ff04a596bcf696b775f4d8a25cbe833de4ab38723ac08a3382d09660353d588394ec6c820", + "msg": "ac6694e45442510a1f14611f4c5202f2", + "ct": "0fd8e1a367227d8d0b6ef93f6434683c", + "tag": "59a88cfdaf8e0d896e34a409eb470456", + "result": "valid" + }, + { + "tcId": 282, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dc4740e8335e7614be9d0efe8805902e889d5d35f1f58aa5011798c791caa4b4", + "iv": "dc579d996f2d210d63bae885a547ba8e692bd44650daa2429f7819dbd2b51f9e", + "aad": "fadf106deced98ea3b2c44f0729a33a72bb0157ab850ca061324a8e3b12d1216374b736ff9c5af15ea6a04d7b92af2a74413af1912da4932d0365a1751970143e5dadeb2efb3e070078d24fbf35561d8e1d27695da59c270483d5d4185084dc8ff200a49cd6f7983014246bc5370", + "msg": "363930a314b1a61a694e73ffe00b9754", + "ct": "1a4d77033071d1ddf0fec768eb2e33bd", + "tag": "be5828ff456bf322f081410b317da2c5", + "result": "valid" + }, + { + "tcId": 283, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5b22fba457ca3fe89fc3dacd87c478baee37fd52911b6f197327ac221cad099d", + "iv": "1e45fd3a69e2bb1400e9a8c02b3ecd6de9f688a22ae08951857688c3f0e21f93", + "aad": "b86da3dfa4a5e812b5878d33a6077de1a865b4c6028cc7e48f971238799878b9ab2dc70b6343d058edb408e9837c76fa6a6b2b844538e1e2c89e9dee689de02da4f56adf7aff760a6d91a1087674f7a8bf3e17d7c5af8e9f8c861c7e949b4d75a44f0dd8867c8bc8e3afe03276e17e", + "msg": "69c964e634c787277e733114e96fd542", + "ct": "74e927258b1264d61b85b95ebce82779", + "tag": "aaf0f277867f2af08effbbf68a311416", + "result": "valid" + }, + { + "tcId": 284, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "20c4de70164c140b9b613dc215d95d68ec625bcd71969720f06ccfcfb451c6ff", + "iv": "ce7125afe1e140ec4d90d3ecb63c7076c7bf6c6e5be91257986219a650124bf9", + "aad": "1950c45d71e34be26be82ad88b5916e104aa32a0a111b596e8ca324059f18d9c9e27b71bb2eea957061581479ea9c43e979efc11f25b5f26eb48c0e6690cd1b127ed384d88f2ef16f98f3a1db980b8c286af71ace2f2894af23145bf28532c21f4e6bfd8d98c79096750bdc9812940de", + "msg": "da911512a525e755ccd6050bc102c5c5", + "ct": "fab1b62f0d6c664da38dbf705ac08fb3", + "tag": "2d916e0b89babacad9ed40d77795f409", + "result": "valid" + }, + { + "tcId": 285, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b5df329a2ef902f3770c3c8b8460a23f9aab9b8dbd7beb27b0b4c8b2dbc45ed0", + "iv": "d4b6a88c3185a3de4cdb5840d62eeefbee1377e3d7e774a6ee03f54886c6966f", + "aad": "bee1981b32ec594db0bdab6f79e98c9b528b831ba463aafe8821ac8109224fe802e79a2dd8e1d66ee714bf8422281cfddf65e15a707ec6865d7b09746e3b988a57ed64e189bdb5189e1da26695f634e2dab7f9840eb32c903b9aa441248ad404780eb2e1d1f180da615fa2f8da0aadd994", + "msg": "dbb00a69263516f0d3f32eeb6e59ab2e", + "ct": "60edef7c0797c33a35671119378dbbff", + "tag": "3310b467e6698f777de7014af36a3070", + "result": "valid" + }, + { + "tcId": 286, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "19fb391e79582f743c574c0be128639430af3e1cfef514b1331b4b6abf4e8e13", + "iv": "893728c103c2b8e1c55fa08120989b0aa1087c191ca0401a761cb7c94fb59b1d", + "aad": "4e6b5e14910af6acd8328fabd078a49eb7df55862320247623c5e491948e4e43b8bb8eb240e899ea0ef65ae9d090700b7eed998464c518fc8fdfa03986e07854c18376944db5408b452ac729407cff076c6651db416940526e513cde5b3b98d838f4e0ac9b9d167201780f94ce01888ff9e6", + "msg": "645c8eb1769fa5bd3616621269e4d33b", + "ct": "da38885e0a206973dab74eaa974bdf43", + "tag": "b66b258fbb8c4f47a32f2c6212558f2a", + "result": "valid" + }, + { + "tcId": 287, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ea579bd0a738a6c4c7bc72bbc802906236806e4c7b21c2da13b6596c3d16829c", + "iv": "909e81f6327719798741644c386e3e1ef36565365a0d38e629354ba1457eefea", + "aad": "08253f8ebc3dd69c545f29c6c4997c790489d493454ee8883135354873d1deefccdb32e756e2733a757e8739e591a0565428b022fb7dff208b90726d02a7e1ca13f144fd13a449432aeb431a2bcf6b972d8f48a6935e99874fce9a4a858333d3c69e8c29512cd4525f2072ba4c74f2fd172d8b", + "msg": "bb206ad96627f8702b98be0716772325", + "ct": "c4f68410093a970c4223fef443968720", + "tag": "e94249797a905bf1c968039376a9f805", + "result": "valid" + }, + { + "tcId": 288, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "dc7fab07d50b29eb8e7447b9b52d0e1bd9310b68ee6e6aa8501e4c0033768820", + "iv": "25cfe35eb342eba25972d74a728a392ac55502c214f549879500113bd122beeb", + "aad": "116169cf9905370ca172cdd972b31b3b11929f54809b258b3c69511c873a2f3dd124744b8b42138baf95eddd9e824e68baa1fd1970457556ed7fa7b4cfc2b910440a4183aeda4f78479a2c1b6c62e606360ca59d0691b9ee0a3617d70b96c49990c595583065015ad474c7e43aec78559f24c147", + "msg": "c1662895afc670ad946e535303b48a5c", + "ct": "f20aedb624e3257fb3b2def2a6fd1ae3", + "tag": "5f771a28823fc3258b6829a4307ed97b", + "result": "valid" + }, + { + "tcId": 289, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cc3e140976b7d952775729301c695cff686320526ce2f54e68220dfd484ea372", + "iv": "b503ba4b88305bb7ee5f27040dac7046927dd2628c652b18aa71e64d1d5746e9", + "aad": "63bc58401df8ffe13c17e233db6125c29e9e00ef9458cb5824fd8fcff354fcefd30dcca369df6ff881a417883207399fa6c47d8d458f7b9fa2684fe3386494087d6bcdaf7003d67f18e97e18546269945ec0c86b5e90224d61d3f640bf9db4232af67a7dc5ab432dc986108a8495ec44733570358f", + "msg": "77173e0ece6e8dfad273ff5ff20d3b89", + "ct": "137232542ea8eb5a1a6f9d2d758831cb", + "tag": "d3e7041c05d2df8699441b60c0e89180", + "result": "valid" + }, + { + "tcId": 290, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b1dc943c954574dc6b6d8f527a7f21d0ce6e9e7e7d70ca6a0166175bd053f7ae", + "iv": "4890f24dc7148ccff67676125ec50c59a2bde78653642f917121bd78229c5029", + "aad": "f6b76e5e9e141d021a6899d8cc9114513d9ae99c15b2b1241f717151a7ab617b8f86235b9bac1779e357896f25c7ec3baa0954628d4048810c049b1f13843622cbafe0a0b1d1263939586c6b52284fe6f61919c15f4061582909a93d3d3cefd4c2dae192ffc9f238c2b66e8c4c7ea86df997c3f6c104", + "msg": "2205fe6c5b0b1c7a30afba1c89560a6c", + "ct": "989b57a7069e972836b136f56035888f", + "tag": "e60004b3b4407cacf486a9325ed0cbf5", + "result": "valid" + }, + { + "tcId": 291, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ce820f3fc95218c8e818f810774a6b45cc08193418a9c0a0b005a19fa1c097d0", + "iv": "967738234a1d662f1ed0b980a23386b9630cf710ab24a70e593da54ae74abe5e", + "aad": "1f5b46c336ce545e01c061aa0f7f681e8204fc41b83632a85aa9c75318169d4493583fb801234363f72ab3a96b91244fd41f54927afdd82982dd9d9f99f648a16336a7dffad3120ddde9f049d1b9aa413afd9255035a0d5e3a854d8255265d04050af6bca14834737b8503e68bd14b08eaebcd15ae4dd0", + "msg": "6959f40931dab6f299762ed09d2c90d2", + "ct": "1cdf383064d3b0b183134ba72a7f5f20", + "tag": "c9027b1c07a03ff56412ea7b031e9f9e", + "result": "valid" + }, + { + "tcId": 292, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a41b1589285d3b0b331a6a3621cb16021c79fbfcc0ded246aefdf5c3f5c8b9b1", + "iv": "63dcb364b00f192b0ed761ea8278953b2f3d9196fb5145376a5a6bdff571bc9d", + "aad": "89e56d3d18adc07e3b2739bc2fe894effb228bd48dd007bd348ef2f8ad25730068d18a13cdebdb17ca84ae77f718442f4bd5e4142b77d116e2f355b0c01da538d9b6df6e9765edfdc84b12b131dd661b08156911b1c51da525e7d038c22b7bd7ff30b9a47505dd491a15cde5d72a62be6e0d6752bad742fe", + "msg": "8536ead9a2729bc62957aebd8749b13f", + "ct": "d87c75f96a3b75fce40efaedc3ed097d", + "tag": "3fdb82a302138dc2de0cb7495c601f22", + "result": "valid" + }, + { + "tcId": 293, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5062c27c15c034495b4b8640a268a7fe1a684da30b8a0af2c02684dc68610c2b", + "iv": "300c1f5716220c754c33fa6878393591e978e9d5a6333e70bba97dfa38951bb3", + "aad": "41736446a151c88a379a132f628d41e66f5f9e9f9808428da41bb861a45c75a333651718e8b4a885c5cd5a1392f238abb526d5ea53c8d63fa04be111386e8d86ee7985d7c38add1f3817dcd7f244b81573b470c1b231bccbd71a0df2f1f9e604b247bc92e5f07a0ddb8f37d41ab4f85a5d597908ad354755d0", + "msg": "bd8810a520e03f50989f989f83f11e0a", + "ct": "e90a0ef2612b92610dfaab7342f306bc", + "tag": "d6bea517a328900d2de43f8223312690", + "result": "valid" + }, + { + "tcId": 294, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "061808dedffbfedf92eb0911bb6b140b0cd7aaac64efa627237c56b54ab88d47", + "iv": "d60d2774e3e4af5daa974efb856cbaa448fc78cabceebc1639bd266631a56cb9", + "aad": "6b3f6f192ede3cfc82c9db79e30b1176c5cfbd05af153202696b95c205068bd002fd116c84d84b43f752da881b9af48ae6372c46192f9ec172fa72e78f9993f0471797378f10cc2b26c515078e3515c62aa4aacec59b0ded1041f117ec0586c473aef6769591602878bbb71578aec608269ac5b8c9959baa91c1", + "msg": "a32548c657c0399f559a2ca8bd9dee20", + "ct": "117005b74d237fc4ef7f7d4785f92c48", + "tag": "0c8e298d96ef76ced15ada64a91dba5b", + "result": "valid" + }, + { + "tcId": 295, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6a11eae9ddbae5f34b8d6b0be1ee7987ec72e37036c140cc7971c79dc5c0b6c6", + "iv": "1cec41107ecf40bd0810c483866dd52536bb21bba37cfcf6326f86d9685097b1", + "aad": "16898211d0caa71c378a7f773ec1da8cf5c58afe1ee8f986647eb9874905c526ae299f22c9b9a2ff68f720b4be30b93fa862ca673f2c5b13d58d7940d3c753e2945df5d01ed7ed9fc8018b079a35319864bc346f587a51d5c8b9b487fa83be11f2771e890ed6c6765ee0f15bc7a09c8812e67c768ccb99db364e5d", + "msg": "d012dd6ca23878c4ad7c39431372b77a", + "ct": "173f6cc2fe54bb334aa46834e52dd259", + "tag": "55eb84cad0fb895766d20444895109a2", + "result": "valid" + }, + { + "tcId": 296, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6d3568cda434f07c66f1b00081ddf49921f60804b68203f00f7f7159f577ee66", + "iv": "6792fadbb17795513874d9e895f3bc299de8b38c1e78af50a9c4351a3845c3cc", + "aad": "65369cb75e0c8259dfa78866eb856d8d14add63bedc796d15a1e061a68d9fd0f84dd102c4b610972cdc70ff98851d66d6a5b499029e32b4d74498d429378d93a31285ace5a18903e4ceddb8cd900e0092bb08e455cabc9bae02c228072c0ea15be846301fd77dfbf227fb2fc20a917483d62a712d7e95dc32eb48d07", + "msg": "4f0aaa0d41ff7a0a86c147db7cb400b0", + "ct": "b106029990fbd4d567462f949b66dd05", + "tag": "e43109259bd5fc171afce9e7cac85e28", + "result": "valid" + }, + { + "tcId": 297, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f29aa60d33833d2cf114a09d8aafc744f97930d8f731942156315adbcc95473b", + "iv": "1a6f5f3eaaf11d9dc612c9157f58e6f422bf4e8e7ec50fcd417973252f68eab7", + "aad": "4c9cfd19db2fd6d76026518cd1a3946a309ae58736e817dbe20772fb6a6b4c1794afab7926ae9e4b5d62784467f0de63b8a16dbf9a1a97b3c22ee0b24bcef64ffe197db9f6bedf71cc6155e4c76060d607abbd1cf92c81373135e6ef4c193c8a4b2505eaf9f29c20fcb02bc8692fcdac614935b1bb4d07c6c8939f6c27", + "msg": "418e9d324cb6632c0d56d8e206d19320", + "ct": "0ea0beca726a9f4e34bb448af1b3dddb", + "tag": "b25d3759d8068537b3dcdfe7e5965b15", + "result": "valid" + }, + { + "tcId": 298, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "6a8b563b0efeb9eb67193d09cc929a5884257acbbf424fb40d8791e827127da2", + "iv": "8e8601eaf45a3ef4ef8b919cd809669dafa1419ea2a905b941d380fbe3f141c2", + "aad": "928ee1caf5baa21cf84a3062d562d32eb2c60dcc2080075d79925b9ac487cfcb4a9efba720114934913a665a9e74cd265f01a712d823bbe057308f12f9a11e59e36ef7cc774179edc9756150ed303feaac94c189b4fe7ad07894f6bd755b329e45bb4f95a2f723156a46f3e4596d7c24c38c8f0e6187e4062351bfb1ae42", + "msg": "f06fcbd1ddd5fa91ce6445cdafdd5f6f", + "ct": "0a7029a76da807079e2c56912ea126b9", + "tag": "018a4cd7b554e781601c0ee7b1f4d8dd", + "result": "valid" + }, + { + "tcId": 299, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "50646cfad4d6a5ddc9e530dfeeadbb50b656796327d7db2abc814bc862067288", + "iv": "bd0a726c7b4234126c5561baa093138fdfb44d5a962dac9c20984b457e2542fc", + "aad": "dbe34f0b277ff272c7d92d9686edbec58094bcadd9cbe86d294956c6bc9b1c1f8f033eaf7ed414947305317b4994fc6a2e57c961a5abd41da710b6aa3d71eb1f546417a9cf7e7aa206196ae3454605f20b5f74a153bff9554b2c8ba26e8c9a446f6fb3bcce2c4192d1eb318f677ae0f61380e43d48c5a039edca652d599ba1", + "msg": "2182d1fc1ce702a08b0b3e7b53ad2347", + "ct": "adf1eb6f767711a4d1ca2a1e204822e7", + "tag": "90289d0bf5a1a80a66e99eb360de0322", + "result": "valid" + }, + { + "tcId": 300, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a5296e9d9c0dc466060161739a19b4eb48e10c04f36193597f1da1574c30da44", + "iv": "566ba1b9b4b680532dc975c9a6941dca01e0bcc3e0a8ebdcbd421be22ab69c34", + "aad": "c1c805c56b60d4f22b124bb0fe850462fd2a3b5e135ed465438e3c08a73ede593425174c6fa58d7a1157a56db17521786791031946757f7b033646026b34a2ef784225e520d8a6f55f5cfb4397788cf3106fba45c95a0e91b0185aef98bd26855446552bbe1e454c4bdc8d5781c4498a206dc62ec7fd0c5ea7e0ed274fe90b01", + "msg": "346f3d0fd6645db5614a34c1f8001458", + "ct": "5ae31bfe54fdf8ba7d401e5861016565", + "tag": "883bf845642361a57423a9700f3f6756", + "result": "valid" + }, + { + "tcId": 301, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "af31d6363a91a1527d7fc462e2b3d9a284b143fd2129523c4ee508a97bcd5c61", + "iv": "6ed67cedf9a615f19be7337d2cc3dbddbc0363718b8d788a6858f04066430818", + "aad": "5b6237ad805ed434e8e8c1a16bc15710483d1ab482c060b31bed8980f1f7b05de8a2193d584548283a3d9e791a8f3e0b15f3916640369b25d6fe8607cc430abb8291d3e06870392cd5a6e984fd2385a8429cc3c78d1bb0c4fdccb0d6be6b48d3cfdef83368c566f43f3b2633f2cfd3b6157f3e956f729003f6aa0dcb6a32b407b1", + "msg": "1ab1718ecbb79fbb3a48be0879888ad9", + "ct": "6108e1cf84056031ea8f37aa8c3bc360", + "tag": "d52d5b5468d003f39e8d8a2c69149947", + "result": "valid" + }, + { + "tcId": 302, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d5e4202e4ea907ffa20bcdaa159c992407f10df902a9e908eb7872f90dd8be81", + "iv": "4cd667aa4ea5084ecb66e692c2d84b481e16caff2cc4ed0b01eebe32bd82f4fa", + "aad": "e619cbd1b40c54cd35a5dc589d845a25703aec5eb3d0905a737c16adab5ae01add4d128508bffccac6bc7a8f0cc8ff99f9de2658aaf867199f11331904019e361d5e4c596d087fcb6989700299dfb9cac369a68a0636a1095fcb355a5ee0fad6e24d6c076d22897daac205e340fca67b821c0f96a7b6923a6fc3e6ee57e33b96d9cb", + "msg": "539724c10aff2c879c357855c3443d31", + "ct": "2b915f0c84b2fdf2dbde302bb43f25cc", + "tag": "62a8dd78221fac6c0b418d8b689dba91", + "result": "valid" + }, + { + "tcId": 303, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ad91ff2de2405afa0456ffb044721949b26d6978f0a4a1195807df4ef7a88dd7", + "iv": "c9aaa93b649515e365a557075ae4076f7e17dcd6f3d6335b67ac6d15e893d895", + "aad": "a187ff8ea11a017229c05ee6b9e073362e154dee1f2b623b5ed0d1911b68190b66e3207cbbc397ff551df1376fd992647f374f51db2c6fa714262fdfae6e709d27361a15cd85e5cde4f6b1344072414560495302e4fc7961cb693648b1c2bbd15b07d96b091dbda71845902e8616b5d690b29984181095e5453a4f99f7eda20e4d8746", + "msg": "ced08a217dec184e3476279096ccbb9a", + "ct": "c5a8337e27d5e3c4a634ee7ea96e8f9e", + "tag": "458b3e6d06bb17e923791a18eee8bf6c", + "result": "valid" + }, + { + "tcId": 304, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2b4169788b8df61981dcfb6309bcaf502c2b44f7d156cd1de9f061506f0aef97", + "iv": "ffc296149710b09978da3953b202287f5afd7e15b804b2ca53ceccb9cc192f43", + "aad": "3dc389ad62239a3241df5b06e9c2f4949cb272ece9deae134bde9ebf310b1bc86c317348ed709174c124a23456cb799325e6611ebbc022359d786ae634e9edf980aab6f3d0fec744c6a72e99d996691d9b9f9d5f6a94a3f6dfcf2ef4bd4eee0ac2dca15d52aaadbf3322522649bc950df09a000d434fa57b22d4eb3a07393dde1e9c690d", + "msg": "fbb3a9ca45ce7fd78ba14e0f3517f352", + "ct": "7b7a7459254a47076d8973a19a1f0d7d", + "tag": "45119c749614fa40b65008fab29d590f", + "result": "valid" + }, + { + "tcId": 305, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "8c621d059a63d4349a02d6b26b31007274b31e8ec00359f89e283771686346b4", + "iv": "5b379dd96a88b1a437612b008c0193bea32c9101b19ed0e0792cd5f6bcb9f31b", + "aad": "349da900f4202b62621e273c7923c5d6ee502f40be872adfccc3bb2c797f09683c0e44008301519ee72d6dc185a565a92dc43610488e8a8bbf49efe60d8031fbaf11ff3bb1512ef72b4b48928bb7bd9bd1815a7486c15af28a9a0edfc674a9a8030f192d4e471c2b2800cd8b599d44221762c0139e8d23d978478807d0416c30865b8c0dcf", + "msg": "54cb30f593d3791e09739ec277a42d3a", + "ct": "9d632d23797c06b1454ecde44e3415e6", + "tag": "412c80fd68d39aca14ec9a0f72abf49e", + "result": "valid" + }, + { + "tcId": 306, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a733dafedc75ea4c2ca5db7dded99fd6613d422948cc1034ee7c1ecd73fa1923", + "iv": "5137c9586f54b932aef3cf98311fa05fdf2bba049b4dddf3c01d12b0b4c30940", + "aad": "c084439bae1b45aa6fb48611c0a525d47daa1082575ca25d631c5ad4291db3861cbab311e9c62895ada42940ac0464d3bac901f81a9708dcc5a1aaed43307fc28c28f3286053d15e2d285901260f68cd103b2a3970c0c352152e69082366e8e8c7e3e0e1f7e21aa1bdf39f0a0a61536908304eb79768e284faac5ce97002f8130bc771f6d745", + "msg": "8f79d32bca82b42212892f4ecdf4eaf9", + "ct": "c2f1b216b37f4d794f788e0628e240f9", + "tag": "bfe8a757375590f53f96057d64dc0f9d", + "result": "valid" + }, + { + "tcId": 307, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a172127e85303908f55b62d11bc310446cb66f1e8bf9d30c721d30e470bff041", + "iv": "243ac72ba1843bd8a180945303d48629b6c30464aea2050011556336b0c4a18d", + "aad": "a9a857c5e3842ca066cef72aeab13c845d7427700067b9f0c918c9f7926439d9ecb07c30422024bef342930ccba82dda7b376d1861688dfd2ea4c1545c3c0c499af4286844ce6521cc60f6f16a5b9fcf03f793be262b463605e18d0271c6a02ad1387c8c0458b836a617763d5082b509d8f208f08b20974328b72b734df18009f2bc0ecf79f8db", + "msg": "e1c813702e8765fe4aa1b16174f42310", + "ct": "190bb2ad202a06bafb9e14089084b99d", + "tag": "ec30e7b7b228b601dd0998ca5326c9be", + "result": "valid" + }, + { + "tcId": 308, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1f7284996b078bb03b9e087c41832def69d3b66240c1ae2b808ea7760c3f6187", + "iv": "54cd502da52a6786e44d7ccff64e49ea069216e95b67c88995e27065a67a791c", + "aad": "97a475d3c97095f03b61a852154ea3d767d10fe919944e5d9da688c87b6ae6072b132dcf3edf09610eb3bba613627b8f4d104d8e8f0e35b07cf15b96c91e8aba971876eb42d8e05492e96a298b6820ee0d3a5f2fc65ee2c09e90bec7fe9f2636115e1813ee54193f81af6a61325ce4188ef848eaf942f4b1c0a12c5c1aabeb51040a448295350a60", + "msg": "94f961b56b77b30e92bff8033ad9703b", + "ct": "28cba5f9905ee873b52578a1c9c153db", + "tag": "8f18a8e217b83a93fff846f221780d4c", + "result": "valid" + }, + { + "tcId": 309, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "eb2f957a2a05f0d5a9f31f4269bbedca343ecd87acd015355b21b995ab46236a", + "iv": "7a09490b281d4aedd78606ca333a65937e35b7e6b9906160b0df9d2b664367e6", + "aad": "2e295ebd9cf4c5240045b322c3e3f75f6fe3564b0995df1fe428d1b3e2b051c03c09bec41582ad218f512570a9461424feb792d5d0d1291879aaf316aea100ad2c068da8670605e70854f90874c4f52304dc429e0b29cd6209f94892446b768b77c4cbb45de0e2599a6743ebcc72eab9e39a28744b49f88e6ec1040f5b95a7465cf23f0e977b0d89a2", + "msg": "b9be987e8a81dd3220997a2aef6dc0bd", + "ct": "f805c24efffd6db8ed57b1f5fdb7152e", + "tag": "b886e650675b1f17cb4410659abae76b", + "result": "valid" + }, + { + "tcId": 310, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e3f7bfa5f58a547a1ef571f29654940fae6f9d3f2689207fb12091c59ae482c3", + "iv": "ecfc064282d56577431ff609c6771e02d01eb3f7e401b4bdb864b188e2f77781", + "aad": "c8af979efd5cd0aa1649c9eeaf9abb1fbd11c8c1c9f48739362239b4de41bcba6ee24caf002185fe41c85ab4a3288333b40870473cb04a9cc8ec3bd4f009d1e49c92ee4298aaa29c02d9472ee9aaf85319abdebeda64d41a1d61d5d4c1fa09985bce070b0ba809595d1c2bb3b3887198482433ba9b9b52fda9a01e4d1c98f809ec17e1d59cef0fc80144", + "msg": "967bafcecbd0a6cd86db9f82f7fb46a3", + "ct": "91c8fee8f55ef768e008aec87daf64b9", + "tag": "4b56fe57b1c18880063392584c18610a", + "result": "valid" + }, + { + "tcId": 311, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5225f1ecc03b9bbabd7909f789212e361dfdd66d0c4e87068c5894c5c8bd2ef2", + "iv": "c00a11be74816ab858846d56cd6bbd10b9eba0a3942d6bfde1a727b94a8d30e5", + "aad": "44557a9cbc0e840e4b7430e359013361695828e8c594bd8778d431f84d9e78ddf98e489d3f1bb35fe2079594f4c483ec2beca4758548ee4b176373fb8efd158b32a590c652f14dc407fe7ab2600dfd0dd921ab4680d368024d5e0deaa8d627e372acccdb0e9fcd33cfd86073ccdcaa28726e6bbfa139d52e6a71487b08e01c03cafc7f31456e9dcecb9d52", + "msg": "081d5b536d0757d0c6db342822bf5c0a", + "ct": "7aa3cf1099d35e82c86c2c0e18fefd41", + "tag": "8ac48d6159e3ea51f7138b45ace9726b", + "result": "valid" + }, + { + "tcId": 312, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3fe08e04606583e57f2121d18d0f53d48186bf88b60fb77368f216324bb9b21d", + "iv": "b8b130e40567b5db6c2ebce46bbb2f63ed5e50d9182448eb8fb2b6acda95f369", + "aad": "a188dad7139e205e421c3db50e49ccc2d44ec6557ae435ff4d39a8a39000668522f4ccad8302dffab2049c41cffa0b5b59d334a66b2e6e5edfb8d8f2a8b9e9c8d86ff4999ca496ed5ecd5de38dd059f9f236a1abd5e51346210a05ef2bd58f9635ce6271670b7016f19be1fb0ae74cb62c8262e873da366947795f9a4d90a613190862c027d029154ca7c7f4", + "msg": "220cb052502fe87e4cb2bc9f9475f773", + "ct": "fe047d02550e9d3767ebab70c83a1930", + "tag": "038dee365c1db0a4803f4c055e6ee538", + "result": "valid" + }, + { + "tcId": 313, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1a2a75f15fee96a28e7d63202e11e801d60b8262bd18f47f29e1de5ceec8c23c", + "iv": "d85ec4ee308150e2beac4e49b8ef39e1cdce6a689b80b676b8f909c4fce38d73", + "aad": "44e64ddee1f534e46913765cc32bc7f78e3ed65c6fa642511a97d714c4ae04afa7a269acaa399c0869eb069eedbd7d6507c35108ad3cea549a88fd4a00c3a616e0327c710a0747ae80583bbcfe3e7d5bc8f2c728911dc25d844e119700ba7cb004e61a8abf9c9b7d9d2308b27cbb428f9a0585468179e07161b35014f71f24e56c1ac8dc5f3457520f5de17c73", + "msg": "051f61032938ce78796453ea350cd585", + "ct": "c8506b99f2829ea60c851bac4b852ea6", + "tag": "a9e48cd2f755ad42abeb6ec9b3f8f24b", + "result": "valid" + }, + { + "tcId": 314, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "fa888ad8669764978f5beda9f3af7180cbb319b94a96bd867f07f1f63b4bac22", + "iv": "0e4100d2fe798524afd967ef657c5e5f8a7003850a570c287ebe4295595b1b6c", + "aad": "71406f35b97111c7447862b06c1e985426efe2dc427e6002961bd127eafde64a542dc235ae2c81270af29c9fc21d1678b7306e4c590a612fff748bd411710f5597fc614a8625b16fd30b6fd6fe56414c82fd7e140ae5c253dbf4d3d6cfedbdf38f56737c2debf9a0bde5d81e55900e30414d70ffb3c91d770be76fa5225502279aed75cffe9840cc3cabe875da9c", + "msg": "dea9b4d72e022d9bcdff3c05941f4be1", + "ct": "c942a091a2a8531c4e086bc1365434fe", + "tag": "c6e03166f680d4d35f86893191f5523b", + "result": "valid" + }, + { + "tcId": 315, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "b67658b7df879a57587baae44b720ea36e20ef7b7addb9373e16a5d6411a61e2", + "iv": "385840e625c52d1be22ddbf0c8cea1a1c67e63d0e6f868e23d173c2a17814691", + "aad": "b06d9980eac2265eca73591e1296bea3f11cd1faf22217d4685ae0fd94eac7d2260f1b8eb88025f180de13377e78de0a68cd5b21a463156fac447e70d23346bff1022acb36ab031358bc0d4bfdc774b3d4c50bbf02a4aaf4420fd336b97698e082e9cee01b6bfd476fc02a436c91433c41eb50f00a36145f17127f7a2aa3f83e912f7ed15554c42c8b229c61604420", + "msg": "19ac352a5aa7ec6460610d5d2fc3f9be", + "ct": "9ca033e70f90e2a2f2e257c907b7af1f", + "tag": "1fd5a35b5fb951dd749c84774579d551", + "result": "valid" + }, + { + "tcId": 316, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "425d4c5f2f4e76a9a0b7b2bdf47392f88de4ce01747b6af7524f2831041c3d05", + "iv": "eab0a9f90134217879b9f827a5b586bf1479d25ea8475450bb747ea742dd10fa", + "aad": "6a4d41a6ca5295b1409103ab4b5fd2d947b75d75d095c85bb5ae39aadedd1e77ef1985252417e6f7030b157cb9ab18ca1a665a55e83458b56b07ff04b181b2fde815973a5a490afcc1aa961ed2746ff657893d096ea55bc98a658773edb7b3b934f5751fe5853df15d211e1181b6a445fa746410bb04c86792b62b7fceea2435042f78cf9176cf4cc4af97479e94ffcc", + "msg": "efdf6ef074853ed180bde5879248836f", + "ct": "2cd744b2ebd8629db6b248a1e246ee0c", + "tag": "662f346b041ea57b6d5b70bf120d1a4e", + "result": "valid" + }, + { + "tcId": 317, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ef3ba36ab299d8b96944380b7f282d3fff929ac4b5683480a0facf298b645c0e", + "iv": "01c6f0774b732e9149674a1fdf00f2e733639647abfdbd617ea68d250fa75329", + "aad": "ce88ab854c0d708e7bc0dd57889f70571adc4f9a73e9bb4704f456943c124709965b0fdb3e01a3cc69966051510b63b7020dc8b40be4ac02409c0b2f8de9982764a3d74bee3d4a9b2ecd760801f1032c687f711a0b62e473dc7fecbb39b13e77676eb61c5c6d8665cac7db057d7a071665429a6a7a05dfe8426467e54df367fd9b76511fb358c0f6920518b83e49b47f4f", + "msg": "976972ba5a65f18a7b6d428a2cc54744", + "ct": "1c65adeab03d3777fd6b8a88ca6095e2", + "tag": "af1361977b86d087f75e6eedb33c9f1c", + "result": "valid" + }, + { + "tcId": 318, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0e408ba35eaf8322ff9d4e2f3c57fbd86f65c6538b5b15c78b218e26b9e3cd3e", + "iv": "b6398d1a37b9f62f8aab55b0d1b1e628e568d788b7987590c145f08fe1496df2", + "aad": "232b000c7ef8517b9c58dd80b16af380d0f1f5aee18dd59abb4bb2bd361efed7511c05657e06c8010138c90ea01a7c9588a333078d8f64a3aedfa262a69c5ecf9bc1da0b46a18bd8362d6202ec8b7d7c6b1602104ab346ab3911e70ab7fd45cb8471193aa7506f1478c3e60518cf4aed11d336164f08e49ee2b49f7c51f8d3e658959880f1501244ff40fac6bbe567841f11", + "msg": "db0e2741ecea9b5ee4f3bc9a774642a4", + "ct": "aee04b5cd5c0c0e357858d2d81907495", + "tag": "2d4907e78d0120d622b9b8fcf3a985af", + "result": "valid" + }, + { + "tcId": 319, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4d5bc2abf2d9da8280cfc242306c373ec3350d331b9d20d6c34d9e83961c3599", + "iv": "0c55f67b24be42758c1bc4055b3195c2d9371f947655f6f1350390843e28ff81", + "aad": "0ecad52b3457a81199836362b020a3c0e4cd491fd42b8f7b7fc444da7ba774599b719526a36fd82d25b7efab6020fc7593caebd24ae9fd75d1ae4503be5e79dc7ae6dcc19ee4977abfffaa9bbeffc968b718d3653c0301f27fc151f3c099d761f1313dfc75d8340b7438e02d122ff0d8b86895ca55158db06a1f7298ec3300c92468231c4e2aec3e01c06b41fae1ac7f97602f", + "msg": "5dc035f186ec9bf929df23bd0b8b3f3e", + "ct": "d3366fa41d3aef6325438d6c1c1b514c", + "tag": "73a3dc45580c6937ce83f7d1c84021c0", + "result": "valid" + }, + { + "tcId": 320, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "00f5f9e6d2717a250c8402465f15a1cc92bf9a5dc70a4a9bdb41f124f9ef492c", + "iv": "67ceb6b2fd6cd57b2a8262ee66259a58df68a7c975cd9771ac74ee47626ac169", + "aad": "a6e11d49731b1e14381fa8717157c445cbe496a70b9a77ba4e6796f94b207758b52c26c305a8f7949a7db820e586247bf46031b46d301d018e54344d6c5fc2ea07af389d476620d62440c68fe30668386958a853b0f9a85c74483d1ccf77c518e05a0946f82deb7e069a2ee2cd00a686405abbc3f06f86cf97cc642c1452281c57f409853b40eb8878bdfcdb5f3eb2b17ad9ea53", + "msg": "4b288a8888d11201812e57bd5becdc07", + "ct": "b949d92941704d6b7345550a1ecfc727", + "tag": "8f7bdc252349f2034921ad4ee4044c43", + "result": "valid" + }, + { + "tcId": 321, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "a5f1b3ea03767f461bc3ebf32da8dc289dcd1d75c61014203003945eb6091e6e", + "iv": "23c584fdad481a3a3feb0abfd35eae0b5eb886825da76b7ffd1e101a9117ec2f", + "aad": "a75f0c0d0037ea7862f35621778044ec152e90d74d35e176bf49b7b1ddcf03747ee1d83c8f2f325848a02067a76e7d73d2329265ed66d6891c924a1de260b0e69636a0e43c3db750fa2754893148f25f65ef71a97fa9498f0a9b0d97beebaeb763b66e0fbf248ca8ff77c96f3583c4d5dce8f2d68f33574e5bdc7c11f83c7f5394af26e62d5b9ee23bab48a619201b6e963c3518ae", + "msg": "57468ed75ba57ac0653bb11727affd41", + "ct": "2f2426ba4c124de1ffcc546dadcce626", + "tag": "8c39032d57ad9db8f82cc14ee856a4af", + "result": "valid" + }, + { + "tcId": 322, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "823dc9b9246378baaa441efa00030a3f2fa981a86821073fe715a6f26344eca0", + "iv": "7b451d088a88608db3c32985aaab7ba7b6564fad36938d5741fdba4b8335d040", + "aad": "3bc27a391f779fa774e021ccc2425d05b7c4afa51482b689d920f750fdd5d5a866fff9d8f2d26533658409faa3f6a8a18f24cf0f6f8a20c407a2acb32fa73af5edcd0b395ffc7ce7084847e5e655160354f9b7dceca09559e166cf26944a227b92433a8d53a6e929bdb6fd0e01bb52864b9d015f470abeb996d7d465d68029235f58d1c7d7d419f34e8a1470d25c5d009beeb5ef15d0", + "msg": "376293414d079d093e2f0c31d4839400", + "ct": "1236f92d66c83724611a78bbb3da22f3", + "tag": "0976c7f88a7eb01726329ba9afb733b6", + "result": "valid" + }, + { + "tcId": 323, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "3993b624ef6b7604091eb7757e81ca54e47887c2824e57e1d37a3cc67224ac3d", + "iv": "b47cdfc36d4b0b4214ff347efde0226d9060a2eae42c7db2cae82143d2312988", + "aad": "8aff053594ea9085f7355b27c9b8ea8ff2f96934e19fed1ac410b3b2e4f68d0ac123aea1e458f758d7e6889bfe49b5a0fe5807e55bd03cb53f717f22d51164b9d9321fd76b9a593d3d7eea977e3f14454233b64f9e2c9efe571da406839ce5b83080215998d04afa5bb0dcd4b7b7dd129ef69d37de1f2ce3f565bbc6ecb1556af059df79c63a5a2a477f04c87c14adb3ad1fa27d5f883b", + "msg": "7176c2819369a35b5768eaf2314fb22f", + "ct": "274fab11daafc48289620b56b580700f", + "tag": "3363e2589fad8af593fa482ef3142771", + "result": "valid" + }, + { + "tcId": 324, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "790f56e8ddb4b8ee9571bb526d284be6ee3af02727c5c47fd9ec8840aac6f5d1", + "iv": "796fd35de168cc76b8ab857b38759cdee119e42a2c34cfcda6f506b7042eabc5", + "aad": "62ad5f2c1c0e901eddafe655b8d4950bf09e5941d7d6a2e6021f276903ae49c59f022f5d4582b2cdfddd3dd5ba20dde5a3442558a690deb5fa86e15a6dc4f8e692cd915cd2b5bf78152c5ab556d3eb69fe52e55b81fa156d90be09915c8b731be9280e1baef93b3555c6f238c6dbc7ea7ee16b27cd9fd68a23c7955240ae57552ffdb8d9e9145403edb086506ce8513bf2633f880ab65a3e", + "msg": "d20cbfe4ce007808f8334cd86aad258b", + "ct": "6078fb3bafb79976266927563e615bdf", + "tag": "74b31ceec91862ce56ad3706e42c2b4e", + "result": "valid" + }, + { + "tcId": 325, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "766e03ce4de2b3f4008ca1ba6ed7210ee9c7202d257507681c24d49770866114", + "iv": "c5fdfac100d926b0d4dddfeab407adc72dc6801bfb5589bd68ada29fd546157e", + "aad": "3d770e0ca143941aa2ea79a71f44015822971537e25970a8102b264b5be682c4e01bbf47c70fdacaa7c5e4256642ccaa08f43c583993d4b1145f599c5b46d16c3881a73675d9b64e7007c6586a9e9542c3a181a5dde40d03e6c27f88c8fee56f730fbe0ab442e2cad1b55b51730e0bb5d4d036a60c07b09056e76bfe3c8f12dab78bb87e7c5ff1a42b50e83280efae0a90ed4951c8bebfb040", + "msg": "541fd00c71a5e5b0706fc17b0b1495ee", + "ct": "c362a9d95156982f9cfba192eb633c01", + "tag": "9d0af45db986a72d9d4a968cb806a45a", + "result": "valid" + }, + { + "tcId": 326, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2466301f9acaa6f93deaacba49a1ab75c71e2aca8893fcbfa06de3473893b20f", + "iv": "9b6c5205a38fe83a2ee29550e5952c50b53348f390cef922bcfebfd546e25053", + "aad": "3c638c8c874c60db71cec68eb2d394dbc5654d55a49005d067ed577dbef956dd60fe1ed2f9970af5ad4901a04d58f7f09ac01d1cd1092341394002517133bd0bba6f70c0b80a3e63d79d7f5bbf495f55cb721bcafa8dc62964bb20fd8fdfcf9e0ec8caf802ef48014d534f0cf5701091201c825b61bc66aaeb49d88b9109ed3cace94813199cefde0bb156c661841702d260cef8de9c1c9689c3", + "msg": "1ab1f7b88238fd39b8901f84b7772789", + "ct": "526540c72850b6b741a55e9979c52d1e", + "tag": "b7a1491bebdcb73466145126d7a87292", + "result": "valid" + }, + { + "tcId": 327, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "16c5888caeb4b3e1508f54641cd16f96d705793b1537aaff0a8ef91081891957", + "iv": "26b110658127fe204c9e70ef475e13e7a02e197dcf290749ce0ae552ad847359", + "aad": "9132ed0b328cc8538d961f258f1dc61503d90197fb37dd4af3595b87b976def1cf47516b58b64005b1016e2aad8cb8aa37f5640517df593766e69f43227fa07a8aec4884e7964c3977febce97b98d3a4179fe52a10576ff5cc05481574dbf1109afdd77f32bd8b4bee8c43abe27a1dbac051337b53095c360af963c67e0a567445af1ac4f55dd7ae4cc64c66945475b132e5920a59dc023b3e4a5e", + "msg": "7036d7341fb2c066b5ecfd55d3da7f2d", + "ct": "262c6f05e3c011aa2754e3739cf9978d", + "tag": "899f90ccf38c684c7e94305c186fe1d4", + "result": "valid" + }, + { + "tcId": 328, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "5eeea3522a54504fec81b7cf6732315a150a6b9d403a143c8747220c49fa3048", + "iv": "609ed4f217d0e20022abf2fc4d5c4a535f7f7f8291ae274ff7e1e94c50f52592", + "aad": "cf58b52c07a99262b56449c813fa1331165c0ba684b063eb396c57bb1e968cb1bb102c62ecd26c0a878653989f743e25660ae2ee8473cc057aef1966acd9cad507aac11a183ba9594ad1ef954953eaeeb7e09f39d0203c8ff4817b281ab324c8c917c1ece10201a0a0bf91a3f7143d89da414b85e874b1e3151d889d8f0d5f86c3147f833c7ad23b404328537ed2be0e94b886ab1b84607a3833355d", + "msg": "2d6db9cc5df6099c8fa893af2cbf8ead", + "ct": "5603b44f4aab8bbe11ec5d0634ac6e1d", + "tag": "f2f99d28b05771f26183e0d806c7600f", + "result": "valid" + }, + { + "tcId": 329, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "679ec0c197553126ac98bb27c2caa113b75bd9cf33f7cd45e62bc8ea1a4d2a25", + "iv": "4a9dbf5694f277f4767310fa912147dc9586455e2bcc1835cf30175a8e1d7df3", + "aad": "4d1ed2ae07e0a77d83d1f5e9ae6483992a8879ffbcdfe505552de3991cbf08c935b0bf55fe3e87a9d34edcfeb38003208ca2498eb756e19b61f05aec48b14c96d72d63f32584e731a4abcf277f8855f364582f5992e5f33f230fa270d140720c51e07430e769b8f3515e74f90581614785cf39c6a033cc96e5c99f2b8c0a5e549c4d043a94d7bc7703d93e20f3fbd287f4d62f69daccc0aa0fe1ba5c94", + "msg": "1f3b621d49d44077f1df33c76193f866", + "ct": "dc9160da8c6215a7aab7dc10a6290f8d", + "tag": "b2e60fbda292da2653180f6ba4042057", + "result": "valid" + }, + { + "tcId": 330, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "e8593b3d8c543afb6fedbd397d887a1339212056746bbdc3cc005b9be2e62510", + "iv": "f2d58a11ba67e920b868b6e213437aef4fd981a7e6e8c1e7a4d58cae6b3a2c15", + "aad": "efb2b2830e022626c36e34f71510f21917580f37af73115106de59b1ab8899cbe23c8decf70d2d20cfc481f131433990ab7a37d5a4e01076ae61b1bb6e140219f3d2dfc0fdfce4664cdd4b11c95961a59be17068644c12ebaa17c52d5962777eb7d440a351c2ce8cacdabaf7c92fc6017c327503af0725d683478b2758cc86be4120b50d6e4c90172a7a715030d2ad33e5752cea484a6483512a52b750c3", + "msg": "3e598ce223a478b86717597c7a98f66c", + "ct": "7bc839c88289b261cd59b7384cb748bc", + "tag": "4e02b0d801249db447ec894c3e039185", + "result": "valid" + }, + { + "tcId": 331, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0e2b908afe85f71d4dc10f58aa0082bf4b0e43c452e52911b1032cc773579d95", + "iv": "d5331b875f0d4e61ea5a2abd52cedeaa075c21a1884c6fccf6bc2fab755f8704", + "aad": "117faf62651d68ac03ae49c13a50d437f57e04eb0c0dbf27550385f542e24de9efde45f4c665a08819a6b6e696cd446f1092ce4f1957d53b0bce5361e52b224ddfc5a5626c368a6d3b421d5cb50c1fb34a0e2c739ad94ee8cd941e125ca742f7b8dd3704583a0f7ad5183d51a019b1337407264fd6f68217d1468ec7a4a83b043729bbfd70f124d12ca3860773a04bc04f5cfc3053352024750ad983ef3b33", + "msg": "d95942a75fb8ce075161c04e977ea080", + "ct": "916553e5e385d2e3b43d6f6f03176cf9", + "tag": "fff6038d678be881d51e86952a9db8c5", + "result": "valid" + }, + { + "tcId": 332, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "7d127c48a345853d3c6cb66f1cacff5786c9cde49c9c13d1a513184f9b243d41", + "iv": "b25141c03862a068683cf6b375f8e03433ee09ab6c7d568a6430ea629f3bc463", + "aad": "4ce374f4ebf02e2c089073558cd9befe46822ad6ce8cb4c2889ef3892617e0b6c60c6375977cce6d96bf835feeff68e70b6c6413f9b0e8806cb37ca407b64e49157bc3c326e56b7df849c39f7c7eb2518d9ea98bb037bdffb0742e48fbc3f8dd7fffc7fa6a1b1a3314b37dcd97b4455927ad92abb772fe0d882f87998d6eb1072d174c4917474f39620bf0e21c2990a76900344381b5f5f57ce9460dcc5b6290", + "msg": "f5b47c5074380adbd503e8b76e7c7901", + "ct": "f9645cc68a6811d7cb698a1f66bd72ee", + "tag": "480f07011bb489f18ee5825e4a7d7405", + "result": "valid" + }, + { + "tcId": 333, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ea5bc75578da006dde869b5cb8ccfe15d135897683de8116156d9a03ec7646a9", + "iv": "db58ee12e49beb1f15dc4f495b36fd10fcbe6a760498a0c12d9a46f5020072e2", + "aad": "5937009a9265e26da7b5da6a28176c47977cd0a72477b9ef37c3d9243df3e773a8d3fe84d581ef01874b572d2771813fda702f9a0d96aab1564d0ab1e3acea91c93c67dc494ca9a63a37136ea65eb7bcbd5f8ba2c15eb5c3cfaea441677fc8920b31d2cf2420e1f4135a92f119dbdba8ef2942a7401ea76cd4b2f23cf3adb894474f0f6b9e1e2bfa8b36c0c06b0079e2af77047937c9898794810d0fd9617b7588", + "msg": "17d8e1a76e29a49c262e914ddd12ca1c", + "ct": "c2912be6253f5c2a19d9120a680bf3c0", + "tag": "dc5117796b604cdcd1ce1c666eb424e6", + "result": "valid" + }, + { + "tcId": 334, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1681ba0f1b2ebdc69318366eb214da5240e75524ddd3f58f5c0dc6d8d38ffe92", + "iv": "101df5ef22a91c0fe194854dbdf52c41c8df11112b61e09985cab0db0cc06568", + "aad": "", + "msg": "eedde49254392322771da0e1abad610252095cc4a67940c7e7dc2c480411322f848084132b303119081ed1d3ca85ac18551cfcf87228ad9b71081f823fd129c9d46bd1a7a9b078788e08413ebc06498189b798eeaa1f1a5b65bd02f96d816a32f5196e330048233b7c7e88ae81054ef620f26f9abd8fb08bf29794020d111a70d993f763ae6aa6da6d19a832b24e21553cf247d721e01fc80a685bd92c7ada4b6b0c17778f8a43c009b303c646ad6fa3089964382b7549ce3bd2befa55c7a8ab157b19d95f71f0733eb5ca84e2f61886a4e6d086f57788c918fbb808ec5eec", + "ct": "a8bfc9cd6a4b105ce839b9677ef91167e783b8ed2db0e3a32a761b21d4def44a92737d57a64761c5b877d35671b0e13998c1ba3430054125636b782ea8ae07afb3e974f2d13350ad0aae1a55e120400928a1bac8f3f72a360b6d813352b741fe57ba0f0f338a69f884943c9d30e25c6b27f06fae805c40d30a83db23b396d35982cdc9400061aa913b267333e30b036d117c3af7f8cc0b2dc812dd8e4ee62965a91cf827b3966e20848278ea3c2e6b7f93117d65f03a1505cf56b5df98aef7a0377845432e8e1040b1dad9de49257eba8a514cfe792b7bc567e08aeeaacc19", + "tag": "3233c6cfb36b9930b120f23162d03593", + "result": "valid" + }, + { + "tcId": 335, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "33bcdb149b044e355cf4d414a474e34f2c0e61a3206cf3b4c369b7f02971b460", + "iv": "ba0c19841b8e48d4f5820362561c75178b83c74388757129655c736fb2625b54", + "aad": "", + "msg": "b68b6e75bc21ab12cc7a3172ba0b7cf9805fd2fdcc7b030ff07092859c206b18819ad7ca6edeb6c2ee4f24a209e23dcb05a72977de15b58bb2867271e3ebf31e0b335980cbd46f6e10de607b80f8dd61b8d11df0bfd4c6afb996bc2ce8617c050220ff3a0024e5d970fdbd8d7b1cb13d3d622d56c8d573bbbd7db4d500bda6b6cadd7effd1c10ae1a99bfd12352f952576feabcf0348597a98262bab273d83c265797dbb26ddb7b0031b8f9f17d25063fb2746caecadb5b53a1f14184762dfb6b9bcbf382a48d37a1c0b4e4a6be23ca8e8adae38ed3553606a9b785fd26f3ae8", + "ct": "9cd55326c4b0178ff59bcb02f559e26f5bae1ccdb1713fb028837ef048cab16b05fd04f89b5ba34b49cb096c06efb5857969688d02a72d8dfbe398bfe7b51fb96c569757f5b0481f1e56a88aecb7c05e0398e882a7847d1afac8847d41f68f3858e4e571aa6d5f21ebdf87e6773ce3831a2cad2dc26ac606bdcf19b577f08debef760fadbd4d05f80152d2af8ea5ee2d85b4ed8f79d3714a80250552ce25c2157f559dc1c413f6df2e2ae10cea99fb3d78b8ce249c99d12fff001d2510266b233f6872382105a1780059aacd056eaa0344421df00103f7e69c2f8580342190f1", + "tag": "5412572f1ad86bc505bf2985ca705d30", + "result": "valid" + }, + { + "tcId": 336, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "fcca0a03c4825d7243cf02317f449c6a2a5e7395bd2df831e1c979f0cad64f02", + "iv": "2051496179be1df31154f6682cbdd74422aeb41dfa9c959495e0a7fa7f159a40", + "aad": "", + "msg": "46b1b4b912a15c176195c0d9121e10d93a370d5253b20537dbd70b47fa0675c46dc7ee9f0934144b42ab70516033c19ee34a5dff4ad36ccca7b3b91502c855b5d4964ad1b05b5d93dd2b07232382eaccb73a051c9a5165778f365a8e2320e248c820f48cbfe89735ac72472212036caad4a03e4c8af80ac55a476f570a2ba857116a6bfee31840eedb086f9f85f28e2faf91f003b64acf4ac14ff12c2c390ff095e265f7b534463868f501b7e71c8dfca6c135da3d7e3ce04dce408b8a51bed27bf43c30ff0a83729a54cda86f53edbfa9e34323f783676031dd9dfb55fe7e9c8d", + "ct": "7744304a50337a7e82bbcfedb44c32e1d66c6b44a8f098f11908025c9129debabdd77980ae37fa4a5b22be213f9b820eff4efd1ec30ed3758b7471b33595f89b21af55e584540a1b3c20f2ef97b03523fd2471f29ce81697edd538a670a0fc4bbf9eb8a79ebaa7a5a0ea6e9b37a8a2eb6eaed463c889136176960db81f88ace54c1cb333bd96e5b4a7bd5703f3f2927c646fc21cdba8670c882706259d99d8d5beb4297849312d6cd86e0c29d94ab942f02a14041561a5178624edf59a0589506e12842de858738871dc6d3e6544ba365fe64d6aea00db5d6fca526b80d7bf8ce8", + "tag": "07c4cbd2a154178b6dd44e4e6e3a7c9c", + "result": "valid" + }, + { + "tcId": 337, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c1206112ae222f94d81dc026004a3562b2df8f38d1ebd26ecdb8f87f9fc64bc4", + "iv": "682164088e0a900bc3b73aa4704cb2be45e1065df81226b0163fa17afbc33def", + "aad": "", + "msg": "5edfab93dda13d47cd38c4fba6677940f014ad5cabe54c89babaedc1f075982bb9b7202b39cde5e7e05fe8453580bd1094de6f90509408c4dcab89479b4d1491d195a484a1abc197d6e740bf60950dcd6c7a200b3fb65562db4803d4d44f134bfab3a19c46b5f496853ae5f13dcd32a5fe0cb40e03458688d54e1ca91d895d5f2bc7bbd92a43fb0442c59430e52aece2df753a0be8d2e47b360b8d3484ca69ca52aadc966a4820ebec0d6dc2f8b8a86085c8cb15f46d6fcbf41fbd6ddced0f235e9fbbd19dd5bac0721af6faa492ca0732b87eda3e818eb2157fdd87fd7570ded9129a1cd9f2b8f726c5c0b5d0cb27c5cc2b4cbee7c367b6866e66a9c7a0bf", + "ct": "b11b837360a1dd3cf3e533abda807aa01f030f445cd35772f0b32808eca4a546ed5384bf7ba56bfd4fd80853149eca91b4a0affee0318019556108f27e19d350276b2f226f3e66613b29ce0fb03e8be95a8af2fc635d5bc0fedeca2ec2ce34ace2c6be6adfeca3ebf3857c222fd407aaf6969f30c72414445c271d9519fd5e05875c1ea5ff3bfc5dfb91b753db359b1a82f8292a06a1a4701dc45ac1035f1a4647c785aff50cd49a1d31c82d7fd23ebd03db47d8d1604c814a29966fd231998b3a0cd769fb7e9e458546cb1c0a8d62cf2913aa29529c1b2082db3bf74a79705e4fcbdba05930120ae5a85f1f39bf6757000471a6fc67714fa95085da659a15", + "tag": "277bdd7e48f2b2bd7dd499e52db8d4a5", + "result": "valid" + }, + { + "tcId": 338, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "114e7f7f9ff1200a5483131cc395585d4a13a144f2e25c7dc797d87b4a832686", + "iv": "22fbf27efc861cef4faf639e51d72656ac1804ac196066e85198ef6aab461063", + "aad": "", + "msg": "af7a2316ee3dddecc36cb3c566a0116bd5654f325b66826d22d5932373a9e76960baf2d7366629854436d36b4c1d7431cfbb9ab1986592aa63ad05d59002e56151a2fb525bf4bb79d313334841abbb083d0aa54dfda0d301d6c9a0ececeecd45eab7e40f4f60643cee6e4c9664af5f0fcbdeac25a9d43b5df3436a6a87617c78722508c27cce14c99d8bd9275f31802c99189bd15b3d562db9c314c1924be0863ccf185efac4e5ba957a89664396b7267f60fd8d67f18361a7ca2b69c20f6bab8c1acd75d8691b4ddf6aa211c06b528f906f29087f176f510229a154660de0359c80d5a7fc63ce9145a82a559a574c389049da6535e288607c750f79af78cf1c", + "ct": "cb91222fae1fe32771a5aa07ba0414cd3aa5d981fb10106fac7dda6da56fe33d69909d19b84b61d43511d90273b4b9388622ee336af56cc68244379e8cf62a1f32cd8a59766adb568aebaecb5c894256248411a4e9598e1033d7201eae2c3f6f2f9162613917e8d0fd0eaecb4f9c7b148fdbb8008f615cd5c6baf02dfbfe70b316b708cf0afd3c07df5724fbcd30159659ffc100246c62caa5a63e78856eba2fd033ddf590919ed6b3af021e77839d76a2faab7e45975e98823d9e269b1ec32bd7f446ff8d8da253f967931383f275d4b7682be7e8689e1ec9096fa7ce2175622a381b4ac8c17d18265eaaf694e944290e50af34c40930fd23108f4e87ecea5d", + "tag": "46feaf11121eedd6a8d9a52005993588", + "result": "valid" + }, + { + "tcId": 339, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "08de13e336e5f0b64d1deb66aee8c614c8ad96491f1bc89090533fa9e83d8480", + "iv": "9f4570a661dcd2e16fa44d0fbd46943a8a47bdf4d91e507b519252a346b8e2c7", + "aad": "", + "msg": "e0d3d728d520d1ed416b58824f320b028c3a6e4c82860b5436ca915363773a9a1144f14d537a7ad6ac1af8d6a5b3efd2a2d3d72321e5c1af104fd9b8bed48afd049880cb9750ff0d2c4ed728e0680dbc9737a14b349d31a790d170c3555778037804195e84142cfcdb7c60a9e9ea4ed3ff4e628d3b5714cf15d18dad970acaa4d37d71e2c31bcee2350690b6c59936fa22e6c6347c74a51270f80dc7b510ac8d6b34055d9859c38cd8159162a68c4b404799f221cdc74277277b2a8f115d754381b091e0cb59953a2da19dfea55621e0e7e779a47a3795da00694f4d88a5354721d362c2ffc0ab2aacacf11da4bc4c0d16d94f5c78975e0524a43c954aecc7522c", + "ct": "24cba0cd0ba66f7fe680a3f6fd1c1f3d9c5ed368de7165b8d4e6b7b4104baf6cec3b90e3d97e3f14f1909dd007b97a6597b5c063d253cb3e3dafd928bfb55626d52826a28a5194a1e8f11c0f273588f6c28e520a664e50324b57c78088494c3d58bbdfb3d047f57a0cbc91bb4429f04ea45a57ae45886cd1dc0a6f9bb4daf458209000873d19bf095bb634207e52eb4b506c647f51c358622270d50ae50b5d3df78b7e2de5c55545f49553688f932ffd431cda24b44afd235d1f82dfca404b93ba35ed41e56a006618b940e3ac2a465d5b3e572c5f91505c43440863466d4544a9c7538d4ce6b1c1d6166fd56db0a0974ed660413eda45ce265b3df810936e1f0f", + "tag": "e76f527d7de85c47b1c4b1574e9d0f7d", + "result": "valid" + }, + { + "tcId": 340, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "f8969ff51082a385ea15742df1325575f5611e264d8d621da218306642031dd1", + "iv": "fce30fcee06678b381e147221a0d68c30fc8d1c120393b7b9a1790f9168f1ec0", + "aad": "", + "msg": "8cada95a3c50d6de3bd3e42b01695869cd7b06fe0bf311d3b81ebcd163e55e718a48824b6ada7535f75ab00db64cc98a8138e5b565d6bd6bc03c6df70c226e8274d2cc55cd98bf881b79e45a4fce44e64e4d7c2f139e6bb8e8e6fa0a15921e6b7c23da991fc3e741ef1b04ae5f7663e2fe560a0e01ba9196eb089527d2d1dfea413226830c2b06c81d29e9487a3aa9170ccf49af4106dcc19933bb348f75e14f1c96200abc5fbde754d99ff2dbaeee884c4b8d3121cdaf1bca0759a00ecb7fe9684a44bae85060687312ece024c23dd4fe9234798ec0566627a4de211f7c2fbca3ea9d58cc64de58a7295b891d1e2d9da1dab1156754ab6287112f35df866bc4d9e9069df36f3d4f4e62485e1b96f0c300b54d81e0d3919b4f8161f363fc6bd9d60531df05a10571460a37c2dfd9ed234c415b60a52b018048783c417432ea05d06e69c1d154ea52aaf86be7ada42ce247edcc6cc742ecbd4b58051118e60c04b4dd14647648b8971026ab96c6c076fd768a934d3c89c5429c26259430ab26a28e01c5500069187889a97619994e2e07aa29c0d514ec686f513d055e5c0bc07ea8aabc733471b2e32ea93cbe30f33ae0f9a44af257ea93a56856e5efb991dc914a9259249f6ae1e1140efb666955fe8e59dff1b7f3374c0ed74f11ed77142dedfc5cfd74195aa6c23d7b52fc1f9be9488757cefd6113cff45eb9b197e0f2f9", + "ct": "8433497793c90c889538146ee548f7e155ae4526c5e919c072dc14363a50e8597f39ef6804b66fb9c5b8976316bc4d08d85ec21e40721206ff1842cba077240cc323171feb327ca78d00d9383503bdf337c0b7b2bf4f83b63b174d2869ec304fdf10a2287a5ac2f6a4e819ab1e57504e4bad5618d9cec4e2634278dcdc9d1154aa3feb9c5640be286dc4fa659f7f62903d396d3e7e887f9f4ab5d1034787e21774a3d08a590f4eced90cdbf76026a2e97cdfeedcb6f5be02a40454873ce76f4d5f5f5abe5f9642e34bbbb0890e06416aaf34782169fc18bd87562b8985af789bfd715a546b535a6e7f4e4855e3dd9208de13d6633f832c74d43ea31eb5a0968348930400757b199171d6015cfbe4d68601d4b1a8263b3e4b8bf983370959b4ad648d1fb731fc429aec958a8e9c5e59f09a45dbcaa4db0554002bda0a884e7e81981c5ed5bfeeef4b55b517d3c82648f23ee59393ce9a251d55c4e8ca68660ec7a5f2c180ca97938c89463f31a0e8c7b8e42cdf998e5a3197075b8fc31495dfa6436808b97cb3a462e57ed5e4f8b4ac933a08ccaa5155086f0e37db2b0ca76b989541e804f58dbbd95e965c134eae1bde18bc87e2d8267b2a55b8c831cfee526a7cc091bea965670c834bf736cb6c232a4cd3c0a5704cf235613e14fa8fa9cda3e66e030525716a098cdebdc1d8b798eecc7d3c59b23eceeb0d67e52ac3bb4d", + "tag": "17f0e7730ea917082ca5220679337bb6", + "result": "valid" + }, + { + "tcId": 341, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "453afdc080f408ac979e0b8d3500980636dbaeef647414cefa55aa8b60bd43a2", + "iv": "0aa77983cee67b12c9aeee409e9103222de8bd0e6d2037963cf243aaed456c37", + "aad": "", + "msg": "7b8928012324fdc7bc535abd79e956febbbf8345cd65a4d7ddd4453670995b554c21e05d79f659065814a195f04a04d2a1d0e6dd1ac732703d21cb9b485e4ecf57e65d175658d65c1a1689b7ab2d6bbfe0dd769b7effe61d5f796d18df43a1f7334f911caf8c9ff284747455aeade610050bcafed6d412d3123323f95f171895d4cd7de174c44c8dee2fc3ce2ae4504a9c29bd3c01b9ee2d3e324b3a013d343ef88f423234b2f72d106ffa2a317ee95383f3cd8c00eb3c0a0b2233c8c5ebeb34e162e410507ec534b02bb373c765a1bcc7c4fd9ea895c135b47267192397232ab2caf28a3d7bb2f4a7c4b872cf3a897dfa9c245c7a6c4f08ea4962848d89fc06fb1ff9489faff651393c691a2432736893a0e161ea01aa89f8a5550775009c37385dc33e0212755146103de3ada3ed1564bc9682db448acf6ef66357e8a4e3a1dc7f8878cd2c14ab162d2a38e280a05d045a06971f8d35f640e08291c41b85a8333b050c0dc48ca4fb90da00ac7e81bcd6bd2d5efcd65ad68206452de710a23995fe38842376624c4f7e055d9eb226553ec6ed7826f17f81e4d71928d8f887a92e998dd8025a2c1ef4c887d356abf7d90aa5edd7d33b9f4127fe89c96231c71e54cc482eccaf5b7555a1e30fd669b8766d199a24bd084687f861b6d2d2a0afdd9dd90d2b7173eb14728521f1b5c992733f99e921e8eec002dddcb11f39a1e7f9", + "ct": "85a6a3a9581968ec7c9362e50d9bf02adcf1c6f8eb9fb0dea7a72d988bc8952c59201a041881f0f83bc0b2e84ff9f958af12906755d4a1e81bc2d7c8ea5cee1c5586bcbf6421dc56eb27ef495ef36d56c9a89feac393dbedca3b943d970a2f7c04e88dc070a573aa4249f188e92ed19f9fdbc35c49761340ca55c1adc9cc1de95b8d04bf4f9dadfecb4aa0e6a665bf3a827de5f479a51738e9c59214a364f1a31bd7aae9eb90f2ac3a5ef3e1e0a411682faea0a87218f11a44af962a90b126bc4bab8a7dbf5cf61a2e1478b4394a1d2b065b40315ac56faf81c37a04c7d006448ab2299cd13f2b1156af5849123b0ee038144dd535111baf863e0f6bf0ec921694acfedf5dacf6f1ad6fe1a222326500ec31090fadba8754665a51a5238ffe316ff8de180b7565773759e921b9d08e8b8ebf897b20646a69c03fa2f59a59580c013124cd55cf81d13e87d2a668ec310581bc5bce1306fe0674d297cb53dc9517941f56a67568c2fc85053f6ec695cec1e769e2c11be5ae67db5e35016242e63183abdebdfcc079c976f88a53a65dbb8a3e4e58d7ccb1283539c12c5fd29aed63445c5a393b16950474ae4087d8ad967ca3ceac739d7f5cbc5b18faf1ef5d88bae53e30e5f645cdb73671fc314a90f224f24555d7334da7285b382c3d50e3f392c83f72c27b17bd8946fcacfe53dae475341f471399d896a134826537044c5bd6", + "tag": "71341e5949c7fb9d84fb9b459bc0077c", + "result": "valid" + }, + { + "tcId": 342, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1cc5281debdb9851eb10f596f15e7d2468af06febe24b153f2398afc65f78a20", + "iv": "e8cdf499c28c1a8e83e8dc4550f4c13accb1f02b291b971657a150a74f2b32f5", + "aad": "", + "msg": "95fe940c61f2d7bf6d30e18783995e969b13650f8e03f77b1ddd6d54c17ba1968d787c0802fa40c6408ba1a235ded1d10b76d2b1e6fa8db42ac7d63324ec6cca6593126882d072bdb5e9caae664667e3019db05e6fa7c3be9647649252ab126205cb85b97a9561a9c00656e2c5b4222735cea4a89879993021925242e4ab7c4439bc5cc5d80498ee57d8c0db6f951d341ad4dcb63479cd6ced892bc70be83f62b12deb3c894ea33432eaea807a61b8592a5055268808e0451b9da4353faeb04734e22d590d27e6adca13ce58334463f649507e6e343d9aa79b9d1db64abe3d8a3a4dd8cc9dd96c11a38b4d276b686e30cb483a01b520b8a5597b0d81da5c6d7cbc82f21aa830e4888a42777f7e185204c93cbf529b7bfa39657ef2d7adea7795d7e4f8b0a21c1d84ccd341174366f5597764d0e5eb91890432a59ad2db58e3e87c14c0246d73d78509183bc350da2c5b85619abe0be1505e076a2f24cb22d02f68738cc4dea0d63b7674036dd17e8db90ab78556fe8336f036ea5405af0f5b613c7f05a6046014195c26d6e098a85f21d16d4cedce0de6036fcb9b91524b574942f8b64a2bcf76a093abbc92c44340d00892e413714e90d7486960605ebb7b89a989302b1de21f448dd133d447ebd3d9f25865de176683aa3ad224eb3a6dca600c4096bf88f5e83dad9e755f391cd424ce3ee73dff20b55b61a18ba9e9a5aab93f", + "ct": "89d2e8a39fe80d730e59c644cb35997710681e3789511d0cf46a031a840b1010c106774759b865fd3594e6c67fbc4a8412be654ef17ebcafc35a345b68f8ac5efec0ad299d54b516955873b6cf0fb1f0a97725985b616db5e579dfee9d0d378d12f837c1d5d9f2fbad7bc66c54e6e75e470ff2b5a092b6d71bd2ec537820006be3e0aa694b9a324de63eecc801da7a38b4d24d02622c0dc6cdef4bfe56992a17da7448183a476ce7348bd0fbe2202476b146e22b56b084b64b3c75341bd64e3fcd56f22d1180d5d6d4e5f83876b4222e7b6d06b7b1bc5673131c5123b18abd97c458acee59428951174b3d1f4b2787366b8bb5ce3d4fe1b53214eb28e5a910826807b648ea8c4601b7ed9f5378bece80594d017ba3f37642158b6a6e7870e301adf4140dd03a26f5c01111760bac9727ce3001a97b70d2de1cba63506766daa8a7335cb87fe38fcd403fce1e32c09a4bde04299f9b6b1b6a9b49c098ce2ad4f6a55545ebe316c3bb1659c9273e8156a76902e696bf8f8ac4f783c63901dd29d307ab1ff762318a736ce6f7e7d2524a93ec937476e99160676755b4d94f9b3e612ac4f7858d712c4db708a3fcd7a6526ad22edd66842cfca67a52f48fd6b4b26b9cfe09a0b032004842a1f5a8b926b92691d9a3c970b8d3e8e3a26e3de9c1683bf68a551e7e8c8b93b1e0f8a254571c1fb3f25c1a2ca5f06d0f7fc4ec35c2ec477c", + "tag": "df7e8cefc26946a2d7f38d43e14a049c", + "result": "valid" + }, + { + "tcId": 343, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c688e9d761c43de3fa2e137c155b4c20b07822ae29630a5f0abc550596568039", + "iv": "6e68f2f7782bb86559741d87469d8c723f029c824d2992ecb2e019d16997b090", + "aad": "1479db0081a121d09f468b9d672839fe6ebe60791bc212f9639d598a850d77b34f71441f040a2340a808564465b71d7830fc94137c36a7993fcd458d56e2a011fc4082ebe6d38a8cbefd8ed4a2e25e68d14debdc5dc0ca8a337ff3ee1c8fb5eabf674b4f49b47cd25b6a49ac521ed861e2c80a1c54951244feea0b3b736abb1d218b35fb98c47b69688fa4cf296982c49c040475f2a1031f4dc3589b5e310448c4c8b1aa09663ebe87c872bd5174ae7b8be75ed7ae795861c54a0281db77f4092beae1c8dd852da7ecf5139afacbed4b348ac66531bf5db28683b289fe1916", + "msg": "1b1633844c26b5039680f363dfc6e68043fd032e", + "ct": "80c6c9999089c77e9348287a8d14858e2963721f", + "tag": "26fa9a704b81935a1010dd9ecd06bcb6", + "result": "valid" + }, + { + "tcId": 344, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "4b1949e5a09a576e6ce54d9ddc9e7c09e9c35bb48a21ef61cf6a2cd68e9037a1", + "iv": "a2ff83b64ff37d095b1ebafa156edce1b79d92921673ceea345296e4b9226528", + "aad": "edd0eb412c15a201b9c755ab4d8e635cf0eb862e40dc4bf591251e04ccb763e01065a874f99dc63c41a36a7ad20b9eb5238d0c950c75230e627b6acd00a2ba0f5fdc33158e884d6255ffe00d760d69cb6f1961e619eda95a584b515fd34cc97a3effea8a110ae9b95602d9e5fb0bf7784ef245feb2296477f762e29e2b7f802627df3e4ffbc635297f0412d7e2e6aec88c3993524767ca0146bc5df595e1b2894151cf0c47b00079179afbfdad73dca62ce947454061b04702e11160b58e6cd6652e549744954c8d95e363a91164e28a1b717fa06cf9c88d9df193c57e714dfd", + "msg": "caa2462ecf4d272a61fcd223b2c2ca3e8a2cd822", + "ct": "a147247becfc32a864815ec6feb4ab63feaa0e74", + "tag": "4086e1d4c449eb04a4a08d14c096dae5", + "result": "valid" + }, + { + "tcId": 345, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d84b7a8d9fcf7bc3d53aa25e179596de32079908db1531a0b5f6f52fd8b76a35", + "iv": "3049bcc438e6e6663ded8e88254e652b9a96c872ca60b04fff742e85baddabe2", + "aad": "4b43e621e8de2db2a85c7bfea0ca904b0a2b30549da884ff7f2493f28d37a282a2517d2e8023046a6e3a7dea15575cc1553005896ea8199ee86816f79368aa7ef18750ae64af13066f10f810375b5956ab62ab12d37344578d54cf3419453ef2115a4743b9ed900684d128e6be2637ddc25f5b4ded87ba57a399efae4178d9b3676afcc49b3eed180ce4edcb625078bca3a917eecae4831c52dabc1fd3b9788ff89783e809847c1a2b6e58c2ae1c6e2f3cb871bd500734dfeeade9c22711cd127a19a76871e547f3a39b74ca77957b60a8686cb95acc467c89918c1f1d5411ec14", + "msg": "08970200232cfc32a005ba3c497fc7ce08047b0e", + "ct": "bb879fe68be9a8943e52e10c162cb1561643d516", + "tag": "7fb85dcb1a858d47f84d80dbf5fc63ae", + "result": "valid" + }, + { + "tcId": 346, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "c97fe46b1fb2d7ac6dc0a69e79c4af3eddb3fed12f3f689dea2bd5b2188ef525", + "iv": "a9e1525984a20752256fcf05673864d9fd1aef41785a1a74cfc96dc931e3dcfb", + "aad": "38c7a13764d53d8446561b4e6e5d3faa0a804aef3e7687ce13cad64483c1594bcf8a0c480858c9f735bb6f0e5d80c794fb9acb7fd4eefc56d8f460a5b95d80c431d0e57b680a165d028247b4b555485def7707d9419119497e200c27ad7a04d9ae0d3bf10a563b429df424d4d9c3db500844aeb9ab66fa2062112a20fa68e00d5d300cc787488ee29edb14552363557d4e748152f51ffaa98aaa8ceef859415c33e864b9be80f59d48d61530f7de134849499847b28ece11138518a5af2a644a7bf01ecd59071d2ef57f81fe0cdb3c6f78b6c7796b24094c1a4cb0864560702a718ba26f0c9ae0cb62945801643a0fc4c244e8cbe23b3afe84573f9ad44915", + "msg": "eb87a278df72ce5dbff59cc546250f9f2bd1d006", + "ct": "8f30761a364d02c59e1a4342d7d7ab58168d78d6", + "tag": "dcfeebeb095f75b99bdf8d2b38be6954", + "result": "valid" + }, + { + "tcId": 347, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "06dc3ff9cd965bc0f4a1d9b94d822c772157f4b71fd9651323ca4c8cd0d6b995", + "iv": "5e3fa29dd34126d674254c452461f30bdf364ca10d796af9c19aa4fe7c04dbb8", + "aad": "07d9b6c485d7aaf2995d4247378d833ed54fee871a4a05b6ca2702fd174e3c839ce76bb87fcd871fdff4c40b5671b1da7fd9fe6f6584b2a5ef13dd772087907ab6b7b89d6c369808d5c7e4bd264be6e2b270392262b6ae351f6801beb08c3b8824c3093404463842866f93841a5958ffb5d2e3873e125cb2ccacc47c0cac871d819b603b2398988924cb76ce4cae5f08f659a5e4295ab05a7a4b913a29dd9ed208a289ddbd8fcc090563e3b96c2777b9fd7e10546687b3eda1f76f013d66379e602db0707a3f5137aab2347ffbe99b50e935ed50ba9b4666a4bab09a0e17bb42a903998378382acc5a4388f80a807a187ef70ac7759c285da676c79bcb2301fa", + "msg": "1a9f69bf39bdc40b2c2ab8361f0794794ee384b4", + "ct": "329ca366b3172af4438e7e78f8f1585f6fddc62f", + "tag": "8be0c0f7b261d5ca547855daa6d3247f", + "result": "valid" + }, + { + "tcId": 348, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2fe2777980ba5c4d1701a7a39bfbcef67b9143b396a5ffcd1595d5ff75c3b632", + "iv": "7ad39457b098e7ac092e698d1540c99e82ea5861c00d1fca8ec1c7c0b6f03135", + "aad": "141f2dce50e9ac6d3fa92eb3a9a3f86cfcf20db08ad403fdf0fac5224924f47246bbae99812caf62a57a346a9f965bb1ffc79c5215f0e729d71c36add5c0a715cec8ceda849840de0f8f27ab1cae2d1c22a1b7d528f7bd6540fdbd3b97a2d4ac3c040150c24e32a55c07f0a3e25187e433a9dd9f86c89a71097b07449c66310258569363b4040159668a0d13d3b2dd49fef2a6e373c368f1e2269486dccc84892cb16e10fd399a8c6bcb56160192888d4cd0df9df9c9c66145e11d9b12d8e4792a77aedd6e088ed21cad8a583aba6831de3cb49f9cb30951372f0e34ce8ba73bc49b0eb825bd3be12e31393d4f4ddd477a39063f677fb8878a9235a3290f146d9a", + "msg": "acc98acab4600658038c896c5e65a82f4e57a774", + "ct": "230ae19d04cd1a524619026be472261b784ea50d", + "tag": "16c4c87119d332cd02c535c8fb244a48", + "result": "valid" + }, + { + "tcId": 349, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d85b05106b4166d78185d9aaf41fcf49c83e6399cec4dcc3e2fd763e8001c272", + "iv": "69752b640f52344a7ece64e266e963bf39faf64aa5ad9d09db3d46e70a507a4a", + "aad": "f0fd0db2e1ff3bd5cccd634faefd3ebe1602fd0ee3efe7457a8a99efed7e32143c90ef237b7c3bce4317e795e11100801ad4836fe4b957f0cb85e663e181b017fd374f4d9d65f664aecd40ca395e7686d4c7e128a81f19ba00203e58285cf3195f0ed653663bb2299fc07b28cc047cddc4877dbbf15395b2840530307be2c3242260f572c611cb5d55af34c39d23ebbb32168a06d46d72da074bc2493f28319bf971c010df9e7b5aad2ed1c0f3bfa800ac92558074d05e8c33542494fe37a28f8b0bd37481c8a45d03d74dba57f549e67c3cb126a2969fe35be6d6feb532b621a832f7e8f9ae94fd967910da1118796114c8a2e6dfa45ad43646bad1c56b73f514be341e209d0d5dcaff4fa06c849f0a96a7ef2216e51f36250ef263a07f59530e94b717207416319d1c5be9878accba0e2bbad4c067c7930c9b4415fbd4562075fcaee2b8aab9fe5d861fb50dd9a112c768d29d88f0267ef02d66d395fe287047a7c5bedfa41c2ca0edf696b2eb62e3c20f1a448bd1643cff3e366cfb5ea2caa51b8c5a3c61f675cc3c2ee66ab6a6e4d84849f2fdfc17290a39f3ed611be8e0289396b1067ed2030851bccd15d3dc8b97f797bd2fd87aa2854b08a8173e22f5197dc062fef33f28e77311a52bfa342b07ad48d737bc0adc1624bfd1255b267822bacac9fedd7e5944fc75de4fec3b05d8b6c98b3d15be44fe040e64efcd2a", + "msg": "1e2ace5b32c252dbae54e9db12890e67e532b8a2", + "ct": "3ec96a6150d2f486adebca80384bd4a27bc1acc1", + "tag": "69511bd79f9dc8fa8cbf5c5a8d460663", + "result": "valid" + }, + { + "tcId": 350, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "02f92f060f732a09374d27b0ae2838bc16af6df2d364a68f4b31f5ae56c38b0a", + "iv": "192885d984f0e4ff4d63045533d5f3afc89a8c6e62f4970e61fc5889af234f8d", + "aad": "2f9fcba45c12cb586a2f5983a1bc2f9d2910cd802d0625776855a7586ee487200bafe5392f52ea0e1c59b065811845a883c2fb8338e7d4e9b79b0641dbb9a1e53062b315461303c08368405235538448101cbc14a223f26814e3478b895ddffc98a27851626f3863b9a2a1b10e5dceb3d6e3a31898787f8b14e2145f7570aae21e9f0269e3e983bb998ce2c7989dca2eb913f43e4f1e6a0e9bfb7d556e2e63fc5e06d9e66e87188f60321aed55627fa9eb956270ea0c07b539abde63daf4115f73973ba8cef58c51df0af9e4011b0d904e8828fd4e645c1083200bff20e0285f65b425b80f29ec3adfd75513c4489901846230214b3bc107d637c1f712571da388b6a6f243ec72abe7dd4799a91f6cbc96a781133098cd40a38600779ea117b6cb29b1d11baa19edb34a05d434717675b16002a023978fcc67c5452d2c3b5cc3c6710bcf9aee626edc50f8d1e638fdd669992c36fb8c723525f2a703f8597dee179c53a3fbfa5923680b4a7e5736c5224d5d6efdd74ea69f8b9029c41fbb0696dffb0176a0498fb177c8025c85c990e8356ed08bb2bf9c361b4b82b548e3e9afe77d7426527a429de1d637669c7a55eb07cb69005595ecc11b11c4b702ba2ac05281ca571352f1c962e52a337683532e68d7a352586cd8de3c8134756f647ec2a17997d47e6cb04b8315b42b566fcd08bd8d6cae4f6663a05d781d5d79cd84a6", + "msg": "9165e749b54243b409f21ac7008e3c9d7ff18415", + "ct": "a3b512006219be26b4926a7de5eb98773f1f3f09", + "tag": "e6b993fe2b5c91f5e46fdea0e0e23568", + "result": "valid" + }, + { + "tcId": 351, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "ecaa3c16c835e5bfb06cd844dd0fe0811247f14e15cd23da51cf690aafbae38b", + "iv": "0196fddeb579793831c3f96481e90473e43476e58cd00a0d982df6c0db4406de", + "aad": "c53102fe3cdf1a1ac14de9ff9e7fc6c0d2c49f9f1972047a0cca310e2cc87a3d5801286d76ff827d19f50b45dc8e999d5af56e7bc0921ac17d30b99648a6232ee2ce35b7cfc70e088969fe4d594211562ad2ab2dfa19456c1baaa1053c0702497d8faf1780c375033aaef9007b038d15a7f6a82a7cc2fe7c5295e5ae3f0bd6725dc221a30fa3b90a37ab051179ccb724cb5f66f1b39eba6a6fd17918973b8e891ba93fc947064c32d6bb3d62e89b8d4c467ae13bec20492c6e9c72326bd7ff8ed0a52c48f7822d00877b0076bb503934fecfb25e04a3f678c2271e568222e424ca109dc5c2b21430894a8289677ac84eddfcfe444192e1080802f9501b2feece118c435dc5ad3e5f5e54c5842088967186454dbf2c1e34924ad1316bf29fc69fb178959dc4e931c69e8b8cf46172775bc6359475210fac15fa75952b6960e64421b838b942bdfb8696a69ddfb4a8242365c85407c509d3d5444be8f13e112b60a05fd3e7d5f46aacc45353189f14bb27c11c977bb4dc9633fba37c1b025cd62d87e2cd70f325bcc29b47a39e65005a2d26c0d49ab7fe008cb737be929cbdd918f06b59df820ac7004ba637043d1ba6051c65e62ce3c0ac2223af839cbd579e96aacc95a926ba36a0f6124ab4b38fa30c3b2906b454b02ab2b4f37d684f068ce2a977952682b2ab4543fb1bdc3afee593b6f780055f6b56e7960d2365b2ffbea3b2", + "msg": "b0b277c2eeb7e682c61f9ba89e6148ada5ffcbf7", + "ct": "a310a04c883ea48be6982f7db7f3244bbabc57a3", + "tag": "3813091e7220420a6c55d332e637858a", + "result": "valid" + }, + { + "tcId": 352, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "cbab295849b8e38c7c51233bdad60bad68bcebd647daab1098d51dc2da637dca", + "iv": "7a8642a9d5750f72d06aa2454c7ef43df199750c001575cdf733836866369636", + "aad": "18370da9968cc4f26e541df168072556715e7d1a60c8c0b031f7f7c8c5dfc16e2f5a44b34931ad34bbd7d434790cab443f5b315cbf9b3174ba2a054ce4723c", + "msg": "a9f045de33edf6ce642f57589dd4b142e309b89f31bde8cd1ea23dae411e911666592ee5f046a813ed3d3232c4f56dd251e673e946c87e0884b6394b60cf19", + "ct": "d191393c84e81ada1cc3183af324eeee6865202c2bce7dcf8072c70745750269af01ff2f2bd74688a10756c706ff83eb02e835584a76d837955151c1ae43c0", + "tag": "5fc684cee1ae80d526e197f0306273bd", + "result": "valid" + }, + { + "tcId": 353, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "d45a25c969c29336b22ab9a49aebfe95a466bbb6c30fe9edfc995088620f29fe", + "iv": "9b9e487866614b98fb0e8554a104ce0aece54730f08bf0346079ecb76b25fd57", + "aad": "fd32b6bda246577874a43bcf280a16fa2e102c46001acf6a315f9cdf0ea5dac218821862ddeb9a8d5467df60d2dbe2929e1e9064ccb3997ad57cbf3789d2d0d2", + "msg": "c6a1c5a02f82d7ad9a8c4bf296651adb91a9ef736933850edcbb98e1fbe42b81c5d3531511a8642d2b3e1f09a2c684b3abe35290bd43314203b81007f2889a", + "ct": "0656808ee764daa177fdee7e7ed67a68570069e4f6cb0808d28aefaa90c7fb90085ae32fe070b84902b96ed56885826b29466ee6a26822c5bfafa0081e1d4d", + "tag": "be39009598dc18b812b31f0d515895e7", + "result": "valid" + }, + { + "tcId": 354, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "2d6e3e0d80a07ec5b049e3c8725cbabb5d3d12f7b72e4115bba770fb9a3fffd7", + "iv": "f26be77ffb9ee80ef1845b39a5b3a49b48f68325c164919dd6f22cbfa8878c74", + "aad": "a3013e15435163831062bb57c49dcd0913aa218aa6cc6db5445e7ebe759373e5eb5c0a077ddf5d958404fc1ff449235d928e233a20bc1eabe24a50708c11f09828", + "msg": "6e697cf40ecb932b6be02aebaaab57f6a4c3040d5978e466b2aa1e2ed909436b6368d544939bfd89b76ebf25f0562951444427c026f501c6c21e2ad84f8aae", + "ct": "539eb463cdf24cf85d7d1d29724880beb1f5f97e55fa8b1e44fb1f6f3745cc8752bcc2181a8d66fcce748a70fbb7db68f5e14eeac43f5b0cda76083a2d8e6c", + "tag": "8fe0cef9e3f712d908c992289cca90ab", + "result": "valid" + }, + { + "tcId": 355, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0adc1c48d0ceb991e306f5102ede8235f1bab2382666f0028d00b557a306f813", + "iv": "483f4bf15d803189fdbcf6a2abe731ed70002ae8a4e16e32250b6d4d10361df2", + "aad": "fbd24d877c4fdb0334ccc5f046600e2b2a82ac67b250d83da517e05f8ff9c2cf5e5e39f47047ee8b945b5ef824a6b91aa838a66ac9eaff0c51cb2acf0770da", + "msg": "3a15e94962c0626f5dd375f59b7ec5601ae9aa6d6c11e073664dc9183d3b1df5e458217b4617af7456b2b60c9b4252ac9de6fca2eb9a7501ca62944191215f5c", + "ct": "eff9c9852bd377086ee17e56c4ca3aa1dc6b6d3c210e40e8ad37969b6556e335a8204484c57d1ac905015cde9c9ff8eed4b3a9246402df1b15ac01bd433c7520", + "tag": "3bfbf8751027588884ee9de05a462596", + "result": "valid" + }, + { + "tcId": 356, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "1f5438db29b31ad123edd5e4d3dd0c2b46e3908f284aa0b2429998c3f4b5bff9", + "iv": "a70d723761699cbc52783d276395ed8c34adee729d9bf33d03f2a10d538fa3ae", + "aad": "340274f5ae69537322fedf012a1456ddbf0ed9c71a9cf4e91b21a603d133309c6e2fd984debca375843723261778cb03f884efd52a40780b0849314e434c2946", + "msg": "f7165bbe5a34bded7bf9816aa2a19e58571266285121c8a8bb4e4d4c57e09df3f7ef5606d8a1d799bb10d9674f2a0fd7ad96b07903279c88cbcdc6d9131eb0f2", + "ct": "bda14f9fcf8689fa61a671b154762d8f3d8d1d3ec55c114f3bf9aade444b448560986a4f6b0fedcbb85a9544845347063ae1471dc7e7f7a9559947d237ffaccd", + "tag": "f8062e748a97fb59b6ff71791f0c714b", + "result": "valid" + }, + { + "tcId": 357, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "32f6964e488f4dbc3e42fdb8871611634f61ce479d56a5c7d8f7bdf30535e566", + "iv": "1adb78858353b90b89dc7710557b4d15d9ee5921cfec230516ab50372ef629b7", + "aad": "f3a5a8d99194955214cc5e484c41c1c084c23fe7d31709ed8674a268682f82da1c11c195f801168790e6d1deb46b57c65a4f57204d70c1bac1ca179fd4571689d0", + "msg": "61da2ca026a25cc1913de40ec96713979c2ecd381791bca1c1116b488f6004d15f0ddabf6dc890f89ef60059abd999d6f92b275cbdb664cc339c078fbffbe047", + "ct": "a8fc671ffcfc9f10e38e6520b921ee62bfcc980f633a95998cd9eaf1a8c9287cdb0add5c4be05ef2e0257fe0371f24892000e98d54d1575581d0c8ff547af286", + "tag": "6a62555e26d5586fe473621cdb41763f", + "result": "valid" + }, + { + "tcId": 358, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "0cb08f11518e427236f3a7d50e472acb75a6afaa100ae5f7f8afbed123dc1751", + "iv": "78b4748f8df4fdef2d68b3b3167126d56ccfa3f10a4b3e5da8d4c6739c8acc4a", + "aad": "e234a02fe07e8ed9ac709e5a8b03e38924e21e782fd01954137d3ce89f04333325956739f6d5a33b382bdcd134d53583d904fde28fb0f6380236455ba66112", + "msg": "0b87c210f5b58e715573cd7dc5e37164be9f19e1b07b25f6fdb3553054160c28871e343719da5ac53f101dd3cac2bc5d3744f6084c1362fc70ee414523dcf7a150", + "ct": "d751764554ac332abba222b1bb7c2e94eda2157fbafaeb4549d6ecb2dab3bac27a65303fea5e03e36a6e59968c858dce54964513d43543fd1c8cb4db55826c5c48", + "tag": "f2986dee7f816f67183ccf15ed22b069", + "result": "valid" + }, + { + "tcId": 359, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "14ad8b75997a56d07ce7b7eaee75d1904c676d60a34462ac56006993b802a20f", + "iv": "5e96776080ad737766db3d261c90168c75400889f0221c47f52d37fb43bdb907", + "aad": "d9e814674d25a44ff03643fddf4df462023f074af5303be4fb5b0bb7d633fe8bc447de7ebfd76a4ea917e2542743dc99458f6f3e24d5cf85b3d47f4e785b9aac", + "msg": "a184473408b74247637a2c18b27910da54a10197c4d02ae9b5e7c42e81a813775c8f07cfd78fcbff0936aa63bc79c9b79827ac64652b6ae5a06453e91eb00c0859", + "ct": "10711835ce941eb614ef691ff711f14ad616f2497fd94e3f56367a31f28ccb72848b956ed74cd69398bd058855f7148b8a02e63f616b29bf151a045b50e5d30092", + "tag": "bbc4bf99be4208b6fee04d53dc6b226f", + "result": "valid" + }, + { + "tcId": 360, + "comment": "", + "flags": [ + "Pseudorandom" + ], + "key": "69edf9019873e62f40636019cf37de0e8cdd854b3e30c847383827ec8c33fc88", + "iv": "5bdefc0d7fee5bb50db146eaf0fe68e949815678bf33ff226d91f8facd6ffb10", + "aad": "7aa0609c2769cb30e9410443a0dfe7cfc2944fd595ea8c47d351213c4860cd8d3dab4793e9749fd8c1df46e8056bb0f4dcf163ef342527e51e010fe1825f6f855f", + "msg": "80de6b3b12d1e55802bede2938d2ab0446c2153ddbc97d1f94820876a15223e0c1b63d98dd5dda10bbd74f1deda36648ada26957e95af5de06420ec1d998637ca1", + "ct": "03672eb551db81d1f0e6ade7385f31f8d46fdd1715cad05dc094ecfa0f800b626b9e553d80fe27c06fc678d58f045140bfd80fbf015b34f59d2b009932eb7aa6d7", + "tag": "0f0dda4c69e7b438feb3f3c1f8f22d92", + "result": "valid" + }, + { + "tcId": 361, + "comment": "Flipped bit 0 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c7b12b15690388d266072201f75331e5", + "result": "invalid" + }, + { + "tcId": 362, + "comment": "Flipped bit 0 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c37c28616f955e1fa01293613a913938", + "result": "invalid" + }, + { + "tcId": 363, + "comment": "Flipped bit 0 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e09ceeb3018394743af4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 364, + "comment": "Flipped bit 0 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "03a4dae23e30303ef8884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 365, + "comment": "Flipped bit 1 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c4b12b15690388d266072201f75331e5", + "result": "invalid" + }, + { + "tcId": 366, + "comment": "Flipped bit 1 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c07c28616f955e1fa01293613a913938", + "result": "invalid" + }, + { + "tcId": 367, + "comment": "Flipped bit 1 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e39ceeb3018394743af4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 368, + "comment": "Flipped bit 1 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "00a4dae23e30303ef8884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 369, + "comment": "Flipped bit 7 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "46b12b15690388d266072201f75331e5", + "result": "invalid" + }, + { + "tcId": 370, + "comment": "Flipped bit 7 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "427c28616f955e1fa01293613a913938", + "result": "invalid" + }, + { + "tcId": 371, + "comment": "Flipped bit 7 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "619ceeb3018394743af4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 372, + "comment": "Flipped bit 7 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "82a4dae23e30303ef8884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 373, + "comment": "Flipped bit 8 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b02b15690388d266072201f75331e5", + "result": "invalid" + }, + { + "tcId": 374, + "comment": "Flipped bit 8 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27d28616f955e1fa01293613a913938", + "result": "invalid" + }, + { + "tcId": 375, + "comment": "Flipped bit 8 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19deeb3018394743af4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 376, + "comment": "Flipped bit 8 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a5dae23e30303ef8884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 377, + "comment": "Flipped bit 31 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b95690388d266072201f75331e5", + "result": "invalid" + }, + { + "tcId": 378, + "comment": "Flipped bit 31 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28e16f955e1fa01293613a913938", + "result": "invalid" + }, + { + "tcId": 379, + "comment": "Flipped bit 31 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19cee33018394743af4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 380, + "comment": "Flipped bit 31 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4da623e30303ef8884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 381, + "comment": "Flipped bit 32 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15680388d266072201f75331e5", + "result": "invalid" + }, + { + "tcId": 382, + "comment": "Flipped bit 32 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616e955e1fa01293613a913938", + "result": "invalid" + }, + { + "tcId": 383, + "comment": "Flipped bit 32 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3008394743af4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 384, + "comment": "Flipped bit 32 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23f30303ef8884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 385, + "comment": "Flipped bit 33 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b156b0388d266072201f75331e5", + "result": "invalid" + }, + { + "tcId": 386, + "comment": "Flipped bit 33 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616d955e1fa01293613a913938", + "result": "invalid" + }, + { + "tcId": 387, + "comment": "Flipped bit 33 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3038394743af4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 388, + "comment": "Flipped bit 33 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23c30303ef8884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 389, + "comment": "Flipped bit 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b156903885266072201f75331e5", + "result": "invalid" + }, + { + "tcId": 390, + "comment": "Flipped bit 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e9fa01293613a913938", + "result": "invalid" + }, + { + "tcId": 391, + "comment": "Flipped bit 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394f43af4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 392, + "comment": "Flipped bit 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e3030bef8884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 393, + "comment": "Flipped bit 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d267072201f75331e5", + "result": "invalid" + }, + { + "tcId": 394, + "comment": "Flipped bit 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1fa11293613a913938", + "result": "invalid" + }, + { + "tcId": 395, + "comment": "Flipped bit 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394743bf4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 396, + "comment": "Flipped bit 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303ef9884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 397, + "comment": "Flipped bit 71 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d2e6072201f75331e5", + "result": "invalid" + }, + { + "tcId": 398, + "comment": "Flipped bit 71 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1f201293613a913938", + "result": "invalid" + }, + { + "tcId": 399, + "comment": "Flipped bit 71 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb301839474baf4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 400, + "comment": "Flipped bit 71 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303e78884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 401, + "comment": "Flipped bit 77 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d266272201f75331e5", + "result": "invalid" + }, + { + "tcId": 402, + "comment": "Flipped bit 77 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1fa03293613a913938", + "result": "invalid" + }, + { + "tcId": 403, + "comment": "Flipped bit 77 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394743ad4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 404, + "comment": "Flipped bit 77 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303ef8a84f20502a7b47", + "result": "invalid" + }, + { + "tcId": 405, + "comment": "Flipped bit 80 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d266072301f75331e5", + "result": "invalid" + }, + { + "tcId": 406, + "comment": "Flipped bit 80 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1fa01292613a913938", + "result": "invalid" + }, + { + "tcId": 407, + "comment": "Flipped bit 80 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394743af4e80ac6d06125", + "result": "invalid" + }, + { + "tcId": 408, + "comment": "Flipped bit 80 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303ef8884e20502a7b47", + "result": "invalid" + }, + { + "tcId": 409, + "comment": "Flipped bit 96 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d266072201f65331e5", + "result": "invalid" + }, + { + "tcId": 410, + "comment": "Flipped bit 96 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1fa01293613b913938", + "result": "invalid" + }, + { + "tcId": 411, + "comment": "Flipped bit 96 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394743af4e90ac7d06125", + "result": "invalid" + }, + { + "tcId": 412, + "comment": "Flipped bit 96 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303ef8884f20512a7b47", + "result": "invalid" + }, + { + "tcId": 413, + "comment": "Flipped bit 97 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d266072201f55331e5", + "result": "invalid" + }, + { + "tcId": 414, + "comment": "Flipped bit 97 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1fa012936138913938", + "result": "invalid" + }, + { + "tcId": 415, + "comment": "Flipped bit 97 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394743af4e90ac4d06125", + "result": "invalid" + }, + { + "tcId": 416, + "comment": "Flipped bit 97 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303ef8884f20522a7b47", + "result": "invalid" + }, + { + "tcId": 417, + "comment": "Flipped bit 103 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d266072201775331e5", + "result": "invalid" + }, + { + "tcId": 418, + "comment": "Flipped bit 103 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1fa0129361ba913938", + "result": "invalid" + }, + { + "tcId": 419, + "comment": "Flipped bit 103 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394743af4e90a46d06125", + "result": "invalid" + }, + { + "tcId": 420, + "comment": "Flipped bit 103 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303ef8884f20d02a7b47", + "result": "invalid" + }, + { + "tcId": 421, + "comment": "Flipped bit 120 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d266072201f75331e4", + "result": "invalid" + }, + { + "tcId": 422, + "comment": "Flipped bit 120 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1fa01293613a913939", + "result": "invalid" + }, + { + "tcId": 423, + "comment": "Flipped bit 120 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394743af4e90ac6d06124", + "result": "invalid" + }, + { + "tcId": 424, + "comment": "Flipped bit 120 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303ef8884f20502a7b46", + "result": "invalid" + }, + { + "tcId": 425, + "comment": "Flipped bit 121 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d266072201f75331e7", + "result": "invalid" + }, + { + "tcId": 426, + "comment": "Flipped bit 121 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1fa01293613a91393a", + "result": "invalid" + }, + { + "tcId": 427, + "comment": "Flipped bit 121 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394743af4e90ac6d06127", + "result": "invalid" + }, + { + "tcId": 428, + "comment": "Flipped bit 121 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303ef8884f20502a7b45", + "result": "invalid" + }, + { + "tcId": 429, + "comment": "Flipped bit 126 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d266072201f75331a5", + "result": "invalid" + }, + { + "tcId": 430, + "comment": "Flipped bit 126 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1fa01293613a913978", + "result": "invalid" + }, + { + "tcId": 431, + "comment": "Flipped bit 126 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394743af4e90ac6d06165", + "result": "invalid" + }, + { + "tcId": 432, + "comment": "Flipped bit 126 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303ef8884f20502a7b07", + "result": "invalid" + }, + { + "tcId": 433, + "comment": "Flipped bit 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b15690388d266072201f7533165", + "result": "invalid" + }, + { + "tcId": 434, + "comment": "Flipped bit 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e1fa01293613a9139b8", + "result": "invalid" + }, + { + "tcId": 435, + "comment": "Flipped bit 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394743af4e90ac6d061a5", + "result": "invalid" + }, + { + "tcId": 436, + "comment": "Flipped bit 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e30303ef8884f20502a7bc7", + "result": "invalid" + }, + { + "tcId": 437, + "comment": "Flipped bits 0 and 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c7b12b15690388d267072201f75331e5", + "result": "invalid" + }, + { + "tcId": 438, + "comment": "Flipped bits 0 and 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c37c28616f955e1fa11293613a913938", + "result": "invalid" + }, + { + "tcId": 439, + "comment": "Flipped bits 0 and 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e09ceeb3018394743bf4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 440, + "comment": "Flipped bits 0 and 64 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "03a4dae23e30303ef9884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 441, + "comment": "Flipped bits 31 and 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b956903885266072201f75331e5", + "result": "invalid" + }, + { + "tcId": 442, + "comment": "Flipped bits 31 and 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28e16f955e9fa01293613a913938", + "result": "invalid" + }, + { + "tcId": 443, + "comment": "Flipped bits 31 and 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19cee33018394f43af4e90ac6d06125", + "result": "invalid" + }, + { + "tcId": 444, + "comment": "Flipped bits 31 and 63 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4da623e3030bef8884f20502a7b47", + "result": "invalid" + }, + { + "tcId": 445, + "comment": "Flipped bits 63 and 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c6b12b156903885266072201f7533165", + "result": "invalid" + }, + { + "tcId": 446, + "comment": "Flipped bits 63 and 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c27c28616f955e9fa01293613a9139b8", + "result": "invalid" + }, + { + "tcId": 447, + "comment": "Flipped bits 63 and 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e19ceeb3018394f43af4e90ac6d061a5", + "result": "invalid" + }, + { + "tcId": 448, + "comment": "Flipped bits 63 and 127 in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "02a4dae23e3030bef8884f20502a7bc7", + "result": "invalid" + }, + { + "tcId": 449, + "comment": "all bits of tag flipped", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "394ed4ea96fc772d99f8ddfe08acce1a", + "result": "invalid" + }, + { + "tcId": 450, + "comment": "all bits of tag flipped", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "3d83d79e906aa1e05fed6c9ec56ec6c7", + "result": "invalid" + }, + { + "tcId": 451, + "comment": "all bits of tag flipped", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "1e63114cfe7c6b8bc50b16f5392f9eda", + "result": "invalid" + }, + { + "tcId": 452, + "comment": "all bits of tag flipped", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "fd5b251dc1cfcfc10777b0dfafd584b8", + "result": "invalid" + }, + { + "tcId": 453, + "comment": "Tag changed to all zero", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "00000000000000000000000000000000", + "result": "invalid" + }, + { + "tcId": 454, + "comment": "Tag changed to all zero", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "00000000000000000000000000000000", + "result": "invalid" + }, + { + "tcId": 455, + "comment": "Tag changed to all zero", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "00000000000000000000000000000000", + "result": "invalid" + }, + { + "tcId": 456, + "comment": "Tag changed to all zero", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "00000000000000000000000000000000", + "result": "invalid" + }, + { + "tcId": 457, + "comment": "tag changed to all 1", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "ffffffffffffffffffffffffffffffff", + "result": "invalid" + }, + { + "tcId": 458, + "comment": "tag changed to all 1", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "ffffffffffffffffffffffffffffffff", + "result": "invalid" + }, + { + "tcId": 459, + "comment": "tag changed to all 1", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "ffffffffffffffffffffffffffffffff", + "result": "invalid" + }, + { + "tcId": 460, + "comment": "tag changed to all 1", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "ffffffffffffffffffffffffffffffff", + "result": "invalid" + }, + { + "tcId": 461, + "comment": "msbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "4631ab95e9830852e687a28177d3b165", + "result": "invalid" + }, + { + "tcId": 462, + "comment": "msbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "42fca8e1ef15de9f209213e1ba11b9b8", + "result": "invalid" + }, + { + "tcId": 463, + "comment": "msbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "611c6e33810314f4ba74698a4650e1a5", + "result": "invalid" + }, + { + "tcId": 464, + "comment": "msbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "82245a62beb0b0be7808cfa0d0aafbc7", + "result": "invalid" + }, + { + "tcId": 465, + "comment": "lsbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "", + "ct": "", + "tag": "c7b02a14680289d367062300f65230e4", + "result": "invalid" + }, + { + "tcId": 466, + "comment": "lsbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e", + "ct": "b6c1000669eb0e577bf103d13d915b", + "tag": "c37d29606e945f1ea11392603b903839", + "result": "invalid" + }, + { + "tcId": 467, + "comment": "lsbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f", + "ct": "b6c1000669eb0e577bf103d13d915bb5", + "tag": "e09defb2008295753bf5e80bc7d16024", + "result": "invalid" + }, + { + "tcId": 468, + "comment": "lsbs changed in tag", + "flags": [ + "ModifiedTag" + ], + "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", + "aad": "", + "msg": "000102030405060708090a0b0c0d0e0f10", + "ct": "b6c1000669eb0e577bf103d13d915bb5b0", + "tag": "03a5dbe33f31313ff9894e21512b7a46", + "result": "invalid" + }, + { + "tcId": 469, + "comment": "tag collision", + "flags": [ + "TagCollision_1" + ], + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "iv": "0000000000000000000000000000000000000000000000000000000000000000", + "aad": "", + "msg": "0000000000000000000000000000000053a6730dde888f93419741933cc00b230ffe14cec4e10f2b994525b7db4b082928d95f897cfd97d6baf42affb23e4a0d985c7f0d7187d4a53d1a5b9454b0db25a9f895536559636209b2cf9853b4d6152b8e23423439801580063e27b6327291", + "ct": "b98f03a947807713d75a4fff9fc277a6e1200353b247b91a353aa86c6990afe637989075c7427cba63be4c77fbb26e9b8f3dd64af30bb16c23a731709ce6c498d5af4608c51aa3daf27df7090a75ae104c9bafdf7691588f271dbc26ecd9546adebfe6045e0f6c43a98e93853b0068a6", + "tag": "b68e3034ad6c9007260341bb24be31d0", + "result": "valid" + }, + { + "tcId": 470, + "comment": "tag collision", + "flags": [ + "TagCollision_1" + ], + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "iv": "0000000000000000000000000000000000000000000000000000000000000000", + "aad": "", + "msg": "01010101010101010101010101010101e12f8ced9549095fab9543e010b645d60f4976db2814b1da1908dbf3618a9a7e6e56ceaf59cc7bb8799ce4035dbf6c691239520dad4f8ecdb381a45198dad59ba399b20a887aa56c290cc5f58bee0a2e98243bac8dbc5ff2389c569cbbd0f7ec", + "ct": "b88e02a846817612d65b4efe9ec376a753a9fcb3f9863fd6df38aa1f45e6e1136dbdd4c3c3716ced7aeb0d2e9b009ace95b3723cadfbbd26b6737cec382598879669376c35cd397c43b5f90665242a2e868cb0979bab9fcd8b00dd8d1d48df6456f33e8f554a2490119695c25c2f4bf8", + "tag": "b68e3034ad6c9007260341bb24be31d0", + "result": "valid" + }, + { + "tcId": 471, + "comment": "tag collision", + "flags": [ + "TagCollision_1" + ], + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "iv": "0000000000000000000000000000000000000000000000000000000000000000", + "aad": "", + "msg": "02020202020202020202020202020202985c4ae6507083b0f894168f3466157e6ebbabdae9959f3fd1ec7cc7b6a2421b0b3f83592e5a8747c86d4eba9d0a60cbf98367236b7149b8717e9a69355bbae7d3df84da19e620e14c09c62525aa93ccbd1501be867844aae814396ef0ed127c", + "ct": "bb8d01ab45827511d5584dfd9dc075a42ada3ab83cbfb5398c39ff706136b1bb7fcd60ef572b95db8a994187a6e4674a674e6148d9732c826d8a9cf6edfab020ceffb920149e1ea916cbad2f8d3bd21d11249a97353ee48331007ed6d3c4ac9124019417ac1af2e0ed424a8db7fef031", + "tag": "b68e3034ad6c9007260341bb24be31d0", + "result": "valid" + }, + { + "tcId": 472, + "comment": "tag collision", + "flags": [ + "TagCollision_1" + ], + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "iv": "0000000000000000000000000000000000000000000000000000000000000000", + "aad": "", + "msg": "030303030303030303030303030303037ef37e0bf9611ddbee742411835dd9c5500d8d7e4978c80938c046ee590c69010519bb8d1f5c13c78d3908b309213813a2937dfb67857f035eeb12d2c3f934f72b3482aed8959296aa9590afd2dc34270e815b78a6734137a5684b5abcdb2eb5", + "ct": "ba8c00aa44837410d4594cfc9cc174a5cc750e5595ae2b529ad9cdeed60d7d0093a0e247ca89b7faf23133b568daffd9aeb87afeb4c2fbb8e42812778b2357256d660f54f19290174c55dcaf12b7fa74be82e3c12353f21d324b310cefe48daf8af66a65ffd58f06396df60be2e67d82", + "tag": "b68e3034ad6c9007260341bb24be31d0", + "result": "valid" + } + ] + } + ] +} \ No newline at end of file From 7d85e55f0e5cc792866cc06951d1ecee6dfe8754 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 1 Jul 2024 16:32:55 +0200 Subject: [PATCH 117/219] Compress Wycheproof test vectors --- src/test/main.zig | 31 +- src/test/wycheproof/aegis128L_test.json | 6756 ------------------- src/test/wycheproof/aegis128L_test.json.zst | Bin 0 -> 80895 bytes src/test/wycheproof/aegis256_test.json | 6654 ------------------ src/test/wycheproof/aegis256_test.json.zst | Bin 0 -> 92234 bytes 5 files changed, 17 insertions(+), 13424 deletions(-) delete mode 100644 src/test/wycheproof/aegis128L_test.json create mode 100644 src/test/wycheproof/aegis128L_test.json.zst delete mode 100644 src/test/wycheproof/aegis256_test.json create mode 100644 src/test/wycheproof/aegis256_test.json.zst diff --git a/src/test/main.zig b/src/test/main.zig index 630ca8f..27bda00 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -766,19 +766,22 @@ const Result = enum { invalid, }; +const heap = std.heap; +const zstd = std.compress.zstd; + test "aegis128l - wycheproof" { const alloc = std.testing.allocator; - const parsed = try std.json.parseFromSlice( - JsonTests, - alloc, - @embedFile("wycheproof/aegis128L_test.json"), - .{ .ignore_unknown_fields = true }, - ); + var fbs = std.io.fixedBufferStream(@embedFile("wycheproof/aegis128L_test.json.zst")); + var window_buffer: [zstd.DecompressorOptions.default_window_buffer_len]u8 = undefined; + var decompressor = zstd.decompressor(fbs.reader(), .{ .window_buffer = &window_buffer }); + const json = try decompressor.reader().readAllAlloc(alloc, 1000000); + defer alloc.free(json); + const parsed = try std.json.parseFromSlice(JsonTests, alloc, json, .{ .ignore_unknown_fields = true }); defer parsed.deinit(); for (parsed.value.testGroups) |test_group| { if (!std.mem.eql(u8, "AeadTest", test_group.type)) continue; for (test_group.tests) |t| { - var arena = std.heap.ArenaAllocator.init(alloc); + var arena = heap.ArenaAllocator.init(alloc); defer arena.deinit(); var arena_alloc = arena.allocator(); var key: [16]u8 = undefined; @@ -809,17 +812,17 @@ test "aegis128l - wycheproof" { test "aegis256 - wycheproof" { const alloc = std.testing.allocator; - const parsed = try std.json.parseFromSlice( - JsonTests, - alloc, - @embedFile("wycheproof/aegis256_test.json"), - .{ .ignore_unknown_fields = true }, - ); + var fbs = std.io.fixedBufferStream(@embedFile("wycheproof/aegis256_test.json.zst")); + var window_buffer: [zstd.DecompressorOptions.default_window_buffer_len]u8 = undefined; + var decompressor = zstd.decompressor(fbs.reader(), .{ .window_buffer = &window_buffer }); + const json = try decompressor.reader().readAllAlloc(alloc, 1000000); + defer alloc.free(json); + const parsed = try std.json.parseFromSlice(JsonTests, alloc, json, .{ .ignore_unknown_fields = true }); defer parsed.deinit(); for (parsed.value.testGroups) |test_group| { if (!std.mem.eql(u8, "AeadTest", test_group.type)) continue; for (test_group.tests) |t| { - var arena = std.heap.ArenaAllocator.init(alloc); + var arena = heap.ArenaAllocator.init(alloc); defer arena.deinit(); var arena_alloc = arena.allocator(); var key: [32]u8 = undefined; diff --git a/src/test/wycheproof/aegis128L_test.json b/src/test/wycheproof/aegis128L_test.json deleted file mode 100644 index 0ec5c35..0000000 --- a/src/test/wycheproof/aegis128L_test.json +++ /dev/null @@ -1,6756 +0,0 @@ -{ - "algorithm": "AEGIS128L", - "schema": "aead_test_schema.json", - "generatorVersion": "0.9", - "numberOfTests": 479, - "header": [ - "Test vectors of type AeadTest test authenticated encryption with additional data.", - "The test vectors are intended for testing both encryption and decryption.", - "Test vectors with \"result\" : \"valid\" are valid encryptions.", - "Test vectors with \"result\" : \"invalid\" are using invalid parameters", - "or contain an invalid ciphertext or tag." - ], - "notes": { - "Ktv": { - "bugType": "BASIC", - "description": "Known test vector." - }, - "ModifiedTag": { - "bugType": "AUTH_BYPASS", - "description": "The test vector contains a ciphertext with a modified tag. The test vector was obtained by manipulating a valid ciphertext. The purpose of the test is to check whether the verification fully checks the tag.", - "effect": "Failing to fully verify a tag reduces the security level of an encryption." - }, - "OldVersion": { - "bugType": "LEGACY", - "description": "This is a test vector from https://eprint.iacr.org/2013/695.pdf. This paper describes an old version of AEGIS128L. The tag is computed as sum over S[0] .. S[7]. However, the Caesar competition submission http://competitions.cr.yp.to/round1/aegisv1.pdf computes the tag as sum over S[0] .. S[6]." - }, - "Pseudorandom": { - "bugType": "FUNCTIONALITY", - "description": "The test vector contains pseudorandomly generated inputs. The goal of the test vector is to check the correctness of the implementation for various sizes of the input parameters. Some libraries do not support all the parameter sizes. " - }, - "TagCollision_1": { - "bugType": "BASIC", - "description": "The test vector contains a ciphertext with the same tag as another vector, but different plaintext and ciphertext." - }, - "TagCollision_2": { - "bugType": "BASIC", - "description": "The test vector contains a ciphertext with the same tag as another vector, but different aad." - } - }, - "testGroups": [ - { - "type": "AeadTest", - "keySize": 128, - "ivSize": 128, - "tagSize": 128, - "tests": [ - { - "tcId": 1, - "comment": "https://eprint.iacr.org/2013/695.pdf", - "flags": [ - "OldVersion" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "", - "msg": "00000000000000000000000000000000", - "ct": "41de9000a7b5e40e2d68bb64d99ebb19", - "tag": "8674521d074f983b2e830dd6f3edf4e5", - "result": "invalid" - }, - { - "tcId": 2, - "comment": "https://eprint.iacr.org/2013/695.pdf", - "flags": [ - "OldVersion" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "00000000000000000000000000000000", - "msg": "00000000000000000000000000000000", - "ct": "29a0ce1f5dce8c404d56d00491668604", - "tag": "eb82ca639900a0699c859bfbf3020bfa", - "result": "invalid" - }, - { - "tcId": 3, - "comment": "https://eprint.iacr.org/2013/695.pdf", - "flags": [ - "OldVersion" - ], - "key": "00010000000000000000000000000000", - "iv": "00000200000000000000000000000000", - "aad": "00010203", - "msg": "00000000000000000000000000000000", - "ct": "1c0f229f289844def2c1ef28bea0abf0", - "tag": "86f3cc5e3a68f6e485960820be163808", - "result": "invalid" - }, - { - "tcId": 4, - "comment": "https://eprint.iacr.org/2013/695.pdf", - "flags": [ - "OldVersion" - ], - "key": "10010000000000000000000000000000", - "iv": "10000200000000000000000000000000", - "aad": "0001020304050607", - "msg": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "ct": "79d94593d8c2119d7e8fd9b8fc77845c5c077a05b2528b6ac54b563aed8efe84", - "tag": "4ed71cf3d6a3e568e8085110e92e8bfb", - "result": "invalid" - }, - { - "tcId": 5, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "", - "msg": "00000000000000000000000000000000", - "ct": "41de9000a7b5e40e2d68bb64d99ebb19", - "tag": "f4d997cc9b94227ada4fe4165422b1c8", - "result": "valid" - }, - { - "tcId": 6, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "00000000000000000000000000000000", - "msg": "00000000000000000000000000000000", - "ct": "29a0ce1f5dce8c404d56d00491668604", - "tag": "29c9d93afd7e1276112a1fd0c344ccd2", - "result": "valid" - }, - { - "tcId": 7, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "00010000000000000000000000000000", - "iv": "00000200000000000000000000000000", - "aad": "00010203", - "msg": "00000000000000000000000000000000", - "ct": "1c0f229f289844def2c1ef28bea0abf0", - "tag": "1f0799d68840d2364e7eeca6d41b4d05", - "result": "valid" - }, - { - "tcId": 8, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "10010000000000000000000000000000", - "iv": "10000200000000000000000000000000", - "aad": "0001020304050607", - "msg": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "ct": "79d94593d8c2119d7e8fd9b8fc77845c5c077a05b2528b6ac54b563aed8efe84", - "tag": "cc6f3372f6aa1bb82388d695c3962d9a", - "result": "valid" - }, - { - "tcId": 9, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "55565758595a5b5c5d5e5f6061626364", - "iv": "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf", - "aad": "", - "msg": "", - "ct": "", - "tag": "439ef345a332a4f83c9cc28debea9be0", - "result": "valid" - }, - { - "tcId": 10, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "55565758595a5b5c5d5e5f6061626364", - "iv": "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf", - "aad": "a0", - "msg": "", - "ct": "", - "tag": "a2694bd5658385c137048077018c0a69", - "result": "valid" - }, - { - "tcId": 11, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "", - "msg": "", - "ct": "", - "tag": "83cc600dc4e3e7e62d4055826174f149", - "result": "valid" - }, - { - "tcId": 12, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "10010000000000000000000000000000", - "iv": "10000200000000000000000000000000", - "aad": "0001020304050607", - "msg": "000102030405060708090a0b0c0d", - "ct": "79d94593d8c2119d7e8fd9b8fc77", - "tag": "5c04b3dba849b2701effbe32c7f0fab7", - "result": "valid" - }, - { - "tcId": 13, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b67b1a6efdd40d37080fbe8f8047aeb9", - "iv": "fa294b129972f7fc5bbd5b96bba837c9", - "aad": "", - "msg": "", - "ct": "", - "tag": "f4ebf330a282286c2c2e06bbb068f800", - "result": "valid" - }, - { - "tcId": 14, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "209e6dbf2ad26a105445fc0207cd9e9a", - "iv": "9477849d6ccdfca112d92e53fae4a7ca", - "aad": "", - "msg": "01", - "ct": "3d", - "tag": "319917b5923dbad109dc9e61c5810979", - "result": "valid" - }, - { - "tcId": 15, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ef82ab03129d93cf7f06b88aad17b595", - "iv": "be1c0009a6bbf1cdb86bae6cad029ee4", - "aad": "", - "msg": "1155", - "ct": "4648", - "tag": "96bef0860fcb1d15daafcd19aaf312f5", - "result": "valid" - }, - { - "tcId": 16, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "45d761e2a6a9384b3b69343a83a0dfcb", - "iv": "e117d91548f9c7caf88493a25be62410", - "aad": "", - "msg": "3bf2e8", - "ct": "1c547f", - "tag": "240c2c156d8cff6c63bf63986076670e", - "result": "valid" - }, - { - "tcId": 17, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4ca75d221f93bea97e3571832b87dfb3", - "iv": "934a839a6e56c11f6f4e66ba1bb65671", - "aad": "", - "msg": "ae09c978", - "ct": "f70ddc33", - "tag": "9f183378f0f4152667430c7c6d9f164d", - "result": "valid" - }, - { - "tcId": 18, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dd69b91f5203cc747adba6774b7944d9", - "iv": "8238b76f8089afe3d189126f3a92c16f", - "aad": "", - "msg": "8b72d6cc5f", - "ct": "cb73eebe22", - "tag": "f5f7133972b9f0657a8c18fa9d5b395a", - "result": "valid" - }, - { - "tcId": 19, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d3c38350e5f2734a692c982dc14cd1f2", - "iv": "37ef955586290a179413e4e29847aa90", - "aad": "", - "msg": "0b0c5c6d8d22", - "ct": "acdc5534b4a5", - "tag": "654654363adea18f86ae28eca71935ee", - "result": "valid" - }, - { - "tcId": 20, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8d263349fea29d36d0ec479609a95801", - "iv": "43cad2e7270dad51e21efd4ba7156866", - "aad": "", - "msg": "23c6a97133decf", - "ct": "fbf17b03c921cf", - "tag": "46c5397e95b1d46d66793b87b821e8fb", - "result": "valid" - }, - { - "tcId": 21, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8f3bab40de3735871c19c41f0b92d4b5", - "iv": "ade8ea0a7f7dd8db2b5622496a43ecf1", - "aad": "", - "msg": "502b88f37c444f07", - "ct": "b9c44d22aa43b2e3", - "tag": "d77c70a64cda3ba57cda965248e813bf", - "result": "valid" - }, - { - "tcId": 22, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "691c3419d17c2406dab79dcdc7c9843d", - "iv": "30228b7bfe83993a195d19feeec19737", - "aad": "", - "msg": "12c6725ee79e7ae9ac", - "ct": "57b4c24f7d492feb7e", - "tag": "9d2783ada64bfa71950e223f4aecf9ff", - "result": "valid" - }, - { - "tcId": 23, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d4a048737dc60bed5fd57cf08d22b091", - "iv": "ef7ee939ba01323ccfc87f1d82336d73", - "aad": "", - "msg": "da0e2244040da23ea755", - "ct": "1d2c799c5e51501a4fbb", - "tag": "b7e58540337405a2cd21f447e050582a", - "result": "valid" - }, - { - "tcId": 24, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "399422031abe10a1a9ba1d925c51b112", - "iv": "fadc1aa8fb800face017a235998b72d5", - "aad": "", - "msg": "feaa3250a8e8b4b0a8dec3", - "ct": "162dbf952539fecb9635c3", - "tag": "1df3009594a6dfda4a505f1a3672cbb6", - "result": "valid" - }, - { - "tcId": 25, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2146e34a7894f563076745dce2101ca8", - "iv": "9d710aa3276ee6287924dac9a4d6d554", - "aad": "", - "msg": "ff0c72380bd58ff342477ec1", - "ct": "3f04fbaeea0a7b64f2cb84b8", - "tag": "0e853ee8b2aac49f910526e4eedcfe05", - "result": "valid" - }, - { - "tcId": 26, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8a1354caa05cebbdfb5dbd0317a1b12a", - "iv": "9be4321b5ef4089fe7160685bec3cc6a", - "aad": "", - "msg": "ff65eb93d2556c7077f4638d42", - "ct": "74ce653796438e8742ada5f291", - "tag": "56e51e5c911e5e393143d70001342535", - "result": "valid" - }, - { - "tcId": 27, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b037b2f7799f309ed8e5839532797783", - "iv": "c1fc5385cddd3b4a10f7846ec34743e2", - "aad": "", - "msg": "4483e6bd08a51781aa77f4b41d78", - "ct": "be18d82733f62b85484d7a0ee866", - "tag": "9466fd750d76ccf4d997732e0131a9e2", - "result": "valid" - }, - { - "tcId": 28, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a549442e35154032d07c8666006aa6a2", - "iv": "5171524568e81d97e8c4de4ba56c10a0", - "aad": "", - "msg": "1182e93596cac5608946400bc73f3a", - "ct": "6e8d52f0d610b08c9886a7986b2db2", - "tag": "d849fa1f0d93db658b267f5dc0fd2b5f", - "result": "valid" - }, - { - "tcId": 29, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cfb4c26f126f6a0acb8e4e220f6c56cd", - "iv": "1275115499ae722268515bf0c164b49c", - "aad": "", - "msg": "09dfd7f080275257cf97e76f966b1ad9", - "ct": "477f479aa878eedd2c4bf1478b2ce859", - "tag": "f8982d7396b3ed585f7f18d49d418591", - "result": "valid" - }, - { - "tcId": 30, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d62ee59bf8f9ca7f11d4d5b0fa5e28cd", - "iv": "7063ecaacd0d5c399ff539c898323ee7", - "aad": "", - "msg": "fc9c471eee670e5d4e91ce57451173cab8", - "ct": "cd58aaa845a9e0fcc2877508f7a6df312c", - "tag": "2afa84da3b32f7b7bc8fd6a690cd42eb", - "result": "valid" - }, - { - "tcId": 31, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "28831a46a72301bae27858a917b43af3", - "iv": "5cc1ff921e8833d6899a2aa15ed83c1b", - "aad": "", - "msg": "6d8087273602a96b193fc3a0fe9d9e6e7423", - "ct": "1e771ee3535b4a522379bc9657f5af11a644", - "tag": "0f31f7f19adf99baf1b5855b3dfa36b8", - "result": "valid" - }, - { - "tcId": 32, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "31e8e85a8425dc01e9167f61cb0b5f8c", - "iv": "3658b2da456dad663a01ed2982e36371", - "aad": "", - "msg": "c41b624ea8fc7799c2f2a39dfe68d694860ac2", - "ct": "d308bf2da99ae4a3119546d314598102fef2b6", - "tag": "dc4a1aba4048b6444ec06829a8c66742", - "result": "valid" - }, - { - "tcId": 33, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4e42a6000b285319e4517c8adc59fdc2", - "iv": "ea69f232d19544a3c98f403e553ea5d3", - "aad": "", - "msg": "f11eda9011217ec0016aaf2572f090725e98690f", - "ct": "28e070de22c356c4fd2f84df3bee13eb8a97d888", - "tag": "b68dfd8b5e9ba6fa3a94657b8b90d83c", - "result": "valid" - }, - { - "tcId": 34, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1d7ca65acd89673b89c0510a22f7a4aa", - "iv": "dd8d15bf1b4eec6580cb8f60a41730b3", - "aad": "", - "msg": "24e27690ce286a823e7de04fb72ecef51af36837ba", - "ct": "d1dd06bf513f6dfe57bc237f53df856b0c0f3cc713", - "tag": "68c9ac5d762219d90230f767344eccc1", - "result": "valid" - }, - { - "tcId": 35, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "958bcdb66a3952b53701582a68a0e474", - "iv": "0e6ec879b02c6f516976e35898428da7", - "aad": "", - "msg": "140415823ecc8932a058384b738ea6ea6d4dfe3bbeee", - "ct": "5578e931dc6ebf77d614895c6098592e43faee9342d9", - "tag": "c13bf2567da40c0f5fccb8c3127224df", - "result": "valid" - }, - { - "tcId": 36, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ede8af705e4655817960d0eb263045a7", - "iv": "b777772c2fa883506f4ef10e746c1556", - "aad": "", - "msg": "69c69c089a147b6a22d66cd6bcb9f7a5b75dce0a1b1ad8", - "ct": "f0b7bc93a2debb654e510fa1653ed1c1fd04a58801a6be", - "tag": "16d3db0f06822ab8fffda0726daff826", - "result": "valid" - }, - { - "tcId": 37, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7b27264352148258f434667f6c94c1b6", - "iv": "cfd7a30c9e6460c249138d882e92fa48", - "aad": "", - "msg": "ca4915240b97c70f10b3a97ec2ebdd80d521bd2e023460ff", - "ct": "0c29d663e637f8fcd92cfd765ed84ac4e4e8ff90134cffbb", - "tag": "dd59064a0a16c5a6ed1f75be7644567c", - "result": "valid" - }, - { - "tcId": 38, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "faa8091394e56d6b1a2ad75cf51c1951", - "iv": "977d1955112dbdd13b61c69043006d26", - "aad": "", - "msg": "86b54ce9aa5989fbed76586228bf6dfcd794f73086bf664349", - "ct": "dd81e48e5738457449bb2d8b8e4c061ac99dc0edbf72677a72", - "tag": "a534faa19f1eb8bb2d5f6d42d381fd8f", - "result": "valid" - }, - { - "tcId": 39, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "421fdd9ec975860db90b11d7b7cd8988", - "iv": "a6cdba878e147e60b7cb6e1986733e16", - "aad": "", - "msg": "117bf24912a0b10ac30672cfde59dcc8c128639b5b59ac0a17fb", - "ct": "14ad04bd8c9d6657bc3c953fe75e3fe161d393c143efc3f5988c", - "tag": "cd5ecbf2f9f527394660213a69c15036", - "result": "valid" - }, - { - "tcId": 40, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d5f13ec44339fe7c106d1c17c9db1105", - "iv": "e1dac3fbd0051f7fc73e0ec893b7a819", - "aad": "", - "msg": "fb04f11f751c9b1314c993c5ad124c4c14ca41848687b23a8d08e9", - "ct": "19add89be9f670258f02ea289a9c0cee70fbf5c1386ab4e4d81130", - "tag": "4bb4e63ad4b771d54d7f92cd7c8ed576", - "result": "valid" - }, - { - "tcId": 41, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "43003af40932ef580227487dd7db42ff", - "iv": "accfabad3b5d7ce3a3261c7fea6e3c7e", - "aad": "", - "msg": "83f54052f6b7978fdd7f933f11349ecb9af4fa8c5794d32d1f9d9a32", - "ct": "88beb9e59cf6a38f9bc334be04fc370b0c08fc74f8b77cf45bdf3190", - "tag": "237833ea71cc10101f83a346ecc15613", - "result": "valid" - }, - { - "tcId": 42, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "11b2fbd74b6a2702367daf07181f3bee", - "iv": "573fb32cc86a37f5d9bccd4132c69612", - "aad": "", - "msg": "bfcd6e6a5a144c6664f9a29709a779fa876c6932d7426e5959e1394c1e", - "ct": "713d1b560af09a9b5d5c0dadbe081068fdc08361873dfed9b017ca88a6", - "tag": "0c08564c3c498c19dad15b476c3c4669", - "result": "valid" - }, - { - "tcId": 43, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8c6cf22061979683dde96dc263e00cb5", - "iv": "d3d7be8f4fa8e18bfc2f1f6a8c0146c3", - "aad": "", - "msg": "48474826e0e6a6ad27809e19e51e223c742b09c986fe50b780b423d5c256", - "ct": "0a5944bd755f6e57150b061fcaa8158bc12876d050fdefead83a4a7d8162", - "tag": "268a76b4f97abdef113d4f5b1d024fef", - "result": "valid" - }, - { - "tcId": 44, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d85d6cbb6cdbac1684fc2fae1fb3265a", - "iv": "6b02dc9a0979e64c3ddfd3b16a41c184", - "aad": "", - "msg": "9768c46c800cf247055f4dc07857650a337b509ad71fa3e040e0196b672253", - "ct": "6b4c729d6a4079bfd207d899f15765daff0c68dc7cfab8c89f96c8452d43bc", - "tag": "c81e79442e71dc1152deea8d44983a76", - "result": "valid" - }, - { - "tcId": 45, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0b11ef3a08c02970f74281c860691c75", - "iv": "95c1dd8c0f1705ece68937901f7add7b", - "aad": "", - "msg": "f693d4edd825dbb0618d91113128880dbebb23e25d00ed1f077d870be9cc7536", - "ct": "aeaaca3901e2e93a4527b98db338e199d27ad6dca8f04ef1f947be9af527a20f", - "tag": "a2cf6396303a20042a3838226f6962e7", - "result": "valid" - }, - { - "tcId": 46, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "def4fe10908f9a080cf3fca4f432be14", - "iv": "0cbd4838cf9b29eaace6c6c15c6ed51a", - "aad": "", - "msg": "1878e52c91edfb65ff2c9df60b6183fef54607bbf3aba53b96bc98667d2eb79f13", - "ct": "ff442256f35cd778418a55b0baf3cf0b09ba0f73f6ee3e930dddbe6938367dda5c", - "tag": "f05aff42ccbdafc8bea5125a194e963e", - "result": "valid" - }, - { - "tcId": 47, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a2c191f9bf75735c30e32da1c4006294", - "iv": "7704e9d459a47d1f9350f00959b78115", - "aad": "", - "msg": "c0622772c872736f545b92244d9c02f2e4c73fa80dc1b6cbc4825b223dac2a772cf3", - "ct": "aa2b53f5bb3edcdf30a6bb61995d01d6e048c8f658a487d7f9571ffbc74d6e6ff461", - "tag": "8f7cabebdf423b6066b8d7e9a63ba546", - "result": "valid" - }, - { - "tcId": 48, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bc59288ec36ed0219b8d2c9c0aeed105", - "iv": "6f13a7ffed6de57837f79032bb689958", - "aad": "", - "msg": "78cdaad403c3b056fad70f4d43ff1b621671ecf698533d3751818f713f498c91b1765c", - "ct": "44410577be2cbec486d1a9eaa88c796f5664836ddc59e1988b1692382b79c9353c0b6c", - "tag": "e5b8621fba60bc3faef129748b4d7084", - "result": "valid" - }, - { - "tcId": 49, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "60f59ea6b3d55acdf1ccde92b361b6b9", - "iv": "0dfffb79095357fdc81c8e4844a88752", - "aad": "", - "msg": "72a28ac296f1ec8844ff2f9ece6a5b7dda14fe3a80ab564be79063527e8d177244903d80", - "ct": "494c827de78a1b9e4ffe1422a52105037bf0ccd95bca4dd7762f0eb5eb0de633b9123636", - "tag": "6a607e65258bc7ccb46dfab627a97b07", - "result": "valid" - }, - { - "tcId": 50, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c67aa7491d57c1bbbe0e2176519820b6", - "iv": "030c4f472cddcee5dc98056019a6f0aa", - "aad": "", - "msg": "df23ce0551cb5b5f85b2fe2d2a9565705ab4b06ab6dc13dc8ec83e751a8e9dc0a0184cb369", - "ct": "207b997b6fc41a62937c11ee5d60dc631c60731f7b4ddbc81722a201c138ab71ef449d4fcd", - "tag": "b234078f57f3a2007e4fc44beb74c1a7", - "result": "valid" - }, - { - "tcId": 51, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cdce4cb19ff98dd6638401adec562879", - "iv": "acd14f031acbd3523d7a609e6b68c1ba", - "aad": "", - "msg": "5ffc8dae6eb6378533a68d5b71a602c180babb6e6b62c8510d7af1f20fe0075d5ef72d674600", - "ct": "c0b0ae2db95812d8b9b5b9f35dea8081e96282bcb4438d53990dfaca6bfb1b3552d513f42a7a", - "tag": "7e84f951b0648a4b6364a28a5e57f069", - "result": "valid" - }, - { - "tcId": 52, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "de834b6030eb413aa21a28ee83c268b7", - "iv": "cddea2827d81697ad4926f7c1e742bab", - "aad": "", - "msg": "0ebab8220b07fa16dc9cc112f1a5514e81d407da7e39eca0de8396431df3c860db4353e091659a", - "ct": "760401e5c2b09ccf067580036237426dce1db8e49453791f070a508b595bd3bfc3d1dd8d878a54", - "tag": "d2b51bb0d8479eda991fb10b861c797a", - "result": "valid" - }, - { - "tcId": 53, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cb6e4235463f907bcce8160c991bfbbb", - "iv": "cde753e3441f53ef6ec78333b4262d47", - "aad": "", - "msg": "132c58dbb591cf7b890ec6d77c0d394ee7c907f1865878f9efe9bf3f12f51ee6ee6d831fa560b1e9", - "ct": "c1ec2e3f7cb8146309d949f306554e4dedc01083cf5007673f454755a4cb850be527bfd38f376ffa", - "tag": "a5be75d37e32ac3720d634ba5510bd60", - "result": "valid" - }, - { - "tcId": 54, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ddce6d5ff06fcfe4563617cc35edbd1b", - "iv": "e4b0d8f1b9488ac80f92b4a3bcad54fc", - "aad": "", - "msg": "a67101002832e3e1e89f2fd0605e8f473743a56334abb04403fdcbf8c71413aa2b3363dedf2abe0b02", - "ct": "15a5f66cd0139474c25cf0dfb43cea7fb76b423afedc5956d61ec58493ccd03c078fc9fb3ea63f1afb", - "tag": "22be5a2c60c833fe606f74d70856f694", - "result": "valid" - }, - { - "tcId": 55, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "50381868f2ee2efa37554b477ee8f4db", - "iv": "d3d3ab486059b9ba799d9ba67a8edfd7", - "aad": "", - "msg": "2cdeb4188815bbac732afcb33905f5de7a6fe75caa756ed59beee72885a011a4d5689e4a58038f633f73", - "ct": "42f67cbc8b684b6bcbb802d12d8376b8ca27b36f4fc19e0879438ac436fd8ba67125d048370b56bea87c", - "tag": "8536b2aba021bea2e355404f98f0151d", - "result": "valid" - }, - { - "tcId": 56, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2ed207e73a472881df78d810485d04b4", - "iv": "3c6ac49c6eceec58f06d9263ae1d31e9", - "aad": "", - "msg": "caaf1262789b93a88b36061e6e41344d3f1eeef0437e7d8d9f67e0c2c88553ccb694f036082409f4f9c5bf", - "ct": "d225ab4e48634268472ee84b102d065b90641bb50b140a71d08233e050f4509c730d95d7ff074defda1696", - "tag": "14c4f1fdad33508e2318f7ccbf61588d", - "result": "valid" - }, - { - "tcId": 57, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a3f47f6384e7ce88b778682e72d564f8", - "iv": "cccc6d38579f4a8c879b8a0bbdb3b7e2", - "aad": "", - "msg": "258ad811e7896294060bb38991fa637625e2b75494fc17054490c8322d98f6ef8d6140bf5122bab68cedc36c", - "ct": "0eca20c0206158bfe3ae07e7a6b4fcc38e08f5d1ea4f4f0663eb394880e60b7cbc5c9a5ce0d5f5890d138925", - "tag": "209efb6eb9b43237dea7f1d4dd3cec66", - "result": "valid" - }, - { - "tcId": 58, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4a4af0718f2bb8fd255bada3451e3a2b", - "iv": "4333b5a763e5804c0d88ed58a3f243a6", - "aad": "", - "msg": "a6e1950b503f9907792b6afb64e4d8936e4c79a624733da7a195fcafdab60d0239d2843c3dc87a62fe83af6bd6", - "ct": "143d4cb837521be7d091c7f98ce258785cd8ab04e82541fea1b78d046fb90906244e320b4a3a56bf57dfbc246b", - "tag": "694f643454ecff1b9f08b179ecef6aa5", - "result": "valid" - }, - { - "tcId": 59, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ec3eaf29a80ddebaf40b01ac1aefb2ae", - "iv": "e7b503cda3700bc98e98f239e2059eec", - "aad": "", - "msg": "80bc692725c9bcb5c080df78b8b280d9026e7ac76cdd16193c8234ed1574776007d39d41d91b59e628a2904095b6", - "ct": "f87a366f416ae4aeb31e4d246d784b1c091cb01cf842d90f6d3fd4f7c4ca48cb19173fc007a78d1d1b6c4a5726eb", - "tag": "8e8b0680705f2697946d653fba925ad1", - "result": "valid" - }, - { - "tcId": 60, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e2fb7bdf4019356f75bf944769cf4d7d", - "iv": "e9ec2c4e9d41e2c95281fe39c994882c", - "aad": "", - "msg": "9b8940041cab2c497008bbf30c78d2273cc7a6b3fd3e2129c2b117f664549672586eb8e0584a99bb2eda7ac5ef4eb0", - "ct": "7923bbe41e7a0216a5094b3c82a7d193f92050b8766e0dd736cba16886d8807a437d6c2905b28197757d3be2f6c3d5", - "tag": "5604a9e09cb32ceef75e355fce3d1cad", - "result": "valid" - }, - { - "tcId": 61, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5c65cd78f1b4e52475be55a2f83e69ad", - "iv": "554987fffaa2ddf904b2a140a4ee53ae", - "aad": "", - "msg": "222af3954dcbb0e024097d1b9551c06b26b62654a3115380b41023227dee93fb86cf4bcc1991cdf5b1e590fa9397dbb6", - "ct": "488ceba77bbcee1b8710f5cb6eecd82c007a289e3aea43c21bf7f7deaff172e58809931a49fb069dde3f9a234aa3affa", - "tag": "d03f8efb2cd8387427b33eca421bef63", - "result": "valid" - }, - { - "tcId": 62, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a4d9082ee95e88c00e661e1b20726faa", - "iv": "da2c900b6c9a18bc29f37019dc8b71ae", - "aad": "", - "msg": "69e4cbcd7ce30816474bf500a41f3356a3940d86e5be667a7ba2a461db7a9755e61385c50d50b1c8ba4961adcea2768f57", - "ct": "79380f0e42aa489d0f0e2a620619f24022d38e23fdb716a9f77c97227a874e851d220186e81ba36e5fd28aebdf2a3ce2a3", - "tag": "40aa9d35f536897ff5b6de76738fc2c5", - "result": "valid" - }, - { - "tcId": 63, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f1849309c9b724608b208b4fad3f3269", - "iv": "ecd26659b8f7816f89c5e3b19ca3048f", - "aad": "", - "msg": "a870f1117a70140c29514f4abb8fcbbe486ed8d08e2097208c0a0b3f6ef2c72eaa437427901f3b057a28d397c0d054c84c9f", - "ct": "d875f978e6ff3ed15d759436d99d4d58dd3d40a3dd7c5e0511f7d2ff5368a4c2bb119e439b304338224c5a3fb86617889b24", - "tag": "facdf98c8b6cdd783b6c5f454bc27dbe", - "result": "valid" - }, - { - "tcId": 64, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dde740dc27ec982fec68b8042cafe847", - "iv": "20d91707df8bc593e2d4283f189fcfe7", - "aad": "", - "msg": "c7aa952ff738b8fdce835f75430dd86e9f017962d7bc5049e9dab067ac2528d599e8ed5eb14e04c7f798b038343159e66bad92", - "ct": "31583f1f2418df77df7cdb58c5dcf6aabcaf7cac015264b917bf45f4c8e0ea35ed0c13b098831a435197bee3e361c9242f005a", - "tag": "c2bd98e1680cf12b252a54967095e026", - "result": "valid" - }, - { - "tcId": 65, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3bce9c9dae6b322a853774601790adbd", - "iv": "3da1decbe1de6e8686318f683dcba29c", - "aad": "", - "msg": "cd8d816250531cd7968bf2e155e32ab3c8996d8e7ea84fa8232a9c9cf4220135a6a07d1e99a6336ebad526b06ae7309b81916448", - "ct": "be678905f5c0c21e767c623c465cf2085788aa0cf76effa9bd2450d44be280ea84583747aa6146b00b1d081877b8e93e89c0636f", - "tag": "ab09fb538ff36b9ad59e5b9b966ff44c", - "result": "valid" - }, - { - "tcId": 66, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "fdd068e27c10e67886bfa03013dff46d", - "iv": "b46b6c54788f92578146c4b812deafcd", - "aad": "", - "msg": "43768af71864a0b98dfd8cfc826c9c0b383094b2a435c2d6cf2063d203e86546704f66102fe4e878713d3035557cad9d66ad9f2453", - "ct": "38a45528b8b164edbea8c3b3b4abe98e3d8bed2b573bd943bd1f4fb4a172423eede60d37be1a9f80d290ad0b131bec56ffcefa8dbc", - "tag": "f7b2060882909f513bb21020cfe50dab", - "result": "valid" - }, - { - "tcId": 67, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5e8ebc6d0a1712bd2730ae01852bd6cc", - "iv": "14be886cfe2b6093120e777003cc8087", - "aad": "", - "msg": "20dfc079948034cb0ed1f6a3a0b3a6d8d65b528978a7eed8450a615cd8c475e77c6b8eb45365adcead5d11719a0606849ce34adb7744", - "ct": "6eb2a78d42b75e78c5eb7bc759fb8e2a3282974e521ad30af60b361b8494657e88ebd3c6158f41ba756acdb433a19ce26b73ee12bca4", - "tag": "ab5ed08014faed8f4801e910e8dcd1c4", - "result": "valid" - }, - { - "tcId": 68, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2143939b78b3f537d9cc1dcc22050ded", - "iv": "6104dc246076ecfb9fee99d9e5726dde", - "aad": "", - "msg": "7ccf29ca9382e6869114b218a0467d2a022383918b1280b0645f64d29878c83baf7fa7ee80373e80bc2272df01bd95f39f3de3b443d802", - "ct": "b93dfca2338aef8b0d9bdb6dcd7c365955bfaae095f5f58f38b8ce563266596e1767e1aa24267afa697fe4b04075bdca8b5bf643ba2d40", - "tag": "e5f44fbf3c99dd5ca29694d93f17206e", - "result": "valid" - }, - { - "tcId": 69, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "90161304f8714ed837f78c9ecf497c02", - "iv": "3f09199be74d824386840d91614d7109", - "aad": "", - "msg": "e0fae24d74f2937b9802b0c653de04c8c765d4c4167550839e3b60ef1de1de5a58d7708d55ab45e7b8f860e36532906df9c35e8835249ff0", - "ct": "5e71f0648641be385f6d168bd6f7b1c7dadf5dac815eb7594d8651745b0ec4bbfd5a1a78b68d9a7efa55714773d0d5888cabcc4a7665799d", - "tag": "ba5b648c2b692fd175a78202928fc576", - "result": "valid" - }, - { - "tcId": 70, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8a53e4da3c4b9d3027aa943139091e00", - "iv": "98043eaf22cfc3b18ac5dbf94715d0a4", - "aad": "", - "msg": "d86600289d30ba15d805e8fc3a464ea75112cfa119c084c9bd3973121ca349361c9c760644f6ee7cc228ea135d3b2cf8ab1dd1711b98513e35", - "ct": "c0aaaf0ac45c47a4fb3e703e5d1fb09768dbb06dc4dba3797befc7e67ac59927f9c6756934fedb55fd30205abd59ace0d5e637ee50e1f22a63", - "tag": "1ea2aa759bda7e28d26f5d495e5b885a", - "result": "valid" - }, - { - "tcId": 71, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "12ee9cf0a2cf67c73c02ecc6f8ce1f4e", - "iv": "e09e0fe6705f14b7190f530bf39918e3", - "aad": "", - "msg": "c0984823a8b27a6622741645b34e30dcdc392b03a5205d70740dbade9f97bf2645b01400a9c62afac974c3389d38040cecd793812334e711aa67", - "ct": "b0b0e129ad8f6635bf976caaa1668af0f3136e654935ea532da478f5b17d61f66b2d638255d953bf4c8eb9b76a1201959f226659a8725c60726c", - "tag": "e7c22b042f4e89f386d4e00dcc53f1cc", - "result": "valid" - }, - { - "tcId": 72, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "695f017b18180dd21308d432079f3f35", - "iv": "16ea1708eb51a7884b15519c31382f13", - "aad": "", - "msg": "afbf777883d39bbaf086dbc53228578f4971004c8a81afea3579df4cfbc1adb069d179785b91d9a5ee9c096239df0a62a5a69520b7c8a981ee800f", - "ct": "303834506ff6746d705d06f1513546ca6c68c3593866643d30538d0d7620311219b1ffd4b26a4f178c76f0b6ecaac53c50c58f50883705b4c9bc5a", - "tag": "4ab881110d9c1bcc84d4b091b47b7a92", - "result": "valid" - }, - { - "tcId": 73, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a2d1169efbb01ac98fb83ffc88c752f9", - "iv": "b6e5a7a4db59bc36633631b5c1ed6479", - "aad": "", - "msg": "dba22d711a500cb6e177cf339e532e156b59c6e2f05790ae61f53dd5db0fc6c2ce0ff21368450f9472ac2b14d9c7768f1706628f7f871c3e74cd84ac", - "ct": "3b9a1c355a8ee1db8ff9d93470e91ea76be92067cf399c3274f377c45b2936654866fec4bf516e65d65a8852e3a4eb356618c60443a2cdae3345cabc", - "tag": "b32b2a535121424c5f29f5b62aa103d1", - "result": "valid" - }, - { - "tcId": 74, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "eecc6bd496cbb94f53d13af2ba4c5d4e", - "iv": "43008e357f37eb520992ae43056d83cb", - "aad": "", - "msg": "56fc5342d77d37322801f23c5ea6d3963bfd747c306a7ab92c6db33330c727f55deaace892f50a6041175cc84d0ca779203d3d170e3d1c41145906d3c1", - "ct": "1e10de26e25dabb715fbdc8c9a513395b0bb27da9a986eb600048fff249aa9f9082fb48b6907afa74d506f03900a3e2b860de3af7110267dbc94c15504", - "tag": "c53c520e1f414aa1b936728586407ec8", - "result": "valid" - }, - { - "tcId": 75, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "28953514558f9317a8cfad8b72ca0188", - "iv": "c73f51c9568d8ab7421e3613db4d7b2e", - "aad": "", - "msg": "3cd9fd46af66dd2f38dcf42ecc9d35909946f55ff41cbcdcd0313bfabc2f32b2ec628db5bb16b98fa68cb81dbb80409a565e82ed610fd7a176bae40ce715", - "ct": "e92a3fe2a4b2a7809b43085e8cd8ccb2494a7d193b2c05e7987a5ee7725cdc69bc74da8bb6d0a7c1b787b029394fb1122febe77fba4914c638d1867309b2", - "tag": "3178b3f9fb5c9b7158debcd989234452", - "result": "valid" - }, - { - "tcId": 76, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "986dd9cd1f7e838af1a3bb7761c96d0d", - "iv": "001c59151ccb4ea3a4794c1ef5e08388", - "aad": "", - "msg": "7316f39c32aa32993115185c8062c2ec4a6b252cc26794512e0f9dede17b23f696e5781e69d136a40a1e5c9ab462774be9b025c257b27e8b2b1b7f5fc96666", - "ct": "942ed898837e4adce7f48f13410e5520e16857faaaf24989f840ff74bc91d65ffa0a6dccf51f8216e857e2ebd340e600a51d181f3d5e4102125e4c009a575a", - "tag": "34a7c5c6aae660b1d0c3cfb51cee1bf1", - "result": "valid" - }, - { - "tcId": 77, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8b114fdaca9b993f089d432dff666430", - "iv": "3f182be6dd2f78b5f2138ce68e3a945d", - "aad": "", - "msg": "ef7e9ab3b4f11942fab3417cfae5e75d5055724be67ecb9cf37f57796f594b6e2e892bc23bdf888df2955d7312ef9b76b8f22e54b5ec205cc7dc92084eeebfa3", - "ct": "fff3561c29607c790d7ce1c953ce1691f40b8109256f334bebd505f7e2cccab0e6de08a514a9580aa5b932f637cc6b4900670389532eb9e588084567110fcc1c", - "tag": "e459cb52e3599ac9970b001fecc5d04b", - "result": "valid" - }, - { - "tcId": 78, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d2bb6182da60517719aa02acd533c820", - "iv": "5765ffb9925a221a94af5410de84b404", - "aad": "", - "msg": "89ef0616d929477a504fc3c8ae6f3568cf319520c1a8338324f7d177a67fbf2e849e5e504cf28a149b46dd6659031e7825f10ef703fd757430e75d6cd228bc4c51", - "ct": "a2b3be339d1523e6c5cec890115fbd785b1821dd79ac9f30cb153e0028656d5db56b6b346ebf003a27421163637e3fa5df1b063bec69f37d02a8e4cf2c62fdbf0a", - "tag": "70a3a2acb16def8daf2bb5bfdf4ee419", - "result": "valid" - }, - { - "tcId": 79, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d8f03d4c585dac8f23ab85d35942c2af", - "iv": "b9032e32e17aa032322ddf4bb2135393", - "aad": "", - "msg": "2f41a6a5d3f66a7025c4696d1bc9d24c7cb69ff51f209807e4332c4b63f3b5b5ca7e9b298b3b5015b3e33857491794a18e4d7ea6b243e0d105e0a39683decd29b84f", - "ct": "cc4631c2a0317df274ee8a9d9247f566a0531402f05df88b700534e4cd203b3e70df56ec72a10177d9088beb03ec539720074809f01d2dedb88abb2da9f877040c27", - "tag": "63615a5554f6455b4759182a754902be", - "result": "valid" - }, - { - "tcId": 80, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1c4fcd71d88254d7c17cb44ab523d0e0", - "iv": "b4446656deaaafc9e18520c093bb90df", - "aad": "", - "msg": "1a2c98b7258055af21337f8e3db17eae28c3c04388408bc2a99e2bad6ea1d522f1c0306122823ac5015ef53b6c4eb31e01f1c714121e229709d0e3830d42e55b84c7b7", - "ct": "f0b14bfba9f1b12fa62e95f4ff65061cd0afe54b453111e725787a2a2b3508442377bf2b8f3c7ff86f325019717fa1294733c51d13e42c592f85a6ae1ba1687ab5e9fc", - "tag": "7e24272758c0599559ae734922a295c4", - "result": "valid" - }, - { - "tcId": 81, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "85edc463b6ad1c2dd47897506331689d", - "iv": "f3b83b14f604575cff6c69b54538fb0d", - "aad": "", - "msg": "9a97cb8c2baa315629deef5b44d66e9403013cf18f04c48692133172e9886b1a30ef1ad89c1a02b6d1a2b22d27cb5343dc9e89b59793908495bfd07c2bddc586aeec74bb", - "ct": "fc28a15bb3993254321c4f5144e99db53e0d9bc59a72b2f9a69b321b77f00a98b3daedfc9dad3e55567a46cea5cee4884cee6718813730dadfc6584cf6abf9c6a706da44", - "tag": "1c98e61268a64d2410ad6a6972592890", - "result": "valid" - }, - { - "tcId": 82, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "57ddb8726ffee43db6463929b78374f0", - "iv": "98288de2921a9849ab07ca7753c4153b", - "aad": "", - "msg": "6474fa310aeedd8de69f7cde01ee23bcb2242d617d839108516f38d79865507a799e56f42fa8ccc631ee6212212e0b08026752ade601a26a73759eb4e86a9184b38628864f", - "ct": "5367e24c506267f3e88e6820d15b01bda5eeb2995289b78a973ea6804f262d6cc7e8b6462ffc3aa94af024d426a622d5d1d5310aba3a57aed30c2cca1263cd2c0259cc73ba", - "tag": "be04a6be5b94c3a9ffdc70a8ccb32a78", - "result": "valid" - }, - { - "tcId": 83, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cc38645e5f5990cf4a4861dfb2719dac", - "iv": "4b0c4cbee30d2d394f33b253d764f727", - "aad": "", - "msg": "c8c3d5c17bc7983ad477011a19b5a1309a205526042cd79f870549155e890ded859a2dec74a0c2fff90be568b67e1ea31de268d179a17ed1c10114b8d5756475443310e000c1", - "ct": "35be69edeaa141f734f7dbf169b7c5cfd14e9cfabf2f241cd33e73b8560429b7056a358e5840ab12d3e0bc360fd25c21afc2d19d03c6e3387f7d70ec104e8d7988ceb9f426b0", - "tag": "03a60ea98126171ccb6b2c2e77bdffb4", - "result": "valid" - }, - { - "tcId": 84, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b3de061d7089a186288c8f47588bd5c4", - "iv": "d58d799273f2bb4a645eb3bc22a802e2", - "aad": "", - "msg": "acdb89aa23fa59c44668c1961237cec87d2b29fe375356e9dcdd9c7361fb1836cab4906d48745be52d940db5b8f35d3ee04d6409659056a7da014617d5a6fae8273a5eea746148", - "ct": "5720f89f1650497a670aa62788627dd770305bbdb01f979175cf6865b33c9fd8d10068de9b5e1639e25bd845fe6cd7e0f1c676353a0fa1acdcb1094ba329c9d8997d8e1977aaab", - "tag": "dd27268231cf5a443d872abeae0178ab", - "result": "valid" - }, - { - "tcId": 85, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7c4336dfc3547be9761430c07585b7d2", - "iv": "a2b8b1214231dd074651a4156f795093", - "aad": "", - "msg": "03547f8567ef2a7e0f97fb22bca274fa0892256483d47a2608c36008b7680e810496f6060b20557951e6b09b93e862e3d12ab12a23b04301f62a3a55afa4dd59935c18c0b349c0d4", - "ct": "51df6c24b3c042353cefe6baca40b636f82db1a31245fdc245fb215a10aec521c09c155ca7542c843b04636e20ff8d99060d1ed7c2fba0e25a089709d873c09b498bbbd288144834", - "tag": "b1fb86cb41f33b7c7f0af1c1fb53c4d0", - "result": "valid" - }, - { - "tcId": 86, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "040de6a98f84ab4637fb9387f5ff7d82", - "iv": "4b895b0649e002a5d0bc7c63d85d2388", - "aad": "", - "msg": "710c952a5c6b3ce590bbcfc8a0689a08f7760792e694b010b3072492e6d2d359cbfde9bf679530b0475e82c0d1ccfd8b81a0c0b83a288a0ccee55d167ce4642bc192dbed13e1f1e5b8", - "ct": "618acb0ea875346f13d591ed21b135a8ad45d5a46c3fc914b8c7c36c88c1ae5193a12dc243178eb5246ce2493afb3e2e6aeb6f2e2c451f9e842861355e8b7cef3cfaf4f5b84b907922", - "tag": "8525d22910af3f9dbe2a75966daa2472", - "result": "valid" - }, - { - "tcId": 87, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4ed468acbbd139f79face4c2bf124191", - "iv": "f69042a70a8725667ee897acf86d4e17", - "aad": "", - "msg": "701346160a0468c3c94970b45c16b455bebd4725127d6776cd46bcdf4452932c46fa54998747168c0c127225d2dbff35657cb31e2938dca53d3a0733cb44a8947cc731ccd064a079f129", - "ct": "7d11bcfffa87b22c985bfdbca7617b27108ccd1d56e8464f0f6cec7959a94a315e242aa59835ad2b06a1655fd1bc6dc81e42d1738b70db93ea2a9d1d7b728150239cd999da217a3f0dbc", - "tag": "059419e114f30f49da7c3a0e94f70ab3", - "result": "valid" - }, - { - "tcId": 88, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "880798e256942aa0158ae1645bcebf72", - "iv": "d490ac01ada1da7513d244d09723f85e", - "aad": "", - "msg": "3cbd6dd2c8277e4c4588182494177154a4d9b66f411b59ff6987e89683dc0e18bb9156dfc5a81a70b56ff9d42ff7e83be6721eb7285979240b0f5d7651c75997c39e193844b97750eadfe5", - "ct": "9cbaa6d7021ee4e38905a42057f620f9c246cce2a5fb1817b0a4062ca0b28820db4eb4e3e040accc6f8ffa82cf4ad01692f8da63a0e0c6a413001c6c3cc4dbcbd14e337a2c15ef0924b681", - "tag": "c0003afc176a42be682632999d8367d4", - "result": "valid" - }, - { - "tcId": 89, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dc406564f80a1243705ccdb2e477d617", - "iv": "6ab46a8e69cdfe5951724fdca06a5aef", - "aad": "", - "msg": "267498a93a87c66f1bb483aeb021087e7457788c8ae1eff1fa4ca4f55eccf0797525a8cbeb7b0e3dceed43f111e7e370793f5d5c8836e349b77b81477b76ce53778c02c80d08362dfa8732b3", - "ct": "3364669c9f18771dad46456681d2bb48cdb1dde4f703eac056060c8305475e97269f4c3d42fcd3f12d323426fdb72b9f4506c44fb9c70935b27fdbbb6fd5c60af7d14c88a79b2863c418e776", - "tag": "8498c240f7e8b5c9a5d8579cd0f34886", - "result": "valid" - }, - { - "tcId": 90, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "861a29d228c948e78912c227d4cf3d96", - "iv": "8f5d0ab0b26e09bc06f7a293e766081b", - "aad": "", - "msg": "f47f05f6d447b41eb998f4c39c198fa37186cb5ef136999f73c457bd20f8ae36c3fd907fb44425548c50088374e47d58b6328acaead4a1f9c4889928fe124b1004cc6ee2b530a17db47700c7cf", - "ct": "1f1f8e466c807d831762af53e7c6d4bcbad66d5d49735258963c9c12ddf4f7a4791e0f27c201d57d5e60036461c9e53672f617c3e56046bf8e967b127f8bac02394d55c657e799e4f2043bb120", - "tag": "9f34aa87257df56ef548ec9dc6055507", - "result": "valid" - }, - { - "tcId": 91, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "58e1a170afc2423d77f24021b589ab50", - "iv": "e07bb4d875ebad30cad1d65bc044cf8b", - "aad": "", - "msg": "55cac05909b5a08f395d899d920aa0e77ccb0344485a0d0d218a1ffa35f3ff418a74464db7e2ed957d8d4c3d5fc2e44511e45dff81dca50d912828e0309cd0f8800ae58ddef3656f8656aa355709", - "ct": "ba817b49936b655b365ab22d1bdb4f53b23779be521c6eb53440aacc0e6918669559f44b062881a27df77e958dc4e4c004280bf6a38995150bb6bda1053b24aaee7c4e78101ee09acf18948255cc", - "tag": "dadc945365f114196f705ac5478cb041", - "result": "valid" - }, - { - "tcId": 92, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "549f11b5918e1005cdb646edb1f8bd5c", - "iv": "b2c1c5a59b34cb2b10d5b3e7fa3b6c8b", - "aad": "", - "msg": "a5950b25d44a14ba664527a55936b7d7956b9fe480925ccb4e19203bd5201fbfec9db3c687dac1bbc6d522ae0faa00b60faed2c407558bf1871f37a569568bdba9efd461ac2f2df5f0cd011c39272a", - "ct": "8114610b56b354e67873895926d52acd32011f58a535c9b8912546db4211465579219f617dc47dce2c5c52903c94d677fc50b28895bb417d19ade4c8ee4e292dccabdd8356227458440958ff941a68", - "tag": "529ef6160dcf200965bd848859e5fbf3", - "result": "valid" - }, - { - "tcId": 93, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e449934d7284697a873a833fa1f5f5b2", - "iv": "cf77467cb579cef8f9f9bdb436ceb08b", - "aad": "", - "msg": "0e49f926c8be28449595414d7d7bed38d7b0ea7db5b6aae08ba410eb1ecd9db908ad0c5706c961edcb058c4e934da830d1d5bd14e023f8076dcb5568229d89049c342cd4b36093f57ef352d66c8f524f", - "ct": "1408764b763a125757fb5770e2eebae5e473cd9fb1eaeb64221bd02c69b2f037a6d5a53f6467bee87caa40605ba12a0d2bc68555a753b1297162363a3567fde3d671b6da90e568764558008cf5a9169c", - "tag": "01387916a8311a2ee7cdb7b76e205fac", - "result": "valid" - }, - { - "tcId": 94, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "91e06781fccad06759c0c9659bb39751", - "iv": "3c63ef6357225713a09c402441ff2d81", - "aad": "", - "msg": "8e4e019be8bb5342ffb867a5423fe370be04abac0c18c1ab129b6220a4bdf7a31354d5c6bd307c2d28a92e96d7eb97ede1540d4f144750b7b46c6d94048e8535de2d99044b286772dccd239a2d7eb4ac24", - "ct": "53ab7c93edaf95246c4679bb1e3dfc0c154f48a01ba852852ce3eb0d088b949532e58396be176964c3b61235f0013048f0117119f28b0d876fd5b0e0c5cbe2bae4173d4d88bba43fe35325689bc63c1bd4", - "tag": "ea0f45aa38e5e378fd27238af361946e", - "result": "valid" - }, - { - "tcId": 95, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b927dd4e9d606f0d700a0997911b5bcd", - "iv": "d3717f718d9391826425131203da61a6", - "aad": "", - "msg": "8984822fa78a3d3b1c182f32ca95b10c58054b35524a09b363d2854f9348ca8df9c8be961419519822ebd6b4e60649aa6ca29d82fc51e25633543d3edabf77e864f623e3cddc9f84143484eaa293586eefbb", - "ct": "a29a7f4e59d0751f149009596ea4dae2fa0fb5edc245b7cc5ca310589092ff2c061d1207848ba4bb78ba0472a9a53b977384b228cc0bf80808e8227fe6cf377b97a0122c5727359a1410f8302db559453433", - "tag": "81deb9b8ab43c91151ae5974aba1f366", - "result": "valid" - }, - { - "tcId": 96, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "08d2df21b74874e9a76adcb4f7490260", - "iv": "d676a0fe925e058ce3bbc1342f1222d5", - "aad": "", - "msg": "cc52257513c9756f7a3b7343115c3cf73888c6fcf689f7808335959b38800a9f4d7134da98c5bcfd60bfc9638c57d74f1f859cb4ef5f8388ea8dccd022d5bd93f7dddbdf1296bce13568cccfc07229162d4667", - "ct": "d779c438c49f6d7cfa155fe08faca96877df3fefe23b55724c43a79e9c699dcd259b7310b9ed39461b9586e4463b8c4c0de05cfbdbaf5669b19825e6c5ef2eda6c717fe6af689f9506d9e961f1f67913cfe3fc", - "tag": "ac1e0f62a7a2df604d54c3b24baa787e", - "result": "valid" - }, - { - "tcId": 97, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9471e16cdd71494fbc1acb98b1142c62", - "iv": "571ab1a0f19ad6bd14700efee7dc21d2", - "aad": "", - "msg": "05354e24807aa943de3ec8bea0531296deb50e0cffd144384f13d9b8eaf79bfaea7530401b229d72d68e63397121e73c17b2b0a5306b734e339c52176bb10ed04b7b6b05a82ed6716f9fd6a5988fc073ab7f1835", - "ct": "8014f84c822dd2a330520295ce4f4670af974ee24c63ed0ed06eb6a3a7cd56b62b3b1893a0929f5df598bc7e8d09528cc50ab13a49dee60935777455939964f09adf207814ceaeb041fc22ce06d4705e79f4feee", - "tag": "799dbf7f645ea2a5420563c8acb40f2d", - "result": "valid" - }, - { - "tcId": 98, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8b9705cc0be81b641a53d779cb1419b4", - "iv": "4a3029db6547b867c5315b9985ded83c", - "aad": "", - "msg": "8e9a6d13b97546985cb83da3a42d7863eb771b4de727182b7453f08bb988fd69e6e5ad2f21640db1243d5c6387481cb531e11bb400d3937a9500cb03f5fd530338a1e68d554cec34552e1327d7e15e860fea3ae6ff", - "ct": "df3e45a65a15e3b910eb7f20cb8a926dc10f3027a6180379359815f12d55602bae4d3b199748c95d9eef1cba3107c837866550766d7ce51f2bb921ab6e679b834f5e6c0666b00514273fc82262963ef072905f6f94", - "tag": "0077ab9dee68093308c98e8bb48af2e3", - "result": "valid" - }, - { - "tcId": 99, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "98e7d7eb0a59421203bd82836a4e8e95", - "iv": "1577264e30d0926338267f560f732636", - "aad": "", - "msg": "b763ed33792956ac89f561ba2c0898acf5c2483ffc7722212630c90313eaf432b98a1ea6c089f997d141ccddbe344bb9c5e5b162ba47ae8acad197d31d65b91788b7e306c89a5afa2994feece770c04018ef4aa5020d", - "ct": "38b9291a7de56fadb4c12454e4b39c5fe95b5e1dbb6677ff7eaed418f152ede79427815e32ea1a612852782eb70a911792876aa12a61fd646b9813965e4c5c56602afd49e362944b849f09393f79bceb20580d474eca", - "tag": "4133c8860cc96dcedd9fd5786b6c5061", - "result": "valid" - }, - { - "tcId": 100, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "72e3caf3f7eb0ec56796fb30036d4a1e", - "iv": "b8d32bd0e35c4d94092c3308ee5304b2", - "aad": "", - "msg": "e259140a10c48db3a84510b140d1ba4dc2b0ff41d549f3a6d841c983db2d1112e22f7299e2366d4ab653f25eb5ab2da285e6c8ae75db1249252d28432afc2b449f9537fccac41bd288eb5cccc5b04c57c54ec1745586a0", - "ct": "f7db7bfb3149eaf67822ab5b228ae00257c298787e29ee40a8c764af58fb200430cf5634b00d2742033dc3e0fb5c5a0ab6092f5bd9c6c7c88e520e316fb13a3cdb8144d24fae7af9e62ad61d77601c4ed4e889704e750a", - "tag": "16364fb26658d9998fca9ee43b852cfe", - "result": "valid" - }, - { - "tcId": 101, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "57f98b28bb5c343ae6649fe5be2a2ac1", - "iv": "d9f1b12ca9df6a99853c4894c1f6be26", - "aad": "", - "msg": "b930d6f9a46ab624699c55938c533c0cee6a71641beb8b2ef3522e1138e6ef852449332c81b63f1615dd81aa9785a8354a24c3f9ca48ad7a342289759512b1cc27b9fc47a0165115c7ea6ac6766e4f46bdc2a89f873746c9", - "ct": "253a99ecc38ab0b1939c66e9ea7178bd524414d49dbb690f6872b147f0e0c99189c6a7caf5c5f9f6592a9c9c8815960e26725e15ecb695632e1e31c957c68db9295c4be092dec86490337aeb8a7fb8a69c95fb6b7470db58", - "tag": "91f0707f8a984506e656ee65198d4a38", - "result": "valid" - }, - { - "tcId": 102, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cd8ae4cfb355fe6ea0921b8e19047ebf", - "iv": "5cfd0bc15a057b238b76ecc2496be735", - "aad": "", - "msg": "afdf87958ea3c2833a01c1da01234bcf9930d48db4d2cbeb4f92438158ae5b309ef71b206478a6d34bc347ebae0bfb2191fe1d65759ff36dc612b591b62c9a9591a820eea0e534fe21299f7d760ffe92b342991437fbea78b0", - "ct": "269fadb6411d492819683d2a707c1e3bc168d56efc53599337f249f29a2db8fc97487ea34bb85162d19097087f5b2c74eef2e8073e0e843a1a8d9f60ae89d3c43f874c1c4594b72baf94659b1f8c6ea754aff5de69249ebced", - "tag": "1c51eb2f59c23aef7fcf357f1e5c841f", - "result": "valid" - }, - { - "tcId": 103, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c1c98e956758c4ef413109817875dbe8", - "iv": "7f36e5786e8abac1e6b6089da897fa47", - "aad": "", - "msg": "ecea78c25edac5bb29eb9095bbe2590d5012a558b78241ce370f7982b5e96a12cb052c9b49c1074270dd79a40355832d876439a7f6e98550f5c2be65628d5d3c18b07dfd77409663bf6cdf398a31bcc01ddbf803dfd98627f4c9", - "ct": "0c444b59f75d31fbc10640b634732ee0eee929d61685a1f19c742cafa920f9aeccc4c10936d2c9d50345e001a747f4a50aebe21eaa9f650696760ec3b344b991f6d8517af346ff54bbbafad952cf980cc4e414cb397e4d71fd54", - "tag": "95ae82ad462b4f3a7d626da1271b2092", - "result": "valid" - }, - { - "tcId": 104, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "fbde035414948abc46893bc51743ea74", - "iv": "47cbd113a2868ebf1e12dff0ab17a235", - "aad": "", - "msg": "84fb4854f33eea6596dbdab8c0f2e1343a10aecdf74bd49ae474734092f2f8a6dbb3033c67fb939406c4470a7cae3a7547fd1a218b303a64d69c8d7c43dd204fddbde40e6c485c8f4a81a1a03c065ca088375a26a343e777f31b34", - "ct": "1b661cd5a23d88f1097d28c243a06782d26a91ca30b6141ad86dd9ed69d2a4003cd0fba9ebaa3ec26513cde125dd357475bf9e8b5590040f70d29d73fa142cbf00849542bc50cbb60948dddb190b93e796fd0d99e3930396f9bc96", - "tag": "8ddfbf7d9c37610b724862e55cf63cb5", - "result": "valid" - }, - { - "tcId": 105, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7683ead7be69fe1c38d00e8629c2d1e3", - "iv": "35d1e14c58ed8f8aac6ac6c0ab7b7f1f", - "aad": "", - "msg": "0f7e74b4d43f9579d14abad8dd1622e340ed6dba8bcc62f2375cae1d0b8d8b6b546d9d6727b080517715e7704975b7a881c0f5fc4a1759f5e2a3501c05f82ad663ca02c6ebbeb77861bd3a829503df0555042c06b95de93554412d85", - "ct": "61abf7e39c120c227333a474dd7fd4c8582a20ae4b9775830d362237c0dabaf939b5f3d147edf9d1b15ef9d57631096703daa6d3bfccc859c4e18f7f4031129548322a99b3011c46f449db7cd90392539e8a473b3611449a31fe1563", - "tag": "dd7859561784cda96d136c5d8d1bd4da", - "result": "valid" - }, - { - "tcId": 106, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8c402182fbfbdaece72a21a90c3e285c", - "iv": "861ce0b088ff9a5c03d4f0f49047904f", - "aad": "", - "msg": "3cb4c64fa2d29e834ecbb7114eb6b6c2a816013c39fc59cc03c7624b1738fd20e9891256f0bdd3ada814846195c343fb6bf2955cabdd3c851ba41fce487bf630557811a1029fbcda48c88a1bd7edee45c8b6e6a16a2cd0d07fc6a56afa", - "ct": "31185a8af7b778b56c8458ffd4d1eb708b1bd2abcaa30721042261c8c1e7b369fe011c2391a68784ce33fcf0fb5da434c54e96e772f12d53a5493b2a40582d1550848b681f4195d77ec594ffc41a04fc50a46cb43935f48f5d60774818", - "tag": "8497fa4c681b02a62146cd1c7bd33085", - "result": "valid" - }, - { - "tcId": 107, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5993653177f78cd6d9a1d20d1597bffc", - "iv": "28b2323fd719ad7fa6a558d4f12ba815", - "aad": "", - "msg": "4847a456d18d98e83ec3321a1ad4c1b2419fc52bd755efc1077899dc35d7366ad5dd8fb04be6fd6e089ce1eabac1abd6149d19a5e7c9eb64ed34e9e057623458946781c5dda5359a88aa18b29b7c259338456c75424471a1031c24b0b96e", - "ct": "cd1559cee992a2095296bbb4fbcf4272a75f8a6f11b98d4ea549b33bcbf48340af70d1b43d440768b5e1d58d86d6fdfa6fc501f540e714025627fb464aaa10c2dda7b9bef5aa17e30ccefaa639ac6ca9529587f5637ee9a03d6357282848", - "tag": "3eed3dc801d3a5193ee471f2b646e108", - "result": "valid" - }, - { - "tcId": 108, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1648b2e6a9c1071f6488703b3f7756a0", - "iv": "f1db5d9d0607254485c984f4f7b0bfee", - "aad": "", - "msg": "ebb737c6017141dc14958da5d669461577c6f5b8cfd57d41effc4ad52c9ff77569e8cb1582fdf1d752fc915c737aeee838241d1363f857ee5fcbd29e10a895f06fb8991ef95614b412973948319a76d762dc70048bc9c576ed897f4a830571", - "ct": "835fa22b05861c583ecd861d9c29a3d7b6685d62abd2c45e85e8058727ca0405c10ad98fa902aa33fe0c74299a7273ac81a9ab1f33211c738d74454c19d6f0a9dbedc7e969075ed9e7779c844d11d210f6d8ebfd7bc6e68cf425f47ffeacee", - "tag": "5943f0ff685ce4c4d04f183814443ae7", - "result": "valid" - }, - { - "tcId": 109, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9050a8e13b12cbf91b93b5c5abb630a1", - "iv": "91c2abad6dbd7576d94a307221bf0b02", - "aad": "", - "msg": "c2b4a1e5ca02c5a6bf013ff69571e281fc8c746c1e46cb6a65f4fd6bdc7ece649101db0ae00ed466ffeef4459dad663f6463a16637a4aafeebc2f32132ac1a9644a81653b895ebc53fd9d7520e50064aae9c56339b295244b4810884665f4c95", - "ct": "d09db800e371747c4395b58dd6a8abf4b08559c0c30a6c700f698872f425a516ff1c1a81db0f7a281d3b9b5348a2aa294e83be06f4cb8e744be5fe5f01db8c0cd4a2135c9e50ed04735678664c11a594ba13178a748131bfb97d8e30cdea34c7", - "tag": "50b50dd94eeb1cba7f15ad4f3216bc60", - "result": "valid" - }, - { - "tcId": 110, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7ce6f1420bbe46d6c1d15a18b34b1f5e", - "iv": "f25bbc79b863e40a027884234b8b6fb2", - "aad": "", - "msg": "3074c76f8ddf943b08cb08163f74d7b99e83aec4ca5bef042f6da9c4e0d7e1ec1f4a11cbbca75210abfeabd6b1ad0a0401b12ae343e7dcece85861e8ec29b2c84e7796b7ff19efcabd1a35966f0b1fbdf97b738006b64d0ab760ba52674a694559", - "ct": "29a94d7a0617d5222608dacc7fb53773e220d60e32024d149620f739d4e25d527f9f14714ee63af7c5132c3b212cb1f0b414eab91bb07f2cef72c242081aa635067beece349d86a4780995c0add83fab9be8c0218904e6c5ac615bebc32459689a", - "tag": "b3bad1ab7c8abc1dbbef23c3ed7d3ed2", - "result": "valid" - }, - { - "tcId": 111, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c9e4434f4411197718f75a62a26a2a1b", - "iv": "2bc6ad92f28a8ed8a652db96804c0942", - "aad": "", - "msg": "640f92fee19e982c9e785b748440d15f60aac9e2bee95c561c45f303232a5e3ea9c61a2723c51e6b8de8ddf31f9a6157e58b48f6b43f9301cc892a03d6234dd0d1ad65c3d5926e2a6e461851ddd50689d8d528566988ca8e747a8701764896b91a0a", - "ct": "f7ad5e108d5966c91c37913958370b0c1aab260d1f923d45b375173805f858de956de4d7acee933d10e94118fc2058fc258e8ba321a6a3b28043ef92d07a4da5b2e9d7228ab4b1bd3a98a85602432700cfc7cc2923483139c5d164dd3aa7d5071b1e", - "tag": "5753b9a6c41d9ff43759a8f8f14b5381", - "result": "valid" - }, - { - "tcId": 112, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "35097af9df8d145db6977df2cb6cec97", - "iv": "9458bb1d1de0fcfb853f8e710e9aad7d", - "aad": "", - "msg": "33db5d62d9dae802232d99ff2dad9b8955d91a46e235b33b8b60ef7ec188958e8a33b13c737cf12d8818de5fe070a1880346f679702d9ef97771d73a2a0bd35eea05ff60eb5751c04808997cb30d91fdecb15f682d5c70882ce51423f0666700c406f2", - "ct": "0340ac423d64d4b9bbd01c35120b1d138c033fc3bff4fc6441824540cf20e730edd374f34e0151df3477e06b668ab0da0762c49b47e5c953e37b7031284b490d1b94053ff699f9e177e1cc320f842f57369f907f89be833f27d4267102a8a8818db273", - "tag": "013184fd9f6c3043324694ff894ddf26", - "result": "valid" - }, - { - "tcId": 113, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dead90d600924ca0a36e9ea1c3f43b6e", - "iv": "74294502b61e288ed4ef4d81b655b522", - "aad": "", - "msg": "e49c523ee08f78adb0a55461b4742be1e7906b47b264eaa91cc913febec64c02d177d028dbbca9603fbfe119be6d50e69b6d687596fbba00cf96d02de2fd7f6c36fc189e84985cbef7be320e059a17cbddf98892a7948fdd5ce96e2c24660b7d80cc7d8f", - "ct": "a85959e96494d817b532a636c0586afc7733c0fd9f38c94e1d4bd1773f2a780064853bdb237705b80cd2eae3778e7533d0683ee4b85bea1624e5ce0b7c2ed75b2d19ffd295bb8d702148f677012ff94922f89bcd10f79b77a3c57eec9b99dfd23e4e5d01", - "tag": "6445e1b6e4b1dfd2dc8c5c78761c75dc", - "result": "valid" - }, - { - "tcId": 114, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d70b0d9a60953cf00b702c96046fcd34", - "iv": "ad8ebe96e3f5d573dbbcceea8de03630", - "aad": "", - "msg": "8066b91418bfffb2bb065bf71669b9ac0f06fa6de924644fa1bc49f8cdfbe38c5b74c4af01b89bca49c82abb4735a56314994dbe78f58ca181b44b55550e409d099d5c3cc515a3bd8d26c053881a97d80322b89e9d46c3bbe9d43ec2f8bec577ecb4180729", - "ct": "52efdc95bad0515a424443e45716f356bb9e32a62a6d7fc7d631052e10f194b1246d9e7c473e2e262ace585d684ab9b4f580d16dc0982e4e6723f6ba309a17526a6ab50fcd468a2c18cc9653b43ea364ac5fbbb7bd41106c1c0063e91c6a5d652a709e9d15", - "tag": "a0c9383ee32ac5192551644b8a4db4fb", - "result": "valid" - }, - { - "tcId": 115, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a63f39c24512185e187ed75277d1cac6", - "iv": "80ebdbc0931973ac14d9b7f44375b926", - "aad": "", - "msg": "465bb4975fbabc62ab0e4129bdd9cfab3d95916b8e7d5404aa2ce8db2423b866a54c04633d1d0a5b5e07d51173964577b396f3f53ea2274b5cb3c1e433b1472f6f5c807aa1946c18a2096bce0f7a84aa7f5277e83fb85ddc9b6c407d04c851bf8a2204bda851", - "ct": "20d22cfd53b9c769f10b6caaf86f0bf8c00e5eea7a6f0de62f7a9b6d3a955832cb9733457c8836b09eb59984d19950e54c853d3cbb4c55be0d2ddd8ff3fb6238a670256f77891953319958612750ccb4ff7a62cd9c1a4c55adafd81f57bb1b2e1f62b8ab9f40", - "tag": "0f5e100a128cee6a11a848801154943d", - "result": "valid" - }, - { - "tcId": 116, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "232f188a8e9f04679df20491cc085713", - "iv": "eee1a5ded7a22a6c87794f56f3d73ad5", - "aad": "", - "msg": "38a6a4e39ed46321c82872488957f862ca843cf57a131fcab18acd37fc03e451b62b718fc52e70030bc913ec07f0a248cdbe748acb7d6db742274018021f9a194bdf496d7220d1c2a4caa08997eafe48d4f803539b9804c1da33e27bf1667f8770a84afe003c36", - "ct": "f5d0a39859419f907d88efd3adaa4475d9ce5ce9b53a272a95acf01b1732692c33adec30740219c699a94c29fa09f4b69186c8156c6290e4073da6b0e5a5f40d4ee8bec3d6d5a2494ac166a9b88cfcab1a52142b4c15ed34d0580af50a4f8aab848d4f62b59327", - "tag": "6dd4c36ad872d48a44db653ccc2c5c1e", - "result": "valid" - }, - { - "tcId": 117, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "63cfe910c5ab2321cbfd6f0e03d49f27", - "iv": "41e2e69e9f73f576ea7cf370c594335d", - "aad": "", - "msg": "61edafdb85d41eb0ce5465a791d78410cea753f30a9ef8a09cb64d68d1cabd02593058d9f192fca250c8a2383a42fb1c5eb359844537556fd1eee888e82b9115e76d31c788235e5cd37575e631cd934cbf49742f235da1b08cb0fc0b2c3a6665b858d2b3703caf9a", - "ct": "ac044b6af032653cb6fd12d3c7e86727e978dbc6181a200105e33b01dde75bf60ec063be1413aa8804f9b1253a9b8310609391e82b1476e6a635c2882fec41a8ae7704f250015ce860a26bac6b6a8ac82aeb930c141cc32ba26f3eb1b4afac6737d86b10a9e56010", - "tag": "5fe6c15d04e4c0ea57ed68a6e242ca16", - "result": "valid" - }, - { - "tcId": 118, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "138d8cf142dad4a18819137ac8d166e5", - "iv": "cb95b0ed433f3d79d66d67b017f21a06", - "aad": "", - "msg": "411d7a959aed9d7ec438d2c5abcd072cd8c9e8ea3d3e28160dbeb8f377d8c0d83ec0c34fc4a4f60b8ba3b6a40284a6c3ed5d662367107d9ad5f0629ffba78cc47b61885232954da54fe3fc0536ae12fec6f8354a6c42cb8631f076a7224a2460e205d451d92cbbb79c", - "ct": "2281c605e2b6e8120e4ff1aab426e25cc19faff1445aefd13d53edba8c1ca752294caa821c3dcdba7a9fc9cc60c957ff4f39bd31262cba096b8893d714efd5d7f092170c7f4821e1cd51d27b26304625875954429792f86d9b203c5491643236f515ae4f9d1dea937f", - "tag": "681ac5a265cce3c2dcaf8c3ad27f0875", - "result": "valid" - }, - { - "tcId": 119, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6cd07a04bbf88e6f2d90ffe3245ad848", - "iv": "f313173416b8479dc250f5d57a273e7b", - "aad": "", - "msg": "e0360819001c3a06a9b9ee5ce3383418d2b4c74d6c21ff01f5b987c6659d83add70212f082fb59be3b9b1c22813baaab1bbc51da3825cd5ab6d96bf0abff1cf1c01d7a94b9fef8db2f86decd31178fa29bedfa3ca2c5e4ecea5232d47b7a6bfc647310b27b8ec05c3b25", - "ct": "27a94944ccef693990cc73443a976d6ead0cc4f919bff2903f3434cf3cd3a445cd24c06ae9df69643ad0b0c4539f29c9f48e3fb659f8e41334abc6adec0ab7b7f18df2de2cbffb99479969b725e665c5c72ece39dece1b10ee1e88b4cb4838e9ae11798bc96ce0a4781e", - "tag": "8218fe4ff584e08c96e5c883db4bf507", - "result": "valid" - }, - { - "tcId": 120, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bb19d184728556d2407531aca999fa41", - "iv": "6894b07b7fc92867cdb56ce0ad6532c8", - "aad": "", - "msg": "97376bc24e3f61040af530f20d12c27d86799a4e300e1e0bb11b176f08dcb6bea98c806b08c1d94e8c6242685c5ee502fbb345e3495d6ea9776843cfe6a46dbb576936f2ba6485345336190d533277b8d888bccb5f37274790d79a047906792e9aabeafcaaa9e487b1c423", - "ct": "80361b65764963d2f70c4dc1710dd50344bf66dee84e2c1ac9f6d1f6c8d83ae4e16b6641d4dce4c625eaad209af58be33f396837a67239a7f1986c3420e4273d7fa019f9cc535ee3da4ea733c9e5783d14c6a81704c13ae6c315f3aa7590a3f67a827613b963bbd8552a41", - "tag": "d5f37323241377d28b4b6725619ee0d0", - "result": "valid" - }, - { - "tcId": 121, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3b05a77cf35b01e0a6b0769d3b37ca9f", - "iv": "59fa649a2e9e387336bc649056891a2a", - "aad": "", - "msg": "669e59418658ec7c569235d73cad9e8f09ec009c9d2cbfee2c5da1733a1dcec42c0ea6acc59fd3429fb5d8bd132198e1d57fe75d3d823c088415a152ff77b22e233a0a10f42494d64f9fdef23f751da9a40cc78ee0ffd795056185a9e7a214d7e660df6c7689f09950396173", - "ct": "3a8e5d69a3d1b6f454e95113afd7e8782fdb2fd085800e694545bee668de06ad1390c3c62e05628e816fefdf401e58702639f14c5236abde5dae5fce36b25a4bd362f5cf6c553dc91d339ba2ceaba9f2a776df17766a42382036af10a539db46e9dde1e628b09138dfafcd0b", - "tag": "43c8fbba2498619954d18657e30551ef", - "result": "valid" - }, - { - "tcId": 122, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4363adf5ed5dd296b854f47d0e31e298", - "iv": "41852318629a3ba19c5261f3c22f0419", - "aad": "", - "msg": "f558314d106f3ae7112a4b576dd636639a3052c468ec28e9b142bcbd56f47119ec04a0d591c6e29dd12b1daa412c80febb31a1032478fca2d8c56c991e45a0b8877bdc9886444af3e683f005ac2e05f8282660d9db9d32bcf7b739a688a3cd42df13cba98f1db5b62ac9120e98", - "ct": "6c36c78efccbe2de363ba74fab49c083d42299769eee456254b063f7582738e3ef8bd471af724e251c1917b0c70cf3ae170e0bd578b2b8657f10aadf295aa003462d7676d0ec2c6e241d56d38091299f6cef2e26e81b0c6920d8fc3f6d86633227dafe5d243e01b5304bc7ce41", - "tag": "acff0159568244f9d4a8e9e376cb37b0", - "result": "valid" - }, - { - "tcId": 123, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4b58f6e6080efeb65a46c94e9a3e014e", - "iv": "342a02bd8bd5578da1b444cb5acad162", - "aad": "", - "msg": "154ef710421610ef238fdfab9c44243c9e75cf8029ebf9d6101d2a5a3d7d593230943a89ddbe890648c9faea399d79295b5bb67027238301fff20d5da38c894341fa936e472132ea792fa5bafebdaf73747a70bb57f9922b5d3246da620e75de2dc6a68b9fa879b2d17831aa9d43", - "ct": "7700f63d4dc1ac62e04af6554a7e07fa01a81f983575e434c1449e784a0322fbd6248375170a00489f969de05a1fc88cdac15ee2fa43d4e3bc38bc0c7692433c0d73ee023216e2bdb257de861cbaf249fe91eb17d4fbf6fcb2fee8683f9a57ecd348eea5bd90c25a04eb2f21a36c", - "tag": "4ccd8480332c414b1ee0b40c492d6417", - "result": "valid" - }, - { - "tcId": 124, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1e631400215ff6dffc9790ef24a85b39", - "iv": "d5ae55bf65ddd5d888a3b67a74ecd52b", - "aad": "", - "msg": "469d07622922bbc39b753f574893ceb5afd7a5fc084986c1932979183613a9989345a2b4e95dfc25b1d8e29ad053ac794764585e1e7330f0b52d3021dd637111bfc40c7b3accea1482b7cac78c917932c3ddb1e09e918a2b4d71cbbea62c6b41f2c3d6750552b8dac7daa2dfafb72d", - "ct": "18f7f65f372c9afb13193ebd9b82765221564be763cfc2fb21f7345c875bd9f95d1fb94d96939b82188b132a84e72e4beb065f2d94dc135399cc762b172d687e3781c7ae18b30203d679acd679d2f3cb324755d0d3f1e933d85d352e25f2a7639b6b0db4cc36593e560b784f124273", - "tag": "c71293963d403375f04109e9718a0d09", - "result": "valid" - }, - { - "tcId": 125, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bdf1871c33da5765a5fbd2a85f32c841", - "iv": "a6e19460df695323c0b3a2076dce7a0e", - "aad": "", - "msg": "1117135689fd3757fd91c4b7ffb76611bc021e242deb4bbaf15df2915b066cad96284ff740dfa518ea3e06b833a4a7b4e6873cb3fa971a7970121b049b0814fd3fa89d46efdd670e435e463b380548cfc505d4d1d1ee9d276efbed4bc77eacd01a4a27b6abe182b1375a085731e3002c", - "ct": "99ad8d37f9e24455e3c6ee5d04a9f7ee2b616f24bce98daaf724e283b9bef156ba9550c4f3cbfed5e8703e0451cb0139d7fef0a4b1c809f3f49d0d3448aaee174d549e8c3a99712912bbf959341846fd080ac587327788b3704dd42a6e3866bedc5d38ec00a3ef7c3d69ea80d5c12757", - "tag": "55d6cda362e77af4af39bf7605df086e", - "result": "valid" - }, - { - "tcId": 126, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ee0eabf7e511d8249bc6c4a60500d13e", - "iv": "38dc6400abc95cf4f9bf79fc22951a78", - "aad": "", - "msg": "fb0d51af03b31cd11286b88d7a6cbb3732a07135cdac01353006273174c82e5dfde4a1fb0d0d274963a970d784331aecf72bd997bb3cdd7fb2d6479327c7725799c43d03c3cc198c266297af8562b68b66050a5d85b99b3fcfd3a41c040bc97f51ccc1d348e5e71296a04f587dcac6cb15", - "ct": "3bc1b4ac275b546f80874fa917a03ae2018ab53ea8e36fa4948436ad6c19fa4cf282570b1f8129d590eeabd92cac1575f5ec5a0a4b54a6297a98bce1cbfd4783a4d94676dcf51b570b15eb0399a2891ac656f22079c6c824625dd98b07523a8f8f4fc10297c8b8daaf00235cba521cc228", - "tag": "e2b4b2236ffcbca1377008973821df48", - "result": "valid" - }, - { - "tcId": 127, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f9c931f85262c4044dcd7c50fd320ba4", - "iv": "22f3db7bb96ffddff45d6dffb8b2fb9e", - "aad": "", - "msg": "32f528672fc81ec169c732944eadffdde9c838c68748bfb5b3511c577f46ef5b8080075357493519aceb0a5e342006f66e2b4092a6a72fb599abb96817acbf1ea5da6e96c857270a643fc2d563031ce714fae0a6112baa2f6937b02428fc50f2cc3dc862c210f4b9545c56fb02bd61ead191", - "ct": "431b52378812016477c0a3ca45a08f221dc9102fd99a63a034f27e2047e86937935e7a92c20c1098b44182d3f9802d620d342bf533c3f3533f9c865ae65e7eae13d7e7ad64e9ac99ee9e29bdc690caa23d1114aebe400cc2130c6f2c1337b204d893cf7efdfbd551af9e7371b16d6bbdacfa", - "tag": "93b7e0d14bff72ef54af5666cc90c5c5", - "result": "valid" - }, - { - "tcId": 128, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3f059c47eff37c1ab82b450157ae3b25", - "iv": "a7bab495be716e4acb7a5f9045d56963", - "aad": "", - "msg": "2eeaa81c36c7b349cef85e02eee5ed6e9234961c7445595c417d132aa0a8e247294e649dd46e472dc17a9fcdd215607f141bc6538a599b2fe0acd60758583e7b44985b439e6df61a780fa5339ff766269e6b755ac1191a362e210581cc44530c068f6bc3c504d08f2cf3f0b9fde2fc6808061a", - "ct": "9a4c7afb38fe68a11b2d387d9214333b945874a31cbc9647ce56ddaaa669a6e1269f271caea9f65a8042e3d9061b04af416c9e21000c6d9bea01a64e1150a5cb32ad2d522cfae39c48c588e16c29aade30c725bc17f311a093a21e132a4f83078a6f5f4396f4877f002290c82976715981cb0f", - "tag": "7d959c92bfe3a40d31e8926906f1b99f", - "result": "valid" - }, - { - "tcId": 129, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "80a57fac0b62a1af61b238d7b00f3d58", - "iv": "af50facab54958ac1bf5744555099d18", - "aad": "", - "msg": "547ed8dab65aca8458ad7abdbf3e12e8bc5011c628060d229c64ab1af2ffc2e5cac35c991ebdba08c54d5faecd69012437ef7cfb7aa38e7a8965b0c9b59a253bdf04ead76fb9f1ae6d4577ad89e87a80338881ae824f411702a6a4eee46885c54934ac49983506fccd952552b5b77e281cc85482", - "ct": "0299ee23999a13d95b387388f36f86b0e1ce5956ce4b115178b086b2f0bad9f7ed2319bc315f46427a927583cba77cecfa56e07a17d103397703c810250ef8828cd1f86eda83ebd620a4fcba0b209d63ec543e394ced97099bc4eb244680099bb0c8ef366938d8de755bf2fc33c384a2b3deea53", - "tag": "070019096c1813ccfa43544c2e462175", - "result": "valid" - }, - { - "tcId": 130, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1b9d4d11a0e3207df9842388b5bb1ecc", - "iv": "81f33f0cc2e17ce6b72f16c509bc9a70", - "aad": "", - "msg": "5bcecd69e93efe0d53ac87f900c858dd9017db9b3e297bb168755e4d9534d16dd4f550f87da0756694988222184081707f552ee530f29d9d3bc3bc3e42497526f986df8005e9f29e9f199545199a6ccdf6ec58c622c7560dd55d742b9d675b53f09ec41820b36debc29687046c3e14b19a77a43336", - "ct": "0aaf7faa4268694c6b5b13d0d3a5c2fbe1e1f7c2fddcc1aac46cd06caaf97fcbecaa91580ed2c00868f198adc5bae3c8be8b39a57b090f393e9c57670c77cd5ab7e33a81bced1716bde42356147bf04d30aff484cf2e09827d2583525d62f20fa4b5ab48f04226be89c7c6c17f82b53e3281c64f8f", - "tag": "1c35fa3217a84a85d4b84186c19666f2", - "result": "valid" - }, - { - "tcId": 131, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e890677ef82147e7859fcba1f95bf9c5", - "iv": "585a47e7689a8f8e49c6d3f8c555c1c5", - "aad": "", - "msg": "742e0fad7f367af0b34ec98ad50e13106fdaa0305937410db5fbc583130a7ec18d814f1e3d068503b291168cad1baad19f7285fee8cd1a646e7a0fb6fe1b6ce907619b31ed66074c84f0b1d97a570bb827ce55714b16e2b71cd5d0f866cce7b256a9e4f52f4faa2ef65f9a044083d129b7964e3f963e", - "ct": "f4d9b5ef5531e94139ec57815f2aa128687b1c4f2019163ef7c164dad9f157f184e8c0dcb1e05025d1e45514069ac9c4085e7152fb34389ffc8709d41b6bd280a5f721d6005a9aa8e3ae893f2354bc9fc62d932740eb45cbee93b7b89e572f176741f4c2913f0dcd9acbab4357c1282685c2ace055e3", - "tag": "a55e22196410a3247f1b9c8e50a147bc", - "result": "valid" - }, - { - "tcId": 132, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dec5110a25a1d41a6248c1009355c129", - "iv": "d5ad334f2ba1823f1bb5632d20ed7804", - "aad": "", - "msg": "ec4480fd145a811c56aa1d70c4166e60403d71d65098253a53dde9a939b9c286bf2b4d73f5b9e53a8f52cde00fc38e86814b84625150053e3913b57a3a0b59140af580bf596d2456328c33bf68d17876e9e5932d27ab2663ffad703b99da850a9e86f029ed48f87ec6cde0c73e3a2274f0c26d9a7c42c5", - "ct": "ce99ebfbde0f64ddf893e9cafa297f7d4e8317392cd56c3462da08842052360b2957534c906142b061e38bb3481579b1af5ac38f65a79ad288376422a9daee55a6364aedcfae1f3dd6f6c3e0fe1c51c544fbf413cb026cba27ed91100b5793ef8bbbe6cadc542781d36e7eb4cdf32872e219b80e97f712", - "tag": "9c0dcaa9d0db5329a8ffd189e9d6c0c1", - "result": "valid" - }, - { - "tcId": 133, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ce2dae22f2f49b7b8d67b14296853a83", - "iv": "2048bb6955f19e2a87939521bacd07d0", - "aad": "", - "msg": "a2083f4acaf94ce3898c0af93b11e4d514302c6f186709b6ad07d1c62236442fd4dc8c04e462771da407e57ac9f38de83f8e2e089ad8e5e0726b609a1ee03c895fc7ac1a550bd4ae3762250cd8a67d6d4863bc485ef515a5a6103f6192921b37cbe19bff20de4ab4c9eb92eba0a208e00b3f80eb8437b28e", - "ct": "56b7959591a997f93e3a8d33eb3f8977ad5fcc6756f77d876ce500d6c1973fbb2322126871b770a1ac70712f9132bf28d5f7c152758df363a366f4f8203431cffe34afc4bededd09943afdc9ce29441da91a9866284f9aa3660e2768b8d8ce36deafe848d19d92445a9a3e66654e1ce8b59101a01dc40160", - "tag": "36e91eee3c08601961e6d48d10c62d7c", - "result": "valid" - }, - { - "tcId": 134, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "805932b22752fec04579e8734f260804", - "iv": "36e9acb388058b68cf80ce427c50b6bd", - "aad": "", - "msg": "1fc1a55e4725db2f4529a516e3a143d7f882a1f3b5f0d4237b4ee08a9970fd7ad46c5075eb07ca60c49b215f0513829b873212876035034ace8d7fa2009382c6277796de6a007ad90b4576c2400d2e520a61f9ad9f4c21846e65b90cc26b26d4e4fac25327d525134db22e2609c184689c5a131ce1967f5a0b", - "ct": "e905aa18289c79b377ee8538d9b7644eac066a47582cf3290cf0be2f8caf55b71044bcfe88bbc837e2c1384558551c15b82870910db3333a82294495328eb0774b40d3fbafde458e999d324353dde837b3e37d6b33ead906682afc8675af028862fac0e1eb05a6ed342ee05609678aeaa61b8ce7dcfe9342e3", - "tag": "bdeb625ef332e8d4c3a75a80c2b6c84e", - "result": "valid" - }, - { - "tcId": 135, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5a695ea489dd6bf333f17f4d26e75f0e", - "iv": "eeff1a1dbb6c0c6139eed2967391c38f", - "aad": "", - "msg": "c06cd07b9146fb86a8b1d998e701304baf9a3daec2457ea49d3634580b55fc3409dc3cb826df00ed95230268dd61c856e0fe0208c13e37c0bfa620a28da198ffeb3a728cf617ea81e3d314b53f975d5cc3002d130648fcff1ed5f19dc36acaf12d228073e3472b8676787fa060ac7adbf79770b3f9e4838540b4", - "ct": "cb9c4ad26f4059308e0ff9f107ff83155d8b0b94834ab4eb6adfb28d1057a425ecf8604a1db30506dd063387e92dc4e1663d6860608326822a2c08fe045c6ab687d0348373d4bbd1a4e793a9f5e682387a2c1c45782e3a80af69a6bd6010c94465a6d3119194255cb6c182f3c70f910564707d353e7b15a637bd", - "tag": "f307953283ac55d8d5cd6c6d74f61b55", - "result": "valid" - }, - { - "tcId": 136, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4158ebe5bfc45e1d26cfdbaa6ba811fc", - "iv": "e6da53b0be90f1ae368e455ffde6e8bd", - "aad": "", - "msg": "3aa11fc0cb99b8c6d08adb21695327c515193d6713a9324b854b18a0f2bdf2114c5add36bef113f27f21cf91f193a878520b88aaefb84696876e8959ce664b5835e3c5499d6e33eb14387f373272d4140c3375bf880eb91d380ab1d2c19243775ae2f9b47de19f3e1b76831641f8be04cc9a0d5d7f79dc4997ce0f", - "ct": "465607866eaeb9a84bce163c8f09f7654bc4cc069a5c81c768576ae1648994fa60146b8dc351c10dfa20464a8d10ae05e238ba7e166d2a72a205237faa8612973240a5c31b8eb97714b35d6ad40e8ce0864c670ec4e7819b7817e1d5feacb3ccfa8c43e49d50c7e680c2c6dbe869bd16e5d9ebbdba4a8d73d66fa2", - "tag": "fcd320b2162a4184e3e970ae45f03a51", - "result": "valid" - }, - { - "tcId": 137, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "164e1e3a9ae079bcd0af88a13bca6058", - "iv": "ef07fc4394131b158498c7d10980f6af", - "aad": "", - "msg": "da0570a3324ce7579a1ab6377526ffa0ed6469d8d8ff15612627435ac8513d260720d5f810cf122a763b4fe5c168e74a45efc12e42abbabec918db8041e38131952a3a48db662451726348fd2d640ed3863e4366891f7f40769404adc27b6842af8ff5f815484f8ee8e3b4bc70cf26606d015d59e57f77dbefa42951", - "ct": "fbcf5b61d9de645ca9d9203ba051291a437ef05a5b5ee2c349bb27a42c9326052768b0f596fed8212822acd0424a01b10cf2f1529650a1fd40269c854ddfa5e3e21343d51f1d8b9d1324fb22429d636f707e47b7f3f7f2dc4aec3d2b154602c4e8d70ec13691a5c1406b8d40dcfedf2a426bd986d180a78515337c96", - "tag": "a2ff2ab8407b8a78d6e86cf1c99083f9", - "result": "valid" - }, - { - "tcId": 138, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7d67e97ca7533b4578edf133c1149269", - "iv": "3ed5641fe9a3ed21adc952c9786842f5", - "aad": "", - "msg": "e64994359dd4902f33162f1249e23f4d2f26407cb65e84f4cf40b8c55e73be3274cfd75f98db6152fe1841ca7cc6cd13b55d68961b57863ac8decccf099ac7f4b0012129bc562de4d3fbb8d3341c9c85d0679aa0d0d7243f8b78eb159ab1ec9185a9760cfaf1d7aa745134bab356de88f1e15d8b9b238ccedd9e5c3c06", - "ct": "906aa91353629ee544cc943cbf34455b1a26eeec6684b904d6876364e3be022f24a8ff907688873b89e410a5da3a3efbcc7b511a1f2728962c22b6aba1dab570f676e476e1f7eaad491b95917531edff843f94b84dd23f734b0344a606b4e15109bfeb5d4eeb67a6cc2451c26572137c94faf1eac8e825957efb60da91", - "tag": "8fcbd3c4b609e394d91d4173c7d68843", - "result": "valid" - }, - { - "tcId": 139, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "258e3298f09218f5a04f0700cf84f88d", - "iv": "1760acf7a920bd24fb421f38d6ae31da", - "aad": "", - "msg": "7fc88432c5d6fa4eb3359d887eb6abc04f778308d74736ea5e9d29c45ef54f4d0d0e2b65c214bf9eb69f9f78183e1dd88fdce33bdbf8f2a489bb05f2d950ca226ca6bcc2f5df233bbda322d6c5a2303016c89f297eb99202774f7b147ae67d94327faeec04524a871426d84f114ee49cb43bda72f9b35ef7594e26c1b7fc", - "ct": "23e538c9c644e2700ec823dc65d3cd13f8b2f93b0c875f2d85d4f703b51567876288fed0b18c5b48157c4e83cb6d0ccff5ad03ed9b8bd279f8582bb7661765395a69e6ba4e14a5a2c49161803f955e875a9fd23f6566b5815cf737f759cd1e809ec1f473c61ed8e99a83c65f90db8e3ea623fbb7f445e5652cf063271506", - "tag": "c1032ec1fc68dcfab89756de4b545090", - "result": "valid" - }, - { - "tcId": 140, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "63529e93557eaf6b2e011a6e9ae833ad", - "iv": "1eab81b02f8ce0dcb0a86ca3335310c0", - "aad": "", - "msg": "705e454334cb8047cd2900725f59c5f22c79a45af1ac22f1a6222028937e8798efe15503c405a670ede0e317bd7fca1e1ed325a788728222cfe2ad4b0e47caf236fe2d7398fb472de7fd67c87909233d86768ea4fa1c1fee02e4132ec03542e9e64c7448e93a3aeede5e04d1064b7b625949d9998029cf427e6caf64c94ff9", - "ct": "cc976c6f34d9102ac2b8fc462c9a91ebd684ea31f5661b40e5f7ea5b9c7aa45e514340d2295985b0aef87ccd87c1ae8744d9b410b26cbfc571d17a053a490f7894cab4ce768db7aaf654416d66ae704d3489f56cd305d11ab66c57aee0a933c4b9abaee5e44a2ea769f3994d9f0671d277fb1c6e56d5d6f455c530dcf4c72b", - "tag": "401039fad6c85890a05e0568f4db5474", - "result": "valid" - }, - { - "tcId": 141, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "fef019184a4989b1ea4fd506bf647611", - "iv": "892b0b43323a56c2f7f03c7a4cb3d4ac", - "aad": "", - "msg": "3cc482d7e5b5f4d98097bf64ea7600f3fc6c8edaf5fc778212afc728850393d38b290041800a42712647edd21a84b7ed6c5f9e809fbffb7b33856d3a5a1bbb475048298cac86e8a79be4fb1116f322e81331fcc4ea9493098b1a9dc5c8434286d911daffc91ac2e52c2b55ad631f6a8552fcad4dbf1e2053b8699328eb9c1073", - "ct": "2a2dd1712abbc3773564c9f1209f11bd95d024343304a09388c87e7a771c6608a3a90226c84e2ad0cabaca26592e7d346352339665e3bdff267f63006cd415341a38b2bb43f8a6e3ec72297ca3a7ec2d5b59e68fae0d5c184c008661ac50dbc656c239bd3ccdaaf054e36ef4bfb04b18d0811c99e5c03c96ac1cf3e8a73a7ed6", - "tag": "4ae127da925f20856bdb9c2377f571d9", - "result": "valid" - }, - { - "tcId": 142, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a2626441d6f6212eef4f35f7532c2b5a", - "iv": "28ca833b0c4009ddbd6c4a7e84126dcb", - "aad": "", - "msg": "37f4c83672472fe2a82798953a051aa56e1078faf8006b6057092b7f69237b3df69d3a49955b427b12d14d1b2f65796ce0d80f4289c5c685719a326ae20d782138866c902d7f10c36239ea7fb7473b5e78b9d8d86afb40774aaf5ecb0e279ff5cc022a5a190e49c9e37a085188eea5189ea65717372201dbbce5380cbd1de31924", - "ct": "9d29a682ae045852b28e798b002fb6ae04d1ee7c68a47b76bd8a8819f82a03de3dd444a5715071d36df173ff17a395ec7781203c9cbf6baa248f741107f00cd24e3d82c65b628d2da6141bace8eabc8cc459166f8111975f94d643425145638e89fa9ae3e37463b716817e41bb241bb5eed9f7a44cafe2b2015b98c3a3f665d152", - "tag": "d3e2c42d06004b6b7570134ab658105a", - "result": "valid" - }, - { - "tcId": 143, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c5cf0b69e38547c06728d8d5741e6637", - "iv": "1a2dfc75afa25ea3d5cad62b4169fa55", - "aad": "", - "msg": "7b67a77414a5afc35fdc9301694a7bb0f1df4e476f33ad4fa5aaec4a0f29a617eb10802659b6fb08b9e7562bf3fa38661c46983165a78f5f79f229fd51bf4190fd2721136ff753738936730f883f2a8a450ebae12c986bae4a60aab47a2c94313085358451597c7012c8017d8d286e532de634dca8432b8bbdcbe0b9c4acc6c10303", - "ct": "dd374f8c9b1df2d12c56fdf1725e02b4f1c9a21e4471ad626c44026610cc795268d1ed40558e4a2898f28aca7d5727d2bdea14cca227ba6c86912cb2349eb99a1715d4ee139ddfe3dedc30fbf4a37c0daf3482b99ad9e5ab16fc7a2ffa848edc1d8557b4e056cb480859a3a6fcec8f1bcb084afa00b2404594575b4b9b90a6c33d44", - "tag": "38b4ad49bfbfdde1cc42d31f5895a7d4", - "result": "valid" - }, - { - "tcId": 144, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "56f05ee003138b137f6c6556fa4f1a00", - "iv": "7a9fb60783997696f94d710862ec7633", - "aad": "", - "msg": "ba96ca195b95012ec605c00b604d84c1ee121017a95081a83becd82b56378113b96038075892a81aeb6ab8a2e400096e62ee19f90069a5cb46f98245d7c1c9118a11f1a5ffa0d278143abbdd394a1da18649ba9337d4b280670e374d15d0629a35c21bd4d62249f803ff5e843ced8c682aaf068cb6b91709bb4d44aed62d9d35dc6d8b", - "ct": "e66fa8f2313404a672d12a7743bf7b2a18e99e2b63146158a52db020e53c95b1778c9c8fb381cd56d0c0f437cdafdba2cb95dfa4778d0c701d32802c2df53cea1cd6596c15e3f8e83a14a8ae445253666d66f950b79622cc3496522db98c71614737e99f304415ac1160223103edb2348cc64bb4b3a0469034c9231bff2c4b1820bc5a", - "tag": "ba92b845a15274c3e5cb6be136e7e121", - "result": "valid" - }, - { - "tcId": 145, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c59d7b9ea4769d6ccb3b9361a9b89045", - "iv": "6334f06806e34c79a0a5d077a740ac60", - "aad": "", - "msg": "b8932a94f35fe6d036a8e7eecc2a610072d135b56357c100c3803878b8e10c75e869dcba49d3a641af28b6bdc8704ef48cfacec0bd39058a12504dd7e28c5bffe289ae9f796df43b4cfc3fc6da0780235bfada7b51696a5339bedfb3fd5ebab66e8ecb6e35f2fe854ad532877a4224934a776a67357288951922218fdd0f2007839b5665", - "ct": "e3826b0a4adf19a0f26657d4a0723b51b954251853b951573c7e7d2d1e91be72e19bebb04235f92b7fb3d940206d947390b993b4b9378f02944f32d34ff529c887f6390989c38adda01907b19ef72dc01eb097c56ac739796bd047c2e98e001de805cf32245763047a9400047a250b90913bfcf06c14bb028a1cd0f4eeac4f47f2eb7bdb", - "tag": "a12e233e06bf5a4142c61d4d3a995581", - "result": "valid" - }, - { - "tcId": 146, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7d433b23a047f9a703f405431ac0ff71", - "iv": "188899b14697bb885104caf515bced3c", - "aad": "", - "msg": "5ce5062ffa87d40fc4b5f05fb152a4979cbfb9c678e24698272033791bf5a511535264b7d11661ba38f941af4912d7ff52978badf15be0293df184647bc55b52181bac7dbd388c7ba4a8e319d5f7254a2cb63983f0894c234081d4e6e89b871c822f46504eef9add2a349385bfea2454b8a63df9b88cc61621a30261af5ab7c2c37b07a32a", - "ct": "0e6363731f43c93df28f4a67fdbde23a7bf0008dd99d5cb9ad71d9d017af56007567f67ff77efe3fea39a1489a23c143ee8214620ea995b9de6f57f5f699f94cfea038bf5a0e2b1a29afa4357756ac77e038a28d545d71c3c0ee47b3f9625227951c5aef80ee17f291150b711f5a5388bc7f6aac855511a4298bfc22e1dc96332f266877eb", - "tag": "3b03fe42c2925ec4f256bb0bd3e0684e", - "result": "valid" - }, - { - "tcId": 147, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "891e4ea96cc4896711b6c4e2498710d0", - "iv": "f8c159f05a4425fbce9e79c6631b193a", - "aad": "", - "msg": "50a350e82d4fa13eb88b1226dfa87cffe017b353d6d1b25576395478311f11ad5f4a8d349b6f819ad781337ac9b2aeaa7e932b7f736fd7f12c34e8c5cf4dc881945f350015879dae6ad208fae899bf8363e1e4e6d37f859ba399c656934b8ddda54000bc2539bea2e325752ec11710fab1c10362425ed197533796b89eb4abdcedbdb444d672", - "ct": "438878cb79fecd8e0e4379e9035b4b9b1989a1a1dd45b698de8b5c082980fcf18a22353674a1fe7afcae19de9de69c1115f14ecb844d6bc1aa59b279906b215ac69a27360ef059cb45044f654fc78e0e416f84ea6b66e44cbdb7e93fc5f59e3db3048154cf8a154cddcecd420896840f58ff75ec3afe931062f8091eb49ba25073fb16d54e06", - "tag": "505740d9228170ea52a73ebd4e133355", - "result": "valid" - }, - { - "tcId": 148, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "22c1d2b142545593fd04553e34a6569a", - "iv": "520faca923448c320801e1f76e855399", - "aad": "", - "msg": "18a1f3a8d37f864a0595e9d6e84f9b7343e029d17b7a26bb89d975ab17bf7db660e8d879fa31ad198a261fda0dd0f432234410c209c84f6c455b1d5f5e8f12724c564678cbc17abd5dbff4be3c99c3122a1110d6a7c4d1de7c0a3ec7fca2f85bb6ac627095283ec1cd693a8921ecfd4106d68df91010de7b7c051e7bb1d47ec498fcc6f4f9a540", - "ct": "16801fd3af658ea711b17b5da14e84a039138873d7082930338bfdb0a3b826600c2b062a4a32e709c41496bd7417fc5454296ba68ebf2e935e017506947009dfddc5aa90adbd1a129266f342bfdaf2aed9ff784dace222ecf013d39937323d602f90f405b30e520f81fe9e35f5cedee566c32c8f674964068e4bb6449223037a77c84eaa99fd48", - "tag": "ce8ee87c60b99939a5486bdd237876bc", - "result": "valid" - }, - { - "tcId": 149, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e49f67091fa1711a0fa14779a89935e9", - "iv": "d236ac0856ef555975b3296296ddcdf0", - "aad": "", - "msg": "5ee81d6fc2c892a6ff58dda49e5c05f59fc40446f297bb4ef3aa21740ade48da9b49fa4f4b76b7e3f7d84b7ef01f78b1a900fc0595a35a7f7e5de96e76711b9d80e061ef38862e32d843f6ed693fe3cb1b1a461296b7ebca6a7778adce4a7e70dafbc1cc1b39d952fba56513bd1bed3080ed07ce2226dea4a2f0dc512a883c22c89138afcf3507e6", - "ct": "450c558377013fc5430529c7fa410e47e838ace61adc0ab7d17efe9a9fc8e438c7df5317e1bc14a80bbcaa2b8fde5a7fb62bc23678a26e9610f490b26aa04f5dcd7c37b7091b0a63d47b84c17ca4a085df083628fb350f4e856061fd7d623caa3c35c519a69e6815b17fb291a31897f74d7fde7e53e166763ea8f42be1dc064f8ea7ae56bd2037b2", - "tag": "64e5004034699fc503edff00c8033f4d", - "result": "valid" - }, - { - "tcId": 150, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6bb4b9265edcc62cb4554132683764b7", - "iv": "a42c9edb9cceba601ef8f8dfe01bf77d", - "aad": "", - "msg": "4b48f135a5ae903c16b5e760a99ae90282170c12da9b068768d3caa72bca96df085bd8584ee345ae67ca82a499bffcd951496dbda80ef70b6319d3029a6de74a99acacd3fd7aec01de7335e595c09e56f43abe71cf023dde4d15f69148126ae697b5b4a6d839bce01d2680645ecdd65f7bc2543ab61ae314d547ae3d2c612668b552bbe7f97f453484", - "ct": "455d316626c6c04d8e4534237d786238df4b98843041285e10ce9e3daab57efc3ed331375cd6ad350ca6f67e8f0e32917017787c1304358839547ba5c46be5d267afff383e1f4b8c39486dbdfa9da28f0bc257248ca05a344693de165e5faeb8f9903111b7fe20dab41ef2473de758558f5b0224f59c5a2964a8b4a39cb10eb2f296aa103726723cfe", - "tag": "1d12fc018ec9859eef6676b1302ac4d9", - "result": "valid" - }, - { - "tcId": 151, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0d2c409fc604ec2208497c6092bbe67a", - "iv": "6540244bb287d155c32bbfb4f5a4a225", - "aad": "", - "msg": "a5790b128666ed96844e6fbb2d8c6cf1498cd9dc7de5e42375ddc7d9a1b841bb81109daf4dffda3dcee34b5fc78e905e042a357939128ad59c19abd6abe6004300f27d75c5bbc3d3a72553fcfd93f1785300008c5360640d38b3b37f8a046413130c7ff8d7520afb45b32002fe70895bdc83eff0d574c3afdf89ab1b914393e0e04a7359bbfd491fa59c", - "ct": "a4d0a3e7c9053d4c852205b64a5236e09c20d0cab1a9e5f35944a6f120a1d2ca84283189aa0873f90feaab421c4ebbdd666bd49310a63e728b552444dac0b08258a66e5c18543b4b9e7f62f9e6ba3c3965de55ad2f4e737c675a02552f31634cd297fe23485abef37c89a7f77f2800b1d5618abd7b8a8f96b79626a8843815b758b000fff1ad77df93f9", - "tag": "fad48fd0c1468b6caf1af42dcce019d2", - "result": "valid" - }, - { - "tcId": 152, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "43e52a03eb7650182b11532ef9af38c5", - "iv": "98ab8c9c21910d45760d3c63f34e0191", - "aad": "", - "msg": "fe49b7040b86e225789b79d365222251219156ead5f4d9e936f55cb96647f64556ecf8ef8ec4967beed461dbe6ace31f8f62fa43505279da65f7286dea98515d6b3fa04f9fbfb85c4b4db78fa0aa8592e851238fc462cd48c89bc9fb10c20e95ac6008a752f37819f820d568de547fa0d923541a70593c13549d9e80488d57cf12ccaf74a9544300e27c1b", - "ct": "3547a327590ff5fbc00c49e0b875aca6de857e60d86a8093162edd186e1a2b4ef2c723d4de4cd373c3497dc679fc8a45a3fb95988201733ea09207d76943ccbc1da6a244e32738afa265cf2e506c2b15b63e8dcd0ae824acad1b2e5219a9a7b449b4485d5ddd41599b60c41e6c7b90182e751f38f52a5678059c8f737c0246c968283470054b14b676d371", - "tag": "83eef3ef550b0d930f150f7e725e04a6", - "result": "valid" - }, - { - "tcId": 153, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f8d0a4e7c502c217ff7010724c0b7e17", - "iv": "d24a7f8a3657d9ef49f7b79e27b7a5e3", - "aad": "", - "msg": "126d6e7feb1fd4cb16e14a595664802d57261ab4f746c9ef900c6840fdf3061d18f725c54ca055821e438a46e5909256c86df99078dcb249e16863ee555a584e310437cc886923f3b960dcc3e9034f241413aa31d911a4b6ef2f7ad0c6ea331fbafad0f104f1bb8127643f7e32b308e7ac0d6624a089f3deafeb14d340306ba2e46987c63a3f22f484761831", - "ct": "740b5a303402428f949a069f4a04b5832e83c8ea8802dc29b8a552377eb9344ec3d265e075f73fb013abcc5b8f825c22cb29b730e694031d2b7599fb458b656c0f6b66c029a1fbab51f5979ac0d4e040f792590f101d81bebdc2aed8349ce12a3e68006485ea7f7faaeccb1447c6b14f5f1ef59e91122117157886ddfc17327cf19f94ec8f9c385334e6e632", - "tag": "610cf44a0ec69e253167cb262b641692", - "result": "valid" - }, - { - "tcId": 154, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "69926cba7dfa817cdf10e00fa3d5e970", - "iv": "22ec52386ac9dc8674646ddb25dc2cac", - "aad": "", - "msg": "8ea34bf86a3eaf9c02c07c6c3baf3e9696b752c6c70e3b91b03f6373e91c3baf4c29f8f2e2f2dd0fa0fa253caa429f0753f37a9ae2d0753f906fe97dbf7317bf1733afb2c082f36b79c058769406ce8dc2289a6ad28b923c6d7d8129790f8904b8dcddb4039d6eb26f161b6784df3666db2ffd126aa1e41008d5f5ff854eca37eac6c5821d2d8647c541fe5f40", - "ct": "e0417a3642609a5225abc4744ce62a40efad2bc0b8a8e327d68ba26576a9a5f1762d30081cf8579b5c1e3c0e6d855e1bbafe9ab7358817333a8cb5d4849c14a51cd8aabffa26211d2a9a1dd55197ed432353067e170bab4e979356ee5a56c9790ed0ce4625052f0bd97d5fef3db920eca5fe706623112325260bba156078a6b8917932ca4f28b7fc1fe2339906", - "tag": "0662cbd08760597251e2af65fd999bae", - "result": "valid" - }, - { - "tcId": 155, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "19fafcd751e6c010a51d22028ea83998", - "iv": "285188668bc787a7b5e2fad59d221c12", - "aad": "", - "msg": "31c85fe28cf8d908873b39cd311cba063f13baccd945bdf5d7412875b05e25b0b0c5129a820d5478bf06cbd36689fc11d17affe57d16a4198457dc1c3c4a6008d1632babcd41cccb0f5242c7db887de1f6aa8dc7226953585786c76dd1071094000f7cced9a5c4e824e4f102b32e403fea551b5fd83f0ea5b6bf42b9ef38450e6408dc343283f3a22fd424bf8854", - "ct": "826e33162e592dfd01707b910cfa40729e30b18b33d5e238d467a79d9812d53a59d6dfbb984ccc910b92d3f5f3eb6cd4ec2ae1f8676f7752ac184d8ce6b78c2b079b75e5784a77c39fd53a6ecb7fed594453adccd15612b6924bf7954c31b3f26304be7be8627be41d8e5af18b14421e47634fbee59093de4db665d3584ff65b00244d8cb3aab13a087e2b8137a0", - "tag": "921ede19d27b9141e7f70186c551d65a", - "result": "valid" - }, - { - "tcId": 156, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b0aa484633dbdd6154da3cb56a08f2e3", - "iv": "fc6d7cbc7e5712ec4fdb84a42f1da0b7", - "aad": "", - "msg": "62325c9e44a98d9f22d7ff9fa3c2453fc8d37bb600c1d2d9964e08e87f7bb210ec289261dcfa0f529721a5a057687884ccdd17ca86a93face27523682d09be4471935d1bd75e363b71e9b3804eb7f4e0826fe1010de1792acf2316aef56e3a78febf4afd8c19edec1ab99cb744d537721f0429df24333c457a5de4a08e1448bce3f1191568ed5f964835701914753a", - "ct": "71a5e3763bc8dd38c1e509ab451d46376452109924340b4e93dab3835acffdd6250a7fd7ee901836877173fd925fd9576efadbf5cf380bf4963637b322fa9cde1d85f60a27f50e1266ee74e339d82689713677d656fe3b27aed2dae75d9739b33e3443dd5ef04e7f44d3acecc0b0d26214043941ac617a22b9b5310201caf7adf881ea4217d076f7900398b59c4adf", - "tag": "31c7341ca396177d3d06d51b2fce1165", - "result": "valid" - }, - { - "tcId": 157, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5f64adc28c39d3905bcbb960a6de04ac", - "iv": "5fe4f0318e6fed365a6086189be5f172", - "aad": "", - "msg": "1635f0eec0cdb55aa23ba7269e56f8f6b2a04e776376c31d41a3968cac9b93803df0e8222e6a315f42e7ed35decc7dcd91ee6d40369057fba431231061fa6a4f72824294c89cb774bae8ecfa70a31361dc0039393d68a62dff4bd8af89d9a65591d663b99477beb82fd564ffc58a327122312f4e01a046a01f46e1c5a0b1bc6f56115c4d33e175d0b8149b2850090329", - "ct": "5aa0733f0014d676916e7b514811a3761a0402f9970478148541835ad537567f682cea8c221474c9d1092a29694e8ea67fd3bd84cf42905691c2e9f6d4d25b81e08c279650e5756adf1126c492459a1141a3f7fe8c5d026a38cbafdccbd9646aadfac442716a20c9ddafaec2b9449dd1e3d2387438ee37bb6bfd1e6714ede50675297cadcb4b847a33e6d17eef0c18e1", - "tag": "631bb31c95a3457e3d398d13d50b0f05", - "result": "valid" - }, - { - "tcId": 158, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "404ee616fbe2ebc84aaecf0f1ba17984", - "iv": "34470c63b17f650381e102d7e54c9098", - "aad": "", - "msg": "b41e545f7063ec85c5d01ff0755f4b1986a950c0271ee173b2fbcfa6dbc04fc228315fa02783bfa66ad34683df9659b14eded9d6245f37b0e4b5b5e58bfe09f12df661a287ad7048d4252fe246708407168ef3ac43ceab5f15ca2bbb2a8232aa875f956a7dac3593ec1214617b465466c379ca02b53d4f4aac16b86a1a12098c8759176298041aa776c6bd7073b2197383", - "ct": "3c0c7cb20f6642047d38d74cc66adef8234b9d8665a9bb4224b5af6b0c8c067e4ce3b6a7e181800124c60001fe89fb2833b7841afd46b97eb7f778247a6671153591673721ee9088caef5d70f0f9bc957c7f93e5299b07796ec7bc95dc37fbdd14ce75c5dfe52bdd69f6d54af7f7cf608ef0393496093f959b35b3e86711d6d59271e50e6021af7970fee873f61c8e9e89", - "tag": "9b0a4061299a82b4dcec68f3b903d172", - "result": "valid" - }, - { - "tcId": 159, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a189a82b0bb90239902fad403a9b0c93", - "iv": "0c0cbeab9bfc2832bf6e1b50fa6f12f9", - "aad": "", - "msg": "746c72c66314e34fe9a8617b8fc961cb1558c260a89da93b30bc500cc13f84ea127f62ae6bd4d5e8ea36f1f12c72df3bb2b2b3f3e44fe97106bab7893f5530e751f784f7ad80eeab8513c2af9f9a321754420fa263498a1ea7c69100f6206ca962880ee3dd409daf12e368352509a1f90e30c1b5e717428742aa6489dbdd1783f0cd4fe4cd97b061c8faca4a7a58c743eaea", - "ct": "ece766aeae1485bb23317ebed615ca40d3be60b053f046e3f13a67d9240b625b12975bc58da8f6babad8e54f3f2367a4de7ef5de9e83cea0b01642b40980bdcb314bb62f4171bac2fbe3d427bb8a2cca3534e858d1fc51b46daf34cf0fbb7c57ffa8a75091f7400a609eebf2b18019692bd27a11fd836bdec61b77cd24145d2f41cd4cd21f061f82a3d98c60b71dde3c10ed", - "tag": "c8e620904e81ac8e0de69728efe6cc7e", - "result": "valid" - }, - { - "tcId": 160, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0af179f0b2521caac91c2e8751e1ae52", - "iv": "11cc03a851b8f1e51c5093cbda4e5bad", - "aad": "", - "msg": "b237d43690e38aa46cfc328ebc66f707429be4f98a6f245521aac52a19f83d85b1fe89accf0dacd444e004341aa04b9b2bab5d9d6d059a30a727874fe628025a3a733e04cc398d7250e550910e368728c20100d83f099ff1915607171b6e535002ae9a6fd1387a92de8cd0a55126bad5a19ffb679fbb7d0c377a2318201033f25d97128e833ecef4523aafb9a5cdd26f1f2e93", - "ct": "b29e59ed227d20ac02370b8b631d036d3255b0ab10351e85e5c30c531bc8de9f92cc27812369e5b43aa3db8ee9443abe9df2ef79efdf5e943ceb2ebcaf545a5ea64df69a3110c16f9d24c980afa37aa88c65f5c12ccbe23b0504b1922a11358c18c1da9acaf7bf379c05a3b7e28d7bd66138a22063675bad2ca83a7a2abb2dfdf244cf5368ad2093a86cae83a738f350f6d9dc", - "tag": "89544cf77e9d9a0a6757a8518c3f4447", - "result": "valid" - }, - { - "tcId": 161, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "508da51851d355585f175e5d1e2037a2", - "iv": "a1986a871feb0d33c02a245616ce813a", - "aad": "", - "msg": "3cf201cadfb50a968bcd9039c40925d08b43167df62863c8604aace93aafb527af517fd1269a146b4667e86ca121ae0dd272a324d2c6325b2dd3245d65e56fa2a8ff13b6466e47bade61f2fa77119e409740bc2d90deef56636875c2b83ca9f7ab42ad792a42adb84b654178c89f391a1601ddd34cba27634997e10784a8fc1328dfc5ce76923c6ee75b397c39c5752f1e6aa0cc", - "ct": "ab5b3066651225568bae050a13fc165eedd3086c66a18220d12b3237d94595cb29225ff105b2fcaa4d84b59dec411c86b9d01c8de8a21e7fe44ef156a198c3717c2a5160ecba40a5c9e76b64136366e9a9aa190ba74c347beb370e530027fbe704ed6ff3a9257eb5ac2523a06c7ad0e930f750ccc77ef3a68c5d992257e43913ca2102c52c54a2b3f2695c79c072d61ebbd4e2ed", - "tag": "5a400cd397beb904894fca7c9233b1ed", - "result": "valid" - }, - { - "tcId": 162, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "922a03e790d8acdd3f1bbb271cae474e", - "iv": "60173c91e657488fd42ac520e5eb75e8", - "aad": "", - "msg": "81a6394509682c97d680ee07df3ae82d29bbc5147f901ac681a37dfd68bd15a08f59246f3075be7c6f3a1d5749d530ca8656be6a1d4805fe5f35601baab2be32219a5ece2af46568c457a4482c0070c08ea556c15ece9b216493d292490a9510b684e2d62bf9c43c1d9bd2cd59d4a8716ba9032b7af5913ff9cf880804d7a552a5d09d99214d97170c5fe886a4761b4208865b6c22", - "ct": "f96c75ac2243210242cc3a3fc554d04c0d6e7fd7bc3be74c4cc2407ed432ca67fe3a477f5b915dba3ae31ddcade9f5cc4e0de73832bfd23ff28cc8914b4690ee2397c7c3b9d371a153953d99b062fada85c64022bbeb086ca74a61afe727720ea8274e6721110e7fe990c95ac3221cce8c13d9cd895934757700537a6aaa1ff0e744182eb6cb9ca836ceb7e7a346dd5ce29bc1ddd8", - "tag": "06fc1503c411c5c84bb4499e76428dd8", - "result": "valid" - }, - { - "tcId": 163, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "38a2b40a6be1f9fdd212bac418bc277e", - "iv": "dcfd3da1b4b91c2f61183f4adf18d765", - "aad": "", - "msg": "188ff6390d50975c113c826de26fb5adbacd13bb0f7a3a51e8fc3c8d04cfe46929edb6e93d3994f7826d17550151fb784c05d0d7a50d187886dabb5e8c0e2782e2c0f084d76da492fb80ee2c2b05ee6813e48163af98efd6abdfb758ba7c4f8a390ed5c9e15e2907a2e0f115995b0a3fec16b812cb79970d5d228ebc78fdbb59ec1f37f45f47feff110c541cde0aac5c0e641ee9978a", - "ct": "b7145e8accbe22610150c8f6bc4f7cc4ea4d309332f218bbbaffbafbeb5a46f5aec86dcd28442c9acd36d85e2313f0599127756f8d654ca1d491cc10ee583e354ae121b364121d7b36fa4cdf7ec1050c2a63eb9886d9af56b16289617d3b91ac9eac9211753df6b96601c7ab602f49b11ef7c6edcafccd1e06cc46a1908da1b804ec6450beb2ad6efaee4d329539d76f0fe05d11ec21", - "tag": "4891d5ac73d069db68db7c0a885c5f9e", - "result": "valid" - }, - { - "tcId": 164, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "14539516be4f567d1581da29f08586e1", - "iv": "e5bd70136582ec10421c9bbc6ce40bee", - "aad": "", - "msg": "b8483df531dca5f9bdb929754e8fcb8880db88e2cdccc4750f34f30c2942d13cc5006db24b56186bd6e35da1a2f5af4ce7eb09b99249a0181304cbad69feb3ce4ae9e62e1f71fd1b857742120206e481a6aa95050c1bd30ccbba55c2a64349b6e94cca5a00257193fb9a8a0890226473873928f654a8be04e0faf28345a0fdd89085fb9c2c686027bd1f1110a5278d20e2ba01e272f02a", - "ct": "6dad3beb35419e05a9c4b081cf614d8d5f89aba4f33fb8b13d5ea8ca1d8613bdbc386ef5d0ccd073f93a337c749b2b2bc58f76cda7de0ec34fb8db3320c06f6eb98a4b98ef24f7caa8f32e1d183994d3d391454147b588fa1f4889c21627a66db8fee873264a3f872e999341e6de0707a41432f3b0f91a1cd2ad1c7aec0e5ab0659c587bc743133bc9a88bea9ea006ca095e84ba037d61", - "tag": "9476545a51adc040ab313b89f47cae6d", - "result": "valid" - }, - { - "tcId": 165, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "166e5b07c60146e9f77cab18f8e933a4", - "iv": "62157185451f16048b7e2547eb7124cc", - "aad": "", - "msg": "68667e2d0518f842cb0ea99fda4a4f943d3ec09eb85493e7209e5ae796ccfbea44643d836ec89afcba2b08b7c0bf78af7e465e3e243115b788030cb1bdc1f11b07c0487fef8ff43f26add5948d6ff7f96ab0cb96729bf9244c48af8a3c7e19b95573b1fb0e508dceff26465e8c2aa2fe340d2066ee31f330b3821ad0cdd6d971d9f2e5f90782572ec4b4a9e63aaed5ba7ee491ceaa5d9ca3", - "ct": "a23ea2ff335b5878b266d2abeb8d2dda837b2737625e90bbf00832e9b566a51def703338c96a95881608db983bd2590b543a0eacc071f89ad0d612cdcd960b193ed41ac59d606e9b8d1d865cc1a7673f71f6a2370d350866aba87d44e146a46d03aee004815cc8e5137cdeb05330a164dc00af2357b0393fa15c2f1b252eed3c192ffa9832c3d47fbd5d24acb5d6dc72c2b25dd7df4711f4", - "tag": "c393267d0054deb8ad79dc83efdf9452", - "result": "valid" - }, - { - "tcId": 166, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c59ed88345e841e34b9f40549b11b7e9", - "iv": "466f17a437444c978347381024504585", - "aad": "", - "msg": "307c83173d6b2f42f409ee79c168a2b9894bffbd833940d44d2fc07e3291b02d4ed5d0d861dd2f1dd37a5504657e50784e23780ea73fbac588b6a3f9a028963aadf40416767318e03c4d2b38108c1387db495e2a1c8c3b8d11e17854fa6d6e4750837c44a8a1f9c97892cd4b1fbf360234885c7a8ca5c06433c6899c10702c7a10b5a3fa4d7159fbdf4eb7509a0512af0076f455df24d78058", - "ct": "a6c4f4ba0400aa5ee5542b151e01364853642894ed2c4bd17bd30464b7a7dff95a31a62541206dd3c333d4f75913bfac933b3b990a455441f79f634bcefe8c112e813597e2b5f29cd77a774c0b358edd19687e57a5f151283451c3fc064998f051bdd5c3d0976ddc42140c6109ecd0feada27544ccfe4171aa64f8fa5b256c2ccb35749d4787df9f2b3ef33e95eead2dbe06d79eb3c470d9b0", - "tag": "27fff9aba4741d78b8aa2e4016eae7eb", - "result": "valid" - }, - { - "tcId": 167, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "653d448045f8efb7f5d27db51b6c44b6", - "iv": "d0e01fa9a9af0d08c67ce588f8fb99e0", - "aad": "", - "msg": "371e7c2c5078d8064d284a5d459394a5df00f254059ca8df0bdca2a2c70c9bb45bf65782f283eef2f4bf7339544a9bd275554a3731af75f7ff5d72a3803847919533a9302b7f49227890e7696ae72c97ceb5ddca062be928dcaf39a12a4b042765270710623c4f2966620122e225cb1d8f4709ead2d7ebf8733be01e80c1816fa2c65d56ef43810056206e3eaeefc84461fa4408f15574976eec", - "ct": "8d4f64e1eea0895e08d68523ca0da29249f1e82df3a65de630025ff4feca549f7bfe3dd09d85cb8ce19ad46078778352fbd15b7503bdd4852a4e806e5ed5a01fb47597c17c172c325b839a971e77542d7d1c87db5e5e25987a9396e167dc1bd01336ff52ee9e75f102ad4a95e74451f801f05878a99f2f43c2d5ae6d44c61d3a2aec7eaa8d992218413525c13721cae93aec21e9fa24e71a47d1", - "tag": "3378b27da7418bf3d85f71597d9eb06b", - "result": "valid" - }, - { - "tcId": 168, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7ae4a9829f01116378664d76585018bb", - "iv": "c3e4b834057bf254f8cbee0264bb15b2", - "aad": "", - "msg": "056557d9f41aaba479768543671de6293a3f2c0a4e511c784591ab164c0d294212917df3d9a49b85afd9eda44768c2e3b6a6e7e6eaac4269fe4f337ab9db595737381f96d382567d58d2f3d9c71f41cd0bd03f61690ed6796fecd3bf312333f07e572de3c2646a0f4f86772508ebafbb3b2cd548a8d8fb2ea9e79de7cdd80734138376ba579862ae886797c435fb824ef896dc890915785d10dec3", - "ct": "7ce436b9f3e2717e0437dcd2eb7266b5b1bc63c0fba4c76e3133d4dd764214e4c3a0e75f32de791359336058cabf81e3ec1fd605fec2ad8ae96276276b64d262bfdcb918b1864e3405b9dc4aa68fcb62b41b887c1e4e2fe1fc60a7b45af2a05583296259d605bb54a78f607e89588a19e084a5afab5228d40d9807157acc1bd5d4998f16146abf296a1c54a8ffa66d7c0f5955e2bee3437a27fe2b", - "tag": "ca909a3d33b49096adfdb904514d3f37", - "result": "valid" - }, - { - "tcId": 169, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "fe8b4a0660be6594d8cfe497d186c148", - "iv": "e8ab3c846a34f522d1f64717964ad3ed", - "aad": "", - "msg": "be53a7804e0fea98a10d9c2b2f797040ed2d4296de3910d837cb4ad3fed631b1333fefd38af2bd21507542d2b1ba60154678aaa4796e05d140615236970d34a939320255524e2ee57008811cee93cb4ca8cf36dbc2087ccb741e06d9dcba0e7f1b3a8f8217a45fd60a4fcdae8d407f42479f91114951885a731573cd4028e31fa9361b31df59a6937faadad327db14968bc87690653845e3d9bb0e13", - "ct": "3a0795ecbe4edd545677bc98aefa70aa623621fa7288eb32dea392941de34c3f3bec9ee48cf2c67c7e383bf89b91e65655229454787dcde5755594aa6963ee8bd32cb1d6511c97385ff0623ccdd3e0b1fd9395389e5eb7c7fc9eb8f8d6c89a17199a89d51ea1b90f6e5486757528bf79fdfdabf29e8833031c7bc8c171910e74cea7ae6a99eab1fec8a4f9a2800bd99cb70cfa2879ecd3cb7084cec0", - "tag": "fb593883447fe8be68074b2ddba3ea5f", - "result": "valid" - }, - { - "tcId": 170, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4813cc01d6f6bf26af4907b5b38123dd", - "iv": "d61d991652fc08f0b5660653728cce88", - "aad": "", - "msg": "c75e8075e6dd8341cd5212aa3b642d117d7348dd89b0b7d161a2722f3f1d211afd0cb7a927f44fbd90651821dcb8995716f0b698b6ccb5607eac27a57a3a18268240f6294a165c4090cf890474a27db248dd7841427b34012d2882e8eb9234cd9b38fa77fa1f1f7b982e049b415b2940d0840fb32f9950df6dff4b1c185fc1a3d70de016a5d7c56bb474aaa72c3de714dc20134cf5f747ecb35abd0c63", - "ct": "aff1392b36ebfc071e31dd9a2470247aeceb5b1ad6c9877dbdb43e128b1615a6ea7f7f74191c2724928c2fd477048e40b084842f7d32b1611df8889d24307c72bc8bd150add48bc1e4d9f4b2f096fe2594247d7db280433db5f7f012e1ebb3f11cd53d556b45f9f9cab1756f066f5338dd449be826dd24f9b2cf651ffa8f3313456215639c93e059ee025c5db8da74f5e54341218b73b61d7ffee9c6a5", - "tag": "a7f0320ded80555c2dcf9893e32ad0fe", - "result": "valid" - }, - { - "tcId": 171, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e1eccd6767cd0ea5784cc59fd1d7c719", - "iv": "09bb468136878b913f3ec2eb995b9da2", - "aad": "", - "msg": "0ba8c352132ede6106b8875b86648b472e056dccc3a14efbf09f51e5d74cda82b25fd3d23c7d5a1da0ede952da86104136c574f6b366156d850fd42423bc4e1cdfa3356403f5260257e445eea297b9ca10f944bcc2e7c24a7d712467ee0e170504f3eb53551bebd292f1b276fa0895fd18308b533f1b28ad5a2f5f69ce34865e37916c08e111651e8602c362543a146b26a94ec940ffabd8bf51ebae8cd0", - "ct": "f4470c7c8d6c7c36b0e77dc88c205c70c10b0cd97c505e7523d36e506de96b6cca962b82db32047f467a78f8ed129c3b83aa4289d1a2aaa43f49b452654e2a3295cce3cc0ed27d4dd04b52a457fba2a49ce857a4ba19d71031a876bec202ae1612166a5393a43ef18aca5772781f650054646522b4ea86de6e4fa1833e4ba76d2bcde9efeffe357260132e908a0ae41afcd1c944b7071e9e26e26a9bdcb2", - "tag": "476a9f56eb27ff6267b581179a9720a9", - "result": "valid" - }, - { - "tcId": 172, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "36bff77c5f60164985357da71950c9b6", - "iv": "a4dde626a39086b9344cdc91809ee20f", - "aad": "", - "msg": "3607d412936b9cca34371a6df983ac5d00063ad3d3658b304fd34bb0afcfe6cf5899aff0d57dcc9c5586fd982130e1c216c6ee672cef5581f88d0e7702ee38d609d9d2cb2329eccb052e7e2930e598551cfe5f0ac4081292f77de20225281c19f57fc2df6f78952d1bf3c65678918c1485f818d1d8d0163f6024b3d1506cbaee2de64606eb7ef8a554288c37b380a7bdfb94a485dbdb89f0df9ac464aceec5", - "ct": "2d79f74f3833f38f46a3ebcc47a2a5b5b3e6badc607e948a1d7744e78032508853bc33a8e1c78864bacdd14ece27f819537b3766cc5dcf059798488e7a397ebc32f158df645a367d36d506f01b2adff74cba4e882afa356d3f4fa118463e50e594aca3ee21889b0406053f8fe8a22cc9970e89e86a48d7c4b6b2695e080e2fc733d3824c42eef4fd007d995c275273ad015712ab6b551709a997225eb14104", - "tag": "62243c489a6717afc41d718a8f6f49ea", - "result": "valid" - }, - { - "tcId": 173, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c3c77988064f172f975d754235c18880", - "iv": "471792afd48e81d36e9fe27afe0a3a59", - "aad": "", - "msg": "c042f1e69a2e9b4d737cff620a81a14cb832024325c35ae2d0ef604768181376b62b371af9fb2fae9efaf7889d3b8f36375bb22e9797008db8cc2f43df28b27eab0b0586d33e9a66967ed6974e87f4f264353614225b2df850f2e3ea7b9ad0760ce5b7fa74a2d754a65b254ca25420b3fad17db1c129ba9c5aed9044873de31266d10736d3f1ea62e4064a6be837975c870c734436a0f0ac2db62fbb312f82db", - "ct": "56dd7822b8ec422e0e0fc34824a5eda676448b8f0fc7f7d908faf446f6d404bdd1c33eedfa799582775d426e9f73cc79339a7610cffa2edd0aceada26fb4812d7c9456d290485086e627eb3ca6d66330bee84c4338bf7f48c17ac5178773e9ab150113c76f36db4bfebf935aa5ef76b0cddcfe93d35565bf8d5e8e6269582ceed2aff849df3ca3d390eda800f5e313cf5b645ded845fea2284dfbb4e68d95a02", - "tag": "d2700a28a7c3294ceabbc42e823bc378", - "result": "valid" - }, - { - "tcId": 174, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5a1a3aedb135d6c56a233df2d203cdd1", - "iv": "4bdd3d3d1b592c2e0161f0717bf9277a", - "aad": "", - "msg": "34af65f7af0a8bd6f7ca6d38029119ded75c99518b1e113a5ff5ce442504ab5b9a12182490c7c87929214141ae5896e53f962522d519194a18f005dd058dbf31866f1193d48cda362abb2507fc52e65862de1249bd2fc121e09bf2f5e71aa6f9d1c8b5865108298a38337fb672fca55e476c5e81191b6b96b677ea921c9bf938c100dc8d11ffcadc850543fa947d59b68cf14978378e8bb3bc646f60c7600d268d", - "ct": "aeacd1f000f0d21b41291ae2119a129ebd5809798a964bb3e6de04cd37a82b89892acaee6901ffaf22e6f8864326d6495cb73b72a38e41bb55b1e4d5bc36affb3b066e78dd592b7d122bc8f424312e8a05c3de549af934f46aacc10dc2dd842b4ec8f5aede2ba5a35d854ac7125961b9f0f369d68f80359bcb9f99616095c35e6eca7f522121370c611dabe2ccb7673aa00dcbf78a8a1646cbd98a653997bd8218", - "tag": "f1951f72652331690f1bc0f5154e0271", - "result": "valid" - }, - { - "tcId": 175, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7dd9472a2b0dbf009460fda3bb31c42b", - "iv": "4a01f94ecaa9c2cdd2a95e71c654ca3d", - "aad": "98", - "msg": "66ed824607c0af5517e64a8c7c9ec5f0", - "ct": "19b18cce5a3044d6d383ef6cfb69384f", - "tag": "dddc84212b7dd5b653cb3d59eef84e5f", - "result": "valid" - }, - { - "tcId": 176, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "91cb7bdbae4f34f9381c2ebbddf5b681", - "iv": "444ff58990ede72dcecf653a549ad8b3", - "aad": "d122", - "msg": "c5dff8cbd23c4df16588093163526642", - "ct": "69f96f07749786f5b078493ecda90a1c", - "tag": "9fb2a4a8359e58d5a196a1267ca4e353", - "result": "valid" - }, - { - "tcId": 177, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "195af1694e7c04b445e229a91e6bea38", - "iv": "f136c8f82bc3eb26353288b5cfcee7c3", - "aad": "0c8a4e", - "msg": "c1a68284adc2bfeebcfbad0f6a8514fb", - "ct": "e13a4bb409ff4ff8ade8f1e67b467c05", - "tag": "51373f078d7b8ffbf2edf2f666a6b525", - "result": "valid" - }, - { - "tcId": 178, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "befa35231915590aa162ac33a43f3c5a", - "iv": "52dc433fd53977c954e1ca68400eea49", - "aad": "105585d6", - "msg": "9a3c0638b916df85c34e005ef97032f0", - "ct": "f7d53409672b34b5b9e825800a5f50a7", - "tag": "be30713b114a7dbdd97e05446be6dd48", - "result": "valid" - }, - { - "tcId": 179, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5931905a536c9301ced3d42343d2e03b", - "iv": "1417c36d5a4dbd7c18952c07327ea1e8", - "aad": "4e585ae122", - "msg": "1083eea229f1789caa9f6cf8f6921018", - "ct": "25974cac6d75c3d7bf9adaaece0dbb37", - "tag": "193def8d8ed964e80eddb4f92ed84acf", - "result": "valid" - }, - { - "tcId": 180, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "778e670bc51e98829c201e9b00b57ad3", - "iv": "d669bec8b88730ba76642910982488c5", - "aad": "f5a1c55fe23f", - "msg": "7887ea39272ad58a3d8143ff8c2796c5", - "ct": "7f15e2ea8977c0f851c366e5c1d3f538", - "tag": "c59d968912796f15259febbb17a10805", - "result": "valid" - }, - { - "tcId": 181, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9e8a633e1afbd452a6f74f162afe105d", - "iv": "3f58883308a42058577cedcb3abb775b", - "aad": "09297dacce6881", - "msg": "5944576988344c8534045fc84287f491", - "ct": "2894e9838184135167b5b7584e6b61d8", - "tag": "d3da0d210aa831369022e7118e868a59", - "result": "valid" - }, - { - "tcId": 182, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "965b757ba5018a8d66edc78e0ceee86b", - "iv": "2e35901ae7d491eecc8838fedd631405", - "aad": "df10d0d212242450", - "msg": "36e57a763958b02cea9d6a676ebce81f", - "ct": "be53ad396ad0e1aae6d4760f15112393", - "tag": "3a1f15cd56536179a27b9222e42aee0a", - "result": "valid" - }, - { - "tcId": 183, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c1de56054f72816ea564f233cf5c56c2", - "iv": "79ce031f556d9289be4c5e565afe0164", - "aad": "cd8f031ccd579fc427", - "msg": "ac0a61bab0affe0373647aae7f434968", - "ct": "701ed3826d7a63028c0eac067f7efc83", - "tag": "29abd307bec8fa8c121a90e9285c260d", - "result": "valid" - }, - { - "tcId": 184, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "668e043988f9fe48e5461ac5422d349c", - "iv": "b09536e391aa5dea48be365872bef74e", - "aad": "9a8c58c0d679ba01a91e", - "msg": "f4c233af75575e2179a1f2d283f4e20d", - "ct": "3d1bbf8a5792c53b67512853780b3a39", - "tag": "e5d86a03aeb80d39dc32ac521ae29fdf", - "result": "valid" - }, - { - "tcId": 185, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8b1dbed800c191c6bf00655e022909e8", - "iv": "fbce48c12f35f5c72ff455550b2ca7d2", - "aad": "cb80076f40ff66fd51033d", - "msg": "ea48e41effc6c250930a40ab6583fc78", - "ct": "60cf30b65843d121b0288421f19666b3", - "tag": "0685864d7a560eb4a847711c26e698bb", - "result": "valid" - }, - { - "tcId": 186, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6b3c7a5cf582dd5210d92f4fb1b3a239", - "iv": "c67cabd5e51a8e1944b56111e69b1495", - "aad": "d7c87bd61e1c75d4766b8267", - "msg": "65e1e3651a3b7ed9c7157a1bc141e35b", - "ct": "87cf3f98af04526728783c941a9c2813", - "tag": "2854fb1950a1e1e060ac298d763d3f31", - "result": "valid" - }, - { - "tcId": 187, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "00c6e45a513efd6c542245cfe619fb18", - "iv": "af93bd4caab0f4e96e9792e44e6000ed", - "aad": "f66833e73cdb6ba75d148b3863", - "msg": "de21eae82801d79c288c96e178f0c337", - "ct": "972ddead2dad67e3ecd7bee0a305c141", - "tag": "106f95053ca580383a3e3da1ea07f832", - "result": "valid" - }, - { - "tcId": 188, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "89712dcd2c8c153da06fb158a76ce9e1", - "iv": "a45d3e06159bfd42107edaab4edfbb4d", - "aad": "2bc36ecaa003690b206a58c4ab7f", - "msg": "e3a911c3ea6948d222d371a0df40f936", - "ct": "850136fa9deb2ad9664c0dc7c49991e2", - "tag": "defee66df4b1c372df4768525601994e", - "result": "valid" - }, - { - "tcId": 189, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "88d02033781c7b4164711a05420f256e", - "iv": "7f2985296315507aa4c0a93d5c12bd77", - "aad": "7c571d2fbb5f62523c0eb338bef9a9", - "msg": "d98adc03d9d582732eb07df23d7b9f74", - "ct": "fc8cfff38cd5afe7d34b0989eef0152b", - "tag": "823b6f8b02fd06a92d910f7e27a45c46", - "result": "valid" - }, - { - "tcId": 190, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "515840cf67d2e40eb65e54a24c72cbf2", - "iv": "bf47afdfd492137a24236bc36797a88e", - "aad": "16843c091d43b0a191d0c73d15601be9", - "msg": "c834588cb6daf9f06dd23519f4be9f56", - "ct": "5e678731a6dd960ace3b1f4b21f72496", - "tag": "170bf78c50c2c0b03fd45c866fba9f82", - "result": "valid" - }, - { - "tcId": 191, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e22be45d6965b881281726b2b0873c37", - "iv": "9db8dae8dc342c564b53319b4ec1eaf1", - "aad": "67fd3141f0ffe6003aab27d37e6e87cd0a", - "msg": "66c092056a11ee53ce62939d71dd93c4", - "ct": "829f0c00f5f8d6a3ad2bf5ee5ee43380", - "tag": "1c79ddf16916077d07b5edb8e1c68b38", - "result": "valid" - }, - { - "tcId": 192, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "fce705654d26e8715b78e942ad946dbd", - "iv": "892c39e55fc53646e66ee3eda8befc0d", - "aad": "45f563bab7b67029654b3340c0cbc5a8f819", - "msg": "56829d00321bb38e3ed07a2eb1751742", - "ct": "d125a8e5fda88afcabcc63142d0ef62b", - "tag": "0e9a40cf91d6a8ca28f23345213725d5", - "result": "valid" - }, - { - "tcId": 193, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5143048ec4d634fc42ac093d9571a0c8", - "iv": "51a139527737913662753b3e96f336c8", - "aad": "a91d04eb6d01bba3daef11cddde443a4c7ba72", - "msg": "ea776659897f0d069dd0bfa74f012c88", - "ct": "4c09b139328bd9eaf665c79852b5e4c2", - "tag": "18dabe1fce2c5b292ea0417e6c4137ae", - "result": "valid" - }, - { - "tcId": 194, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c008017fe70fbb3ef157db0ec07c5671", - "iv": "0d0603a40e74e958ff47c755a4567070", - "aad": "3420acf658e8b0c3e7a17eb9ffab8f423b6ae33a", - "msg": "7c5c92aa44c962ee7420502f9efcd6aa", - "ct": "d4e7794eea7c79ac5e6e098146654c2e", - "tag": "b440027ecec36b076adb224a90ea8c84", - "result": "valid" - }, - { - "tcId": 195, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1509e2fe3f925f894dd1607c7562a110", - "iv": "d096bab0540cacc5a069c1e0c2089d8a", - "aad": "ab6a882efcae9bb0311f6ffb58755c68b23ee1144b", - "msg": "6f59b76567d6d0894e57ed2e3e352d41", - "ct": "dbbe84cf5809a3e512dc65e869805448", - "tag": "9de885eedc1d7088e16a75a5ed5ebd93", - "result": "valid" - }, - { - "tcId": 196, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9de25577edce79dfa6e8bf741dc91de8", - "iv": "33262f00746918054dffd3bca54a132d", - "aad": "327b7f736635e7af21f1a3d27c5a8f42ed3c016f6f67", - "msg": "bb1cb0323fd9a08c8bbd126d85aa9da8", - "ct": "a4722860f36e765eef57c8383a9d7875", - "tag": "accc3f1b53f999d8bf557e14c3095ec1", - "result": "valid" - }, - { - "tcId": 197, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "eb31a2cdb16140ef139a88db076f18b7", - "iv": "f40e319c8e51cbd9e802b2175c10d501", - "aad": "ed56df3ece6742d7d1e2a38eee3d0b191c217441829810", - "msg": "09e3071c9cd50d88a82b4928ae03f2b8", - "ct": "a4b6e0850f35e1709a0e886aa48e6282", - "tag": "cdd1924dd9664761e5c47badccbb8cc9", - "result": "valid" - }, - { - "tcId": 198, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2e4492d444e5b6f4cec8c2d3615ac858", - "iv": "d02bf0763a9fefbf70c33aee1e9da1d6", - "aad": "904d86f133cec15a0c3caf14d7e029c82a07705a23f0d080", - "msg": "9e62d6511b0bda7dd7740b614d97bae0", - "ct": "737c148e773b483edbf312d12dfd4fd6", - "tag": "cd4eef2272fff6915723c939525baf0e", - "result": "valid" - }, - { - "tcId": 199, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "25ebfee8e5b2911362205107d5bc6139", - "iv": "5f0d9ca0f8a169e7a490eb6dc2eef915", - "aad": "76be37b3da1f69a03eed23ca4661429546af348fa13a14d33f", - "msg": "dfb10f4a4f131ef46df611d7fe47a75c", - "ct": "b86ba1a8b2191ab506c0380577433c6f", - "tag": "47d691820c5f40d7dab54354ce034b0d", - "result": "valid" - }, - { - "tcId": 200, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b63023715ee51d2807f43dc1ad65a831", - "iv": "4f7d6a2b2ed45e329f420f582c870899", - "aad": "433540b0dc7de3c7d5910a907a922fbed570978f04de5845249e", - "msg": "eb6333c3f9c75679355cce61328a1430", - "ct": "ca6d93202e3ac2dc682c77e28f5b7442", - "tag": "a594d4238a717600f07ff5f8a8a14189", - "result": "valid" - }, - { - "tcId": 201, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9f3af0b6e2cac759fadbd23be47d6e6b", - "iv": "5f986139ef94cf33e90ee280a7079698", - "aad": "dbcbda6ebce1a1937dccfde11bdffdac12acf63a690b67ebd180c9", - "msg": "21c22c1bc969d95e0af50022b8a601da", - "ct": "0433ed1379e13a0ccb1589408ddcd4f8", - "tag": "c3103a65e3630b4bf88b430ce869f5a0", - "result": "valid" - }, - { - "tcId": 202, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d5b34a05e885700ebe7bcaf0b4825de2", - "iv": "919f9dcd02f0a663a09430e48601e727", - "aad": "af450915c8893eb95409eb3bb4117bdd139cfd231472b17e58db8703", - "msg": "86b7daad0d7edfe12ba89a8ef836bfd3", - "ct": "2d049ad977d86d48902249559e62c0a0", - "tag": "aa77890536d40f82e3d0b9f737b87b9f", - "result": "valid" - }, - { - "tcId": 203, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "da56b40b894202810ae53c062df5a6cf", - "iv": "987425f373ec76ed8a1f7683eca7d7fa", - "aad": "ab53e8e75df72086b372645a8d5828e46230c7683def96f4e9cb48a35b", - "msg": "eef7128d9e03b48825fb781ffdc0a7e5", - "ct": "f66d134ff672556c54977b7b8fe845ad", - "tag": "313c89a8d02eeee71d51eb8f214a0220", - "result": "valid" - }, - { - "tcId": 204, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e7c0a7f1cccbc8a2a4703a7e9c823449", - "iv": "61ea4e83344a5fbc15a8e20492e9c82c", - "aad": "8a2f9a2a85007b51850294ebfbd0911b3fc04e1a949038b78af495d38ec6", - "msg": "c28eefcf958a5ce27b1e2ac37169611e", - "ct": "184327cb369b816421c7e9f3ad92e071", - "tag": "df058d1c98b9dc5072e6a5b67a9a5088", - "result": "valid" - }, - { - "tcId": 205, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2034d6459168fa079732f3357239beeb", - "iv": "9214060b9f2297c27d4ef922a59602f8", - "aad": "8bfffa3c6340f363961340ad71849fe7687645fdc6d0cb46601a2fb35fd8ea", - "msg": "8acfddec70399b327bb7c2dfd5e5dd38", - "ct": "669342a261b27142360cff0d2bf455b3", - "tag": "05a72a9edcfba097a7180a6939a9c266", - "result": "valid" - }, - { - "tcId": 206, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "450d47e57eb7dd0489bc2512bbfbb4c3", - "iv": "8dbead063c3ae733317089a6e2135e76", - "aad": "8475f1341aa4be990686503a1f198a7f6a495109f7f680c092d7353a339bb001", - "msg": "0b9272cd71ed4fb53675883c96acadde", - "ct": "80cf2f7bed187ba0a70bf7b69154d554", - "tag": "020f37c0a5775858877cfe133b86bb3a", - "result": "valid" - }, - { - "tcId": 207, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "444d0510e3ab9047377bbb051d50f259", - "iv": "921a03a53c8201b5335bbfb1dcf1ab98", - "aad": "47cfe4c76dd85664aa34cbe6354620b194d1c54908f1c974600eafde4d0904efb0", - "msg": "9088670a384b30343e73c7c4500fc8ac", - "ct": "877b555e2d4197def8c0718d34bea68a", - "tag": "78d355bcf158010f1e0fed600821614f", - "result": "valid" - }, - { - "tcId": 208, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d1cb3d195ad05e31894797ede04dc38d", - "iv": "67a2f520efdfd19edb2ab1ad0dd80af3", - "aad": "32e91e94521bfe7652939c2ece2f6023744f08f895721d69f531bda91a1313bb82ca", - "msg": "30a04cd53960019c0d187f6445fe1a3b", - "ct": "b9dc226a865fb087a4bda295d7bdab49", - "tag": "62958dddacf9f0af15e7bb03fcaf7b42", - "result": "valid" - }, - { - "tcId": 209, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f939738f734f49abc02bd19acc5479e7", - "iv": "1a5298280eaa28d093fe7bda60222e56", - "aad": "c1cc6f74798cad444e4c3f1a6390daf6604f70b90fd7a5cc7bba76cd5a2ee5a9a38f19", - "msg": "845afc866ab1b7faec255a95a81d49da", - "ct": "abbe8d7b8d375e0f792f99a9c86596c7", - "tag": "d9457f5f359a977532bbfd15e151c05a", - "result": "valid" - }, - { - "tcId": 210, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4e54b3e590ab0465b75509765d88fdb0", - "iv": "28b0aec8c47c494b8f6ed55293a23643", - "aad": "ed5dddd14e654ae8bc41c73a4a4ba4513de9a48d36b544ea64cdf9a730afea19027e0800", - "msg": "5127eca771f8230c71992311498852c9", - "ct": "c6311f8ec057d40947f2717aa29941d7", - "tag": "bb1caab5dfbb6b2cf2dc38f006b37173", - "result": "valid" - }, - { - "tcId": 211, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ae75e4a0c2cc5398964f696f58f56b66", - "iv": "eda9016da1345bac63ca26983faae6e9", - "aad": "3424acee9b726a05c5e953852c6be298e92ca60b589010e93e62f32ca9c26be52bdaac99ff", - "msg": "0d43e3757b466ee72dceabe5738f39d4", - "ct": "4d0a4dcd16c8bbb44e84a37376ab2e92", - "tag": "4a0c8dd6122651addcf683f95936c705", - "result": "valid" - }, - { - "tcId": 212, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "043850e74e5ff412bf607e0b1f793500", - "iv": "26e7885336dc06de228f8262b8002f72", - "aad": "b1b8c5f8734a8f9b96cf6940248ce18d21d9723154bb8a852ee366c8c45ca29ec80f87f226a7", - "msg": "394947f0fec5be6b7b6cd1b02e7d9b5b", - "ct": "20bcf4ce472095d6bac2673308a37af6", - "tag": "ddf9e894347c550180dd67f0e906f1a0", - "result": "valid" - }, - { - "tcId": 213, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "977d26cf5d540a59d5f4589677ce5b40", - "iv": "aa3bc361734b8187d3a17d5880df6bb7", - "aad": "607e107bf9d7da23d6845dba2becb4e3a692864623cdf62df03295515e5b21a44198f687d243cf", - "msg": "5c00d26bbacf08f7516ebaeb4ee502bc", - "ct": "2c0444b8fe4082d63d3841c24245de6e", - "tag": "6245a89b85b2d2752dfb8f3234017c8b", - "result": "valid" - }, - { - "tcId": 214, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6985581cbecfdd2d22afae94ae82db9d", - "iv": "94e661d6c8bdfaaf2bb063d0798fb7b0", - "aad": "5f3ad8a3f2599084d2e30f7aa5e95645edb42dfbcbe472a65eb389ffb14360f5a2aef58145124e2d", - "msg": "a67a33752d287d192acb6da39c29dbf5", - "ct": "ed6cc7dd42b37f1cbfe1865ba62e87f4", - "tag": "93d4a9fd19a244339d72374dd599e99a", - "result": "valid" - }, - { - "tcId": 215, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "47d974a95b63a6cd153f5954699ec0e9", - "iv": "d9dbccbba6b701dbf7718f744258816b", - "aad": "92eeefef1b057356bc189f75bc7b27990ba277198103caaad4eae3c42c9768cf9bf4aba7d56d22f9ae", - "msg": "f0e84ac51fb555ddeb512445e613e29c", - "ct": "3478f1d4ba7dac34d011d5571255448d", - "tag": "1cb35a0dc6a46fcf7ac98705dbe70bc4", - "result": "valid" - }, - { - "tcId": 216, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b3049d090da82a5a521fb4fec294336e", - "iv": "eed4288d6c84298651e4f7c07ae4b644", - "aad": "d7150dbbd9223b92956aa2609c95d62db2bc24252ea8e9952a5e0ab8b930e6ca49b9c24565ffd85e87a7", - "msg": "c3b26e3862f7ee45f2ebd9b1930c8eb7", - "ct": "63309d0b37874f97764127f7f002a5fb", - "tag": "571ff7fad4e42ad4990fb4c678e1f692", - "result": "valid" - }, - { - "tcId": 217, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3d3e035c3ad40e23306c07b541754754", - "iv": "21d14a35bc95780c236f47fec940b964", - "aad": "3ed667e2649ecf584feb8d35a0df43b778832007eda52b2de0b2e44ca7eb1b89bc51325360cafac5afd212", - "msg": "4d69a21f00ed2a44361cf4b2fabec7c1", - "ct": "8605a469dbb528b2f3b7b2875106e00d", - "tag": "8aa4a5cd44ce5df98c57d6fdceb41512", - "result": "valid" - }, - { - "tcId": 218, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cc7a647aaf50112e18f13935f119dfa2", - "iv": "2d6dd42e70aedc920cb38ccb887c9bdb", - "aad": "f7fb88af7712975997f43dc8884b1b89d9c3a9a905976d31400c1765734a822e74aa35c5aa03ace53c70878a", - "msg": "6cb547b7c58b8242d5c95196433dd9cb", - "ct": "ae638e063b309f12e71195dcc66ccaa6", - "tag": "c3619e03b97f3956606f62286e356c90", - "result": "valid" - }, - { - "tcId": 219, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d7bdd80a5a557f2eb7a902a7f6ceb995", - "iv": "953732520bc914728bba7078dc1a7681", - "aad": "26d5a39ace2d2cf146dd53a4c91e30af874e68b1962fe236f1b26d33f1c28fea173fb88e030407df56bcd7c761", - "msg": "863e3548a8bbdb372f06cc745d1b70d8", - "ct": "84989e60a47decd5b30d560d48eeae5e", - "tag": "47698b08490a93b3f4ba05d29d14f2a6", - "result": "valid" - }, - { - "tcId": 220, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1353e275a068f08754c3ac387f3b633d", - "iv": "3a9c98987df8f991cb1c3e86e4ca38b1", - "aad": "d44663ec1e2321dfc76ca989ea6119766c9224708075692f574b434ce087ee154545ff72c3c069b4750db0a00a28", - "msg": "4a10892f5bb5d3e3b092f17ea5d1324c", - "ct": "f11378393002090443a0090af2f68f00", - "tag": "9c2ec88d41f0c4de79185b2b96470069", - "result": "valid" - }, - { - "tcId": 221, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "611bc2ea736bc893ea9b81913d456e3f", - "iv": "8e36e252ea05749e248258bed9cac40c", - "aad": "ff0f995f0b9c94b10bbe8144604352c6969321432e1788f7b30a993ac6774c1a263cfad76466c8e93c5d0fe0d94dac", - "msg": "e60dda555d96f572953734150976d3de", - "ct": "f5836612929f175725c8dc584c1a0caf", - "tag": "8add11c9a632b0f71cfcb7619068a79d", - "result": "valid" - }, - { - "tcId": 222, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3a03ff35900b953e7ac59a2b10f4d3f2", - "iv": "2a0653956455435dc0bc93e488093b74", - "aad": "6ef852d85b738a3d1bdbaa321a471d89589747cdd4be93eabdf6c6ea4abae409b0865db6a764c1e0db6714bc937deb71", - "msg": "b06166715a513ba08489058601497854", - "ct": "5bcfa16997b64c6c0f2dbdb235316788", - "tag": "859a98b19118017d6bbeef66cd74140e", - "result": "valid" - }, - { - "tcId": 223, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f591d42082ab59e170977988330930ad", - "iv": "01e032709faf5a9c75b587fb83a5d888", - "aad": "352d94a886e90306548c6c6c1562cf6e32c6802da3943ba30af8ff2e7f324e1f359511698df674423927c6cc8c49ae1020", - "msg": "7f475a892b57e58f9c8c72b0ba5f353d", - "ct": "ae975926f579fe7024d0fcff01d58995", - "tag": "2bf10dd074e3188df67da6528849c45a", - "result": "valid" - }, - { - "tcId": 224, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "502497a3c34fb634d77702f1b0e4cbf2", - "iv": "cb1516358d76ba393266c5f8b4ee3b83", - "aad": "cabb1bdf4f6d9f954ee83d854963138f8c3633cf93f40d2e9eab4f3f67c90c0186fc3c4e24ab597e39a04ecb2f5df937a1a2", - "msg": "ceff50675fda239b371b14a81a50d548", - "ct": "d06c2fff0b5ac99bb3ff33df80cce659", - "tag": "b83837b425f2c128e036d8471d30d447", - "result": "valid" - }, - { - "tcId": 225, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "83aa622c5ce7fed9568b3db7bf35ceba", - "iv": "64f1826f9111eb50cbdc9df15ebec452", - "aad": "0bea7852b528d32e973ca3c5e93f358a906e4504bcdda3666553e232d87f7c6c0fcef4a27cc3915878265c187d3dd75df6a519", - "msg": "fbfa93b3ab50e09812f4c12ec7f1e3c6", - "ct": "38d43f61fb4c92380e4b09b0ff64ef1e", - "tag": "b7c0489f3880d373bcab02a15a97f368", - "result": "valid" - }, - { - "tcId": 226, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c0a9efc6e961397cc34ddd47f62c695a", - "iv": "f1baaa1ebe2f348689bf6b927a27b3b4", - "aad": "7197bff35a96709e6bdb46e8416ff8cd2c90bd72f0af9deb26d9b71948fd07513063e38d21e6a6e591e82afde4207eebec1ea91e", - "msg": "22bc8e743fe9d0f0e37a9c6b7fa01775", - "ct": "0d54bdec6432dd90160f347f107c1c0c", - "tag": "a69cd1967b5af5d6cef3dbeceb95d878", - "result": "valid" - }, - { - "tcId": 227, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f40381380456ffb37fee400063a6ca21", - "iv": "7f1c73c10ad744615307846eeefe54f0", - "aad": "112f98863a8fd279dc79358b5a7cf8c71e08efcdae094856f8a27ae39f006e01990a49e59658b6e855f07df605286c747b3adf9751", - "msg": "c0f561093d4ec2763b2fa706906959e5", - "ct": "6ec329eb1ba7b135d0efb627d8384093", - "tag": "5d54e6ff4724e74355ff22861431daa5", - "result": "valid" - }, - { - "tcId": 228, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ca152b931b07f73ee9da1972ae979f8d", - "iv": "a620a58240f2ef19963d6792e138ee59", - "aad": "7ee6ca71a003bd490ee2d0be7545c027aa6573c3a6a5c3a8c350cb5c422f2327788e7c9b4095385d99680d29527d9ae8a4e4c287b5aa", - "msg": "689acb4a9f168b4315eb70db689f5e1c", - "ct": "e29c734ccd2f86f69a2d8f217c2203b4", - "tag": "9574d59324e5265bb5f23c191e45aa1c", - "result": "valid" - }, - { - "tcId": 229, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2c3355fd07896fe90f714d9aafba23bf", - "iv": "1cb29f32e523389bcbde40bab138f167", - "aad": "7595fd9ba6a6a194ab0869fbd99abbfe42e7e0b08ef1bea2fe502852534993c6c8390aead34069743b28ac3f620aef6483fbc248545064", - "msg": "8afca9b4a81dad80f6a35ea2e003ca61", - "ct": "74f4c4a1957db6bad767b1eb8dcc0bf5", - "tag": "27ecdb0dc6c7b7303fe71eafba14ed62", - "result": "valid" - }, - { - "tcId": 230, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5e46b622d037ce807545aec250842c6a", - "iv": "9cf4870e44bcf0d9b8181c3773a53512", - "aad": "db8654fe43d61e5a8826b3824a13cbb97decd6b7c733ac50456096a241933d67b7485f177872e67af12329fc0c828eb4c842dba27034ae9b", - "msg": "3dc69445edd5bce1fc39a9c5c396d69a", - "ct": "4dd0f28eb06b3eff6fcb3299e919cc5c", - "tag": "053c54fae61665bff9b2f8f11f7eb679", - "result": "valid" - }, - { - "tcId": 231, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d6c5d08f9eef7c9f733a6684e766c74e", - "iv": "e725adbcbbd260392fc018a602806fc0", - "aad": "3762dfe5963fa87675761cfc6e561dbc07651c3e0dfb3a79fe393d00d504b87a8ce9a2b5a17cb74c5ae0b7a325f493d0a251812d9ee82c1090", - "msg": "9e6b1aabf7e1fcfe1c4731948e8064ed", - "ct": "8aa6f01d311f644eefafd1269d0698b2", - "tag": "68008d69a815c01f5f4521d0e3cccf92", - "result": "valid" - }, - { - "tcId": 232, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "475a03b66b47b5d3a1e49e3ff8aa102b", - "iv": "0ae34be9f1ca049ed3f6a159e2c36dff", - "aad": "b5b101211a8cc1473b2deb5b0ec68d4c76f21ba7072db7e15aa271480436f8d7310f1d9b604fa12ad9658670dc9f0283d5a366064ff7de9d1c85", - "msg": "3bce83256e13c296c12eb0cdeb7d261e", - "ct": "9326215930fce4d2491c5b8574ab27ed", - "tag": "d053b3df32de5f2579e7d84bd401d0df", - "result": "valid" - }, - { - "tcId": 233, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d5479cab4d0cb97752e6a26c7c33e4b7", - "iv": "ca9b1d47de99a7751577eb9e25fb10be", - "aad": "2fc7006f8a552b9c17b738c6ffb77a9d9c7a9907f679217be6ae8c15e3a6948fcb3a986498c26538b0f5c509c1b2fe704d635b3e5961f7e8161dc9", - "msg": "e5f9e1c8d0c1dfe2bd7799daf7356fa3", - "ct": "5d3de913870105ee9db19795019d16f6", - "tag": "17d4d8b64d5f6ca33b9f151c1251ae16", - "result": "valid" - }, - { - "tcId": 234, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b4db0bd6a20b780fb26560be473785f9", - "iv": "ebcf8eeef5aea5344dfa9ac803fe3ee9", - "aad": "95694a3c33485098f3d6b6bf092aed826b7678b72c589cc999350f2b9b5dd4af694d2e4037f465ec1b773848603c623dbb52c20032a9b926c55d80d6", - "msg": "c19571e69736dd02294d5e23336b386f", - "ct": "72731b7090596d8a227e6aeb3b0b8ef5", - "tag": "7e8f2788708b7bd32709711547719439", - "result": "valid" - }, - { - "tcId": 235, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e271fae39ba25da463527566d7975f5d", - "iv": "4d1ba16bad61a362238d8a661c9be927", - "aad": "800977eb36011a6751ed6655199b34f43a8ab66f15dcb3cf4c86edf944efbad9272751793054a2b3924ee078fcfa9351a82dde367b1bc223b84ac6b9d6", - "msg": "49c8f7ff57a7209bffb399ab28d9def9", - "ct": "2e4fbf8ff652fed26f306bbf88a1659c", - "tag": "8a66fb4b916115c0ef6e9b3706bb429a", - "result": "valid" - }, - { - "tcId": 236, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7d7fadd48ac54a63eacfdf6e40786c9b", - "iv": "72781ffb699f5a19788c1add17061231", - "aad": "ea4be024ccbea2768a3e2c24b1788f3c9361b17cbc294588f4f3a2099260c6a6e775ba9b5f375aa811cadbc07d804c9cfc16f037eefc6187782d01d7505f", - "msg": "5f92ae22f6f39288fb18cd760e74894a", - "ct": "eb0285702ba9796a22b178d78202231e", - "tag": "60cf873080c9ab84ce9f46ae17bec148", - "result": "valid" - }, - { - "tcId": 237, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d9a95a96b93c0d97ffa57c3602b32a2d", - "iv": "890524d55ec7156b9f1e902babf9bc18", - "aad": "7451173d7ea1f61c9cdef3c163f997e6b903340112a8886649e8a88e69ddde95f8e2e5150dece77da0df12a3beb08ee60838dc562b8aaef04131f0ebfd06f4", - "msg": "5e5d87f4387af6640238f75fa136d138", - "ct": "f867826bdf3ed6ea54ff023be7a35c56", - "tag": "50316c2a99374fa93f5f975fd4a40109", - "result": "valid" - }, - { - "tcId": 238, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c3d91d8a64cb2a98312a04f294a14eba", - "iv": "261f39a73c4eae7d6bfa0cacf0f52d25", - "aad": "1f9ca14b22d40b4e6dc59ae644b0ee45bcee37d85a85b30398b421f105ec9ce0f5a9875c9bed7de52455b9852fe10c72cc8fe32ad1de37482aa6166425f89880", - "msg": "7562427bb6673f7b59f9becc483021d2", - "ct": "6221c5d098f8ae25e9f20b64b4aea76f", - "tag": "9b086aef863a21fbe3d918edc7c22996", - "result": "valid" - }, - { - "tcId": 239, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "edeec24258ecf653786c766965bb5557", - "iv": "7916159c36e10e37a1aaa0f77f59e51b", - "aad": "d3edc59fb311060bdd4c2114053fc07fde60897d77cc8aba90255d14b573cba9f23fb7bb4b22ffff0af656db8294de764ebf06ae3a2b077051bc1ab900e58cff97", - "msg": "0d5229f0a921d292291142403ca9184a", - "ct": "72ddb3e379c60089d7e619b05bec380e", - "tag": "332165df199bf68010732b4784cde126", - "result": "valid" - }, - { - "tcId": 240, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "af4870026d1b396991aeed5d874e117b", - "iv": "5bd96cebc4486ce7e6b6b15c17481a0d", - "aad": "6d8d5bc6faa148c9941f4d13b7a93ff65824708190f814cffcb1259f6db4212145889daeef42f93a2100ba8d2a1049898fde86ad3a4c80ef34ea0cb6818b9dcc4d0a", - "msg": "bc8c303cd40fab27c2af0370447d9ff5", - "ct": "ac0dd8c1fa8687f48f5a3152da003a1e", - "tag": "2571dfe694527f7e75476c0492290983", - "result": "valid" - }, - { - "tcId": 241, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dd244b2a8f8e769cc6380b39fa2bc974", - "iv": "5f3e088982d6d91155108c97bfdf8620", - "aad": "5d04ec7c30a04c04628c623f8cfd970cc79cadcc9b8f37769342b0bf2cafbe7e129b9b2511003f12605a10b62846c034649f68a32f2ed4706be6286d7678b874e2a178", - "msg": "5dc6813305b816bcbe936c0b2489ca08", - "ct": "c313365d062c74d8468d11c171beccad", - "tag": "67a62ec4a78ff0fbab057459e2a3d5d1", - "result": "valid" - }, - { - "tcId": 242, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ba0eb5748554df392e66f2ae817aa6f3", - "iv": "dfa5d050be166eb3cd28e5d56b5ab011", - "aad": "ce16d9408295a9ce1495b17499e9fc93cdea2756c1d319fcf443a3ef193d00cbf3f6bc43b91d417a741e0300669246acb927c03d7a242d6a61b2ae0f00ee7f09c9b3e18f", - "msg": "6d595c3010da5ecd524831f7da772066", - "ct": "2186a2300a96ab88658a25b245cf4cd0", - "tag": "6f11f87a86b1da88f280c6b1dc60021f", - "result": "valid" - }, - { - "tcId": 243, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "542cb16da96d9fc636f9908a4702567c", - "iv": "591e4737303282989bb7d4da424e71a4", - "aad": "5d2e96f12651a6aba34587578632e6d3c89e5a15ca358ad028db8a305c06b58239f43d14892f725342a43c1b621f059b3eae6bfafe0093f9ff9aa62e25caf3c16b0bf8e242", - "msg": "cc306a3bfc92894a3145e557ee735db8", - "ct": "dc5c351e3be98fabe13671c56d1d22f4", - "tag": "d338e1c23fbcd63baa3c0295dd2741a4", - "result": "valid" - }, - { - "tcId": 244, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "33a343404f08572be0bf6b56a3f5c753", - "iv": "81cec1f1ee5a1dd89cbaf1fa5aaec358", - "aad": "04f2adb5cd535af41c027bbdea2afb6ab7eee9778b5bd29c1163f7d4c59ed6b28cc6d90d05484428de2be432de7053f2c4aefad01332242051b38c33ef9730244703cc26b268", - "msg": "15d7d27d6bca82b3fe381e6d5e63f63d", - "ct": "77579cff8aca482db87b3adb169becb1", - "tag": "46fc568add0b54af10ba55b7cc6b8ae8", - "result": "valid" - }, - { - "tcId": 245, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "72b33d48c6e7af7035b0a1b75dffdc80", - "iv": "4210ff2f8ffe5712c9251ea0ad7458bf", - "aad": "3d5e81dad8023e89c6dbac6971d1ab051de7f0c0b6b632fab7b4ee7c88ba671f807eddcf7b4092a40a5e3061a65fd51cbbdb9b5ef84b24dd7f9b53a28588155e017288cb37549d", - "msg": "a7dd700d95a45046deab620d054c9c6f", - "ct": "38a96e9d6ec83c4f4246fc9c9a853aa8", - "tag": "caede9da78b94833c49d319b869ca478", - "result": "valid" - }, - { - "tcId": 246, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1bf66c244f83a8210ae00377664ac89d", - "iv": "06ae6f548e6f91f551cec5b8a968b2da", - "aad": "234ae1f255548f1238bf16ac7f574316fb03aa06e94019fcb004ff0eb4e71ab878c7334e5eca5795c084915b55fc3427422317d6444280f1d8c7fa08a10dc26feb6fc3418b52d560", - "msg": "97a48767007df785a304ac98725c5d4c", - "ct": "b5493cdf9809fd9adf76dcab723127a6", - "tag": "5a14a8902e00d929f4c792430ef79661", - "result": "valid" - }, - { - "tcId": 247, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "241c376686922058d48355898b41d0e8", - "iv": "69a8e72af6001b11dd70e54936c21b3c", - "aad": "35e7b09005d315f789ecceb4eb5d18770ca7bfc58728d0bbe8d42bba48d2c27cb06c6a2932515554919177b1230032c77b7c1e94abf0fdc3c7edae1de84ae2c9338cf117b116a1bcc4", - "msg": "8b04bfc311697c8015fb39330b976a31", - "ct": "4ff3d6c2644248940a7dbec7c0a3e8b7", - "tag": "e5b4405c0a05e293ebb78d299f1a5071", - "result": "valid" - }, - { - "tcId": 248, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b6e0d3d97b267288b43fd84804e49010", - "iv": "ef44dbbbafc1d5578f18df8f1ca005cd", - "aad": "15e25a1040b2d7e24099010ede7e333f16cf9e6fb7238b7dfefb072a2a879bc8ef382c21b0f911ebc4cc8e9147ecefa2bdb41da0c85242a34ff8362dc03c5d8d0b3fbe282a929554af2b", - "msg": "15a794f88040973e908b2ff7288d13ac", - "ct": "0b609478fd2ec117eae1e82006e802f6", - "tag": "2b97d8a7787ab0d0daac02e89b55c2ae", - "result": "valid" - }, - { - "tcId": 249, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "69215fcbfc120e3191796dd12b8bf10c", - "iv": "c2923f1876647b6eb7a13f1e1636fbc5", - "aad": "b497afdd1653f879adb05d1165411be1c2a039f029e1725379033b4fd1fb39fc6f1d74dfed4a629436c8cbcacee65776edb82a6cc39ca8e5d6310d7b05c5e70d57809e5b68e7699ceb98c4", - "msg": "d13366d3fed8473118baba2db942eaaf", - "ct": "2ce8e3e41e4641dc13c62adfb07386a5", - "tag": "68bf769dd7380d9fb68dcefc5a6bb1e0", - "result": "valid" - }, - { - "tcId": 250, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3e15f0f9b345d1a797c35027a279ba9e", - "iv": "a6ac7a40e8a31fb2d96af0796f1ea104", - "aad": "e690852d48afc1590318db0177cc32f3d4b18ab75f9d93e21c791697fb67ea036f2f9c4a947c7cc21625d4952493eb0105384babc2c7067c7868522a510400f47065eab2554906a5d30b006d", - "msg": "854b8b4eaa7a571a41889756b2352d82", - "ct": "e013b82eddb26d5d08f3140a649e0109", - "tag": "0f574d96537ed47c2f8c0d32683d9aaf", - "result": "valid" - }, - { - "tcId": 251, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "97fb23daaf82ad99b984dc2225285235", - "iv": "101e1965285e8c0ae5a77816d2fc35b5", - "aad": "1124b2cada0cceafb8873a84f334912ebda4d36a01d74bc167ff765f294ee217311f150f57fe8d72089665b74c27309f85509f5761b7190c93e45302fffc22529acdbcf8700463b9961c98eb8f", - "msg": "4f87fae1fda5186354e644dffabdd603", - "ct": "7cbc1667863bf07eb93dcc7389ef2640", - "tag": "dffe7d154a2b41e539891678890be38d", - "result": "valid" - }, - { - "tcId": 252, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f8c9a6767bb42093c255cb282d099376", - "iv": "3b2f0a422a572fa27cddfe11a78a068f", - "aad": "5305c85cf535285538cd0ea8189a013b507a20df342698c7a84aea1af24e429cbb9bf2c5d96317a8cdb5be3e3c77e58aef41e3927a91db971738545a95e9e12867e18b3018cc2f0da3cf2eeade9e", - "msg": "13b13106aed4f01594093847836def19", - "ct": "658604a6a0faeda248b144f0096228cc", - "tag": "e26ef486bf37f4257c9e4e161778cfe1", - "result": "valid" - }, - { - "tcId": 253, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7174125e9a5e4c895bab387677a710d8", - "iv": "0e744dc521db2c9f1e788554994671e9", - "aad": "65a62b9add3e63e8e6d1fd652f80e04181f5ff57697fcf09670078a04217958dd51e0068d09459f73bcf8e6474a068eecca4a60d44cd00be91017965db184496c1c70fcbb6631e615324a233fc83b1", - "msg": "dcff55d6cec44a83deafe2f111a81333", - "ct": "d5fb65d5a7a342f5a3d73b50e478b5c6", - "tag": "4cc4b6953eb4554b73e293454568555a", - "result": "valid" - }, - { - "tcId": 254, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "16afc9342bda7b1647276a24d03c565d", - "iv": "6fc97ad030deefcaf1c39375d7add70b", - "aad": "31582281b6213daa980685b3509f9c57d19e77db8dc4399ce713ea2a7d634169741fa0b78c54f8f9683dbcaf5becea42619c7e5ece537dc8d77444cb8ef616271b3fa539530c5177ce4e64c6c511a510", - "msg": "84e70dd22acc7d5848b48d8604597420", - "ct": "656e1947821964d36eb1016880284ba4", - "tag": "a1ff7be10af41fcca0cb256074c82f7a", - "result": "valid" - }, - { - "tcId": 255, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "432a6d54283dc4d969a2ed45572f1d19", - "iv": "fafabb48d57dbcbf4ff76736a4e830e9", - "aad": "ac9723c020e3f06fa41c4ddc80266eaccb055b30ce31c1e654dc9908575de2516535a3af6458d6e5be4a5aaba5c5b2cc8e362bb9f8a0ee3dd0ec78a983b1fb8f658e3bfaa9c2bc8bde74416bc613fa4196", - "msg": "9c0a40c81724f70b88676168b24615ea", - "ct": "906ba7052d35f824ba07124e4530ff72", - "tag": "24f432e175d2f69b13493fdb91523f34", - "result": "valid" - }, - { - "tcId": 256, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "529c0f22109fdf071625a2ca6deb47a4", - "iv": "cb031e2a5a51ee790e8850b47c1fcbd4", - "aad": "63c6d55889c8ab0ad4788864d7ba2e0a2576018c00a713bb0026aecc1a4714eda8cd3ab129fb3be0730d5dd16dec36b4d0c7a19eb427745a76f2510e80cf34a18ecc8eef499301d14a76e2a6b5c8e6604065", - "msg": "43ca9841c9a9ddd636218e2e80d854d1", - "ct": "8a710d9616d1ce9be17d9c509a73e726", - "tag": "333cc5abca474abb18aa3d6266d5168a", - "result": "valid" - }, - { - "tcId": 257, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d2e96f266c67b1399a48bcad0f9c882b", - "iv": "fb30321f7bd965fe8b87e0f9f45be96e", - "aad": "e276ce13c71fb1357362fb2de4b23e852281958fe490508c7d869aee37d5b48c0175140813ce74c0acbb89cfcc235a3926617c034adc0dde8a7963a9c126a810699c73d2842590356ea8ef7969c1611a97e6f3", - "msg": "0af59b57f6684c0598a703a475540d9b", - "ct": "f021635cb0e2db415dc7d436ad3b1b2f", - "tag": "8656d9c9eb2edeb2047ac8ce9b304a63", - "result": "valid" - }, - { - "tcId": 258, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ec673063ed19c0d30e6d25c5d83c80da", - "iv": "61e5f71023935a747a64253981b33fdd", - "aad": "5a5ab6c65dc5d95d6867dc00df3e8056b2c7f3af51781a7e5c19efc09b2369314fb400672d62a4b72fc75f851b62df2a4260e7f22b99884865495355ba38cf79b81508398923352701668b33bcb0cf77cc3cbad8", - "msg": "ee1f54c5f2393895309e58d413ce051c", - "ct": "3e667b8a34584e669edcd54fac7c3095", - "tag": "e55e59635af043ddc2c527f7ac8946e4", - "result": "valid" - }, - { - "tcId": 259, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "68d3cc60ccaf59724dcdf5406e1f84f6", - "iv": "4bc20a444446e5963dc1723a81a6c17e", - "aad": "937a4ef55176c97c2f0d721df9f2dbdd104410785515a82f2a718843013e4fcb1eb1eb97ce7f5affe4b46ef904f59c06acbffbcdbf782251339ede2f0c4cc9ec614cc1e4613cf6aac21eee5dbc3e97c29aeb6dc271", - "msg": "18060ca5f6be442a723c2928a8367c96", - "ct": "5271c3418b31a53102b91b85e29f13ba", - "tag": "db251abefe4b8d937cb27375d6354662", - "result": "valid" - }, - { - "tcId": 260, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "096074017363cdde4f70926becbaf5c5", - "iv": "141df161a5b62bea7131860c614fb96f", - "aad": "7bd71b1ea968ec774943ae72bc6dd16c499a0d4061e8a74631724044f6b1fef720ee9a9aff55354ca53c525a008b362ed901d75e1dd290cd7075ca6215ad99defec1a176b00d3285375d7322890ce71cfc5f31ad6d25", - "msg": "8ddedb75c4a7132f6db6941693aadd84", - "ct": "73a0c40b4063ac57e2c55019b8b53af4", - "tag": "c6aeba9ec1c337a2cd0e091e798ef943", - "result": "valid" - }, - { - "tcId": 261, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "443359810bb4cd0ed5d9aa8cc5289f20", - "iv": "f1fe4567f8911a1c2a0aa4aa040f130b", - "aad": "edc47ea02e7af7b8a85f3da889ad6c9504d2bddaaf34cf01c4d3d67d2e051dc29bcdd1edf846e9ab8643129c8ae5790733c092915a27dba1c71942da967a895355b5171bd6809af788305db6d6b50a7e1b66ee82ab9013", - "msg": "b689ba5a7f7a34d6174d389c920b680d", - "ct": "1a56f49dce91002b58e9e1e6b1022017", - "tag": "1179b7accad1826528888128b9dda300", - "result": "valid" - }, - { - "tcId": 262, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "061366397d1d5e0de6887c702dc1a944", - "iv": "7dd7fb7678fe71cfeaf04229d13ab687", - "aad": "8a74e1ea577fd32bf4c29fc96723c3b754adc6b4577a040af14c335835bf41f5a15b82f9aa695f574de3310d21653ea452a7644af087df7ce737fb3a6e7e6f245c5643cc35cef5a7d521c23e7ebe407a75d22b572c83913a", - "msg": "35a154cd20cc187156118f3dab38be6c", - "ct": "b9035a17b6dc081461398aee431de5e9", - "tag": "f8884ee49d2bbd8419947db6b4369dcc", - "result": "valid" - }, - { - "tcId": 263, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9fb73d16b8ef4fb17af14532be8e076e", - "iv": "61e9a64bc62cc6e8ed5752c57a7ed6d2", - "aad": "9c1ff04499b6c04c1f258b2331da19a35ea38b554fcfb4a96f85c60182b6b187d7cf159c85ca1d97f32922024122fa88f48a25ba3ce555ba01d8b6b4aa76a2c4b44d29076d0ca64e32f8e6f5c1f50273d0ed3d63df8d1a099d", - "msg": "1eedd3142d30d89c4b231deb9979ee87", - "ct": "7220d67505d639fef5d8568f2fd25234", - "tag": "3801ad1e38bdf4743b90d23884341e66", - "result": "valid" - }, - { - "tcId": 264, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bb98cf7a63929ab5e50688598fcdb8ae", - "iv": "c54210b2e51c7920a18de5bbaec044ff", - "aad": "7305106cdc6e3779ff1efc9773a6038a3d2e82c0dd4acc5612945ec2c755b05fb06722b364c8798f972ae2ec63689316e31f4ceeaa9e2dac26997e8ef56d75d35b635695badaf4937bdba02d63225c283968b8991de8b793ba60", - "msg": "eb2b570b8e305e5af190334ecfe5c1f3", - "ct": "f097b7fc0be0fa6cf646c2ea544b2e90", - "tag": "85499f8708d6f84e4f03ec41616e781f", - "result": "valid" - }, - { - "tcId": 265, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "325cbf26bbd61cf1021f2563484c85f0", - "iv": "9ddc50407f6b292eaa3ec09939c42cb3", - "aad": "213aed233ba47dbad60aa44b205f4d432f71b6a679ee6eaca64ccd199ca797b6e4e2183771c4042963fd2e524e7e6a881a3b06e9c31950231ade82b1dbe0ba1e14e1ff738db6bb03827f7c9c8e772c55e505ca52847d8fe0840c08", - "msg": "5f001b375073b6f031ef3559d0286d40", - "ct": "b743a94754e1eca18346d8e9c83e2dfd", - "tag": "dae14393f9bd51ec25fa6c813548a527", - "result": "valid" - }, - { - "tcId": 266, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "72378466edfb8e4f112ce9c937109e0b", - "iv": "2659ebfccbd6054d86da3bf570994e23", - "aad": "9beceb818ed325c6bb54a80af180439bd042f3b03edd403c82bdf88ccb660e3e22070af05c82e3699b7f4863e00361403b5b1e5c47e710a03e62661c5d86fab9b0623c2d2a7a8cc7ced1701dee883dd14304262ebcaee372711e4f37", - "msg": "ac4479435154ad0c839c059ce4b7fc01", - "ct": "bcb13240c90bcfd702ff9ffb2e97f17c", - "tag": "beb6d128ac820eb047ab8aada6de3b89", - "result": "valid" - }, - { - "tcId": 267, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8d79bbb591f46c9a7aabdb3918340b99", - "iv": "d3f90115f970c630de2d5a9efdfd1f19", - "aad": "920556fe568c5d22eefe7cc743347185e492412da10cfb3bf3f703d4a3fd27e3f5db33edcad09716048982d0c2f14a59089916695ef1af46b0c3b649e8c42010d84d7f8f2ba0be5e092e1aefc91e8d8a70cb89ab64626e413460b44063", - "msg": "5d7f4c97fe7198f1f75c41984ea0ba10", - "ct": "6346b39bbb894e615f4a25a392fea6b1", - "tag": "20b6d8b4c72aa37bd264239852e8211a", - "result": "valid" - }, - { - "tcId": 268, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "aa2d1d4eaaaea2dce178d05df5d5178d", - "iv": "594a4b03c3712af0bc0ceefac5a57a93", - "aad": "c483a7f9b5e3578e101c28dc46919d869af71b6d43c36426e2b9aefbae8b82db5a92bf44143c79eab35a010ff5b8fe70333fa7db40e75bef8857904e250466aef375caa1792e62c0bcafa51a84f2cc32afa79eaca9c04cab13714de68e90", - "msg": "90909d38108618466849bb7fd687b8b6", - "ct": "ea00e9f516fac855f2f8c3d933e71ea0", - "tag": "44bce2ac2c6f15f3375f3430b0a6563c", - "result": "valid" - }, - { - "tcId": 269, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "07593aacac6240ef0666fb7036275a24", - "iv": "864b9ce07e9a9dbd21f0d961df50222c", - "aad": "72232730ed941cc2c9c7fc20cbf1685a5a47ebc79ea5851e6ac7c0bc8bbcb828faf7c2e83db126ddc050fe64a07c01a8d4c0c66a5f47ce34828dca0bc9481b59c2222beb23bd649a6bb7eb26ce0a8b81629fda4efe573c26a2c9e26a41ef4b", - "msg": "9a256dd986052c4a355db1f5ea1c2328", - "ct": "2f4f32b5bad765285d75041284ef759c", - "tag": "337d6d2888d26fefa4659fb8dab680e7", - "result": "valid" - }, - { - "tcId": 270, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0635637b29688bed0575fa5aaad6e6c1", - "iv": "c4a4580759518959f531ad72184b8422", - "aad": "43589e49d5cb4b4df9dea5a4d54250d62787150d48f3e8de58b030886084b6127045afd96ed69b9c28f6625dafbb330d063c9ec1c57ced4079a70d8b43a9fe960107cb3f38a9fc53bece87790167453a8be6be787976472a7274c47eece75dba", - "msg": "5f1cb41a53f5115cc5a5adf55e5008a6", - "ct": "9f55b6fdba0365f1360a2e6da0ff92f9", - "tag": "8db655e380fd9d11cbe526e3424f133a", - "result": "valid" - }, - { - "tcId": 271, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4c9cb36aab6abc37a62a6f745938be78", - "iv": "7e7d54d48a421c87a5517714dcdb788b", - "aad": "daf1b8a0457082a0b4424b31917a117d3542e2743bb6bf2180d9d6668310f2a049c7508120bee768c529d9ceb015480e0bd8dc1424f4881c6163a8946023aa651f3fed9e026255f73b23d2d5f3009d554c4dfd17277c1cecd544539e347256776b", - "msg": "c9873c4c91d17904d56174ff16d59cc0", - "ct": "b3893703549f62c292f8c956a852f352", - "tag": "75c661009dbbea5d5a5cca6846fc65af", - "result": "valid" - }, - { - "tcId": 272, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d6de31dff562a4db375170b385c1cb81", - "iv": "4ccdb2884a86016e7eb477509f1f37aa", - "aad": "1d79ca971458c6c4961ed85276c20e1426a6b1a358546239909249e139806d4fb1f8d51aaaf8ec0d4895a5865579f7b1f457a5a197abc57bfc9c924cb89d5ebcf1eb55deeff9cdb6b168b2ffb9e9e7bd65df57e8afd77fc2d8ce0ee9761052a538db", - "msg": "cc002d94e6466227390501f54a7f266b", - "ct": "2551d56751542dd897a2c99f639f0434", - "tag": "7c5286b28b26746d58a97030bada7ae2", - "result": "valid" - }, - { - "tcId": 273, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "daa3d4d168dfbecfed3e4da44b507d64", - "iv": "9a6ef29098f7ea9218749ef3ee7eabe1", - "aad": "e9dbb1c89f7d5f80d783e2cebfe1121d7c0bf03e8bdd56bf4732d5eccac62923629c370849c9b5d21ae3b5abf7eb4dbc35ae162bb0c419519d53e8ae3ecf7b84a984cf84c59d6b16e076a2be34c6dabe09acc95f4ee32299da5b3fab0730b94358d984", - "msg": "d765179ab2cb52870bcb2fe4ff79e24d", - "ct": "22f52bfc84f8271a3b03c2d154256db9", - "tag": "9ecb2a3c444436be60f6bce9af12dc2e", - "result": "valid" - }, - { - "tcId": 274, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d68f6f0a9c49fc1d2a3558062e1d09a6", - "iv": "c474b0603b34203ac86cf7f2cee6cfa4", - "aad": "2eddab5db7815004f95790da0487579e07a933618f9002e6a88c6b2ab0e0d090dea84b2833221e3a1a007448fd76813d5700f970b7af15ff123c46896e6754750acbf402b8fd9d24ac206753188e9112d7f6e65f76e1b9f6f7b849c749bad954cc2c3552", - "msg": "c763e54ef1abcf3efc92f5a3c97ed518", - "ct": "56ca7851b5fde097c1cde5c20d86f306", - "tag": "6a5064ef8def4c7f584afec271d6b5f3", - "result": "valid" - }, - { - "tcId": 275, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1162f90b1e1ada19827eec0ab928db12", - "iv": "36a664e21454bde1330f846afd439b4e", - "aad": "91b4913695dcd32904eeb75e384d5d45201d4ef0e874e1c7fffcf53f37bd4fcb49b930182b35d055b2ca4bf435c8d9f7b2947b64e231d03f1baee1bad15d4b255ef983b014ff0ce47aa5f81d487e88dac2e5ef2261c149ea7b3075a0f7f604983cb175a0e3", - "msg": "63b901aa708c00ed0d9a958097c72337", - "ct": "90208208a1e63fda26aa1bd9df685fb7", - "tag": "c7c005681e3639c0a9cd227f9ab46e59", - "result": "valid" - }, - { - "tcId": 276, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "be889f391e095f9136d7c1bd5f074bc3", - "iv": "6ed30d8f83b60942fe4a08b47db614a3", - "aad": "073192c829a353c6459ef7e932a6e25c73cee878b76d1d053c46bc940edfd7f55fba864ee2da14b1ed6570f3d103f63085e1742c91ee90812b761ad23a6f8fd04a50991c0112d93298049e677c87c20f4012ddff68c063a072b9ec53d955e471d703e745aac0", - "msg": "62ada6dadb668cc42812feda384e7c3b", - "ct": "45a64dab0361311fa226398d68f41079", - "tag": "ddea65d4435be211867efffb0f1f30a6", - "result": "valid" - }, - { - "tcId": 277, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cd6d6cd9ee4c2599d2fe1ca033d64c65", - "iv": "7b7720aadb641e3a78f79da787900e21", - "aad": "9f0646906d196da52731d4d772575a663fde104970dd605ee11982f6d761a9255c1abfa1506d83edcd67e581454979b3633a20ae581dda377373966f8684412dba40ceb2182ce2e613880846158d66d6c0af127ea87ae9538a9ddc10e43e3164f973e6504b883f", - "msg": "8b697b45b6aae4a4885535db8828467f", - "ct": "2d7d8baf892c069356b77b39b8618e91", - "tag": "1de5afc2cf84be469e0be4a2e0691fcf", - "result": "valid" - }, - { - "tcId": 278, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a6b61b2637bb738ca4f4fe403e3dab5b", - "iv": "d19dc0150e917622207a494e54df1d4f", - "aad": "338294acc98159290214dbf029c79db4e081eee624b27424749f5f8ee3704a92f72fd71455fb995bffbd4247761331fe12da8aee2f548da85b99624a1e824dfef0d67d3d75da6fb7209586704a10f0dff2fc4738970d08104cab294ac5b7109a916102b86c770e1f", - "msg": "007041bc35bcae6f036bb452670af5f4", - "ct": "6f2bf6e76cc051ab60249c099046cc62", - "tag": "8b26deee74f688817d126ca57eeeb5d1", - "result": "valid" - }, - { - "tcId": 279, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1c6f5f45fd1e016711f997282e2f59a5", - "iv": "58cf9b73fdd8d61922bf438a3eb84df4", - "aad": "58ed6d49407a1bc7cc3cb9d0fb8226e3324ef9ad8f51fb3fb7cec620357f6ec3067a05199a4e4059483e9c2380691524a6b67d2964214b26445010a9ca56ac797da1113ebf21c7e01d2e42fcf60e3e8703ad86ba1368b7a4f95538d413af978e566cfff1876f22f13e", - "msg": "fc3addbd7f2cf820e27dd653f58ba3d3", - "ct": "49316918a57c7c7092fab8659cb94372", - "tag": "10bf65f1aef091e1328bc962279d8961", - "result": "valid" - }, - { - "tcId": 280, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7ca04ef2ec9fb3f3c8ba853f2e5c6839", - "iv": "d9109e9cfab9c065f4ce8b6c7b1ae185", - "aad": "987a82d3e9219c655611b534b7cf33160084bf35cf45a746639c87aef17ecb050e5e0a6c65c6b5d6fe89388bc801e16d6e17fabbefc16a3bea9cc6191407aeb79071e02edc6e08cd6bf884874969203244106a5a8766ccfc6c4079920c2b21e1781dbd6701dce5080d24", - "msg": "22fb8b4c705a0a05be4e211d6b4b8458", - "ct": "575411fe178d193610873932f143dc67", - "tag": "00553579ebb5209d4eacf10c2b47cb9c", - "result": "valid" - }, - { - "tcId": 281, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5d896648bbdced899ebe35643ce5b0cb", - "iv": "329ac75e12ad8eb5250cdf3f945a1f8a", - "aad": "77dc380caad2c4c10961ca99459deef6337c242f884ef13b7777137a32b365c233fefbe84631ab2ed3fc0fb257744128c1b2ddc3eb00580e1191110b5937cd193a7fd7159e750883fa3914aa964e5546a8e65d26cd873fa0c2fdb5d19ff26ddb569a9f5d825a024c4effb0", - "msg": "6bb7d1b046e0ab9e6dc8dc53c29e3a86", - "ct": "b7b21a1a49d3ecd0925cfeeb93f65279", - "tag": "d888120f9c6dea5b3927121ccd2457e1", - "result": "valid" - }, - { - "tcId": 282, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f9246a57ceda0b8727f603dec3af6f16", - "iv": "2fd815f65a48d2d3ca6527347bcd11cb", - "aad": "e5ca599c4bf32165178f0f86849e274617bc1f93582802bf0d07970f6335e4b9248dba45ce2387bbb9a85134d2e82a288b87b912b957d6b1f857ecdc0f998df4e1644a1975f0efb025faf38407553a938f12821f2b5dc5e57b2eb62da6a39a22bb17d534a6be80826df034e8", - "msg": "a7425971391cc766ec557e15a390e288", - "ct": "d4f734e12539a7e6715ac2f38f34aaba", - "tag": "44d9c53315219394c1bc6ffdced20d53", - "result": "valid" - }, - { - "tcId": 283, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7342725d37d5072f4cb10efef7b712c6", - "iv": "6f33f16965d68f3967fb118b57815d7e", - "aad": "c8d8fdfd4e0a57889af5047a5d81c812291c78cc37566e4fa061b0291d764ac389118bfd07cea5df171d58fc390a5ac6feb720734e9c59fcc13910100e63a51de34515fb7840c60bdfb1a9f60027f1382f3b9fd30a5dc114e06738de0b1e527dc33e6c82f1f442dd9a98848a9a", - "msg": "0442fc9017754b28ebb0ddefc681e84a", - "ct": "dfb03273d8fded8d710088fcee9ddc2b", - "tag": "41def30ff4b431a4a2468dce8da9baa6", - "result": "valid" - }, - { - "tcId": 284, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8d25e9978e2735e94a6a58f6ed729529", - "iv": "4e997308f6d7c4b5be161fb3e2410ddc", - "aad": "3fa32458860c73ef3c76f3fe0a160a5c4e870cd776cb0ee36810d53be49c5d7101587c9797359f06932076662dab7a81eb2c836afe35a0ab184de73e2375414065b307c7323d07f728de10a8fda1f4e18534a7950afc7948ca426f640f5113b95313e558a45b9440d69898178033", - "msg": "72d3268d6f078670a527d4843c67c9ce", - "ct": "e0f0dd46c5d7d0ff24f1542db18e55cf", - "tag": "e0105dc23b800eb425db72a7b6c937c1", - "result": "valid" - }, - { - "tcId": 285, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d0a5ef97a79b9c785ee5eb27d9af8626", - "iv": "16ec8d6e01968736b9f0885ed2f070d5", - "aad": "7f7298f2348fff7cf4c8d62cb09f3b34609619c27519aed09537d738efa05e13a63e8661af2e448b27f85a8510896b87003fab3fbcd7a36110c36f03249855b2a1e6d42e88bde3412998bb9e9a200fe5c3d560c5d528f82139a6b5198a7b4c49dd247eafd8899ec40bdc9a37a9ce78", - "msg": "8ae50fdfd769dc3ce0f1082b187d9be0", - "ct": "d48fd03d9fae7e35c849301e38442b48", - "tag": "2aecbafb04573057db75c7015e8bd518", - "result": "valid" - }, - { - "tcId": 286, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "25532fd6301002f1e57f97e86fbc8c69", - "iv": "3dfdef1a556bef9099ee36333199a8fe", - "aad": "679521d938299058c0d4aec0e06d04fb0c2df4fe525f094cbc82106161cd3ff08ec2d035c78bf7ca146ccd7925b68a15e8efeb3e49b2fc70ff8c409671b14e208d1758fb8b619713c0d7ef70e2d9a877eba9fd74b0680549151fa1e031348553cf732acac7804568b389ebeac08794a9", - "msg": "2d25bf1e324a5062e4a196f8820ca639", - "ct": "67a64358c589e3841dfc16f6aa7fd5ed", - "tag": "68ac273c26f3b462cdf0ff3a9fd1fc53", - "result": "valid" - }, - { - "tcId": 287, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0c9c3e21d3a06b7e017290cfd6dcce98", - "iv": "39a0b8a1cd6cf4ad701af2a1854571c6", - "aad": "9a31ee410a7be2969f97058e6fceef9823e3110788acf548b9b87d168780f3bf2a164eb796eebfd87f629a8523cf2b8264b53736f674a583c2e60d6114b85a299d5f40dc59ce2d3a67bc459fec2cadaa3d529507c1865fe176f830801f79cd1ad6819969c32374c1dd89c259eeec676839", - "msg": "375081c6e662c43637050057bb5ad9f8", - "ct": "077a82f6019d40d158a11bca6da96d27", - "tag": "72097649d6394c21ccc57697ebda1516", - "result": "valid" - }, - { - "tcId": 288, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f945acddf5eec93fc6b7f366ff31c049", - "iv": "4628c5e836465911cbda03322e9b2f58", - "aad": "47179b6de1f8a829be0bb358fd5c8600a8489b49eaa417ed50d57a85d9e9ca6fb11840e8857be5dd07dc432070b7ca0786d8a2e22214d3e3b322458033d7cd6b660494dc59a94ceae57d2d58132b62a9aa8a8bad7fe710d7b42bfead02155a72a0b601c5ba4240ece5617c337aa20db97eeb", - "msg": "cf021b525f34d0d28fd26372c1dfa43a", - "ct": "48205b31438a68705376602476d6ed06", - "tag": "b823b99cf0686cf07f1f8ff895f5a272", - "result": "valid" - }, - { - "tcId": 289, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4ac0fc6d630ea94f165f4298e0493234", - "iv": "1238f419592dd5e1889107c31230e353", - "aad": "bde66bff2153c043c54420bd9f6de0219dfe1b0854e7ed8e484d79c3660bed4ebd55ad5ecbc7224c221576e2209f74c0cc2285a0bbdf213d3b12a0747e2a6e0596467ca5a7c1d75e6883c357f9630c1e6fbdf54130bd7bcd2998ffb80667b22c61886c42d3b8a4b96cbd53cb92a0810bfc2f38", - "msg": "7249ee65b5974616fc2b4b87081e7237", - "ct": "71dc75309f6040a8a653988b6c7b59be", - "tag": "73ee3b71625500c9e9793bfaba3f2de7", - "result": "valid" - }, - { - "tcId": 290, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "417c1201434ce0cd3fd52a7023ef43f0", - "iv": "9ef4c2128ec7ce4ce0265d0a10364b45", - "aad": "275d79e658515d71433958fda9267947cadcde899d645d9087fec59fe92c6e922f6f3baecf23294b0c45aa78358362c3a83ec3733b277cab0531f52b08ee626de720338eb6715555e63e5f68f1735f63474cc61cc8affef18752320dd8ce01818cfce9c27411aa517ed3392f63844de9e1341ae7", - "msg": "8e847ba7a378a45c0bfcf18065ca8f36", - "ct": "261b7315d7ccee35050499c0bd5bba24", - "tag": "0e7ab330158e9a174325e63f76cf006a", - "result": "valid" - }, - { - "tcId": 291, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ea2fbf474f5775e16f5398f085f6df44", - "iv": "d4e31986a42d7a1fe6cfc872eed1031d", - "aad": "950a701138ad3a75d785bb15863bba3c34c95281a562956d8e927da592aab332992dd4e27b820da3dcd49d265288a8eb4c2d1e2b456827da64f5dfc79a5ba4c9ed7173e70f819d8a881e7255b8b95882751a74a4c239d95a6e6390bd49af133b52460c2d654bb67bf2c2cf7f135e81e1a5f35469f0", - "msg": "3dddccae1a0be315de3f190cac1c9796", - "ct": "551f5f5b9f2fb4c2f2aeaf297620868a", - "tag": "810e2a0d7b90937fa85cbad77b79f159", - "result": "valid" - }, - { - "tcId": 292, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2507f678ada4ea68c925c94caa346b03", - "iv": "48e544fd96111b81e77cbd472e374020", - "aad": "62cd5fa03366d6c2f3a028ed86dc8247f1b7bbdb82dd4aff2c119481f7dc7bb82015314529d8c0444ef4530f9c2d22ac59a67c680ce24b37229262f8b2efee10dd4a72270c7fb1ec1da502618264730911f4807fe9e662d7ac2e6517a21dddc07c4deb59584122a04ee7551b43e3ba1c929545ec53a5", - "msg": "3770c698c900e7e7863a02f5b02d49d6", - "ct": "51019a996ec3b2fa421efe138b96c9a9", - "tag": "c29013a1c6dc1c3a8a19043682a44f4b", - "result": "valid" - }, - { - "tcId": 293, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7f14e228c927e11a93fdbfad64326642", - "iv": "39efbeb678f4225418d16a05abb61b66", - "aad": "e677b2d11a2ef36b3bb8e4dc33d6aded8a2c11bca6ba653e0b19ab517a7bcb40c21bee6bf2a98a32be0e11ef4be263a46fe14d41118bc9e6338186128f3b55174fadecb2ed1d3ee4493cfa225624566df44e09b4b3a377e4be865c61b35edfa660989168be4a8b0f98243341d0bf7a49258ee5567a205d", - "msg": "6abdf1ea33d727ce38c2fec4e4f698e1", - "ct": "810ab0195339467db71ed6ea2069c12d", - "tag": "6d053dba3061331b8e574d0c0061bc85", - "result": "valid" - }, - { - "tcId": 294, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "532dfea1609e143458377ade35c1ff0b", - "iv": "e3fb791931c42eaf8b3c319eee277d1b", - "aad": "2d475fc7a0a5843302e9dea7df3605e9187a090947afd2cc876e874d6b814200d98faadb472f5ea7f88081db37c4435d3f790b673cf9262d32127afedfdeae1e6ad0c19175e97ea4b3c6546aa0543543a598ba4067c318ce51434500e6592b336d74500450e944133c1434b8f17bfe1464a40ad75e6cc8fc", - "msg": "a232e46dd0cc496f149263a9e423eaa7", - "ct": "127a0618abaacdb7bb5e2d0d6450dac7", - "tag": "4ed6a2fcc5a212aaa41d48b8ec1964f2", - "result": "valid" - }, - { - "tcId": 295, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e250a3065874c540ec008e3d79e53407", - "iv": "f76b4cfc879a610383f602b57f0639fa", - "aad": "93f759f8b63ffc66aacde4639cd5979176159f20ba47b36310a2b6ed7e0f6d0ee909b772bdd53c0fbfb8f1fc5ecf2e06b8164b8003c0983efdb0a126b7835bd9c97509cd76b656017f2cf82e89ab2918b8f1ddee5f68458e9cf195b747d37d68356575681cd91276fb48c9c3eb8650f1af231a5beba1074e2d", - "msg": "06dd019502d2ddb1f16dd03d2903b6fa", - "ct": "e30eed9096699c9eab2412595fc7b7ea", - "tag": "a6bd3cba36f10f6af42d496391bf5ea3", - "result": "valid" - }, - { - "tcId": 296, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bd81c5f2861226d17b44a7a9baf3df11", - "iv": "4108353a047dbd97bec994cdbf18843d", - "aad": "f0acf004935cfd512189665898f1541115c9454144303d6f2b39754d2ca470930ff4cf424dfc3f220ffea21704e005983c5935d33c819ccfa4085458df51f66cdc14a4255958bf041acf22248f6dc97c7aec13231a55286a90644964977d6418c8d9f41a1e1c3d27efadd2b035e9752d5c8b8d2416cb9d6d94cc", - "msg": "0375dabd783b86c6ec8ca9dcf365e12e", - "ct": "b11908024c4a7c5bf0b053273d2baf60", - "tag": "d031ffe1b3129478f6ad8145eb64ed75", - "result": "valid" - }, - { - "tcId": 297, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "61f650cda32289cca5e762386ab6497e", - "iv": "e7b1505e0e506970e1783ea196e1ff73", - "aad": "589d49732c22b0a91da259c68f678249d517f05054743fc1ced3404a854cdd0a1f277fa8dfb38dc7ae36a5be1f5f1a00af84bec93c67d70e0161c2e7248795b03ed58191d7dbc6f14b6dd61d6b665641c7ff768e0646f447172ea893eb3baedfbd6db7dc85d7a7746a4739956d1da2ea0c3251f3b371bacb843e69", - "msg": "1e2d97272812525988928f48b6bfcda5", - "ct": "17a984eb7a6268ae98ddf085e9490bbc", - "tag": "3e4063575e189f21194aabf56d1c8379", - "result": "valid" - }, - { - "tcId": 298, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f9cb80a9c13fda81e2a83f716d039bbb", - "iv": "c9307f77f93895469b7ff6150485ed57", - "aad": "c238338d2ca3528e5297232ddaf97942c45eea243fd8a51063e40630e78fbeabe881e52b16914535a886affc85a3c64f55d0c34849eec26a1095fae96c9b3c16355a1184fdcf34ab2bb37dff3f9b8879f59cacc491b88b27aebc644378ba65d2894f3c7532beb80de6ed0415690820c76a6a76041730b6adb25ab824", - "msg": "cdc2dfc7bec8708c3c3690bb553e8a65", - "ct": "de40645127e3a20bba0aab3a31dafbf9", - "tag": "7a3bfd3d5b47c0893f2b7a3730bbb997", - "result": "valid" - }, - { - "tcId": 299, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "fcd64d5ecfb896cb7f8ad2e809f706b4", - "iv": "3125253b7073724732569ee2c3882d1b", - "aad": "d380975f917430b47bbf63fc4eaf06b7c3b5d2b63a4fdab7a2299e2ce8b62f39a8579a4e34dc65fda33e68d7a01ddcd5016976c9d214567eaa3b2f6e618ead69fbce66b913752419bbff928c3da539b91e95bf53a06f74d692bb6193847621056cf9c56cac348012bc5ac8cd098a6939ab3d7658e3e8d6e98efac5f5da", - "msg": "ddc29deef437d3e738b9e5b5ed4367ca", - "ct": "06ab89aada7084237c3a406d8479df80", - "tag": "c5b61d49ed1e5aa3dcfd95ec9e91eed7", - "result": "valid" - }, - { - "tcId": 300, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bfe78581a9503ab126f55b29c766f58b", - "iv": "119e097a7b1df949d924e8010b128b54", - "aad": "1e8020b7f8c5cc544bc141dca8790606537cbe033e379d7abde8dbec6a38b888f2029a3c5dfee29a3c635a8056e022a47205e7389426fa2c8047c1930fb7e821c88e8fd9385836c7ea445383b19d3460f11d5c5490e8d38d95240a83ec27b90632fc9778edfec7117e924d8cc56990a2c781d5498d2405e4eee6421bbddc", - "msg": "4cdb8759de37b741950a10ff076a3c7d", - "ct": "2283c2a33d59ef86f54f938ad6189308", - "tag": "ec1a7999d176ee244f52f5cd0dd15b3d", - "result": "valid" - }, - { - "tcId": 301, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5fd45d5360694cafd3277dd45a6a43ec", - "iv": "86d54fd9456c3c08e24c0e18caf20552", - "aad": "4f8a1f2d7dc93ede21b28a755cf39d21a257490fbc08dfb56fe2bce17b56c4cca80c931abe663dccc56fbdb1c653b1e8b6bd0846e0ad65aa44e9d20adeba019e719f4d77c7a5f020b1b380c87046c13d024ae47145c035015e18d1b21bb8b3b83ceae1c86332d896154931c716c72cd00e436a2c7e1b20ebc00d245f6f2290", - "msg": "df57c67fd670bf327c2f60bab4bf28fe", - "ct": "82c95044d34456675ae048dc82b34552", - "tag": "796f56f3ac11fcc9c72039d9bd6bec3c", - "result": "valid" - }, - { - "tcId": 302, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9b1dc49fc068d6961cc1e920ea314987", - "iv": "b3b3122e7f0039459bde4baa234848a3", - "aad": "3206c4c21a3f954969b33d8f448e0cdc81627b8b4bcbfafa6ef41bee23cdab79044c72ae0525126a74708b92f428eea246c02b6bc253c578fa737578e9048ba295ab7d29fc95161937ed533391d4c0f62e0cc05f677e34f845db7f6ad38c592cb3fdbb91adbf896a47633ac6c8609318e922d0f195dab39f255d51c92e09ca86", - "msg": "e4d014e51ac9c19dd9a14aa2467fda67", - "ct": "d0666cc4fe42b359b511df91b857cb7e", - "tag": "520d767a6c9e73178a306fe6933cadd4", - "result": "valid" - }, - { - "tcId": 303, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d716016100fef88af005cda2c4f5263f", - "iv": "b25bc76f6b50ad29e2ee56db087472f4", - "aad": "0b80326cb30c55a518129c36752143109a972775fe765b578284c8d852a251dd0ce148f495ecaabf27cf5b16e5778c07b19c7c94dff726f181b8d4885965edcda2169add559e69764c3626a7b8f4d7d1308fd7cecafeacdbac5ac263c0656a226648c09bf328d1a5347ad7b080687f3e1bdbb1f67718c8199a594f5d977ff8a15b", - "msg": "59c590960211bb4dd7e471df39695e95", - "ct": "08c22a7a03a7b57b5e0f201b60f0dcc7", - "tag": "571a0964a9eb6b1418d14ca5556684d5", - "result": "valid" - }, - { - "tcId": 304, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b069763af9995846fe3416462ee5a362", - "iv": "bf2bb6c16e1e6fcb0dd1317876af50ab", - "aad": "31d29aafe8b4150ab39b79a3b596e7489126058466c992f311e80f025a0f61ce51156d64e1a24f253a5d34297aa193d54fcba7c37d5e5d7ae66a017f3e7b04d7d777f3f7401fbb1c49997542eaee88027a1349fec067108bb17de5944d98f209fbe32d7195737ef49517a90857b2b2c01fe11e1997394a528256688d35e77acad669", - "msg": "0b70dcfa90d27b51bc0d0f809fe95778", - "ct": "63f7d9f587b249c579721537e8b214f4", - "tag": "a4dd387f4f2628b42a8e958aac86a2b6", - "result": "valid" - }, - { - "tcId": 305, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9f52efc687eb36c5f2134f0defd136f4", - "iv": "e405de5a5a1b9da6cb34265b2f1e860d", - "aad": "8449c3643bf3b2eb9398eb14b1a64b163ab8db7f7ced6bb6176e62d7947e43c1c81eff41642bbe7ec91f8e289edf246fe0cb97f7cdf997ede70ac3fa78cae48823d2805653bbc2bac75d3d800b9a72a3b67e0ce4ddee9d48ce63cac571aabab635aa3dc01579a8227573bcb0b961f2bb5beeb6384b1cf75b0d45a1982863a7d3d36e02", - "msg": "7dd8debdc4b52de9761714c0ab6378da", - "ct": "fe21c7922991c776889d2f46f4b26716", - "tag": "55687d29ae8388c0738d3c71f101c06c", - "result": "valid" - }, - { - "tcId": 306, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c1405613964b9e43980a7d68d6f2c988", - "iv": "0f0a3671f0d71120e6f4db68d45154e7", - "aad": "8f1fc6bdfccfec0d0066eb3660e6a77eea612698073f14f5a313e13fea186b86043407824bd1b20669bbfb529c22a9223e17be9cc2c3d9ebe9c14ee3b36f05eb00882b6b3405e2c2b726f0564b44f41fa8525e7ab6937ad2633cbac86b79786765092ec9c2f804e816a4d1163736a43d75acddf69044e373ad2166531fe766ad12d65ebc", - "msg": "6dad6ad64e08ed91b004f33a5fc5a377", - "ct": "6bbbf4ed56cc97ae569fcc7850f99eeb", - "tag": "c4de46a00274e53da4cf8b88891158f3", - "result": "valid" - }, - { - "tcId": 307, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "361a64ad7b371623f9716dde277cea6d", - "iv": "f166ec5b3b66fba8b7dc465cba6d0c42", - "aad": "8b14c1ba273aef871313276e4dccb34c0d064dccd1d552a5f690071bd29725e19c8641206b6737ed628c29520edba8868829d37705ef67e9540e4bef681a6381598be8c6192f6d3415e9fe77a8240fd2eff4fc736e1287f9d5ac5e99685b8b7a434bd86371149cbeb5ca60c13137be91f53a331e419b7b4d71296253ad42cf8c80f61d5db2", - "msg": "fe8b870a24ede71b1d008395108f8563", - "ct": "eaf8b3c123306102b0736c433c1b70ed", - "tag": "09e9789f32128e1b9d96d63bd63e89f8", - "result": "valid" - }, - { - "tcId": 308, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cb18b2df8a615f01ce7731ab289c0c76", - "iv": "96c4c6fd7d0f500e44111535c919e268", - "aad": "6ff6bdde6b8b383ed20e5f54e21e1aaf7e3faa35c616da974e418b08900419664a058bd292e9ab604efb2d7f4f7581006fb0f6e7cc4c77f641a74dd571453378faaffc128ffd0aae2916009e4bf9d9ed39f6e8f0c451bc23c7525dfc5d889d7ac7ba69cb1bd8e8f5f6fe5c148fe08e8ef066dc8f2c3498858cbb8bf21d48e3ed4e36be88e541", - "msg": "31d23fac1d766c81f25bf9c18c863885", - "ct": "27f1e1ff5cfaa46ee1224d0e5468a301", - "tag": "5a523ba2084d85c85dfec505c9d5f8ad", - "result": "valid" - }, - { - "tcId": 309, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6701b58ca60d0853ce56dc9716e3222d", - "iv": "e64b0ef64a6580272b1c6415571ee0c0", - "aad": "7ed972443a15ada245515c31e76efe070ed86f9f2012e49fa1fc5d9e522f3995ef6669d525cf8dc2ec627d51c158cd36b74694bf4b90a68f4ceec5fb2ac5560a2da948412063916358976a94f281ece1c3220ba293312629d4bb1373d4e410642145afdd9fa4118a232dc77d4565ac641f6c4698f566ac5d5606138f2e3241881d029cae7a75e6", - "msg": "5fc11c42ce2e0100ae3f701daf89f147", - "ct": "a26f42c2480f366ec8382e52ed9fc35f", - "tag": "6e6ab954d7bc31716561dfb57cbe0bd9", - "result": "valid" - }, - { - "tcId": 310, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7c6155eb49c86667dc53b25a29155efd", - "iv": "9aca9235ac4585ab2fb9f8e14442286b", - "aad": "51f54ec6d2ba4053159cc1a2256956c3f4abea46762bf43a25b287e9cfd8756bd075ec961684891c0b3085f88e136b154fb1f5698b0c42d5e9e4fb34d527d9e2a72a505dfb13852569017dc842f0f19886e5469152907bdef24aa7d2ed2e472d7fd21479744b8765a17b6e4e622e9f94a08d9100ff1cf6356bcd3463a197a72327ab727b1141b9aa", - "msg": "c6089e70257bdcc1e6b7eb367a4ed523", - "ct": "0a304d68a709d719da8c45aace671f7b", - "tag": "e72a7e2b67e41e8357d6ae3e9519a52a", - "result": "valid" - }, - { - "tcId": 311, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "12d419a5448f391ab0bf3d67ec022dc6", - "iv": "b4a7c0c264265adcb050f1a7cd8ef964", - "aad": "6ca52c03497d37fbcf712f5d2c36edcf13b668e53f275d568a60fe8b5ffe73330550576e71fe107111a8c271ef537cd3630cb790210339ce8276df3d7d0893fb5718fbe4879513ea4945e92bc3f00f8246f83d820177ceafa0e7a49e0fbd430a0e83b80907ff1b6cc506b8ba8e3526c158f9db5257151ddf0aa887548cd750553978e0590fa1c83db3", - "msg": "33bf73f390c6d1620edaa9ff47026d5e", - "ct": "1465367af41c99d432694ff21c94ed78", - "tag": "13579aea66df88bf4af18d9f3a811924", - "result": "valid" - }, - { - "tcId": 312, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e769c10dc714e9a29bc27a3a026e4c62", - "iv": "dc3bff21ca35df1006f6cc9842978740", - "aad": "c0da72d886cce8b817ee325c9ae4300b4bb231d8ecaf9883787a63ec055fa536a4eeb6806f9d5412ee44458eafa9ed13ce0c0d5f0f0d5fe891254deb288a47ee513778bc7d82ef47a348adcbaf6d50cff727e113ae9f09635fb94b13b8bfdc2553bffe240786cc20da1bd14e558052f410996428e5be29e646d6136ea538a5585166ec1238fdfd1c6b76", - "msg": "9d355ab72bf6adf96a59a51ff5e29e29", - "ct": "a4e0df8af729f516b60a1bead2469265", - "tag": "edc0dc0fde6ecb8ff4968255f85608e5", - "result": "valid" - }, - { - "tcId": 313, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c34fe0679dc03b052876a811c9c95e23", - "iv": "2ccde948ce42e0a99b0f328b84ffe748", - "aad": "64ddbc4cd3de8c3217dbdd47777d54ef8f045a5e7310f2e9d491d6a95a6f8131175ea52d592e5b4cc7f04c0b221f1c0a6405143fd7a175918db8198cc15036536e0270390ed7ce4d3297a969143e2151df0dd15e26071af3ea1ccdc3094f3e7ebcbd20c413896c4a14c6ba12b6e2ab6bab6a12cf3b9b45e72506404115a8408441c34b1fbb75697f075459", - "msg": "2382900eedc7f31a5a90d6afcaa96bb7", - "ct": "7f80397b0cd8db1a5ae44efe3049d1fd", - "tag": "8411d6d016cb16c2673bcece89e7f2df", - "result": "valid" - }, - { - "tcId": 314, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a05fb2aadbb56ea2000d979f17b8b309", - "iv": "135ff542d4b91a22b2ea083adf050ef7", - "aad": "7b6e94d8dfeb054dcdc31e475dfbeede769e03fa52d814e91fe3230f8967f3dc9b1cf0e7568fe29ec6916213f6c45b0be7cf299e8fff4f2e2f65801abddcbc55c28f6dc73c0b46459c07a7de92519c2b7711a71778d2c88c6dca74303938cdb43be7c5d553da7159e37d314ab4aa0978395a629ea48fa778ea78b82594345fa6b5834277c0f21154db5550a7", - "msg": "c1598521bee85c0b5aaa991d8d3ddb49", - "ct": "00f68619f9fd25631783b2f83da07d03", - "tag": "a58b723bdb131138f30165e62125c88f", - "result": "valid" - }, - { - "tcId": 315, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5404809cd25b59128214d3b2baaa85c4", - "iv": "78d5fa23f377779620797c3ce229a09d", - "aad": "828460e6d16c1e77b8652202095cf8ae4b8d83955f55942b65b1bed99451498cada58ead954ae3673d5903b8631d64a40204daf616444e029f78a033be64f3804ec215a41668cb6dbd9c2c6f764a4b1d574abbf660fcb1e795abab688d3b0c2174f75b8bf9da7366246c9c387eb46bcd0f1010c783348f616c20263f8ff4828d6f20257414da9a40f51f0c971a", - "msg": "8a4b2864bcabb6ae486be43b693e3832", - "ct": "5c73f0ef54ffa4af3f971d6ec4f22ddc", - "tag": "9a4df0fce79c86418fa9701ca5257fab", - "result": "valid" - }, - { - "tcId": 316, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dddc3b9244c6c1a4fff427a5fd658428", - "iv": "b80fd6f1547baf0803534acc7b546200", - "aad": "e1ca0095230d553c541acf56158fa6a6f36d9ad7b275aaf7cce0f83d7f15a9bbf079f058234102220f5bf6fb3d4cf76b9e59d1ec01a86463eae8992effc59a4a66f4439980e9b4e769c8d6a441241bca65981d39232929620df186db80d28adc0fceab315ea144f5bf1cf6d205de791e238ed96f0716adb3b981d5b8bdab25d35bfdf5b9df84bea2ff0874ab645f", - "msg": "0611b43781a0453c234c4152b8ddab8c", - "ct": "1aa74f3b55a5f792fbbad25f1528360f", - "tag": "af7cc54f99bdd5cb22c60c7d07ad2c17", - "result": "valid" - }, - { - "tcId": 317, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b424ac62081ff66f356920494a472421", - "iv": "1eb80cee6ecd302608fce8883d3bb380", - "aad": "b246ef074b5f4a31164797d14f6229549e2f91b2b25307d23ff3e8893ee141dced3da8067eba1cdd9b1d426c79da33af09955fcd00dd3cda73747595a9e0d3318a5a1ed0e41142af977d8d53a64426ddd1d3a0a7895953989313f5c3a16fcdfe3f457c7532f225acb7558c83e1e58b01c51ddb80e5cbdb2b91dfb6f2b1dab64b82157c6b04f3dc9a5a4bc9a6ec728d", - "msg": "4b3bf1ec50fc341ad488e4e5f838383c", - "ct": "20a389acfe35c118f69ae5be1340f487", - "tag": "8c8e5edba1e6fb7de6e15665674cbfd2", - "result": "valid" - }, - { - "tcId": 318, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bbd341fac6c40503d7e95782d4087bf1", - "iv": "d59143678985bf0f79ffbf208d4bbd8b", - "aad": "71aa4ad53977ae620992c117dcdb7ce6024b4ec6f5927dcb4f1ed5647ccfb9091717e5d1414121aace3db93efed84acca70609d323036dc9e9ef089eb597995876bfee6a1a2cb121160b4a6021c71daa2fc900925fccfdbcbc39c255e8da122548c91003a0c3045a83986a832bb6553d6916ec5fde0cb6b1ecebc16ff9abcab89da3cfa00f8f9131eab3620b7a46b625", - "msg": "5b54a81c65f1bc33c747e0c6e01fbcb6", - "ct": "a7c6c31cef3e2ecbc02682f670ff118f", - "tag": "6a8e4f371a3cf8fde45a2fa2d1267d5c", - "result": "valid" - }, - { - "tcId": 319, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1b693fc6240550dc9f80e043c8d01eca", - "iv": "a6221dfe51b79be592458917bee7e7a3", - "aad": "b0e6321c67ca57268d2ab55cb45ec3ce7d945dad3decf672337acacec5cd95fe7a6cd6a3f0d3e67b1277bc6d6635d1cb8e84e1b68c3bec5bcdec226624cdbc4df3e9c33d63ee2e7a28fc30dc89ab7c52c82b17b3ed85140c1e13c0f6da7da843ba56b102f8a408ab2321f042e59bf13dc3fdc215bec1e1dcff22e14d819bde0d417e6607d54d6329b6eece9d6c2cf04999", - "msg": "b08888acff58a941116c379be7b032ee", - "ct": "5d6c2e8422ba5188b91d5c473c9bf3cf", - "tag": "e9f7e24d62c6bc25e289cf3d86348e9b", - "result": "valid" - }, - { - "tcId": 320, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8def9abfe664f5cec8cbd61461ad8fa2", - "iv": "5af3fdbe7ca86caa4a6b6e6bbd9d1c19", - "aad": "9986e4f6255f5ffab7bbf4ba8e7492c33cd6627b6149daa53d6f9b5536c544bbfda7e85dc564c5711b0b07b66f33f4c683008eb1150e54fe3d18afec0e7de8f69c4691e2d689482bc6fbdd54f18898546b42ea41fff90411535453fb21a2dfc958f555ddec3985c626220d3f83210f1df6288cf9e2a442a09baa5fc65485e19a0f9b65b770bc58dd7bb8197036634d237c41", - "msg": "c32a2ffb5967a868e72a5fd338ac9a59", - "ct": "dd05ffcf5ae84c8d73e1f0e2a44da670", - "tag": "8fc532ac3d5cadc409a4554ff95edb8e", - "result": "valid" - }, - { - "tcId": 321, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1e2c31f026b94b0d4d0223303048ea0b", - "iv": "aa19f1c0663e734eca710253a658273f", - "aad": "3a7eea5a930f2bcf7b4f8676baef8c724512a15b814ea22e0244dfd302a8f01c6b3ea62c567a32e058a7efaa0f1de517d0f08a27668dbdd9545c987850dd33a5a861b6d441cecfad8d68729f76d860f1431b81881e3234b11b76af9351aba2d53531f3f7c1510527028dab793ad64d4c4fe65e122c4638a03ab30507fd2b5114b668f5945f55ab2fae87997e46ce429d1ef83b", - "msg": "d44e0576a78a0581bbdc4fc0b57c5c4b", - "ct": "7a397f9fa3384586c8ab09988a0b92ff", - "tag": "894fcdd2e441e3191c9f7f857bef91f1", - "result": "valid" - }, - { - "tcId": 322, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1e90bf65b7f45d06db3c53776d782778", - "iv": "1a83922ef59c0f66eb120b91e455a76e", - "aad": "490e89c77ee845711d84a1af35c3bbf857dd87916c0e2d9d2177544b4188f7e19ef4380cd13ff5e36d8099973a06091da5620e7f842d42c634aa1c2b4cb918c1e39be3bf4472d87107cd0200abebbc5863d4972d78fcb73e1b5d1b62950e590e139a9a292706579787e48aa5b1f983a4a1e5ea72828002f6e8840a706357d25348dfb284f8dbc24bb8678ba8c7eb402ff0c2e759", - "msg": "06ad3689a3e7a2e8151858ee6f54fde8", - "ct": "3f4b16a317494da542e137d63539d92e", - "tag": "dd221f054e577173de5c2c1b5e5d66a3", - "result": "valid" - }, - { - "tcId": 323, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "80a7d59bbac5c88deacee6afb8459fe5", - "iv": "72599c672f59d1f8e3378a4bfcd53ca6", - "aad": "3d14cdc8810ed979182d330aa0e690dad9de71f01a8bf0bc89d5f184827a1d54ad99761297725d349770d138cedaef5f248d9a832833fbd7c283840e9e648804332f9af922adab0b42c31d6f0fa37858adb9830bdffef96c7699402ebe8d1b47accfc16cfa83d7fe7cfd26e8bdaa78a4c63e1c3817fcbbf1f8ccdb9f986c1890df0690a2d1d73a4f6d1a9390c7945dbc8a24d527a3", - "msg": "17e80af0681cc472d2870aa77d4b75ee", - "ct": "35a68daf41859137fca84e82f69d9a41", - "tag": "8c320c17397e449c5cb883f01ac22f5d", - "result": "valid" - }, - { - "tcId": 324, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8123fe8f804d4815d96a8fd4f5c48826", - "iv": "1852c25463630ff3871c22851d519880", - "aad": "69d3204a9da32aaa3d883f9a66f5e5e001e80d90a60e1269ab29a44e56329b06322033ffb024c06366f605f56006b86151a9fc32fd2dbd231c3489ae26e6312f18125f7d724760139177f575a4af4c52a403b2d9fa3723b3ffec601c9e1199c52cb69b949b8403461447ff80d787fc85acf0a67f8820f41e08f744568478c05ee5556cd1b704ec2bb32afe84eef78df38a9438b3955e", - "msg": "329c616a266a28bbc880f94044b14249", - "ct": "ea13050d4fa3e00867b4f6a045783212", - "tag": "6242f216077f10e103c1953371d76178", - "result": "valid" - }, - { - "tcId": 325, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7b30ba25b3ef4ad985cd960641fceb1a", - "iv": "cf901600092c610c7178495da0528c2d", - "aad": "5c356777f1ada391de748578ff4214acfa3013111901375585a71738118c73c19b4bb412215d84f75b9fe0c39e53efccf46be0c5093b1de4af0d8a9782a5da262b472eb919717bfae53c549edcab8fb2a69a17aebaf911b0d6b54390685c3a1b57899e6b9f699c3dcb16ba5aa0a41e39fb764ea816beb94f8f4add1628195db80a2072155257ea4e6f615dc8cb11301b82abdb39633b59", - "msg": "7df6ce3bdd26579cc8b5a9f6d43031fc", - "ct": "429ef8c64be960968b6b2878ea56e452", - "tag": "6400f7fb63819a8de5113f9935302b4f", - "result": "valid" - }, - { - "tcId": 326, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6a93e4ae7ab5ffad16669fd2ea9cc06f", - "iv": "913bb7d631cdab7057090028b96fdcad", - "aad": "ac1f180e21f96592ff71d37c8f7e292acba4ae42005024b326782d2e361011f3254087d93d3950a4799e77e46430531866f9032092b644ace97baaf937732c1a996c558c1cb88144c660b4b092bc10ba1d3a4ea288fb922bc724f2851d8856ab5ff00a023e23b0977efada42216239cf0b497c932d4fff09badd6a75acffbf628a5027bd5885d551145770a7fe86f6ff934dd466b7cc674b", - "msg": "29fb0d7bb1fe03568fe128d6dae0eba0", - "ct": "6fcdaa3fca62c7ed187f18c99f53551f", - "tag": "3fe68b775f1d6771834075102d3fc4dc", - "result": "valid" - }, - { - "tcId": 327, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "19ab16f77c0b9dc273c433ac7fa3f392", - "iv": "0555c1126e0fc7b5872ee2f68410c23a", - "aad": "47f0ece389f9bbac30ac41819175b035512f4b277b9468d6714142cc4aa95d142b2d4955f0afba266be277c4af3672678766d00bf938c69acf6ad3e012583568acf4a313e54fec9903dc9a6f9bb361448e44b6bf3b13b4d7f06c4974ecf986a3e5045737434417632ea9d863fa5c623b5581564a895b639f57593dd9cd6921f8138937ec5fc1ca8cb0357dbfd2652f2745fd01113825a088e8", - "msg": "0bd99d291104b4807d258304d1b8b790", - "ct": "c97ff457681a19c19df9b6354b8d8cb4", - "tag": "5391a2c4677987aacc5a381fc8571a4a", - "result": "valid" - }, - { - "tcId": 328, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "de8915fe0ac35aaae673c35c269cc54f", - "iv": "824647f4feb9a4392d33109a8f890c3f", - "aad": "6682859ae05e018aa1ccb3edf48dbe56c504f65595babd26bbd4bb498da3373fae8e2c3c25cbbb9ce102339f614ad4fabcd380ea15368a2f3e935ec46e1370517d4386be57b87555c608f7f3d83432e375b6926e4fbb4366d38748fb35112cb079cbe9c5150c55c5835b662a11d9997555a1d96ad367c61928bf1fcecbcf0b30f74a2105db136730cc5dd3946f079c541b74b353e4523508cd2c", - "msg": "712da41d313a3e7ca263f253826d9784", - "ct": "f803fee6160416b6494945ba8b582322", - "tag": "51b9819bfe96f42b53fde6e8ad51b359", - "result": "valid" - }, - { - "tcId": 329, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6c9c793690658d9ca2191cf2b470a37d", - "iv": "83f78a04c51a9f2ea98f3566ba9f16cb", - "aad": "f25fd157202d34fc2ad5c31c00886b9347e3e7b39ac956c17d09115d0a799a868e1d984b59578b195d184515ccc6e8e9daffb51cc93c3fe44a229bc637d52529ea81a58b95b770ea837a791d1322ae484f74ff2ce959122788567f03d3b35e1cfcc619b1acef5ce24f3bed5eaff08ff450c1fea2fcacf7e343bd55fd51a22a6282c465e5a6bd0fe18b9e5f4297e3222c1587f0d4ae6d41fff69b22", - "msg": "5473157d4acdcb4884b8baa8093f6837", - "ct": "a1245704cf7e1386fbb38d8601115e1c", - "tag": "6f6dee1ec428fa4f99cb6da6645f4469", - "result": "valid" - }, - { - "tcId": 330, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4dcf4012c8e3858669468b4be1b5f0d5", - "iv": "0f69f981cceed8e3be355d4b0965ccde", - "aad": "635fd87413ca2d1cd11812d41b426f2f9d99aa0dd9ba9a5a1c6477134e26b0e189c13deb89f185384bfbdb7dc86f10d8ad576764d8c67587f3591ac42691dbe012a13b08cca70af2df85426b661a8163bcea55d686dfc8dc2a1cb9c040ff105c0123e8090ebfa9b4536a2660101e98ad59e0eb6f2ece4d378a923c80e633b938d14afd069836b5aefebff86bd74c77dd6811fe03e201a135e2ff8e18", - "msg": "b073163d0ff139d11359731eab8e4e1a", - "ct": "ec8bf3e3d355a2ec91b35f63b56c7c3a", - "tag": "3c47dd2ad211a8ee0f37d3620e576a09", - "result": "valid" - }, - { - "tcId": 331, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5e328e294da9640dfeba94d1e15a6dee", - "iv": "190d0df80df400ace54b0b6048b8fcdb", - "aad": "ba9c3b1738c8d06b02b4d6623806ca2f02c935814ba415636c3aa8b8ff04df910bafe1ca542d7a6d207f4218d343428079eaea2d1b7e12ee2ddffa2753c7ee56f8c43fe56761752202d096d9275ec064039d968112b0a50cd8fc1c3bec8e1a96dc94e19efe62a0971172cb32dd55a4f46a6fd6c0798096d167a4ba3fe93aa6e2f7999d94f706ca2ae99a739afbe542202bff196ecbccf7ecbc8e9c527c", - "msg": "306cf50c0200f62eb704b5cb2b19c304", - "ct": "1f3fd0ffc80f2dbb3e8a6bda31fac458", - "tag": "ba8fc1ec7ba28db51b1bad680f6ac49a", - "result": "valid" - }, - { - "tcId": 332, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "523b8f2922aa9b9eb90fc1f236294d0e", - "iv": "1a549f132e38d5ee805b43f238361729", - "aad": "b4a764f884cb104fcbf8eb5827d62ad70c138b042e9310b77914a85e11c8dc87d9e7d4b7f8ad3deead0ee652e01d41573d8c4db60914db20be5d535719c789051753f749cd26fb43daa371c4d7b52523ffce70e65d953692c45fc38348201ef810d149859cf6b1a7f34100831daec0bfd525e1000395307cedb4a75a5bed4b2c43a74050afa011dba3527c1346bfa1aa282ba72255cc00c124ffa4583468", - "msg": "6f244f28a554627203fab2ac8687d925", - "ct": "68894d927335954febf0c735600a0555", - "tag": "72814d7929a789ef9332850017c1cc43", - "result": "valid" - }, - { - "tcId": 333, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bf5fa9bbcc5acc1a22583630311d93a2", - "iv": "cb5faaa9aabf6dda7088e3e33c865bd0", - "aad": "f3356cbdfe133a70ed44b20299eda7647ce488f67ca75d27e40c4f5ebd9fff16e2dc872870596fe9fe8acafcc4a4e9232dafa8d52453335815aff98e4b34552bf309cf3fa8097b4aec2fdbd8f22cbf557f420fbb620120c5aaba089fec3fb7256e4ed7ed0387e3950a63766050e8dc6249abb840b47e60e081ba693b8b75765d9abee49cd29f7ab9152dc6e42e089165449dfeb1ab0b2634a77dbab5dd7c82", - "msg": "e6abcb6501ef975173bd35661bc185cb", - "ct": "68b424bf0c6c9c5cb6fc25f793dcc250", - "tag": "75c3f342540468ec10f9cf6f65de566c", - "result": "valid" - }, - { - "tcId": 334, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1bcf64662e7878e29a285fdac5b8e820", - "iv": "f1a20b6aca5e8729c8f257f91b619f00", - "aad": "369ae99a377642d63fe1015159904b4191c536ff139ddecf51521586b9d33b3d6f4aad91180651b7125d04b9c4d6c4650346621f3393dde9e1ad918f3b6ac2281200be1343a65eaa3e2c5e6f33503ef8fed0e54bdae83dd625474f051a7a38358214b889ef63f18f5484fd629ef79259f573394fb4f234d16a1d0ccc1d863c1ffd2476df09f4e5fc089df7fcb6c27c8da7e1eee8c35ebdac8c88348c9abbaf7b", - "msg": "b37ffdb71616ce0c76bbff81be04b4b5", - "ct": "e59a31ec8568a9372f8830fda02d4671", - "tag": "9f30946fb569470a13ef02589b650686", - "result": "valid" - }, - { - "tcId": 335, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5bc04ef73d7b1c38030065083620fd1f", - "iv": "761d0d59af458af63a7ef4890796f187", - "aad": "bcb136faa01342d974c2188aa5daeea63ee723e9b57b4d58704271dac7d8e5da1ffa779c48908ca8249768265275963a5f6cb45a2b9d08e462b952da677072ae7970f81ec0a84b5f80927c695dbe0fcb4104098656fd2bf802aea0ab6731dd8e703461a3f6d1a1a05c7f91117c80091086e85ffabafd37644d1342744b56971d8f92378ae5a159a4cc3e2df3688238878afc8fafedde7047513bcb0ca50eb13d90", - "msg": "e1cb8fbfc7529953b3000ee42afd4e6b", - "ct": "94b3c602af31b0a5d1f689cd6945ea33", - "tag": "530d9251d78b6fbf4c9c1a9be9abfd93", - "result": "valid" - }, - { - "tcId": 336, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d9c7c80541cd3b8d78ed9d620f09bcaf", - "iv": "6b8215e09279d3ba0c38b2b13e06c795", - "aad": "", - "msg": "ccd4f1b56df59f10a6e6bd462233ef895bf345944ea50f53e5aacc34dbfc02fe2c6d2d2b1ec957e6cd5d3243e71dab6cba5d7013c17e01a2016094531386c55a77a42aaec745e45c9c40c43062058bde0991f5eb789c492f3a06eed43711a6409cfa72a8165374c1a5e4ecb14519f64084e7e79f1dabb04b92544dab3d8ee12118d28628b896d642e897f45279a8736e1d1740bef6ea32112136dac978919ef8ae52ba9da705291ad31af1b0b648a8c4e01431efc4603f1d9d3af8b29f2f87a88df27795ae406883af496309c3819e7538138187bf647f21657c3e88a73679", - "ct": "fb1051a33f43ad50506e7e5b485d9dc21ebcd9c3126747465e3724909b58572d4b6f34c2da2d60d9dd73ee3dc532657e639a2f0524c42a8bf9e255a5cba312e4b747f746399db6be86a083c804158deff609ab27a6458d01b8c63e367fb62622795e8126a8ee90707ccb913f8e5943d8dcdb04022f82badad1ce4448342c780f911c2d53061ebab8c5e2527eca85eb423f98e53a39cf3d7369789b73c171bedfe93a048833b6f1dd26ffd45398907c24ebe0a1be06be57bcf7f0b22c280fe3c99eee321d9c38a95225c3c7f9a1ac50fbb1ba757e5667e347f0d682ff6156eb", - "tag": "8ac33bb24569d23bfcaacd671596c9f7", - "result": "valid" - }, - { - "tcId": 337, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "07fcd296e4f6e35489f664f6a8bddd67", - "iv": "dd192afcae1fe4ee1ce21bc3fc6d24d5", - "aad": "", - "msg": "649ab52a087f3b4eacb40080227ddebc7e0e65b7cdfbbd287761557aa8fa75f13d62c8f1b1076483c8a43bbdbc46db2e800da881fd8ace348acfeac203c8b7945010776389486f9c359cda19abe113c831d6a48ebc0ca78e8cd65e0fd49956a65896f4a3a4117803ea435a0dbbd4a4cdb4b6c7156ba6d71961f80828facae66a56caa89a6b677b2b023e066d6ab39f4f4546705004923666c6997c18523341a9c1bdba7979203de53ddc5c535ee75f8fd5c25bb6c5657f9a82026c8a836d164ef207135f61e99e5db22f0a8c909580dc42a986b2c8e6336527fe747e43f4eda4", - "ct": "f905cc039106257afddd25ee63684de5e8e28090e870bf64a84bd3234826300588f445ff30b73c3efcdd26544d22a5842d82e1f92327d90cc13d763b2dd4460ab2e03ab239fa0b6eb384c7a81f145334efdd0a4fc14e6e05ae1f3f44e56e4679a2bb545a2df9b45822fdcc784ea650e2f9cbaa507ce8c15ba494dc9b3b03e133886d712b41f7e7bf296412c66b681aa5dec9c0b087a10856a4a6aa74bd0840a96e64560570db5c16dc01b8cbd424e6854bca9cc23f2742211b4e8d7f65b2b670002b04604912f642453a0976843ad456b49f492f1164ffc3fd63164783fbd586", - "tag": "e147da58890630db87843f7d0777d5a4", - "result": "valid" - }, - { - "tcId": 338, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "535144acdde813935f89c39107e52f7e", - "iv": "e93e6c78dd22c3f9751086f5f95e85da", - "aad": "", - "msg": "074ee55677e563df595d4efadc2d43de0ffe5705dba0fafa1a395b22cff8fa9429a15cf2a00a76f27614b1f62d1e03f92a75d0c55dc4fc8bb85d56e8cf61ee0434c52a817b4374dc15d760a76d71a121fc91d4659d543b1f0d862c4c6238b2eab7956529f78b6070607f3f4aa904c17ddf7d1d8f2c4acd4c33be2d34469f98cc3391de33a17f50ce9a13b547e06ce24579350ae807d520d5477c67bb621171eb033fbf70d6b28b679f3b325be9b2f49848b82f5186bec4af1419f80bb3169b33cf28eebd867504062bfe2a188a0eaf4bed9b07d0af22c614595ad85feb3f96468b", - "ct": "726f3951d2a457e09e2d8fd83150083b817ed119278e7d14f4d131b436b51a07a114ce89073d5bb8110d68047710ebd9bb108f2b983fe61efb18b1ba590417bb7a01eab307a9f3556b4f8fdd3cddc978ccf4eca6d98efd3fd0065de3cb52dfef9eb26a893055e1625322ebd951f13b9e5ea175773341ee12d5d0238e05417625214721ffe24bce087359b342983873320cdc7690edd96b689adae34eb2407ae7c873d603ba854b20066a24a69bd4806a0f35466e53ab6404d5f32a3b93ea25e5b704cffe4f2d543903104f955cfc5fab93999be744d2cdaf2a3365bd96cded9c15", - "tag": "eaebebf53024d15933bd2b27576a0de8", - "result": "valid" - }, - { - "tcId": 339, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "44913704b80f04aba2011b9082189d84", - "iv": "9fdd7d936ed848ec4e3fa5b2d5cde32b", - "aad": "", - "msg": "5f253e6eaa3807c71cc18fdaedd91cf6e579d53bcb790212abe99f86930b35699dd821a66ad1e2bd43696aff0221d6bb5580c9be21940eda4c8daf0a7bacf2382baf1fa3f433bb119a58b6c776e849cdcee19ac574d372c3cd069dc7767662ad0146f127685480bb22e3a9489f20c4e1e1d30bc948f2ae7ba99c51474761dd8bb1a392c77f103d1ffb3cd964eb9d4f175eb1ef910dd38a2b8c2b802bae4020963cfa3f6badc1f83bfd6b22020fcb8450f0060b8796e125d8c95d6e6539b746512cd1722061099274614a00ae9f8310ac4fb366a33001670ca783b2c27ff08b115f39fddcf2d950eeb66c86764f28ebe04b8a9df098401fc1a71c78ec3a8f50", - "ct": "a13013b238df9b3cdd32a4b7fa49cfd537543bb8ebb68be4b579b70822892e6edf19d9257c28892868645c036305d025d090a8cca0a1824efde9ceb16f54688022845eb5130878d791ace41f566d397f2d475fd50632a789a8bf7e0814827d45463b049c649038d0c9b3b296c33ffbbc22eb9f54bd1f673932bb52ab504e267608234932d8b0c950b05ee739680a1fc7e28e38f352c27aafbb786670b65f238a4b57a837974967d7fb5ad0a0cf24e6ec6202f7ebc2a983ad5f5b99c213a23687ec731e7f4ef60ea8da4891c1b2be5db37063b386f716b4dc657b14ffab54dd1001147f7c530ff4acac9834f97ea3ae6dfadcd9c0a13a183d936bafe4ac01c2", - "tag": "0be8bb1f9b69d4a75868d03edc8019c5", - "result": "valid" - }, - { - "tcId": 340, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e822e775b394a0eff18ba3a1ad3e3a1a", - "iv": "764c26f0154b4d1a976290dec8f0bfd0", - "aad": "", - "msg": "8dbeb4784d62a4a24afe19f572d97958a0bf674cc665481aad9cf1b1e68c6a6aa7ff724e453e99a08ae29d52ccdc29e4d30c8ea3955c98d38aaa3e78e7012aea23c40248329221308ccfed6b6bbcc8e922b96ddfb93bff859f7c03baaf470ad716117b7e812b15452cd1347229a252bf75533576da0b464f288363c8781247bb2e4b3030f65f62290d82fc6abaf49130056069dccde8e5967274f780911290486290b0745007f249ac68e4877ec14db40b906f29899d266c3b4fbca820e8d34a58182bfba00e0ad1301f274dc3ccfb687c3a2ab0d333ef6ea5e743bc9e8905ab520f7280ad1b421bf30c88904f921b79318545a02aa28d5830cf6f595139290a", - "ct": "34afa447bf5de666e278b4784e1ef787a307c188ee3832c0e025852017edb508f36df40ce8292b92fd48595bcf44e1dc9ca9992bc091b8df98cd0dc6af1d10f2cddb399506b5c0dc58f99e9624269e3aaf3e901d121cac8b45a9ae17251a4657e1423542aa215fec93c7fa9dc11a47943249cf9b9da1f5f8067ebb9be434aa04706539e7cdad49b2129d641423f3a6b32d8c596577d36289c2f59cdb236af6d708c7d62be5ba4e54649b6924bbaa9a239675b94fc44a371566f25331a71e8e3cef3966ca2b2f7f1cbcacf228610b8208742bc9c93c1ce46a66399833a172f12f04e1c697914475c8de636badcfd21bdca299b9c5bd82696e27d7c6c8fd848cf5", - "tag": "2a053396e73b84c8f657140e108b5805", - "result": "valid" - }, - { - "tcId": 341, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a5ef259dd8a39e15258fcf5b5321f115", - "iv": "a9f045e44d8ea532132eda1473ed661b", - "aad": "", - "msg": "4d6ad67101fbac8fe80f02ecb5be31f36c7617286359cd8c46cd12a9d7f522caf8e46a0365412928a44a027f29bfc8c68155418f887954fe08e7e0a5e8a70a8a605003f6c98ac7186d60bf8305074c65477743806124d2bfba075bbad5d985b491f404337c8ede87a0c7221f4976272be6cebb30c3f7a57b0ac49969a065dce47c351c5780b750416663d6b4467c92aded43f36ac954c4e32584cba66d2ab03cbccdd56c4e0a5c77c35cdc7d64acc66c1aaf2091143afaa84f4f20e0fc57a65c6fcb6209ea116c10f4c1030b5c45891d492a232c2c024659663387bee9583c99c1014f8e21355d2e05e1e9d4ac23d94004654c40d4513cf1be46f41b47186ff383", - "ct": "71d3acf2e576636cd6e0d6a9e3f344b63691f8478501a06e8bc8ddf2b4e390170739a4d1cf14dc1f8824743b33371a478b82611e433e9f13bd79f983e9576e5db3a5eb8e022838bbea14250cf522a5e1ad248e39da5970646d758936291a032fcca6ee032c44c6e804c0301b6da54993a23112c51a26e34d2435b5722af56455f49b8cf0ab74dae1eeb8765cd4d057397c0d2dcfb5d4a9fa8c73bb337fb8dda15095c24f939757af9b5bc2d946f2f73cb49f3fff05b3ca81c0b383b5ea4dee1e82f20adfbe86d0e6f93345fae1e4d20f359e6ce2293d7cdeb66acfacd9e8cc83d8534c0f02dba171fc33ef5b5c103f1ef33a7dcb9383be6153cd32be00b4e7986c", - "tag": "3822fe60f0f6d117a29c93860f9c6769", - "result": "valid" - }, - { - "tcId": 342, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7c0759ec1f357053fa34d0dea02234e2", - "iv": "234af67bd22b228b9c0e7520b8712d3f", - "aad": "", - "msg": "34ad7677bb08195920b6115ea22cdc77fe4bd33d596bfe70d966826dd20607239293e1b884ce4e76692d5373d829babd5ca72942603edec473cbe30880d162eecc041f961939742e2893ee7f9b70339055e11725c50d32e432876e0f214a603f2c47c6ac6f50c26db3880a14e74f6a6cf66afa1d3040d06cb8df4baa358f54ce09942756f380b33d9508e6b1562d52e219aee7f51979329e51f2b8dd8307b070ab798927c60b8fb1596f6726baf6f5b0cfa020173be2e36c75d742343d0fb9cb2896b4e568c0ce98bcc4e157caaf7849a8ec90cae83597eb0abcf3e48b9b6b95e24a5cfe1aa1144c4bb990899ed552a375b30b7d3d28142d04b9e366be1cdeb9ff8b08e6e9d16f3634fcdaa3c75fca5b9117d152d259a6e128accee3ba1e84f800bd15bad6434ee6072e003392f56c504c249b2d6134d2195860947d1d2d5c5538994ad98011e8b24599731fb35d4b8196eb0cb433eec842983dc4c8817818ee80f6d419de4757eb31508106e5baa956fcd16f7df0a772ff074afd6010b570d5f14e59e5b28b43e6491b70746b702f57020b613380d32ba288962885db82e7e6c3110213a42309fb182890b67a9f87f9fd923c544920067a25aa831ae22dde9a0f13dc138f4bb28c1e48b469668f48f6b3827874f15e4827c33e35b8957a03e257cc72a8f3e6a975c658c45251e9a726447bca4d4e0124fcb72af3e8d545d4", - "ct": "d54e163ac62fd13d2f6ba99771006d2e9d79fafd73823db74ecaa5a89fade529977c76d08c6e4dbceddc1abb0a0d8eea93a91b5603af7da2f80fee935268e7b4cbaf105c88e2c5dd4c8c861beb77b1ae2b6ded053c3de79a8657fdfafef1c5c1276741c08a65e080390e8a342ee4581287bf00f9c28e081b2cc1ad91ff645ef1aa53d2bd60168dd9af3f894afee03364da60447afb7691c945feac7b26f0bd85d28121701d25ab9b8d7c333c0a76b648ece8be752d1779287fe5adedcfeed7b7b42de5355b6527c779b699190c8b85968e078163fe7b4debd5035b04d815aefe6bd9a86e8043fd8f96aa3771ac5a70f7a57063c602131b3cc70a8f44b39faed80bcb60a27efde95b284ff40d6785eaeba30669b44419cd6601a6e5f65559827f3ab60285204614e8dabedc2558db731fe9d296b54b790f0209740ad851d0c99ac5a46a3ffd75bd573a10e0d453f3ec0b6d68b16e7012f8c8c32d7734216d3a0503a174e27533b6366925da64ac5e96cc2a7a292cb6dcd0fed44be5abe64b57245a97594c23b0babcd382eb01b5a1637a0c703f5852e443d54534f8df7c0938c5750ad7a827ea6f6e2abed15458fde1549c16e2be8eb3cce918507fe718b625ec561f15ea0351f35e7dc7628358d03104f30cdbac8231ca08002745a3385d3bf9dfa988796c65c776a116525410fbb6ee38ddc87b827f255b9c699d51ef4340", - "tag": "d20b27acb682ccc758fd9ac1637a1eb5", - "result": "valid" - }, - { - "tcId": 343, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e6de2b91e0f8f0be0520abff7e6e6a9e", - "iv": "98a14296d860e43049bb4ac8ae3de9f8", - "aad": "", - "msg": "7fbd582d4ec3042b24ce083e5ab5f2a27eeea2ba7ded0f6fab68601b0ca0f7ef2226a616fffb50e2d42796e60f7a5d561b87ab5ddd0350e121938884e146f8990572802634e583e85d1a10d08d7acbcfaf21e5dc74f505d3a277018574365b4e29dbed441dec549d5944a1a645ec8bc085041aa21d43c38d9c1d875888bc5a672003b5ec7b4985777902f9caecd246f7fe868a8c2288b8b6416b2569873caecc63990745ad708b7b9948bc145b54a12656c21eb3abf0e63676ee53b4f4137a4bf7487b273b36ea3208c05f6eb17531e6756231fdddd96ed384c933d666940888006d13e7e77af31e7c0ca375ece11fe62d267e8a24fa980e00b2fc1b7b206f11fe4787db526a9d44a3986d21e432675940fddd070b1a9de77e127d1811e3a3a52f9ce7c748110ae769597825d42fb8e8969a5d41c7dd82f296a80726cfdaec3d2be12aee4a421b6023a89376d8aeccc973f4e2a4662ff5fcfc2ca27e4319d9f4392193699cea73a3584bdcbdd594a5cd4a3dea76c5f9bda7c7e02eacd1fb68c7575c8f13e1592fbe44f1cdeba54da8dea589e35098032218d5f150dd6e3acbb98238f6ae6fe02d9f404c510cea48d287dc565a6e8dd6fea853800792119109fc18fced4b7afe9ba0b090d866fccfbc394abebbe95b919af373775696c3b932ad710c2b10e44b93a68266d0f323d5c1c0c539d197bcb3662d77a4f56e5cc34013", - "ct": "95f76902f0f39ff9f03d0ebf1240ffc4eed3118aaf6d27129b76e96df2bfd65c45ad57921a86e188fb53ade7c1750785dfd9e539632f1c4547b546af729693defa6ed50fa260b9514fa74df63c9c69d7ac3e97df1d8ac9401043af5956786a7c2b95e9c8a0cf30d059cf93c6a3a3cc2247131154ec35c7ac336cf5400184804a676de61b359b610fc3875d1862e5053668197ab763c766dfeb1638a0694fd9525aff196567e0ee0046c0633bc92f3b51a3058bbeb4a9c15fd4bd3dfa883ecc45e6f3169c02d002de2bcb360f493de3b4e9467b716fc50f229701ea43cc4cba76fdb373c8c94844a5d760968bf9f20f57a5cd1a03b1e8a8f162e83ee85b4c772effadbf6d1b1ddec0ebc570e82a725e507dc3abb9fb0d60d4c7f38556332db4921199e542e21db5298c102748d075f4022bad656ec642111bc685013aa3b059ac10a758fabe2767427d465198058b3093997b6bde919767ce793878354e2f9afe6db9878800d485a2d3f99ad4da2c44bf7128622cf94b41c9536f506e0af441e7b8bc149b4c0f7075601f56af4402d7ae3839ade015efb86556086c98b1a7f72389893bc90144abb6cc969523c9990bc1375975bb297c6175eb415f28dadd4549996ca52fc49c2a3801d5558f190ac5220901d7763ed4a6736810fb5b0a23f6edd72b97623594a930c88003af4f5619f3470ad89c7e25d4848a8489bca344427d", - "tag": "c45443f81eccd401877abe62aff817c8", - "result": "valid" - }, - { - "tcId": 344, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ee32200498ad531202c3ba6acdddaf96", - "iv": "ee9f8b1adca434d7f478cfc37d7a5c35", - "aad": "", - "msg": "af96a4aad89bf10edb5875077b0649e21faf8d8082b1e361bbe35383c39c496c28c43877da683dfc318b1b1c6530e711d1e65f24b6a20620b2208ddc7e80b9358d3ef550dfdf6cf86829cae6d0d1d379ae92e9f194608503065640292ce77704b4555522cd89346a1129f6c96aae5c5770dd312d739520c5fb2f27c5dbc1be266056e62ea3451d0175acf40e1c2b98b7f9719138f8cfa51263e26071a0bd0331334f12bce289529e99d032f8ff2d0036dafaae9b6e70786343a8548a12bef914851d8a3c765b3df2256b628e938487c9d7b67303858f2f5d2518e704f121a0191db5772c4cc3b4b4ff1c0bc5ff1cb5c8c11193227739e659fc2e503e6362e8efc84b5565046004fec998d3601594e9a2c7260b92c85dd8f2b7177f7c7f3e3d88a259d0a5f185a28ed81e8728075f535617549b420abc0efbdd3e7c918e64ec6243793657bf8df28d492c84f1868c53caff70663d1bda5a419b2512b1313b02240b7a148fc8def0cf7d9fe9957306b68480f16abc080eea2436c67be16964032a8aff8cffbc7e217260719e8993f259e010988ada506669c0caceac3d1f0335f1844e606a3a9ceb7cc55c3bab17ecb42d0407d3425f269e7711994d1fbd78d5627779814ea3e6453eaecf27aeb66cf0c406b6919e86417a2e71360a134bfe83d69fc3ff5ea494cd72eefeedb38d1ba15bf04860f80bad89aa662f6a1c80ea73d562", - "ct": "f2796400163b283c5a5fd86c7197c043d7b9f8b51ea1c6c17ff3ae25111009a6ec630d758bf4aa5a37b2564b371f78f53cb7cc7d898037a1d27864afa769c1670e5c6febe05d7439a91d53bd98a2868fb8238cb12a89b2b835c7c767e7404f21964f6716175a2249cc20b791e57602a9cb4487a6c1df3dde263458e493a6e8ab769dde0589c0f0539bba880106c33557ae3b1dfd7ea3903b489f5f32d7da2bc8054d7c28a77ed1192a9d70dba1b94e4c95b0195a23194927b4554288c7c482b99653efa0dabd2e5a31a911238b1b5f9010612e8baf9fad90a8a9adfe259305eeb1ad62f9689a679bf59a17d3f8a4bf31bf8b19c2cdc77fcaff964edaecc024793df74f968e1dc6546d396312602a32ecba240389181c87a60e12fad879df9dac810fab8e34660fd83ad468bcd224e438d7c9f70835a0ab136b7aa82ebcb4de58a07db4f0b69b519252ee0b493901c95f8b16a932e4c4ac3ee7e9a37820f084519c526583f8cd8c5d695216e18d733727c225bd166ec55186d582a8c2d43438ab035d6bcb03bced838a71678779ec6ead487431d952b0b59a5b3a97be7e8f2ed4fabde06fc7b60c2b1e335d1e2eeb2dea0127fb9dfd25fbe4d98a1ca73af195a239dd035798cc13461a96fab6308feff79d9583d3084bdbfb0072273b2f6f28120e4a24eac1451c2d435672e45a7b5fe050ddc527bfef7be9c4ca0946bb800d9b9d", - "tag": "6fe53c0e1f9a6e373cb463e7337a684d", - "result": "valid" - }, - { - "tcId": 345, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7de6f6279470e69905b238aa35e8a8c1", - "iv": "ff5da75e9b889a4ccbdeda4864efed64", - "aad": "53d0767cee959423ba1af3b6497fabab7cfe6f3dcd69c079f0850f99e84e1c821b219afea590f8893a245c0b549142f9f293651cd338d9d771b082350527301a25cf791f4f286ccd9ebdc9ec4bcf78ad2375bc892fe6d99b9f20f7e8f4194360d8e5827ef855dad5108f6c9fdad2a62b13e38a198829db74a72295db84a0e3e5d8f8f16efc915a42628a84fcee6b4fdc68205e089daeeb5647afddbdc4e2aa50a3125904558cd1c00abc36100ee49a73e0e45a5afa5a2fd75007d5976bb2f43e38affd13b8bdbf0792079c1c5b1c73c28d20aa55360b070645f6aa6259fd45", - "msg": "a11b838694f1258c04be6529dea1b2ab43872c3f", - "ct": "a53e9955b50be64fd3c6bd89b247939517cd2df8", - "tag": "64d050448bbe60cb0305bf8f679cd18c", - "result": "valid" - }, - { - "tcId": 346, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a26f5e9dba3fb78c5ebc7e7b825741b9", - "iv": "82afcc9b306334ac4c7c6fa836a9e4d9", - "aad": "1081311c42e0cfa8b8a0281d45840eb6dfe199c1c7a744dd86fb0eab371e80ad2d75a0f8dd0aaf6757024682235322c46720c32440bdc253422aefac82911c24d13a415a4698f1849bb88a049b3b00af30cf6a64c21c620614fc877b50af19b451084d22bef6d78f96b79cf8f66a9d5c041345373953aefc5e387b47e27a6484677d950cd7b24e70118a89d33f113acdb002ee4fff6a7b846eb06e1233de6ce87dcd114fac7b276cbe9e8d69adfc0dbe02da6f75cab8295cad2671e2d66ad77be52723b77c70fe84d73c12b8193b44c51083f01f2ad23ddc6291745b87325689", - "msg": "e376acc27ecbab54cd4d53a6a0cf79ebbab80aa9", - "ct": "3fe42cc6cd4ca9e52b8e29c93bd9260c40ca29ae", - "tag": "23f9abf7bb64357d97943723608a6ce1", - "result": "valid" - }, - { - "tcId": 347, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "89c51324f93611db792387e23a4dc4c0", - "iv": "8a3bdca2942845069887dafb397438ac", - "aad": "295dcbd42ef8f9b8e9c5156c0e4907c52dc057190d69d6a20cb028cf426414ad0bc1fb4fc60bb496f9b66392e2f76c85e36c7db923f29bdbabf8061609195b30b86b87c10e030dffb83355ff58b3683bb6ba564d7a81795883dd2d12bc62b125c4d2a905d5fdcee64b04724f280d2ff11e642ec48a20642cff05a664e7daa35f2c198dd23f8ae4c14543ed1c88bfe35ee3aacba3894e8b24055a9a02d6ff6776dca768800c08b684e76d3770e477fc4f74d051d3e25aa42b243550f697e0725fe0beb3a58eba91bf63d1a4530c2b838fe104e4cad1068e3275511ba1826259fdf8", - "msg": "f56d742cf6585ce4b9d30b2995136e7c79825bfb", - "ct": "0b969171d871b4442cbcecb6f1cbfc61bd0c8a58", - "tag": "6f22e0f5bcdc5a579b5a742455c18697", - "result": "valid" - }, - { - "tcId": 348, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d8c32d15ad40cfea1c7b4107057a9f68", - "iv": "bcdfddd8db9d3af9864f593b478fc13d", - "aad": "f64be641ec17c9c8b4fa6e8d4262a2f560eaeceb9fd8675dbb9299d541fb7e1102d5f28f721839834316f065af28b6924828f020713b3827780aef7c09a897333263425991204fd670e73971b26584121775a2b53822496ac572b97e09e39a6c85abd37d27620a97b723a91c33b2e3018de9cceb04ac6f74fbb74edec469257cde3d05462f72a933ee61ba0d672a57f7988cf53ed42d4d79fe1b250558dc581e32c0516db5b34c5ecbd26c00c22a440e3d717fc1d693574f6b389024d96a8f9b51e79529e65b2a2419037db822d22ea1aa1b06f6e0d2b35a6d251fd3facec761b3c533de660740c3be9194240cd04af0a8186e6a86559e8f268e57d3e68689", - "msg": "e24edfe36db9fe4f1a3f54100cea753071bc158f", - "ct": "5d7714aea1e510b4ce6c2cdf14322ddebe6e30b5", - "tag": "43f04cfd22d99634b13f2cb429da99ef", - "result": "valid" - }, - { - "tcId": 349, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2e5fe7cee9ed9d0434794534cf8bba95", - "iv": "d0092db0a48ce828da7366cb59a70d75", - "aad": "156d04cc05cf4c7279d1a0be27c1888166be18f6a60dedb8d7831ef8aaf496ae0d5d145e537a7a9be4032452e2e535aeaf46574c412010d05e1aca40b5ad18007d09011addc6ff5762b188edae1087790db2a551ca70569c2bc79d6a0e59ed4a3ece86a241dfbbce7272a9c3ffb71002d062996a2130c26cc510b52a155eaa11931a0e0819a4a0ee08e58024e7b1933c9b98a965601ca75b0b135728ec4998746b8ce6922d60adb59d54e0507a154e8c23c2357580e558760e11ce08b7e8d5328258d2574fcbf9469a1890093830bab96e5181125f8d21991ead12bbc218efe5267505220117bd03486e3d67731a0d330d76ca93a3f509f49485a3056c80bedb", - "msg": "c83e9a0ba5909117390a9114225cbc095a50d31a", - "ct": "617b2243ba9a497dca9d8f282fa440cbab56835e", - "tag": "03ff1f6dfa00fe4c91ddc9c261e15897", - "result": "valid" - }, - { - "tcId": 350, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c6847f42588a18ccd89ab3aac2ec7677", - "iv": "6c37fafe6aa081a7a9dc9eaa2e9f0087", - "aad": "a7939cf0e178181373467ef3a9cdbaa37f1af6a45790cbf095370c6a3986f334e22adff062d40d4b52c4b2f333125e8e9dbcfc965167e6df7f4197e48c5952451740cac493ab04d0374457cfd59a0fc0552de18d010c89bc868ece510b4f5e5e5380ea22fdfc66b97f6a254a98d86ccf3b12ed763e37414503f1fa1684f673f2977405dd3b890e18d88ead48ca7953fd263e3313bcf87ef979061573fce49c162ce94bb3a5e4de44178321838bb85978515fd5dd240ca987034d9a94bd52006ad470d1aafa744da082fdc47e858300501b8a5beea62a385ef022cb7daa2d184bdfcb3e126e93a304b86bd13c0472720b9990eca4023b26acc8d22202c0919297a0", - "msg": "cd6819e3bb5d3023973c9be6159672424f62278b", - "ct": "d119125bc170c71dc10c6d16c230346f5fd1d383", - "tag": "f1672f2128af98ff1c939c36ddb65c6c", - "result": "valid" - }, - { - "tcId": 351, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "40289b2058b1bf916ccfc56ac27aa991", - "iv": "8bebd053e6f52f2d1f25a1e8de2fbca5", - "aad": "8cce1be9f7e945d5042bd983066d070bd9fe2e5d2973fba3cc444c43aef2a07c7b55737fa56f653b2f548cf2c34af0c7545ae95b7fc486e68e02ea53ba3c653401b51cdd86f6b1fcd7debf241a8898d8059c9e247f57b580b62b5c95678f41061b4a5ae14185e0145fbfb09ccc62fbf8c6f757f0186320a265988148d5ed0b3d23cb135cd5c811962c5552d8b4c5faf090ff123edc2433d387eb85166f739d59a63c2af0b6d516b2205d610f6fadf8957987cb128537b58c5c200cc0312a621fdbebb4b94e76f65b1a68fff14488e4474e8ce65d54e71f2995482f98f0d4b2a1a7f4baabe301e809fe7b0d846268310538181f8a4c06ee6dcc8c49b30b3e2d16dc1c60b8dc0e84e3ec7b33abb8ac28891dbbffba275b53328346da7b8d4126fd577a8e403b5f7ac5703bcfc1ffe1658d54faf1c43ffb1f80eaade935ab8a19ae4442d0d8022b1ec14b17adb65e92544c2ffb87220431583fd7e4a7ac62223ef648c1620a5bbb3ecf5af4d5da10bb786f0a696f7cb61b95f105f5fb2a6fa17ab6bd207befee16463a4a19a1a4acbe35f85a1fb03f6d92aaf12cbfd8ff184f072b5878ec898ff3f76e8c8df1d575a268d4c3012d56aca087cb9e52e7d3428169807d13770a79c8530d560276eb87b89faf13796603656d23014763d2e07ac9b9065cbd96be7c18cc265b75ccb5a923238ed2ee704b0ba67e94f6a991f26b4c5c", - "msg": "524c1e031b2d8bc54c2b5ea1ec64623519e05f81", - "ct": "5560c8e78dfda9af4c9a6811d572b60d7220d16b", - "tag": "c49f4bd90b164807d3eeda89a0217bb2", - "result": "valid" - }, - { - "tcId": 352, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bed7c3c4993d6924c45994a33b3dbb27", - "iv": "4ed0d39364896102ecf4fb05fe3c84d4", - "aad": "281ef9535df6d4213db0b2d00285c423671d2fe486827c1eab29db116abf7aefa99fb1a14860adfc9f6ffff60314ce8403ed242bdbd7fd96575d67ba487b2b7ccc7e96ed57b13ffdcd1c779537c2d08c0709d8ff42a345c9c65a952135ec5e7fe0007c434312ed7545c51016229587c694d03299eedd3ef45bed241c9336a05e12c25a8efb9567585791009413208d6a52ff9e0b182e07d4a55b4f6abf85179debdb763be9d8814e04b1141889d0e8b04c71a3d6dfaadfb0fca47939cbba920a28beb8ccd9d159a80d720d11e81e55a82987997d2a57f8a11c2630e84e32a4a15ed4abb2bd69eb2ee1e2d3cb036b76437208d315e4d146b0817ed3db23113ed5a4b9c0379566633993d892cd51acec9ff6676d40b09f9eb07e25bd2dba9a0841ca19e991e256983d00d384ab0c847cf612ab1a426a529c946615ac6f6393d2dcc12b45d5a2482e649af572f806e3a278e69655955049b674e238cf39e51a28c6bd0255b0c227a2c79403e110e0ffd632898e4c3919aae80d451ee15d4afbeaa32606d8d26b3d67b61cdd3523885b3f9e680376a9a6096ccdc3427f8b966073181386d09ae16e7ccf9f6b878c810dbf84518a505098469dfbd2e9e421e0209d53bfc39b276ec27fd2b8bbf2aedd7ee0b1f3fc885fd38699af70e0be9a35430d12551e08adf8985c7cc1fe22b83ad4c0d6360af4c7c05a0378b7685a7c866d1bd5", - "msg": "775596e0ced0856e6a9deaafde8c8fb51ac6eaeb", - "ct": "435f2def89ed679f6039a0a8b74023d4797e68a6", - "tag": "bdc45db2588b1e7f6bd35d30d1b26715", - "result": "valid" - }, - { - "tcId": 353, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "060df3ba963d8f3cc26689730e3d00fb", - "iv": "9582de1557fb872d99f0b9a9df6bfc2e", - "aad": "6efccd5bc30fd6f7e51548e31fdcda0f345a819500aa86503ab55fc25739304c240121eaac54309ff0c2ddc854ceb25fd155b2cb089562a9c009894822c13e185c1c1e2283c40033d15162a05bb06fb2b28ebc2413b077c803bae63a12e4ea21744bd5a01a8fe3742183aeb2ec058436f15199f1c2f323cfa1dbf4801e821798fb46e7312d8e8b776dadfc2ccdcc7e8af6cc4f011b60da695f0ddeb63667a577cc83d62cb25dfa75fe7aadc3d23dea17e90aba772441ca7680186853243ea1051099b250e4363c7f5296b7a95162788a2e743804d71d108ab0dd10affa422c56047a453491860f7f85569adc0aca7db0adf0a958d03941e37c1ba6b813e497903565a7dd3afd22018f690f05494e52a763072fee71f3cc1dbcd033baad9f60526baa2ab198429d1f12b20baa35dfbccf2a1d0e0e4955677839c5f0ddf96379066abf5e8b071129116d5fe4f69d8a900f9f846fd5341412ba78d4f66af34ecf0fb317a63dfdb0a09c7fa3aa0b4e8493cbe02db52689792bc7f60ff60a4921a96f3a36540ff3defc7c2a2bf8858474d9af8866cf7a71215fa4314b451810f4ce5e360a9c961bec3b9b43e7b6c7f2890a9cf64234e150f2a7076b2c229e077d35571722d48de93fdcc26e0bf1d3aa0a8d043fab6ff72daa49a931056d1428130210c0d08713d03aa1f3f755470a0f20e1d2707106c1b1b7ab73aed20e08746ab36b52", - "msg": "637ded31dc35fa04d7f735c3cebf7ae5bc649696", - "ct": "36444a04c1af73f7ba8bf4fd465cfd8eb3bf330f", - "tag": "b64f4768813c61b24c7aabd4442d03a5", - "result": "valid" - }, - { - "tcId": 354, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b10c5db54046f0dade37205a95884045", - "iv": "595acc59b511863451a5ac301fa601ce", - "aad": "7f0f15b09932e5cff738d57938544b678450817c8dd433f22923e8188480b93394b8f1136fecf85ff604129699bb2326cfdca26cc65c3ef2b1e72d864d178b", - "msg": "851eea75f819b3c4009bbb6831551c48b43b81c22832fdecd34346806dd3a638fd5b8c3981633dfe9e3165387ae6e3e70015c0fc8c8c654ed3e7f874490223", - "ct": "7478e47d77b841751458979de7435d89ade4cb8030824f483b14878d071e999b35da7be913344af52ed3ea699e4126763f73172d1731c688f7259feeab7d46", - "tag": "027c856f579866d92a4f0b85a7d4bc2d", - "result": "valid" - }, - { - "tcId": 355, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3f529b117ed1700b6d806433a6253f00", - "iv": "012e78545995229901d298a635e6c9a5", - "aad": "6b1036d2d95876c1c0cb8c6ab3a1d7337b5c87a6e053375aa36c320db87c5e4add53e6adc8eb6246eb25bb8fb84ab94d063499aa40c7d26d811da5be96227cf0", - "msg": "058650e9450a641c614a9e1250743a8a015a5fb139abfcd6c5660f1faef876ff99ee1cf19ef026a30235473974df15a80ac245002f0ca2a5016f9e6db0596b", - "ct": "32703bfbf7e4be042ee9c0a53526968a7956a532cac30f85fa570f8e620bd86cde803122242d4b2776f690edd4243f997bd564bb89613996b35800420416b8", - "tag": "c771ffd1ab9c856a508b2e53ee2adb7d", - "result": "valid" - }, - { - "tcId": 356, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4b24b9bcaef4f6a45c45a88467220a46", - "iv": "88587331d4c7b05af49e8476aae70289", - "aad": "a947cc2e290460ca7dcd21d258c9747b819a725e64d9c5f6504ce32fd9db2aef89222c8f8db809c15d01d56dcaa2a4894d354337adc4b621b712b54ae9e0dfb8d7", - "msg": "a42056d5f7de17b0d51b442e7c97530c98a24df5a59feda36cb6ee3e2dbad26c388e5203fdf201b3ecda73403aa9cf8c78a7d3b3f2547c327f87257dc7fdfa", - "ct": "69499427a62cdb94c3995f9f9d01fd33d8cfb7455de4296f19ce467dd6191a873803ed86b08f932347f033ab5a88f800d33d367032b4f8ed3a1ffbf0ef3130", - "tag": "a12af9eee931d961c1c02b3dd171ef1d", - "result": "valid" - }, - { - "tcId": 357, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "35dc63165b92f7aa1138a1c7b4de79ad", - "iv": "e5e223d520e59c081b92476ff4dc2791", - "aad": "44051f89a9827f26de2cbda14e4c5ca7be2ef4273998d2a061d25aced4fd48c15b3e48858cb9f96373cefdcbcb8761efcf214dbc420bbedc5df8d95d6b2629", - "msg": "58a3cdb7bbec53aa56a44dc99c126b0f15b311a06120da9feb2b86f2ba01902539e7aa4d49f5d0d2c49a40f3b15e0ae81a942b523fcde062ade4a94ae8e8e02f", - "ct": "5a078a412dc4732e407b9610b76888116d511d33abb33e3a2fd6ff51bb2d55415b6f5593dc4622f4acf12bbee1670c9611630a0d6e5de874c85d2316c93964c3", - "tag": "74bc4081edd726818ce409abffaad9e1", - "result": "valid" - }, - { - "tcId": 358, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c485a693a803e841285b5d4b93305b71", - "iv": "e6afd36bf6b82ce4a26f0b8cfdfd9ee5", - "aad": "0a8396257c8892b3eea8d888aea5b4635fa0dbdfd8513d839f550597e0703cba4b11ca9f6fc56db51147e7c7e0b2e61d111dfe4f19cb3f7510d866741a84e392", - "msg": "e8b06e3d4a5f92a6cdc9874d45b04b7c0543f19b7efb2f06dc4973a248a585d25e5aa4c400fb5063da7661f17fdfbc0b874f22be3221cb2e7f2dba0ba0b452be", - "ct": "dbcc4e42c2048ee06974c46c63d8df3c7949527683c9dbfa8d2f59104ba0f0e9f4cb92384cb1e3a0d790a81cb86c1a6ac8222fb4402ea57fa13420565bb0d205", - "tag": "f4adb262db224e245be3ea4ebd8cc189", - "result": "valid" - }, - { - "tcId": 359, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4a20440d97a8af5e947d1a97b7d6b962", - "iv": "d13e852475bc240cd7e272b3deab5101", - "aad": "49a8760a7c7a793c9e967980016d2ddafe3e2797dc099407b1a95d59dff07f41d0ed9b2fd29a35b7055343155d6a7021b70fb99d8dda1cdd23dac96e580e035b3b", - "msg": "b42700726981b0a636cea845b8d1184e91643f28323b3f3919aaa4a3ce1497f23b7aebecac32e4b048318d153cfeb48c3f0dfb01b0311e9e019396970997df13", - "ct": "02ab333f0f618727957c5dce79212f48d5e21fe8152bb2f0a5bdf81a0d4be3e6b5aea55197d6d0b5f66a4a385c84512d6d8952d3cf45592976203081c095963a", - "tag": "bb665b42b44370a89c383e211e4fdb5b", - "result": "valid" - }, - { - "tcId": 360, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "10434761c932032695680077b75f5b5a", - "iv": "c0f942c9a9d049c3ca9da2ab27edb83f", - "aad": "4c145ba8ea35115d51d7d6eae70601534578508add8ee1470c7697e6f32e8f4282df9fcf981e367342200de89d0d0fe5d13465436bfba3e42ccbf1af57192c", - "msg": "8d179293f45793a6ff3e445420ee0d3e8e4f4d129a595fc576913d2168ffcd0822bbc3a24c1779da0ecd640ce9b74b63b1c65fef3cbfcc3d07b6403363819c7204", - "ct": "d42f89d9b69f9dea1933dd1247538445eb586a3c0dc8ba2176f1ff8ff9a3fba4f5084e48c2f653aabdc5d3910dd3dac66c3e0e82b6adf6322de7f6f78f025850bc", - "tag": "8116a13846fea913b0fbbd33db8e2e45", - "result": "valid" - }, - { - "tcId": 361, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "693b05bd6f612587856f93c68423eb37", - "iv": "285240ead7cf7cca3766ac689201a32e", - "aad": "d15eb2c424e939ddc09a9604cd9d40306436d1d60fbfe1f5cddc3d04b6486ab8e333591a0f9f841451db1b43a8a10a81722a5d3133d45676f47d547dd36110ed", - "msg": "156141cf278da068e725f86c5534a480fb332ea40e1790b6fa9e5975d195e88827dcc86fdba9e1f6561ec17ceb70f9d32ba0643063b7100956aad5b69983b99f9a", - "ct": "1c213d26ff50a25879b7b3052ec54caa3b3d72a9ad21861751ba371899c2d2c97ea80e3d08a02d59bc452bec0e22c06da24cdd2ea80e9016ec3db37f8682c94e38", - "tag": "fea0b65b4ddf87f38fc4cf76c92aa30f", - "result": "valid" - }, - { - "tcId": 362, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8e7541a87de9efd92355c2dd7efdd379", - "iv": "c5093cd6929a528580cfb60d608e1539", - "aad": "a404483bd022c0c87598493932e544bd04b38cf5c981d91df656712919660883d9b3f8b0be0992894e8068d00624177efbb980033e7f541673021bd1686075a38a", - "msg": "40febd259f23619911b5b5542dee089bacb0d2cda413b9fe023d4112a6f50d1bf2d863953075333503b0089b22968cf12f61a52731b6d98ac523aa7928bf59477f", - "ct": "8db3c7a4beea75b9d649cd3fa875f07ab4c3e985783aae2da0fdade4618acd7b3b593a12c4f420666e45521c313ac3570e9e508fbda4084bb1afcf12e19ba11872", - "tag": "7e95255a8c1fd456afd54b6ff96a6c19", - "result": "valid" - }, - { - "tcId": 363, - "comment": "Flipped bit 0 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fd047a573ee9af4210ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 364, - "comment": "Flipped bit 0 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7fb0234127f1c69397ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 365, - "comment": "Flipped bit 0 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5157271f8a35bec8ff490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 366, - "comment": "Flipped bit 0 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2d66a36de6c734aa50730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 367, - "comment": "Flipped bit 1 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fe047a573ee9af4210ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 368, - "comment": "Flipped bit 1 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7cb0234127f1c69397ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 369, - "comment": "Flipped bit 1 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5257271f8a35bec8ff490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 370, - "comment": "Flipped bit 1 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2e66a36de6c734aa50730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 371, - "comment": "Flipped bit 7 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "7c047a573ee9af4210ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 372, - "comment": "Flipped bit 7 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "feb0234127f1c69397ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 373, - "comment": "Flipped bit 7 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "d057271f8a35bec8ff490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 374, - "comment": "Flipped bit 7 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "ac66a36de6c734aa50730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 375, - "comment": "Flipped bit 8 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc057a573ee9af4210ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 376, - "comment": "Flipped bit 8 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb1234127f1c69397ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 377, - "comment": "Flipped bit 8 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5056271f8a35bec8ff490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 378, - "comment": "Flipped bit 8 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c67a36de6c734aa50730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 379, - "comment": "Flipped bit 31 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047ad73ee9af4210ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 380, - "comment": "Flipped bit 31 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb023c127f1c69397ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 381, - "comment": "Flipped bit 31 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057279f8a35bec8ff490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 382, - "comment": "Flipped bit 31 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a3ede6c734aa50730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 383, - "comment": "Flipped bit 32 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573fe9af4210ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 384, - "comment": "Flipped bit 32 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234126f1c69397ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 385, - "comment": "Flipped bit 32 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8b35bec8ff490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 386, - "comment": "Flipped bit 32 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de7c734aa50730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 387, - "comment": "Flipped bit 33 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ce9af4210ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 388, - "comment": "Flipped bit 33 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234125f1c69397ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 389, - "comment": "Flipped bit 33 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8835bec8ff490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 390, - "comment": "Flipped bit 33 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de4c734aa50730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 391, - "comment": "Flipped bit 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9afc210ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 392, - "comment": "Flipped bit 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c61397ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 393, - "comment": "Flipped bit 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35be48ff490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 394, - "comment": "Flipped bit 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c7342a50730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 395, - "comment": "Flipped bit 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4211ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 396, - "comment": "Flipped bit 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c69396ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 397, - "comment": "Flipped bit 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec8fe490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 398, - "comment": "Flipped bit 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aa51730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 399, - "comment": "Flipped bit 71 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4290ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 400, - "comment": "Flipped bit 71 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c69317ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 401, - "comment": "Flipped bit 71 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec87f490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 402, - "comment": "Flipped bit 71 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aad0730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 403, - "comment": "Flipped bit 77 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4210dfea1004445b71", - "result": "invalid" - }, - { - "tcId": 404, - "comment": "Flipped bit 77 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c693978b3972c43f0607", - "result": "invalid" - }, - { - "tcId": 405, - "comment": "Flipped bit 77 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec8ff690dafe661deb3", - "result": "invalid" - }, - { - "tcId": 406, - "comment": "Flipped bit 77 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aa50530b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 407, - "comment": "Flipped bit 80 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4210ffeb1004445b71", - "result": "invalid" - }, - { - "tcId": 408, - "comment": "Flipped bit 80 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c69397ab3872c43f0607", - "result": "invalid" - }, - { - "tcId": 409, - "comment": "Flipped bit 80 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec8ff490cafe661deb3", - "result": "invalid" - }, - { - "tcId": 410, - "comment": "Flipped bit 80 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aa50730a20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 411, - "comment": "Flipped bit 96 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4210ffea1005445b71", - "result": "invalid" - }, - { - "tcId": 412, - "comment": "Flipped bit 96 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c69397ab3972c53f0607", - "result": "invalid" - }, - { - "tcId": 413, - "comment": "Flipped bit 96 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec8ff490dafe761deb3", - "result": "invalid" - }, - { - "tcId": 414, - "comment": "Flipped bit 96 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aa50730b20a4ab75c4", - "result": "invalid" - }, - { - "tcId": 415, - "comment": "Flipped bit 97 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4210ffea1006445b71", - "result": "invalid" - }, - { - "tcId": 416, - "comment": "Flipped bit 97 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c69397ab3972c63f0607", - "result": "invalid" - }, - { - "tcId": 417, - "comment": "Flipped bit 97 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec8ff490dafe461deb3", - "result": "invalid" - }, - { - "tcId": 418, - "comment": "Flipped bit 97 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aa50730b20a7ab75c4", - "result": "invalid" - }, - { - "tcId": 419, - "comment": "Flipped bit 103 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4210ffea1084445b71", - "result": "invalid" - }, - { - "tcId": 420, - "comment": "Flipped bit 103 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c69397ab3972443f0607", - "result": "invalid" - }, - { - "tcId": 421, - "comment": "Flipped bit 103 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec8ff490daf6661deb3", - "result": "invalid" - }, - { - "tcId": 422, - "comment": "Flipped bit 103 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aa50730b2025ab75c4", - "result": "invalid" - }, - { - "tcId": 423, - "comment": "Flipped bit 120 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4210ffea1004445b70", - "result": "invalid" - }, - { - "tcId": 424, - "comment": "Flipped bit 120 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c69397ab3972c43f0606", - "result": "invalid" - }, - { - "tcId": 425, - "comment": "Flipped bit 120 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec8ff490dafe661deb2", - "result": "invalid" - }, - { - "tcId": 426, - "comment": "Flipped bit 120 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aa50730b20a5ab75c5", - "result": "invalid" - }, - { - "tcId": 427, - "comment": "Flipped bit 121 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4210ffea1004445b73", - "result": "invalid" - }, - { - "tcId": 428, - "comment": "Flipped bit 121 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c69397ab3972c43f0605", - "result": "invalid" - }, - { - "tcId": 429, - "comment": "Flipped bit 121 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec8ff490dafe661deb1", - "result": "invalid" - }, - { - "tcId": 430, - "comment": "Flipped bit 121 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aa50730b20a5ab75c6", - "result": "invalid" - }, - { - "tcId": 431, - "comment": "Flipped bit 126 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4210ffea1004445b31", - "result": "invalid" - }, - { - "tcId": 432, - "comment": "Flipped bit 126 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c69397ab3972c43f0647", - "result": "invalid" - }, - { - "tcId": 433, - "comment": "Flipped bit 126 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec8ff490dafe661def3", - "result": "invalid" - }, - { - "tcId": 434, - "comment": "Flipped bit 126 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aa50730b20a5ab7584", - "result": "invalid" - }, - { - "tcId": 435, - "comment": "Flipped bit 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9af4210ffea1004445bf1", - "result": "invalid" - }, - { - "tcId": 436, - "comment": "Flipped bit 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c69397ab3972c43f0687", - "result": "invalid" - }, - { - "tcId": 437, - "comment": "Flipped bit 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35bec8ff490dafe661de33", - "result": "invalid" - }, - { - "tcId": 438, - "comment": "Flipped bit 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c734aa50730b20a5ab7544", - "result": "invalid" - }, - { - "tcId": 439, - "comment": "Flipped bits 0 and 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fd047a573ee9af4211ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 440, - "comment": "Flipped bits 0 and 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7fb0234127f1c69396ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 441, - "comment": "Flipped bits 0 and 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5157271f8a35bec8fe490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 442, - "comment": "Flipped bits 0 and 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2d66a36de6c734aa51730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 443, - "comment": "Flipped bits 31 and 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047ad73ee9afc210ffea1004445b71", - "result": "invalid" - }, - { - "tcId": 444, - "comment": "Flipped bits 31 and 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb023c127f1c61397ab3972c43f0607", - "result": "invalid" - }, - { - "tcId": 445, - "comment": "Flipped bits 31 and 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057279f8a35be48ff490dafe661deb3", - "result": "invalid" - }, - { - "tcId": 446, - "comment": "Flipped bits 31 and 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a3ede6c7342a50730b20a5ab75c4", - "result": "invalid" - }, - { - "tcId": 447, - "comment": "Flipped bits 63 and 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fc047a573ee9afc210ffea1004445bf1", - "result": "invalid" - }, - { - "tcId": 448, - "comment": "Flipped bits 63 and 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7eb0234127f1c61397ab3972c43f0687", - "result": "invalid" - }, - { - "tcId": 449, - "comment": "Flipped bits 63 and 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5057271f8a35be48ff490dafe661de33", - "result": "invalid" - }, - { - "tcId": 450, - "comment": "Flipped bits 63 and 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2c66a36de6c7342a50730b20a5ab7544", - "result": "invalid" - }, - { - "tcId": 451, - "comment": "all bits of tag flipped", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "03fb85a8c11650bdef0015effbbba48e", - "result": "invalid" - }, - { - "tcId": 452, - "comment": "all bits of tag flipped", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "814fdcbed80e396c6854c68d3bc0f9f8", - "result": "invalid" - }, - { - "tcId": 453, - "comment": "all bits of tag flipped", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "afa8d8e075ca413700b6f250199e214c", - "result": "invalid" - }, - { - "tcId": 454, - "comment": "all bits of tag flipped", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "d3995c921938cb55af8cf4df5a548a3b", - "result": "invalid" - }, - { - "tcId": 455, - "comment": "Tag changed to all zero", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "00000000000000000000000000000000", - "result": "invalid" - }, - { - "tcId": 456, - "comment": "Tag changed to all zero", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "00000000000000000000000000000000", - "result": "invalid" - }, - { - "tcId": 457, - "comment": "Tag changed to all zero", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "00000000000000000000000000000000", - "result": "invalid" - }, - { - "tcId": 458, - "comment": "Tag changed to all zero", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "00000000000000000000000000000000", - "result": "invalid" - }, - { - "tcId": 459, - "comment": "tag changed to all 1", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "ffffffffffffffffffffffffffffffff", - "result": "invalid" - }, - { - "tcId": 460, - "comment": "tag changed to all 1", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "ffffffffffffffffffffffffffffffff", - "result": "invalid" - }, - { - "tcId": 461, - "comment": "tag changed to all 1", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "ffffffffffffffffffffffffffffffff", - "result": "invalid" - }, - { - "tcId": 462, - "comment": "tag changed to all 1", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "ffffffffffffffffffffffffffffffff", - "result": "invalid" - }, - { - "tcId": 463, - "comment": "msbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "7c84fad7be692fc2907f6a9084c4dbf1", - "result": "invalid" - }, - { - "tcId": 464, - "comment": "msbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "fe30a3c1a7714613172bb9f244bf8687", - "result": "invalid" - }, - { - "tcId": 465, - "comment": "msbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "d0d7a79f0ab53e487fc98d2f66e15e33", - "result": "invalid" - }, - { - "tcId": 466, - "comment": "msbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "ace623ed6647b42ad0f38ba0252bf544", - "result": "invalid" - }, - { - "tcId": 467, - "comment": "lsbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "", - "ct": "", - "tag": "fd057b563fe8ae4311feeb1105455a70", - "result": "invalid" - }, - { - "tcId": 468, - "comment": "lsbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "5a06776094b3f5bb9845bd2f8e92bf", - "tag": "7fb1224026f0c79296aa3873c53e0706", - "result": "invalid" - }, - { - "tcId": 469, - "comment": "lsbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42", - "tag": "5156261e8b34bfc9fe480caee760dfb2", - "result": "invalid" - }, - { - "tcId": 470, - "comment": "lsbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f", - "iv": "505152535455565758595a5b5c5d5e5f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "5a06776094b3f5bb9845bd2f8e92bf42ba", - "tag": "2d67a26ce7c635ab51720a21a4aa74c5", - "result": "invalid" - }, - { - "tcId": 471, - "comment": "tag collision", - "flags": [ - "TagCollision_1" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "", - "msg": "0000000000000000000000000000000000000000000000000000000000000000d694d4c52124cbe032bff86a482dac5ac1514bc1e32575f71f0577f8c2cffe766e4d2926910e1d5b86c3e3c6028a7b52f02fed8542d4ca0e42d36ce2cb1f3f66e71b9606cf7e5cb697d5984460967ac7a029c9ac0a3eb1e7689de25b47212fe0fbdefb65fd80c7d14ddaeef4f7ab0fce710cd77444a5e07644c0bc498227ce81", - "ct": "41de9000a7b5e40e2d68bb64d99ebb19b3bceefc02ded88eae5328df084aba1dff341ada7cea47a07fe9286ed94b2a5e3c5b23d6d11fa8dea6635ad0673b94d2721822eb751c7d69d74dcf24d5aca444d7e4d53531513e5d06d404c335681e407e2a8edd11c328d02a7b65280bc29c8915b38d7bd69b170e739a89c0441fea187a4998bcb3f223aa3083111fec8e5e1d9fa5ed73e2f893c603177d3a7c445278", - "tag": "78730d33219686a7c6ca27d5206e5230", - "result": "valid" - }, - { - "tcId": 472, - "comment": "tag collision", - "flags": [ - "TagCollision_1" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "", - "msg": "0101010101010101010101010101010101010101010101010101010101010101b6e32427de24486698fd467e533fa6a9db39c91eb7c34e936660beb4f6198021a8426e54da9b7428cc30feb537b685be6a5a3dcd1109e585a1a88f5bec8f8aa27d6b73acab10f720394a8cc9c21c4951580400cc7cfaab6bb0fed95a822cb21088f2b61a1bc1b1fdd9bdc7ae99ee03c3966dbdde84d3d0bb246b16288d4712dc", - "ct": "40df9101a6b4e50f2c69ba65d89fba18b2bdeffd03dfd98faf5229de094bbb1c9f43ea3883eac426d5ab967ac25920ad2633a10985f993badf06939c53edea8548c8593ae25fb98852e56578de7367bf9e0fdcd14e1e0c9ae1a115a5eb76834efa42a657ede272b2e53b30bb9782fdd917e262dc7f37cfcf554c10f365fa055aa3da2d0eb915b0ae438754f0769669cc4c20520efa01c6a890d6df1399c3300c", - "tag": "78730d33219686a7c6ca27d5206e5230", - "result": "valid" - }, - { - "tcId": 473, - "comment": "tag collision", - "flags": [ - "TagCollision_1" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "", - "msg": "02020202020202020202020202020202020202020202020202020202020202024314fe693535f4f1606b535f6ad19dbf1b154404d6785d7480ae5e44e4a20aa563cfe1ca5860c05996c11a333309bcb587ceffdd5655d724f6fc88ca8f1069fb176d1e643fc7a7c5d9153f6baf2c71af9a457fe82fa780d6a5dd4e9850f0b9833d0a57a6f6e6ca3cf99d1fbbfc165bc1e82022726e5e998af49c26449d880733", - "ct": "43dc9202a5b7e60c2f6ab966db9cb91bb1beecfe00dcda8cac512add0a48b81f6ab4307668fb78b12d3d835bfbb71bbbe61f2c13e442805d39c8736c41566001935024b76c564addc943307202dc0ce931764c48bd835771727ef2bc7a5b75052e82cf402cbcc1c50ce572c2121e9d9cd2463b40d7442f644916b807e3071ac2c29acec50517ad115b96e991ec0415970ffb534f366ae8db5268c32714307b5d", - "tag": "78730d33219686a7c6ca27d5206e5230", - "result": "valid" - }, - { - "tcId": 474, - "comment": "tag collision", - "flags": [ - "TagCollision_2" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "0000000000000000000000000000000000000000000000000000000000000000d694d4c52124cbe032bff86a482dac5ac1514bc1e32575f71f0577f8c2cffe766e4d2926910e1d5b86c3e3c6028a7b52f02fed8542d4ca0e42d36ce2cb1f3f66e71b9606cf7e5cb697d5984460967ac7a029c9ac0a3eb1e7689de25b47212fe0fbdefb65fd80c7d14ddaeef4f7ab0fce710cd77444a5e07644c0bc498227ce81", - "msg": "", - "ct": "", - "tag": "c6ca27d5206e523078730d33219686a7", - "result": "valid" - }, - { - "tcId": 475, - "comment": "tag collision", - "flags": [ - "TagCollision_2" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fd3518d1febad5fb1522c4dfd52f2e1df32ea68d85abff7fa7af35546174e85cc73a27db5cd74d3f997aabd80210a2f06628359a980a8fdbc6e196ef3d28d378355bc4045944978ab8890356b3a348d869d77e3ffaee8cfbecc78923265a3ae3faa3b2e0539f83dca626e87cce0ae4dab634362abe78e2ce43b9eda1d66830549", - "msg": "", - "ct": "", - "tag": "c6ca27d5206e523078730d33219686a7", - "result": "valid" - }, - { - "tcId": 476, - "comment": "tag collision", - "flags": [ - "TagCollision_2" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9543b8e7bacf6fd711b3c4d4e5addde14f2f6dce074c123b57e764baacda8c519d69fe0a107db73cc9d5bca65a5b96bbf80141e07c62dbc851ab6d403b83f01d49b055e44fc052beddc51a5c686265036a8871b1e745b117c72776f5aecab45f4e0219e530947b46fa85d68c67864663e720985f64f3bcdd07b1e9d691c54aaa", - "msg": "", - "ct": "", - "tag": "c6ca27d5206e523078730d33219686a7", - "result": "valid" - }, - { - "tcId": 477, - "comment": "tag collision", - "flags": [ - "TagCollision_2" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "0000000000000000000000000000000000000000000000000000000000000000d694d4c52124cbe032bff86a482dac5ac1514bc1e32575f71f0577f8c2cffe766e4d2926910e1d5b86c3e3c6028a7b52f02fed8542d4ca0e42d36ce2cb1f3f66e71b9606cf7e5cb697d5984460967ac7a029c9ac0a3eb1e7689de25b47212fe0fbdefb65fd80c7d14ddaeef4f7ab0fce710cd77444a5e07644c0bc498227ce81", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0", - "tag": "833c02816ed990c7f455a43d6a068878", - "result": "valid" - }, - { - "tcId": 478, - "comment": "tag collision", - "flags": [ - "TagCollision_2" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fd3518d1febad5fb1522c4dfd52f2e1df32ea68d85abff7fa7af35546174e85cc73a27db5cd74d3f997aabd80210a2f06628359a980a8fdbc6e196ef3d28d378355bc4045944978ab8890356b3a348d869d77e3ffaee8cfbecc78923265a3ae3faa3b2e0539f83dca626e87cce0ae4dab634362abe78e2ce43b9eda1d66830549", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0", - "tag": "833c02816ed990c7f455a43d6a068878", - "result": "valid" - }, - { - "tcId": 479, - "comment": "tag collision", - "flags": [ - "TagCollision_2" - ], - "key": "00000000000000000000000000000000", - "iv": "00000000000000000000000000000000", - "aad": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9543b8e7bacf6fd711b3c4d4e5addde14f2f6dce074c123b57e764baacda8c519d69fe0a107db73cc9d5bca65a5b96bbf80141e07c62dbc851ab6d403b83f01d49b055e44fc052beddc51a5c686265036a8871b1e745b117c72776f5aecab45f4e0219e530947b46fa85d68c67864663e720985f64f3bcdd07b1e9d691c54aaa", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0", - "tag": "833c02816ed990c7f455a43d6a068878", - "result": "valid" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/test/wycheproof/aegis128L_test.json.zst b/src/test/wycheproof/aegis128L_test.json.zst new file mode 100644 index 0000000000000000000000000000000000000000..032971966a6c15524d4d1842eed47347b8d2b03a GIT binary patch literal 80895 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

j5p`ac7)h|1oq|RxK!G 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 VPOxxtH%O=;=x@O;PXuNZl=}dg^E?0m literal 0 HcmV?d00001 From a90c731f562d208fefce1e1f51327fc475c8e1bd Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 23 Jul 2024 21:59:45 +0200 Subject: [PATCH 118/219] No need for BUILD_TYPE=Release except for CMAKE --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 52043a0..50c67db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,9 +6,6 @@ on: pull_request: branches: [ "main" ] -env: - BUILD_TYPE: Release - jobs: build: runs-on: ubuntu-latest From 0afad8e28ea049ec5caa8b982d8638759f3ef739 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 23 Jul 2024 22:25:09 +0200 Subject: [PATCH 119/219] Add library version and check for consistency in CI --- .github/workflows/ci.yml | 4 ++-- .github/workflows/cmake.yml | 2 +- .github/workflows/version_check.yml | 18 ++++++++++++++++++ build.zig | 2 ++ 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/version_check.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 50c67db..09c35f4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,10 +11,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Zig - uses: goto-bus-stop/setup-zig@d866436887ad1b24590684f9d00480376663dd36 + uses: goto-bus-stop/setup-zig@2a9625d550eefc3a9b1a43d342ad655f563f8241 - name: Unit tests run: | diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index ff572df..4492db5 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Configure CMake run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} diff --git a/.github/workflows/version_check.yml b/.github/workflows/version_check.yml new file mode 100644 index 0000000..9274781 --- /dev/null +++ b/.github/workflows/version_check.yml @@ -0,0 +1,18 @@ +name: version check + +on: + push: + tags: + - '**' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Version check + run: | + grep -E 'const version =' build.zig | grep -E '"${{ github.ref_name }}"' || exit 78 + echo "Version check passed." diff --git a/build.zig b/build.zig index 4391d90..7e47050 100644 --- a/build.zig +++ b/build.zig @@ -3,12 +3,14 @@ const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{ .preferred_optimize_mode = .ReleaseFast }); + const version = std.SemanticVersion.parse("0.1.24") catch unreachable; const lib = b.addStaticLibrary(.{ .name = "aegis", .target = target, .optimize = optimize, .strip = true, + .version = version, }); lib.linkLibC(); From db12de5dc29b95732913fd1af7f473f96399ba88 Mon Sep 17 00:00:00 2001 From: Victor Stewart Date: Tue, 23 Jul 2024 21:27:53 +0100 Subject: [PATCH 120/219] generate aegis-config-version.cmake file (#10) Co-authored-by: Frank Denis <124872+jedisct1@users.noreply.github.com> --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index ee5f7d0..923284c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,6 +54,9 @@ configure_package_CONFIG_FILE("${CONFIG_TEMPLATE_FILE}" "${CONFIG_FILE}" install(FILES "${CONFIG_FILE}" DESTINATION "${INSTALL_CONFIG_DIR}") +write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.1.24 COMPATIBILITY AnyNewerVersion) +install(FILES "${PROJECT_NAME}-config-version.cmake" DESTINATION "${INSTALL_CONFIG_DIR}") + export(EXPORT "${TARGETS_EXPORT_NAME}" FILE "${TARGETS_EXPORT_FILE}" NAMESPACE "${PROJECT_NAME}::") export(PACKAGE "${PROJECT_NAME}") From cb039908b069452b6357f67577040d65147095fc Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 23 Jul 2024 22:33:37 +0200 Subject: [PATCH 121/219] Add version check for cmake --- .github/workflows/version_check.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/version_check.yml b/.github/workflows/version_check.yml index 9274781..81981d0 100644 --- a/.github/workflows/version_check.yml +++ b/.github/workflows/version_check.yml @@ -15,4 +15,6 @@ jobs: - name: Version check run: | grep -E 'const version =' build.zig | grep -E '"${{ github.ref_name }}"' || exit 78 - echo "Version check passed." + echo "Zig build version check passed." + grep -E 'COMPATIBILITY AnyNewerVersion' build.zig | grep -E ' ${{ github.ref_name }} ' || exit 78 + echo "CMake version check passed." From 5771daab3d68fd67c4683cf5aa49db46799d72b1 Mon Sep 17 00:00:00 2001 From: Masato TOYOSHIMA <77603626+phoepsilonix@users.noreply.github.com> Date: Tue, 30 Jul 2024 01:36:36 +0900 Subject: [PATCH 122/219] Fixed location of source file when installing ${PROJECT_NAME}-config-version.cmake (#11) Fixed location of source file when installing ${PROJECT_NAME}-config-version.cmake --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 923284c..93c0576 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,7 +55,7 @@ configure_package_CONFIG_FILE("${CONFIG_TEMPLATE_FILE}" "${CONFIG_FILE}" install(FILES "${CONFIG_FILE}" DESTINATION "${INSTALL_CONFIG_DIR}") write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.1.24 COMPATIBILITY AnyNewerVersion) -install(FILES "${PROJECT_NAME}-config-version.cmake" DESTINATION "${INSTALL_CONFIG_DIR}") +install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" DESTINATION "${INSTALL_CONFIG_DIR}") export(EXPORT "${TARGETS_EXPORT_NAME}" FILE "${TARGETS_EXPORT_FILE}" NAMESPACE "${PROJECT_NAME}::") From fc344f11f0e07259f4af318ce7a597029c80b7c9 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 6 Sep 2024 11:02:28 +0200 Subject: [PATCH 123/219] Favor performance by default on wasm targets --- README.md | 8 +++++--- src/common/softaes.c | 4 ++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9f48357..31e5ec6 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ zig build -Drelease The library and headers are installed in the `zig-out` folder. -To favor performance over side-channel mitigations on WebAssembly and on devices without hardware acceleration, add `-Dfavor-performance`: +To favor performance over side-channel mitigations on devices without hardware acceleration, add `-Dfavor-performance`: ```sh zig build -Drelease -Dfavor-performance @@ -37,9 +37,11 @@ zig build -Drelease -Dfavor-performance A benchmark can also be built with the `-Dwith-benchmark` option: ```sh -zig build -Drelease -Dwith-benchmark +zig build -Drelease -Dfavor-performance -Dwith-benchmark ``` +`libaegis` doesn't need WASI nor any extension to work on WebAssembly. The `wasm32-freestanding` target is fully supported. WebAssembly extensions such as `bulk_memory` and `simd128` can be enabled by adding `-Dcpu=baseline+bulk_memory+simd128` to the command line. + ### Compilation with `cmake`: ```sh @@ -49,7 +51,7 @@ cmake -DCMAKE_INSTALL_PREFIX=/install/prefix .. make install ``` -To favor performance over side-channel mitigations on WebAssembly and on devices without hardware acceleration, add `-DFAVOR_PERFORMANCE`. +To favor performance over side-channel mitigations on devices without hardware acceleration, add `-DFAVOR_PERFORMANCE`. ### Direct inclusion diff --git a/src/common/softaes.c b/src/common/softaes.c index 164d1e1..26da0bc 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -43,6 +43,10 @@ uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { static const uint32_t* const LUT = _aes_lut; +#if defined(__wasm__) && !defined(FAVOR_PERFORMANCE) +# define FAVOR_PERFORMANCE +#endif + #ifndef SOFTAES_STRIDE # ifdef FAVOR_PERFORMANCE # define SOFTAES_STRIDE 256 From 3ed4ce4fbf01636e9e8a04ab4e7c84ed8c2d61a2 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 6 Sep 2024 12:52:04 +0200 Subject: [PATCH 124/219] Format --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 31e5ec6..4838dd5 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,9 @@ A benchmark can also be built with the `-Dwith-benchmark` option: zig build -Drelease -Dfavor-performance -Dwith-benchmark ``` -`libaegis` doesn't need WASI nor any extension to work on WebAssembly. The `wasm32-freestanding` target is fully supported. WebAssembly extensions such as `bulk_memory` and `simd128` can be enabled by adding `-Dcpu=baseline+bulk_memory+simd128` to the command line. +`libaegis` doesn't need WASI nor any extension to work on WebAssembly. The `wasm32-freestanding` target is fully supported. + +WebAssembly extensions such as `bulk_memory` and `simd128` can be enabled by adding `-Dcpu=baseline+bulk_memory+simd128` to the command line. ### Compilation with `cmake`: From 4cab23ad4e0541740fc6a1ccd52bfcecfa9226e1 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 10 Sep 2024 16:23:36 +0200 Subject: [PATCH 125/219] Move definitions up --- src/common/softaes.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/common/softaes.c b/src/common/softaes.c index 26da0bc..3e7b967 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -6,6 +6,18 @@ #include "common.h" #include "softaes.h" +#if defined(__wasm__) && !defined(FAVOR_PERFORMANCE) +# define FAVOR_PERFORMANCE +#endif + +#ifndef SOFTAES_STRIDE +# ifdef FAVOR_PERFORMANCE +# define SOFTAES_STRIDE 256 +# else +# define SOFTAES_STRIDE 16 +# endif +#endif + uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, @@ -43,18 +55,6 @@ uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { static const uint32_t* const LUT = _aes_lut; -#if defined(__wasm__) && !defined(FAVOR_PERFORMANCE) -# define FAVOR_PERFORMANCE -#endif - -#ifndef SOFTAES_STRIDE -# ifdef FAVOR_PERFORMANCE -# define SOFTAES_STRIDE 256 -# else -# define SOFTAES_STRIDE 16 -# endif -#endif - static SoftAesBlock _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const uint8_t ix3[4]) { From 80da84a357ce9baeb556f1e409f8c139020e020f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 10 Sep 2024 16:22:55 +0200 Subject: [PATCH 126/219] In FAVOR_PERFORMANCE, use softaes with 4 tables --- src/common/softaes.c | 161 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 150 insertions(+), 11 deletions(-) diff --git a/src/common/softaes.c b/src/common/softaes.c index 26da0bc..059dcc4 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -6,6 +6,14 @@ #include "common.h" #include "softaes.h" +#if defined(__wasm__) && !defined(FAVOR_PERFORMANCE) +# define FAVOR_PERFORMANCE +#endif + +#ifndef SOFTAES_STRIDE +# define SOFTAES_STRIDE 16 +#endif + uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, @@ -43,18 +51,148 @@ uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { static const uint32_t* const LUT = _aes_lut; -#if defined(__wasm__) && !defined(FAVOR_PERFORMANCE) -# define FAVOR_PERFORMANCE -#endif +#ifdef FAVOR_PERFORMANCE +uint32_t _aes_lut_s1[256] __attribute__((visibility("hidden"))) = { + 0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d, 0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154, + 0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d, 0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a, + 0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87, 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b, + 0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea, 0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b, + 0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a, 0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f, + 0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908, 0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f, + 0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e, 0x18183028, 0x969637a1, 0x05050a0f, 0x9a9a2fb5, + 0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d, 0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f, + 0x0909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e, 0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb, + 0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce, 0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397, + 0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c, 0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed, + 0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b, 0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a, + 0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16, 0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194, + 0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81, 0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3, + 0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a, 0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104, + 0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263, 0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d, + 0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f, 0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39, + 0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47, 0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695, + 0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f, 0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83, + 0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c, 0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76, + 0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e, 0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4, + 0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6, 0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b, + 0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7, 0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0, + 0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25, 0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018, + 0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72, 0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751, + 0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21, 0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85, + 0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa, 0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12, + 0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0, 0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9, + 0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233, 0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7, + 0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920, 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a, + 0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17, 0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8, + 0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11, 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a +}; + +uint32_t _aes_lut_s2[256] __attribute__((visibility("hidden"))) = { + 0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b, 0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5, + 0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b, 0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76, + 0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d, 0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0, + 0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf, 0x9c23bf9c, 0xa453f7a4, 0x72e49672, 0xc09b5bc0, + 0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26, 0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc, + 0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1, 0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15, + 0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3, 0x18302818, 0x9637a196, 0x050a0f05, 0x9a2fb59a, + 0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2, 0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75, + 0x09121b09, 0x831d9e83, 0x2c58742c, 0x1a342e1a, 0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0, + 0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3, 0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784, + 0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced, 0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b, + 0x6ad4be6a, 0xcb8d46cb, 0xbe67d9be, 0x39724b39, 0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf, + 0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb, 0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485, + 0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f, 0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8, + 0x51a2f351, 0xa35dfea3, 0x4080c040, 0x8f058a8f, 0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5, + 0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321, 0x10203010, 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2, + 0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec, 0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917, + 0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d, 0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573, + 0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc, 0x22446622, 0x2a547e2a, 0x903bab90, 0x880b8388, + 0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14, 0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db, + 0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a, 0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c, + 0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662, 0x9139a891, 0x9531a495, 0xe4d337e4, 0x79f28b79, + 0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d, 0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9, + 0x6cd8b46c, 0x56acfa56, 0xf4f307f4, 0xeacf25ea, 0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808, + 0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e, 0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6, + 0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f, 0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a, + 0x70e09070, 0x3e7c423e, 0xb571c4b5, 0x66ccaa66, 0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e, + 0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9, 0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e, + 0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311, 0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794, + 0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9, 0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf, + 0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d, 0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868, + 0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f, 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16 +}; + +uint32_t _aes_lut_s3[256] __attribute__((visibility("hidden"))) = { + 0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b, 0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5, + 0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b, 0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676, + 0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d, 0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0, + 0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf, 0x23bf9c9c, 0x53f7a4a4, 0xe4967272, 0x9b5bc0c0, + 0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626, 0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc, + 0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1, 0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515, + 0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3, 0x30281818, 0x37a19696, 0x0a0f0505, 0x2fb59a9a, + 0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2, 0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575, + 0x121b0909, 0x1d9e8383, 0x58742c2c, 0x342e1a1a, 0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0, + 0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3, 0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484, + 0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded, 0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b, + 0xd4be6a6a, 0x8d46cbcb, 0x67d9bebe, 0x724b3939, 0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf, + 0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb, 0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585, + 0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f, 0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8, + 0xa2f35151, 0x5dfea3a3, 0x80c04040, 0x058a8f8f, 0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5, + 0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121, 0x20301010, 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2, + 0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec, 0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717, + 0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d, 0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373, + 0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc, 0x44662222, 0x547e2a2a, 0x3bab9090, 0x0b838888, + 0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414, 0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb, + 0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a, 0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c, + 0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262, 0x39a89191, 0x31a49595, 0xd337e4e4, 0xf28b7979, + 0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d, 0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9, + 0xd8b46c6c, 0xacfa5656, 0xf307f4f4, 0xcf25eaea, 0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808, + 0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e, 0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6, + 0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f, 0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a, + 0xe0907070, 0x7c423e3e, 0x71c4b5b5, 0xccaa6666, 0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e, + 0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9, 0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e, + 0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111, 0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494, + 0x2db69b9b, 0x3c221e1e, 0x15928787, 0xc920e9e9, 0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf, + 0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d, 0x65dabfbf, 0xd731e6e6, 0x84c64242, 0xd0b86868, + 0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f, 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616 +}; + +static const uint32_t* const LUT_S1 = _aes_lut_s1; +static const uint32_t* const LUT_S2 = _aes_lut_s2; +static const uint32_t* const LUT_S3 = _aes_lut_s3; -#ifndef SOFTAES_STRIDE -# ifdef FAVOR_PERFORMANCE -# define SOFTAES_STRIDE 256 -# else -# define SOFTAES_STRIDE 16 -# endif #endif +#ifdef FAVOR_PERFORMANCE +static SoftAesBlock +_encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const uint8_t ix3[4]) +{ + CRYPTO_ALIGN(64) SoftAesBlock out; + + out.w0 = LUT[ix0[0]]; + out.w1 = LUT[ix0[1]]; + out.w2 = LUT[ix0[2]]; + out.w3 = LUT[ix0[3]]; + + out.w0 ^= LUT_S1[ix1[0]]; + out.w1 ^= LUT_S1[ix1[1]]; + out.w2 ^= LUT_S1[ix1[2]]; + out.w3 ^= LUT_S1[ix1[3]]; + + out.w0 ^= LUT_S2[ix2[0]]; + out.w1 ^= LUT_S2[ix2[1]]; + out.w2 ^= LUT_S2[ix2[2]]; + out.w3 ^= LUT_S2[ix2[3]]; + + out.w0 ^= LUT_S3[ix3[0]]; + out.w1 ^= LUT_S3[ix3[1]]; + out.w2 ^= LUT_S3[ix3[2]]; + out.w3 ^= LUT_S3[ix3[3]]; + + return out; +} +#else + static SoftAesBlock _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const uint8_t ix3[4]) { @@ -79,9 +217,9 @@ _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const } } -#if defined(__GNUC__) || defined(__clang__) +# if defined(__GNUC__) || defined(__clang__) __asm__ __volatile__("" : : "r"(t) : "memory"); -#endif +# endif out.w0 = t[0][0][ix0[0] / SOFTAES_STRIDE]; out.w0 ^= ROTL32(t[0][1][ix1[0] / SOFTAES_STRIDE], 8); @@ -105,6 +243,7 @@ _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const return out; } +#endif SoftAesBlock softaes_block_encrypt(const SoftAesBlock block, const SoftAesBlock rk) From be69e9c9fb2069fe4137df623f66286a12f9aa7a Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 11 Sep 2024 23:39:33 +0200 Subject: [PATCH 127/219] CRLF --- src/common/softaes.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/softaes.c b/src/common/softaes.c index 059dcc4..e965eee 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -191,6 +191,7 @@ _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const return out; } + #else static SoftAesBlock From 564dca62786e4277b8844a010213e67840b18eb8 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 12 Sep 2024 00:12:40 +0200 Subject: [PATCH 128/219] Improve wasm performance --- src/common/softaes.c | 97 ++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 39 deletions(-) diff --git a/src/common/softaes.c b/src/common/softaes.c index e965eee..f2603e1 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -14,7 +14,8 @@ # define SOFTAES_STRIDE 16 #endif -uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { +#ifdef FAVOR_PERFORMANCE +static const uint32_t LUT[1024] __attribute__((visibility("hidden"))) = { 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, @@ -46,13 +47,7 @@ uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0, - 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c -}; - -static const uint32_t* const LUT = _aes_lut; - -#ifdef FAVOR_PERFORMANCE -uint32_t _aes_lut_s1[256] __attribute__((visibility("hidden"))) = { + 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c, 0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d, 0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154, 0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d, 0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a, 0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87, 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b, @@ -84,10 +79,7 @@ uint32_t _aes_lut_s1[256] __attribute__((visibility("hidden"))) = { 0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233, 0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7, 0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920, 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a, 0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17, 0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8, - 0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11, 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a -}; - -uint32_t _aes_lut_s2[256] __attribute__((visibility("hidden"))) = { + 0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11, 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a, 0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b, 0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5, 0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b, 0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76, 0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d, 0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0, @@ -119,10 +111,7 @@ uint32_t _aes_lut_s2[256] __attribute__((visibility("hidden"))) = { 0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311, 0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794, 0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9, 0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf, 0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d, 0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868, - 0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f, 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16 -}; - -uint32_t _aes_lut_s3[256] __attribute__((visibility("hidden"))) = { + 0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f, 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16, 0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b, 0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5, 0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b, 0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676, 0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d, 0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0, @@ -157,43 +146,73 @@ uint32_t _aes_lut_s3[256] __attribute__((visibility("hidden"))) = { 0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f, 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616 }; -static const uint32_t* const LUT_S1 = _aes_lut_s1; -static const uint32_t* const LUT_S2 = _aes_lut_s2; -static const uint32_t* const LUT_S3 = _aes_lut_s3; - -#endif - -#ifdef FAVOR_PERFORMANCE static SoftAesBlock _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const uint8_t ix3[4]) { CRYPTO_ALIGN(64) SoftAesBlock out; - out.w0 = LUT[ix0[0]]; - out.w1 = LUT[ix0[1]]; - out.w2 = LUT[ix0[2]]; - out.w3 = LUT[ix0[3]]; + out.w0 = LUT[ix0[0] + 256 * 0]; + out.w1 = LUT[ix0[1] + 256 * 0]; + out.w2 = LUT[ix0[2] + 256 * 0]; + out.w3 = LUT[ix0[3] + 256 * 0]; - out.w0 ^= LUT_S1[ix1[0]]; - out.w1 ^= LUT_S1[ix1[1]]; - out.w2 ^= LUT_S1[ix1[2]]; - out.w3 ^= LUT_S1[ix1[3]]; + out.w0 ^= LUT[ix1[0] + 256 * 1]; + out.w1 ^= LUT[ix1[1] + 256 * 1]; + out.w2 ^= LUT[ix1[2] + 256 * 1]; + out.w3 ^= LUT[ix1[3] + 256 * 1]; - out.w0 ^= LUT_S2[ix2[0]]; - out.w1 ^= LUT_S2[ix2[1]]; - out.w2 ^= LUT_S2[ix2[2]]; - out.w3 ^= LUT_S2[ix2[3]]; + out.w0 ^= LUT[ix2[0] + 256 * 2]; + out.w1 ^= LUT[ix2[1] + 256 * 2]; + out.w2 ^= LUT[ix2[2] + 256 * 2]; + out.w3 ^= LUT[ix2[3] + 256 * 2]; - out.w0 ^= LUT_S3[ix3[0]]; - out.w1 ^= LUT_S3[ix3[1]]; - out.w2 ^= LUT_S3[ix3[2]]; - out.w3 ^= LUT_S3[ix3[3]]; + out.w0 ^= LUT[ix3[0] + 256 * 3]; + out.w1 ^= LUT[ix3[1] + 256 * 3]; + out.w2 ^= LUT[ix3[2] + 256 * 3]; + out.w3 ^= LUT[ix3[3] + 256 * 3]; return out; } #else +uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { + 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, + 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, + 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, + 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b, + 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c, 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, + 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a, + 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f, + 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, + 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b, + 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, + 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, + 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85, + 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, + 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe, 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b, + 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, + 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, + 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3, 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e, + 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, + 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b, + 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428, 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, + 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8, + 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2, + 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, + 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810, + 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c, 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, + 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, + 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c, + 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, + 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433, + 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, + 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0, + 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c +}; + +static const uint32_t* const LUT = _aes_lut; + static SoftAesBlock _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const uint8_t ix3[4]) { From e42ab7aaed113b0876baacbc5b8158a3292fbe26 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 12 Sep 2024 00:13:09 +0200 Subject: [PATCH 129/219] Remove unneeded attribute --- src/common/softaes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/softaes.c b/src/common/softaes.c index f2603e1..91d94e9 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -15,7 +15,7 @@ #endif #ifdef FAVOR_PERFORMANCE -static const uint32_t LUT[1024] __attribute__((visibility("hidden"))) = { +static const uint32_t LUT[1024] = { 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, From f84e3c384c71ae89f2f0bced187f1e727108ede8 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 12 Sep 2024 00:42:36 +0200 Subject: [PATCH 130/219] Lookups without offsets, but more registers are slightly faster --- src/common/softaes.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/common/softaes.c b/src/common/softaes.c index 91d94e9..d19d0af 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -15,7 +15,7 @@ #endif #ifdef FAVOR_PERFORMANCE -static const uint32_t LUT[1024] = { +static const uint32_t _aes_lut[1024] = { 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, @@ -146,30 +146,35 @@ static const uint32_t LUT[1024] = { 0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f, 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616 }; +static const uint32_t* const LUT0 = _aes_lut + 0 * 256; +static const uint32_t* const LUT1 = _aes_lut + 1 * 256; +static const uint32_t* const LUT2 = _aes_lut + 2 * 256; +static const uint32_t* const LUT3 = _aes_lut + 3 * 256; + static SoftAesBlock _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const uint8_t ix3[4]) { CRYPTO_ALIGN(64) SoftAesBlock out; - out.w0 = LUT[ix0[0] + 256 * 0]; - out.w1 = LUT[ix0[1] + 256 * 0]; - out.w2 = LUT[ix0[2] + 256 * 0]; - out.w3 = LUT[ix0[3] + 256 * 0]; + out.w0 = LUT0[ix0[0]]; + out.w1 = LUT0[ix0[1]]; + out.w2 = LUT0[ix0[2]]; + out.w3 = LUT0[ix0[3]]; - out.w0 ^= LUT[ix1[0] + 256 * 1]; - out.w1 ^= LUT[ix1[1] + 256 * 1]; - out.w2 ^= LUT[ix1[2] + 256 * 1]; - out.w3 ^= LUT[ix1[3] + 256 * 1]; + out.w0 ^= LUT1[ix1[0]]; + out.w1 ^= LUT1[ix1[1]]; + out.w2 ^= LUT1[ix1[2]]; + out.w3 ^= LUT1[ix1[3]]; - out.w0 ^= LUT[ix2[0] + 256 * 2]; - out.w1 ^= LUT[ix2[1] + 256 * 2]; - out.w2 ^= LUT[ix2[2] + 256 * 2]; - out.w3 ^= LUT[ix2[3] + 256 * 2]; + out.w0 ^= LUT2[ix2[0]]; + out.w1 ^= LUT2[ix2[1]]; + out.w2 ^= LUT2[ix2[2]]; + out.w3 ^= LUT2[ix2[3]]; - out.w0 ^= LUT[ix3[0] + 256 * 3]; - out.w1 ^= LUT[ix3[1] + 256 * 3]; - out.w2 ^= LUT[ix3[2] + 256 * 3]; - out.w3 ^= LUT[ix3[3] + 256 * 3]; + out.w0 ^= LUT3[ix3[0]]; + out.w1 ^= LUT3[ix3[1]]; + out.w2 ^= LUT3[ix3[2]]; + out.w3 ^= LUT3[ix3[3]]; return out; } From 90cc5c2b04bd9beeccd95952e519e991f47b20e5 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 21 Oct 2024 17:40:42 +0200 Subject: [PATCH 131/219] Use memcpy() when possible --- src/common/softaes.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/common/softaes.h b/src/common/softaes.h index 391d589..ad20907 100644 --- a/src/common/softaes.h +++ b/src/common/softaes.h @@ -17,8 +17,13 @@ SoftAesBlock softaes_block_encrypt(const SoftAesBlock block, const SoftAesBlock static inline SoftAesBlock softaes_block_load(const uint8_t in[16]) { +#ifdef NATIVE_LITTLE_ENDIAN + SoftAesBlock out; + memcpy(&out, in, 16); +#else const SoftAesBlock out = { LOAD32_LE(in + 0), LOAD32_LE(in + 4), LOAD32_LE(in + 8), LOAD32_LE(in + 12) }; +#endif return out; } @@ -33,10 +38,14 @@ softaes_block_load64x2(const uint64_t a, const uint64_t b) static inline void softaes_block_store(uint8_t out[16], const SoftAesBlock in) { +#ifdef NATIVE_LITTLE_ENDIAN + memcpy(out, &in, 16); +#else STORE32_LE(out + 0, in.w0); STORE32_LE(out + 4, in.w1); STORE32_LE(out + 8, in.w2); STORE32_LE(out + 12, in.w3); +#endif } static inline SoftAesBlock From b717cc4aff3c85f9a445b29d1fd6b3f5f8d00435 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 21 Oct 2024 17:49:22 +0200 Subject: [PATCH 132/219] Slightly improve wasm performance --- src/common/softaes.c | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/src/common/softaes.c b/src/common/softaes.c index d19d0af..ed060bf 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -151,10 +151,35 @@ static const uint32_t* const LUT1 = _aes_lut + 1 * 256; static const uint32_t* const LUT2 = _aes_lut + 2 * 256; static const uint32_t* const LUT3 = _aes_lut + 3 * 256; -static SoftAesBlock -_encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const uint8_t ix3[4]) +SoftAesBlock +softaes_block_encrypt(const SoftAesBlock block, const SoftAesBlock rk) { - CRYPTO_ALIGN(64) SoftAesBlock out; + SoftAesBlock out; + uint8_t ix0[4], ix1[4], ix2[4], ix3[4]; + const uint32_t s0 = block.w0; + const uint32_t s1 = block.w1; + const uint32_t s2 = block.w2; + const uint32_t s3 = block.w3; + + ix0[0] = (uint8_t) s0; + ix0[1] = (uint8_t) s1; + ix0[2] = (uint8_t) s2; + ix0[3] = (uint8_t) s3; + + ix1[0] = (uint8_t) (s1 >> 8); + ix1[1] = (uint8_t) (s2 >> 8); + ix1[2] = (uint8_t) (s3 >> 8); + ix1[3] = (uint8_t) (s0 >> 8); + + ix2[0] = (uint8_t) (s2 >> 16); + ix2[1] = (uint8_t) (s3 >> 16); + ix2[2] = (uint8_t) (s0 >> 16); + ix2[3] = (uint8_t) (s1 >> 16); + + ix3[0] = (uint8_t) (s3 >> 24); + ix3[1] = (uint8_t) (s0 >> 24); + ix3[2] = (uint8_t) (s1 >> 24); + ix3[3] = (uint8_t) (s2 >> 24); out.w0 = LUT0[ix0[0]]; out.w1 = LUT0[ix0[1]]; @@ -176,9 +201,13 @@ _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const out.w2 ^= LUT3[ix3[2]]; out.w3 ^= LUT3[ix3[3]]; + out.w0 ^= rk.w0; + out.w1 ^= rk.w1; + out.w2 ^= rk.w2; + out.w3 ^= rk.w3; + return out; } - #else uint32_t _aes_lut[256] __attribute__((visibility("hidden"))) = { @@ -268,7 +297,6 @@ _encrypt(const uint8_t ix0[4], const uint8_t ix1[4], const uint8_t ix2[4], const return out; } -#endif SoftAesBlock softaes_block_encrypt(const SoftAesBlock block, const SoftAesBlock rk) @@ -309,3 +337,4 @@ softaes_block_encrypt(const SoftAesBlock block, const SoftAesBlock rk) return out; } +#endif From 5195af697476a4926b638a5bd42c09d6a937f24f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 21 Oct 2024 23:38:10 +0200 Subject: [PATCH 133/219] Add some mobile benchmark numbers --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index 4838dd5..ee25c4e 100644 --- a/README.md +++ b/README.md @@ -90,3 +90,23 @@ AEGIS is very fast on CPUs with parallel execution pipelines and AES support. ### Authentication (64 KB) ![AEGIS-MAC benchmark results](img/bench-mac.png) + +### Mobile benchmarks + +Apple iPhone 15 Pro: + +| Algorithm | Throughput (Mb/s) | +| ---------------------------- | ----------------- | +| AEGIS128X2 (libaegis) | 129.53 | +| AEGIS256x2 (libaegis) | 89.87 | +| AES128-GCM (Apple CryptoKit) | 34.40 | +| AES256-GCM (Apple CryptoKit) | 32.21 | + +Apple iPhone 8: + +| Algorithm | Throughput (Mb/s) | +| ---------------------------- | ----------------- | +| AEGIS128X2 (libaegis) | 65.22 | +| AEGIS256x2 (libaegis) | 38.49 | +| AES128-GCM (Apple CryptoKit) | 18.16 | +| AES256-GCM (Apple CryptoKit) | 15.42 | From 6272ba7bd6125d1c44169bc461d7724437c716b8 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 21 Oct 2024 23:40:12 +0200 Subject: [PATCH 134/219] Replace tables with a picture --- README.md | 18 +----------------- img/bench-mobile.png | Bin 0 -> 36815 bytes 2 files changed, 1 insertion(+), 17 deletions(-) create mode 100644 img/bench-mobile.png diff --git a/README.md b/README.md index ee25c4e..f6d1af8 100644 --- a/README.md +++ b/README.md @@ -93,20 +93,4 @@ AEGIS is very fast on CPUs with parallel execution pipelines and AES support. ### Mobile benchmarks -Apple iPhone 15 Pro: - -| Algorithm | Throughput (Mb/s) | -| ---------------------------- | ----------------- | -| AEGIS128X2 (libaegis) | 129.53 | -| AEGIS256x2 (libaegis) | 89.87 | -| AES128-GCM (Apple CryptoKit) | 34.40 | -| AES256-GCM (Apple CryptoKit) | 32.21 | - -Apple iPhone 8: - -| Algorithm | Throughput (Mb/s) | -| ---------------------------- | ----------------- | -| AEGIS128X2 (libaegis) | 65.22 | -| AEGIS256x2 (libaegis) | 38.49 | -| AES128-GCM (Apple CryptoKit) | 18.16 | -| AES256-GCM (Apple CryptoKit) | 15.42 | +![AEGIS mobile benchmark results](img/bench-mobile.png) \ No newline at end of file diff --git a/img/bench-mobile.png b/img/bench-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..5e81d6a0c8807734cc2aea2a6e24f29b04dd8cda GIT binary patch literal 36815 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 HY0&=znnSL? literal 0 HcmV?d00001 From 53d818915e42af4c89bf41f0d2f9408cf58f72b3 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 23 Oct 2024 19:48:27 +0200 Subject: [PATCH 135/219] aegis_verify_n(): use an optblocker --- src/common/common.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/common/common.c b/src/common/common.c index 2797457..d2f3640 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -4,13 +4,15 @@ #include "common.h" #include "cpu.h" +static volatile uint16_t optblocker_u16; + static inline int aegis_verify_n(const uint8_t *x_, const uint8_t *y_, const int n) { const volatile uint8_t *volatile x = (const volatile uint8_t *volatile) x_; const volatile uint8_t *volatile y = (const volatile uint8_t *volatile) y_; - volatile uint_fast16_t d = 0U; - int i; + volatile uint16_t d = 0U; + int i; for (i = 0; i < n; i++) { d |= x[i] ^ y[i]; @@ -18,7 +20,10 @@ aegis_verify_n(const uint8_t *x_, const uint8_t *y_, const int n) #if defined(__GNUC__) || defined(__clang__) __asm__("" : "+r"(d) :); #endif - return (1 & ((d - 1) >> 8)) - 1; + d--; + d = ((d >> 13) ^ optblocker_u16) >> 2; + + return (int) d - 1; } int From 4b6095344ffb9d024d4693929692b1b00dd0ff7a Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 12:20:09 +0100 Subject: [PATCH 136/219] Explicitly call aegis_init() in benchmarks --- src/test/benchmark.zig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index 1dfba34..35e73f3 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -357,6 +357,10 @@ fn bench_aegis256x4_mac() !void { } pub fn main() !void { + if (aegis.aegis_init() != 0) { + return error.InitFailed; + } + try bench_aegis256(); try bench_aegis256x2(); try bench_aegis256x4(); From 54d984f6cf71c75bd2a9cdc32f867d9154ecab0a Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 12:26:28 +0100 Subject: [PATCH 137/219] Add Altivec support --- build.zig | 1 + src/aegis128l/aegis128l.c | 10 +++++ src/aegis128l/aegis128l_altivec.c | 74 +++++++++++++++++++++++++++++++ src/aegis128l/aegis128l_altivec.h | 9 ++++ src/common/cpu.c | 17 +++++++ src/common/cpu.h | 2 + 6 files changed, 113 insertions(+) create mode 100644 src/aegis128l/aegis128l_altivec.c create mode 100644 src/aegis128l/aegis128l_altivec.h diff --git a/build.zig b/build.zig index 7e47050..c78e344 100644 --- a/build.zig +++ b/build.zig @@ -30,6 +30,7 @@ pub fn build(b: *std.Build) void { const source_files = &.{ "src/aegis128l/aegis128l_aesni.c", + "src/aegis128l/aegis128l_altivec.c", "src/aegis128l/aegis128l_armcrypto.c", "src/aegis128l/aegis128l_soft.c", "src/aegis128l/aegis128l.c", diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 441194c..468b53a 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -8,6 +8,7 @@ #include "../common/cpu.h" #include "aegis128l.h" #include "aegis128l_aesni.h" +#include "aegis128l_altivec.h" #include "aegis128l_armcrypto.h" #ifndef HAS_HW_AES @@ -18,6 +19,8 @@ static const aegis128l_implementation *implementation = &aegis128l_soft_implemen static const aegis128l_implementation *implementation = &aegis128l_armcrypto_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis128l_implementation *implementation = &aegis128l_aesni_implementation; +# elif defined(__ALTIVEC__) && defined(__CRYPTO__) +static const aegis128l_implementation *implementation = &aegis128l_altivec_implementation; # else # error "Unsupported architecture" # endif @@ -241,5 +244,12 @@ aegis128l_pick_best_implementation(void) } #endif +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + if (aegis_runtime_has_altivec()) { + implementation = &aegis128l_altivec_implementation; + return 0; + } +#endif + return 0; /* LCOV_EXCL_LINE */ } \ No newline at end of file diff --git a/src/aegis128l/aegis128l_altivec.c b/src/aegis128l/aegis128l_altivec.c new file mode 100644 index 0000000..2168245 --- /dev/null +++ b/src/aegis128l/aegis128l_altivec.c @@ -0,0 +1,74 @@ +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis128l.h" +# include "aegis128l_altivec.h" + +# include + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+altivec+crypto") +# endif + +# define AES_BLOCK_LENGTH 16 + +typedef vector unsigned char aes_block_t; + +# define AES_BLOCK_XOR(A, B) vec_xor((A), (B)) +# define AES_BLOCK_AND(A, B) vec_and((A), (B)) +# define AES_BLOCK_LOAD(A) vec_xl_be(0, (const unsigned char *) (A)) + +# define AES_BLOCK_LOAD_64x2(A, B) \ + vec_revb(vec_insert((B), vec_promote((unsigned long long) (A), 1), 0)) + +# define AES_BLOCK_STORE(A, B) vec_xst_be((B), 0, (unsigned char *) (A)) +# define AES_ENC(A, B) vec_cipher_be((A), (B)) + +static inline void +aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_BLOCK_XOR(AES_ENC(state[3], state[4]), d2); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d1); +} + +# include "aegis128l_common.h" + +struct aegis128l_implementation aegis128l_altivec_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, + .state_clone = state_clone, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +#endif diff --git a/src/aegis128l/aegis128l_altivec.h b/src/aegis128l/aegis128l_altivec.h new file mode 100644 index 0000000..4078233 --- /dev/null +++ b/src/aegis128l/aegis128l_altivec.h @@ -0,0 +1,9 @@ +#ifndef aegis128l_altivec_H +#define aegis128l_altivec_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128l_implementation aegis128l_altivec_implementation; + +#endif \ No newline at end of file diff --git a/src/common/cpu.c b/src/common/cpu.c index 8473028..9c284ee 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -29,6 +29,7 @@ typedef struct CPUFeatures_ { int has_avx512f; int has_aesni; int has_vaes; + int has_altivec; } CPUFeatures; static CPUFeatures _cpu_features; @@ -260,6 +261,15 @@ _runtime_intel_cpu_features(CPUFeatures *const cpu_features) return 0; } +static int +_runtime_powerpc_cpu_features(CPUFeatures *const cpu_features) +{ +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + cpu_features->has_altivec = 1; +#endif + return 0; +} + int aegis_runtime_get_cpu_features(void) { @@ -269,6 +279,7 @@ aegis_runtime_get_cpu_features(void) ret &= _runtime_arm_cpu_features(&_cpu_features); ret &= _runtime_intel_cpu_features(&_cpu_features); + ret &= _runtime_powerpc_cpu_features(&_cpu_features); _cpu_features.initialized = 1; return ret; @@ -314,4 +325,10 @@ int aegis_runtime_has_vaes(void) { return _cpu_features.has_vaes; +} + +int +aegis_runtime_has_altivec(void) +{ + return _cpu_features.has_altivec; } \ No newline at end of file diff --git a/src/common/cpu.h b/src/common/cpu.h index 4408bb9..065d0df 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -23,4 +23,6 @@ int aegis_runtime_has_aesni(void); int aegis_runtime_has_vaes(void); +int aegis_runtime_has_altivec(void); + #endif From 74a6167c71b7a63f9ed1ed190bc435a2c9665fdb Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 12:53:07 +0100 Subject: [PATCH 138/219] Altivec for 128X2 --- build.zig | 1 + src/aegis128l/aegis128l_altivec.c | 4 +- src/aegis128x2/aegis128x2.c | 10 +++ src/aegis128x2/aegis128x2_altivec.c | 105 ++++++++++++++++++++++++++++ src/aegis128x2/aegis128x2_altivec.h | 9 +++ 5 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 src/aegis128x2/aegis128x2_altivec.c create mode 100644 src/aegis128x2/aegis128x2_altivec.h diff --git a/build.zig b/build.zig index c78e344..704b5ba 100644 --- a/build.zig +++ b/build.zig @@ -36,6 +36,7 @@ pub fn build(b: *std.Build) void { "src/aegis128l/aegis128l.c", "src/aegis128x2/aegis128x2_aesni.c", + "src/aegis128x2/aegis128x2_altivec.c", "src/aegis128x2/aegis128x2_avx2.c", "src/aegis128x2/aegis128x2_armcrypto.c", "src/aegis128x2/aegis128x2_soft.c", diff --git a/src/aegis128l/aegis128l_altivec.c b/src/aegis128l/aegis128l_altivec.c index 2168245..e0a2100 100644 --- a/src/aegis128l/aegis128l_altivec.c +++ b/src/aegis128l/aegis128l_altivec.c @@ -25,10 +25,8 @@ typedef vector unsigned char aes_block_t; # define AES_BLOCK_XOR(A, B) vec_xor((A), (B)) # define AES_BLOCK_AND(A, B) vec_and((A), (B)) # define AES_BLOCK_LOAD(A) vec_xl_be(0, (const unsigned char *) (A)) - # define AES_BLOCK_LOAD_64x2(A, B) \ - vec_revb(vec_insert((B), vec_promote((unsigned long long) (A), 1), 0)) - + vec_revb(vec_insert((A), vec_promote((unsigned long long) (B), 1), 0)) # define AES_BLOCK_STORE(A, B) vec_xst_be((B), 0, (unsigned char *) (A)) # define AES_ENC(A, B) vec_cipher_be((A), (B)) diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index c121d4b..55dcebe 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -8,6 +8,7 @@ #include "../common/cpu.h" #include "aegis128x2.h" #include "aegis128x2_aesni.h" +#include "aegis128x2_altivec.h" #include "aegis128x2_armcrypto.h" #include "aegis128x2_avx2.h" @@ -19,6 +20,8 @@ static const aegis128x2_implementation *implementation = &aegis128x2_soft_implem static const aegis128x2_implementation *implementation = &aegis128x2_armcrypto_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis128x2_implementation *implementation = &aegis128x2_aesni_implementation; +# elif defined(__ALTIVEC__) && defined(__CRYPTO__) +static const aegis128x2_implementation *implementation = &aegis128x2_altivec_implementation; # else # error "Unsupported architecture" # endif @@ -248,5 +251,12 @@ aegis128x2_pick_best_implementation(void) } #endif +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + if (aegis_runtime_has_altivec()) { + implementation = &aegis128x2_altivec_implementation; + return 0; + } +#endif + return 0; /* LCOV_EXCL_LINE */ } \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_altivec.c b/src/aegis128x2/aegis128x2_altivec.c new file mode 100644 index 0000000..6fa113c --- /dev/null +++ b/src/aegis128x2/aegis128x2_altivec.c @@ -0,0 +1,105 @@ +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis128x2.h" +# include "aegis128x2_altivec.h" + +# include + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+altivec+crypto") +# endif + +# define AES_BLOCK_LENGTH 32 + +typedef struct { + vector unsigned char b0; + vector unsigned char b1; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_xor(a.b0, b.b0), vec_xor(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_and(a.b0, b.b0), vec_and(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { vec_xl_be(0, a), vec_xl_be(0, a + 16) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const vector unsigned char t = + vec_revb(vec_insert(a, vec_promote((unsigned long long) (b), 1), 0)); + return (aes_block_t) { t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + vec_xst_be(b.b0, 0, a); + vec_xst_be(b.b1, 0, a + 16); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_cipher_be(a.b0, b.b0), vec_cipher_be(a.b1, b.b1) }; +} + +static inline void +aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_BLOCK_XOR(AES_ENC(state[3], state[4]), d2); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d1); +} + +# include "aegis128x2_common.h" + +struct aegis128x2_implementation aegis128x2_altivec_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, + .state_clone = state_clone, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +#endif diff --git a/src/aegis128x2/aegis128x2_altivec.h b/src/aegis128x2/aegis128x2_altivec.h new file mode 100644 index 0000000..4908c6d --- /dev/null +++ b/src/aegis128x2/aegis128x2_altivec.h @@ -0,0 +1,9 @@ +#ifndef aegis128x2_altivec_H +#define aegis128x2_altivec_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x2_implementation aegis128x2_altivec_implementation; + +#endif \ No newline at end of file From d37fbf045afb974dd8be1a810289ef116f0b492e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 13:03:57 +0100 Subject: [PATCH 139/219] 128x4 altivec --- build.zig | 1 + src/aegis128x4/aegis128x4.c | 8 ++ src/aegis128x4/aegis128x4_altivec.c | 113 ++++++++++++++++++++++++++++ src/aegis128x4/aegis128x4_altivec.h | 9 +++ 4 files changed, 131 insertions(+) create mode 100644 src/aegis128x4/aegis128x4_altivec.c create mode 100644 src/aegis128x4/aegis128x4_altivec.h diff --git a/build.zig b/build.zig index 704b5ba..8e137c9 100644 --- a/build.zig +++ b/build.zig @@ -43,6 +43,7 @@ pub fn build(b: *std.Build) void { "src/aegis128x2/aegis128x2.c", "src/aegis128x4/aegis128x4_aesni.c", + "src/aegis128x4/aegis128x4_altivec.c", "src/aegis128x4/aegis128x4_avx2.c", "src/aegis128x4/aegis128x4_avx512.c", "src/aegis128x4/aegis128x4_armcrypto.c", diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index 2c24895..2f04226 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -8,6 +8,7 @@ #include "../common/cpu.h" #include "aegis128x4.h" #include "aegis128x4_aesni.h" +#include "aegis128x4_altivec.h" #include "aegis128x4_armcrypto.h" #include "aegis128x4_avx2.h" #include "aegis128x4_avx512.h" @@ -253,5 +254,12 @@ aegis128x4_pick_best_implementation(void) } #endif +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + if (aegis_runtime_has_altivec()) { + implementation = &aegis128x4_altivec_implementation; + return 0; + } +#endif + return 0; /* LCOV_EXCL_LINE */ } diff --git a/src/aegis128x4/aegis128x4_altivec.c b/src/aegis128x4/aegis128x4_altivec.c new file mode 100644 index 0000000..3782021 --- /dev/null +++ b/src/aegis128x4/aegis128x4_altivec.c @@ -0,0 +1,113 @@ +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis128x4.h" +# include "aegis128x4_altivec.h" + +# include + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+altivec+crypto") +# endif + +# define AES_BLOCK_LENGTH 64 + +typedef struct { + vector unsigned char b0; + vector unsigned char b1; + vector unsigned char b2; + vector unsigned char b3; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_xor(a.b0, b.b0), vec_xor(a.b1, b.b1), vec_xor(a.b2, b.b2), + vec_xor(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_and(a.b0, b.b0), vec_and(a.b1, b.b1), vec_and(a.b2, b.b2), + vec_and(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { vec_xl_be(0, a), vec_xl_be(0, a + 16), vec_xl_be(0, a + 32), + vec_xl_be(0, a + 48) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const vector unsigned char t = + vec_revb(vec_insert(a, vec_promote((unsigned long long) (b), 1), 0)); + return (aes_block_t) { t, t, t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + vec_xst_be(b.b0, 0, a); + vec_xst_be(b.b1, 0, a + 16); + vec_xst_be(b.b2, 0, a + 32); + vec_xst_be(b.b3, 0, a + 48); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_cipher_be(a.b0, b.b0), vec_cipher_be(a.b1, b.b1), + vec_cipher_be(a.b2, b.b2), vec_cipher_be(a.b3, b.b3) }; +} + +static inline void +aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_BLOCK_XOR(AES_ENC(state[3], state[4]), d2); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d1); +} + +# include "aegis128x4_common.h" + +struct aegis128x4_implementation aegis128x4_altivec_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, + .state_clone = state_clone, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +#endif diff --git a/src/aegis128x4/aegis128x4_altivec.h b/src/aegis128x4/aegis128x4_altivec.h new file mode 100644 index 0000000..6207bd0 --- /dev/null +++ b/src/aegis128x4/aegis128x4_altivec.h @@ -0,0 +1,9 @@ +#ifndef aegis128x4_altivec_H +#define aegis128x4_altivec_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x4_implementation aegis128x4_altivec_implementation; + +#endif \ No newline at end of file From fb39c521637a850e8d5cbd391d8c13fb9ffbc04f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 13:08:28 +0100 Subject: [PATCH 140/219] Enable Altivec by default whenever possible --- src/aegis128x4/aegis128x4.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index 2f04226..f718362 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -21,6 +21,8 @@ static const aegis128x4_implementation *implementation = &aegis128x4_soft_implem static const aegis128x4_implementation *implementation = &aegis128x4_armcrypto_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis128x4_implementation *implementation = &aegis128x4_aesni_implementation; +# elif defined(__ALTIVEC__) && defined(__CRYPTO__) +static const aegis128x4_implementation *implementation = &aegis128x4_altivec_implementation; # else # error "Unsupported architecture" # endif From 2bdad007e8f397a1f9374c860f15d635c839fece Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 13:13:35 +0100 Subject: [PATCH 141/219] Test on PowerPC --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 09c35f4..a60b986 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,8 @@ jobs: zig build -Dtarget=x86_64-windows -Dcpu=baseline zig build -Dtarget=aarch64-windows -Dcpu=baseline+aes+crypto zig build -Dtarget=x86_64-macos -Dcpu=baseline - zig build -Dtarget=aarch64-macos -Dcpu=apple_m2 + zig build -Dtarget=aarch64-macos -Dcpu=baseline + zig build -Dtarget=powerpc64le-linux zig build -Dtarget=x86_64-linux -Dcpu=znver4 zig build -Dtarget=aarch64-linux -Dcpu=ampere1a+aes+crypto From de4f9f375a6c9159a4dde023b7f7ae34b127ff2e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 13:52:36 +0100 Subject: [PATCH 142/219] Add Altivec support to 256* --- build.zig | 7 +- src/aegis256/aegis256.c | 10 +++ src/aegis256/aegis256_altivec.c | 70 ++++++++++++++++++ src/aegis256/aegis256_altivec.h | 9 +++ src/aegis256x2/aegis256x2.c | 10 +++ src/aegis256x2/aegis256x2_altivec.c | 103 ++++++++++++++++++++++++++ src/aegis256x2/aegis256x2_altivec.h | 9 +++ src/aegis256x4/aegis256x4.c | 10 +++ src/aegis256x4/aegis256x4_altivec.c | 111 ++++++++++++++++++++++++++++ src/aegis256x4/aegis256x4_altivec.h | 9 +++ 10 files changed, 345 insertions(+), 3 deletions(-) create mode 100644 src/aegis256/aegis256_altivec.c create mode 100644 src/aegis256/aegis256_altivec.h create mode 100644 src/aegis256x2/aegis256x2_altivec.c create mode 100644 src/aegis256x2/aegis256x2_altivec.h create mode 100644 src/aegis256x4/aegis256x4_altivec.c create mode 100644 src/aegis256x4/aegis256x4_altivec.h diff --git a/build.zig b/build.zig index 8e137c9..2fa1098 100644 --- a/build.zig +++ b/build.zig @@ -47,21 +47,25 @@ pub fn build(b: *std.Build) void { "src/aegis128x4/aegis128x4_avx2.c", "src/aegis128x4/aegis128x4_avx512.c", "src/aegis128x4/aegis128x4_armcrypto.c", + "src/aegis128x4/aegis128x4_armcrypto.c", "src/aegis128x4/aegis128x4_soft.c", "src/aegis128x4/aegis128x4.c", "src/aegis256/aegis256_aesni.c", + "src/aegis256/aegis256_altivec.c", "src/aegis256/aegis256_armcrypto.c", "src/aegis256/aegis256_soft.c", "src/aegis256/aegis256.c", "src/aegis256x2/aegis256x2_aesni.c", + "src/aegis256x2/aegis256x2_altivec.c", "src/aegis256x2/aegis256x2_avx2.c", "src/aegis256x2/aegis256x2_armcrypto.c", "src/aegis256x2/aegis256x2_soft.c", "src/aegis256x2/aegis256x2.c", "src/aegis256x4/aegis256x4_aesni.c", + "src/aegis256x4/aegis256x4_altivec.c", "src/aegis256x4/aegis256x4_avx2.c", "src/aegis256x4/aegis256x4_avx512.c", "src/aegis256x4/aegis256x4_armcrypto.c", @@ -99,9 +103,6 @@ pub fn build(b: *std.Build) void { const run_main_tests = b.addRunArtifact(main_tests); - // This creates a build step. It will be visible in the `zig build --help` menu, - // and can be selected like this: `zig build test` - // This will evaluate the `test` step rather than the default, which is "install". const test_step = b.step("test", "Run library tests"); test_step.dependOn(&run_main_tests.step); diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index fa4da72..c697f01 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -8,6 +8,7 @@ #include "../common/cpu.h" #include "aegis256.h" #include "aegis256_aesni.h" +#include "aegis256_altivec.h" #include "aegis256_armcrypto.h" #ifndef HAS_HW_AES @@ -18,6 +19,8 @@ static const aegis256_implementation *implementation = &aegis256_soft_implementa static const aegis256_implementation *implementation = &aegis256_armcrypto_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis256_implementation *implementation = &aegis256_aesni_implementation; +# elif defined(__ALTIVEC__) && defined(__CRYPTO__) +static const aegis256_implementation *implementation = &aegis256_altivec_implementation; # else # error "Unsupported architecture" # endif @@ -241,5 +244,12 @@ aegis256_pick_best_implementation(void) } #endif +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + if (aegis_runtime_has_altivec()) { + implementation = &aegis256_altivec_implementation; + return 0; + } +#endif + return 0; /* LCOV_EXCL_LINE */ } diff --git a/src/aegis256/aegis256_altivec.c b/src/aegis256/aegis256_altivec.c new file mode 100644 index 0000000..aca9f6d --- /dev/null +++ b/src/aegis256/aegis256_altivec.c @@ -0,0 +1,70 @@ +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis256.h" +# include "aegis256_altivec.h" + +# include + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+altivec+crypto") +# endif + +# define AES_BLOCK_LENGTH 16 + +typedef vector unsigned char aes_block_t; + +# define AES_BLOCK_XOR(A, B) vec_xor((A), (B)) +# define AES_BLOCK_AND(A, B) vec_and((A), (B)) +# define AES_BLOCK_LOAD(A) vec_xl_be(0, (const unsigned char *) (A)) +# define AES_BLOCK_LOAD_64x2(A, B) \ + vec_revb(vec_insert((A), vec_promote((unsigned long long) (B), 1), 0)) +# define AES_BLOCK_STORE(A, B) vec_xst_be((B), 0, (unsigned char *) (A)) +# define AES_ENC(A, B) vec_cipher_be((A), (B)) + +static inline void +aegis256_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +# include "aegis256_common.h" + +struct aegis256_implementation aegis256_altivec_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, + .state_clone = state_clone, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +#endif diff --git a/src/aegis256/aegis256_altivec.h b/src/aegis256/aegis256_altivec.h new file mode 100644 index 0000000..9d050bc --- /dev/null +++ b/src/aegis256/aegis256_altivec.h @@ -0,0 +1,9 @@ +#ifndef aegis256_altivec_H +#define aegis256_altivec_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256_implementation aegis256_altivec_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index 0a3affb..241b898 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -8,6 +8,7 @@ #include "../common/cpu.h" #include "aegis256x2.h" #include "aegis256x2_aesni.h" +#include "aegis256x2_altivec.h" #include "aegis256x2_armcrypto.h" #include "aegis256x2_avx2.h" @@ -19,6 +20,8 @@ static const aegis256x2_implementation *implementation = &aegis256x2_soft_implem static const aegis256x2_implementation *implementation = &aegis256x2_armcrypto_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis256x2_implementation *implementation = &aegis256x2_aesni_implementation; +# elif defined(__ALTIVEC__) && defined(__CRYPTO__) +static const aegis256x2_implementation *implementation = &aegis256x2_altivec_implementation; # else # error "Unsupported architecture" # endif @@ -248,5 +251,12 @@ aegis256x2_pick_best_implementation(void) } #endif +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + if (aegis_runtime_has_altivec()) { + implementation = &aegis256x2_altivec_implementation; + return 0; + } +#endif + return 0; /* LCOV_EXCL_LINE */ } \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_altivec.c b/src/aegis256x2/aegis256x2_altivec.c new file mode 100644 index 0000000..52d7e0e --- /dev/null +++ b/src/aegis256x2/aegis256x2_altivec.c @@ -0,0 +1,103 @@ +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis256x2.h" +# include "aegis256x2_altivec.h" + +# include + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+altivec+crypto") +# endif + +# define AES_BLOCK_LENGTH 32 + +typedef struct { + vector unsigned char b0; + vector unsigned char b1; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_xor(a.b0, b.b0), vec_xor(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_and(a.b0, b.b0), vec_and(a.b1, b.b1) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { vec_xl_be(0, a), vec_xl_be(0, a + 16) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const vector unsigned char t = + vec_revb(vec_insert(a, vec_promote((unsigned long long) (b), 1), 0)); + return (aes_block_t) { t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + vec_xst_be(b.b0, 0, a); + vec_xst_be(b.b1, 0, a + 16); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_cipher_be(a.b0, b.b0), vec_cipher_be(a.b1, b.b1) }; +} + +static inline void +aegis256x2_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +# include "aegis256x2_common.h" + +struct aegis256x2_implementation aegis256x2_altivec_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, + .state_clone = state_clone, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +#endif diff --git a/src/aegis256x2/aegis256x2_altivec.h b/src/aegis256x2/aegis256x2_altivec.h new file mode 100644 index 0000000..39418ff --- /dev/null +++ b/src/aegis256x2/aegis256x2_altivec.h @@ -0,0 +1,9 @@ +#ifndef aegis256x2_altivec_H +#define aegis256x2_altivec_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x2_implementation aegis256x2_altivec_implementation; + +#endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index 98d3eae..3fc7741 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -8,6 +8,7 @@ #include "../common/cpu.h" #include "aegis256x4.h" #include "aegis256x4_aesni.h" +#include "aegis256x4_altivec.h" #include "aegis256x4_armcrypto.h" #include "aegis256x4_avx2.h" #include "aegis256x4_avx512.h" @@ -20,6 +21,8 @@ static const aegis256x4_implementation *implementation = &aegis256x4_soft_implem static const aegis256x4_implementation *implementation = &aegis256x4_armcrypto_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis256x4_implementation *implementation = &aegis256x4_aesni_implementation; +# elif defined(__ALTIVEC__) && defined(__CRYPTO__) +static const aegis256x4_implementation *implementation = &aegis256x4_altivec_implementation; # else # error "Unsupported architecture" # endif @@ -253,5 +256,12 @@ aegis256x4_pick_best_implementation(void) } #endif +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + if (aegis_runtime_has_altivec()) { + implementation = &aegis256x4_altivec_implementation; + return 0; + } +#endif + return 0; /* LCOV_EXCL_LINE */ } \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_altivec.c b/src/aegis256x4/aegis256x4_altivec.c new file mode 100644 index 0000000..c061cb2 --- /dev/null +++ b/src/aegis256x4/aegis256x4_altivec.c @@ -0,0 +1,111 @@ +#if defined(__ALTIVEC__) && defined(__CRYPTO__) + +# include +# include +# include +# include +# include + +# include "../common/common.h" +# include "aegis256x4.h" +# include "aegis256x4_altivec.h" + +# include + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+altivec+crypto") +# endif + +# define AES_BLOCK_LENGTH 64 + +typedef struct { + vector unsigned char b0; + vector unsigned char b1; + vector unsigned char b2; + vector unsigned char b3; +} aes_block_t; + +static inline aes_block_t +AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_xor(a.b0, b.b0), vec_xor(a.b1, b.b1), vec_xor(a.b2, b.b2), + vec_xor(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_AND(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_and(a.b0, b.b0), vec_and(a.b1, b.b1), vec_and(a.b2, b.b2), + vec_and(a.b3, b.b3) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD(const uint8_t *a) +{ + return (aes_block_t) { vec_xl_be(0, a), vec_xl_be(0, a + 16), vec_xl_be(0, a + 32), + vec_xl_be(0, a + 48) }; +} + +static inline aes_block_t +AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) +{ + const vector unsigned char t = + vec_revb(vec_insert(a, vec_promote((unsigned long long) (b), 1), 0)); + return (aes_block_t) { t, t, t, t }; +} +static inline void +AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) +{ + vec_xst_be(b.b0, 0, a); + vec_xst_be(b.b1, 0, a + 16); + vec_xst_be(b.b2, 0, a + 32); + vec_xst_be(b.b3, 0, a + 48); +} + +static inline aes_block_t +AES_ENC(const aes_block_t a, const aes_block_t b) +{ + return (aes_block_t) { vec_cipher_be(a.b0, b.b0), vec_cipher_be(a.b1, b.b1), + vec_cipher_be(a.b2, b.b2), vec_cipher_be(a.b3, b.b3) }; +} + +static inline void +aegis256x4_update(aes_block_t *const state, const aes_block_t d) +{ + aes_block_t tmp; + + tmp = state[5]; + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_ENC(state[3], state[4]); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d); +} + +# include "aegis256x4_common.h" + +struct aegis256x4_implementation aegis256x4_altivec_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, + .state_clone = state_clone, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +#endif diff --git a/src/aegis256x4/aegis256x4_altivec.h b/src/aegis256x4/aegis256x4_altivec.h new file mode 100644 index 0000000..a0be190 --- /dev/null +++ b/src/aegis256x4/aegis256x4_altivec.h @@ -0,0 +1,9 @@ +#ifndef aegis256x4_altivec_H +#define aegis256x4_altivec_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x4_implementation aegis256x4_altivec_implementation; + +#endif \ No newline at end of file From 42e4cc5433473fc3fc8f4f1fbcd24e7f81af1535 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 13:54:49 +0100 Subject: [PATCH 143/219] Automatically enable hardware support on __ALTIVEC__ + __CRYPTO__ --- src/common/cpu.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/common/cpu.h b/src/common/cpu.h index 065d0df..395dbbe 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -5,6 +5,8 @@ # define HAS_HW_AES #elif defined(__AES__) && defined(__AVX__) # define HAS_HW_AES +#elif defined(__ALTIVEC__) && defined(__CRYPTO__) +# define HAS_HW_AES #endif int aegis_runtime_get_cpu_features(void); From 8106937be789bf0f9eca9f0302e13be6988e31a2 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 15:02:04 +0100 Subject: [PATCH 144/219] Nits --- .github/workflows/version_check.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/version_check.yml b/.github/workflows/version_check.yml index 81981d0..2300cb0 100644 --- a/.github/workflows/version_check.yml +++ b/.github/workflows/version_check.yml @@ -2,8 +2,8 @@ name: version check on: push: - tags: - - '**' + tags: + - '**' jobs: build: From 197d92532af3781ff384d85c5ef34db5a0f30bee Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 15:08:41 +0100 Subject: [PATCH 145/219] Pasto --- .github/workflows/version_check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/version_check.yml b/.github/workflows/version_check.yml index 2300cb0..624a881 100644 --- a/.github/workflows/version_check.yml +++ b/.github/workflows/version_check.yml @@ -16,5 +16,5 @@ jobs: run: | grep -E 'const version =' build.zig | grep -E '"${{ github.ref_name }}"' || exit 78 echo "Zig build version check passed." - grep -E 'COMPATIBILITY AnyNewerVersion' build.zig | grep -E ' ${{ github.ref_name }} ' || exit 78 + grep -E 'COMPATIBILITY AnyNewerVersion' CMakeLists.txt | grep -E ' ${{ github.ref_name }} ' || exit 78 echo "CMake version check passed." From 549cb76fa56c09b636fc66ebe74aef8473a9e161 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Oct 2024 15:15:25 +0100 Subject: [PATCH 146/219] Remove warning --- src/common/cpu.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/cpu.c b/src/common/cpu.c index 9c284ee..1efa55b 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -264,6 +264,7 @@ _runtime_intel_cpu_features(CPUFeatures *const cpu_features) static int _runtime_powerpc_cpu_features(CPUFeatures *const cpu_features) { + cpu_features->has_altivec = 0; #if defined(__ALTIVEC__) && defined(__CRYPTO__) cpu_features->has_altivec = 1; #endif From 146c9d9894c7c42d7e77e24cc1965145a0d64983 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 4 Nov 2024 00:10:43 +0100 Subject: [PATCH 147/219] Switch to mlugg/setup-zig@v1 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a60b986..af124cd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v4 - name: Install Zig - uses: goto-bus-stop/setup-zig@2a9625d550eefc3a9b1a43d342ad655f563f8241 + uses: mlugg/setup-zig@v1 - name: Unit tests run: | From 2ee63911bf710e4ce8863f359b3c29882600e662 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 4 Nov 2024 21:12:04 +0100 Subject: [PATCH 148/219] PoC that AEGIS-X(p) can be as fast as AEGIS-X(p-1) Right now, without 512-bit registers, AEGIS-X4 is generally slower tan AEGIS-X2. AEGIS-X2 may also be slower than AEGIS-X1 on architectures with limited registers and AES pipelines. The reason for that is register spills. We simulate large vector registers, so actual registers constantly need to be spilled and restored to/from the stack A different strategy is to evaluate the AEGIS instances sequentially, instead of in parallel. By doing so, and ignoring initialization/finalization, an intuition is that AEGIS-X4 has the same cost as the sum of 4 AEGIS-X1 runs. That is, AEGIS-X4 is not slower than AEGIS-X1 on large messages. If we need multiple passes over the entire message, memory accesses would defeat this. Unless the message is split into small chunks, and AEGIS instances are sequentially run on individual chunks. Stack spills happens way less frequently than when emulating large registers. But also, once loaded during the first pass, the chunk is likely to be available in the L1 or L2 caches, ready to be immediately processed by the next AEGIS instances. Using that trick, negotiating X2 or X4 would be acceptable most of the time: if an endpoint has registers/pipelines large enough to take advantage of them, they will. But if it doesn't, it wouldn't be significantly slower than using a variant with a lower parallelism degree. The downside is a bit of implementation complexity, but also the fact that the optimal chunk size depends on the architecture and on the use cases. We may pick that chunk size to look great on benchmarks, but AEGIS is about real-world usage, not synthetic benchmarks. So, the benefits of this approach need to be properly measured. As a PoC, we implement 128x4 that way on aarch64. Before: AEGIS-128L 109249.88 Mb/s AEGIS-128X4 75624.62 Mb/s After: AEGIS-128L 109249.88 Mb/s AEGIS-128X4 110312.01 Mb/s --- src/aegis128x4/aegis128x4_armcrypto.c | 81 ++++++++++++++++++- src/aegis128x4/aegis128x4_common.h | 108 +++++++++++++++++++++++++- 2 files changed, 187 insertions(+), 2 deletions(-) diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index ebfe6db..843afd9 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -26,7 +26,9 @@ # pragma GCC target("+simd+crypto") # endif -# define AES_BLOCK_LENGTH 64 +# define AES_BLOCK_LENGTH 64 +# define AES_BLOCK1_LENGTH 16 +# define CHUNK_SIZE 512 typedef struct { uint8x16_t b0; @@ -35,6 +37,83 @@ typedef struct { uint8x16_t b3; } aes_block_t; +/* -- */ + +typedef uint8x16_t aes_block1_t; + +# define AES_BLOCK1_XOR(A, B) veorq_u8((A), (B)) +# define AES_BLOCK1_AND(A, B) vandq_u8((A), (B)) +# define AES_BLOCK1_LOAD(A) vld1q_u8(A) +# define AES_BLOCK1_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1)) +# define AES_BLOCK1_STORE(A, B) vst1q_u8((A), (B)) +# define AES_ENC1(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B)) + +static inline void +aegis128x4_update_b0(aes_block_t *const state, const aes_block1_t d1, const aes_block1_t d2) +{ + aes_block1_t tmp; + + tmp = state[7].b0; + state[7].b0 = AES_ENC1(state[6].b0, state[7].b0); + state[6].b0 = AES_ENC1(state[5].b0, state[6].b0); + state[5].b0 = AES_ENC1(state[4].b0, state[5].b0); + state[4].b0 = AES_BLOCK1_XOR(AES_ENC1(state[3].b0, state[4].b0), d2); + state[3].b0 = AES_ENC1(state[2].b0, state[3].b0); + state[2].b0 = AES_ENC1(state[1].b0, state[2].b0); + state[1].b0 = AES_ENC1(state[0].b0, state[1].b0); + state[0].b0 = AES_BLOCK1_XOR(AES_ENC1(tmp, state[0].b0), d1); +} + +static inline void +aegis128x4_update_b1(aes_block_t *const state, const aes_block1_t d1, const aes_block1_t d2) +{ + aes_block1_t tmp; + + tmp = state[7].b1; + state[7].b1 = AES_ENC1(state[6].b1, state[7].b1); + state[6].b1 = AES_ENC1(state[5].b1, state[6].b1); + state[5].b1 = AES_ENC1(state[4].b1, state[5].b1); + state[4].b1 = AES_BLOCK1_XOR(AES_ENC1(state[3].b1, state[4].b1), d2); + state[3].b1 = AES_ENC1(state[2].b1, state[3].b1); + state[2].b1 = AES_ENC1(state[1].b1, state[2].b1); + state[1].b1 = AES_ENC1(state[0].b1, state[1].b1); + state[0].b1 = AES_BLOCK1_XOR(AES_ENC1(tmp, state[0].b1), d1); +} + +static inline void +aegis128x4_update_b2(aes_block_t *const state, const aes_block1_t d1, const aes_block1_t d2) +{ + aes_block1_t tmp; + + tmp = state[7].b2; + state[7].b2 = AES_ENC1(state[6].b2, state[7].b2); + state[6].b2 = AES_ENC1(state[5].b2, state[6].b2); + state[5].b2 = AES_ENC1(state[4].b2, state[5].b2); + state[4].b2 = AES_BLOCK1_XOR(AES_ENC1(state[3].b2, state[4].b2), d2); + state[3].b2 = AES_ENC1(state[2].b2, state[3].b2); + state[2].b2 = AES_ENC1(state[1].b2, state[2].b2); + state[1].b2 = AES_ENC1(state[0].b2, state[1].b2); + state[0].b2 = AES_BLOCK1_XOR(AES_ENC1(tmp, state[0].b2), d1); +} + +static inline void +aegis128x4_update_b3(aes_block_t *const state, const aes_block1_t d1, const aes_block1_t d2) +{ + aes_block1_t tmp; + + tmp = state[7].b3; + state[7].b3 = AES_ENC1(state[6].b3, state[7].b3); + state[6].b3 = AES_ENC1(state[5].b3, state[6].b3); + state[5].b3 = AES_ENC1(state[4].b3, state[5].b3); + state[4].b3 = AES_BLOCK1_XOR(AES_ENC1(state[3].b3, state[4].b3), d2); + state[3].b3 = AES_ENC1(state[2].b3, state[3].b3); + state[2].b3 = AES_ENC1(state[1].b3, state[2].b3); + state[1].b3 = AES_ENC1(state[0].b3, state[1].b3); + state[0].b3 = AES_BLOCK1_XOR(AES_ENC1(tmp, state[0].b3), d1); +} + +/* -- */ + static inline aes_block_t AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) { diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 03c7d05..ea8bfcf 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -121,6 +121,88 @@ aegis128x4_absorb(const uint8_t *const src, aes_block_t *const state) aegis128x4_update(state, msg0, msg1); } +#ifdef CHUNK_SIZE +static void +aegis128x4_enc_b0(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block1_t msg0, msg1; + aes_block1_t tmp0, tmp1; + + msg0 = AES_BLOCK1_LOAD(src); + msg1 = AES_BLOCK1_LOAD(src + AES_BLOCK_LENGTH); + tmp0 = AES_BLOCK1_XOR(msg0, state[6].b0); + tmp0 = AES_BLOCK1_XOR(tmp0, state[1].b0); + tmp1 = AES_BLOCK1_XOR(msg1, state[5].b0); + tmp1 = AES_BLOCK1_XOR(tmp1, state[2].b0); + tmp0 = AES_BLOCK1_XOR(tmp0, AES_BLOCK1_AND(state[2].b0, state[3].b0)); + tmp1 = AES_BLOCK1_XOR(tmp1, AES_BLOCK1_AND(state[6].b0, state[7].b0)); + AES_BLOCK1_STORE(dst, tmp0); + AES_BLOCK1_STORE(dst + AES_BLOCK_LENGTH, tmp1); + + aegis128x4_update_b0(state, msg0, msg1); +} + +static void +aegis128x4_enc_b1(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block1_t msg0, msg1; + aes_block1_t tmp0, tmp1; + + msg0 = AES_BLOCK1_LOAD(src); + msg1 = AES_BLOCK1_LOAD(src + AES_BLOCK_LENGTH); + tmp0 = AES_BLOCK1_XOR(msg0, state[6].b1); + tmp0 = AES_BLOCK1_XOR(tmp0, state[1].b1); + tmp1 = AES_BLOCK1_XOR(msg1, state[5].b1); + tmp1 = AES_BLOCK1_XOR(tmp1, state[2].b1); + tmp0 = AES_BLOCK1_XOR(tmp0, AES_BLOCK1_AND(state[2].b1, state[3].b1)); + tmp1 = AES_BLOCK1_XOR(tmp1, AES_BLOCK1_AND(state[6].b1, state[7].b1)); + AES_BLOCK1_STORE(dst, tmp0); + AES_BLOCK1_STORE(dst + AES_BLOCK_LENGTH, tmp1); + + aegis128x4_update_b1(state, msg0, msg1); +} + +static void +aegis128x4_enc_b2(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block1_t msg0, msg1; + aes_block1_t tmp0, tmp1; + + msg0 = AES_BLOCK1_LOAD(src); + msg1 = AES_BLOCK1_LOAD(src + AES_BLOCK_LENGTH); + tmp0 = AES_BLOCK1_XOR(msg0, state[6].b2); + tmp0 = AES_BLOCK1_XOR(tmp0, state[1].b2); + tmp1 = AES_BLOCK1_XOR(msg1, state[5].b2); + tmp1 = AES_BLOCK1_XOR(tmp1, state[2].b2); + tmp0 = AES_BLOCK1_XOR(tmp0, AES_BLOCK1_AND(state[2].b2, state[3].b2)); + tmp1 = AES_BLOCK1_XOR(tmp1, AES_BLOCK1_AND(state[6].b2, state[7].b2)); + AES_BLOCK1_STORE(dst, tmp0); + AES_BLOCK1_STORE(dst + AES_BLOCK_LENGTH, tmp1); + + aegis128x4_update_b2(state, msg0, msg1); +} + +static void +aegis128x4_enc_b3(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) +{ + aes_block1_t msg0, msg1; + aes_block1_t tmp0, tmp1; + + msg0 = AES_BLOCK1_LOAD(src); + msg1 = AES_BLOCK1_LOAD(src + AES_BLOCK_LENGTH); + tmp0 = AES_BLOCK1_XOR(msg0, state[6].b3); + tmp0 = AES_BLOCK1_XOR(tmp0, state[1].b3); + tmp1 = AES_BLOCK1_XOR(msg1, state[5].b3); + tmp1 = AES_BLOCK1_XOR(tmp1, state[2].b3); + tmp0 = AES_BLOCK1_XOR(tmp0, AES_BLOCK1_AND(state[2].b3, state[3].b3)); + tmp1 = AES_BLOCK1_XOR(tmp1, AES_BLOCK1_AND(state[6].b3, state[7].b3)); + AES_BLOCK1_STORE(dst, tmp0); + AES_BLOCK1_STORE(dst + AES_BLOCK_LENGTH, tmp1); + + aegis128x4_update_b3(state, msg0, msg1); +} +#endif + static void aegis128x4_enc(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) { @@ -209,7 +291,31 @@ encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size memcpy(src, ad + i, adlen % RATE); aegis128x4_absorb(src, state); } - for (i = 0; i + RATE <= mlen; i += RATE) { + i = 0; + +#ifdef CHUNK_SIZE + { + const size_t mlenx = mlen - mlen % CHUNK_SIZE; + size_t j; + + for (; i < mlenx; i += CHUNK_SIZE) { + for (j = 0; j < CHUNK_SIZE; j += RATE) { + aegis128x4_enc_b0(c + i + j, m + i + j, state); + } + for (j = AES_BLOCK1_LENGTH; j < CHUNK_SIZE; j += RATE) { + aegis128x4_enc_b1(c + i + j, m + i + j, state); + } + for (j = AES_BLOCK1_LENGTH * 2; j < CHUNK_SIZE; j += RATE) { + aegis128x4_enc_b2(c + i + j, m + i + j, state); + } + for (j = AES_BLOCK1_LENGTH * 3; j < CHUNK_SIZE; j += RATE) { + aegis128x4_enc_b3(c + i + j, m + i + j, state); + } + } + } +#endif + + for (; i + RATE <= mlen; i += RATE) { aegis128x4_enc(c + i, m + i, state); } if (mlen % RATE) { From bf5f46ab9c6bc95b2a0b1dada9bd3e86cd2970e6 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 5 Nov 2024 13:15:48 +0100 Subject: [PATCH 149/219] Update benchmarks for current version --- img/bench-encryption.png | Bin 183220 -> 182923 bytes img/bench-mac.png | Bin 124482 -> 133281 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/img/bench-encryption.png b/img/bench-encryption.png index 3d33ee1392ececb0360ca1fc3c90deef735ef8f3..eaa6cb7ae0d2dda167066d9e1f239690fa6c6d6a 100644 GIT binary patch literal 182923 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≦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

X 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 z z1|@RXzRmK!T${D`Z+sG(WhNHC)}&JSf%ypBGSb$Q%C!SJHI%y6U7}*T5aHsK-@X-s z56#xLYZ7y&_7x*3uq8K7)idM}+6gl-4w}ftfgoA^jCME`!8r1%g5mjj_N(x{cvGmhjON){G)_^CmdgCLXXs7=$q&{(3 zO`jS09-z$jF0ziiMn|SD*c)+CzqOE*;R-%OHOtCt8Qkt(*aQ4`>-jGjaoM<1=#`=i zeqW5@_)~7LJ_EgV!LT)6%EyyISm{s$-5?{vauq$jb}AIsrdM*SsD5~qtKuuoZs5(E zq1NnTWevSzU+%EgD_zPu#)lPUob(h6_PYtJpRl!`msQQ3CW!NjO}q>@F#J$(Br`aY zB)Pe(`Rd>8%U^ruSNfR;yjzu=h%oHYHkGc40&I?yB`{3yb!pg5`q5*W6u>45J&VV- zMAT*gs$6?DsTdLpmQ>EmORZe1z$V+IH-pt-^V<_k8`2x(*>|Q%f=rp=2mS`=EF*vm zZxkq;J_@u1B`@+MVsI->;iWK{^JWWF00zs?HS&TL_RwjRTf!?3WpZlDf!pi7EcC8$ zf0=425d0fzXpo`{y)iQ@l)@J<;vy^8uIo}{8uCrKWU%G)mKJemYpCCTw~QzwQtg`A z1DrY#c$Uc1go}R|aQ|@^&rfUQcG=1SbQ}XVW@02SxUqa)4aO6>sJk`#&S`a>C&UJO zZ5vi7JK>1kA&UG{QUU^=Sy1Gzgdw2%MKj&-7RXr<6o6^?3s8>VA=ab;PeodP*Tt5| zeexa_N5mG>gp(9z4Nww??^=K>+9&UBHZGFyv&~MF#WkZ>=LZGe#lq%;!ZgKFX|iysPrGD;wcdXebD6r8PYF_ zK@_NQl*SG}!WcYE_&pZbaCskJ8qUt|OQO^;3p>kGXv$~Q(dq@bNXGrw?nv;>TB>p1 z^-gL#>l56&?}Ra$+&agQW&W6Vkk*SCo{WPBn7Nzp}!USAF>^dnH}u*7-t`45*m=2d98gI(7*X znBas!Hxb5W!-a=SslkMx48Ho=$7K0@8ez0eC++PMufsYgJN?zIOeTNE9`RbJcK3`#EDjo$IF&z!vxxGn?@>fEE;x_>sb>lD3 z%1Vb;;uY=4x@7-4vHkVpAo0EjI?A4JSwCwE@DhCkUVsJZdq8VzD_9##5NoC6yaA^j zu#ipCNDf!qJjo@TNzSF}EGD{4X3JEOdKdv^-?1hK>ovc(tYW3!v)-z1`eJZq zlP!wvwOZvN-G&WIAbhwP>wU)>TDKyDOHUREXg2lF zcvzf@Id^7b&n~ zSZTq$6K^1A-xzqVuDk0W6|B}9U#3)mvX$5;>;4aS^M3QR=H8uhvd@qW5tV(iRxCawN?9wW_bM^2li@DgMiSgxNBeJIJP{IT$RQ5vi)QfO8F+p}7!(x7QS4pQsl0~G!K zy`I>XdBk~6IoE;ijk9d4y}NxzYlF7cZ8pJ-1>5cE{r&lQn+}6|>5O=uVdTQ`)sNwV zbbAv`+S=$hdHnuXo@1~PO4$&3)OhHV-gUf^}|H;q-FPe3=eVw(9>p6!Ej z=nHug&S1ct4n}uOSluDX5V#bQ6%$yJ(e5~Luf;)&ANAz?{8)G)L>ws&|L+y(d}bv{ zcx1WhIAm9zn|sR4aVL*TTiucdr8^)0%FStx|A3NEVM;w4BlQ{&_Lmz0Hql_Lac#^O zb5$XX|FiDVf_0 zOI6hRKld)8ugJ88x2i$?MO1)D)SFTG935`&M@d^7&squ*cIL$IAspqp4Q=!N(%k&< zPG7c@bSaBb{vq)CoL-CO>6m|mjz-X`->Ws{l_v>`O-njz$CH~!X~#aRZNRp0&Z9r3 z7kqOqD-;TBVs-8En6N_(HHb7#zv~Xmleum-IlcUg z9a=-Yg^*x8{+{6W-174>#2|{^gocWc+`;n3Pwl56=zv5w|BfAd7;nG8WVegKme!!+ z_aVu#yI18l*gLw?+@#r;pXyY3`qq8{wK~Ml-`Ze&yw`R3LyLpwmgc+XxtNN|b`aKg zpXzoxueBf5#^L<3VDDC|{VI*z=ZYaPT*+bCNqM9j&!K;Kx0^FYP{5w%P6ZU$oAz8R%0ckw%Hk zkc{q?n%WD#)oL&Soqt{EtAC&Xi#I+hh2)p|x0^7uISXIn6gs6(8u(JO(Mb29;yqe{ zcmr~Qx@EI+_vec}k~0_u1JK4t+`~GYbI9>m`&j(mA(hr%@>5iD9WsP-@$V%~CC@tV zXPAiYbyDruGAl(&)O+=NsCLkE{vjo=%StNn1!}Ut0+0Sc55~=}= z2@*t^gf9A>1q0Qhi^NjH!6IxQYi3yoolV(?VU9z>K425`H-FeS^!C=xi?{&(mJPYM z$)3QhICT|f{XmBy*>k+er%P*vaE3dSU+Z!qq{p&+6q%+%-?NPHtwYGazn8eRA3LAe zlc_O`r#AG!^GlXH{)Cm^&DUe6fgq!TGIhEAKEqCzQM>xHNRb|)e8j&$485hiJ;;Ie z#<{q`JcktE*=LpTmZ#|})MVFq?<%?D+%6AC8(24A=5fj~m=96P$+b1OXLh4WanN{8)IQSDS>$sUDt1CwW2+g44R+dPT4 z(*LlnJ47D9x#Ey_s-E+M-=~j9Pr>HEdEvx=NB3cJiYoEus@f%qa|K;FeCw{^X})E0 zy|{$#ekI8HnIx&917spSDRm>dFv?&_ZEg~-!CM~TuPB2oO8y3kv7!_~Vh%d+FS5gf zb2VPj`&vXjW6*%oqOSN{?6=uY%kv4kCo|q{|8PX+Ejd@^q?C7-ZR>HnQ-{yWjHP|M z+o+ofVO7uB=;e^H;_J2}@jo^eq4#w0mTAwihR+dxv=!`&kedgPYGIX>mTqi}HM?;l zEiOq~^3<{mJEL{qp0M|P*$Rt1WJ~!EJ_xQOht?nl@OUaKe5Clb!U>y}<`x~= z;T`>wZ9we`AA6(a?3atr{D&$Nch9VTM6&#`J@0!d*rt@iEKIoUDZ^N@4$Tha{i5;3 z<>f>`3A5fA_#34S)cvi{TLq?yfT{I~$Hi(OHx3+!IHNV&tY$Kp@0B0J4S~A8y&o_z z$~9{!0lAQhx8=*1cObZOq66i<5-`sM$1#8NTQ=2~$NcHt^IuWm?_AA1)TnGbA|+A& z*h~}tYA`88)7FOrO_~VR-P3x0S=Aar`bk7i4h6#a2sHe{;9NS0D2O zXA@LH>f0WD{lxhAJVbd{*UOS$s=wK8xBGb;h5&Wv_yG>3P~%Nbd-wPEt@nJLzYWv& zHUJD*YZx~Nh2IGzWOf}7uHgq0d2oK0G&BGN&^uRTHXkK)?}vYTerkFfM5}Y${UW15 zn?jqZl6w+`LyzU8*N|X0@{j%ZR&16pA86RR=aB0)ws%;4$eh0K3O-bJW8=I$V16~| zcRVt2T}&$b@x$4`VOmw;ANYWC4Ik8WTYF5(`=iFol%5NNU*zzkx)T zmaj)V1lnGB18zPbSr9ODl9G=tX=e!dul4c>7vJk&q?!;@ zPz2*L>LI6qY6qzp36yachMa%J)Jh!c3jybtf+DN*@|3G_)yto$E1_amiLrk?Yme93 zEC7!0(OjM32@dz2IdvlF-*f$qPN)R}sM}$AzRJ(v-#Sp4$*n?RE_U)Ye>qbx(1JVw z?8mKJl-nvf1)l0BfWEU>-m@4;<0We;koaGm-v9%#P!s|)OPAQpRaHlGw%_Jxu;_u? z79t>S7L{1kY%&!b!XbA7lRe?omrs;H`1KG3on|%LBA=f728`UjLzc>PY1Jyh3`O}6 zfZF$a^<5WCdu2p1OD(b96~;{bV&D|!*?d7ZC~~KN{WETcXg>mDf_^ zKl+GzvjFpXL|CpmH43vhTYQ2FpWNK_m`n>!g__x7u3`mjE_)F7Ks+~)(!@YQ|1ReM zQaunU`zcbt3K?`V8x#1g*54p$YD%&KhKWoNvK>AT70usEfS{D<{q{#DKM5*LCbe_s z=>7P_#2tzsK_Hg?tyJwt)z29`kdkt84?kOuYg>WZ|4mSeg~;$Hb|j`aBV+UCt9?5^ z03Pcxkang7eG3BTtRdRBs*)Yo=LHk=uyiOZx_q$P*A#W)r+$g_XCF$-3VACEPh}6RVR{8c`AH{Y6-`Mkt z1Bh>on&!VX?}4?oY&3J#hP3JxDv+C?ATg^7o)xyQ!FYPtpfgs(oNHcAAOQ4hpyZn< zR&UYSiS$puRCkhYfD^5pwDdDl7rhCyljCx2vEpZ>9K$?k;1bQx#XZzwJTJZj&su${ zVL*P(B}-7rIyh?%mx+68awFEseOOilLFhVfI60y#n!CMi0bE|xK;5)q9(to2kA`7n%;j6RL`+^c3r>{~L5cmbFmi3%cM4`6 zM0F({oy(BD@S^(C8exIs4qR*tOf0*C5Cj4V910*wIXFG$>#Wrw+*VwY?Qg!FjY5G8 z29@VB1auGsIk91kcEi9a4_b)TySB0k$Gf(XE&=-)lW{NdgyxSDkY~4K*CJ>9Ld4Nl zGy?M7w30;le11GxU6;^1Fv1aHA6vAWJ z1>x$D#IK1`rII2(qC=d1NQyRwU||hCV64|ZG4%uGse?$fTgi9hsRD+a!i&+gMoTnv z3==<_&l89ag~oUco3H*XwTk%E+n}L(*)N%K0Q?GoJ3()197VG=HPu`}=(dmnX>N?i z&tiEp`T=!9p@p`q3UrVegu&ED=oA?ger_!H&Wj7YuA=`iPeq#MgwT)HZM zs@deq3)B_`VCS?ffThRDc#8tbLGzC5I*1xB(~H)LA{%?#`9e!9frvi*3B?0w~eIeYtzgKo>XlAq!A zHmkOtN<|+%u7+F2%oG-w3QEZTCqMN-q0BZOf}f+ zf9?7j=zI_daoX-bNIVW_u$~M2lcC+ph3 zX0`1L^7Ebd$Ax(_nsODMBK@@M3BJ|K)x(5DTd#!rc9;?v?*Dwf2|Zn;Iya!eC~IW( zUoXQBieQ8n+%?eQxo8+7L{aJCv(Kb-KPz;f5`OB7BG6~DUj_a>6mSyD8Mg0}2|uNb zI?5pfQ%XLjMl&-#Jw5N7sm3Zl4Axx>@-Ws~9B;2o0lUoTgqYv>ot9ETY~c@%Yy&+= zgY}DE4}kRK!Ug8%yFv^O4u0#Fl*-R&CCHB2zDO8>n4Du+6@sPq7ZL;_R=U9LWrm5 z97VFlz>(4qm~712YVQ~sWLL~Ay2ZB`Z+teKe^9=#S}ZF-O20YMHOjxIS|l`l%~==*QOl z7S8m@f&sm5Gm>@GFBBy7Wc+?hK^!>f>FChCj#RUhs!J&0ev46<QW}oeQ}_n`<1g=wW35>3rVwe-1niOa~3kKy|jc6syGP-duc`V%)G@n$Kx<0dDS{;-mLl z+>KXB1^=*I$f(2gpwKp@=nx}{1rZR!VPivdP9lB2)k&CQoN7fcaJb>Kn1rQpLOo*z z_8JewO8gZ3{6xfY@$pg25c%m=U@s2=<~3?V>kw{)uJ^@E2@2&F?4RCQk%3$jwO!mtev9YiV}+$mYA5sP&in-tnrH z)L`<9c%IomyX??E_BNX1rjJ#-zJ^FZW{>(79WwXJ7p6Mp*L=mcBfzrg0f_rU-bg|G zu1ztQ+(~ArfFcD(AX~*JUbhPTwMLt_2<(9Iju7Y{M*jAOLbpQPEDBmtPwyu_cN*9- zXkd{@k-jY@iinrzu>|Lg+rw!FW(${o7qT`)H1N6WqKXwtUwBlh!X;qfR+?;U+dJO$Z`~^CYaqCE z;plB`y>G-lcQ{%#-IOIcu6?6-+5V$WIE0XjxL8d;ve)y&_?LfS$>-b30YMk+xpd5| zP7$WO%_O!QX+9lmb`1p-H5N@emmY0LuCztXTM9J`gi+$=4Gf`D_C(f461NJYLG1eK zy~kH~Ae6|eZq=u4#H{AZcgmRu#dqMHulKx1+fQenvzz+|c{V~+xu07SYJv_wok{z? zyJ$MfAS;$HtGeQU-zqv}I+YFnM~6Q~`qZ0r#7mrsAiJ#n9xp20;rIg4HnY3_WhZk7MX)LDl`)wSV%kQS6idME*rPU(>D z5TpeJL0TH51Zj{?=?-b>7U}Np9FXpz&hmY~^PY2EbNPqNz}jo?*?X<~xu4&yq2oPE zsG6(sdG}nWiPG=C-$?dQbD$sF`wByWt@deE!H(pnmCeVEu$Hw;;q+nB_i3#nff`E1 zlNPVYrYyJ%1B>1;DyT9h3D?&(6>lIvUoPUmc0FA;jiJvsiziMfo7mt|aV{eKzlx`b zr3VS0$PWzMBw>@k9-IuU1`Pi}pPY7wp&q5D3Nu1x6(SLH9MeTMd*GK+G} zJ0!KbnnX8y`PTO=#wQtL-XWbe_F36@}Xn(y0O6TC`o+wi9xfFSbiG+ zKt!OEuB~#p%|6ha{Xo(YpQlgWc%yriuuW1j9vQ#%j_X*#Yv$myRW#=|uy4e%P>bBr zwK`|c$MWHa=?mpY#K)HmmN@#!(ZW#1Omu`+f)iKHj#)Z*#0ML4ZTHbrgdy=~EK1N( zhOs9{H8$jF#U;9dX2_o;vwdD$r`N}w$bu9m@FtF0z*2L4IuP(0jXjX;Ux#rAXH)-0 zh>H5cVw$0H+xHd%7-EKaPQ-!!xj_iO!sK^dWD;~!@;pko@>%*ELpl9O?HL#s1dRP$ zBs?im{Z`HW*+1T5#EXBt#V}o@DxmgGTEKUfp5ImrwP((-vFFS1{HYaS8=kW6yaUeS zyD6{G*0T~BC`9D&3XCw9lCFnPZ3F0=AJ4BqOnV(v zzj-DWsTSSW4x?$tSTfxm*RH*KSSSLc4H?frgr|+?YmRD)*FSn8E2c)8+glH8#ki+d zHj?leJmBd4XVM`an`bad_yhr&L5Rrk0K2OC0IZLScBw?TCQ7)qsozn|!bW*yGv?nn z-^w2D@_FXi@38r6)$*qWWmVD}p0ZTY&)Dkf)u#M8D{&zP=VxbWQb?r3l!WC{{a#`C zaQjuu`r*1KQGO=o(DCKA;q^M4PhYLVj^rI-0K4~$8CclOid5c_KOM$G6;ypwLY_7$ zHCnlt<};W^3EF|0Wzv~O-X^tt>yEs+{>&d2BbxGfEuSbs?6yHza|i{fd4L%Yoo(r; zl7RxdvW>`la7{htLp1M)IqY-XxmOEVvAPBd%3L?5Ago1%E+}vI+BfPRd|A&wuP|n; z`1|Q9Z+w@xs$i7$VnVW%Hr=OGT~2)-=v_w&Lx(lupIeSc+*G+Pck6_dBr6WnzJSc5~eL8E`& zisI|oRXr4{yZ$=8?QfYU!{es{r4Hl9MvPduF-&&7vPQWHg-IB0ET` z{ljANe8`@rA{638?a9IV=^c_M&T;E(;}l5ZVY;=R8zXH0D4idMl|#UUgA`_qESo9p z6ZPsn)xLxg*NOd4=Eq^jVqyr#UxL^(g16j{14&|@8a}!``r<1k*7=ORg%ai0&0Uk8 zfs5wF+MfdlT`9WN$d5ypx%J?98s3%B*LF8gYwz9QrZI=6IU(xL(pxvZJ35qi4N%Jc zpZfM`E8k0cZ*gTbjjzG7zeb`4w2P!3wbnWUA2N021q>ORc+| zct#aOXa|;Q2ZVo3Pg~xP~fk+!rnky?T{Ag|-+0irK=-8Zw_VU$^rP@1B#AoCJ5lgWmZq&jvhzwN!8^_Qs zQ*izPW;-Emh)ET5)K#;ke801AkT47pZ2$l?IrGDSMHpntU_M5~h)GWuv7X}+`2&1r z{!kM`!?R_84uwZKRaYMwMW(-tl%eIoSph26gtGD5Z6!a>lJ|$7N(FLJnqTmp?dyo! zVjbd5j3@kW2F>n!cwH3~RIqE~bZVemTS>veg5^+Zy!)osS>?mn8BntE~Dx({3#2y9(vhs)ku z14*De@3}YQ7cnuh_F<6+GL77bFC`mTn%il9WoC7IB{1E{{jj@E@ z-W!t)R=gSN%1A4hHRp76uGX_k{a;C9gpoeEmxCPc_n1Clk5ktR#8%KeO3)Vf)&NE) z;BtVu@^^ij+CWMfx}WgQtGBlo;b=mgGppc?-KR}>R8bc}Nx56hJG#A6I5SW?o@Eev zy=ydAb)y*d@AhVWK>1j{p%)w9UO0O?{t`)3Rn;d&7Mew{3gDd}qv^Y*0+qcpfXV9ib)DD1~9Q1*=j}-~PdU+t- z`}Vl|B_ksVo$|Mwv2M{7=2`Wn;#5a0tJkH?Y3jBaNSVj?pHufS{=1$QR;t$qIi1XA z=w3gg^`)LQ>wB6WCoIvF0Tw)nCrU*U8s=Pt_kQJe*4a| zTHp!L-micf&Bhj;Jev515jhm34D1Ym{#Hq4RKjoX@IAhf@ns=^=3rDdyOlNtqF+|) z6)uMce0nV&e2^CpVC&9fyVx)p%zG2L#Q_->JRL}KIgE~L__2uiF~ITaONo0~9d~ot z$_n#kwLqKtjThp@gxE~d{UcmQbD?xNk2@)!_nv`%x9H;V<9r4wt-g7 z%Vf*a!m=`NApiHv^@n{~`Rm!NJwI6d3^AYQ0dYj`K*Qs`XvATI95n2)BplZRSKyP# zgalsDI|lUUCp*i~a#a+sv2Mt(GVvj`6U0z?*8TgkU_2-=$I6nz8Yw>iVV_<)2dGQ$ zvr*|JwtKf_PYBB&$4rW$Bu-SexB5;RljIuY{6A4gz_|i1i>Rm@fxs^-z&i^EZ3q4jN5G5Xx6i)xhs2(&LxoQSN3DeX#_uIDhV%&Wyunc@?RaRJ4poZ z`8P6Q1*+{JyToapz9$rTc#elzrUI+)bm=^UW{iL~Jh&MNtU_);wS)Z4dvN*ywqbvf ztT`A1{>{L)T7CtZIUj8^fsS1Pc1;)dwcw|rzkdB9Tx_J}HNga>l5<<-P)9%~R{Bd( z9Y`UIj_ey8L_BIk#M%Kl9q%diP<(j^OE=6x0hR;=NVseDD11*LYpv@c0^8ZILD9lW zYZ|3-)=dmd|uxkT1nzR z9Zx-5QYLPVepsuzVy6==Y;{PzM!%`9t?jl~QcEG^K9SzK5iK9~rDtI$bIZp72+;~e z-o%1LC^S-Gk(x}fjYn*yEy6FQu1cufTPQ+)V=-~TfTd0X63wX7>|R~wAqdo2MZW4F z(D#t;G^Ne<>agiFM@W$#kc8bK-mh+~qEK<8C||q)tqxH+F@~WLfLkaKd=1JNI4cpI zovZ`N&(DQ%m$Rj@v~C+K*neHH=$D~lxmKsO_IgaGoy%Qf`8z=!Q>KXTKFy`W4gNdI zY-KppDhg}SASa&1sC8PBO6cw!2Mljj=*#jv+QU1kOBU*(nHuZ)O4EJ`X>F!qgv5+? z3xG$ZQ@M^JWJI?s8|y+AT^OJKp^X>{?vV>PaAYz6)e9CyxOw|i2%?PlY(~4E#Ip1W zM-iSQ2XYq3ks&1nh?TX5O{M1ZDP4eT#4Y?N;sx61qg6TDc1E)`F1v}^`a~W;or=Zk zuL*nm(Fib{55NLEXtlmJxjKcHzPy*{O2(R&>QINDz}ZV9e^WCx%xztb76EFc_6XU!FYYu_8F(^#7)sr%3dV-7sw zU7&nlNblQO5JmG^j1k?$LD~LU&_MG`Qvx!_=2DI)fyorN9~9}DoFUJ)itgg*(WX)% z|GU|B-Qv)Dej_u&Q2YAbj9)>rrhUCSHyi3?7Nl|x1#N#?Vi-npa{M~yn+x9=ZQZX{ z110^}o8H^EE}aA*ReGaMN(L65J{2{Lf_T2IQ)wc*70V7D%!skEu>}E9n{0!+ zlM)O%*SU`vd@oqu`=?AccQTKtJ0qtPS{e|$l0s^q*tM5pQ05@4Hb8#<`JcE3HS=PL zt#7AE_O{i|>>{MqRK;0kWCY**M6srZpOsqxn|;3hk`dlv2m+xjroP!(e@p-Iw{q}P zuim5&{4|w-Mw^OqzFFQsMPp4Gb9ypW{}}u?@H&z4$V@mps*wzy=~K^p01AZyk)V__k6?~rAF$l+79Rb71X(}Ml0 z+~xO>i}7}aIfB#q+MI=W(d|WTbh`iUU?)!~$nz4&@V}_~TTs@~xNXTQ^A9X&UHH2ZZ zcdn848Dd+#C11t1v%f!EBEWy|@^4pLTS5wFd%2`%;w?ce-2H8u(B~nM2ajbPuZ@DJ zDXM$5K`uT_Qhxk4|Yd*&jc=Q_378jBigDG#=2p_$d%UuD_2~U_GS@+#L}^;c$2Q#%$po zfTF-jXC3ShisytN(&C~gMZMKp0Bgo*UmW%=0F=-A96?cZyH4+U+dwt?mPZs&x;>G1 zKt;Jt+`VNYlw1@DXwOp}2gHRt*s)kRO)+!AEkU)IWs_EI93?Wo0^Gpnsy|gny%OCG zmT1-P_fGSIf7BXC;p24B$xOf}RBXWXifhr|nHTE|c61Nq(Zc%Pwd5h*_3_Dn=Oz8` zw*!a1P-XoRtZSC=&=OSM=VIY-2Kiz^2;R4VRcq(U0@_?+D9bLUsK=Ca1aZm7D5}>1 zZ4lhq(xb|LmX{0+U)w|{yw8TEaM?jO3wL?>*YdjSt?!Be`6Ko@p~jSefS@A_SV?V{ zTXIcvN$dct*OERV=QDO2B`Js;>uUlFw`=BdKoP}*madEl@}2jF1#YK(R!Ta-H~~e# zeUqH$^Uqt^`TL#UwjB~)W(GDGSsJ)Zy>&xF%~|-*@3B5GoS$9diuY@Z&mz0r*!QT6 zx%eSVzCaZ;TT)3ZN(q!>Qtpi9?yX6N3g2I?g8@C1yWBH{AQ}-Vt1t;3Bc{Cl;|Yms z7O$vbOP!gUS-i-aa`qieOV#L+E?-dpflo?+|5B`knKp~^)6_2vx4}QZWAta9OZJ>% z$KNL1YCiv(0e99Knn`q5&@V-mVxFT^;<(}~ATgJGKRm!on^at9QUKIw3=Wpnm z#$j5f>dUr$jjp?c=3Hu(+Au|XTHF_ep$(<#%0a^Dt&I0nud_l+V2(u$Ay#D~glI^( z!4kFe&A0g+8o+cnr4479@4+muKUf7@$L>p!3*EEuaO6RqND2u()60V^v&0=r2#^cq3ECug(nTp<>Bd*-DZ>p{JPc>VU=T|YX< zkWH(2a%%6~rgrb#y_Etw7?Y_2(4SO0*+&PBGnV<}iaj&a;8A7Ki+At8`eg-MjNxCV zp67t{29dd`CK2+{PtrAHsU0Pnp>tQSc4*`)e-y-i z87|;e78nZef;jeKH=ImKxg5{x3oEH8BO(2R$XXuusFjZ_7v$vd6r=}7pVic#{Ux{+ zbGQV<_zyvvF!tGVU>^q2@(lO@4I@Y~ylFpa;Z(0TrXd1CX&4W2@vbyR%g57(CT%`^ znsr(vjO&7AdDHig>5JQl{5#Dpo9}y_Bh27UYyk)qnqnt9hL76ico8jJ>FZ24!X_I* zB70$zd<%-_)z^~9q+zUj?`buRXBWlZ6q@-c2wX(&r;*7054s)bJ=E z3)kA4{j#v!)7x0)031#68W)Yz;f7RR%d;D%;ph3B^ez;qhY@bJ{q9yo(=`w85Yi70 z@Bh9YdM}q(k32rLjZ13Gt!ndx#O*Jk&otqM0ifyL*+-ryx7Q7W_TG5gNy^CI{|ui; zM%qTRj?K2+EiV6kiCo`59p?8mG;N$~k+yEeL*heZ=s$xM`MW!Nzv+;Z=R-@(leMn? zEwExV&rUTi&HK0t_umNf5QABRw+c{i{Qja6YYs7mG~Gb#LnNzk^jU^4he&jdIJ9uW zB-KbxpSHMt4JYArjdhrB2czaYX=}muW))4{%o1P8Ov^YFbzQ;I5(Qve&D(2WWPexC zHU4g)JY+6 z|3nFNsBrSXU2xd5C8n8ieYT?u2jEV8;Ux{yLwhv#Q_R4~qis#zkYko?GQ$FGInibD zJS?AP0T5p_Lzi7mBvL&I!=v9aQDvV9BNes2EM$K2zr1+`C^_DVK${9pZ1wNg2Vpq0 zRI?eju)h$}ya5Ac4b}$}I1z98B7~pr*D|^SRR7JRPoEMpdEAyc=yr5xmXIkM#`6g` z{v0XTwbhBaT9Mp6!zMVNX&Q6BG^n* ze5O1~`NQ)aU6L>uVpB0}{O4;2lBfCi<+mbS)1l7yu^z+N7fR|>ZTITQ>;Z8!0$1MN9&3`Y_r33>q@4s?I1)geKBZEbZ?>=m ziS?wC)}Cz{wiUa&>-vyi{GK+8LiO$W9~1UWAncy^EUz|(w5WbOr??z0IUi81zB^G0 za;ImT*cgv{3ue+&{x21lwxLv4G5yw|+RNtKaD{E6FwgmnO-41*!w0!V1_fx>*Kg>0 zNgE#Mq^Gmyl#pZJ<wSM6f@LRh%$K(nojxgfSeG2G*(&P|xh>D>M?m1aWs|&v zpr`Th)@<}G*C3)Ybb=v_v^I;SPKB^QPW5wfpONz}R! z`j%RC>cxFA0J3St8McJujeP@1?#TrO5idC+@GY#)Xy_yHGFn?CVTecRGP!EAR+?@~ zxoWa>F}Z5JesTLlOQm)Lu&Y;Qf}Z!sc|8FyE{#LQX#6=y^C0KYU6Cdr_K14Qd&-Za z-b+=@>b-mS&{Ug$4={B>QrX|Xf4{l8dG_p?vhwmIWs8t-T3VWomDNrIMYzNm>?aA$ z!NGyV#>$GQn^LCA(X~ftXlSZZw^Ocix?jXNgd>7*UH`UN#G*-Mz{soD_1Oyhm+s$0 z8@hrM=9+5DzJnO+`YR}1Z(mCQhf~KYVU?+wZrs| zj@LMR!or$qBjK4r1A*dwd3r22clV-{Bj#LsFze|&j#r0_(_%E-=Yb_x0QDjd#F_EcF>akhahDJ@O2tk;Aix$r(ng1RrypbXVd z3`bi>M~!FeFsO8|FK^O98_L4UTI{0KY>=Lkf*<7}TqfAghKYmjzoh}4pP#2b*+l)k zeV8SM|ND40M!t;U7qaflm#b=taQkb#tX$L5Xf4+Y6_&bt2F+2+AC>Lm*h(yqdG5`B z80VUQ`Y0i`|5JrFXQcPH5HENn(~8Ob@_6hv79UzsV7a+P_-B5^%GRmuO%t@> z5A3v&RB-95owfFv(brD0TKn>yj(vU1<^GxUZ{D>7!>qR-huot6LvxygXl2T9kt#zpm&j3LkW zR)GKoy4MvG8@Y=&`QwH0jOoMKZT+Db5VmB6I^NLEEQ2y>>L^G4MVs2`Jtt7=nzZn1 zhaiK_8$}Vq&?u7JqFq-(sW0GNRN13Jzdoi6f?Azju3BamjF1nX028H9*8)mTA18;< z27}=>U&W>?q<%sqry>X$^1W#8SjC2p!5q!i90di2l>{kR2}9wn$qUIZf|n1cP3q=Q zEGl3Bo}a&@lyz=Q-EtxtmCm|7a~#g=*sJ=m=OE(Rzpw9YHP?r+>1QQghaB9jdfz*D zqPzXnxp{N$Bu3an(Xg&Lbh@^w#dLI=bt|=qB%Dq)Br|jHL*tEW;3Kdc{+ehz#Rnk_ z&7HJZjqf#CbL2nAB$*(dFz2$9Z(Yuh#CrEpzqx+y1^nvWHNwjEHJ>nTLVtU}wa2%h z95F#*J_MhftPG$2&1lHbP}-_jB>#IhB2gcYZ0_O=EiOh9Ms<;7HUZexXvOgMcrJFt z{1Zr~O3&RdX3e%$yGR2Ew`&q4Olj##rghd&LQV(}ZSB3oqeqb9NjY4CN$q}R?qk=M za+i_{)wqvWZk8Y4S{0M)&4(DWl7yoDu*9G>&+(s;d*pgUg)OQ1@e6Z8VgWnOpnE3< zd!jxrX=j7MFD#jO)5&m&+$WLd*c%OBy}IQ;$4e+0B%i$B*Wa#QDSy^U#`G#Iv1ikGNQX}W*EW5ZR4q>U;pa4m zrC7s8Df-mO$30!$WfGVJj*-*$Zc|e+@WXf4g~@70y!h2Jd*1-AV^$+k_!H_1kpBK3llw(f{`zgXRt%H3Sd6} z79qedAfV6qVJHRNu&wP2i@5H*6&esPUl^(~4*=>Nm5+}w$25k@Q5KT4lhZk%;JXbF z&_-uqhqyjoz2?7RjNh;|X#Y$H-on7+Xlo?|VqOX67f z53(sXC)3p0DOY1g#zs0KHG}>?$%fPO^2bfw(Th{H7djtuhCBVHrZgcFK3`><&z`@? z%;ty({R;7M2?&(TzkV@of7UD|lS54l|WT;^WQ6`G7CbZQ@N;3Crk`6>vil`N0yiJoV^lH1i(r%4PT^n}Cm zOHoyP5Yc=9b2C5=dPi5A7Z!H#Y%F^$PZd-~BoCMI-O*?v6bv91BE{f|w(`XNbTMP1o7a&{3mpilOzqiu8yKJp$=1JF1;hJ|ZYS zkEo{+h2c9i*pKEa)nuU))02V6{6%NIN^m=8z&Jeul6>BP(r0_;Ul*mi`iyDryDu~t zHEx)!8Tz?aZpqogirw_CTL&Cea}Fv z&JiQrrl=h!oa1UPp~jJ4S!n@cC0E^KDf-6QuX6-tFqw5*!t@UxA&6FgU3pV$1d9oz$HkR#ZvRCufNYDZ}^e2n*ypGh+?bz;p#Y+?Gt%wk1$oL zkBFTmmqp7^a`I8)@WXj3dbPZ)ml;5@`23dJqp6hD(Ou6O1{Yk10#sO0=JJnS7HGGK zudlqDsvFw|4sb+KjW)Y79M>>deT&x_*j;?HUAu`|}buWd^WnBp`ihvc?+- z&g!4Y@AAb~5i!Ehhx7NYD!XwQxyoZplM|WT`-~UCzA1xCrmP|H;r5*?%g#%4-?72H zVBo~9y%b%l@;h?xRBZs78FSAy2MVJ38wiKpis;t5ieaU3=i^Fd2$co0g^dkLTkP_b z&Cer|U=+``R-tD`ph@Wu$={0Djs7w#tUgQZM}k~>#;vRa{%eRwg~t1AUXP!u_W4 zpaBDd+IJ4gqeE2FQ;U{@_W+FQ_+@{rWkSeJ_aYR9FR-eE!JMZ|jGn?!)idL)Hxl+* zHi1t0RC^<*lHB|$qUSF<)}`d;J-ugSnw=Ku-*nc4sajNODymahF$lR6EheW7d1?X% z-diRKC(sb7{s{h6!pxkB@2|g@IkpYVe<&skb)Sf{H zC@3xJBidMq88ZWoGDnHrmhm>629c`Y6a&Rk$R6-{ZSM`2AQ2XkoM@ zNYUJaI+c>Ee^kEYR;d#V4h6~!BiZ$r94n-orMaQBolieZ-OU*$atTs@8P>KJN?y-) zNoMM~7Gzntkd-+g?7KiWI2h8Up<^1~jwaKs8rs}-x4b5g4>z{J_bair_O#3yc3T0( z9lvfsEzglC$?JwAR;RC*1QhD?X&VKN4prQ?NQlTCN>Ji zpJ*3^C9fN6v>*^%Woi1kpe~r5`_t!yxA3O2?2(v~I>YoA?gTk;a()Ag>0LVSp^1PP>U!JwrUVx>7Yp=XTb<(Oe)&ebc z++xj=wbw=Q2A}V^CA#PtJ>QI~8yGxAAYf<8oG!YGd-=9fPQfRNMw%ZBMG|8qd35Rd zr_a-evyWM4V}(sBul~@QH`2psK8;2?M>0=zm~JN@_~S2S%;{`~y@5IGj8FxorxJ7i znk5!Wu0o`{c@+UT$P&eHKF5VOqN<;={0HCFQ+Xmi3b)qeOjz0`_u~G1(S84BUoprn z4g9luJFKgoo!H#}gA9dc;zw*7cpUVf)vu8>7BLpDsH&^K#?1%qaHp?$JN(2%01GX~ z;Q$nUo`+|d^ngA;8Sge4k%uDCZ?q|xr))b4U6Bg-Z2szJP&sZ(paQfWmWRMXkngSraf6sLBB zYqZq=%p!oA`B6l1*@65Vwbf{d8C>Fm#h#(L*5$?S?k>cr%p>D0$}ty9zK&sa^tgUC zfMX~-s5~$Y5f>n?k#+5zLE6~e9~pxs4YJ}yVnvsU-VK@v32LgW*U2w)l^vvW_O#b# z(;23^eN##lyK*|;&dnr`(Yu85^=EO25B@mP6$%ph!9qW zlTJ$B#}dA*jYh?uYZP~MF4ZJa61&FrmjMA2M&&qW+sY}amG(mS8-IQ`41=}wYaPXy zv>t@Qd8LosA@%m=ASw=vSzj#W^ud<7XBHnXe%T1)sULH!BCc&cCrTBiwoFZGZB5JI z{)~?4jcGUtQavIUCf8+@Q5D_<2B8h0wu@~9_n4B2cr75K6{i19?$xdepzQ?yQC2N# zZkKLEI{nQdg4lthmC0sFYYZeSf0sf-Grr4Tc2I8FO?)Qp2SuY*(0=?rr7n}@ST``nH3{^ zXUjP0=G&o=+1~in-QC^itV^1tmmeI~ben|c3Az-Hr-N;em2l`4s{6Arb<Psdryf`q4@Q1^Fg?Y__zYR4V##u+EwEj)2C@Hi?Mq z-Zo8`#MCl)fYr$9ThwWgrM$`X@~&;L@C?3>--H=h}+N`wYj@&>NI+ zPsjn9ECn80cxAgFhl^Q?$Pglhk+^%pJz;3|b2y}j8cwU6zHM4+0I}GP+NbjrK0-Ov z?1=KyE?$lF-N1fSt*>ESGX5b|N>!JY?X1@Iz_!E%p@#>C2YvG%_5^jA80VMN+A+L^ zU^u0?rZx?|J`Ej-``&TAn0Zv%ySNqni5*ZnlYq(!jXg1RvOykzf5gwiGWzu!3FU)F zOX8C~TdHP^wv+{!erulkq@C-QAEcOUtg)--&+(|IW#t$rg5bniEnGJX%cr%}C63Os z$&^IDgNpB$`?S`0qXHb;m;5O5Ko`$KGZKt$b{W?bvY~y*7%WW9+^wm*hhp4W(z_yQ zO&p2mdCS^SjLv;oazDlS1>hRq9a6&+r7CP7#{hqpi9?U1D|zwF6_q({qRv_Uj^)J#0_Rd83m{su;7*OASY8Q(5_zwQjSF5 z3SmF$6rect+Ib=s)Jyga2an9+#Dy(wRrf*`$AS?~j2DJpm$n>ohLB-$lP4U)s8GG9 zi%y~#tC8rtBQol3pWT*d=w<2E4?`5qiO{&yU7s~kI+34mr0o7mhR4gc)R)<%{n0CQ zWA=gtGH4Gk0A^;V&v;LJ0~EJtdjpOy)Vq)ltvil^oB4RkHB@A)mf92I@gFC7MdjwF zhpb#pXjb%3f-o}&HqX%M8_jbTh&|kDpzZzF9YCF?&BfQ{d*unTcWsky9hY=(8*MiM zeBw83+{JSkHqQ95IM^Oht^!%sCRXvHq{v~gOV{(|Sa%{o)eqPX0uwo;Y3r|_`Dd!# z6@!=HFc}^*y+e^bT5xSqglW#O%QA;XBo8lL!O6#ek8`E6x%jYQv9_M#wNQk^&wMJ9 zj%zca!+d=~wh0=FZ(aD_0}oxpF>}KAL=Qm36}~&)3C&V-dTMJ2FYulCVXKj7akXS$ zIbZZgw+lFSi(Q<~XL9!)Yobn4rn}vEr<}Pi+?sjTj496D3v0(HLPOV&L7Up&U-NR< zBc|(A86}OOsHC~pKAU0IMxo7Ep&U4#8)ee95S2M$3*Q`A>Xq|1&weJKXx5C&$VXXy zwU+uzhu9lUAoV}Sj1rcs+0$(*vkgbb8i=;TuX-FFHqxML`$SA3dPdekJxc(uE%E2H}Ye)L&s5P9D6TXWK_Xp34hBN%L3Fmj6L|OlLpD;h9PW<&@xtil3KW z9G2K$!8OmIz&cJ7*pZ20kI?jo`U&6RNgF-9x%96A5pEyFx z(S-4BI{Lnvq3TThYk>_ZoN(XH&&9T+Ew%P=h&e6{FD0z_xH5!-XVQLBh~%TY{mTd6p(_j?PCs!pZkWbHLBVqX07ANf2-LV(5}7>Igz#0avUTwGiL z*ma za`_t0;*4YUyNeo^TlX5uWlU2VLRpuqAcs+cFUiDY>gWFs!`EM=okdsb2U3OV?>;4b zqYrP}$-J2M1_d$3%Z0(@df=!gdvVf zJE8fmT;9B|n6X3vaQK9NWWRP-K?5d2`k3BOBV}cgahM||Hd@x5Zq z(|z2&>h8Y5Zi?A>KkfIO?eUy1ZQmcpT3w^vuAqusakqP`j-q~dr!2@^gtRTDZQE3g zV$I`@@}q(=a(!2%uGC_BfHD(?0#}5bUC#6#hQBX|Rn;s~D@vRgS(H-#y4!t6Y(=61 z9azDBAEf;yDKDe_%q}UzoLY2x^g9y!j;SB$6+9WgdUIU+p@^- z@gX$6moYB17;@X}Et!VqkN=LSy^P#TkRh9vqHTfrC#8`Lk57%nK)&D3sgzaiymO;9 z7s)$3&#X~~7;*;O;0cRrwL+6>9lp66{?u<|@d|W&gwBV}Wz%~}3SFyqY^WN=lZ!W~ z!>1CocZ$8j-*;$2vKDPx>nr4q1Dz$)-^dYqZk^VzR;|M4ej1dyFdA}^;M6{p|B*@i z0uP<-n}(f4wJ9Mx7wIKr-(G)A>vCrFgMxW$b-rTN#Kjs#)p$b`gmGI{dB+=VhK6UJ zk6hlocbB17=qgB2H4B6m)*#_Kuk`g-)O{bSDjn+e=B#+A?Hd;>V~*`s?XZr+lr~;fBOyHdHH=7ijCfwDLZ|Er8O@?NhteLA?+fn{AV@04DBy*SuJxeb}cPT z9nvVYaDOjP`i%>HS!T5o2kM1>x8=seCV{$Tf$c_?1k3YoYmOvr)~S8xCplQkv{7eY z^bPckSwKV8ohcmht}I8Z?AurJZ=FvfkUwH-^Jp+Mx?)qbmOZly8@>XsK;MVZ94uDx ziwo%_bnd0Xz-?yIm_K^J$~|`+EnGE=Nz5fv@a2^f1AgE3smx{MVp~(J-1Aow)Ho`f z{hMkRh0}XQMQ{({4AUxY#BbAklj^R9XGYPoQ0}5N)X+}jSDNEoj3-(1f+WBq9Mc6Yp zV~^pHR3LqfEE+CBsH7e5#>n9%G@atk%Uh7*@Z7yPovBC)2bw<~Tq6ok6oqF1uLhgp z0veKsaJsEzoAwxt3pWEecB*E%e&bP#5wX3=D#SpBF4Sr65$s!3horCg@Qj&_lulaU zGoUfAo~W7yBJ^Sf(VdL31m?u$aa6vPq#Dbxz@R&imCB zhdG|mca@)DWEgx8hcg_#L)vecM7<<(u;Q2L`+5U{s1TpMMyDf1!~<7+Z{X6XCyvQG z@O1+v9kCHX4SW>{DKvY}N zT|ai!Y$To`uA05=UAjK~>4y60wn9HF)auzBLv=cfiWZTIMFbIW;~`?ypdtPu@U{?> zxu&TXe?yI_%0U$s6#S)EoRY^CqdXEbh{qIX=$cz1VhRc(qLtpUvFL!3vNB#SuA>?q&$^a3j8OsO(OY6Bm`|TJXc)se z&^vrzv|v&gbDekN?e#h0V0NrU3lq`GFcGSIFeNE4x@6zJ@%9!uY(%fEscBFzeJAMs zg)>SDR79OjV|Eb~n!Q)s8R9T+oM%**&zI_`Qh^2**8$r8EmSi9x@>1z8 z@Y=tmcPMXTHwQD=rEIcVAi(wtyrxl?@$sD7IB&kr%`FgH#;{Y*3ZE01XD#^Z3D zA#g;e-ku$B)Y}Ub5#6fJ46$=lQ&WL+jeVPyGV*$#j}8%!h!3*UV6cxz-;6if}PC)Z6#(%Gsx3bz)kx+_~~G_pr- z;jWL92>K_k&;U2x9-Ys8$j&5<(BbyP*cV!`B;(-V0CG3a_R#M;I#1=Cot@otNJ>db zNYP(a}nGRa1F)!&zhzf=csYl-Ab1oS-3xzltzuevESLuJRGu_e3Lf zL;$R8*7$^k2s~u?W!S?71qBso@tP1?9q!MC+$D0@-YL!WFMB}gsYzNiUwn*{q;78P z6OGEhQibmjy{9m@HlL0r!UpHYA9?&+iMi<`)psnYzJ#1{a-X=R-cqJL$URT1{rOXc z%b)R9AJUqg{n}2v9s9bG7nj^xH)#Sd33+Id8U9 zQyXZ@ z3z#9O^So~N_)QJ7y!(6~lDk&KmRA)ylOX=H%f*}_|$or%wPDet9wiFZH=C?noHKqJp z9hbFAv;a{#o>^3y%sY1Iq3dU}ldJ%$VY_d(?1w}3+fMzBE9l7gkrm@tyo(z1+B^j@y=q_U zL!UfV6L)&HesYkpAj)8uO~%w;QtvhoU^i&Ue4T3vzQO~GO{VhX(4QX}p1*$*7M%r( z%H7_nJl@TG{Yk9Y78D|0w>zUWFqk2>0+PusAHO?Y&4u%BmED%6v>9rebr33n6)5&( z(!F*#Sm29OpIjD=b4lIb4M9y8`b&T39WpjDkB$lUDdLdg zZSqF*?%nV8s$5rU@T}Vm+KhrJ&yLr-k(WKIn1y5tBTs|zcph2({!wi?^+szc*CROM zzGDGjIZjT}y&#M;amS{hMw|wocu}EC|(VQ--C*!T+k%R7PtLakn9v&toqz@&Ry$wM-sM^7g-Sa7hV4@`9hM6X!^vIcz z({Ahsos=m=)Hl(m!1I@pr1-r>?Nu8IgtGCu6VcvMT-$S<2M~whA-Unt+IvbfvVMgypnk7V@epkJdo{MIuCZ!dmZpTSWkew24JF#e3^oiUgg#*%YQoEPIkX?y zeit{7hAKu`U%bZ@gsy_|r2KUcQR?^a9jNDorJ&8qX;qvzB^je$>|qocCH^A<)jH~FAN!pxhiM&yu-^felQg9-M$8w!N^y#q#E$T zcyjicc+98Lo48vaCJ95-9W?2-j)nftUpU@!qYE?VchAcq`N$&qw7Uhkt*^_OgTp76 z>1zv>kw7xt@CJxYETgV`nb!Dr_mV-hJ?@_|G@yW{Smnjsc3X@LRsZ$BVJOSemPNPhSNd`OmN`4zAOl+bMO?KO|XM=p=C_dTsAr zpDr>XjnjV0#`$c(GR0D2%98j?iBL2hTP{)frV_Hl$vSRkZqCsE#4Co~GtoB*5<^@@ z`8MEb!G#@jZ6Fqu&Zdbxq^QpAa4C}A({AgW0DKgk?}6N&_qRLl2)#rGmigOnn0eoW z=|=nV=(aG#`~v*Ef55qfg_mY$3k@zn^dYN|jGf00M*!Bb8BrQd^w>_Yz zXR!-6hgeD`#XNjKGS)|%ZC<~y&gaqTl!gCA%w>ySM} zy;;OZTVL=kdx~5Jdy5rdF&$=k1Xs&ct!_=Yx%T-V&6ay1vIRbo^9$Il%vjPow=yxI z?GN{qIWvCqn~uutiq0N!D`*j$XX@(r@2}{5&k}_hGZ~RRchUK>A=ccQ!I2K~@)%Zm zKeL#R=po7z$q9kYHy3m^(`66TvC?`}FAvws6p6>_X%*6`cRCnCA9+pkaGG=Cb!jeC z-U;xx`2Vcnm%*O&XKd`pQmb*^Z#bhoKgWTNg!sLA45!o!_tWvwP+jU&Z?+9rF!;?~ zuc^jwB#F0BVydpG5T%?{5v#E7{LJj{?X9KTHs#8It_l-R@Q`gYW7sTF@WxiW8k1Y3 zcByjF8!ujH=M^62Z+ z|HIQ+M@7}We|zX|Bn0Uaq(OS5rBjgZ7HR3B8<8&Q?(XiE?(PPup+z*oldq(`Rcd?1AYoh2d?5hF89VB=2Ex-*1q zym~L>@{ahW#_d+{E27wgW<(#gv8g?JxiefsbFUR>Osz?#%0DCymF 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¥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 >y!tQ!7bOb1Jp5Qbh7S$%cNHA}YUP-MB{) z9;mqYN&9mDrt=KoL>+5u)XFoQtTzk{2|4fy4$327ovwcN*fYMY@zG+?+a@{0;j5&+ zJnU=V+ajLK4@ITDyjkbB=^?|K_#ZU zuj&w>zM~AGG=EqGr;lX9`!$_ued3>P>>E=64w6OgfAFrmTN@A%0Ln5F%*{4AUF)V6 zO*aZ0HBTC+3@s|&XCQXpsvcnZE`K39vn?h5>}jIhgZ&!gz}QqqLRr#iEaCFGVt~(u}Uw z)kiVmo+qK_Y(|MJ&p4AGr@?}&s(7{9s}u}Bez~V$+pu&ho27QAJ++O2l&{ln8U@!I zm$1gJZf|erGVKY|URQM7+u1=WUz7ip!=swbnNf&8ILMgPZ0JMCZwvx#E0+I`2Leh; z0HP;;Dx~QU6WI~%Iqa{<2PtSYHwI5?VSlChP$E6Xrlu@~C7j>H8-0qo-)76yV<%-m z_3OEW^wF=?laiU#q^CQz%@hfPWF4^$(#mjN&b;<#_kTk;zvmbI-u_pv(eL?1zqkKq fqSEh4OQEHBa7Y&xw=3!N3+vI*xTapFYWL_rV5kze literal 183220 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

nNqUmPsf+Lp+mP<6h4Ng|Fy6@rsnBR6&P!q?O6 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

s7< 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%0AGD*SUB0CicY(>hOK;=otO z`m~>xvP_AXLwpm{xLFp|FLoEwSYT4}qhi9bZZfv5S#+SLZp-6tl7#m^xNXvvp{Ihm zi*3l1CLxpJpdS?tQ%2#L$Clw!Mxf}w z366^WnH>5AkLWpaADn1y#6a_48>&VfPXOXL5ywPoc5b@m&Wcc`2{*CUNW;CoHAO6d zeU?&C_h}AP0+TL8RaGHjD*Td>7|f~bEA81N7+n$of>j(;P($hE4MYm ztLvC_d!DkbaqFvY=8k!n-YbELzB@y;A3dLH=He^sQoXNs)|8%Ac3E{?4@QlGYHLd5 zoMD$F#0%$|1bq(iP(u@`pFkICyx{I9?vtlU}A25I!N$ zPamqGWNO!NuGGV{^DZ+p7`+ljoP!4pCwZa?vG|}+PPX8q*eC(=ZRk1Buh-W1fm*BxcS%H|YGCkWm-0GGd1vii-u;8kGrzEe8w z5WZMn7_#_1_=jSC{a=s#3p_IT4-RIWvHrA_QcVgmj0y)M4Hvtc{ge6t*-htnbj3^; zb_%V$tWwV2LIp1zFT(}K8fUE`x{A}&9(H@LfrBPflOww)8^$iqm)9n^vrqN(@6`fX zB?&!|lLAkRk;y^cj!$quhm#qH%IHV|nxLBXPZ!K^^gU⪻pL*vAZ-{uhz1n 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 o$e2JUrvK5wkn@Z&p4ODKq!iy8&~KenlsC;$Ke From 0b263267ef98e6319d1ab90c8a7e4a642a029fac Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 5 Nov 2024 15:05:05 +0100 Subject: [PATCH 150/219] Update mobile benchmarks --- img/bench-encryption.png | Bin 182923 -> 215396 bytes img/bench-mac.png | Bin 133281 -> 158233 bytes img/bench-mobile.png | Bin 36815 -> 50034 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/img/bench-encryption.png b/img/bench-encryption.png index eaa6cb7ae0d2dda167066d9e1f239690fa6c6d6a..d65ead1fedde1467707ca879566479dc679ad624 100644 GIT binary patch literal 215396 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]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

  • *X#mv2--4Gj|bPqtc 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

    _u+_*QrJ4fqg!uPZ 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

    _{6f!DmQ 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 literal 182923 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≦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

    X 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 z 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%0DCymF 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¥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 >y!tQ!7bOb1Jp5Qbh7S$%cNHA}YUP-MB{) z9;mqYN&9mDrt=KoL>+5u)XFoQtTzk{2|4fy4$327ovwcN*fYMY@zG+?+a@{0;j5&+ zJnU=V+ajLK4@ITDyjkbB=^?|K_#ZU zuj&w>zM~AGG=EqGr;lX9`!$_ued3>P>>E=64w6OgfAFrmTN@A%0Ln5F%*{4AUF)V6 zO*aZ0HBTC+3@s|&XCQXpsvcnZE`K39vn?h5>}jIhgZ&!gz}QqqLRr#iEaCFGVt~(u}Uw z)kiVmo+qK_Y(|MJ&p4AGr@?}&s(7{9s}u}Bez~V$+pu&ho27QAJ++O2l&{ln8U@!I zm$1gJZf|erGVKY|URQM7+u1=WUz7ip!=swbnNf&8ILMgPZ0JMCZwvx#E0+I`2Leh; z0HP;;Dx~QU6WI~%Iqa{<2PtSYHwI5?VSlChP$E6Xrlu@~C7j>H8-0qo-)76yV<%-m z_3OEW^wF=?laiU#q^CQz%@hfPWF4^$(#mjN&b;<#_kTk;zvmbI-u_pv(eL?1zqkKq fqSEh4OQEHBa7Y&xw=3!N3+vI*xTapFYWL_rV5kze diff --git a/img/bench-mac.png b/img/bench-mac.png index 4e7d89c61dcaeae1ac4b784e325c73b96fe12256..cd4bee29d301d7f1876d83e400be1a6a10910d56 100644 GIT binary patch literal 158233 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 z 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 z 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%0Db1H_X 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 W?F!$cqF(#^CkisE($$jhg8m;zL~Z&2 diff --git a/img/bench-mobile.png b/img/bench-mobile.png index 5e81d6a0c8807734cc2aea2a6e24f29b04dd8cda..fc63ed943e0f9ca8cb8b755fc881a7a154662ad7 100644 GIT binary patch literal 50034 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 literal 36815 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 HY0&=znnSL? From 1c7c659f27f6423e59845601ad8b908940d9aea6 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 5 Nov 2024 15:12:36 +0100 Subject: [PATCH 151/219] Smaller image --- img/bench-mobile.png | Bin 50034 -> 45028 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/bench-mobile.png b/img/bench-mobile.png index fc63ed943e0f9ca8cb8b755fc881a7a154662ad7..b29361ad9fedd962da1bdbeee1e2e22f73a46d9f 100644 GIT binary patch literal 45028 zcmce;WmH_-7B!dz*8o962=4A7xVr~;cP9{>3LYd7913?xaCdii4el1)3#w1aq{Os8?G-)ZZ56_;#tvq}7ycO{U@Rt`8 zesa&AmHm(w6IOM9ezeGn+ev~UB<#?aj#a-MLx(JJG-b)Eazt*bcuE{~Aqjlr**Ejw z*C(2h-!CM8T&385zyI?(iTeBfAJ@+uFu>bCuYcb7e{lQ%-Y7OSDN$Wvo{&Bf=~0?< zG{loloL5@YP-RYF!>#!2nHBuAwe)4P!KQxQ4E)uL`g8fQy^nU#u$oUV{ut0r+>;e6 zr@@8i8} z?MFL|+&4VzZdhx41g*PJI9{2t&O@^}d6K;ogkM(Kpp=%jG-RDGn%VxeLc~opOP6b#-lRZM{>Y+*f&+1O!%4JTXt6 z4X5$Ct+x79=wDv$Pwi-QK0Q7}LzxA4xvMPb^L{nm=x?4rJ)Eq1?5161=cwVrq2L}( z7fm4$dmBQMd0gpy`_{WcQXK2u&y17V%#gRnK)0txuVN&LJYW?Kn%ygaA)U98j9`fT z9-Oi%Pp*YD3m15Fo`B>ipO?Li#c4_j*;0q<^y*~hlVGFDrmWa8od zb7WAy>v@x2Ql~YcK(Cu$cAZAE#ai{>0qaq58P3ycS6hyNIoa9S(SR|@umeUzB*l!% zX%Ncn5RpkPuf0bZ1bYi>LETcQXZsho(6IZ9wQH=e4rXp?*Iv5jsqRnaQCcc?ux(1S z3qiwj@dxlBm)vuO$}nR=OZ{8DLW-Kw^71v&lEgl$VoCQ`hoV9YRTeM(EymLI$_<4d z@6qD=ZqGJheqoeyOx4=y=+=1OImaTz#Ku3#DB&L(Y9!09Q)k~pIrCku$@9uu|HekG z#Cm2Zk(mIn$$xef8G(apZ5;DJAM3JioNaXG_TGe}W$ z`d)UIdlM@8a()H9j~7Iq9lR&aCQZHei`7=zi`ASqv-MbGok1vlUkPp|Wtn~Mwi6SX z^w`k%+#XiEP6*#Sw%=A6bp^Yv`rPzKlP|#KXt7(Y+tUz=9Hye+F&PpxR>N+gawBoK z-5>lA{7-R7 zO9YP3ZMsnT%TO6{Ty-@^iOa>#h+Xc--BBrgJwwA-){fhQA7$Mt>>qdJ4#5-Y9I-Y} z2^|3lo9HHek*)+U*MnI$<&s#|gYfj{Ywc3b3Y0e`W)Z}IJw1u~`_M^InBd?;^V=$~ zH})grsr07t7pUHh+lQ^a5TyvzMGYSQHJjrjHmBfov3#* z*=DsEeS5bFy=jBCTszpl!oh(n=`furGZ2I&_Bm4CRIIaK#t6wYBzGsnM)RVEe4LW! z8cF9Tu(`CW;2s*-O$W7VRv5>$omobOa$?USf`L*1_kNb6zOoLBGN@|?0 zdwhHlTK|hw5)Jxb#i4(DCM19xyfX%bg#)=sowb|un5ViexLmblgPQD+XQ}W&J zs4usyFvd8ec6EC*#S%Hb)3#9t*?vbDmM$2dt=kU9mNPL`Xg&V?_NZ!%;vBeaDB0MR zFl7PjygsYrAnv$OY1T{5O^F}!t?^XpA&jMt;Kp`5({F%`oLuw?=5&BMBMI>z>kS=c zi=-jHl2LFlR5rDRMUK?HeauZBhm%MCnD!NB&>CYjQ7|KkHj|Ae%6tSIzWAb?M(uzK zcD;u6NvK(gXm7y3tJUYhc)1M(&BPHU8(9-J8;t8E9cJq_77uCnr@~0Oh@q6l=ytIl zSfDnt%&U>8(%Jm%Ofcj3(YZhgD=0_c!FvPK@aQ%khtOm53(;=d?>pTZ z;r|h-UX1h*MtqH;VdFw&^LvM1K*_>%r*HRJ6o! zm0svXe1&}KZD+w~+B5l5(b?~>`UD?YtFMjp*k4nX@U`AUemBx zysTcVDSf4>;Qz_B~mdsB_d_(8~qz(sflRe_2MeNY@cp?!a}$dlO>@{$0Qz-&OY2cD2Y7+OG)9fg;#uxCepGEFXIO5b|I~wqZ0Dh^CD?EhQ_w`*4 z^6+QJ^AHtyLU7IOx4MWf$lb+I+}WYNZmpcw&v$DrSr+W0WOlC>{$81Da0TvbD7Snf zg|VPO1(n`x?XP{W26K3{H`w3N%0mcyw`ADWcgk@iE_TNVo_CC4!Y(EZ*ZbAX#PAw=L_Ko!GudQR`?<7p`{(DHISv&A@H=*1Bf%)y@B3$U zf)o@B^>Z2rOXh~Bi&QEKREs{mGv>WoYoM}F!lOd-L`9?qT_$#{+tn?bS4Jl%H&|~E z=H^l)IVl}bp6u?VIP~f=HWi56og;RJnvlH)tj{6(2T;r9DGD$ch+#Byj(g+X9CVl% z9R&n-4>)-i^}yHZX?i>3D@cc6Osify)9{t*!M4GH7f!iCelN%*0{5y22=Hv|Xr+X5 zlL0{X8Z@2@f0ivC9!yCsU52YE;tZzJFVk-U&S6DGg}PoPoP3rZ`z(3DgU%fc^9X@w z-q|agSEwBMv|5$9AJoA}S3i#NZ)7BM+9W*YQ!EKW@5cV= z*t%`@4zX#p9(!iFM&dT|Wu3q0FuKIt-XxF5QNYRL1W2(j)zN3dn4!yQRib0h-8kKy zn{6sJeIkSf0u9!9x9LWAsPo;u>tXS83IQgjQ%oXJJ}dbC@n1Uj4LvLJRMv?MYLg#F zVC5{487#GdlOQA5woafZuegc3#Ba4%j7D_h5%tU?f>&xnR^P|9g-MnPLO@=N8 ztuWb#8<${SAqg3~Itjy)w{O!$o1dpc{a_HrOB%fI&R2a8saH5{=P~9K(s(Eh%ek>bl$#iOMJ4(JSPUgwV!vYKRAMEqR-Lz7Uwes|0LTY@LKWltI2deZ6>{5s%&y9;< z)&G{uI?*MQBVdxKq1m7Ho0UrhqlLB*LxtQ>A$Hl zJpI&vxv{08;ED{+&d$LA4ixM#^K>Nb-ORmp}%|UVg5W1U9+GIFP66RYxl8M6aI^lsP}vXmT(_s%8}%?b=i}^xy>eZLK1Os z?pzoMuP*~;+r}~D5boE0E!B;=r}BAJiiKj;2jpTB;^fsZ>DD`XdpFaM2;uGn2qH}j zmQjMKVKb6LrVVIZineQoZhweMOK61rN`n*gL>OS^*&r zIHT{y<@E19G}`fy+rQB=9ekl3f!D3T-F)feIYLoDL7!)>T4rDA*CB*#iDpG5wu&23 zgswhr8luzoMR=5q)pBh6tR3d%7uO!bT?((ymd^{PghwLd%^9Zh<-58qX~^FP*)wnU ze)T#msVgs4ulYWr^^-NrYovc9>#eZQ=QaPDnTVa?WE05UUQW~j3I7)J{!F-jg>z4) z?f!4@O!GblOoAvug+Qg49)XtBVpqxPb#42Fd2h`o18$%Q05;`anY^g8x68-<$K!WP z8%3X>bEB{@={dh+V+oFc5Iv334FJ7CPZz}GQYfY+%1-8F#D6;|tKLuFq7~Z>shSiL zBiSptrwG#@Wp@B4_cvTl<|1#X&i}?$43^G|gRt1F3$%;xj4270aOTB$USoev zo}w+HeeNn$b2xns&&O}x`5aDogNIcR;X~6U3b7Z5NiQlz=nm)amHkhQ7fE;DK+3}& zrb;3X{7yN~514{K4oZ`!yjpEBM)V3jbZ_STLYkdrjl@FE1uJKe8Kd5HJV3(g3P3@C zAOEk5K=c#NS1C{!6t;mIU)tVI)Mq2HokK+i-zQ~+Mw3gDfg(U`ZBi^!va~a8Akc5$ z|7XsCNIE-s20(s(QqnBIcU>LMNrq09uXlAbzhaWbWmb@p5gCcROBUiXu0EHSm1S>} znoL)eRZtM{x#xhY+(3_(JHB?4pb9A$+UxXw#nASXO`zh7iN8^pdPa8Vj`;toVDiuU z%Kw*znEyY1_n-Bk|A&Pm1L^;xqLbH2&1~w}Y7$slo_)>f-9sK`aph&7 zmgDg0h#EZlMJ|4S-K@19cp&KOI|=txIOeZ4M$9N)0A?~H9TC#YH*c3fc^bzypK7;# zGfg@2nZv}Iidg>*|0q?LEjY2)R@3Z-CC|^jtx|lNA87IxO~kgWZaj27Ph5>CyeLxiJGx|G=JB#RkL0;2Nfx-Mh^S$gmy3H zE)9IM2K3lvN}hu9zr;u-ScKHWCo^wan)IqS*+rh2Sd9@!F82P%0Kkjv{YmS)`g6{9 znFgDkgOTczPD-{td`gWC@B7EdGw>K>kiLvAYBclvjjqXmhXz<~0_2KzdQ%4@Ka}X4 zxj(y_b~pKv#jE|X|FF-5@8ZW*QiKzuIMGPP+rQ?M(UuB*D#0(o&%<>X@m8~;${^2R z4{){`bAR*T!*+9%Qa%&>#5@0&i3LFNt2*p5MO?t$+Zy*4hg?r3syyT_#x)!H={38_ z>g2xXKON8iy8ri*)R}u{Nz)>LcWSmQzB&w?m&umwgnK{E(v{9P){aDM{V*8jqi_huje+$OJAP6%oSh_MidEF^>!Xlb1yibyr z_2rVPCDG6HIPK^WMAc?$Rxm7gs_+ZvoX@^%aM1=-HBU@!o(_=-Cv9~rAUIKA2ft*B zixMWU;PZ!|j?kvA+I~BTvukFbai{OI1-iiKIPM|pB}fT>wZEcz6(HP5P(81s587PrDLha+D;)+f=}*{Tc-zRtKHGGRS?vt zFOrbhv(Rc+gXbl|JGnOFL7S2Ob)+_rhHWcbt@HO@n(1_sCfw4sszL)gq<34fiUR+= zWQ;G=Ykb>c;up ze>xivf9C%b51r_cIe`u}cFuudZ4ssV`Q5V zF*Uro9Vb=Ldr8H5NBI2Ws0Q_r>j4#R*}sPWdm;slZ8I#cr}d1Utg@6_%nQE~;SzjZ zP_MUi6rNDD1Vj@K#nI)L_7u&bFJE46A0zhXIaQ*2*bxR_Y`V85$-T6S5)$C1D&pQ6r_E6a}*lR99d(oUaG5=FQ=9IUBAT>NSuD! zbCKD|H0dTatOpaEHdfjWB{0VSQ0<`jnM}m*c?lF9JuY?%()8Pl^_s3LO!|&;gESa) z@*^&AfGlFalfF@xOBW`|rZWUZb$zl->`h^Qk9r0`EU^S;IW#xqW zWz4KVzKHwJCqKy!FX%u7K;6{){4)%nprQ%lsEJ<@UUVgjzVCiNt*sPf^and&{c>ZMkfN)UG=(x(Z+aB_+B%X3;53t_psU!dG85# z$Lf0S=PlLRO~o4cT;bq~E-WmtT^!e~Zdf%`nk6#ovhhIV!ki;r9d5B?t)(!Mj=p-Q^>rN{LB7V}g z&61(XO)~Ox3q-=+ElG=iqdCK465L4>7mN zrSYgSCjlt8tnCRIoW1~5u0B6c=J&q`GW`u0YbEUb_86!A>MU3!d5esX=sSW>x0^|K zKt7Fk(c*cPP%tJ41xvP#yE4UhrdqSa<`s}J|9$aionJy1K&x88ur0Ry*fgF{#K7n@LM~g= zciea7R-cH`?CMW!tG+y3^pl*-iY6TWY?;rveWI`!Dfjq<6wc#*Y8c=}U^xU6qddo? zmpW8gS@~V9hB=>G=Y;tm_a8DSH8QS+_WY81jj_qQ> zB4fQ6KAgzzsnCk2bLO3W_q~Vk)&3L$L^k^sIFg8;?g4sS=kcl9dhUCWM;vTIfgt1* zCSCo9`pjKGTx=|P8849O@TCd(cqUJpopJ!R$+8ND!*s7-9b4S-V+++*uaJ?3(7FFD`9q^D!AAzxBzGhw2aLBR@;GMVkQzn~Y%-_7K!P;r9LPY=HXklVGY<7)rHKo7&|Q zD2e#{5wFKrL0@Qp_6y=&$>K}uWs~4l=1m`yLa>Xav4{#%SR;^qo&E4# za5i&jx|&VY_uK~@W~o*cmAU`BK8MO3fd5NK{!!L?--Bo1y%9?N9p3Iu;8zCiYN=VE znAx<^YJ7$FM@_Vgu!iEBbtmkowUP5#Ox!~{U5c0nc_#YNdZu2h4%Q4@$Yd92rOwk`>T}iP=*EcsW zyM~sxd$VhBK5F%xE=8Uq4I$1S_uZyG7~EP2>6`VlfhHctbd3iGiSh0?Z`zDCEb9ar zSdg0piAPyXG3nk4@)Z_7#HyCyQ*p#+(sVaSfyc+QMAP=g)xKvdmCAl_HRMlqTe;Jm z$`VDm#cY(ka-Gu)8F={h05yYGKvpWq`1B?woda3?Q;*>6o+5xnY0sXcvlbJ^?X?`Tc#f> zZs|jAG!x_;L^vvz&q_puJ=*R2k$tmDq2ijB+bE~X7}E0#x<4^^xzq__pObP2fz9u) ziBRmW4m~8IZ>Spr^9N$l#BGA<8nD>EfQ1*)`QUaTI2yWst59W6_)X?E2(pP-90}e) z1N;gy18%jDh|wEe{RU?zd0|p$Hb3ht*0yj|j7AWNxxaPXU5`PsD4F z;a^cTW7J!dUAeb&`M_KLob$^(xURXdX>mZ5sDSs_&;OAn0SBzvsho9qVeT9&gg~ z8ta)}T2;i}O$`GdG$Wd!HJA3ZXs3v#EM78FdrISxda~K!pA8>-2xxU`-+H4>rwMyT zUx$X3n{Ny~>r?IZb0gRB1o+ytf^r8Zu7la4a8pXvNO66?1^T9PKGI zEe=1-v`3d&!F~!`n8#}G(3mdLqzwZ*Nu!&pmK#u@Dh8Ree1rS&FnB!UAjeiVCc(Ad z6+!mDXO9ev)1>=!>8tXh)`HLUL0$iEbiIesNRi zEQE5npRSQ%fxms7X>_$&5Cq$G>4a)2wfXv_Hm%WKl z?=rU|nv)wlK-mu`yi5ID9J3NA#}OjG#`s1y#cc9n#Ys`O{85-_ zaEh11hjZo(K!h_!hF~e&4|SQGQ-#Xpv{Or@g#Zq4L)=fc@PCQOCwzs=Y6plFOe9hA zJT^=42|079sTEScurYD1xRYD&`NQfd7mNbMY~&KokJ81QP$tCurmuZmk(miIAM~xLMQPfIpwHAI;dlkF48i57mm|SONNsT)T(R^}IG0*t) zItTAKL?e?rH$9JfHG}ZHIA0|+PYr-6sX<2T*jWWMvA6sjQa`n#>4xeOU;}w{Bhtk_F%j_Fdqv$C{hk9uM!YE z>_V2^R`mvhh@>4%BGTnG0~#4WrLKvQpdstSe}7>jFUM`99Ad#ErKP*fr;}~J!<@vN zkGe>~{a~7-?*M?&pq(>!Mi5z5NB*0M;)$Kwnb5>aNK+}Q`L<{ASiV&Lf! zE`VG_s#R14I1EA(yAE+DH7JBhu^ zc`}LO$Gr+G{Qv-S#)<@rlwtf2dq?inF#O~u$x+UkSGkh@@GTW~2mdw##||$qM;Zon zMmpGToml72PELSRd*7f}`{hN?2{iG_ms`-RrA^Zp+C!y|ylS)fh?^|W7TzGJ!WDd5 zh?_e7C_M=t$l_FS&L;A`HG-rYNfI_Gf;^__02@<4J#YHJ;%X4_;NH?XgLn}Mj zE&zli!-n~eM3|>T!^Maa@xG>gIv`GBL@K53bsL{(ul-r5$%?V5d~UhAW1gwu;0wZ@ zU0I8N!R^>G0=g_9z;?!}VxOx?u@#mUPO`~#3qA%hAXO?6r8@%7SLm6YJo z!ORbnN`ObCp$aeqD1_MeZxHj;%H?_syJAvO=xOF(eQBLg3#3;orVx#r_$qISjBKWR zdU>-7lH4V4fG2EH&e7-sk`_+}rfSit9_86#fGuYY&0+C5>%ptUqKdmT@&6VH8&Gu4 z9luT6O#NQ+!Z! zt3+FP%06VDXRoBQe1lbP8D_rU=0^@vr=wXie;P9^BZJxmT8K+ygiwoV;6Cbbs z0Oj~*j<@tm#unIOw|rJkIt)1BOUWIn|L4J6V7 z^wz%3+yOe#gKX{RE2IvQk+1opPyyKAjhY~u;cA+IJV-YDzW-re#dy~6JabND)2;=I0Dn8~prbCzEU(mg!Y2J# zOZnMkbm!Syd_PmBtD#Cpgc2&4m=;0e5sttU_G1a@)!&9bVEYc4LXd?|la$e8rPn3Nq?p!*LAM3PV!)D;3I=ZBpzCRfo-}WUf zS#_ZF0L4Utvp6s6u!G((efhKx;ID{%l^hBAB&07NDvDx$aK>V8U&(wud)>#S>-CfI zWE$OquwaYs?Y%R%Y47p>9&u(Q`48~#(^qMAXxS&JXeDf}we3RasRciV;A9-N`GZ`I?}cg$Dni>^Y-;{&FjdV1dED=`Pk3Ub69eR0<(d^ z@c`F(jd8R6j$s;sVtk`8Ahak8YQj;NQu%RUc#=zUpD3CHc3hLP711jK$^E=X&ozu9 zQz`!iJO`K)R=ac3iH^Oz!p_dcu1@m5Tvk*0dIrZ~GEDE(Hb$zt_M^|Ku+)xZ+PDU2`4jw7soXAC8-bV|oMI)o=}QcGJmXw^m}uPQY<%u_2E!<5Q9_n(pf z_vsWY(q=yzk6X#M90|k%yWlwabhps&8*j=KZ}_r_+lZ+OQ4tF zhh=ldlFHv+5qyj2xxWfrwfU*f7hGaMxx8j7tb3bbpH%>xlKyWGk^!OM<){E^ofV?7 z$gNdkyxpE8C(MoE=>mrgj(Lg$IjDS|T0H;4zrX^;(!xXpQfaeWF@)8a`>#YayRG#j zwjzkP#JlGTrdIXV4(eQlHR8pSmA|Mt+_!DqW$ELox1lLA=->nDTnP2mqK zP=97gJhDZ)Jh_E5-W;klwzR?C<`MpTKTr$a72*RAW&-R)Z#xo5#D7ksXr|xWNRT?m zjjw$&3rjc=B8~4p^^fBAALbeZN|rJb5nv~yZ^#1T%E3mt93PXiY4TJR6p&@9KVZji z(7nbMm!3ui3fHQO)Eq!ipu_PF%Z~d{WFI7@%pvsgR@P)t{0wTwA*8|-mhn2igROm^ zF>Ds~;Q10QmiSqs1d?JNO<08$cF)NLZ5SO#RwyBOQXku9B$o!5C=K~**hooU*KC@n zxb1Op7LCN`^rP(8&%vTL!P%3l{U&s94Z1~gmcZvx3Cir)JsFj;de|mYw<_viXu^O$ zh_eE}aw|_Rezti;`^{Qd8Il*BtvL~D_F082%vj_VFsF_c)_wXgVhh?ZoHUv+na1o_ zz@CuNAl0Or&f1TfrUXjzOZVrS4B{1TsN!keABs~FjFsa^3BgI@V#?G-zpuk%1;79& zp5@W><||_hvQC1z2gE19v}C`h;G3bSY?(VRA<~g3?l(Bg^@>H>V3i0tul2yYt+(;nrQ?!*K?}v<+itvD2^3n2@u=6wl z16Yob*qZ~A;-WPb?7WCLXjDS>ty4ma$)pfA$SRlSsV!o5cvT&{XJ_H}&xILJqoTy+ z>tj#Bt1JNn18THL^4K`!3D5Is!U(}MVZaE)S>JulzBMB%NsbH89%pZg3!jx!&ZhbF z+rX1j$`D!;@q+1aV{vL=Gcg19MSFN~G<82MeCZ$oiYGOx4P?15^Edc&Lts63ibX zg2)fg_9>Qc|E63DRHx+*Vn6;~DNP%yW$_AB$J?qP@7wnFvyK-q+{nGr%;A^ow;}`K zSNA4i5!+UcXMcMO#UkUS2;i}*1ewL0qRO`EjO+Cil6$ep3Pwk_?U;O9I^>V?(N7$k z=%6o7vT|iH1^c~!yD1C54`DpdS*?QsoAqe3YzRjR8 zp!WW9+qpktDbfCKj{#Akvksn>qZ0=_R5r~ln3m>Uj)~KD#adCRFWx;EF$DGP-Mr?} zElJFJ0*X_Ag#M;1``^+0sYnezsm7d!ZX4bbJ;!`f1N%SGfU?=2&TYNX%|3a~sIm3b z&jSbP(lwzE<>Qtu_@C1zwFzcCpgjQPi1X)|(}ewY=u_vU7MB+qzOl8kGtv(}^9 z_(yfd3IA)rHMOn3*J(N*Z4x*jR2=*EFS1_ZBEwirG&$l)_uWW&GH6Jnmg|N)xsbVe z{^eyMxT4cdQzJL|DI*BfJs`WvvtJxJLt;6WPcSgvV-d!xe0G=*F zh2-7{-g%-)M#XrS@HjZ9^^V4%TrAsvjKXM0j-c{LK}(_nVjke#x^@l+x<}cBdL@CY zxYz1zb?VhSEDc&8J6zZY9tHWN*4cEnZdHheKR-Ixt~U#kYk)nIi(LiMpcW)&kK8rc z=2W}6e1D$S8gm8v3d0Wozfs!weI*Qs{^*sey}do4(gPIIv$b|hH!C0qKz5^=px`o;$Ib#B0x4V$ktpJ9g-ThS zK)b`H?)7Yn!$B2#!|6-?xrXx|JpFdlQ#nhIJ7gSyG9e?74l$QOXt68o%H4*#6X7vr50}EPKx~AgjtHzd}XvfGw30OOYsA1q*ab z@Ff7?6gCC_5r`*g-2kWWdN5t2Q^)i|=qPsv(42k{empdQ-k3!s!?!jlQ?>z{+BfY8THAjIP(^lsV&zuspu zU8wi|LNd6?@I!Bw84>CwWh=+}UnhP6bZZ1|A1$w82n8#jK}ut>vHWLGUTQ|Cl1W=4 zcVDcg8}H#H%gVPvsU^NI-_=@fmkL!pjA;{M^b>GPRNU+uh{iEI`M9l#os7|H*hnm3 zi{}kL%j1mwl#R=*h1v!)LDu4VJslhJlDJf@30E#G#i3P8aTe$X0-8yNX?ae?HcUM) z_p+$x$_xzh~_L)%V}`!_&n zv`686(uVNL^C+%CYN4&1MK9+thy&7oiUTfMt*ufW#W6`;3$as-QRKNWVK zAm#1M^NPDk)Se(sxBwuSgo2GisJ@E@u`!{&;TVV0J}oE&#HFKVT3TAb4lh+T$6VhB z`kvBkJ{>Q*4l&mCBm1R&9OX_lEoaR5h z9nX|B(BEI46Q6un#UKDEhSNt=xnFGpjEae^7Orhv;I@0TLXa6t(orWTAh-my%O>UKFrpN#hNuWK~?mO8RH}L<(8fZT@&y zr%N+LmZ3Zu^VbIJDypDRMj`}((wkDf!JT@dfe3TI% zDMw`y&uh(&Wz&RDqT^onI%&C8YqMRbtXuK4DNtbUP%2ce3Z`FlxxKSs71q^&f;4jM zhh8c2Dc4x5@d+LlSK%^h=lUdrIctfB*C&7Hui4gp*vdszYB#^;>1`#*LuUSA)?g&3$HLC_jjG^P=R^aZ($a z6Oer!#q-|z{>#|xWJ_|RB5QcPAVeS|yAYZZrciB8!{N(>gRL#VI~CsT@jDx)P~L-F zjP*@j6Y{i2jY|ywhxBYxG+)bI+utup3(lqfdN5a(aoPipMwcHg#DD+3oL7mwmj#tD zb+S>7o}qpRYy)gFhZVkgY0Yck$A;v9CYwOi_)qb{E+peXmmR&061GGH>2Mqp^Edor z(005A2l2kb@2)F_G~eERsS}YGcns8hLF{IDOl_-CFE}#QzN=aRDvP2YoUdlmgh6+& zW}uT3D(tDkjE5$rGg&?7s-yY;FjK`)*{k0>65d84@p+{Flyjlt9FqN!bU8FDt9NPk zRuCe7)CR=@iC9PoE_wEQvaokMY$%(zPg-n3+sQla0FoF;<(p~3X62Cj@+ZJXp~+sq ztj5cYMBR}`@90bGU%)>bEHjLlWG{zdYTV0CdYbx@=maN^@gA?-7U0<<%q+u9B~c)m zoGP?goB>k!5sJLW)j;psp6qO?-cpm>3DC^67=-9V4>aw-^M#=Rk*(bihRvgo(2ax` z`O4s%2%H-dGlx-UAh@HmeS0t-kPG3@lED1H#=|FsoxPtWsn+u&xt!dlnEf1Mo)cvfS%fbH62K#E;uCmw2bWwGQLN0b6n1hdkB@ z2Zbid9n{T$x`_X;O32f>Uc#sdT>|ug!YnAq-1wF;_`A?NhIBnt*dxDrJeSjt>{`$# z$H0qTg$s5i&Dnb&xv+Gb9{y8d@Ns??hpNlf*1$EIaR z3qU>AN&jp^l~Phf#W72^7{9phm6IZv!yW=4#E!F2W|m?&@|{p>qC{Ei* z1*E4iDUn#^w+50Un&p2O?fwO6OuQqYu)5p6?5=qNjOHdQY;xjl2I5(AIVUFC(y8Gk z@dmZ~?(M#Co(r{hXmy>oDErCyBx?%w$;V&Zz>nKibOFutr2vs5Oy1;=$k9v?*r@A! zw~Zy6omYZCa5w?yZ?@&k_jua%Qn?T=(Zn9$yTHZEUjb$`lT_Y?FWZXAf zoB)xb0u-itA@y3@g%2BMVK{V~hL34(vwiNs{;CAs%Cim`a<9W`TlPUdljcf&%3}_7 z3)il*XKdmDTw1xb4_*97mFOb_c}6u~e;hixqf7{;S94aCy&lC&b|;UWNKpZTfA}g% ze8YJ>EKU`M-%Jn_%-b#pZn@_$7?Kdgz8^l2Ns?svJZX7rP;qZZmp9lBAcjAEy+A$0WTysFsTzJ`3Qok{t8#Dx^&+c`$`- z^Vjc8EGR}EQuBx+hQ_n)tsUMyGJvyA6dU=X62LV5K~J+9kR}51G{fhxI+9csuNn>- zcGH2@)g(gdz%IVib{HsRS8y|J2q2v|JAn*DJ?tS2CkS4Sbx6rff{)y;%+RFVkLBZ% zUENHPj-)QB+<`1042opIA2v|mWUKyFtHPW%p4+x!wHJAqMti|Z+Cijs0?G9UnuLr> zVN(84s3XrBK#qU@E^M3kx5`JLjgf|8`orzg1&HWB2$TFkuj%tvUa@oV^m-p#&da(1tU(T zLg6CL96p!8s8jwdY=BzC!UmhAm(MxUR6=G~*L6m11HlT2a&I5nwl>1AhBu=GBjW*g zeh>8V1G-%Lb-pP6>m+>=TrB5~jTF|r*4c>33}p&*d`0qDd&$qG`uUq){O8IH)$c_S z?gyJQC;!&(@PaKYij42dUY6(r2LRm@=|}#Mo!G@Y!&k-fL@J5MrP%l#CRhCj~eHBbs$YlX_f7=DbLku+;CJm z)EzF&YA7w{c~DfK>;!*C%VKaa)AYuhkn@#+4ZQS+diV zX5uH3=;~Lhb@qB1!ZnE(1wanKPZfvTTjQvfz@$eP3-FVo8Mf_9)pq2hEF|8y9U+xJ zq6F_W6VQkSbj_6lB+S1Z!wFbo;Rm*nzfZzvHO@VP<&trbCQ>mO!9IGyJ>M~gk1S8a z>gX*uL9A~20e@b zc9Ui4vSR#Nc#p+Z&3(!>Rj`^*(;b>XN2d1(NgXQ9W^R;Jany`};1Xw_ZWao^os`5C%`qg^SHlsq-=g%!P@?(k^C ze@lZtsg~PQplbdp4O$vIo*`~F)zA29pB;)H|Fxcw@U=Z) zPodk)JGZTXeyq1blq{$pZuFjyobU_?2~xeS;zA(8f3593PjC?ZHD7iFLHt%RQk^$y zo-A;epvhJ!d6CBelPaPdXIz5+y?ds`%WZ%g zOEwG0@m~RA7giIAJLhed=Kyz`CC}OGsA-Dt0;ElutSYEz%Vj{pXa`_!WhXJ%V%C-o zBZ|rFMi7NVDj0ODS#pd-2foHIDO;pE^_ti%WnVSa#|o1bYKCxZD1uIH>L!B9)WQH)=|DRyDtqrW1jmb+F6d zbr&=JI4?ZHit$gk1LEFBYr7FqZuVF35F&t+@kP53j+`k$7=$zu1y02O{{ zCEKgHq`_)9{}85EqB?d0^L1Q;94L&-nEkpN#P!3v;f?RkUsBZ}0GReSb5Qt-MF?QH zD4AdjNK}xvRh5#(6@ebim-y1G(3<4@(0E6h>tD+{m!P7?q+h^4CZTvv`zgB9GmcE6 zfV%!=xx-Tki11b*9FLhPAvPl;s*MwQW1c$H<>E*xy+KkMv6RVa*BeYKDQ5!5|H-7d zGrR>HO8z%W`oEZZ%Ydk!un&~(25F=_B$h@xl@gTh?rtezDWw|(q#Ft8F6jp8lI~FH zy2Jl{?|bil@x!|8*)wxyp83_&o;Ryl&ypMiWvG@g8l~H6pe$Q2qD!tF^*G~6N!=)2 z_wsLzf7ry8fTTvmDW<~SwcHfCKD{z$-ENRMKYaJ`y81T@02Q}wMysUMZ2)~-r z#n*S!K8@)$tFPE_4agT%vVL0R!OE;qK9ePkbh6+A@h?1QKAv_U55wGuzW#W*+~`a@ z6{niB(?{mmOZO)f$jQ&dw$#<~wQCA8s7J@5R zh~cW8otNnM|A*5ppSKRH(F__BbgqAGz&E^o?78fJ%sU5a2m;I^TnSTkdaKcUvC9+U z5@TYtZqAJ8jHx`+*sog*T@=A}LqGP_8mrqWUdVC>q@*QX)K->Su(W^2=x?;jEZuDL zvtBBG@>%s5-!|2WM?60-+SvT>Wyp$j{oR{yav?&w#v**@{ZE*F-Co}#n?T){veph1 zgyxaInzbq3r==R5|L@Ck!_a!#%U_&1Zf7AuV-)8d@3^wyiE(d<-P`fZ-}AEZaQzCC z!=r3Hy=-lTp2q?I`$e1MeMG9aq2cdG8z-dcY%M4~iR7jpGf^t`SE}5KYE1Q>*;U4COV3vRNB8;&1-c#U-!{Bdb#EI`_g4k3Ins_Nl(MN_mwL`)I22D|NHuJ z93~+udFJ+ttvnK_b0`B*T-PQ&LKbBE$2!Qv#-0%=b`u*M`b;?1DBOb~3Uw%`eB5 zxSaa~kGGcvPGDgU+`ntC&h@ZDu2P;(*+YS^VILUMQKcZXFi|}$!rmC1sl2Y1Je$oz zNdI=fScpULkuSN=Qm_0W@K#oE6@;C>)^0SZygb54N9ILxJXGm7W_ctyqxo`-L6Z^Z zZ)sD%GQc2y;1RF2*};zl_QOpBJmTu4N-rtJf=!VXgM3Xc@j#7O0ZFYkaY7>pt;uj%jC7Dr_2I9h=% z&Ev#@QT-_7`sR@Ll4fOm6MCL8^{g3hr)Az72H<@nSf1F=rci4?~ruc}w zTsiP?%`Tz8&-=g&f5P49W54)x$}Rp2V_h8ox&YTV(>u)s-uM1&;(7V!LmiMH%YK+2?bZ|X-zvs#OOexIkkdPF ze4SDjU=Zu9*U2`w8!S3!6`RNRMK7+FD=Rk>PrUtf8N)8zJ4`GnW4u3R-d@}`2t-x0 zU2#$7DE9(G!FkF!!plSS_`Yuf8R$0C?Vh$scB9M9-w*p+x6@on3*FD+Ws}Xg8Lqmr z0%m=AfgB8Vmv8Jr^=V7-d9MtBT~#90bsP;`gm{v8Nvf-7+w9C@tFx5sX!Usy6YsX~ zWK4T(`%_>y(Is;kin4!EXKNha`10y8?Hc{eU~2yU%2)O4ET=WXj&>zU6|d_d&AUj} zBs$j&Q#~>L{+{;?w(){H#Q9u~2~BHjV_eK2LFHRSM=LtPr?;fP7Zqr)4J~YuL_}ID z7j{~|Ef&|oTmVl_#=*6@e|R)mwZPRY$_U`CvD|p&2>XFYY%-gGoXjpA62u4*oIqHF zIrZLrOphtz+4-|?>lwKjq-UYlW~2EY{H`a(dqgWIQA*XXNGXlO?f+1fI{)4rIjkHw zndLFW-er%?SQLk$1qliE<-{yg3fqSN&$k5TpVR*4n4a8cT(=Icw-Em|@<_bCd3wX# zClx(tibiT{V>)AR?luvQxSiNf_rE^|wHDSRd%qcc)qFavE>E3JVf`z1R7-0pZV?~W z{&u522svBq=T$CO>G|J}_%cmo6D*taiGP)nV{Ee!CtDw2r@a{|VMyj;lH;+d7H_Ig zThz`gEHS-d;*SEC7O)_U4Z}EeeC)UjD-f^yoB0fgrWyTFKu-IJ`}e&w$`VHy&uwfu>?nb% zBhTyMLB*7GthXKyKUD5&V~XV_xca2+`so_hswzhy({s?LlUv;Y{ET{TJ3VQdxZ|{) zm6CeThlVROEM4Lu3=;l3dmf{#>FYzYx&AFo$?LCulqEqD@}JQYpTC*SiUz8~;~+Sd z+MgO1>umJXXFC520|3YeN2g|xHb6lQpujXBYX2TNuEPThwWuYO%ECS>6|&YK4ayhk-8VO? z5t<@aNWuR=_F)&n`rD;n&C|tl>|i(6*NmeEVl%&niAg6^NuDOdCknqH-AftB7`OWe z0nXFrt$|t#E}4?BJ%brKLGoZe;kbrV2^xfmUW2qyo`Y)1i&?pE>y%A8~VT-$zCJ~ zvPYOS%I9T%l?g|08d@>n98PS#V+o02(YL6I7akhS6sR`*|Q@ zqN`#vgOEEDUT~vcej_%2s_)Zo##AT39NqGGz^TE#yYARE(~X)t#n)@1^)MS6s?xIJ zrm~WYG|0sORDt zK#dAJUTUBni{D|0)oArP2cFi2MwAdqlx1n`1GX(81R=LQqiD3OfJg7v0syOg_3irw zZqBT>C7`lAy~Fzli$YLzY6Rc;KRtMokcfD38k~SyaYhheTm4XQrklUoSB`=2%&kRQJwCR+i6`q z6ND{W<~LKx@@37e5^g#a)l{_F*o#FEJq`i?@Z^H1DDUlPv4Sv%xlk_+(~T;Z zD6|`f$-P!7R-3V>Y2tYk?k+k67x><39Ea1*p9(U2SS{3tmp}boGo@X7z*VkVyS9D% z)8>T2&itdF;wlwXVf}e6KvZJJ{;e-dVnlfj>^FeP(=T|FRLiFP2Wnw4l8PHX0NS_IV3sGn|)Q!{<#~%^azkCmO|o3=TotGBrCG(HV1_dVIj==IX)9apqM-j z9(C+WKdY8hCZ4$vXSW9j)KTg9CAr-rEs1Fz#;d~)%PM-y1?BvUhUBHkQ`UOHX)!ARf)kg6mqsTQZ-k{KZqkm#S6KsORP zF$Hq>JWp3E(3riRVL4KBfdF7Krhdv5J89fJlQrsk9c_!X2}omqfM-36Y|D{f70G#? zEJyI(1OB-Ny&@STOj`DaCdx%YoNjIRGLyCVSgW4y8N8`(ZgQTZ3mJHSkX7 zIdkgMU@Bo$0Ae$M7Qs~Y#gF_#|2BCY-}_|2Qta;E55TS}8A7~gN6Hs|7!f+kA;bg# z|K!oeT|J1?v=ce+#TVG`#aHR&BWyM8#~SGh3+Zwl7sl4?>>$j6x;!$SYH6}KnpxNsdc)oYtmSpyDajWx9rNN$Yc6t9$P+1vld?b>^yqkZ; zEK!Yh4Tozmse37%0-`tsa!8~}Sl$<}N2F%N;i-P>1fiT1MqB7Gfw-t2zB5J@X171?dt&q3}2b+3w1 zjdpha`QoY12#7Bg)!atqdlX#XwfiFK;n-yxF#KkbVXaDpDUAXMFD{$ZmnypHBJUqN z+!EiVftL=)L7YHJrS~ZWjVP$9dXNNxnX^J`(qv+KQsO<|idPS&joguxnr1L9%8=20 z<7P|`s{trVr%X{K$OVn(tBe`4#xjLWhk*Y$*dFDd(HOh?;cQD@)*{hjy?q&OGFWZ~ zsc`P*^gS~}zf0fBtuX}3Mh*;l)mUI*<=&R7=13Al(=lkYQ3(2W6u)ttHzEK_0o~IE zn@&DcGR&PQ-}qR#_m6|@*~vmd676;eABHS?UU6T|qag&9n}~Yx`d+r<>BrwSF~=mf z6cG`vf`W9HbEjBeHY6l!m@QBK=XoJ$E>C`on+Zn}hzB(Pck4$5-6KR+vrW12i03*FG3 zE78|20xoJIQ#`9ZpqqNQT8l|V_ZUuMbjzJNzHSXO>YJGXgDJHFlLVabQc-n$SX>7ZSF{)`L5nCUl)Gd*w-RbBRHu zEW0Qofql*&^yE0hU^@!bQKN3>{+D4XeMn6DrI1{a-AvDybm1G;DHU474 z5bby4oT9U6ob(HiGuv@`20jlk3~cqdBpU`dU2#-O%md$?(B~`jk>AgPW&+Nz%_r zx+fw}|EnF*LNT0x;cGpBW(lzbO(=XO21b%)dx)A|ItcFU*YDR2)+?lF?K{^DZnfgTIQB88xE2}vQ;5#`Gy_-49GaXT{K&ZHVq6VyOJ%r&@IwHa&pYk zfm_GY59oC=+{dH9my@O2O+hQghmV9#!~*7(&}cerioOSlsL~6&K18BmCWa|jmDk$@ z`W^n3bdyL)dM8X|qC^-pA#&|+8&Tq;gKL?OOcttpGx+Q|C3^TjHJ(LTjfx{(ljDzL z@-O3r?<`*D^5W}D&v?GLdLe4lT9!fm;J5PH%}no5`u!Ada#glBS}N5Ns4l~PK1%i2 zu@XES3R$Vn=7R^f+o;z=(dBN%zxGGErJPI0qsN+dS1g|=cT14P@4~a8Ox)~uDX7EU z3*VnE26GJOphONBr*+t4vZf^rTD~4&@l`=FwhG1BDZDYXkw6JZei0s22vAspNBeK0 zet2)f=sXd!nm)H?|6!82N6g~s>jI7&oFB1@XuWTic?DwGB!1&1`ne9Jf6{hk0{Hh= z(`aVIn3viwPu9DE2q3mMju1QOB_O66dnMunWi*PlVE?wb?QghW8_S}nuY!}C)%Q14 z67GnC6azbfd=>BA>#Qav4?MSWQ7635XHQ`i6V%Ex+&xr!ptBXa!yI~qZ!B-tIokfIT|`T#6lqoG68HD#1an5m0b$Jt4`GizrnfTU?7t;t zrj6miq2VhQji-Wnpt(2jxOBEy{1ic=Tr)%Iy%;khI%Hw8iP82JqfdrBp?tO>l^t#yQ)l_2|ea$XIM&h z50Iclex@#--w2TSC%-OeN~-fp!EP&ZS|tE%mthzrH6Wxtfd^$2p>_1f>!B8u*PX?Q z<5r~MTZS24QwnM%&@F=S?u{1(r6^YEeGgYFb2ML)-<`Bw8AQ@%(D|?oK+bF9ZezBJ z22O&pMZ;Hs|8bE{qQ(L)A}0YjUIu+2%nIT^@sZa2PG2X$GZl41=W7000h2K8Ag8>$ zLY6Ka94C%D-+4A>(_Z&pzkZ2JK_F`msy0tm0MIRwVaw0Q9e$h7DKRv>`qP^G6R$4r z>JLbuZ2V#2^m_X?PZq;dXNp5Po!7NKVt2b(5BE=&FWM*q*rBR-F}#!YNmA^OJu>!R zMvkgzqU+3ll2{nH-@OE7sn`QM0dB$NhUxSS8Bgs94CDg-yfp`Hkl_Brt zY>5}qRhF@Kni?)B2qs;dQ7PP>1UtS~tx?tZVRwbOC@Tn8sXl(Y z%fJ3W@HrM#BbWMUh3h1Ksu#Sd zP7E86%GAol-yMB(wQ-F~2sRY4h8RWsh&Zosx}!*gBQx8MLndLoOc6gNft14lqvDFo zQ_{rI+x}PXTYHTKSbZNyu^yU*{u~}SwTUjw2l!{O_XR}{UfvQv<1c-QufSmk9QiqI z3ys{YBy~-kgX54t?MaREuU>O}?zPH?pyD;nOPnh&@!7{oO!vV*zEKN)o6I4RsSF55 zs>CuZfj7A>ELK8X$Q5az4)`rYuLNb~jxlaKlk`7k9A7h+=Qz5T)}eVs%+ z6lr{FOZVtw9x4vCho_ZfA*u%m?L1kAS~&6IN%3^zr%TK#Qdvu=pIf=lFP*klu$R%t zR=e#_ZRL=Rzr4G8rV$YuUI9?`g?OjFI4;nP8a;kY(o%~f-qB0Y1od0;gq5(w4U zwHiCU#F3fEKY~54E*sSq7p->=Y5VhUa=%1+?&?Y; zd`{J=wr{Zf8dY3chC{oOgckRm(PUAA^6RDb)3+r`PX0uxJ^iQ1*HOAVX10_$Bx$fD z>w4cieyP4ao;&n%FOO{B8(ihTH!$#zLrlxyZbdGv_kE!~SZhLY;`_f7f^)aR zji?n=b#kyK#)HHNWtk97yoEn75Z%pQ-~KCu&1~e}WHD3392^~>FGC$8Lr1NqHyvQ0 zXnD`B?aRpwrlJW9QX|WyZ}Q~VmlTUV7V)YBymNY{A{ie~yakAc`2^ufOh;g~LK|KX z80ZQ^UjLhrqKUTMkoamzpkPdbqG%<7KQ>yQt?;T+HLs6;5J>k$x6KsyW=ax{a$ytn zaKh)jK7OP9B?CtZumXFna{vHz<^bz)UTLx3jmvzNSU|fl1paRI3|X9?Nl_O1vw+vN z)Mhk1ISN5N7Ik|R2JgY5*Aqf3E9|}LmorG@@v7XP`b4O5R`E{|L#u5hEy`ZYY@`Tx zO~$y}f|8x?rb0lh{_rm^EdqYFR6Nb(|8Dl_8L;OjPUxy1H{^{wDq+cZp4)w8%Bk}H zXoDh0Noj3q+fhaUk-Jj}-rjblKH_-eYjr zL->Zge`JMt?D96XRRSfUlO&xw9|njeaae>3ysTtD`vf-bWzEW@^U`t=yhma;Y+r7? zzL+zFhgHO&qJdG-eJ_Uh=x}iEiyaq?t8P$1;wXVXr4^g~NotUcotjxz$kJAr8rBCA z@`YeBBbqM5W6^plM%$GmpY5%WzwPV@I7Y|lbJ||AkxbUhxg-I@N@jkxLa!knNXMpQ zwSr6eRUU!b(30p0ps?^b;gd#M>a$PlnpCCjOiCIC@l?TeR6d1Sj6UAm zyjSl8OJC2_YEL7O7&Z9R)>8N1O?_boGJ15EBvr#5%oh2#Y-xdB8LW_mvLJ?kyM5P) zM0)GrW)*#}$Q2Ca_f8KF6fz33ssG}S{hGp9NXi3MPy3=_$1v5Fu^>Z~C>lCKfZXyF^hjmH9c{Gn#6{uJGrW$$}OuA{;yV6HdNuWd@&5(AIMx$Ceo;+GH?L?#PB z6oq9vyf2f=iYV_uAA+}Uim6DWjAA_;{)FlyxOF7gF!&a7GvZLTOJJb1Y!4+T#VDvq z)3QWL6)liEoXNy{7@iLzP8rI+)@`T>9o|p!!AYqv^O_NY!{$4b{&H!(rg?V=mJq?X ztxNsUADMQ?n;bFnzqZn=7EeVNWnpBUy7v-}^T(Z#M$ju(n7PvS?tev>KaKf!+23*E zps&(QBycV53omI`F_(YP6y~NKMMnD3CdyEW(;YB&dj!GjUWTli|F;RdnM*EZ)-n~F zHC=Cz%72uI?kCX>jwQeiBfsG_A4WMx49jR(b;@sGfx zH~+iy)%LdvyHz|Bo&j7~{s-5PKilSHLCo@%v4W$zbc7Iv*~s}TkiLXHia{wVl5>T# zArUSe?!;km)#^GveK=kE>p}Y!5&Ec?YvOxh?eEyD6lgVWdg$pBDQ`F=lZHN&YP>cK zGMo=%h;x2-xbyYHdlDUy4M$#^8Ljk`6ea_5Snm9rJxyES8xnlM3Ts8SnJJqT%+aY| zB%_j=hs%KhQ;oe%;mLq2YDDl>R%?Od8(}eOW@|WQdiHPWAbiQcGL0Hkj~KiMo=y*dB?(r}xQ)7h zMJw>HSDv-#(DV-)_5ChermUpevNavF$r>?FYB~rJ9Y+e6Ul=EfciHdiwbPctV_*N!raU`3Y3V z@{G%_<81)&Lm-t3QXB#FGOO$J9=v*LnhO-MzomlR`UpS+SwQ2c2*X9z`#Iz z!TMgjAgM2q4nn*34K&dqBck-hDI*P*|6wuPxa;QKh%V~GoGq1)M7t*$Lb0_78fvVL z?<{C!m}0!*f`3CkiAg?HgD%kL0@0T-;M$nncY58+U+A}Z_3N=)X~33C-T{osVT^{x ztfGMKole%j!*u!X+jo@^&tUw)bgJW;U?F0>|J)?3dam(7%K7`VU zz6osW8$Du{>adcZ-Tdomh*)YG{=w2K7yycm44aAcv|8q^2kJC!~R2zz_)7 z?Wx$snUF8^J_XixJsQ^7EpX4^Q+w}n_Mxo#+_CT1K~tmoA^5QqiY$S|8?e8PM-To~ zWGhS~+Z28DAuAKxC!JKoO<|0bfF7*M&idO zB=Jay)SIdR-KcU0YB!aoTRh1MlAS_a7X+8-=z|Fii6D>!>HdCPmQNZ+tC{FwT;i8j z)1U2VvEN>95!_FKAm0_KX4NF>txY!D+rBpLPNlDWyf-h)DdB!i$ViHhc1%R-aafs2 zKPaLr`BwjSq20_-I2T-Tr{s9?L2Kfr&^z0GWR=0FXZB~29~#>#6!jQtfnw}H3Qk5q zgCxlIx^x1mMdmMI%F~^TTWG0frNP|ymEPauj2I-``EPeQVnw;0U}_hdfoqoh=Ow(PT9H*=u-uO;LGF7;l>EC|H61%kNxtehmR`q zuffDV$P}u8Q1J$7GR97y=<})lYpWzEzxE+`@rwY;y4Th)k^;@Q?6WF_NS%lZ5Txjp zS6bY+;wG+T8>Xx62hGlTE>spE(QLzJPscNiDtsEG6jmQcejKAp}>ll_Fh) zrDzeV71KP!g~woaAm2Jy%E9#fb(D+k=dhAm-vIXFpz}uDE9J!m_#{sFT{wrE-eBnP zr$o%TaF(xqmNz+^y%pnN?qooSoS}VW@Tfl9| zlm%-+{K0?6=TM4t6y`HTr2tji&{%@+;Q7#J-vg8U_Gc56b9|9wp1TteZtA;bM)rPY zW-sSQQD&7>^j{}N>vk(Z+WY;&W<7R41Mp^j`uG{CJV_X3n%aD)opGE%f<; z`>YIxS*@zhq8Ijig}+Pl?a0RYki3N*ojxD8xqo+)Q_@Ow1Np@ocvSrTF-OD2nL)ka z+cvCbke&G7xMNIAVgM}#iUfr^DGI_yJkeRCT}bLK+h%&!x<@Gwmv)2m=l_aJkwcJe zH2-`JVCaA?LB4biRDt|aU|Nj;iN>|TL?Vf+!|#7Ki$OE-otDX%Y549j=5&1OyDexc zW~vXnwEwN&9oBUD*^jP#zfQR&!My;*q=ywvekTz`fjg+o0s)INQ8brKAm5zUDRSGY znT~k?AqFe_kh=W}w;HUu-^6}cfQKbE@oBgG2}e?f5$vzM6N(Zcv0zUAtg(3S_<`Ia zg_O0Ai@5TNdMP<_PbyKHH-P$<{H=!o_w$4Jw`4kX2wViT4e%$)tI`VYfZEzH+Q~d!-U+D)kbfs{x+6Vt4NtRe}+GQ>_L1DAP&MdC`7hLo|Uyi5&hD<2R z|Nn0L(Zm)jSo|2MNGY9vGU!;qX=?jfq){!F?WY|O4>!Jya&(ErWu*kPcr!^FHU{P; zF_Di&#=|=2-Q{Xn)moL|S#{jyTl^zA+4)hVEx!k_%eOob`#86*>5t2 z2L&dLy#(?vh2%b=sln&vo(e4YtU#p`I52@Y=HJhRYkIj92m3dJ;eoC4frGaE#S$&| zyR7s6Z(n;1)D~-uHkl!{~D=Sr6pV;2yTCTj56| z?dVonzQ2qdo;4k!hN{Y>%3gGB-sv=iPo{@qiS4>E*Lzj8#$91%l00d zs=&oeK%j6PH#&?x3~(r~xb(CjZI$k5%4s6&wy}CFtkP+0^K=?E$orDf%zgh$(Q>iW zX<{;wBG`xN^ujo-uvH4>@bCYw6CEqzngsr%=w;z~wY!JiZvV)WJp1aW0Vnhy zA#;pNHdPX9>qE!YvxdzZovg~wuq^W4nBBAQa{G0igTxna;^!|4Q&3^)n+&iLX2 zZtI>#<_m{G>vi!BrU9^Klzph+3wZQRfbTM@viSuhDjK8KSnZr3ggTg_-#J=*HnNsW zdBC%nc4=RSViOH^fIP*?&aIFsZ~&pA26YD?%-%COHt8BhU)xH7yDQ9UMM9<9{*lKf zLAg62 z;gp#&m5|ClAY>#xq@Kz54HP|>L3-eE;wu^dJ1!P;HQny_F=4zBIQGXy{+0tMb!>|i zvn5|9P1LU$%g5CIPa23CIOXOBnW{fP*yR6+j)dGgGXOw74+>CL+nsFRa-n;cE$R3QdVu5Z5YNmr!xr~t~DZhflOT7BzhD`2*YGF;G*I)Q7}eQ_j>hpPzKyEF3u1dKQi z%I)qS!sJz;0~pZylk9@-JrMv{kx?E6W@aK31Sf|wjf&_XH3o!=H_2>G#yv<0;{q2m z>dp&s*=8;=q56SPeHW}X5dQ29&a@mGwA}GoSGEOr2&3#g zQai`_ZI2j-2i_6?5!rGTBVL(cx*4P46OndT3J?OE-cH8qMxRvEm^`g^Nsv@i1S7W0 zJ>4x5kk_}zn5=?*@GGT4zkbVldLN1sCekiP}#VEN0j+4YP!b``Pm#^KNfFMae zJdntDzaZsc9SF@rtoeVHy6=grP#s@y#sIpt4J%h3?Uh>T`+Zd=Gc}S#tKTcY(6+oK zhNJrT6=ZX}vAwS5%pa>_m}du&tl)^Jda5&ijtc55WJrZGka}S80xdR zudVFTOi-a!^Yt63E!srWzNuh`WQ0e+8Lw|$g0=G1GI6p%^mZ!J1D5gA*Hj~=tuQh0 zLv^t*x?@!6=DH2bo^EmR9jWqdV6(q2G4Uit|``DaB9BV)bQgmZ+HjQ7~Utvps>LNM%s_t zAV>-H4&9x|=~;fF3bes!T^UL$>lEYX5WPQ>iljxAWEA@|Kuhcm0@M}9#7P=vxC%Ir zmmE8koJt*=_Y0p>Sbz+I!SlZEx)S(p8GQ3Tj01K*4tR$f6> zl|gri=XhQ{HoZn1OX^>UDdt^4h#(h}q%ewH5U-l?gM3$+$iu&Brk)!h7{IzAY9p|T zBIfFTjYUGyievCl0<>Tt_PQ^M;_#8+Oh>B+i05cpCTzNRDMft+kUm|Zw}CkK$W7WF zzGSF9LHKWaAf5=xCU zmmmC+1O;HpFpbRFHPA?P^J6+9&*77Sr(Qr=@FqW@DoV2#`IF$9?_W%$IQ?K&fDA|K zD)a7~ThN)AX;rU^?{A>CaML=;k9A9_c&60mBmV^jA!SYHLM#8}Xg5A_n?NLz!os5C z--hB+d_Tv4cjCjt3;rY~$vojD!d6bSH7=X2=%Sh#p zNb~BGmlTs=8mDoPqSsM%Kc`-iG6lX0h!~Q2FNp0)9d>7u+q50uBpcR zaY^;S1USc;(Ua-(KBFCWVM)rMei7M8HRY6J)@T)wlqV&!n#@Hkry`#wZxYcaJTKO$ zAYIkGDrz2X`lHtx82P;C6OCr(m=$2c2wpEV}u;?-mIyxs}M7E}FrTZ4ifVW?Sa^)78k z&PsN+vX14CuaV}j4?m{J>C9=BRS*(*aRTGq1mD$JyDM`BfHF|~5O32@jNMfStEQ&z zX%9u%*u!F=m51GJ;36gh4JlaSZ>HVcD`%qnHD4pu*)^MDUZM!WcMzxi7AZog!|1@{ zEjR+j2C-xgEJGyKUc)EiAc@Nng_o1$Gg2wy$V+KYpgymmJmaF%AUc6rxb*OI&Ogw- zK?>#*5>xv!NJe*>#ZJSZ*Wgq=h{V2*`2gJ_o&W_8(IMtPYoge?;)do$2; zm>~VMQie{(^#T&f|${fQDXY*$f5(lzN zkkJ8Xw3MiVMz24mKzhSH{~G9EL1zU<=Sa1JH`GJHGk8ZE3A`LQ@4F*XX(edbFqVKw zi6X2aVjR(#^61Tg>{yVw9=#qH#)g!H-cCu;xA@*No^cU%6UJ+X^&Xq4My^_yt@ORH z6Lu>f(17Ip#sq<)g>Ben6xC=9^e(9E_Ecz><2=%0C0ZrZ;T0_eKiu8w57T7# zg$!wsUH))m@}N*}Bw0gi*kzQ^*R_;RoC@EjXrM2y`=4T36lwut1zf2TRr8S2Y4)jVjX1+QKi?-% zR%2fu5L<&*2k`=s;LY4G9Nkph6jd$mhZ@dRpmuZhj8XyB4i^gYlGlVZwsqf3wG?ti zjdPK?RT%^7+Pb^>B0RQ8AlJW-l0M3TO)zWe>AY7e-ai_GsjeN>}AvW*3^#*krFUcT~R&@A(TdzWlU!rm0 z0kP_ol;$NEXOFSg|LT%@9|tQ|wRh??5f?8xB{MiGNs6ZQvDJ z`HAIwgs_6+HAgJBf%IN~{Vx%#4#7w4TAOWU{@eS%uRz33L52{$6i2>Wi5jO%H!5Rz zAWEm9)4S8xf#vwum$9PSZ9cr*0%(YE#CD7M5sFgnk%~P}^4r%tUyWnUB}NHyUlNxC zF{v^{Fql{!toQW%{k_367+T_1eM#I2p`G}ok|abZHxt;>D^?+O|lN*z@p zP=|`_Q$?C?f!5XlAfXW6P(16W3>XNPwWJf=<{SA3wQ&1So`jO`jd|vq0s}FD90k4D zIH3M5Ka^D!Hz7pPgPM~D#Zo#sBUdXM`Hhq=T!W<9Vm=xDp$W(Hkdk#+vq744R(~*e z`XC&UWY8xc>bLkU{RO^u8?CSW9Yse&W)-f%!=SQ>p;;iT31sym?_C4Kz|1LGYn!Kq zKrSu~qw&KP7V1fziF1a(E5+#rbN0mzloK@rAb9yc0Ig~rM$-vnfU>M7(6%9>wdXRz z(G3MgBH?1*2%ypMg1~c9A2L&&W1+gAUu81UHz+tmK2s;aqx3EVk+aL~zGcSu8w!}E zDhx*viPbv$mU3Tj+28+kX6TBBO#_<_sK#m;_Mpe~I)|ba>fg=~p z)#iB?B0=mI72S>L*5OE~l&q$L3WqsbM!dwkqkR=ucNUsOZmg(2mb*f1)c>T$3m{CI zc*>3d!$id|1D_)L(R5TVDIQQ0aTg}B=ns9HP%O_@XgS-Xoh+NPc)f8`)WSf{R9k%p zPWOZ}Ml~5(pd9x<)y^^03_CBLVCxBuPMyzfcD4RL$wX4 zB4L9CE1nidOL<{KI_m2rst>FQIIOtz=~6-YF9c-{VyKj8(8XUXOJdVbdU#)^SyrQ0 z8`v?HQ*MSkd#MmjWDn_2AUNYI2De8lpsk{e%UawOCFLWa11 zStEg7S8)w#6+UB#LIy@(cUGg4RuBL7(8xtgcK3bsQ|p)s z!s!O+_>IQYD&M0xO4kE#b0E~B+2c5!5ExNZB>MWv99z$iVcUaE%X3KNw@i?K3h&KK zUv}oP+Zdlk>cj5W*f;?ta=3taG?7We)Fx8)>w4wA*$P%!I#f7VxWAs^pO27Y>w|%M z;E1-X->dPY`H&0Knr&Woe(%NEAJ(C=%GS^4CF+H5j5^7b0yV0IA;F6HN2~5v`b~rB z)+zc{vX%L2oAIQ?zE^EmidY1!8szw^-gguWnb*_O)xl=pwzPTvbmd4T@FO9=GbTS+ z`0IW|GX=E|zc@eue?YaP{haDnm?>h)^OGaG?Cs@Y${Ak{hndK_do=^3(?c$E;+p)o zN}_s%GN(^<{|kuB4KP$~>F`hn{NrjjDdv?D8LQk`AmMVSB^a(;0Wf`ty2mIgJtX{tv1;M@<0A_s@5PWdD{4uFx3g@n{Vm7N+MnzOi4Dg ztxbv2yk9OyE-gmo(QVpVfsm;+8+CNp`DMDUW!u$-%LUZ2|6W`S+Z?2D$l1qKk?z7G@7Rz@v&cq9zY^L6#)!1O&S zTPq}Psd*VR6~Ox$k+0N2=;d~Ss1j}=#NxTLu=U1?Wf%kN!9t%U(_ZNH(_#VOs1Qvq zVnv2!LzRb#Kz(-Gj@RSXUD)rnWd9V!EI=ncv8_}4sX|NkOIkIDuchJJV}1%JPIDx0 zfs4DoBQdTaNz9q?GV+00$Pv&A1lWh*mgq>56=r`A*prky3O*5AG@+!(Gc&Wa$iLuE z{{A$(N;qRvySyKVTfcj|rCveu=$ecJoXCI|QMhmj28S=<1M@(71blPQm+j;nII!OC z$K2;N1%R{?4ukS*kh6jB0#T)+bz#Txh|?Gq_{plS*63tRFqS=3C_hP4g&u*Ez;o4L zgO~@pmz4--6sJoMnx?F?S{QKD3hCF)$NdZ^I@O?~}y- zM)DZlY>-wfD-NN*_K|n80TGJxGWRmM{@}3uRhXV}oyAtt3aQ1&$7FUykl|(R$9_cu z#hYiXIQ07R-PKD`r`ED>)DICWuYG`4-0E2?K9S>14z%Joy`snb2bT6rL|ocbp;NZW z)1Jy!U9uQ`KI)F+k+sC(gUIG4TTrEsm{T_G87CM|!*RWYf2z>bC02UT9vZGPPC zTeJz#oXGxw&o-`iSo{LPhf`_xY0FCZ@bWX&pyfUHZW#%6MvafAv_U~Y3KZXBt;&3V zaa_XH>%}^GYgBnV$!X(>dWF(Y6EWIk?tna|KIX;B875 zRjcz+DOx0*Qn3I>F5f^$XDz^A4U*%)0d5byLi-0Hx_G)QuzzuFoJ@eW*;ybjNtDIW zH*NP=;Yro>|`dK*6)ZNB(S$j%2^fHbv&5X;!C;1wXKryfSKz@JGx zKfjq1Sz4je1}gK4|52H{1C{yH|EkO(2H8bMB5U(S50?FlY1C0=y`ON0xd65?^Tl$hCvv@J6uyd?Ig3aX;UM!CbQ z&=)mLcc7^FLy63^-Uv(i5I z`8ji_XtL35XKPEy+4M{Q{ns~8fpLhuT;si62mt%uM2c%%R0cet?{iP-S%V&^49s{g zHp|7;95B_y+V79QI?iG#k+QRV_Wj1hG$zR#Ye%VGlV6`MI~zF!!-zd9uSnfAi=n2O z8^qSXhw?|sNnyLx_#SA1lENeEL)0orFcgmZhJlrj({QK`a#Wzr!x`$yE(^e%ATPb& zk|E}zZ^9zKe9cQi`CEI4Ps6a65vBjGKmz9fsqH+YnuxYNJ|Q$s=m-Q*s(^}sBq&Oi zj#8ycM<9Yyl`bWKG(i-lNCatuN)rSX0Ru`CBs7&Gy@~YR19>NU?_Kwp~vxTvB5jT;S|${ybn)gy>j9& zpE?s%{omO1{C~0OrV)TmZ!-f3Y01T&=SRjKIt)^0(6jqKWugyUs6Ep^T+u9i*TmHI zK@Dd3Qt8OoBNX2F^R8{CqsK7M83|X>@MO$FCXvGbT>mIke#CK*#p;bO)-_te*x$x8HIzOjYcnX%^-DMY+KRP+DPPP;*#fAJh&QeSN z#q~SykMG_`VksQfMCC*Ro6%?T{s@_YSJvRO@=NUD-(k492g=u+X;Tk?q|+r9b{zs^VK;h&(^;5gU zZqMQozrSDOUXAtMujF1-V_l!zyg{@({vt8Yv03hdz%0m`Wuk$QGgB59tHS^+xH*9cFu5s#8D3TK5Ue()Fn@ zHc(K>oA}a@XlFZ*E;cU%&h@*mv^C;+A3e+r@AJh@Ovi`1X3@q zQSTD{QC5~1qpj07MVQ_6=JkjMURPaw#HY}!2Amet4eD&q6h%AqTB2DGL2qZpbcIl9BA0m@g21n2zc>B3UO15a4>L(&N9?N z3EdPju35bU%^7U274{%0HE=)fw5J+c1%-A1;7AMa%GSoYBUst8UWd_#?=I6Hj=6V_ z$BNy#Sw+kd+?n%EXsiw`cVP%y9?uNFH{$dywz3ODgA+6dEnA06W*7ohB71p1< z@>^O0Jl&C<^Ml)mg!A6k5j(;~PK%aZ8*uNC=jpm?CZJt)Dp|-{zo8;RaWj!p2)BhO z)xCGbB0z|IkWFRI3Fz50JPp_3#yA^P>C6D;4wId0fLRja-;pG%K4hj=a1dVN)##ln ze(Ajerj&*IGaz$&g9Yf-Xcvm^ZuB?d!mobCr~pUD^Bps9o_3!7@{}M@ol@xaMl8x) z>UhcapVMaQXK3(s{|A5YiXATint-{3JSu!Oj&eu`KQs*A6{laM&be_SCjJRohDl+Y z-<1B0^;!qcZaM2>gd%zTcA~do#Bfns{s~q*&@ryN;n8Dpa-;$~UPX3ZRk0#t%{qRG z)3BvwdX}W5d@14017O}z2;txO1u=t5Ag~0`Jm42J1DvDyFXsDZ{B)nIR00 zz_FmQ$RA6Uxi;@htdHA@WJ-De?rhJH6N;VS^VO~el9R71$6G;%{FE^3-Djr$*?(cH ztW$qrD|!M4CN}qJn5K@QiP4c!+G-wj+h4r$7m0~nOPZh%`+ zXrCff*36-|-xNOH|H0S8Vs_%**KbWiPqLt#NKs7+#`llfXmmk`Ak9G&4$ zxfSS^Oa0?9=N`8#RK2`)u)mwMv=?%)*S_|toPe_HiGS+~U(esaiGk;&tqqlILD;MX z+?7%nV<(s2x<*c;k@;esGH5llwk-S*Ii2Qd6DdIPx9(+A)Jy4d(EW%`I6uusU#YZ; zINgWweJx$;LVYvMnO6SUP~}ZpZz8S)1;1op|Mp@RQq9)+R`#KI7zYu@iLcuaQug4M zZDS+WxtsVPyO93bhg`YG*i5iFY?GoFVzF6hYqVW9jRVdE^;XLyEC&1vB z#tZQ774ODqFC;Q7L^4 z{C=7Y9DL@9{sN>i3iC^a4d@}Mp&)bki|H5YCwv{7o4H2U~vpiX`|C zVkT0yG1&j>&p6I%A6&KobCee;kc~ZCn;xge!tQ(|L*P*wO(zXEGamPnjhY`iOcUTY z(D>$uMG$U_PM&Uijbz>{({a1k$HZhKIP=WAB{}}PHUjqqbHsGN)kP*rYqMT@1vJr9 z80sPVY_f|JPgHiv9BrNpelwWKuc}1u6gqyXwaJV6ZYR3^yufn~nZdN_4`PR#y)e3n z@T`J@3E9zWS5s`8Zw;K?4rd-;y6&Vx?=PimbT#Fj+td6Vj^@m@rB?ZliTKb`zh1*D z*4kWkwX@Gq_%FX{`NFHK)jfL{V)(tp?=_{x4tTy%mDd^^8X964Uo6ogExuoRHuG)Y zM#;OFX=LfaXsD^pP?d>KK#-A(hHx#VhbB2W8A8I)&`~*GD!0MTu7G|$JML|rdv0K1(iS%a0GZ+I7-#E0dLMs&m`S`ME|3faM0t|7ptY? z3G~@%p$Cx?;{ed?zfo9>l-efafXu)Fm_nv>#1+U}Kv*QJ;Yx$%)dBui&}=<<%Rb|H z5?@cDnMX_a@kFtk3G=nnxjK2M#Gnn(uX4_%y8*dj^a@n|)+{2<3DC3%${ zT{ZR#P;aoja^)H=Tml%%rj9+wKeof!kJg2~efw5MMrNqW7Y(-t=!Krz_)5vJGM7Ri zru@fjK>?V_VDuTHC{tQ#jsDL+BV`abz*@}Vx?AdLF+rgHv8H9~%&pD-F;$@lL5fO6 zt~M=t7;HS7h>p}{==YEE)Y_7*b31^2r7nfMqV3RGk2UyEEm3xRjSN<(MnXzfOI-6lcd}d=uUt>8>m#@C zX)9CexkUv9tvJQt-Mgl;M}7P32i$6hNIPr2tWMTdb)*$tFuvp~0GR=|tF@}I=6x6T zeoJr_=)ZFwIkMtT{-&?Ak(U-HQ6*MrNi?vsYSZ^{u9Hfnf7=(MRmn#@cZ=e$BmsYs zB5h=%kp^o#J|?yY{5Dy!_oNfsG}@bw-I)i-_H^hg04sH=3dyxI`vdPm>vuhF7Cdz| zT{Q1vw8hWM)W*J#yqDAFz^tCz1{7J2B3vYB2OK8D>pe_FihI5s! zR<(ROQu$A)t2YD$(+z;Y)!(HsSmEk%2Bd!IW2WwUWln#E;=5bVt$#hD7!eRcpDun1h#*(}l%b%Ys4^-!7S zf}Rui&sDiz&+y?uzA_F5qhPR?Ckflm==6Yo`JoY);Ul`Gx>u6`AiqNr#`6E%-{^_Nubo~%Qf*Iw^aYZzhR7SYE~Qbo{4 zUq(OnOG9#{kb2+`FH+ybO!?aHzfzbelcuOm6dJyfhT} zLR)yT(>ePz*O|UYO*9zj%7#&T?{ch@)omgOVI!f5-dNXJnoh>9k~H8%&qPZ;jR<_n z@a&WLr@=Ri+nXt{4-Y)zr6ZIGQ&(Ly)GAF6v z2`T5!Q3Dq&DCk1BQm}y=i!^;jY31oL4gNskg}mLYL?z|8e|>ZQ{7jJdctdRI6S28| z#LNzY<sZFKX}X@RB$Lvl}Q0}s?2I2_yCB94Cd=TSGe;{&>9W=Rh7h^Xk8QgZ~=*u zaG|QR-|=)2;dXLVY+WtJ2<5nq(S!6@L4s#Xh#M*g^^^W$9+rNW7a0)fANb+KB`-TD zQ$FBc%~QJIJMe)%B-s9HnnbMDb{M+PDb@OyG_T*F7wuyZT zlHyy(i;q&-6kB85euAefrE&FHGFHtIKyzLX-X8^8+aWDEme&Oz>2N^KKt=@+Rj*8z z;i2EcoyWsUtEzsUZ#I#JWY;I(tQfWWWkBD1daA6{CUI~^s1vmH{r;+Zn%u|*@w-zbwZ8D3=GO{Cl(SQGg6wLHXVR1*WgIHA)Bz-D>CK9EP+hH?fZ$v~ zY3Ub(=7*n1q51lmi+lyj{7JnMwgmY_H-x^LY&Cl?<2QnJ^|}y2u@yObJQUOV*~2nM z%RlRcm1O{^xAVxj(%a1yzyCEExpvJ)8K6P?g0WNnM%PZTj>y!1{K*i({8TA4WH9H@ zqW`VS6Xv87xEvr_1ZCyq$fEmxv+(feRVsHo!$h7%@xvyNEH>#F2^;%Eu8b#EIBoE`d z;Qf;93Uv1gU-o05cYW6o!wc2Q^^xJ}&AO-t5S|chs z4OR){v1H}H%mp_Y|I!zeE2Cz+Y-6_F@ThCHIqO;A>`sDSTn5;& zZsha{Xq%PNS;`5Dk1{ z{#0}3cHT#Q@o(guq9UExJgr|7{iS_=om}Gc#S+L84wB*?csPF3?UcSghLf=+FRM#mHZDV)st!Lar#t( z2?CQ8EpJr0lBL>r9V4=vAx?BQx?GfCNcVJ#KgGpYq_hMqc8v{fUF6Gq9&ROZdBG`I{i+MNo@nf{(@+h!V>P_AS z-XZ&%K(*~=NmBs${wnRy=u4WH)-`&8HReVj^lecQqrc+;bfn_8-+$lrnX@thmMYU< z=Q2%8LJbYOfY0{`P)`#T6wGnfP*YQT9@YQO=agNS^Dodlt;qNL+l!8e0uey`h zwIhT>*~VQ$)a!d*1Pa^k;7Uw7s(S7*b6bXUm?O)YcJDC?Ze*wo0O6BoK-G#@NfLgNUajY82({ysv1klRmLsLu?)yWt-IRy*;rT%F-G;Ve-3+@oye?;f=4m& zwWof7(>PA$ph}#zZ|z34v;$MPnMY0PjR4e+AJItXQi@`#&vOR&;@FHZ;$UNOXrR&X zT&+9cnfE6?C{8pzP$hvm@c2D*>be>93+vUKsUs{buby?qgA>K@f(b1Dsrv;W$%w(9 zd3ZblOIW$@0Z~-=B1=%iNAPkU6vr5tx$tMs6iM55#iS>5KEV2_yU^_Q{Jbl4+VUMQ z+P4k37g`4>?ab(JFS}PSoTXKEbwHiJ<>s(4)G{7ES!M>8Jn z?*7J*1yYGfr6)TvBlVv(ohkjEwHD0@NB0+#E7mKPLbj?U?lRqJSZ1MTXJ_}G8$K;5 z$rKj4-y7=l%7Ok7KmNS;HZx@7w5odnI5_-P*cz-SJTuNk!TsA?8k-$YqJ`jf;2?5@ zs*wFasM>d7cSb)HpPV)`XZt##4H>&%ZE0f&-T5mgBqR>LWgbjkDnp41DIBfqC2Y!=%>uV_9dpQgp*wP< zokn)QAuFuf*zT;?c!MVf4!`3_VjTousR0@a1`nErAu)-Qhp#gLSIv#=Hp!3`1ok-4 zA8U^GOF)jA?PbPeNr$;`O22@t=i$}0i&&S$3UEJzL58b;0grl6kdsy)&BR0Bp|~e* zJ5*{P0TX9Ob8_`vtZ&Kz_j}cvNnzbULqo)_h$-Toa{v%vB(73D!MHpsGzE|B@2IT8 zis+|V9r*hWI!DD_#uC#HN%MjTWKiaD>eJ?ihU9Zz(Pc-HYuqmcJgDba)Ik&(AkaWRT^8%V`^PG z+AYqZmj-bp5(%UVUO<3{vcQ0fV&MDr^-15hm&rUHyaIJ{qZm{l8(r*;heZ_?6&-fC zM5qz>pI_xRugI$Tfs2U|`}<7X%Brw2f$m&H@EF3@Gc5U(8Mi^9?}C|4K%>cL>ysh- zm)38?Je%*uIe`@oLj6==6?S*ir_3`Nfg2o@_k9}#vfQqXdax?d($ca5SJPg=pP3u} zxRd!E0aH3 z9X#vQ^2PCoN?nc*x4ak}wBp>JHLJZ*R|kVz@ebxu!OilL7%)5ePtAb^DFUYyj@Z^c z$0Waui<<(;C++f1N9b@~_`=zhD(rCJT=Cgr%iE6;e$|ziLe_KnKG|X8FBc?WRi+ZI zl41LM(UxIcM6NnF#le928s`88I31&ofejol<2GA>piGHEV9u*apX^}r{OOKGgqUPNCJa(tlZA4Hw{iwTx#vVw71@Zxf{bu!5H9d2HKK$ahc64 z)mSj;OkJ~|X2gMMYk3L?m$Ohi-5D2o?ddj5w_gYuUuE2=yh$QAJ zX`%sNvOO?U2%BC(Dbk%ce(?(-MAY=*2Z;wWVWVLjN9go3+@&jwe)ERi2 z5))S|*GrSHDJK^3=Xn?K+DDo{*>R!4O>>^_8};8DSC?=J$#MZ&lIA8>m~y~Z6tvzX z{M#t(QhwanCo^$7#nCfgA?-;RR z5#L|!CyA_|2)#Jmtsz~F4WH;oaGut2$vT0>tgU5|d6o6XSGfbr|IEjK&u55v9M~I= z5=(QA;u|cnmV@FrnzRHOY%Lee_+hc=_kN zr~mOe^PMpcqo{mxS(r%e&3qCqM=13yKqq|j{G(r1R&ptWh-H6ZU)d-<UPVB7`fR=VkU zC@y6GnZliC7kpX`XS?E$*K{@%*ITjG57G(T=a#7gtDKKr^+1z}$}A`T>=SzlI{f(P z>60m(u(%Yz)yX%j2cmL*b{FmGmF>OBXTpC9P*L$`xvkd9sjYanQ?ZPGWB8Njbj!Ti zfAx0pW5@Xsg&DQm?N?g4glzk2o-I%Mv{@9sO-Xt@K_EZeFkRYj+@Qk!t=ask)$sq> zYEjBNP&e{l+rPW~Pdok(yL)C(4qW&8s2m67KwOg^3NareS#W>SE`vX(;D!C{KRaBv SX!3}%hqk(&T8WBX_A literal 50034 zcmbrmbyQVf_bv{CpoAE7N`rJAQjl&CknT8ubeDvH(nxm+2PC9CNOw0#bLj5wJm+rT zPk!G!e)o6BxciUI9>=}*S~J#Kb3MODVKte*omX(oEMM8SGfrRwn&7%jv zFBYFEU67F4`DG=h@Iz^k6emfO*!7;EKK3ULg0lCcf> zBYlE3U*RjXC_w9@_PZZuzaL)0fZLyU8PMT0QxzQgV_&@aY z=JLi@iO=u$G+InyxY-BR0rearpQ+?5WJ(htLRwk?2GcTOq7wrfR!|#aj2E9e)K|!x zAGfwODbl7#`Hu{jMf%?q>cSLkIW!@U&$sgh&rQ<@?76Vo??9Vn#k&HEV^HR9$2Hx- z(>o8LD%<`=;_hSbMy%fw9t|g8R8%{}i78Z$>!p?2r_dcx>}5QR#_Prps-Ge=#5eg~ z7QlR5{q8VU}tE$6nH zX5ivly}w-K^`HJ>DjoWq*2KhQvP9P+P+9oeOhV$*jR?mNj%#S-gF59b;Vwx8{Ql|w z^p91~Es6b^Djxrjt?1kO?(?p}PslhaF)2U2g#sf3M)lU97=LwJZ8c0waWlENBmiYM zlArgjC0BRnT&?qLmF@R8?FMlk_na)o-BA$*m6e{}Nl+uQTqU@f431$J)BUvHRr zoHrDlpJ0&-5nc=3Y(ePE{!x|04fgD@@^xU2!H-InlTei7J2{3J`=>FlH@u1X9KNa+ zxi~?aP1l{AVU`b<=s5`zzn2A>K_19~3Z}!N!o_1{)TtJ|Pq9_eut`936&6tz2!9mx zo$^<^>8Z&% z0V(I`to~y#`iI%Cdr4@#E58_X&EjHXS5~!D?DnBGX=fxaf_e z-v@0y%JRM0-pul2&1cdq^}c{vP>N4uHzVMJb5xh}?uK@D2Ly)Rj(gJ_s}FqK9P3%0 zL5sD1JaBxsH67wJV_nwhhPb~RPUb)<@qAkwXj?TKo{%EM-_E->bUkJ0*QtN?Y5!4) z8{+g3@$xlIs0Lrxik$uZ&AElF{YZ|a7JbsI&zE0_1UKT8g&h%B{W#-Ul4EOM~aY$MtB>=wu(a1-0h|2S))kKkg zy<6YI%y44bD>=PwS1CQ6UXM|6@2jI_EeJ=Xn<|vsZf^SOZL_aW!{%}@xxhKCU<4`u z=oN}OcrE1F7CNa7`~elMd?FSmrg&qTMCONs+T>)d%gey^{p!Voi={UN?Rk?WvxI>B z@ixD8ASU)g*`D~BwM2&FBqv8-AFmQ>+aOc42aQ2Z8$(H~4+cbn!m-FH$G-7=5`K@K z`|aBbDHbVT&y(+oqeU0{_8LzfKYr|x(SnH0%%t=}qRFHb51MnEwY9VgAL}XT`HV?G z6wIn$cO?VjpBa&`SzY`2(`7FrBI46K|9l?XQ3Zj+RV0r%gwJ~Lhi?*-qGLoiU5rrz^ zKiMCu#WrHrkx)GjeOw$#_4nFFiGfS>h+`$SHGh{+)hL;lN=rV91opB|$ruyzQ`tCP zA!5`a#vAbJ=Xbkh&0inAOjf1qWPuq`SdQd8lz3r{72{xcAVT|~>HeY~3ht*eD6vu( zlH-oyk^`+!JX1t{gWCFDPmi?k%U-4*;&w3yR-*@MW(|H zfB{3xg@)QutDCcJCyZA4aazwpZ^`*OS8+O60+jYaBC|FXetMpK67he$KRP%dJ}_Gw|g*G{&4CvDoRvIc-SH zv0*fn9=EpDDFJWB-#&3zxsnB$=>JH4Wbp2%mP)!wM2v-Q#W%%g!JhO+L&W@6Ed1d= z{l~KW;INvHJ29D=UovcGe#XcUq-FXU$7c}Ym7n%Al{HW~*YnyhFvl!3dhvt7;D%QV zk-Su|<2m2AYQOugG5FEw1lQ9DTPlK(@`ga*yvA=HN92wjqtC{yJqWuG zd93wcdljWjlho<~_g$FF&loq5^qgYIK5<3kkLcH*9bl-@Ha}G}&Fi+@nT`X|addjo zzTVrmitJmXa!Ajim88BPAqci+Yq-jh0qNXYQBlE+wkjK*9iG^vu{*A$(2)3ar6Us` zgsl1JPn7D<);OdEj;gAyk87%kdFh0knd*a(Y16tX{PdueGx!n=D#|n_wZ}muxv#%; zWhcChReXD`8#uZ(0XWdal7ve`9oOfo4GoJ&uBWFSLE3XI8AKYn z&Yod8}MAGh;K&sgvK+)?rDou0FUfa~pw3A-N+_W6md{ne4ND4x{olOAdrYDPv` zCH;V;AUD%H(M|IVde}Rjm&tb{&1m_GX*^u{j%z(Jwa%MM_DIR@ZSB-+x2wKr=j0gkb z(64Rwt;y%Mug0<2ci=7SkT6G)o~JAuL$8z&&zr-U%Kja?!on#^mwDHzYi#oXv&8u1 z++wpA3UC(PDlzzB<7K9!ZoOzd|PH7BAB*Y3jafFG# zHX5W4uRL~;f3w+czV7IVoewP3oGO>_it_e&mEt(rj@?6kTP-sch)ZPoUyA?stk~bv zT}&pVnxe~Ca7yc1YVsjBnf6*#(#`A)&aEs+$N&EJ^0wBdMewkJ#gS0`VtZrNon`jY2}Qj*~oHF-kc183}@ zH_Kh`$G+9B0+EaO+i$t66DL$cs6ljRgc<==`@zFJej#j`G!M5U;?nhqozk#}fN1G@ z_RC0>^3!NxK|ruSgO*RZ{apgq5}#w*7`6>h!^Wk^;?%TjqS`K@va-hsHV^nTB%mV( zy;8Wrvw|+sj?yC|DhaRDgPNB1#^3Tz7Hd<_R@pC-Q&5zV#>T}tKCXTfP^gtnh2I{G zU9tK-FDraBXQU%6!V!gzi4l)v*9~UrXA$it3+j0#C0H+?$Q&xb9Kv|wJyu~W65nMnP{NDOR22_?QYn~S)$?5x2$Lglc&sLm28^D&4*-Xb?2o589UUF7)Qjk7 zXc*Ar^+I`M^+21+B4=gRMt38`_dXGrKZbExbQJi_?pGa^$gONBuFfATL$hRIU&jc0{^%Zy-SMKEG~#@aeGi#B-1Rgr(3Om#rr6R3hSBwK=`8Y>ET#@)NlXp{k;?c z5&e6{3nHdpGWo_^oP0JC7d6)3_82iBthN_>us|Z!Ek|qbkF@A&1(aVxgk0RdVlVqc zeNRH^<5kahr+8bV>1(!xdd24$3S4!nY>0{yALLeh#JHHSVqGCaOmjF!9=j@lwzjdc zR!2V^D(cia(Mq|bAzf`mrR@Itm@C$Y^N3sI?g$0VsWlWuy{G15F0jt|@BJMZj(9PpII%sr5%yvUn$5i)Q3Z11f!X==!M{|yw zWIBw5W&^b0+&H6fJcEyaFS$>}$bHUK^4^(AtOeo-hwRW#i*F331#?oBynFX*VA(`saa#Ad^ryM*N2P>L=W+3?_J4$YP0^hcgE_g|IzoS=#P^)SUCrydGZ-`t`!v(&Q3E? zr2L#(ev$0pKHP{tuk%XHLCFXD(danjCwmpcsq)WhK$gE=5)CT#Ag1dfvuMT)SP)}` zzZIKUBgW-tss*ZSxtJSq%OTI52O1f}1SHWmzp;`(?ldI7pZ|UDMf?5Bf9`Lf$iU+t z_y6Zc|9gM`7d`!7H~K#h^8cf!|LaEof9hBoX6`>}oP}!v`g#NPcQ5Zu?LM2f@hb+@ z_Y&43NNB2n(@XcLsHl>h%naoPq>=YKGv@c=$|4=pmM_Pa39=xgJ}Kzqc2G5JV}mk6 z2du3HoG}wTf{e;Qe@$X2kmQBwNDMev5NSygXpE4<$W|H?7-sEi%b9s_i7XmMSU{QCV=itON4{pR~HEc>Y2Sr@+#SgWR51pOHt;p>N9isJa5 zGl|W$T;pS7f+Nt4(`#?xtl`bm>pSv$L;JibsES;_c_BtBc;vbAV@U2mL)mORO_AWG z;|+W{z4OM!0N)m)6L|g4Rz5dVAgL6fQDY`lyTV++Y>-;^CvQa7Oqcf0;$8YNd@I|& zvXh_6|LNk7Hh%YvJ}e}8>EH_Q^$(G;{QAo-N!8v&Q+Gw_Mc?zB^)$hg>F1emZQ;sW zWB+t?Cn9qHwqJ^o1oF-5vF2RyF2DPZj+oUz-3H27x>8~uz5a_JHG|z>|7u~)lIG5m zHkB8@8hn{v)Xa0@E>nOy=^1QMIybjK!Ns9Cb`c^1yI z55UD+FlzHG6r0d;{-_}0M+5gRsi!|v`&=vJ|0NHb4@aLiNUo4V4P-dmRp5qEXg26@ zz_e)&gc22{yAo#|V@?*KC614weU-vKe<=I6CYmo|>`5R7@v1{mA}D5bDTEbK|IoqsDq-U8;G482}dmFwSdBT;Ji9fOinxH{vMfxsMVBp$aL z!~DEBVw1g1DZfqnhrVymY$H_V?xA4k`UwIEx%hs|z`4s)uafS)>4E-jiYdValhbEw zf4zNuCwwp8jdN=fue!4?-Nbd}9+E)O?(1n>B)Iu=2C_dM%^La7x9iW!6krX4fL+du zz;RlI-n}>Rf}T3Ox@B5JGACp{e8>T|9*};%_uS$+0bs_L4dwcS!g#1dbiWSCPHFNODw;RfTzn%s- z@O>$`LK!wUCbAG{-Z&~*I^>u)eMM$qYL3{rOY6LrdvNlX&wKku!SkZL{k-{nwHVJ$ z`!=p(4pG%EEWXGVtQP7xKlmPNJzP0QgwyRZf!WLRkHHUrH4A|uzegq9zoDT9(w+5a zobeQ~5cD~=BaE|l-Oy-sPJUeM=WIprufc5@ra?U~W9;+B!z*m6qKTX1EQ>3CF}ZB` zygYK*)1cLSzT+LBISo4g*YKKFgA;Drp&UhM4*<`1#h>6Rl~lY@mzk);Qw{bw-~HPp zcYZKI%&mgbgMIgxZ)F-Kcle5_@Ny5rb~Ulp&mcj}MV5H(NoE1!j;bDx?nz5e#U5Tp zr+h#4T*Nh4e$GkoJl`Re+3wA*KU7}M7gk1c- zcOJ7<;`2l4{A2a*hiKTu0I;zS;G0AOE|y+iHwpWjN6YPj=p$j3o}I;!(Bn5y75NN7 z{*+wOxUM}R)w!dd<9D6rcGl9${AAoDr=QupmoW{m+6bDCem_PnnxJwHz?o$+`?G2y zNduISt4pp2U5-hVN0P|c_3iRU_cQy?`&15_PH<&nr-gZ&Ms(dC zRUdy z{=}t2*#rFP4&VH_E>3ZfD_H)K;y(iU&UqkYv#8y?LE@PGhKS(xNr}C11b?de_d8{a ztbv>+NR@yc+;`EE8kbm4ZH6q>*?*zVTzZAq={H}f5gft$VuS=04DnSQ*h z=wU@?M|SJ$AF~bbwgYLo%ksZhoHqY5XKC^Vb-GGiBVj3Agq2fOY32&%H<}~r5b^yp z6XDr+GQRi0_rfC+&=i)~$mC?xKs4+ky;>*#2M;;dFtqr3znKrFCO2O$eDFowyJzlA zl~K?gE2*kJAH*VMf67&B;$*wfkTUOewk4`%MkCeyJ(b7GOGxY3z_k;8e}gVdUYzWz z0wPkayKEyOJ8VzLwG?>aDF1}g*w^LJDB~gSVh%FJ+}i*2VN4O-V~ag*UJ9u4t&I{t zmAJ_}28sl`t?dhHjc<1w%{vOaKeaaRr-;@?9Kycs=iQd{-1=EG7;*uz3U_Bw=GM`7 zuOH6g*9gB<{Oeop|gA&7q9j(_s-s-1Zx|s0CV)htMQRh3dnZmc(q%_%N%}pjfu}}6bt~|LutG? z6J{P89icBg@_<9Ihjq(G#h0t|#iUFIHM>PIWyD?t`#j9 zkE^mq%qJ1&wvh_iN-rRkFTJ{gICr^A8xXF;$`!?*vwz z7U}!Gs8GT5Fkc9|?u>`CHEo4ZlIvyol{8<8xu$WLO2NIar!f=R{CrvAZJ#}u)QfVh zn4aoxj6EuV1~Ed~7|U$220dK^D24lvwl z@kh~$@r_acu2HMOY|y|*UfB|+IqP;XExH)ILRc7;p`$jR;yy&iD!K7!pjfxvzk4W~ zNGRPh=3 z#}0AIv^-lQst+X{-6kYT_~LpqOMHgmT>*O`D?q2wWW`WR$L6Tixoi&$-|n^Jh)7Tp z&QXN-?64#H#NYrBEOnM_0(?R1rAImpr!~S(~B8A)O<^d0*z{V~= z(Pz^x8<52wd-m$fiGmFoUc~)l;%pbLUuI$74*UiWm6XP&2hG>+=}UPZak`W|t3#AX zGq1nDIvn%lShs-Xdn2!zNnQ!7_Dk($nOKG@K1b3~I|YbodfAxl_^h#fWddfcr_}%> z1X7GcvHC^un6tZ|tyzKVH-GAFVrrkv>&^-Z!Y0AjfG&SgVM*ofu5nmyOa11^E`MLc zXGy)@mw;Kn=|~hi=o+p0Ace?H_q(}b*fGDy(aT{r-703orn}bb27q`b*w24gs2cyI zi}+W?@ay1f61y5>fFj(YerHzuNnL2W+5FP zIj90kI{8j};~FQxTN}Aq$2y@7PcyyOeFD2n_9?`2NUOcUJ8Yh0KzzZZ1X&5tZM z4;LuXU6Tq}Yf?N*p-3>}y7g1_y_!iSeo}FRq`-y%1KIqI<>_GjK4k()pQgi(dVDcY-{3`+k`8+T$x{+J;ZKW7!X|l{RkngHRSsF#nwN_{wVB^y9;}^}7VTjpe0*W% zqpzAXsvyhKcwjEw9Ged4!mrTKo$;^cNAhgVXX{CZIhL#)xZ^bDy=ax63YpyEzVg`4 z;A-Bj>TZS0C$ZA%n@*MLm(o6e@q)jP?x!iPGLS-2#$cnD?R}k`Oz6a*l7m{bqX%G1 z6yU&#!)Ao9&|nI+bcOlgm8-e|B^=1(Xp5Vx!8qlecZs_Rt~Ng>J_+tz3sad@IS$J` zUwf-DpxPT0&yqKsHClflhW4$9X-tdpp>p-zyJJe?$p0;d7M2BpPF!$n$hK(UcUXjnWecp`-PN0 zpaxHqg{03f=cFCy_0`KRk-Muvxu7pE(s=Q0TxOoA^_%Yz?$L8|6#3q}`@hop$q-vX z<>De%Xj)Tgzexw=+T2e2g|2jZZUo|pv|zbLh&7**@;j|`;s|?Wk;&-1Qq2vSA>GlD zg#FT9RU0DCkD8Zkon|3n%4@j7Blb96g;a07ciZ@{<#Y3kN*3*VztE_kjIlCz=15V* z3ZwjAzQIxbw&0tGT-)0XjX<#d>HKR9OqlB(99$iJ$;O2g64 zzrT2I_;o^oC4SMTaQU6$YunWl9Qy6K-uep}78itUJp)RAW@C3)17d**>q)7su!$d^ zZ2#HqxXhV2KNY-XLW+Bl-l|tB#|FC40mK~}k2e^zg^pIEUZdTAmcyYQLmvZ(XS=yv zjyZf*J(*Tc_INu+Qg7nok1x0^hDgOkuRQM0r)0;!mJ<^<-t;kD;n=myfo5Z?voF~9 zk+o%%MeeyT-aG+PAC7=?HYDDLPBGO*U+a`FX`%5$9DPS&{Xs(NjZV?Mf(Us7XTM2sDoia_DwXq2h z|C;g#^;Hg}@?cgPJq;F1eOL=@t($oSh7#pin7F^=VG+Nk`Vjj=gD8z67eGzz=nv4B zez~wq5!hsH0u(9Q^Dt^2IB&Uy~a1G@H%9-|nz@ zw)s=!mnF38wk&fit9BOkbFpWvlJ`$6L&skdBP-xSjd_(P-W_Oh8WP8;R@6E7!j{{L z-W@Yb@8cKgiF>64r1S+}h_hpIX1*<5A1_q1k|bfkeZ=CJpe?7QB(<6goF*mVhU}0! zw|$IAQ-|=Lst`8P(L&OZ!0A? zpO^QNLBy^@LPiFVQdB#}R6O0tDi+he7J46|v5G?k1TVUYZV{1_$s#6@)+phWY-5D_ z^Sk%Nr`NWdS#o<&3C-r=qD7f4eys>nDGoJ@pUS-R7>Zir5>Yokp!@f6er;aVH-|6OS<+z7!PFP_{iOin!#U-) zENZjR0N_7$sZ60}tH%u2DM}^GJ!?X}!PIzS`Cr^yWt9vjELABPcm|HRx&G_W;=L@M z@t#lHnrq7P_`88cyoj1_4oO~=PEHU(y!-LwY9XG+xs-F@CdV4K*ALx4vOoa=IYiSadV46MYs zh5y2k=139s5baY_c#a@i$XRUJ(nFRp`)dM;!eoTGa^CbR#y?m%JPf{eWy~wZn73eX zlF@(XRonn#GH+K=?)tei0wR@3>iV0AxR$@+(gzuu!x+v>Nntb^uZpZ5!8~%(gL%Y# z1-o{UZWni(wb{1+2B*E@W=W9*09#Nd4RY;u4^Jqmy9(Np6`Obit*WR5JpB-DAYUnd z_sUc8AH4iDzY8Y~e5xu}c>6lZdn!D2`=GvSazS`A$fmydgYUi%mFDZRm%9HZRSH?t z(pb~n^Wq607rVNty{T3Y_m+8@Qc^sub~!4ZTS?!?{KI%mow>s9O5>f(#_DZ^oqgv5 z>G&%(L1bA8CbL`(RTYZR+wpos0hpvIDawNmth_IJe$S~G$Z2c=zMLQ#>-T+iq#&(!y#tPr-^ALm=^@(ZqtJ>JNWiJ|L zssjHlP9%kf-2Ftj%EZ%Y=b}mNwW*m&!TVRaR*eL)lm>sYe88XP9FY&b)zl<;<5Bt` z3dGqv0ckVZK=MtQl5A7<-6~4K;Pwq_>gRP={<}>Y0i^3^(eh?gLy9(z zuK3cbvpl={s^P3RE41|c;lHRAcq;r|QY3ZSWnMgMS|3C}lDs?L(A0X^*!kXtta4&A z&q8??0L=gD!}`X#!p8244ZtY5!+t_m?o&i<-`vDNRuTpGcWaGpPUQ({J2}0X7$-l; zzx#(Ffycu2k_P=)uQlWveK>XsjEZLWx*+QoiP$1!*Q*Az`jDN65-M1BKk4*;BRBq+(sD(3e5WH-xg7SqI zuE_n{K1TYW=7(;u_~qr}ReU7UsBYVnUa6&8sN;)F1iCxSJh8K2DL&Mu#pvBL*qgp( zK6nZ)?9ITj!}K?%xR-=@Fw{4P`k;@jBu6Qj!p>ujHcPDG&0v%ps4J`iMd(Cd0`&BL zAkwhqC6t5k;ju`Z643y=92*olW>Br<94)ubM#BJs-pcSuDuYudi?iP5V^p0@Dl3WB zF(0`DNj-~LmAfzwlG%%M&u+EVqu8_+zRpoQvQt1WUFecwYeC^5a zNAuu?GNM6R?hr-G@q>W$_>c!^5a=5-wLYVJ2SO`4Dw1FQXa*4hhz-^kzsK0pgT@Co zGL2UQ;mm=lNS?y>tQtRm1WjF8u=0U-5c8tl41{?Eu#Y`m)Qg_U3K|IXDDN^7C2b)n za%+J;sD-Jd^3Dji=3_-x?NaFvpKIjA7V`t0tN?67K7bjo}@Seei1Z0w_aHraP9Xd z37bJA#HNLn0QWfCWlh2-d=eMFeeN5K!50W+Yd9mYcZ87^|3_9Giqh4#?r!*0^6V0FEh zzi3|G3x7)PS&hnHrr6)TZY$WX8mcC~b$zPb?pu;MA- zeKFrZF8KFrvJ>njk-NSIDDnW5=(O)AeZpPEmtN{wxeR%05+_+(Y|n|kfy~K);Xf`v zp5~G>WN$OJG~O~BB%v(uSWs*qHH6u920h*`g@47^n$SdX^7y@Vzk^yEJ8DuR!s^ey zeBsXf{TIEfh>zMJ5z>=;Wh6|96%H#)eLT5zSA?qWyhz^%+`MYr7>^sxQ3oE8KdQAjo2p(UnuWM76 z5S)l@l!*PYY+aK%;zm3-(zfq?i(_P<678;dALBk#cM!{tW5Fwty2PwMFN9v1&4O=} zCm6-MyKI1oq@}H3DoKGx88k~mhsD9|1lc!k$#2E zjm(I{Kx^Fcw=3rl+~eJ02ez-y%g$#hy+37w*Ej#T5Kj>H7Y8r9Z3)r7S~}IO#g~2= zsg?PaRL%172T9DNXyff|U%qGH}T zrJiN#@qX#SI92i}I`?taEuGErU)~`SkI)KKsn54TVkG%J)l@+V{hPh}ish=ezNfVk zJdBG5-#qV^NAVy#1_N&+H~t*irpS0t*TK18i%~o)$&$4TY+TE1p@VApb&~em8$FE~ zz0M?&lq^x@6t?U8zq?9B$ONirBhZg1G`HnpNC!|)o9i!_r%uuJ#p>S}HDBo&Z2mko z41b^KG4$vgvpdS4rbSr711Au9HXnHnPFTPwgb}H_y#QcrJW%a$`H{!z zyX>clO+Ws!>zy0S8~sh+Mt=O@6jCY05Fa(do~1SIk@=9)lHCt5Y3ZW!{Fi}|zh4g~ zj);XKyHSXYgHgV2y47cp^QWD1EhXz%#!|{$JWhHfn&{zbi{0)>-kEm;3Rm*v`^O#L z>VrU1$RF$@oRS7H0o@zs_vN{WN_9|8H67pvm-t=5*!7%D#jp)`dZX5VEI`d(TQU6Y zw#Rigxi%j!i${~7$a7%l$dvsENvnwG?k9@Qn3gLIjr&R3@KTCRjn8(}?M8o1Oy6^a zJyK2ohIrDTA#$$G(5CeimXJthKIzWT5(L(2aJ$KIw7nb_=(XE) ztUu#R>EaM+B4=J<(Q*ZKBjMAOVebvDtn1}oie^b3EPdVxC9d_acbeTYN)LZX?HIH0 z`ko$-h6SdEF*sny`tIZi+Y~yb-1@!$nY+89^Zn>rf3s)9&_R`W@-E~l<8%??Hm;dD z4Y9^df*+pdT>*9`3%Tz>2gn?65xf_eLaNGH78 zeD*Wr2+rmXl;JzjR&5ZoMiWII#e@E!&c5DW$}wXA9q9t^?!hVm0*AO%O#A6$L}Wz7 z-AXvyfU%G8eju++Sd03Vp0ioLQUGkqwp zzFcXqzxL%c<^|9rz1Xe26n=LcCLJNFd2(ZNs;aS%KEP`?jVys`u-v#Z0rwpjyoX}1dfoSPZ&5ObvssLOgn%sqXa1OfQt7L)bt zU~(scjIN2vp^Qw*#himwD8z?ca79l9cj@tIdN?F*MY3D?2P--1pME@G;hTJ9aqyOx zd~BHCRh~+IGbJ`-(YZ9;NoMxLOlngEGl^icACx)dF$vxe#6?`*sqKiS!KKz%eA-Ix9M~dcO?#F%!-TGsz8;DIot$xiQN1OW+{>JUk^O1xPSyTLFj@ zDtzM%BQU^Gw(3VcqL|5i{Q(1);o~}xkxracLSW#5oD|QjebN&{ZE_5h9MQl5{}9(A z#Iq=Uo^SCaCd|gVguV_*_2cf`$$&J@YyOos_T|3}JbV|yJXjtIwb{E<>1SMiINJFb zUh=vac3t823fEyNf_%5$j~kjD&NJ`flg@PnuLfJ5@t2zhEMzHf^ez-J@swQ#vj9`E zQyWx_C;&X|45*AdKU}2H*9VG6>6=|&18EiVN(PVAP+pr%mKkR0cH`3&b#!+6bNSqy z0mQ9^g$0{ljRR2fNo91r(y8UYNu}`=pMoMv9_ z=zP=+ma*WJs^9@41}3Kd9(@$_Co~Z0J;U4uq4Tvk6m+bY7G~MHzzpE*P8aeVZ7?YI z;PBw0mj1%+?K*2)U5ov#m9pH16%4E4%5he}p*ozh||de2^QnnuwQyNNnLU!}mI+#6f1*5W+hqA{mm>HKH(eY*y9XAetDN z;djIw6Je-^+Ye9c6s!O%C#AH8$0OZ#(-N4W2xOEP4&7hBR-fEPcFK#Lx^1tp(PGvh z5Arrlqg%9rmH*BSD>oM3d19&o6kiV*1N2bc{-o{?)|Iyk@u{g+UwV6b3iRu%UVdGd z1FEN=udF(f!z7?i(3vXi(6p`j|nIG$&ZbB$_bJtxY;nKFiXO&!3r)Q{%tIke| z!5eO_clfp)PS+WXu|A024?21G%=xlo%+i;bW5ATM1g-|h1L}t>tDKFjLlYC!SaHk zu3x6ok0{XLN@-t}eR=le5k@M_EqwFf%!MuUr#f~y!XL9SPfOs7#^7vT6X&D_;)BwM z3qN6WX$rDo&KtIPlsSqasPT`JmqXB$Zt*7VY=XOogmezb?5Q*9?kLh|;g*B)52b;s zTLOb7AVutmQ9?`+V0D+sfLi5bjisukb!^@_Bm$|gzg{I@si=(j(o40%TKN^IWMd^b z<@*y^erQ3Yu&Lc!l>!Dol|La9{MC1R*c_$&oGS+-o1=7H%lF9ll+I6&Mc zJ?lPdF=w=r%dH6cf}+~sN5ti1qn3_xDIrYdJK0P$O z!nk`RpQzZ8*H!>9i!mb=;C_6^-qH*~j>g;XWlfw;BLK*6-*7BtbkKBbN2u^q3n&9G z#syLjfo#k{M^=M|5VV%{{v`BfAfd%_GLUc$btHfFV@?SWHPSVGkDtniq_u!xrr z=XOdTepjmpC8%ZZF|}mTHn8LpJj=o;6VoK5eeT8f+9Jex_;Djsn?g#<-OjhFZ4~b~-i}*$BQf6in%x2G6H5cr&dIU!ru9JSW-3uc`KOB$Hbi`o4 zpVny##(6XTYk={2QP$Rsdp=)iXnQE;O_p^6x$_zvbIr3}{aN}p_ku#~-9nc4#XXR6 z&8!iE37Li(>+5D$9{}65AMl?K0JN6s!DDSukAdT5Na3eyUn)<8d@tjZV3bm9eJZQM zPrldd1iHrWJ~2dy2@UnChep~4HGv!gT=a2%dFI>JS4l7!Hq8MWW~VMtjdgpoYY)&J zc3&2o{X_=HP*l^^0-cQKO9hyA% zwGyeKtQkF%6*Q)^j`xE!`JRX@Hr0;P^=ZYh#oKm$(C=L%LIs$j`XpomE(Jg`9p0;V z+|~FXU7U9mxNm@BXz@}EeiG>@^2#HNf%MRGOI_o5OMM}?x#{Pf^2z=^e%nBPvX@ug zLm-QRJ9px(!s*5!V>4aBOr?FW$60afH4rgxpSUmjOg+CiWfL*YVyJ@NE%QW%X4?r~ z$bSkSF9I`-#1f@(e-hIs1bd}EYp14B2G?u3&r_E>*PLQnnehzrE@P}+*qdKp23-C z@>OLgiULzphJjTGh%v6pB3MW!;Xbzq4W~no++#6so&p80B#O?)-_fV!!ggRY+#&kUdGf>eS%Uu8^@1r|I`BgJ_(LxD1HDz~IgqYrieOiBctR4AUU=AaJ0wiI<5y)!NejkSAibGz2ryy2l{i(+ zllKp?^*bApHfhfuhCUl+TG8d~zd{)^RZQRP=RQuXO<2nFe3410$^O?tXaGkUo_En+ zkuG|@1rC&Xv>(iJr`aVFq{-4HxPPm>0QrTkD5v(nnELK`D%|#eGD;EILP~b_IJQHB zY_d0T5GRr?TNyd_-g_qFATzR8cE+*y&fe?%ZlBNdJl~)Hcsb`@*L~gBcwg_U#07o3 zZv&gEK>^Rri#sFv*#5A7J}#}q4fT7`5L}h~PpID(J^o}LO(aNRl`7vTG5{HXoHhjb zDSj4vzxn!46}hFxC|{`#gi!7g6-Kf1>^hV_q9T*!0_)wk>qJToDQaqx-vPO5A1t7^ zr7^Be9+7aoWo|{EE{3VLnvF-t#vX&3HsJgOA491f6hn6*e53q-i$!;C-NwpbH(7i8 zf|}&VJqYgP9eIEQ`0j2C`xtDQF0>BpQ11Ft!yj;+cujwmwQ~4dn#?6p=Jp7`tdnmH zLAjo9yg7Qc5gXA&FODW1=pX5`r2gw{05dCqIgOpV8;RE~sEj}!q126Q8SdTd;;hFgtLuIjR?BobQ z%P~^#vd|io`6^i2g(E3Dn}L$*bxWDUM^Fny;6}Lkal=S07fz*rtE6Kp2v@TY6m@PT zrkhdi)6RDx3slRQ3_XO+0u%7{ZW9D`X=ikeo;qlaQy5{h>^#Td_c(Vra5Fb&ddR$Z z!2RW`rpoMRZU%w~WroAbBtoCAm;`xjT5&et zBJ(@n`VD2w(?|NP{EBHMsV~vcJ#yN02Bpuk+su#bf*y1K@78=+vXwniLL{=@URE<9 zJwlcp@bm=DT#0LxZPDetQBsZ!;cCLI4>E_h=w*;a;|N#|V61$h zwESMUfkh~WVVkQvQm8jP^ipcTk5K$Gx4!(N-dQiSqD}LpZDYtG$x^wo7)kO2UBod5 z;_EKC^v~N^jLjpraB;)O$>0>VcSqjPE9L^DC$VI=#^JdZsI9(|eDW6tO#WtWD{|`K zSJfQxA+LgiDY!UQ(lO?~>sIA{ru{Gw8Xys|lK6szNg>^h#X%=G2E32M{2#g*ns;6| zb^_crhaR!aqLp>tr?;dM(fcm%LUUcsvA+kq8{2+^_ET6cd}6+vW#9iI>;m;#?3O?C zf49?pCF`nmyB7%Aj<_<9gEAMjs8=5+neD>u_U?lqiHm@s7iqqPpPsU6T~9{A7J3o~ zt?JF@PZGFD=-iwOH>Y1+2<-cqZ>w;eFdy5lj^g*%^&Ee@-d2`)hPe9|9dA}veZ{Se zcx!Mk!##{G7oOjm*w;McZ_^RNxUQGw0*?AF!(^tT=Y zbYtJWzclwr7rv5n_-}j%Fj_QMc)mfO2KkD~gUdI?Tq#1y{M$Z#ZT8BDmde+wsoZXz zS@w3qZFiXNm~`F51^$h5yjxG4#2Mt_VPk2m0##PbJ?-r~X+@NVA+tqauUg!@V#V=< zDE~5?im!HC;@5A4|Je6F-ly!p=1URzV$(lhNbMYi9yMbXAAU?LmM3Umg07IZQ!_yO zbHub=n=aZD3l<)d^E(7>?OZQ?Yi7B*;&xm~?)0PHm{|Evviv8nYc`LOhVCPM{&ipY8Mjc^L|o1w-}dlynf zl`Q?WSW**zs-;wDe7Wam{kk*y0l;S=?`(6cF{PXS^wl16?TW88xUxkQ5OE&cYW-e zCWxeLCu_enGKpvXp#3}IYvyBOJYHtyRD8Gyu%Tl6WDt~?SXk?P(vnT-KJz!kNY%uL z8CvYoqD_R)hX~GButQ!(J!HFE$NAY1Vs@t{EtVls@7<#&Ntpe=D}RRa~A2lZvw=frSbA4w|mvzt0<|=K;U3ekPTNh0QNNK=acpJ-3ZP; z(veffS3I^QJ?ye?UZr28$?n=rDE$6=z4WZd{JQ=OC^K!7BQ5e);Jk2u$3uw#H@G}r zN`37mj%LxfHL=MD4RpMPB#6+#H9h6Mw|3BfDH~4GpaOsf9 zinFX1OF(ee7Xr$|bloJQf~*Eqp%LG`YF_@>C4uBOzg_2k!Mo!%PJA}*I=wZnA00x_ zQE`$d^7kZf1lwZYP-D-N{{E>fw4|d%E2#~q8hZAP`zr@^xijL;mUq^_qvJz0m(+ zQW6Ix^mK+@lWN)5T_4AUhpbJD!_gDk1(P&X;Z9LG@zswnY{}DJq>aCiJzQApSy*N6 z@xPa)T@-GC`rSB#glp>?kdcr)6{)@RN=60^aI3hRY&sAJKSg^^#d6`FWGgE>y=zna zY`%s=b+MG0gRZB$|KHdL1}3C>kS7$u97&rTAd2;d6gE-ujsq~RX_Y)`7yG%}eD9~* z(L|MPT2pOeY%j)p?JRR$=(q&f z0iHKo(!*eO19sw1B6`o)O?3;5C?lXc^lPj=e;SNV|C8gAIiM@xVLL!$G}y&7faFn( z;aS;-p;QdV_MEIMr|w)j(@W_xU7u;{Osz#%EqykY9xN&zxXbmIz&5 zSjFr`sSR@-!2^4b{`2|QoUa%^=usr9Vch=j{0=5zSaT82lF$Yyj8n7A5A9TEv+Q`= zPvdh+u=}R(x>C;e*U_eB{Wtw~MmR#b+>Ptvc9FrBB#tpNGqa&otcFcv@6W`6{m!u& zc28=w^Chh5L$Yl`{;Bn6QCFe(|IJQ&F(54&eH)J81vxl_nBL_a-WZ9_Ky8Ktc@JBs zQ9_xf4=4ze+36eQYrWYqz1Y~Whu#0lQTBV)vr&Vk^%o5}!?5CE2en6V3wB~2xs)zJ zE~)|e>e<*8Z;$m=^?QvqK_Z2shlkddaD{KoKk!Jmr)nFYW?WPT-Mae zZrlAH_>5sy3;&k+X^bQPe{(L4P5Bu7(jIufVtUu3sk4epP#LuSo~q9q`YW?UB@EA> zxSvVHR8su+ki%B0c<%mcw1hgqu(bDSd)W2H?X>V|COHqx=z1##EaFP#sQ;U)GQNIc zfLh|D#+Vgbnv5Zs>t<>W#TWQ^XI5g7G@#~%iQ(}k_hkP;)mh(vR(_LzQ-i3ZFrcM! zv;TY`&fO?a_?!F107GU1O{Z345$)Wbl;*vTD5^XK<-PwLY}g7^`x^ZJ?oyDdIcf{@ zLyf*68_Jn>q|swsbwdpr*k5}>J{t`wVe_q#<`YIO{@UO6-?H=|{V4&lBe_ zEtHNH|GS<}u$~8=WzK@a1TDryl8YB~cd7&TG$Iwf+1WJS7pObJh23o1zNTncTwZ~@ zsVv{%bGsbwi5~a)lN4laLtb1H7bp8z6K0=)#H57cgPL%w?|&sXU_$~F%}ti|Xu5iI z9+au+X<8?4wH{1O9VNM&_^GfHSKq!Vn&9yVQ}vr`==-E?Y3Jt(fI#>%&fWk*Id5pz*R#xhQ3I%n5Y;lq*HoTb0tYwDy%6qQ7oj*viF1xN*-(QVC*H%&y7e&2 z`v$@i`3Q>tFw0%RR~J&sbJyj-HlY*ObG(j3Uohe^V)1x=mldyya+yBD);B0Nbs##J zDV2&wzW%+ZS4JK$f12juX`(KvG^Pp?)1@1OHfv^;73-3#9N-d=HSTqev+YJ+amGP) z=X{}V=HkK#`+>0OD>K2ViOGW*g!2(7%`w8Lk5#y4v`1l3WqH4G(}Q?(Bps~N{3zEQ z*ltSnZ^5q;9*L>4iT~I{bLiOgaWQ=FKT7#{~E}JG-9}{3!H44qcD(g40I11 zg>g5_zamaPsN;MO8YUo>p4eYeA~54JamSy>)?FG@ke=gsx959vP)o*!a8P47_L%n~ z*B36l9uB&(>tH14gmYFjCiQ!=ZpX)_J*bco8utLxTc^O_YFP1f;=_vv^XoY_xG=#W z)PXp5I!8%yJIZ^7G>H6G92;SMgO^wsE)>h>F>EeCVdmMC`p??D#|-TgWF@(%=Z3vJ zOJN5X>2bZnLdIjG1zP|ol{OuDMa+nJP0D;U<7!pu` zkQz8f;zglmQ_RxJ;X~0%)>0k0@2!OT9ZDzf7is*E`@8YKy*TBH@@7xkLSjmSN!sdB z#^BI?>;Em}Tb~`tQf%~^Ej{bKO;d`^MI1lgCi#Xkw%w1_N2={vxpkk*S7=H zhDCk}CE6)Wa~EHU?o)2(Rx}RgDWj>b_UXMNL;S$P^dNV$yiZv6D*^UpUwj9}Zy%V1 zYB{-2t7s@0Maq3?F4WPpV_m2lvOWw|2Y{hIOu5MHpha5&x66j|%J$*)cXWNa0Fxl3l5eqH#?$eg6VULM3HWoo(4VuE&~a z9@MOI<-Hvdaj@2HkBi!@Cxp$1j+4L9MCp~x^-!L7^dt2}@V<-H2@=13kzU|wW zBQ9s>54=8o&U zqMnzhfG`s<8=wF*1QcOQzj`H*EvN^=dDerOZI#wz4}WujVg$8|m9% zhZ%I&Rpz-b@z2}%4PzxZ-cC5_M6Hu(B^#dYIpe7g?FS#Wtuvb*rbGXz4T_L$z1F1F zTs{>{9y4=Vb^j{$RLo7j$6~16*>Epf07`?Qq6JOB#t7rhhGSU9D>g(R@$TNuWb+T8 z^ZXq5SX8tQaB64%mXefdkdXK`R#YY~f4n`d=N4!L3a5cWptmJr*Q<@TQKzjJP7!tX zJWt50dOzL$EpYNLxpQ34a^d*ul&}d3Kokt7L5`E%17v4j0usj~jSzOk$DYW~q9>Im z&Ge10WHfZbjIYVt9?ZlreH1mDe=)1H_JZ!5&zWcX_gE(zb<%aR_?CW=r?_7|Hhon~ z*1}PDm{&U|Q@F^kShUL z7yxAIEnOQ&fbkl&^{P8JcaWcho}T{kWAEn+GLKjpVZ)7HUJZ%Xj8()0oETgTh zE${}S$R>wk`8qVQ1o8yU`v5jH%nGk0qy1aa@Az}&F&b)Ue@-I^C(txQY-gMz*>A~)wdZ2%!s5V?&}wp-s{?#ba{X3m54Xp+8wo=n*fy%u4R+RP{#yaoj9 z%I%==B4W%Qls-Q{;QR0k!|=rAaBw3J{xbG2jmCg_Vw%@^P+ue~HRkk=nM3}-3W&5V zpz{Rp5>&9ON7xnUGZV8v*Jt8%d%?LzaPAhV8J= zP1Yu|U#rC@1luKgX1sZm%WYrvn;9XI*S3cNIa&}~_Y+$zN)AyS7IO$E`yS?2aDD4sjLitl(Xpft6)K)ot z<_G}G5j!4V1j+j=KustF(q~4g@|;v}DvaWwk5ju>00@V92HcV#CpMP_d8rGTY%$Mz zyvPBVOs^}mmYO5si7v?Da=n`)<+GU*dMQ%>Vd#3lhYJ9HKv=iI1dKhs&{ltWu~WTx z40uN_wrmA$raCpSpGI`%Dkd4a%;T`+fvUf9OI~A;N7r{eP!tqD_+3utd1_Jsr=KF> z`Y==PYLhGwpcv0>(i|creY&!^+vH2iMA+mLmQ-^EW>d@Ux~B_g${Kyx<3+lBT!Y7YE!C zQ}y(z*^fzCh0&GwYUD(uzeJ^>U#ZowB{p(DpJfq*LfZG++>fT8C!hm$ntm%c>!f|Q z?ZrRehn5$|_oDVp83xZ?aQ#dO1*3974ZxdXq^vm1lv_K(7Nv;cni6jV?-(ft$SYNL}>nW3~gq^lpDRT3O@ zVe6Uk&DpZ^a1K^-d#~gHTYy*lZ@gG;v=qsK(dBHjZy>YF^0Z3k(Ox$bKJLYZmtWKM z^{g>BSJEq(9;{`%3ZQ+q0+aY{6l|G3lWo<)(4b91zjkdlc*(a8xN4S&t0_}Q3k~GY ze4~^_g6H4BRU@eTJr&3KJGMTHVJp~R`Nrh+Dh zazaG~Kb8A_7xN4Ad3=K!IkNo&%wcDe!H_Vd)H8L?iKKPJu=47+HMIqRe#ipH4pPIB z->PX(K~i{GcbnxvnG8m9N9dZi&9JnShCe?^`CaQ%+K4PE0XjUnfv!21>W`y0=O3N+ zjhm2sWjTZFNf#mP1p}0ZRTvr_LMj~;r?`Ir-5j|*5^Yg3+6mO9I#^v{%y@Z__M>dK z$LMSO8Vqn%Z9$*RgB#oOsL8XpvNyYFR}dmCK#8wOi9@7P%J+)auR_YNV)Q=gx}sIk z=g;S)b|F+eZ(p*IzG>@tAVbqs39{f(ygB>J-DmDz1%%IUH^l@0qyxNduqf=uPuVo{ zB|Y=+j@6h0!lBG2OAxD$Dbx@)PD)vNlsZB0uT`Q+ARCO^woX2G@ogbO#BqaYeY}9A zK1hVcdCP^Z>7ju2F6NtVf4l*^shotsPPV3(mUv|Ezu!?x=OR19#48 zGd{Bj4nKB4EalOZB~BsBJqR$*C{Dp2y5sTk@hXO z*AG^C$f60ja4ik|hYMshZndC||1hrDL_whWPUHg4Bvt1|bpMmy<^hqgrOC7S{-1FBy5F)$AS z0{j^ES7*f^U6!lQo~#cIeKnuVv!$bhwRA}5X?@e=pubb;KKyApM(gvd=DhYCQ|)le zHu7|bP4l$!$kvg}cqe1k-oYmgOTdF*>^ppeTGC4-*!-b3Eq*zjD3GbAI2NM8cUpT( z$FrwVd7m)tLG-l>bV;VqlOrF+O&J@i%DAf4jhmvhe?TYv>{KtK+e*v|3Gt+wIrd;! zu(Ux61}yfWuXAv$s{*Ld@&js1D}y|2(Cu>7T~=>fr)5aJ00ibxpF-m>>!4H)2w8}BFeCAu}x*$i?{<4 zaHRytDI%Li<$=x{e`IHEXcB`I!mOOsVfMg6Z_j--_jEH26mLDU_VcwOqZ$Oc&3)fS-;gUW z-ymwN&ba9oQow5b^*XUC>X)mlXJ99eRnaXYvK)AI7`gO3BSYGk>TR(AS|`fYe9Pgu zm5a-PKC!+Y!e~Rvw)5A-lw}^uD9b2YPu`c#bF;de_cig=vYxhKzQnbx489~ftoe<5 zBGCw}w*K!N*W|0qpQ%+e~cfIXGj_GI^-oqTO|vZq2BgZj_fBO%6@#Q1&UXuL8Hotlq1OL^Zbxv*%n z^kWFRNmC6!G~whFz!%gYoM$<|(&9fcXTl|y^BZ?=2#q)ghy3vDR9K@GNe@}W49I^Y zWSe{gPXkR{7&b9fQN{^H52~_A@;*FR(GYUf!_0vn!WImd+Pp7#oeM|wyK&#)H_CvH z1aYSNUn|tA`IzSN;BVC-fZU_vPf-wIp9FT=-Gsb{uCE>aZA4$C{tClqd9*^ac^$jA zkzZ&x9k~6Ea2pxW?R(9Vi0K`wve;a2(r_g)tU?{6RSwdijFh5Y=dL{|e9-&$R+oAi zm6P|z;Dm&Ul!#uhPr3Ej?`@Wi=xoD`xyMUtZY*O3U=;(se%&5TP)jyA@~eK$M*q$& z#)lP~kh;xreC=^#G5qqD)P(k-;&C7A0(IgA|2~Nz7HV}!&^aS!Hl4(=l&U%wS)ftL zVTmSsVFI*uK`tH7e7u)CFN*Vb!3~8^Cy^|WNl|S}`Mpkcl$#)s7$|ZH{moSs;(Yj> zSV`0`vjSe6IU@FuBJPeL#`tQ1od+GDZ5i2-+?G*6!S&j13t`7v0K||60A8AM;F;Ju zG)D1wJYG@i>&qM5XyJuE@Zi zZa3w_Ba@+5^#Xitie(3BfGIXPhm5o-1^NZ{cHREK^kB9$UvlNtx-+;=!jQ_Z$+$fq z*H0CK>(`_X8RBDktmmB8{7M7T{aw9CeNZa~OX@L#uoYW$H{T)CKOCn)LT33{G_yuz zG{LO^fM1NH$RpAhnx5T{x22BtLYx|&kdn-H=)8|}*RQo!e)ij*aiG2WyS!XrYY}8PVMTYuo23Tr0y|rt zeRU02VW4mNwnEn0s~ly^fsp%nEq48eDB{w2g%q?T_}OOx^=Diy-+a!{#3+;6=UKuH zfjU8+uN9%`iJd*_#lJKe{|!K|B+2?UxuGcWS9*TrZ%q(30{a8W^~x)wxPp{NgT=`3 zZepthE{?1yF>rE?6LIJb25WfYyJ?@3Ml&YB)Ef zJ{&Z`C`|N!w7SqJ?`1Pjx?7j=U8uz}=({1L5E+yKza{b>bGs90?NdQ}s^Ij9+jQ=M zchUzVca75A_wn{wy83s_oOx$ zo+CLJ14a5YD(%p(pB=v}xVA zX{N;)tRtbcqOUhc<9P7B)}r&_Q%tkSGE%P)d{mQ&9QM0{tnEUZ7TO>)AxN=^GE;YvHp9v<8vPx6+%w`rk*l-4a3;~WxgW+o;s*3HEVq)mw zzzau@3dNWi&Or+iK0dY4fP@?T>_aWCq;3tip2%SV{M7rd(G2y+6V}sB;N-C(C$d|1nms z9-tpzE)7@q|AgNvM5^leyvEmuM%dYOz*3|4A6=63P548W@Hz|dM z%W=Znm0iwLm)(s;lZN?cB}O!#72{k2J!jHBqgO))mX0#|JqPAzHvYEZp*LgZ1RJeJ zG(X#@EzaUAy48hC%!-^|%+}i*^@P<)q&5N1oBBqZ;rd-2y`ZX~lZJe3-s{*rPD&Az zs9Tdu=U{lw_xOlxd!q8$OaCF3@j6M&YWz+RPnxN=Bf(vx{ITueAlJ|(Xe*6ldFytf z{PP5PB!k$MK02_aU0UfV{*jy|W>VtuSebXWFdJ5}7x zl4kinLwZjM0TnNH)YCCt?HT2ft?Chr4ut8A4SkCQMhUK6Ef-2*%F#? z$HyraqRoelxnp|ipGp(pmeVN-=L=?h4!GYNDCJ-q<``UEaeCeIa_@mcD~M92ysq(E zCP=bc!z#?-Pqm_h#yh)0|&CS5>? zM0%pdZsTrN#pC4@kD^CCK33$1lFxK5N56|%5eq~pn%oGdphp2)(&sZEnAw3yypCRF zsBP24Uz6F(l6b9MB^zzD9>Z@XL(ipI+t269yZvZi)~02>W|i0X=@o4I0J&ZRIlBqa z@t<#=*niAJ5E{yY>AMocO+5O-#_@)9fwPmy>xu0=|GwH zRc6C;^8GhQo@0cE$9^be;3q>+ZW*Q`5PS6FhQJKg-hm$Bdm> zaJkCe&rKg|XzWL?p2REMY%oWo1vlky$`RvIrdeFz7$T6YYUv)1C5As+p9MhA178I@ zsGSe*fmT3=`0S zAW}>bAq$?p>0x%!KNtGP(4N-N8?w_G$stH=gz_3XJ_n3dm}>JC!PtKy{`X&3J3;d5TN z>Xf(Fu;Rb-a#m`Jd@Le5cFHkg!KMR5Blm6#u^8Dm8As<8iHN~)v%F(Aj}kWnC~DT? zwcG6=%OVFu@_Y@#1|9DigF-ehSMB=UN0Fc~11$U%|_^_<|c@JybCiVHppK!)bXb@M!>EvF(ZJ${*W0bKesY`c*Sr;z8bjl39 z>E$4D#5FxjrvleZL}Vtm#u|5h|IQLV{mr(t(_Pc-&a)?pr*jvYVb#LDnH^C}%2x+G zf}0HX5fR4+nC)eVENIpA^mQmPcjQoH@YjDwlJSWkV5H911D3!MHs!ts67*AiQ?8Tx zLM%;u>ZMif#=TDbas!6sv$19I2OPy9xOCZj+9Kss4wvNBxnRXoPT-_|4C~4jnzbF( zW{QGsKP{PDW9oG7Q#?5%j9Yx-k*r5k_5R<@pBq$zFhr?Tac{8tO(-V-_6@FDxE$vM z$HzgT02dpUYTIYpj{>96*}>TrfBO!uQvS2`b4@WJxLN5=CWm;+R6=q_UAS9FD&@0O z^4z{)$OPwpzq!Qz$|d@f$colV@|As zaU58i_V3TvQ%3NF6l?mcT`qdwetQOwD?tt>X`95ySoSs~I z2NZxa0nVdHg7lshLZ8T9u*nQj>2U-fIH|`y^UdtV){u6c&hK9{RY`c?KnpnmRZ*6i zJ>eEocpX`A-vH8KZI5$+_6Fot2YxrZge48J^1|?Iwp`A`cR-zO&B@XH{fBgR$7BO`k$lZtIM+*M_7xH$^($aUdr*Tj%yDLJ7o?*jUg8CIai-vDL*I5iva*&Z<0p)Nf@8&hEE?|q@uu3(o_yVnvRJ*HV&b>j!z4Xlt>;9Pp zD@xrT_7O~$JxMFTY)I_~^yXZ>BNgp_8U~0+cA01OlBrPQfJR$t=5f9KKqz~vPUI&I z8XOnfs9P1}tUc4W4Y=Dm|pOvaFHlQ5YaQMh#g{Jp`DJQL9 zSdhb%nhlZBrT7A!BM=#4fCjWc{ld*Ul!HKVaI^aCQuP&S9nS z-#JfjbBY=zagwYoH;luBJ0Srd58T-X_FL(|+?g9nYJdiqtMo+Q{&`reC6bEf{ktEpo`e!_8Khr>x!CY4Wr`~}J}?Q{i=Rys|5mM}&84-eV~7Wf>i zGQzEK$v?v7JK=fP=E{X5o#3iOL^X5ynkSWt``$^A*LV|47sDD13)H7Sb&qAeITj&y z*9gcgVRZ6n37B$VEW>`1+2*cT?YEmyE`1xBmSOTPK zS;Ho9l6=hmdTK>_{On30`=4#-xWs^<2`kfh4ItpwxW{@-M-tqeo8EK!i(b`eVOK+& zM_q??`ds$=)t0L|lwi-FUYp#`0s(ybSU77nUT+W8mPpxqZ+gOK4@aTG*Ih{Qbl5JJEM}3Jxmki-QNs$NZx5Na~dVC zd35TFZ0q#ZFQHdP#}mQ(hwk)KCHzry>mTB{|ENn6*^dVac!I9v%1k3yV&O>Li^K$b zv$+#$vyMrT8)>>Wk%74Pewp~93Yzc$Q9Qr`dQ$lWV`5*P-@vp1SL`iP}M%d;ZmY z2Y;8#diTaC-xbgS(<)4qvJxx^C~b6^vyumrPl^)lwDSoLP=6QaAKp*S)R|67Sm)Lb zPiHAGTbr7vqTi~!GAR{$j%ehA7LT{GI+5!H7~I@)pL(3^>5yz;Yl7lfZ`QoL61405 zU&oJ(cA%%$COlm0*I#%oi0j5EFn=8%eEx&!ORn@`2K3oir`1xvoC>~Rj=(G_;5ccE zgm);#loG7-GiHXJrP02J_h<6uTzagZLdu(fuiNS)ni;?J#<(-B9gc>6p zmUZ<$rEQ?hBW#$1uso9XP^Rw<(h2&wr`=Sn7>pv&{MyyzhdpDABDL0@^4V0p&7rf| zV4g^irY=cWoL5_hyF~g~qk5B-ZjQ_g9k%C%-O6vJiUu98$8z6{SQI3`))>nz*4V={ z5ih1=h{E!2&d2cn#SZXHR;Z^?&5y!6ITV~OPk$Wd~3XjS5;O_ zJ+AkM1!N{t$fVPuo`)8%sM0n*M|S)C;ew8Jy^Ekdv{koz@;*2;Z2u$94q&>fCo2@q zR#(i{%%ki(n@yB8bCYnmT-S-oq3hiq>vt)JwYZz`!B`7Gk=`5+J81gB_9ewSgjw@Yh-J$2KwjC~#vDvs0=8pDIZmytm6?YO3 z()7M|8B}(++1TwUpXEIc(m9u^;1%VJJnH^)es2-~L`FjQwfRr-Amy_Q-2$?y0+Ak) zg8nn8Zfk|-i=>NZF27B$m*Qw!U9a`3IXn)a0>0Okr-+=3jPu~?6K@R<^46FY2fWRC z&jB8`Y)lr!*ZBa9bW`Vvzl@XsQcx>$O@?A=LGa& zzeAq7UW`U2u&(h1B!vC`eg9$0ZyHk?bEO7m|8Z;cTyKCsN}zK7JloG!BPROP`ryRA z`(6K4JM+n(KYuFRvM2wJY1n#@w2y(FDj=lOP06lZ`fJ`5WWDf6m?~_?ia{4!5S4TX zsPtPtztF$Ke5{KbM1&b(AQ_M5+gbAmtx`Y~ERM^_Qz8w4Kv)<5T&dkG7ES91q+5XW z-SvtGF@X` zvD-e5{K5O7CM}-0(Xa$TrFTi$G(++v1j^pLgME^MFAn)VbXpQ}bWXoLFPBra(rE6r zlv@{uqeocA@7b8+sfco26)b7>a!l5O&ketmNb!o2pkl!63VN4>r8?F@DosThZ)8t^ zj}N*ElbzTm`1qW~CN$?a-VY$8^8{}3M>E{X9l*gpuRpg0_bE zbTneAG&f`pJ#$TdJpg+8U02}9L~-{F5b`|VYXb2|b&JGHqe==8W&v4dE!`P`tZVc@o9uqrUAEo z;CGcK-y6`(jYl%n!^J8cN>gA17|ClEzCNqI9FphqI8LzWY%0*NL3S)YnKBI%C+}WK z-(|MY)dlT}PPR}aa@?J2PcznUu~2g&6j9+YwX(Ngz7^Mg-C!uY1h_fP{ZUt|T1`qNoJAS9!c7F=l>?c>9W;GN~g^20t`y^V#16$Ohr^$wJk zlY6@}U7*G+5P4q>bOJ;;PuT@L{B*eHlLHEt%djL)=lr$`=dGRoPUN(M3v2(rq2AR) z!iYsQ3s4Q!M*sjFkCH-nuJg{!UMJG7MG@r<*mCF=L9mpPnS(kPuer`n{#;~IZ@2Rs z`SiFB#yT_ZtkzDxVS5N<`wYQ8jrh{0jR}xIJcKM&7Ifk56h2H8^JX) zGfRo<(?!5)X4PH4XqojW z7tq=p#oY+Hsg$kW+>v8+qH|W#--jdCmlw0>nTmI6YyFrxAPIN~au~!L;NHAU<+f|i zmW`sZ2>{i#{Hw#tP>-FTC%ev_v&GtFzU7pDO^+A*3`EpM0a;NsAO_37bx#YRy0`P_ zymaeq-m@@i3*K$e{#<6-G4VIQstAZCs4NG~;$AHTh<+5kz-s0NO}|r!t(CA5VnQdQ zf%;@hfY(8BUykyin*%^m{#5E|<#y-2wO@fH1IT;E*MQ)`i68HK7`g32+i19rG2DlN zs#JiH*fPisl0^4jDn$1#v<2hgytH)PU+O}H(Te`?xNyP+yg#^F22Lm#3A55t_`Zlc zOAozD+gCCjA0aa72S(*&`fsa#_{MGj_!D%8_OVSjttF8=J5_K}P+I36^^ruB$6|#AKY0WoyH%lgrQ?n@Ez#!LUZ{b)U?~Q@Y&m&F8aLHF+$yK+p?&7KeFg-0v zdV_R5Dl-^og!p@%uZ|buOaA^uh z3S~({!W2s6cmZ&LdYCaz|JI&e4@cF9Safw|b#wX`UccvjTcvh+*wzrOo@_YM#X^=)xfuVEg z9zcGqG zB4SRX>Wm;Mm%LeI2JLgXFh;QWyhZDL>vVkE)wPT8%<|@9#3h~9@rly&f?A%Zf91cd zSTgT}rMbP^0%Z%$x!c*M4~w&=b+oa08C)v?^pbZ9t@WPf>yf-6XS^rw{%aH$KJ}9F z_GY=reah;QYluxe4Nr${`*Zv!o##nm=Pv{V`IUf^eZN^dcUT0@2@O;~eDoGW-*h+= zn@*=l3^2q=C(%mdExp~x!cT;$o_7{Z7(fc*$`|F5Q*spnrDI7=FqpjM^gmt_q33`J zp5f<-aBQ9jWu%IRhKB276@LLL1=y*nG!Q5|jHbS46SHJuA|)ji)LNCx zuSJo!V}cn_K}Zyj0V;ClURXoWK`%9PAznEq()~q&72sl!M01GVr)k za^tQUeP^jx3F^28Koh7Q*J0MEO=pro$T~>xsh@kwu~Q9w*r79~%-m=>u-vrWLOlS~ z+Ro+iZ}c1 z?~l{}kUO;G42u%|F#5dGa1uAWI9U#-rOmX05fETP#ay8f+!tL!r6Xg=As|BJq`|fH zkVxU}@W1s|#ZY}t891OuK!!O&Ttd-0lGDoRDu?Sor6Q43dD);J#)U!iso?`d@m6-; z^4}Ua{wmPLIs*Oj5kL9xI(9C;Onkj8Sh^?X@YT5^bY9j+3fXeE!Z9d)lW@1TtSLHm zG70~UF`fIa>12*~qvC1W@864q6%|1fe(@#HIQJ7ma~&7F4?aFWOm=yHQ#(?S#7GN% zIumAkkNOL^w`Db{1%d)eK9Yxyo79B_5Qd@HJfC)f=N4KTa1F6BdbEL$ftenXACe{S zszyl8@bz=tBOIS9+PzL~y|Mgf(4YotO{EFXh9xICEe~|Gt5~`+6ERAhx_1k=F<^VR zFs}{eY`;s-47}ap3}~LZq3Y4@32{fqHy>{M4?7Ee%otHVaN{((o{jQ(>p8VUtv-4? zk)@mJl!$D?zm{7kI%gKClKA?m82`IP5BRI{R!;3ku96P1y_r8wt-KDKj>RHl(udvd zaaJ=+*IQt>V6dp+Ryc;1X0(+gMwD-)W+D@>S52E(18|O_5#J?+)x$k8DwU2(Fg$51 z&4|q&V8N$ZNGa|AGh0!kt5EAX!;K)nqjTUz7deK&qqdO1+@T>@0SyP4@?oJ+`e+K~ z*Fv6hdS>@CQS>60Ku+4hm@HcRwBN4o3NYpPBFnHh6O|65{ zIA|)Pdku(Lc;{Z1M|7m#^2&W{So+op6N^U?)32c+UXE%~gg*2glDLI7wP8Ufa`PkH zTDK>>7a}!$-eZ;A+$Ipo{u-z-OqJ1&a8)I}q0UXkIDdj zRX>7>gEA@~F~A>PJUgT#aqRrWFA9%Rl6?bjK;>4LR=uXL$g#f+)*aTVQot^n4w`Kq zKKs-XvWw^Pbpi^Zh>tdT#UcL5ZC22s6965BpZR?&>ZjmyR|^NWAw3cU(aj&5BR=*G zz2r=xoY!uu)|g-C6jfgtac$5X=6V`T%`BU3%Xguf$Fc>HmOIpMN+R^efAgjN@0o?j z?uuHzvZh)bpO|ji`vlb-+-Y4SYkEE%AD%%zT1Sl*OU*oLWJ8oM1DY zgJ=q@1)K+XKUGJ?$r$g!flnm;tiaOWKK7(J(jDv8(B{{6+7A9}n)h6KUUqSlap&3^ z$P#*?Xp@y6by^`tnYQjHQW$IP5kuWN$cH!@q`oq|YCv$`9M*`_hk+^?Ug*`?c&n0# zqC@2~uy}9wWQjSWISN@fkE&Ob2t`+ezp*4_G8y*%+Ohmy&$YpC&kg%z!_6r z%p~qYd6TulXXR$uiz}WI(wEbp2#ZP9c?WSy4aw+Xez`3hl}$(*{bVZkJwdD*tD&km zvU`G527G?WatNZ)!@Kp|W>}kj?OvJL**y~?VVhpeqG7Ai`c7YkNrHwSN-gQ*d05C# z-J_vqlP9gBNke)2jo-{$_H4Pl_Za$t>HeA8U-7sol~@(bU>3WFc&JZq5n(z~5rOKO zKiOT7QbzQm_=ix4-g$Bo&XswKB(>aWot8Bz&LmaM8U_XX*u$8cDW8`w&kG7@4*!hg zNSpFNf~S#W8^sA`G9<;iZkj5~E%NDRqEA@X1?@kCAr|A+IbYQk-)6q#P!FbV9cR1R zbib6E#PN&s>D?A@=VQ>07V4U(?i6)$C)1ZY9Mbk2J%J1#Jz1}7yJLSjy&Tl-{&NQG z@jpT`{PL)0D0i75&tCbvO7;0vjYN`#O8xC6Xtlq*@y^jcrJsxx^!Y?Y{9D129eFNP zbTD5|mvf{#P9|qBqiuG;RzS7b%{BjhlmU=N*ban%+rGSeub3V#EwNPvvhMh4*~}a7 z)E?(atw8b4`#Zp^);@*tZkOWf6;4Gn8=;zS7}Ue3$++TS)`=H1p)ggBcmXu+A+eL4 z7Vj_BON2)e=?mnbm0zG-^Y9&UG4n-mqlY~UC2)@ys5oQVv~;n=cgeCQX)fp3{fg!e zm`KGW0ZGZ2+oS^>?90hU?7t`DJ6;EENeL={HWMHZVZLoW+nrWg*>&F*Nqn z@6rVC@)QGCybY%xUkEO4@j&_o4+PIenPs`3JO86EarO_^o^h+7#2U>ksB-q5dD}6B zteAMjqs~mX{wlL+3m@>8($~B0AQQ;EBd6pbkJc8(e zay$O`U^&`RE;;-3g<0~8!Ygs;O_~l7RQ#3)U*xxtPh$-wB=|P{6~8Q!+5G$cl54XM z3VXW1X&IShvb|8PB(7h0mpk-*8k?Ld9??k}R^DAes&>Bo;ytOgKEn+CcA`kwnS$$w zA9}v$N2lx#zH`Xj8?P*uGETUgskV=~0~z<Dwl>8?|MRSO6Z;cTC2mPB$s>cn%D=?-sxlCz3qHz5 zMq=0*6iJiKBCVIu#zx|5_rg|2ti$_^USgW`eYvxd(#!1rnu&1aP^}=khx(H+aV^)k z`iL@8Q$%FZ?Z&tEt`pS=rHao_cW?5pc2Xk<*PjxfjX|k9=U-6F^!9RDvLlClJxtW^ zW&miSUD!@L;U5dw;H>VuG#*O=5+kHwS;3E>Jcl&UHflG5GRVsY`VsH)DEM#ojKMr< zQ@+}}%8nQ&^Opsm`v<3X z18=Ugd2;K*RLy^Es(&a~$zHBJXfCYHUvD3{=<@t7-Ps`oe^@W})N__J@k(FbZK)-k zV-xRrAy+POZ&e5*v`N({af!CM>Mdg2_h} zQu~u9#eNGes}KQ^oh)g5$^B$y_8ySBjFvrkGH%t&X@R9;$@YasZozpxLI%Uq29Na%k<6xnWk#)}&q$(mxv<`?#<0=5SE_@f7O9X-gCzbT_#0Mdj2 zZm-B+Ed|6{vOOuBT22+7-;32KWUx7?@F;zgx%4~mD$a#H-zfK|%s(s?Jy=N>r#$db z7FhvuB9l|w+lf8`0qJD(Q%JHgT60(lkvHRZ_b_F@QsK80eODR{Z|OL_xU3oS+-)(P zR)O7>R?y=3?$Kh5h~@`6ou)4J&z>d0!l{Xzx$)r+3`Gim%+on3$bV~lkUinlBa@EO z8qJswoV_^a>0NZ0`_SBYI;vqoCU;+^pLO-;JIP*r5*lQ0$(_9$2f2a4dR8^AZlT7V-E|xy1BKtdwc30;-=&wbLZq!H1qxT=$529LTw1WAL z3GUL&eT9c}?luh_FYs;!=|x6Y?p%q^$~z@qAtg&zYrEd;enYpj?OM~iuboTl-VMOk zY5FU)ACR+cS^cU*AOVtM5I{YG!Bem&2=IUggaD~RmLtSnbaZp$9M*@v|Zn?Wi`E+l&fAZ}UHzSM3WAAz3 z#6#g9k74Eljiq-2@02r0n@ebnt@Qc@U$MHO~|TmT;EO(x0y^`Jl@ zG}tJ^G#!7}$^166w0e+)`=Tm|W>mUv6|5yE&L19N! zs*Fb0tzDM&&5jaVG+3K|D}vKj@Pu>a9$Ei6k>Uu{(g zuY!+5^sDrZUn<8($@t=J{@lxLdn}^&`xDHj$T@UC&nfPi!lb9Qa3BtZaIBeg7Bmqo?7#2rRfIATzMo zpZc>r%D@)Atk^@TjSSzV+-(iddZ0)64p7C@^<`KM$4ZXMIpuU(O3hIoImQ=V7OM~rUiH)Gc&%HwcDrv?$7qj=de!}WW(jD#^+@r!$db*rQ82bLEpJDZ#-WK zvzFiZQ(-`UvCIQxYv558RLy3b_;v_cxI&jxU9U-*!U!R>GnGZOu^@64cXUKtKSy_ zVhwNt0xtW}wziMoN6L_i?I0W9@mfZL^AoV)bRa-L?vs4*65^(KVkpd2cm<=haf*&T zvGT$bV1|HTO5h_vNNkXoo5L`%C=ES5=Q;_uQ3nPgv}#W9{+p&nox7jMP)a6>Q`K*v zC9y9|Hu{(o$kQHfRDlXq&PiNDmN+MbfS|1ZbA+P*ReE>cb+Wi?RRshT3V+uDN@c|> z;ydeF*?~3T8M^!@3k8Qxy&&zuA2~i$F0L+d4Q&DjtjwoB-jI?xxgIl7#Ojml7gARU z_J4GDqGVd2^sY^Oa+T1^yZrW%&MF^{iFvN0aUsROLNwK3)^j zy>o|9H~$hZ#OdbKd!s09fDEJkLBWW@D(B6y?F*3X$?C4%1kxx8m~ZibR7TZsnqzF- zQ1saN!P>|-`HCzW`E$DPE~r8}Spm8Sp@XI0Y${~z=*wrh8s~2$|H(zht=ZZCTEC#MQn_dx*rQsJzx+u!PdKNlK_1E1~C8-SSkn#_H~_)I8zb zFk!oa$Sc;%zcdfaI>;t*k;i*|aeU!_PJkt58d*36q?q9I!_JU8j-=78zo06Ufii(u0eR_*V-9Nt=ZhAM`hX#VZNt&L$z7MHt4_~xM)Leyk7054=ggJc zcOLZw&B`kR6xai2%ok6J?}XLOBTt9$84{kMnMjN<=i-Zhl>j2ljcy^kOa=)vy4>(` z8@glZKG_J6m`I$EGwK7KgtM>+8>2rl;c*5d>z4_&4w9jxhny&~jRy>QwVOenb#AskMAy5ePv?G4AA zHZ~oaH6J%kAq}O2zfK=xMHwL8k$RnDd0?;@p#vS|4ND%UZc+iKHuZaZD~}c?UOYPR zLGR6nomgCi2Hdhc)^nGc-Ir~x%IW6@T1v)ZglPq|EJ6SOWr-@mGSZlJ%&hr(`# zKmPE;BOEXnPv!4k5yk|2U~=)F#Fyb0LIJ+ZKcd*obgCgi9CmV1;}O*)}l4w*OSggN+|s&RSJm=TOvjvaYdGcEp!~`;|5Dl*Fm8 zT;ISs`K9q#NqyZz$?)%b^e9pQ3qXM#J0m=To6ySBdZ#^XzxIYte z9F2E*W+wlIY$0e%ZUt^$`|OF7fj@}WlQbA+{T$g-5LSUpX`r%#T|FmMrIS;~9CCp8 z>!!R2>I7vC`+VWvZPWz>5i3J^Pg67ocq;cD(p#KR-Rc>XOaa}p&z}$oF zc#8DQY;A2HBB{2m@1NQN<0X&gKPDNAU}xh2@I-7a3eiC9Ac7YCgH}~;0XhzVHo`G! zws_K#KIJnY5G-Y@>ZSn7_t!3B$IfwmJ&6#vpKtML!<)7m2RO6jLhdQl^)dy4%*vj; zwEuc+Tl4YMf-(nFs|nF2sLP$h^TK9M2OlV=r(o;lz!)QDi{U0~AR_~;m0aY|Tg~I8 zHxYp01spEq3d%bIe-iwwB3wtHkdYaE$Mjmpf$`)Cm86QHdE!~!fQ9fxbs8ctG4yMl*A@D$eZnE6{wP9O&F}AtLd*B1F`&PLjvyDH~_oSzfi5k zsst3+`r|AG8d~l*y%@^PURqI07`5F#$eQOr4gGA zD~8lswAyi{=ZVFe)huWfIvxcQcI;jth1Vp?XIe=rDEsFnUnLRqY==QQ6flGm)d|*s zt9^L$(XWBh-wzz1thW)GSt9n)*eWV2fcTB$rDynO5R5R%^O|QJad~Z}h(d?4 zQW;!W{BY929t4JLoVLf*;jBv094c8$OG_#$S)4`M%4X3=&*najTP@65euQI(lj#WF z;2Wi!8>u&n!pFzTlx%DRaHYu1uJ7Tk?sOGUbZ~Gp$grMg0C|Wq3{ZNe>9OKn9)8&? zCUwHc$8SXSLyJCZCZGC@(SXTS%s;T?+MP%YH`w@e9++*zE%Z_PU0~~ zIFszNdT~Wx(faY8Zb~X^{Z2&#;Gc2y=mMmH1#GZ9>Mx_aM$EL45+2`ag~7b#7`~w! zcI7NDG%2`Mf8if(>2jXvc`zqVmT%U9WoBd-n3~^P*ku@LKtQ5KSF0vQDG3oYs}4UF z0wf{Z&qBQka=^!|U)F@EOEpWrWev?G7W>}3mLTHVW2N-B0X4RO<9mK8@`vK#@8|~J zb_K=I7wgLGDr4pDtwP^&?qx3u+(!=ss4z0(}9JolunO>oMr&uz^-vn!U_Rmx5$I*BLXgiNJ9DoH7 z;6{@Q(-v!+!szZhEWJ&`;{Wh7e|b31jo|lin5iur%4`0co`C5&KfbeFXCem*O5}IDQzXcCIjMOPxcT=a>57EY6ji0?@-+$bR1grWtZ&R2YnoBo# zl~+|c(O`|cvrG|Eg$;gj9Un-r6Sw_Fe8VXJc$hT-Dnm zQOK6Pax!1cSr=L(j?2$hv)F`B+J%3vt85B$RcdJvposvMmW@WaT zo&*cKI@jkn5`Qt>G4@Q@+V7i+@aS^gC^0qF5fh|M#UM(C=JxHKkw^YKef`7Hg}Qn7 za_2`56VGeJhVN1n!1Nl7&bv(BS=_1ywm(u-aiad4W>|luKkChLbbH=Tkfnd{94d`# zgOt!o5|y*T(MQH9Kc1`;AeEdBPSvV~pQ6BRw6o3gkp@sjgt6b$s_kQA^uU%>h$|)f zsn#BV2X-m|D=uHQo9zKI=AdT0P==ep zEFWMwtUfhKUH~*Mztb=wH=<@WGG2lMMRzy1192D>f6YGGq2dc~VVl^Mbre}wb zE04z%$Pn`1;C+OYb#(jN07+)aH23}i7Uy__MyqIHd!6y5*eyP}Kb6EHjt67g(k(sC+gx*yi6bf%sTd}v-hzf1?S zEV}R*re~|;9Pdfg&$ZZUlnd(1V@GJ^Y8YgmR_pQ4hW>TuE`qvEjp$K6 z)~6~={#Xd>Z_711VqNTwPJ{zz0#~qwyXqzd%Eb65_do2&1^&(sDRvDPx9m>x@%(^rB?{ z%TKFl9dejfq`lZGTob%jnsL4fp{js~o&bFrXubGw4z;(ZDc+pDJ_$qe6E*fYSPEEp zHW#%TM7kC(1Xlt*b0i>;fI_YV4}eO>!U_k?7+6>e|00q9JdGs#e}5VaP4M4G7yOH7 z{vG{)eEL71^Pi*j|3yOo-sJ!JG!%3uU}61#IPibH{y$&;KX3crzpAZn@nceR6V|Ks zXOmc=!-AMdg@T(E9E!Y%XYta?lQ-JSI2a3`PnN|?bJUabJZWElJ~TS*9gsP9Fa7M@~_|Q1Ns~T(<%deuu z&aU~ohBRLUEMNN7BxVcknt?zdj+&c>ii(OI0(iYeIYZ!dL?sJ-*?BJa@UusraB5NJ z&dv@Ji3EF3z9g`zSud1ysP~#{i|Azv8C>(@6#~nH)j{9DfY?maL%}b=f`l&&%n|`D z_uPcUL`DgpMF2;=MMd>Z=O%^{e9pIe?*&R?TEx)V;YO4t*iIQ5KFBE%*Lb3&{h-M| zZ*|p$k!|A7(dXGv%dkZtW4%k*o5XA?nG04GLirCK(~anOVCET!y0sR#e|41@A5X!8 z>TlnvufO}qSzV{$tPF^|@7vvXaVc+^26kyr_ZBr&l$E>sqGMxYSDo|$L3lU)CBSd) zD8nFrzq~dlL>!mEhXwtP;}$M?*x&=S@VkDPsZ7KWxce~$?KbbbwoG7D0oPSZM8x1qoEf3>BAQI(Iu>~Q(Z|=vi*T^W za0Ubs_6f*mM|A&ljt0Td9n$0jQ7`ZIv!nGWThJ;p(+DSLlA)dBX9_+CC~RIEAd#M~ zbxyLv$4Dl$+n2MjR(umlG@oufMBV|!+=STj@a;1L3Hy$Y+VDOn9L zC`S=FFk+mX*A{f?tlg0}sKK43f6}9gj2-l7Y)wr~0br&A{xTSI#<^(jUcT38HHT|s z)`#w23nI=)d~jA#5z^aVs5_koGb4^cyN3JNdrXFPXxuS~eeVwev*gpSN)%ZGlc0!; zG|hPDv&4JC3MPrk^(hK*Py+w>U2M`i)|^-8_c={e+Zw9#8^E_vr=XGp=#=4-W~KEe ze}3H)iBMw-ESd07qmAQGu}+MOYdhM7RManL(Eam_1&G9a=I76bK_`K6yVBj?_5zSdmS?Px>CxK2{pF>B z^g@bN&m_41VsbJiYj?nGXng1M=QyKbpp_yYG-t4nvQ7cePbLfm*gafnMP zn%4GiQc;PZSiw*>%CY6tm4SLnejmYZJNOY1B4D1024Iv`ReO4S?L+MB7m+*<(Dk)x zU`(g)Hu(Rsh{5G~(Iwh*a?k$v2+-=o{UHR`km_!>9Ac_lJD@x;F6KPEx-ad&S#I)y zUe~UeQ+$qg0r6qZJo$DA2uYuz0FgT5D|Mu27yECI(s(%FNxpec3Vwb$f)D_8ui^=yLQuQ0`qvjBdYNWQGnOYLlJa* zgMsOQn;1HXk>&rMQwi`zuxF~Gkc3YZ?B5yq1V6Ys57?ZbVxI$f1~DOd1}i}Z4b7Te zA|kIEzzy!n+T4UER9Uym*=48vDDYzEAOVY^xEky$n2UBV;$Ob>BiIE)v@UinDIjNL zeI?-r2n9l!y0;ehn$KRKJQz0wA?LT(UgJdP*c;>kUr$~>J`%A^zmV@gejtMJe>oNh zB%nmYF3-#RpuRqlf{^)TugIbwZx-1Lzno~9Bk#ne3{?(*N%dcAP-8YNCq4^J+e_gE zu(AP`^wUgXrqn_pKzI=c!zpo@to(oz0EwruneN;J7MOE}X}rb<^S`^b4lZie6H(7I zaZN2hJ$8HrM`s9yE%s3v-~aRLiPw|m!K|_oO;d`EO?C;1Th@uMGF!dvj7l}ryd-2~ zf`_N1fG`l2F55%jW9!)IRRLhK5q_8g4vEL3UZ#H^S4bE!eUMC~m-vp~`&PWC#i%oe z;*N)XPl5qgIdAkC)YHP^Ugc*v#t^JR|8v}~&L%!&=2p;l1vhMn#a ztZ}mY*|=8#?kl-#xw$t<7bQC0v-QHHahw!X4uJMg-^AjxN8-C!Si(?_S3Q6#ZEJB2 zfIu9{g{p9-!sN<@GyK|c{=3OM`hn1~e2|g&>IMKkCYihfpygM>2@Da3=AqzP1;34t znjQ6R;5|*P+qmFEViK~SF@b@B^3r&SVeGo+?9ao=ZA>4{;DRcd|b=jRGssEQuXB zot!IyYkg%PZPi2fAh2|Mujn%Ti^l&9V>&y8r)z(t)#kk;b>Axk6GUQ{hfX>o(NCzM zh$2T)$>X=PzoGIe5l@r{uj1zO-HEDSo(?Z66i$#doaz@Qt{7#Z74U=BGl^iF@L+MkJ+QG=LOPp+McK=!O1OhPX-vCgk0Crlp ziQ2u5nY#oj!ZS+iNQ6tMfmN<_fUYJ_v5cQpuyr=F>4d| zyPyf~z|#ajxIG7O?3wv}T#{<*IxV;+`oa%A3rk5O((XW#i@&I9{m%x&Z4`)?2L~wZ z*RopWQ6f4C^k8LhUg!t1iGwYz6`>P>yzK_DXG`1Os}#S!i~ZMxyZ1{( z({qmz?!bPb0xNvoM-U=dFAtOd)f(1{dOq}})XJMHyiYX%lRz(_$$Xtfyc@jn;WIJ~ z#ML)ge~5j*s$?uCCLuZ0ok5dqo+e_4j-wPi3>*8(z@4Uh7+j+(ca!#*?s_Shd*90| zZxs~!?>n_y=;?f&dt#redSQ_9^H{hxPtubN9ka}D>nX{};bMWhZ+LBiX~n!_r?(LN zGmW~#4*)l>;8tx&WRfL*u?aP;#qGr*^0G+qZ9OuNVy4GbKG=)2yOuV&OZseV@VL3yhuiJ`v>%*dMZcN*eyaCKZy-b$Jiarj( zRSg4WAbv*^I}yzDnw%PQfeqmYgW_nbmlNSXEkS<=MJax(z0sp>X;s$Aj?1a?@UK(0 z8V(MNIi4+aHey;}ce8V=(uNK4KFMB61pUxTn=-Y`eVES-IZk|G9TWh^6(+({tiBQ@ z3TK+(k>bRd;-wQgX|gQRn7FPdt)b+m~|8w~N4=?)n cso`!R72fYxOtYmvUw^KKimr0yeVgb17xEdlJ^%m! From 98f700ac81d09cb1cdbd4f518a8e44866fcdf97f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 6 Nov 2024 12:50:27 +0100 Subject: [PATCH 152/219] Nits --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f6d1af8..83731ff 100644 --- a/README.md +++ b/README.md @@ -79,10 +79,12 @@ Include `` and call `aegis_init()` prior to doing anything else with th [Other AEGIS implementations](https://github.com/cfrg/draft-irtf-cfrg-aegis-aead?tab=readme-ov-file#known-implementations) are also available for most programming languages. -## Benchmarks +## Benchmark results AEGIS is very fast on CPUs with parallel execution pipelines and AES support. +The following results are derived from libaegis, which has been optimized primarily for portability and readability. Other implementations, such as `jasmin-aegis` or the Zig implementations, may demonstrate better performance. + ### Encryption (16 KB) ![AEGIS benchmark results](img/bench-encryption.png) From a3a38ec36d94586848bb43dcf2e91be39e5827db Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 6 Nov 2024 13:37:15 +0100 Subject: [PATCH 153/219] Revert 2ee63911bf710e4ce8863f359b3c29882600e662 Until tested with concurrency and consistently implemented everywhere --- src/aegis128x4/aegis128x4_armcrypto.c | 81 +------------------ src/aegis128x4/aegis128x4_common.h | 108 +------------------------- 2 files changed, 2 insertions(+), 187 deletions(-) diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index 843afd9..ebfe6db 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -26,9 +26,7 @@ # pragma GCC target("+simd+crypto") # endif -# define AES_BLOCK_LENGTH 64 -# define AES_BLOCK1_LENGTH 16 -# define CHUNK_SIZE 512 +# define AES_BLOCK_LENGTH 64 typedef struct { uint8x16_t b0; @@ -37,83 +35,6 @@ typedef struct { uint8x16_t b3; } aes_block_t; -/* -- */ - -typedef uint8x16_t aes_block1_t; - -# define AES_BLOCK1_XOR(A, B) veorq_u8((A), (B)) -# define AES_BLOCK1_AND(A, B) vandq_u8((A), (B)) -# define AES_BLOCK1_LOAD(A) vld1q_u8(A) -# define AES_BLOCK1_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1)) -# define AES_BLOCK1_STORE(A, B) vst1q_u8((A), (B)) -# define AES_ENC1(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B)) - -static inline void -aegis128x4_update_b0(aes_block_t *const state, const aes_block1_t d1, const aes_block1_t d2) -{ - aes_block1_t tmp; - - tmp = state[7].b0; - state[7].b0 = AES_ENC1(state[6].b0, state[7].b0); - state[6].b0 = AES_ENC1(state[5].b0, state[6].b0); - state[5].b0 = AES_ENC1(state[4].b0, state[5].b0); - state[4].b0 = AES_BLOCK1_XOR(AES_ENC1(state[3].b0, state[4].b0), d2); - state[3].b0 = AES_ENC1(state[2].b0, state[3].b0); - state[2].b0 = AES_ENC1(state[1].b0, state[2].b0); - state[1].b0 = AES_ENC1(state[0].b0, state[1].b0); - state[0].b0 = AES_BLOCK1_XOR(AES_ENC1(tmp, state[0].b0), d1); -} - -static inline void -aegis128x4_update_b1(aes_block_t *const state, const aes_block1_t d1, const aes_block1_t d2) -{ - aes_block1_t tmp; - - tmp = state[7].b1; - state[7].b1 = AES_ENC1(state[6].b1, state[7].b1); - state[6].b1 = AES_ENC1(state[5].b1, state[6].b1); - state[5].b1 = AES_ENC1(state[4].b1, state[5].b1); - state[4].b1 = AES_BLOCK1_XOR(AES_ENC1(state[3].b1, state[4].b1), d2); - state[3].b1 = AES_ENC1(state[2].b1, state[3].b1); - state[2].b1 = AES_ENC1(state[1].b1, state[2].b1); - state[1].b1 = AES_ENC1(state[0].b1, state[1].b1); - state[0].b1 = AES_BLOCK1_XOR(AES_ENC1(tmp, state[0].b1), d1); -} - -static inline void -aegis128x4_update_b2(aes_block_t *const state, const aes_block1_t d1, const aes_block1_t d2) -{ - aes_block1_t tmp; - - tmp = state[7].b2; - state[7].b2 = AES_ENC1(state[6].b2, state[7].b2); - state[6].b2 = AES_ENC1(state[5].b2, state[6].b2); - state[5].b2 = AES_ENC1(state[4].b2, state[5].b2); - state[4].b2 = AES_BLOCK1_XOR(AES_ENC1(state[3].b2, state[4].b2), d2); - state[3].b2 = AES_ENC1(state[2].b2, state[3].b2); - state[2].b2 = AES_ENC1(state[1].b2, state[2].b2); - state[1].b2 = AES_ENC1(state[0].b2, state[1].b2); - state[0].b2 = AES_BLOCK1_XOR(AES_ENC1(tmp, state[0].b2), d1); -} - -static inline void -aegis128x4_update_b3(aes_block_t *const state, const aes_block1_t d1, const aes_block1_t d2) -{ - aes_block1_t tmp; - - tmp = state[7].b3; - state[7].b3 = AES_ENC1(state[6].b3, state[7].b3); - state[6].b3 = AES_ENC1(state[5].b3, state[6].b3); - state[5].b3 = AES_ENC1(state[4].b3, state[5].b3); - state[4].b3 = AES_BLOCK1_XOR(AES_ENC1(state[3].b3, state[4].b3), d2); - state[3].b3 = AES_ENC1(state[2].b3, state[3].b3); - state[2].b3 = AES_ENC1(state[1].b3, state[2].b3); - state[1].b3 = AES_ENC1(state[0].b3, state[1].b3); - state[0].b3 = AES_BLOCK1_XOR(AES_ENC1(tmp, state[0].b3), d1); -} - -/* -- */ - static inline aes_block_t AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b) { diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index ea8bfcf..03c7d05 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -121,88 +121,6 @@ aegis128x4_absorb(const uint8_t *const src, aes_block_t *const state) aegis128x4_update(state, msg0, msg1); } -#ifdef CHUNK_SIZE -static void -aegis128x4_enc_b0(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) -{ - aes_block1_t msg0, msg1; - aes_block1_t tmp0, tmp1; - - msg0 = AES_BLOCK1_LOAD(src); - msg1 = AES_BLOCK1_LOAD(src + AES_BLOCK_LENGTH); - tmp0 = AES_BLOCK1_XOR(msg0, state[6].b0); - tmp0 = AES_BLOCK1_XOR(tmp0, state[1].b0); - tmp1 = AES_BLOCK1_XOR(msg1, state[5].b0); - tmp1 = AES_BLOCK1_XOR(tmp1, state[2].b0); - tmp0 = AES_BLOCK1_XOR(tmp0, AES_BLOCK1_AND(state[2].b0, state[3].b0)); - tmp1 = AES_BLOCK1_XOR(tmp1, AES_BLOCK1_AND(state[6].b0, state[7].b0)); - AES_BLOCK1_STORE(dst, tmp0); - AES_BLOCK1_STORE(dst + AES_BLOCK_LENGTH, tmp1); - - aegis128x4_update_b0(state, msg0, msg1); -} - -static void -aegis128x4_enc_b1(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) -{ - aes_block1_t msg0, msg1; - aes_block1_t tmp0, tmp1; - - msg0 = AES_BLOCK1_LOAD(src); - msg1 = AES_BLOCK1_LOAD(src + AES_BLOCK_LENGTH); - tmp0 = AES_BLOCK1_XOR(msg0, state[6].b1); - tmp0 = AES_BLOCK1_XOR(tmp0, state[1].b1); - tmp1 = AES_BLOCK1_XOR(msg1, state[5].b1); - tmp1 = AES_BLOCK1_XOR(tmp1, state[2].b1); - tmp0 = AES_BLOCK1_XOR(tmp0, AES_BLOCK1_AND(state[2].b1, state[3].b1)); - tmp1 = AES_BLOCK1_XOR(tmp1, AES_BLOCK1_AND(state[6].b1, state[7].b1)); - AES_BLOCK1_STORE(dst, tmp0); - AES_BLOCK1_STORE(dst + AES_BLOCK_LENGTH, tmp1); - - aegis128x4_update_b1(state, msg0, msg1); -} - -static void -aegis128x4_enc_b2(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) -{ - aes_block1_t msg0, msg1; - aes_block1_t tmp0, tmp1; - - msg0 = AES_BLOCK1_LOAD(src); - msg1 = AES_BLOCK1_LOAD(src + AES_BLOCK_LENGTH); - tmp0 = AES_BLOCK1_XOR(msg0, state[6].b2); - tmp0 = AES_BLOCK1_XOR(tmp0, state[1].b2); - tmp1 = AES_BLOCK1_XOR(msg1, state[5].b2); - tmp1 = AES_BLOCK1_XOR(tmp1, state[2].b2); - tmp0 = AES_BLOCK1_XOR(tmp0, AES_BLOCK1_AND(state[2].b2, state[3].b2)); - tmp1 = AES_BLOCK1_XOR(tmp1, AES_BLOCK1_AND(state[6].b2, state[7].b2)); - AES_BLOCK1_STORE(dst, tmp0); - AES_BLOCK1_STORE(dst + AES_BLOCK_LENGTH, tmp1); - - aegis128x4_update_b2(state, msg0, msg1); -} - -static void -aegis128x4_enc_b3(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) -{ - aes_block1_t msg0, msg1; - aes_block1_t tmp0, tmp1; - - msg0 = AES_BLOCK1_LOAD(src); - msg1 = AES_BLOCK1_LOAD(src + AES_BLOCK_LENGTH); - tmp0 = AES_BLOCK1_XOR(msg0, state[6].b3); - tmp0 = AES_BLOCK1_XOR(tmp0, state[1].b3); - tmp1 = AES_BLOCK1_XOR(msg1, state[5].b3); - tmp1 = AES_BLOCK1_XOR(tmp1, state[2].b3); - tmp0 = AES_BLOCK1_XOR(tmp0, AES_BLOCK1_AND(state[2].b3, state[3].b3)); - tmp1 = AES_BLOCK1_XOR(tmp1, AES_BLOCK1_AND(state[6].b3, state[7].b3)); - AES_BLOCK1_STORE(dst, tmp0); - AES_BLOCK1_STORE(dst + AES_BLOCK_LENGTH, tmp1); - - aegis128x4_update_b3(state, msg0, msg1); -} -#endif - static void aegis128x4_enc(uint8_t *const dst, const uint8_t *const src, aes_block_t *const state) { @@ -291,31 +209,7 @@ encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size memcpy(src, ad + i, adlen % RATE); aegis128x4_absorb(src, state); } - i = 0; - -#ifdef CHUNK_SIZE - { - const size_t mlenx = mlen - mlen % CHUNK_SIZE; - size_t j; - - for (; i < mlenx; i += CHUNK_SIZE) { - for (j = 0; j < CHUNK_SIZE; j += RATE) { - aegis128x4_enc_b0(c + i + j, m + i + j, state); - } - for (j = AES_BLOCK1_LENGTH; j < CHUNK_SIZE; j += RATE) { - aegis128x4_enc_b1(c + i + j, m + i + j, state); - } - for (j = AES_BLOCK1_LENGTH * 2; j < CHUNK_SIZE; j += RATE) { - aegis128x4_enc_b2(c + i + j, m + i + j, state); - } - for (j = AES_BLOCK1_LENGTH * 3; j < CHUNK_SIZE; j += RATE) { - aegis128x4_enc_b3(c + i + j, m + i + j, state); - } - } - } -#endif - - for (; i + RATE <= mlen; i += RATE) { + for (i = 0; i + RATE <= mlen; i += RATE) { aegis128x4_enc(c + i, m + i, state); } if (mlen % RATE) { From b3e69d04c3e32044162f5ea3407ee4f94d8d23f0 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 14 Nov 2024 00:00:23 +0100 Subject: [PATCH 154/219] ALIGNMENT -> RATE --- src/aegis128l/aegis128l_common.h | 2 +- src/aegis128x2/aegis128x2_common.h | 2 +- src/aegis128x4/aegis128x4_common.h | 2 +- src/aegis256/aegis256_common.h | 2 +- src/aegis256x2/aegis256x2_common.h | 2 +- src/aegis256x4/aegis256x4_common.h | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 74d98f7..6334c42 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -362,7 +362,7 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * return 0; } } - if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { errno = ERANGE; return -1; } diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 4548651..451e7c9 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -395,7 +395,7 @@ state_encrypt_update(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t return 0; } } - if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { errno = ERANGE; return -1; } diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 03c7d05..3ff7e05 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -410,7 +410,7 @@ state_encrypt_update(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t return 0; } } - if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { errno = ERANGE; return -1; } diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 515709f..5d25be3 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -347,7 +347,7 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w return 0; } } - if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { errno = ERANGE; return -1; } diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index caa3ed5..8481f8e 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -396,7 +396,7 @@ state_encrypt_update(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t return 0; } } - if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { errno = ERANGE; return -1; } diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index 3474b4e..279fd4f 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -415,7 +415,7 @@ state_encrypt_update(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t return 0; } } - if (clen_max < (mlen & ~(size_t) (ALIGNMENT - 1))) { + if (clen_max < (mlen & ~(size_t) (RATE - 1))) { errno = ERANGE; return -1; } From bc73ebfa625a4b99eca90319617bdce8fdabcd3c Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 14 Nov 2024 00:28:35 +0100 Subject: [PATCH 155/219] Faster AEGIS-128L incremental APIs --- src/aegis128l/aegis128l_common.h | 100 ++++++++++++++++++++++--------- 1 file changed, 73 insertions(+), 27 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 6334c42..f2a4dd8 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -293,18 +293,21 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } } +typedef aes_block_t aegis_blocks[8]; + typedef struct _aegis128l_state { - aes_block_t state[8]; - uint8_t buf[RATE]; - uint64_t adlen; - uint64_t mlen; - size_t pos; + aegis_blocks blocks; + uint8_t buf[RATE]; + uint64_t adlen; + uint64_t mlen; + size_t pos; } _aegis128l_state; static void state_init(aegis128l_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { + aegis_blocks blocks; _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); @@ -314,28 +317,35 @@ state_init(aegis128l_state *st_, const uint8_t *ad, size_t adlen, const uint8_t st->mlen = 0; st->pos = 0; - aegis128l_init(k, npub, st->state); + memcpy(blocks, st->blocks, sizeof blocks); + + aegis128l_init(k, npub, blocks); for (i = 0; i + RATE <= adlen; i += RATE) { - aegis128l_absorb(ad + i, st->state); + aegis128l_absorb(ad + i, blocks); } if (adlen % RATE) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen % RATE); - aegis128l_absorb(st->buf, st->state); + aegis128l_absorb(st->buf, blocks); } st->adlen = adlen; + + memcpy(st->blocks, blocks, sizeof blocks); } static int state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *written, const uint8_t *m, size_t mlen) { + aegis_blocks blocks; _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += mlen; if (st->pos != 0) { @@ -354,7 +364,7 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * return -1; } clen_max -= RATE; - aegis128l_enc(c, st->buf, st->state); + aegis128l_enc(c, st->buf, blocks); *written += RATE; c += RATE; st->pos = 0; @@ -367,7 +377,7 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * return -1; } for (i = 0; i + RATE <= mlen; i += RATE) { - aegis128l_enc(c + i, m + i, st->state); + aegis128l_enc(c + i, m + i, blocks); } *written += i; left = mlen % RATE; @@ -375,6 +385,9 @@ state_encrypt_update(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t * memcpy(st->buf, m + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -382,12 +395,15 @@ static int state_encrypt_detached_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *written, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos) { errno = ERANGE; @@ -396,13 +412,15 @@ state_encrypt_detached_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis128l_enc(dst, src, st->state); + aegis128l_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis128l_mac(mac, maclen, st->adlen, st->mlen, st->state); + aegis128l_mac(mac, maclen, st->adlen, st->mlen, blocks); *written = st->pos; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -410,12 +428,15 @@ static int state_encrypt_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen) { + aegis_blocks blocks; _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos + maclen) { errno = ERANGE; @@ -424,13 +445,15 @@ state_encrypt_final(aegis128l_state *st_, uint8_t *c, size_t clen_max, size_t *w if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis128l_enc(dst, src, st->state); + aegis128l_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis128l_mac(c + st->pos, maclen, st->adlen, st->mlen, st->state); + aegis128l_mac(c + st->pos, maclen, st->adlen, st->mlen, blocks); *written = st->pos + maclen; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -438,6 +461,7 @@ static int state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *c, size_t clen) { + aegis_blocks blocks; _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); @@ -445,6 +469,8 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += clen; @@ -468,10 +494,10 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, return -1; } mlen_max -= RATE; - aegis128l_dec(m, st->buf, st->state); + aegis128l_dec(m, st->buf, blocks); m += RATE; } else { - aegis128l_dec(dst, st->buf, st->state); + aegis128l_dec(dst, st->buf, blocks); } *written += RATE; } @@ -481,11 +507,11 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, return -1; } for (i = 0; i + RATE <= clen; i += RATE) { - aegis128l_dec(m + i, c + i, st->state); + aegis128l_dec(m + i, c + i, blocks); } } else { for (i = 0; i + RATE <= clen; i += RATE) { - aegis128l_dec(dst, c + i, st->state); + aegis128l_dec(dst, c + i, blocks); } } *written += i; @@ -494,6 +520,9 @@ state_decrypt_detached_update(aegis128l_state *st_, uint8_t *m, size_t mlen_max, memcpy(st->buf, c + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -501,6 +530,7 @@ static int state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { + aegis_blocks blocks; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; _aegis128l_state *const st = @@ -508,6 +538,8 @@ state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, ~(uintptr_t) (ALIGNMENT - 1)); int ret; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (st->pos != 0) { if (m != NULL) { @@ -515,12 +547,12 @@ state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, errno = ERANGE; return -1; } - aegis128l_declast(m, st->buf, st->pos, st->state); + aegis128l_declast(m, st->buf, st->pos, blocks); } else { - aegis128l_declast(dst, st->buf, st->pos, st->state); + aegis128l_declast(dst, st->buf, st->pos, blocks); } } - aegis128l_mac(computed_mac, maclen, st->adlen, st->mlen, st->state); + aegis128l_mac(computed_mac, maclen, st->adlen, st->mlen, blocks); ret = -1; if (maclen == 16) { ret = aegis_verify_16(computed_mac, mac); @@ -532,18 +564,24 @@ state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, } else { memset(m, 0, st->pos); } + + memcpy(st->blocks, blocks, sizeof blocks); + return ret; } static int state_mac_update(aegis128l_state *st_, const uint8_t *ad, size_t adlen) { + aegis_blocks blocks; _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; st->adlen += adlen; if (left != 0) { @@ -552,7 +590,7 @@ state_mac_update(aegis128l_state *st_, const uint8_t *ad, size_t adlen) return 0; } memcpy(st->buf + left, ad, RATE - left); - aegis128l_absorb(st->buf, st->state); + aegis128l_absorb(st->buf, blocks); ad += RATE - left; adlen -= RATE - left; } @@ -565,33 +603,41 @@ state_mac_update(aegis128l_state *st_, const uint8_t *ad, size_t adlen) msg3 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 3); COMPILER_ASSERT(AES_BLOCK_LENGTH * 4 == RATE * 2); - aegis128l_update(st->state, msg0, msg1); - aegis128l_update(st->state, msg2, msg3); + aegis128l_update(blocks, msg0, msg1); + aegis128l_update(blocks, msg2, msg3); } for (; i + RATE <= adlen; i += RATE) { - aegis128l_absorb(ad + i, st->state); + aegis128l_absorb(ad + i, blocks); } if (i < adlen) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen - i); } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } static int state_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis128l_state *const st = (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; if (left != 0) { memset(st->buf + left, 0, RATE - left); - aegis128l_absorb(st->buf, st->state); + aegis128l_absorb(st->buf, blocks); } - aegis128l_mac(mac, maclen, st->adlen, 0, st->state); + aegis128l_mac(mac, maclen, st->adlen, 0, blocks); + + memcpy(st->blocks, blocks, sizeof blocks); return 0; } From 79c41cc72e2c16699cc657119bb3e4202cf45326 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 14 Nov 2024 00:35:15 +0100 Subject: [PATCH 156/219] Reuse aegis_blocks --- src/aegis128l/aegis128l_common.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index f2a4dd8..7879c7f 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -1,6 +1,8 @@ #define RATE 32 #define ALIGNMENT 32 +typedef aes_block_t aegis_blocks[8]; + static void aegis128l_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { @@ -146,7 +148,7 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -180,7 +182,7 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; @@ -232,7 +234,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -257,7 +259,7 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -279,7 +281,7 @@ static void decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; const size_t mlen = clen; size_t i; @@ -293,8 +295,6 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } } -typedef aes_block_t aegis_blocks[8]; - typedef struct _aegis128l_state { aegis_blocks blocks; uint8_t buf[RATE]; From 3bd8e9c83b44aecba30d1b4934359882f5053e58 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 14 Nov 2024 00:42:14 +0100 Subject: [PATCH 157/219] Use aegis_blocks everywhere --- src/aegis128x2/aegis128x2_common.h | 22 ++++++++++++---------- src/aegis128x4/aegis128x4_common.h | 22 ++++++++++++---------- src/aegis256/aegis256_common.h | 22 ++++++++++++---------- src/aegis256x2/aegis256x2_common.h | 22 ++++++++++++---------- src/aegis256x4/aegis256x4_common.h | 22 ++++++++++++---------- 5 files changed, 60 insertions(+), 50 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 451e7c9..5e35843 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -1,6 +1,8 @@ #define RATE 64 #define ALIGNMENT 64 +typedef aes_block_t aegis_blocks[8]; + static void aegis128x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { @@ -179,7 +181,7 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -213,7 +215,7 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; @@ -265,7 +267,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -290,7 +292,7 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -312,7 +314,7 @@ static void decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; const size_t mlen = clen; size_t i; @@ -327,11 +329,11 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } typedef struct _aegis128x2_state { - aes_block_t state[8]; - uint8_t buf[RATE]; - uint64_t adlen; - uint64_t mlen; - size_t pos; + aegis_blocks state; + uint8_t buf[RATE]; + uint64_t adlen; + uint64_t mlen; + size_t pos; } _aegis128x2_state; static void diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 3ff7e05..4468515 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -1,6 +1,8 @@ #define RATE 128 #define ALIGNMENT 64 +typedef aes_block_t aegis_blocks[8]; + static void aegis128x4_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { @@ -194,7 +196,7 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -228,7 +230,7 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; @@ -280,7 +282,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -305,7 +307,7 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -327,7 +329,7 @@ static void decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[8]; + aegis_blocks state; const size_t mlen = clen; size_t i; @@ -342,11 +344,11 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } typedef struct _aegis128x4_state { - aes_block_t state[8]; - uint8_t buf[RATE]; - uint64_t adlen; - uint64_t mlen; - size_t pos; + aegis_blocks state; + uint8_t buf[RATE]; + uint64_t adlen; + uint64_t mlen; + size_t pos; } _aegis128x4_state; static void diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 5d25be3..ffbc075 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -1,6 +1,8 @@ #define RATE 16 #define ALIGNMENT 16 +typedef aes_block_t aegis_blocks[6]; + static void aegis256_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { @@ -131,7 +133,7 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -165,7 +167,7 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; @@ -217,7 +219,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -242,7 +244,7 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -264,7 +266,7 @@ static void decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; const size_t mlen = clen; size_t i; @@ -279,11 +281,11 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } typedef struct _aegis256_state { - aes_block_t state[6]; - uint8_t buf[RATE]; - uint64_t adlen; - uint64_t mlen; - size_t pos; + aegis_blocks state; + uint8_t buf[RATE]; + uint64_t adlen; + uint64_t mlen; + size_t pos; } _aegis256_state; static void diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index 8481f8e..8c7f7c5 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -1,6 +1,8 @@ #define RATE 32 #define ALIGNMENT 32 +typedef aes_block_t aegis_blocks[6]; + static void aegis256x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { @@ -180,7 +182,7 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -214,7 +216,7 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; @@ -266,7 +268,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -291,7 +293,7 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -313,7 +315,7 @@ static void decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; const size_t mlen = clen; size_t i; @@ -328,11 +330,11 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } typedef struct _aegis256x2_state { - aes_block_t state[6]; - uint8_t buf[RATE]; - uint64_t adlen; - uint64_t mlen; - size_t pos; + aegis_blocks state; + uint8_t buf[RATE]; + uint64_t adlen; + uint64_t mlen; + size_t pos; } _aegis256x2_state; static void diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index 279fd4f..153a02f 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -1,6 +1,8 @@ #define RATE 64 #define ALIGNMENT 64 +typedef aes_block_t aegis_blocks[6]; + static void aegis256x4_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state) { @@ -199,7 +201,7 @@ static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -233,7 +235,7 @@ static int decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, size_t maclen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; @@ -285,7 +287,7 @@ decrypt_detached(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *mac, static void stream(uint8_t *out, size_t len, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -310,7 +312,7 @@ static void encrypt_unauthenticated(uint8_t *c, const uint8_t *m, size_t mlen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; size_t i; @@ -332,7 +334,7 @@ static void decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t *npub, const uint8_t *k) { - aes_block_t state[6]; + aegis_blocks state; const size_t mlen = clen; size_t i; @@ -347,11 +349,11 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } typedef struct _aegis256x4_state { - aes_block_t state[6]; - uint8_t buf[RATE]; - uint64_t adlen; - uint64_t mlen; - size_t pos; + aegis_blocks state; + uint8_t buf[RATE]; + uint64_t adlen; + uint64_t mlen; + size_t pos; } _aegis256x4_state; static void From efd97145845458a48133cf174e7f38662a11a65d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 14 Nov 2024 00:49:21 +0100 Subject: [PATCH 158/219] Make local copies of the state for AEGIS-256 --- src/aegis256/aegis256_common.h | 90 +++++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 23 deletions(-) diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index ffbc075..9d309ab 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -281,7 +281,7 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } typedef struct _aegis256_state { - aegis_blocks state; + aegis_blocks blocks; uint8_t buf[RATE]; uint64_t adlen; uint64_t mlen; @@ -292,37 +292,45 @@ static void state_init(aegis256_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { + aegis_blocks blocks; _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; + memcpy(blocks, st->blocks, sizeof blocks); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; - aegis256_init(k, npub, st->state); + aegis256_init(k, npub, blocks); for (i = 0; i + RATE <= adlen; i += RATE) { - aegis256_absorb(ad + i, st->state); + aegis256_absorb(ad + i, blocks); } if (adlen % RATE) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen % RATE); - aegis256_absorb(st->buf, st->state); + aegis256_absorb(st->buf, blocks); } st->adlen = adlen; + + memset(st->buf, 0, sizeof st->buf); } static int state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *written, const uint8_t *m, size_t mlen) { + aegis_blocks blocks; _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += mlen; if (st->pos != 0) { @@ -341,7 +349,7 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w return -1; } clen_max -= RATE; - aegis256_enc(c, st->buf, st->state); + aegis256_enc(c, st->buf, blocks); *written += RATE; c += RATE; st->pos = 0; @@ -354,7 +362,7 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w return -1; } for (i = 0; i + RATE <= mlen; i += RATE) { - aegis256_enc(c + i, m + i, st->state); + aegis256_enc(c + i, m + i, blocks); } *written += i; left = mlen % RATE; @@ -362,6 +370,9 @@ state_encrypt_update(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *w memcpy(st->buf, m + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -369,12 +380,15 @@ static int state_encrypt_detached_final(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *written, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos) { errno = ERANGE; @@ -383,13 +397,15 @@ state_encrypt_detached_final(aegis256_state *st_, uint8_t *c, size_t clen_max, s if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis256_enc(dst, src, st->state); + aegis256_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis256_mac(mac, maclen, st->adlen, st->mlen, st->state); + aegis256_mac(mac, maclen, st->adlen, st->mlen, blocks); *written = st->pos; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -397,12 +413,15 @@ static int state_encrypt_final(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen) { + aegis_blocks blocks; _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos + maclen) { errno = ERANGE; @@ -411,13 +430,15 @@ state_encrypt_final(aegis256_state *st_, uint8_t *c, size_t clen_max, size_t *wr if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis256_enc(dst, src, st->state); + aegis256_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis256_mac(c + st->pos, maclen, st->adlen, st->mlen, st->state); + aegis256_mac(c + st->pos, maclen, st->adlen, st->mlen, blocks); *written = st->pos + maclen; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -425,6 +446,7 @@ static int state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *c, size_t clen) { + aegis_blocks blocks; _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); @@ -432,6 +454,8 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += clen; @@ -455,10 +479,10 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, return -1; } mlen_max -= RATE; - aegis256_dec(m, st->buf, st->state); + aegis256_dec(m, st->buf, blocks); m += RATE; } else { - aegis256_dec(dst, st->buf, st->state); + aegis256_dec(dst, st->buf, blocks); } *written += RATE; } @@ -469,11 +493,11 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, return -1; } for (i = 0; i + RATE <= clen; i += RATE) { - aegis256_dec(m + i, c + i, st->state); + aegis256_dec(m + i, c + i, blocks); } } else { for (i = 0; i + RATE <= clen; i += RATE) { - aegis256_dec(dst, c + i, st->state); + aegis256_dec(dst, c + i, blocks); } } *written += i; @@ -482,6 +506,9 @@ state_decrypt_detached_update(aegis256_state *st_, uint8_t *m, size_t mlen_max, memcpy(st->buf, c + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -489,6 +516,7 @@ static int state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { + aegis_blocks blocks; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; _aegis256_state *const st = @@ -496,6 +524,8 @@ state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, s ~(uintptr_t) (ALIGNMENT - 1)); int ret; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (st->pos != 0) { if (m != NULL) { @@ -503,12 +533,12 @@ state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, s errno = ERANGE; return -1; } - aegis256_declast(m, st->buf, st->pos, st->state); + aegis256_declast(m, st->buf, st->pos, blocks); } else { - aegis256_declast(dst, st->buf, st->pos, st->state); + aegis256_declast(dst, st->buf, st->pos, blocks); } } - aegis256_mac(computed_mac, maclen, st->adlen, st->mlen, st->state); + aegis256_mac(computed_mac, maclen, st->adlen, st->mlen, blocks); ret = -1; if (maclen == 16) { ret = aegis_verify_16(computed_mac, mac); @@ -520,18 +550,24 @@ state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, s } else { memset(m, 0, st->pos); } + + memcpy(st->blocks, blocks, sizeof blocks); + return ret; } static int state_mac_update(aegis256_state *st_, const uint8_t *ad, size_t adlen) { + aegis_blocks blocks; _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; st->adlen += adlen; if (left != 0) { @@ -540,7 +576,7 @@ state_mac_update(aegis256_state *st_, const uint8_t *ad, size_t adlen) return 0; } memcpy(st->buf + left, ad, RATE - left); - aegis256_absorb(st->buf, st->state); + aegis256_absorb(st->buf, blocks); ad += RATE - left; adlen -= RATE - left; } @@ -551,33 +587,41 @@ state_mac_update(aegis256_state *st_, const uint8_t *ad, size_t adlen) msg1 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 1); COMPILER_ASSERT(AES_BLOCK_LENGTH * 2 == RATE * 2); - aegis256_update(st->state, msg0); - aegis256_update(st->state, msg1); + aegis256_update(blocks, msg0); + aegis256_update(blocks, msg1); } for (; i + RATE <= adlen; i += RATE) { - aegis256_absorb(ad + i, st->state); + aegis256_absorb(ad + i, blocks); } if (i < adlen) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen - i); } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } static int state_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis256_state *const st = (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; if (left != 0) { memset(st->buf + left, 0, RATE - left); - aegis256_absorb(st->buf, st->state); + aegis256_absorb(st->buf, blocks); } - aegis256_mac(mac, maclen, st->adlen, 0, st->state); + aegis256_mac(mac, maclen, st->adlen, 0, blocks); + + memcpy(st->blocks, blocks, sizeof blocks); return 0; } From 5f00c75afb8a07bf00c5358f0c38abfa334109c8 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 14 Nov 2024 00:58:16 +0100 Subject: [PATCH 159/219] blockify 128x2 --- src/aegis128x2/aegis128x2_common.h | 90 ++++++++++++++++++++++-------- src/aegis256/aegis256_common.h | 2 + 2 files changed, 69 insertions(+), 23 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 5e35843..d20a0b3 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -329,7 +329,7 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } typedef struct _aegis128x2_state { - aegis_blocks state; + aegis_blocks blocks; uint8_t buf[RATE]; uint64_t adlen; uint64_t mlen; @@ -340,37 +340,45 @@ static void state_init(aegis128x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { + aegis_blocks blocks; _aegis128x2_state *const st = (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; + memcpy(blocks, st->blocks, sizeof blocks); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; - aegis128x2_init(k, npub, st->state); + aegis128x2_init(k, npub, blocks); for (i = 0; i + RATE <= adlen; i += RATE) { - aegis128x2_absorb(ad + i, st->state); + aegis128x2_absorb(ad + i, blocks); } if (adlen % RATE) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen % RATE); - aegis128x2_absorb(st->buf, st->state); + aegis128x2_absorb(st->buf, blocks); } st->adlen = adlen; + + memcpy(st->blocks, blocks, sizeof blocks); } static int state_encrypt_update(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, const uint8_t *m, size_t mlen) { + aegis_blocks blocks; _aegis128x2_state *const st = (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += mlen; if (st->pos != 0) { @@ -389,7 +397,7 @@ state_encrypt_update(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t return -1; } clen_max -= RATE; - aegis128x2_enc(c, st->buf, st->state); + aegis128x2_enc(c, st->buf, blocks); *written += RATE; c += RATE; st->pos = 0; @@ -402,7 +410,7 @@ state_encrypt_update(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t return -1; } for (i = 0; i + RATE <= mlen; i += RATE) { - aegis128x2_enc(c + i, m + i, st->state); + aegis128x2_enc(c + i, m + i, blocks); } *written += i; left = mlen % RATE; @@ -410,6 +418,9 @@ state_encrypt_update(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t memcpy(st->buf, m + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -417,12 +428,15 @@ static int state_encrypt_detached_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis128x2_state *const st = (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos) { errno = ERANGE; @@ -431,13 +445,15 @@ state_encrypt_detached_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis128x2_enc(dst, src, st->state); + aegis128x2_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis128x2_mac(mac, maclen, st->adlen, st->mlen, st->state); + aegis128x2_mac(mac, maclen, st->adlen, st->mlen, blocks); *written = st->pos; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -445,12 +461,15 @@ static int state_encrypt_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen) { + aegis_blocks blocks; _aegis128x2_state *const st = (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos + maclen) { errno = ERANGE; @@ -459,13 +478,15 @@ state_encrypt_final(aegis128x2_state *st_, uint8_t *c, size_t clen_max, size_t * if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis128x2_enc(dst, src, st->state); + aegis128x2_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis128x2_mac(c + st->pos, maclen, st->adlen, st->mlen, st->state); + aegis128x2_mac(c + st->pos, maclen, st->adlen, st->mlen, blocks); *written = st->pos + maclen; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -473,6 +494,7 @@ static int state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *c, size_t clen) { + aegis_blocks blocks; _aegis128x2_state *const st = (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); @@ -480,6 +502,8 @@ state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += clen; @@ -503,10 +527,10 @@ state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max return -1; } mlen_max -= RATE; - aegis128x2_dec(m, st->buf, st->state); + aegis128x2_dec(m, st->buf, blocks); m += RATE; } else { - aegis128x2_dec(dst, st->buf, st->state); + aegis128x2_dec(dst, st->buf, blocks); } *written += RATE; } @@ -517,11 +541,11 @@ state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max return -1; } for (i = 0; i + RATE <= clen; i += RATE) { - aegis128x2_dec(m + i, c + i, st->state); + aegis128x2_dec(m + i, c + i, blocks); } } else { for (i = 0; i + RATE <= clen; i += RATE) { - aegis128x2_dec(dst, c + i, st->state); + aegis128x2_dec(dst, c + i, blocks); } } *written += i; @@ -530,6 +554,9 @@ state_decrypt_detached_update(aegis128x2_state *st_, uint8_t *m, size_t mlen_max memcpy(st->buf, c + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -537,6 +564,7 @@ static int state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { + aegis_blocks blocks; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; _aegis128x2_state *const st = @@ -544,6 +572,8 @@ state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, ~(uintptr_t) (ALIGNMENT - 1)); int ret; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (st->pos != 0) { if (m != NULL) { @@ -551,12 +581,12 @@ state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, errno = ERANGE; return -1; } - aegis128x2_declast(m, st->buf, st->pos, st->state); + aegis128x2_declast(m, st->buf, st->pos, blocks); } else { - aegis128x2_declast(dst, st->buf, st->pos, st->state); + aegis128x2_declast(dst, st->buf, st->pos, blocks); } } - aegis128x2_mac(computed_mac, maclen, st->adlen, st->mlen, st->state); + aegis128x2_mac(computed_mac, maclen, st->adlen, st->mlen, blocks); ret = -1; if (maclen == 16) { ret = aegis_verify_16(computed_mac, mac); @@ -568,18 +598,24 @@ state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, } else { memset(m, 0, st->pos); } + + memcpy(st->blocks, blocks, sizeof blocks); + return ret; } static int state_mac_update(aegis128x2_state *st_, const uint8_t *ad, size_t adlen) { + aegis_blocks blocks; _aegis128x2_state *const st = (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; st->adlen += adlen; if (left != 0) { @@ -588,7 +624,7 @@ state_mac_update(aegis128x2_state *st_, const uint8_t *ad, size_t adlen) return 0; } memcpy(st->buf + left, ad, RATE - left); - aegis128x2_absorb(st->buf, st->state); + aegis128x2_absorb(st->buf, blocks); ad += RATE - left; adlen -= RATE - left; } @@ -601,33 +637,41 @@ state_mac_update(aegis128x2_state *st_, const uint8_t *ad, size_t adlen) msg3 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 3); COMPILER_ASSERT(AES_BLOCK_LENGTH * 4 == RATE * 2); - aegis128x2_update(st->state, msg0, msg1); - aegis128x2_update(st->state, msg2, msg3); + aegis128x2_update(blocks, msg0, msg1); + aegis128x2_update(blocks, msg2, msg3); } for (; i + RATE <= adlen; i += RATE) { - aegis128x2_absorb(ad + i, st->state); + aegis128x2_absorb(ad + i, blocks); } if (i < adlen) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen - i); } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } static int state_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis128x2_state *const st = (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; if (left != 0) { memset(st->buf + left, 0, RATE - left); - aegis128x2_absorb(st->buf, st->state); + aegis128x2_absorb(st->buf, blocks); } - aegis128x2_mac(mac, maclen, st->adlen, 0, st->state); + aegis128x2_mac(mac, maclen, st->adlen, 0, blocks); + + memcpy(st->blocks, blocks, sizeof blocks); return 0; } diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 9d309ab..be05a5c 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -316,6 +316,8 @@ state_init(aegis256_state *st_, const uint8_t *ad, size_t adlen, const uint8_t * st->adlen = adlen; memset(st->buf, 0, sizeof st->buf); + + memcpy(st->blocks, blocks, sizeof blocks); } static int From c337380efc4348b0b87abae00dfdba37a8d4b1dc Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 14 Nov 2024 01:02:53 +0100 Subject: [PATCH 160/219] blockify 128x4 --- src/aegis128x4/aegis128x4_common.h | 90 ++++++++++++++++++++++-------- 1 file changed, 67 insertions(+), 23 deletions(-) diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 4468515..45782f0 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -344,7 +344,7 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } typedef struct _aegis128x4_state { - aegis_blocks state; + aegis_blocks blocks; uint8_t buf[RATE]; uint64_t adlen; uint64_t mlen; @@ -355,37 +355,45 @@ static void state_init(aegis128x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { + aegis_blocks blocks; _aegis128x4_state *const st = (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; + memcpy(blocks, st->blocks, sizeof blocks); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; - aegis128x4_init(k, npub, st->state); + aegis128x4_init(k, npub, blocks); for (i = 0; i + RATE <= adlen; i += RATE) { - aegis128x4_absorb(ad + i, st->state); + aegis128x4_absorb(ad + i, blocks); } if (adlen % RATE) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen % RATE); - aegis128x4_absorb(st->buf, st->state); + aegis128x4_absorb(st->buf, blocks); } st->adlen = adlen; + + memcpy(st->blocks, blocks, sizeof blocks); } static int state_encrypt_update(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, const uint8_t *m, size_t mlen) { + aegis_blocks blocks; _aegis128x4_state *const st = (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += mlen; if (st->pos != 0) { @@ -404,7 +412,7 @@ state_encrypt_update(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t return -1; } clen_max -= RATE; - aegis128x4_enc(c, st->buf, st->state); + aegis128x4_enc(c, st->buf, blocks); *written += RATE; c += RATE; st->pos = 0; @@ -417,7 +425,7 @@ state_encrypt_update(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t return -1; } for (i = 0; i + RATE <= mlen; i += RATE) { - aegis128x4_enc(c + i, m + i, st->state); + aegis128x4_enc(c + i, m + i, blocks); } *written += i; left = mlen % RATE; @@ -425,6 +433,9 @@ state_encrypt_update(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t memcpy(st->buf, m + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -432,12 +443,15 @@ static int state_encrypt_detached_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis128x4_state *const st = (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos) { errno = ERANGE; @@ -446,13 +460,15 @@ state_encrypt_detached_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis128x4_enc(dst, src, st->state); + aegis128x4_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis128x4_mac(mac, maclen, st->adlen, st->mlen, st->state); + aegis128x4_mac(mac, maclen, st->adlen, st->mlen, blocks); *written = st->pos; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -460,12 +476,15 @@ static int state_encrypt_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen) { + aegis_blocks blocks; _aegis128x4_state *const st = (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos + maclen) { errno = ERANGE; @@ -474,13 +493,15 @@ state_encrypt_final(aegis128x4_state *st_, uint8_t *c, size_t clen_max, size_t * if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis128x4_enc(dst, src, st->state); + aegis128x4_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis128x4_mac(c + st->pos, maclen, st->adlen, st->mlen, st->state); + aegis128x4_mac(c + st->pos, maclen, st->adlen, st->mlen, blocks); *written = st->pos + maclen; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -488,6 +509,7 @@ static int state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *c, size_t clen) { + aegis_blocks blocks; _aegis128x4_state *const st = (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); @@ -495,6 +517,8 @@ state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += clen; @@ -518,10 +542,10 @@ state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max return -1; } mlen_max -= RATE; - aegis128x4_dec(m, st->buf, st->state); + aegis128x4_dec(m, st->buf, blocks); m += RATE; } else { - aegis128x4_dec(dst, st->buf, st->state); + aegis128x4_dec(dst, st->buf, blocks); } *written += RATE; } @@ -532,11 +556,11 @@ state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max return -1; } for (i = 0; i + RATE <= clen; i += RATE) { - aegis128x4_dec(m + i, c + i, st->state); + aegis128x4_dec(m + i, c + i, blocks); } } else { for (i = 0; i + RATE <= clen; i += RATE) { - aegis128x4_dec(dst, c + i, st->state); + aegis128x4_dec(dst, c + i, blocks); } } *written += i; @@ -545,6 +569,9 @@ state_decrypt_detached_update(aegis128x4_state *st_, uint8_t *m, size_t mlen_max memcpy(st->buf, c + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -552,6 +579,7 @@ static int state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { + aegis_blocks blocks; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; _aegis128x4_state *const st = @@ -559,6 +587,8 @@ state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, ~(uintptr_t) (ALIGNMENT - 1)); int ret; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (st->pos != 0) { if (m != NULL) { @@ -566,12 +596,12 @@ state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, errno = ERANGE; return -1; } - aegis128x4_declast(m, st->buf, st->pos, st->state); + aegis128x4_declast(m, st->buf, st->pos, blocks); } else { - aegis128x4_declast(dst, st->buf, st->pos, st->state); + aegis128x4_declast(dst, st->buf, st->pos, blocks); } } - aegis128x4_mac(computed_mac, maclen, st->adlen, st->mlen, st->state); + aegis128x4_mac(computed_mac, maclen, st->adlen, st->mlen, blocks); ret = -1; if (maclen == 16) { ret = aegis_verify_16(computed_mac, mac); @@ -583,18 +613,24 @@ state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, } else { memset(m, 0, st->pos); } + + memcpy(st->blocks, blocks, sizeof blocks); + return ret; } static int state_mac_update(aegis128x4_state *st_, const uint8_t *ad, size_t adlen) { + aegis_blocks blocks; _aegis128x4_state *const st = (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; st->adlen += adlen; if (left != 0) { @@ -603,7 +639,7 @@ state_mac_update(aegis128x4_state *st_, const uint8_t *ad, size_t adlen) return 0; } memcpy(st->buf + left, ad, RATE - left); - aegis128x4_absorb(st->buf, st->state); + aegis128x4_absorb(st->buf, blocks); ad += RATE - left; adlen -= RATE - left; } @@ -616,33 +652,41 @@ state_mac_update(aegis128x4_state *st_, const uint8_t *ad, size_t adlen) msg3 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 3); COMPILER_ASSERT(AES_BLOCK_LENGTH * 4 == RATE * 2); - aegis128x4_update(st->state, msg0, msg1); - aegis128x4_update(st->state, msg2, msg3); + aegis128x4_update(blocks, msg0, msg1); + aegis128x4_update(blocks, msg2, msg3); } for (; i + RATE <= adlen; i += RATE) { - aegis128x4_absorb(ad + i, st->state); + aegis128x4_absorb(ad + i, blocks); } if (i < adlen) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen - i); } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } static int state_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis128x4_state *const st = (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; if (left != 0) { memset(st->buf + left, 0, RATE - left); - aegis128x4_absorb(st->buf, st->state); + aegis128x4_absorb(st->buf, blocks); } - aegis128x4_mac(mac, maclen, st->adlen, 0, st->state); + aegis128x4_mac(mac, maclen, st->adlen, 0, blocks); + + memcpy(st->blocks, blocks, sizeof blocks); return 0; } From 3a453ae0d9a6c9b827bac6525e0ec737466f18dc Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 14 Nov 2024 01:09:35 +0100 Subject: [PATCH 161/219] Blockify 256X --- src/aegis256x2/aegis256x2_common.h | 90 ++++++++++++++++++++++-------- src/aegis256x4/aegis256x4_common.h | 90 ++++++++++++++++++++++-------- 2 files changed, 134 insertions(+), 46 deletions(-) diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index 8c7f7c5..f4a35a8 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -330,7 +330,7 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } typedef struct _aegis256x2_state { - aegis_blocks state; + aegis_blocks blocks; uint8_t buf[RATE]; uint64_t adlen; uint64_t mlen; @@ -341,37 +341,45 @@ static void state_init(aegis256x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { + aegis_blocks blocks; _aegis256x2_state *const st = (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; + memcpy(blocks, st->blocks, sizeof blocks); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; - aegis256x2_init(k, npub, st->state); + aegis256x2_init(k, npub, blocks); for (i = 0; i + RATE <= adlen; i += RATE) { - aegis256x2_absorb(ad + i, st->state); + aegis256x2_absorb(ad + i, blocks); } if (adlen % RATE) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen % RATE); - aegis256x2_absorb(st->buf, st->state); + aegis256x2_absorb(st->buf, blocks); } st->adlen = adlen; + + memcpy(st->blocks, blocks, sizeof blocks); } static int state_encrypt_update(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, const uint8_t *m, size_t mlen) { + aegis_blocks blocks; _aegis256x2_state *const st = (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += mlen; if (st->pos != 0) { @@ -390,7 +398,7 @@ state_encrypt_update(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t return -1; } clen_max -= RATE; - aegis256x2_enc(c, st->buf, st->state); + aegis256x2_enc(c, st->buf, blocks); *written += RATE; c += RATE; st->pos = 0; @@ -403,7 +411,7 @@ state_encrypt_update(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t return -1; } for (i = 0; i + RATE <= mlen; i += RATE) { - aegis256x2_enc(c + i, m + i, st->state); + aegis256x2_enc(c + i, m + i, blocks); } *written += i; left = mlen % RATE; @@ -411,6 +419,9 @@ state_encrypt_update(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t memcpy(st->buf, m + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -418,12 +429,15 @@ static int state_encrypt_detached_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis256x2_state *const st = (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos) { errno = ERANGE; @@ -432,13 +446,15 @@ state_encrypt_detached_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis256x2_enc(dst, src, st->state); + aegis256x2_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis256x2_mac(mac, maclen, st->adlen, st->mlen, st->state); + aegis256x2_mac(mac, maclen, st->adlen, st->mlen, blocks); *written = st->pos; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -446,12 +462,15 @@ static int state_encrypt_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen) { + aegis_blocks blocks; _aegis256x2_state *const st = (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos + maclen) { errno = ERANGE; @@ -460,13 +479,15 @@ state_encrypt_final(aegis256x2_state *st_, uint8_t *c, size_t clen_max, size_t * if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis256x2_enc(dst, src, st->state); + aegis256x2_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis256x2_mac(c + st->pos, maclen, st->adlen, st->mlen, st->state); + aegis256x2_mac(c + st->pos, maclen, st->adlen, st->mlen, blocks); *written = st->pos + maclen; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -474,6 +495,7 @@ static int state_decrypt_detached_update(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *c, size_t clen) { + aegis_blocks blocks; _aegis256x2_state *const st = (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); @@ -481,6 +503,8 @@ state_decrypt_detached_update(aegis256x2_state *st_, uint8_t *m, size_t mlen_max size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += clen; @@ -504,10 +528,10 @@ state_decrypt_detached_update(aegis256x2_state *st_, uint8_t *m, size_t mlen_max return -1; } mlen_max -= RATE; - aegis256x2_dec(m, st->buf, st->state); + aegis256x2_dec(m, st->buf, blocks); m += RATE; } else { - aegis256x2_dec(dst, st->buf, st->state); + aegis256x2_dec(dst, st->buf, blocks); } *written += RATE; } @@ -518,11 +542,11 @@ state_decrypt_detached_update(aegis256x2_state *st_, uint8_t *m, size_t mlen_max return -1; } for (i = 0; i + RATE <= clen; i += RATE) { - aegis256x2_dec(m + i, c + i, st->state); + aegis256x2_dec(m + i, c + i, blocks); } } else { for (i = 0; i + RATE <= clen; i += RATE) { - aegis256x2_dec(dst, c + i, st->state); + aegis256x2_dec(dst, c + i, blocks); } } *written += i; @@ -531,6 +555,9 @@ state_decrypt_detached_update(aegis256x2_state *st_, uint8_t *m, size_t mlen_max memcpy(st->buf, c + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -538,6 +565,7 @@ static int state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { + aegis_blocks blocks; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; _aegis256x2_state *const st = @@ -545,6 +573,8 @@ state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, ~(uintptr_t) (ALIGNMENT - 1)); int ret; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (st->pos != 0) { if (m != NULL) { @@ -552,12 +582,12 @@ state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, errno = ERANGE; return -1; } - aegis256x2_declast(m, st->buf, st->pos, st->state); + aegis256x2_declast(m, st->buf, st->pos, blocks); } else { - aegis256x2_declast(dst, st->buf, st->pos, st->state); + aegis256x2_declast(dst, st->buf, st->pos, blocks); } } - aegis256x2_mac(computed_mac, maclen, st->adlen, st->mlen, st->state); + aegis256x2_mac(computed_mac, maclen, st->adlen, st->mlen, blocks); ret = -1; if (maclen == 16) { ret = aegis_verify_16(computed_mac, mac); @@ -569,18 +599,24 @@ state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, } else { memset(m, 0, st->pos); } + + memcpy(st->blocks, blocks, sizeof blocks); + return ret; } static int state_mac_update(aegis256x2_state *st_, const uint8_t *ad, size_t adlen) { + aegis_blocks blocks; _aegis256x2_state *const st = (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; st->adlen += adlen; if (left != 0) { @@ -589,7 +625,7 @@ state_mac_update(aegis256x2_state *st_, const uint8_t *ad, size_t adlen) return 0; } memcpy(st->buf + left, ad, RATE - left); - aegis256x2_absorb(st->buf, st->state); + aegis256x2_absorb(st->buf, blocks); ad += RATE - left; adlen -= RATE - left; } @@ -600,33 +636,41 @@ state_mac_update(aegis256x2_state *st_, const uint8_t *ad, size_t adlen) msg1 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 1); COMPILER_ASSERT(AES_BLOCK_LENGTH * 2 == RATE * 2); - aegis256x2_update(st->state, msg0); - aegis256x2_update(st->state, msg1); + aegis256x2_update(blocks, msg0); + aegis256x2_update(blocks, msg1); } for (; i + RATE <= adlen; i += RATE) { - aegis256x2_absorb(ad + i, st->state); + aegis256x2_absorb(ad + i, blocks); } if (i < adlen) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen - i); } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } static int state_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis256x2_state *const st = (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; if (left != 0) { memset(st->buf + left, 0, RATE - left); - aegis256x2_absorb(st->buf, st->state); + aegis256x2_absorb(st->buf, blocks); } - aegis256x2_mac(mac, maclen, st->adlen, 0, st->state); + aegis256x2_mac(mac, maclen, st->adlen, 0, blocks); + + memcpy(st->blocks, blocks, sizeof blocks); return 0; } diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index 153a02f..a8a00d5 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -349,7 +349,7 @@ decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, const uint8_t } typedef struct _aegis256x4_state { - aegis_blocks state; + aegis_blocks blocks; uint8_t buf[RATE]; uint64_t adlen; uint64_t mlen; @@ -360,37 +360,45 @@ static void state_init(aegis256x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) { + aegis_blocks blocks; _aegis256x4_state *const st = (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; + memcpy(blocks, st->blocks, sizeof blocks); + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->mlen = 0; st->pos = 0; - aegis256x4_init(k, npub, st->state); + aegis256x4_init(k, npub, blocks); for (i = 0; i + RATE <= adlen; i += RATE) { - aegis256x4_absorb(ad + i, st->state); + aegis256x4_absorb(ad + i, blocks); } if (adlen % RATE) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen % RATE); - aegis256x4_absorb(st->buf, st->state); + aegis256x4_absorb(st->buf, blocks); } st->adlen = adlen; + + memcpy(st->blocks, blocks, sizeof blocks); } static int state_encrypt_update(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, const uint8_t *m, size_t mlen) { + aegis_blocks blocks; _aegis256x4_state *const st = (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += mlen; if (st->pos != 0) { @@ -409,7 +417,7 @@ state_encrypt_update(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t return -1; } clen_max -= RATE; - aegis256x4_enc(c, st->buf, st->state); + aegis256x4_enc(c, st->buf, blocks); *written += RATE; c += RATE; st->pos = 0; @@ -422,7 +430,7 @@ state_encrypt_update(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t return -1; } for (i = 0; i + RATE <= mlen; i += RATE) { - aegis256x4_enc(c + i, m + i, st->state); + aegis256x4_enc(c + i, m + i, blocks); } *written += i; left = mlen % RATE; @@ -430,6 +438,9 @@ state_encrypt_update(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t memcpy(st->buf, m + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -437,12 +448,15 @@ static int state_encrypt_detached_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis256x4_state *const st = (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos) { errno = ERANGE; @@ -451,13 +465,15 @@ state_encrypt_detached_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis256x4_enc(dst, src, st->state); + aegis256x4_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis256x4_mac(mac, maclen, st->adlen, st->mlen, st->state); + aegis256x4_mac(mac, maclen, st->adlen, st->mlen, blocks); *written = st->pos; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -465,12 +481,15 @@ static int state_encrypt_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t *written, size_t maclen) { + aegis_blocks blocks; _aegis256x4_state *const st = (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); CRYPTO_ALIGN(ALIGNMENT) uint8_t src[RATE]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (clen_max < st->pos + maclen) { errno = ERANGE; @@ -479,13 +498,15 @@ state_encrypt_final(aegis256x4_state *st_, uint8_t *c, size_t clen_max, size_t * if (st->pos != 0) { memset(src, 0, sizeof src); memcpy(src, st->buf, st->pos); - aegis256x4_enc(dst, src, st->state); + aegis256x4_enc(dst, src, blocks); memcpy(c, dst, st->pos); } - aegis256x4_mac(c + st->pos, maclen, st->adlen, st->mlen, st->state); + aegis256x4_mac(c + st->pos, maclen, st->adlen, st->mlen, blocks); *written = st->pos + maclen; + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -493,6 +514,7 @@ static int state_decrypt_detached_update(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *c, size_t clen) { + aegis_blocks blocks; _aegis256x4_state *const st = (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); @@ -500,6 +522,8 @@ state_decrypt_detached_update(aegis256x4_state *st_, uint8_t *m, size_t mlen_max size_t i = 0; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; st->mlen += clen; @@ -523,10 +547,10 @@ state_decrypt_detached_update(aegis256x4_state *st_, uint8_t *m, size_t mlen_max return -1; } mlen_max -= RATE; - aegis256x4_dec(m, st->buf, st->state); + aegis256x4_dec(m, st->buf, blocks); m += RATE; } else { - aegis256x4_dec(dst, st->buf, st->state); + aegis256x4_dec(dst, st->buf, blocks); } *written += RATE; } @@ -537,11 +561,11 @@ state_decrypt_detached_update(aegis256x4_state *st_, uint8_t *m, size_t mlen_max return -1; } for (i = 0; i + RATE <= clen; i += RATE) { - aegis256x4_dec(m + i, c + i, st->state); + aegis256x4_dec(m + i, c + i, blocks); } } else { for (i = 0; i + RATE <= clen; i += RATE) { - aegis256x4_dec(dst, c + i, st->state); + aegis256x4_dec(dst, c + i, blocks); } } *written += i; @@ -550,6 +574,9 @@ state_decrypt_detached_update(aegis256x4_state *st_, uint8_t *m, size_t mlen_max memcpy(st->buf, c + i, left); st->pos = left; } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } @@ -557,6 +584,7 @@ static int state_decrypt_detached_final(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen) { + aegis_blocks blocks; CRYPTO_ALIGN(16) uint8_t computed_mac[32]; CRYPTO_ALIGN(ALIGNMENT) uint8_t dst[RATE]; _aegis256x4_state *const st = @@ -564,6 +592,8 @@ state_decrypt_detached_final(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, ~(uintptr_t) (ALIGNMENT - 1)); int ret; + memcpy(blocks, st->blocks, sizeof blocks); + *written = 0; if (st->pos != 0) { if (m != NULL) { @@ -571,12 +601,12 @@ state_decrypt_detached_final(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, errno = ERANGE; return -1; } - aegis256x4_declast(m, st->buf, st->pos, st->state); + aegis256x4_declast(m, st->buf, st->pos, blocks); } else { - aegis256x4_declast(dst, st->buf, st->pos, st->state); + aegis256x4_declast(dst, st->buf, st->pos, blocks); } } - aegis256x4_mac(computed_mac, maclen, st->adlen, st->mlen, st->state); + aegis256x4_mac(computed_mac, maclen, st->adlen, st->mlen, blocks); ret = -1; if (maclen == 16) { ret = aegis_verify_16(computed_mac, mac); @@ -588,18 +618,24 @@ state_decrypt_detached_final(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, } else { memset(m, 0, st->pos); } + + memcpy(st->blocks, blocks, sizeof blocks); + return ret; } static int state_mac_update(aegis256x4_state *st_, const uint8_t *ad, size_t adlen) { + aegis_blocks blocks; _aegis256x4_state *const st = (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; st->adlen += adlen; if (left != 0) { @@ -608,7 +644,7 @@ state_mac_update(aegis256x4_state *st_, const uint8_t *ad, size_t adlen) return 0; } memcpy(st->buf + left, ad, RATE - left); - aegis256x4_absorb(st->buf, st->state); + aegis256x4_absorb(st->buf, blocks); ad += RATE - left; adlen -= RATE - left; } @@ -619,33 +655,41 @@ state_mac_update(aegis256x4_state *st_, const uint8_t *ad, size_t adlen) msg1 = AES_BLOCK_LOAD(ad + i + AES_BLOCK_LENGTH * 1); COMPILER_ASSERT(AES_BLOCK_LENGTH * 2 == RATE * 2); - aegis256x4_update(st->state, msg0); - aegis256x4_update(st->state, msg1); + aegis256x4_update(blocks, msg0); + aegis256x4_update(blocks, msg1); } for (; i + RATE <= adlen; i += RATE) { - aegis256x4_absorb(ad + i, st->state); + aegis256x4_absorb(ad + i, blocks); } if (i < adlen) { memset(st->buf, 0, RATE); memcpy(st->buf, ad + i, adlen - i); } + + memcpy(st->blocks, blocks, sizeof blocks); + return 0; } static int state_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen) { + aegis_blocks blocks; _aegis256x4_state *const st = (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); size_t left; + memcpy(blocks, st->blocks, sizeof blocks); + left = st->adlen % RATE; if (left != 0) { memset(st->buf + left, 0, RATE - left); - aegis256x4_absorb(st->buf, st->state); + aegis256x4_absorb(st->buf, blocks); } - aegis256x4_mac(mac, maclen, st->adlen, 0, st->state); + aegis256x4_mac(mac, maclen, st->adlen, 0, blocks); + + memcpy(st->blocks, blocks, sizeof blocks); return 0; } From cf0bf0e0ebd857e78555941a521a00211911e974 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 14 Nov 2024 01:10:53 +0100 Subject: [PATCH 162/219] Bump --- CMakeLists.txt | 2 +- build.zig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 93c0576..4b4ada9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ configure_package_CONFIG_FILE("${CONFIG_TEMPLATE_FILE}" "${CONFIG_FILE}" install(FILES "${CONFIG_FILE}" DESTINATION "${INSTALL_CONFIG_DIR}") -write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.1.24 COMPATIBILITY AnyNewerVersion) +write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.1.25 COMPATIBILITY AnyNewerVersion) install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" DESTINATION "${INSTALL_CONFIG_DIR}") export(EXPORT "${TARGETS_EXPORT_NAME}" FILE "${TARGETS_EXPORT_FILE}" NAMESPACE "${PROJECT_NAME}::") diff --git a/build.zig b/build.zig index 2fa1098..8147388 100644 --- a/build.zig +++ b/build.zig @@ -3,7 +3,7 @@ const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{ .preferred_optimize_mode = .ReleaseFast }); - const version = std.SemanticVersion.parse("0.1.24") catch unreachable; + const version = std.SemanticVersion.parse("0.1.25") catch unreachable; const lib = b.addStaticLibrary(.{ .name = "aegis", From 479326af1c47c489f3f17aa1096631ba035fe449 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 4 Dec 2024 17:17:02 +0100 Subject: [PATCH 163/219] aegis*_mac(): use uint64_t for the message and ad sizes This is useful on 32-bit machines, if the streaming API is used with very large inputs. --- src/aegis128l/aegis128l_common.h | 4 ++-- src/aegis128x2/aegis128x2_common.h | 4 ++-- src/aegis128x4/aegis128x4_common.h | 4 ++-- src/aegis256/aegis256_common.h | 4 ++-- src/aegis256x2/aegis256x2_common.h | 4 ++-- src/aegis256x4/aegis256x4_common.h | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 7879c7f..6a75a3b 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -36,12 +36,12 @@ aegis128l_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const stat } static void -aegis128l_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state) +aegis128l_mac(uint8_t *mac, size_t maclen, uint64_t adlen, uint64_t mlen, aes_block_t *const state) { aes_block_t tmp; int i; - tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3); + tmp = AES_BLOCK_LOAD_64x2(mlen << 3, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index d20a0b3..959cf21 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -57,14 +57,14 @@ aegis128x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const sta } static void -aegis128x2_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state) +aegis128x2_mac(uint8_t *mac, size_t maclen, uint64_t adlen, uint64_t mlen, aes_block_t *const state) { uint8_t mac_multi_0[AES_BLOCK_LENGTH]; uint8_t mac_multi_1[AES_BLOCK_LENGTH]; aes_block_t tmp; int i; - tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3); + tmp = AES_BLOCK_LOAD_64x2(mlen << 3, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 45782f0..16cc63a 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -69,14 +69,14 @@ aegis128x4_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const sta } static void -aegis128x4_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state) +aegis128x4_mac(uint8_t *mac, size_t maclen, uint64_t adlen, uint64_t mlen, aes_block_t *const state) { uint8_t mac_multi_0[AES_BLOCK_LENGTH]; uint8_t mac_multi_1[AES_BLOCK_LENGTH]; aes_block_t tmp; int i; - tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3); + tmp = AES_BLOCK_LOAD_64x2(mlen << 3, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index be05a5c..908ced5 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -38,12 +38,12 @@ aegis256_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const state } static void -aegis256_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state) +aegis256_mac(uint8_t *mac, size_t maclen, uint64_t adlen, uint64_t mlen, aes_block_t *const state) { aes_block_t tmp; int i; - tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3); + tmp = AES_BLOCK_LOAD_64x2(mlen << 3, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index f4a35a8..94157dd 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -74,14 +74,14 @@ aegis256x2_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const sta } static void -aegis256x2_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state) +aegis256x2_mac(uint8_t *mac, size_t maclen, uint64_t adlen, uint64_t mlen, aes_block_t *const state) { uint8_t mac_multi_0[AES_BLOCK_LENGTH]; uint8_t mac_multi_1[AES_BLOCK_LENGTH]; aes_block_t tmp; int i; - tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3); + tmp = AES_BLOCK_LOAD_64x2(mlen << 3, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index a8a00d5..b28a3d5 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -90,14 +90,14 @@ aegis256x4_init(const uint8_t *key, const uint8_t *nonce, aes_block_t *const sta } static void -aegis256x4_mac(uint8_t *mac, size_t maclen, size_t adlen, size_t mlen, aes_block_t *const state) +aegis256x4_mac(uint8_t *mac, size_t maclen, uint64_t adlen, uint64_t mlen, aes_block_t *const state) { uint8_t mac_multi_0[AES_BLOCK_LENGTH]; uint8_t mac_multi_1[AES_BLOCK_LENGTH]; aes_block_t tmp; int i; - tmp = AES_BLOCK_LOAD_64x2(((uint64_t) mlen) << 3, ((uint64_t) adlen) << 3); + tmp = AES_BLOCK_LOAD_64x2(mlen << 3, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { From 7801a0393d753adf70cbf19748b8fcbd563fd336 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 4 Dec 2024 19:16:40 +0100 Subject: [PATCH 164/219] mac_init(): require a nonce --- src/aegis128l/aegis128l.c | 4 +--- src/aegis128x2/aegis128x2.c | 5 +---- src/aegis128x4/aegis128x4.c | 5 +---- src/aegis256/aegis256.c | 5 +---- src/aegis256x2/aegis256x2.c | 5 +---- src/aegis256x4/aegis256x4.c | 5 +---- src/include/aegis128l.h | 3 +-- src/include/aegis128x2.h | 4 ++-- src/include/aegis128x4.h | 4 ++-- src/include/aegis256.h | 3 +-- src/include/aegis256x2.h | 4 ++-- src/include/aegis256x4.h | 4 ++-- src/test/benchmark.zig | 24 ++++++++++++++++++------ src/test/main.zig | 12 ++++++------ 14 files changed, 40 insertions(+), 47 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 468b53a..90a5b38 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -175,10 +175,8 @@ aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, con } void -aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k) +aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k, const uint8_t *npub) { - const uint8_t npub[aegis128l_NPUBBYTES] = { 0 }; - memset(st_, 0, sizeof *st_); implementation->state_init(st_, NULL, 0, npub, k); } diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index 55dcebe..9b4b26a 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -176,11 +176,8 @@ aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co } void -aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k) +aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k, const uint8_t *npub) { - const uint8_t npub[aegis128x2_NPUBBYTES] = { 0 }; - - memset(st_, 0, sizeof *st_); implementation->state_init(st_, NULL, 0, npub, k); } diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index f718362..4a8cb0e 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -177,11 +177,8 @@ aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co } void -aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k) +aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k, const uint8_t *npub) { - const uint8_t npub[aegis128x4_NPUBBYTES] = { 0 }; - - memset(st_, 0, sizeof *st_); implementation->state_init(st_, NULL, 0, npub, k); } diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index c697f01..31e71c0 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -175,11 +175,8 @@ aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, cons } void -aegis256_mac_init(aegis256_state *st_, const uint8_t *k) +aegis256_mac_init(aegis256_state *st_, const uint8_t *k, const uint8_t *npub) { - const uint8_t npub[aegis256_NPUBBYTES] = { 0 }; - - memset(st_, 0, sizeof *st_); implementation->state_init(st_, NULL, 0, npub, k); } diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index 241b898..0777d7f 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -176,11 +176,8 @@ aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co } void -aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k) +aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k, const uint8_t *npub) { - const uint8_t npub[aegis256x2_NPUBBYTES] = { 0 }; - - memset(st_, 0, sizeof *st_); implementation->state_init(st_, NULL, 0, npub, k); } diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index 3fc7741..6d430f8 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -177,11 +177,8 @@ aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co } void -aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k) +aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k, const uint8_t *npub) { - const uint8_t npub[aegis256x4_NPUBBYTES] = { 0 }; - - memset(st_, 0, sizeof *st_); implementation->state_init(st_, NULL, 0, npub, k); } diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 7ceaa8f..5cd3738 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -258,7 +258,6 @@ void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen * k: key input buffer (16 bytes) * * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). * - If the key is secret, the MAC is secure against forgery. * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * @@ -268,7 +267,7 @@ void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen * with `aegis128l_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. */ -void aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k); +void aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 8ff0f17..4e0380d 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -258,7 +258,7 @@ void aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * k: key input buffer (16 bytes) * * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). + * - The nonce MUST NOT be reused with the same key. * - If the key is secret, the MAC is secure against forgery. * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * @@ -268,7 +268,7 @@ void aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * with `aegis128x2_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. */ -void aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k); +void aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index 5e5fb70..31d20ff 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -258,7 +258,7 @@ void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * k: key input buffer (16 bytes) * * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). + * - The nonce MUST NOT be reused with the same key. * - If the key is secret, the MAC is secure against forgery. * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * @@ -268,7 +268,7 @@ void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * with `aegis128x4_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. */ -void aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k); +void aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. diff --git a/src/include/aegis256.h b/src/include/aegis256.h index 309a244..097a72a 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -258,7 +258,6 @@ void aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, * k: key input buffer (32 bytes) * * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). * - If the key is secret, the MAC is secure against forgery. * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * @@ -268,7 +267,7 @@ void aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, * with `aegis256_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. */ -void aegis256_mac_init(aegis256_state *st_, const uint8_t *k); +void aegis256_mac_init(aegis256_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index 419c989..27ec1c9 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -258,7 +258,7 @@ void aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * k: key input buffer (32 bytes) * * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). + * - The nonce MUST NOT be reused with the same key. * - If the key is secret, the MAC is secure against forgery. * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * @@ -268,7 +268,7 @@ void aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * with `aegis256x2_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. */ -void aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k); +void aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index a04b761..db276ad 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -258,7 +258,7 @@ void aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * k: key input buffer (32 bytes) * * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce is not used in the MAC mode (fixed to zero). + * - The nonce MUST NOT be reused with the same key. * - If the key is secret, the MAC is secure against forgery. * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * @@ -268,7 +268,7 @@ void aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * with `aegis256_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. */ -void aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k); +void aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index 35e73f3..2165244 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -202,12 +202,14 @@ fn bench_aegis128x4() !void { fn bench_aegis128l_mac() !void { var key: [aegis.aegis128l_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis128l_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; var st0: aegis.aegis128l_state = undefined; random.bytes(&key); + random.bytes(&nonce); random.bytes(&buf); - aegis.aegis128l_mac_init(&st0, &key); + aegis.aegis128l_mac_init(&st0, &key, &nonce); var timer = try Timer.start(); const start = timer.lap(); @@ -228,12 +230,14 @@ fn bench_aegis128l_mac() !void { fn bench_aegis128x2_mac() !void { var key: [aegis.aegis128x2_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis128x2_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; var st0: aegis.aegis128x2_state = undefined; random.bytes(&key); + random.bytes(&nonce); random.bytes(&buf); - aegis.aegis128x2_mac_init(&st0, &key); + aegis.aegis128x2_mac_init(&st0, &key, &nonce); var timer = try Timer.start(); const start = timer.lap(); @@ -254,12 +258,14 @@ fn bench_aegis128x2_mac() !void { fn bench_aegis128x4_mac() !void { var key: [aegis.aegis128x4_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis128x4_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; var st0: aegis.aegis128x4_state = undefined; random.bytes(&key); + random.bytes(&nonce); random.bytes(&buf); - aegis.aegis128x4_mac_init(&st0, &key); + aegis.aegis128x4_mac_init(&st0, &key, &nonce); var timer = try Timer.start(); const start = timer.lap(); @@ -280,12 +286,14 @@ fn bench_aegis128x4_mac() !void { fn bench_aegis256_mac() !void { var key: [aegis.aegis256_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; var st0: aegis.aegis256_state = undefined; random.bytes(&key); + random.bytes(&nonce); random.bytes(&buf); - aegis.aegis256_mac_init(&st0, &key); + aegis.aegis256_mac_init(&st0, &key, &nonce); var timer = try Timer.start(); const start = timer.lap(); @@ -306,12 +314,14 @@ fn bench_aegis256_mac() !void { fn bench_aegis256x2_mac() !void { var key: [aegis.aegis256x2_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis256x2_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; var st0: aegis.aegis256x2_state = undefined; random.bytes(&key); + random.bytes(&nonce); random.bytes(&buf); - aegis.aegis256x2_mac_init(&st0, &key); + aegis.aegis256x2_mac_init(&st0, &key, &nonce); var timer = try Timer.start(); const start = timer.lap(); @@ -332,12 +342,14 @@ fn bench_aegis256x2_mac() !void { fn bench_aegis256x4_mac() !void { var key: [aegis.aegis256x4_KEYBYTES]u8 = undefined; + var nonce: [aegis.aegis256x2_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; var st0: aegis.aegis256x4_state = undefined; random.bytes(&key); + random.bytes(&nonce); random.bytes(&buf); - aegis.aegis256x4_mac_init(&st0, &key); + aegis.aegis256x4_mac_init(&st0, &key, &nonce); var timer = try Timer.start(); const start = timer.lap(); diff --git a/src/test/main.zig b/src/test/main.zig index 27bda00..cb80d70 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -627,10 +627,11 @@ test "aegis128l - Random stream" { test "aegis128l - MAC" { const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const nonce = [_]u8{0} ** 16; const msg = [_]u8{ 1, 2, 3 } ** 100; const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100 ++ [_]u8{0}; var st0: aegis.aegis128l_state = undefined; - aegis.aegis128l_mac_init(&st0, &key); + aegis.aegis128l_mac_init(&st0, &key, &nonce); var st: aegis.aegis128l_state = undefined; aegis.aegis128l_mac_state_clone(&st, &st0); @@ -657,7 +658,6 @@ test "aegis128l - MAC" { ret = aegis.aegis128l_mac_verify(&st, &mac, mac.len); try testing.expectEqual(ret, 0); - const nonce = [_]u8{0} ** 16; var mac2: [mac.len]u8 = undefined; ret = aegis.aegis128l_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); try testing.expectEqual(ret, 0); @@ -666,10 +666,11 @@ test "aegis128l - MAC" { test "aegis128x2 - MAC" { const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const nonce = [_]u8{0} ** 16; const msg = [_]u8{ 1, 2, 3 } ** 100; const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100 ++ [_]u8{0}; var st0: aegis.aegis128x2_state = undefined; - aegis.aegis128x2_mac_init(&st0, &key); + aegis.aegis128x2_mac_init(&st0, &key, &nonce); var st: aegis.aegis128x2_state = undefined; aegis.aegis128x2_mac_state_clone(&st, &st0); @@ -696,7 +697,6 @@ test "aegis128x2 - MAC" { ret = aegis.aegis128x2_mac_verify(&st, &mac, mac.len); try testing.expectEqual(ret, 0); - const nonce = [_]u8{0} ** 16; var mac2: [mac.len]u8 = undefined; ret = aegis.aegis128x2_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); try testing.expectEqual(ret, 0); @@ -705,10 +705,11 @@ test "aegis128x2 - MAC" { test "aegis128x4 - MAC" { const key = [16]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const nonce = [_]u8{0} ** 16; const msg = [_]u8{ 1, 2, 3 } ** 100 ++ [_]u8{0}; const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100; var st0: aegis.aegis128x4_state = undefined; - aegis.aegis128x4_mac_init(&st0, &key); + aegis.aegis128x4_mac_init(&st0, &key, &nonce); var st: aegis.aegis128x4_state = undefined; aegis.aegis128x4_mac_state_clone(&st, &st0); @@ -735,7 +736,6 @@ test "aegis128x4 - MAC" { ret = aegis.aegis128x4_mac_verify(&st, &mac, mac.len); try testing.expectEqual(ret, 0); - const nonce = [_]u8{0} ** 16; var mac2: [mac.len]u8 = undefined; ret = aegis.aegis128x4_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); try testing.expectEqual(ret, 0); From 73d94dbeffc261d891e15eac277d00efbb35a9f7 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 4 Dec 2024 19:18:12 +0100 Subject: [PATCH 165/219] Bump --- CMakeLists.txt | 2 +- build.zig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b4ada9..0a17575 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ configure_package_CONFIG_FILE("${CONFIG_TEMPLATE_FILE}" "${CONFIG_FILE}" install(FILES "${CONFIG_FILE}" DESTINATION "${INSTALL_CONFIG_DIR}") -write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.1.25 COMPATIBILITY AnyNewerVersion) +write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.2.0 COMPATIBILITY AnyNewerVersion) install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" DESTINATION "${INSTALL_CONFIG_DIR}") export(EXPORT "${TARGETS_EXPORT_NAME}" FILE "${TARGETS_EXPORT_FILE}" NAMESPACE "${PROJECT_NAME}::") diff --git a/build.zig b/build.zig index 8147388..c8ab67b 100644 --- a/build.zig +++ b/build.zig @@ -3,7 +3,7 @@ const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{ .preferred_optimize_mode = .ReleaseFast }); - const version = std.SemanticVersion.parse("0.1.25") catch unreachable; + const version = std.SemanticVersion.parse("0.2.0") catch unreachable; const lib = b.addStaticLibrary(.{ .name = "aegis", From 251b8c8297cebcb70c3186f92cab7444ce2c461e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 4 Dec 2024 19:36:37 +0100 Subject: [PATCH 166/219] Remove outdated comments State must not be cloned yet. The construction may be updated later to allow for nonce-less MACs --- src/include/aegis128x2.h | 4 ---- src/include/aegis128x4.h | 4 ---- src/include/aegis256x2.h | 4 ---- src/include/aegis256x4.h | 4 ---- 4 files changed, 16 deletions(-) diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 4e0380d..cef8be7 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -263,10 +263,6 @@ void aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis128x2_mac_state_clone()`. It is only safe to copy a state directly without using - * the clone function if the state is guaranteed to be properly aligned. */ void aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k, const uint8_t *npub); diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index 31d20ff..6de9741 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -263,10 +263,6 @@ void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis128x4_mac_state_clone()`. It is only safe to copy a state directly without using - * the clone function if the state is guaranteed to be properly aligned. */ void aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k, const uint8_t *npub); diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index 27ec1c9..00ac5a4 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -263,10 +263,6 @@ void aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis256x2_mac_state_clone()`. It is only safe to copy a state directly without using - * the clone function if the state is guaranteed to be properly aligned. */ void aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k, const uint8_t *npub); diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index db276ad..01d0ad7 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -263,10 +263,6 @@ void aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. - * - * After initialization, the state can be reused to generate multiple MACs by cloning it - * with `aegis256_mac_state_clone()`. It is only safe to copy a state directly without using - * the clone function if the state is guaranteed to be properly aligned. */ void aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k, const uint8_t *npub); From 91e48172bea1ce207827936b5a3d0b4e38025d88 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 4 Dec 2024 19:37:53 +0100 Subject: [PATCH 167/219] 0.2.1 --- CMakeLists.txt | 2 +- build.zig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a17575..3338ab2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ configure_package_CONFIG_FILE("${CONFIG_TEMPLATE_FILE}" "${CONFIG_FILE}" install(FILES "${CONFIG_FILE}" DESTINATION "${INSTALL_CONFIG_DIR}") -write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.2.0 COMPATIBILITY AnyNewerVersion) +write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.2.1 COMPATIBILITY AnyNewerVersion) install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" DESTINATION "${INSTALL_CONFIG_DIR}") export(EXPORT "${TARGETS_EXPORT_NAME}" FILE "${TARGETS_EXPORT_FILE}" NAMESPACE "${PROJECT_NAME}::") diff --git a/build.zig b/build.zig index c8ab67b..b55d2fa 100644 --- a/build.zig +++ b/build.zig @@ -3,7 +3,7 @@ const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{ .preferred_optimize_mode = .ReleaseFast }); - const version = std.SemanticVersion.parse("0.2.0") catch unreachable; + const version = std.SemanticVersion.parse("0.2.1") catch unreachable; const lib = b.addStaticLibrary(.{ .name = "aegis", From f9cf01d7bf65934d9dbc26ba2a40e0e2048d09ff Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 4 Dec 2024 22:22:03 +0100 Subject: [PATCH 168/219] Start revamping the MAC API --- src/aegis128l/aegis128l.c | 20 +++++--- src/aegis128l/aegis128l_aesni.c | 4 +- src/aegis128l/aegis128l_altivec.c | 4 +- src/aegis128l/aegis128l_armcrypto.c | 4 +- src/aegis128l/aegis128l_common.h | 76 ++++++++++++++++++++++------- src/aegis128l/implementations.h | 8 +-- src/include/aegis128l.h | 20 ++++++-- src/test/benchmark.zig | 4 +- src/test/main.zig | 4 +- 9 files changed, 104 insertions(+), 40 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 90a5b38..ea93267 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -175,20 +175,20 @@ aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, con } void -aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k, const uint8_t *npub) +aegis128l_mac_init(aegis128l_mac_state *st_, const uint8_t *k, const uint8_t *npub) { memset(st_, 0, sizeof *st_); - implementation->state_init(st_, NULL, 0, npub, k); + implementation->state_mac_init(st_, npub, k); } int -aegis128l_mac_update(aegis128l_state *st_, const uint8_t *m, size_t mlen) +aegis128l_mac_update(aegis128l_mac_state *st_, const uint8_t *m, size_t mlen) { return implementation->state_mac_update(st_, m, mlen); } int -aegis128l_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) +aegis128l_mac_final(aegis128l_mac_state *st_, uint8_t *mac, size_t maclen) { if (maclen != 16 && maclen != 32) { errno = EINVAL; @@ -198,7 +198,7 @@ aegis128l_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) } int -aegis128l_mac_verify(aegis128l_state *st_, const uint8_t *mac, size_t maclen) +aegis128l_mac_verify(aegis128l_mac_state *st_, const uint8_t *mac, size_t maclen) { uint8_t expected_mac[32]; @@ -216,9 +216,15 @@ aegis128l_mac_verify(aegis128l_state *st_, const uint8_t *mac, size_t maclen) } void -aegis128l_mac_state_clone(aegis128l_state *dst, const aegis128l_state *src) +aegis128l_mac_reset(aegis128l_mac_state *st_) { - implementation->state_clone(dst, src); + implementation->state_mac_reset(st_); +} + +void +aegis128l_mac_state_clone(aegis128l_mac_state *dst, const aegis128l_mac_state *src) +{ + implementation->state_mac_state_clone(dst, src); } int diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index cafc317..b14d10e 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -63,9 +63,11 @@ struct aegis128l_implementation aegis128l_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_state_clone = state_mac_state_clone, }; # ifdef __clang__ diff --git a/src/aegis128l/aegis128l_altivec.c b/src/aegis128l/aegis128l_altivec.c index e0a2100..9e89aa3 100644 --- a/src/aegis128l/aegis128l_altivec.c +++ b/src/aegis128l/aegis128l_altivec.c @@ -60,9 +60,11 @@ struct aegis128l_implementation aegis128l_altivec_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_state_clone = state_mac_state_clone, }; # ifdef __clang__ diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index 192fe58..fac0fc9 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -67,9 +67,11 @@ struct aegis128l_implementation aegis128l_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_state_clone = state_mac_state_clone, }; # ifdef __clang__ diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 6a75a3b..657983f 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -303,6 +303,14 @@ typedef struct _aegis128l_state { size_t pos; } _aegis128l_state; +typedef struct _aegis128l_mac_state { + aegis_blocks blocks0; + aegis_blocks blocks; + uint8_t buf[RATE]; + uint64_t adlen; + size_t pos; +} _aegis128l_mac_state; + static void state_init(aegis128l_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) @@ -570,13 +578,34 @@ state_decrypt_detached_final(aegis128l_state *st_, uint8_t *m, size_t mlen_max, return ret; } +static void +state_mac_init(aegis128l_mac_state *st_, const uint8_t *npub, const uint8_t *k) +{ + aegis_blocks blocks; + _aegis128l_mac_state *const st = + (_aegis128l_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + size_t i; + + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); + st->pos = 0; + + memcpy(blocks, st->blocks, sizeof blocks); + + aegis128l_init(k, npub, blocks); + + memcpy(st->blocks0, blocks, sizeof blocks); + memcpy(st->blocks, blocks, sizeof blocks); + st->adlen = 0; +} + static int -state_mac_update(aegis128l_state *st_, const uint8_t *ad, size_t adlen) +state_mac_update(aegis128l_mac_state *st_, const uint8_t *ad, size_t adlen) { - aegis_blocks blocks; - _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis128l_mac_state *const st = + (_aegis128l_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -620,12 +649,12 @@ state_mac_update(aegis128l_state *st_, const uint8_t *ad, size_t adlen) } static int -state_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) +state_mac_final(aegis128l_mac_state *st_, uint8_t *mac, size_t maclen) { - aegis_blocks blocks; - _aegis128l_state *const st = - (_aegis128l_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis128l_mac_state *const st = + (_aegis128l_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; memcpy(blocks, st->blocks, sizeof blocks); @@ -643,13 +672,24 @@ state_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen) } static void -state_clone(aegis128l_state *dst, const aegis128l_state *src) +state_mac_reset(aegis128l_mac_state *st_) { - _aegis128l_state *const dst_ = - (_aegis128l_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); - const _aegis128l_state *const src_ = - (const _aegis128l_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + _aegis128l_mac_state *const st = + (_aegis128l_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + st->adlen = 0; + st->pos = 0; + memcpy(st->blocks, st->blocks0, sizeof(aegis_blocks)); +} + +static void +state_mac_state_clone(aegis128l_mac_state *dst, const aegis128l_mac_state *src) +{ + _aegis128l_mac_state *const dst_ = + (_aegis128l_mac_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + const _aegis128l_mac_state *const src_ = + (const _aegis128l_mac_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; -} \ No newline at end of file +} diff --git a/src/aegis128l/implementations.h b/src/aegis128l/implementations.h index d9c245f..9314b2f 100644 --- a/src/aegis128l/implementations.h +++ b/src/aegis128l/implementations.h @@ -29,9 +29,11 @@ typedef struct aegis128l_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis128l_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); - int (*state_mac_update)(aegis128l_state *st_, const uint8_t *ad, size_t adlen); - int (*state_mac_final)(aegis128l_state *st_, uint8_t *mac, size_t maclen); - void (*state_clone)(aegis128l_state *dst, const aegis128l_state *src); + void (*state_mac_init)(aegis128l_mac_state *st_, const uint8_t *npub, const uint8_t *k); + int (*state_mac_update)(aegis128l_mac_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis128l_mac_state *st_, uint8_t *mac, size_t maclen); + void (*state_mac_reset)(aegis128l_mac_state *st); + void (*state_mac_state_clone)(aegis128l_mac_state *dst, const aegis128l_mac_state *src); } aegis128l_implementation; #endif diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 5cd3738..ab44596 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -31,6 +31,11 @@ typedef struct aegis128l_state { CRYPTO_ALIGN(32) uint8_t opaque[256]; } aegis128l_state; +/* An AEGIS state, only for MAC updates */ +typedef struct aegis128l_mac_state { + CRYPTO_ALIGN(32) uint8_t opaque[512]; +} aegis128l_mac_state; + /* The length of an AEGIS key, in bytes */ size_t aegis128l_keybytes(void); @@ -267,7 +272,7 @@ void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen * with `aegis128l_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. */ -void aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k, const uint8_t *npub); +void aegis128l_mac_init(aegis128l_mac_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. @@ -280,7 +285,7 @@ void aegis128l_mac_init(aegis128l_state *st_, const uint8_t *k, const uint8_t *n * * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. */ -int aegis128l_mac_update(aegis128l_state *st_, const uint8_t *m, size_t mlen); +int aegis128l_mac_update(aegis128l_mac_state *st_, const uint8_t *m, size_t mlen); /* * Finalize the MAC and generate the authentication tag. @@ -289,7 +294,7 @@ int aegis128l_mac_update(aegis128l_state *st_, const uint8_t *m, size_t mlen); * mac: authentication tag output buffer * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). */ -int aegis128l_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen); +int aegis128l_mac_final(aegis128l_mac_state *st_, uint8_t *mac, size_t maclen); /* * Verify a MAC in constant time. @@ -300,7 +305,12 @@ int aegis128l_mac_final(aegis128l_state *st_, uint8_t *mac, size_t maclen); * * Returns 0 if the tag is authentic, -1 otherwise. */ -int aegis128l_mac_verify(aegis128l_state *st_, const uint8_t *mac, size_t maclen); +int aegis128l_mac_verify(aegis128l_mac_state *st_, const uint8_t *mac, size_t maclen); + +/* + * Reset an AEGIS_MAC state. + */ +void aegis128l_mac_reset(aegis128l_mac_state *st_); /* * Clone an AEGIS-MAC state. @@ -310,7 +320,7 @@ int aegis128l_mac_verify(aegis128l_state *st_, const uint8_t *mac, size_t maclen * * This function MUST be used in order to clone states. */ -void aegis128l_mac_state_clone(aegis128l_state *dst, const aegis128l_state *src); +void aegis128l_mac_state_clone(aegis128l_mac_state *dst, const aegis128l_mac_state *src); #ifdef __cplusplus } diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index 2165244..eb8becc 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -204,7 +204,7 @@ fn bench_aegis128l_mac() !void { var key: [aegis.aegis128l_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis128l_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; - var st0: aegis.aegis128l_state = undefined; + var st0: aegis.aegis128l_mac_state = undefined; random.bytes(&key); random.bytes(&nonce); @@ -214,7 +214,7 @@ fn bench_aegis128l_mac() !void { var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st: aegis.aegis128l_state = undefined; + var st: aegis.aegis128l_mac_state = undefined; aegis.aegis128l_mac_state_clone(&st, &st0); _ = aegis.aegis128l_mac_update(&st, &buf, msg_len); _ = aegis.aegis128l_mac_final(&st, &buf, aegis.aegis128l_ABYTES_MAX); diff --git a/src/test/main.zig b/src/test/main.zig index cb80d70..319b3de 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -630,10 +630,10 @@ test "aegis128l - MAC" { const nonce = [_]u8{0} ** 16; const msg = [_]u8{ 1, 2, 3 } ** 100; const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100 ++ [_]u8{0}; - var st0: aegis.aegis128l_state = undefined; + var st0: aegis.aegis128l_mac_state = undefined; aegis.aegis128l_mac_init(&st0, &key, &nonce); - var st: aegis.aegis128l_state = undefined; + var st: aegis.aegis128l_mac_state = undefined; aegis.aegis128l_mac_state_clone(&st, &st0); var ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); try testing.expectEqual(ret, 0); From 0db6b1fda37bc0535064f894a0d63befd5f28aba Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 4 Dec 2024 22:38:07 +0100 Subject: [PATCH 169/219] Move AEGIS-256 MAC to the new MAC API as well --- src/aegis128l/aegis128l.c | 2 +- src/aegis128l/aegis128l_aesni.c | 2 +- src/aegis128l/aegis128l_altivec.c | 2 +- src/aegis128l/aegis128l_armcrypto.c | 2 +- src/aegis128l/aegis128l_common.h | 2 +- src/aegis128l/implementations.h | 2 +- src/aegis256/aegis256.c | 14 +++--- src/aegis256/aegis256_aesni.c | 3 +- src/aegis256/aegis256_altivec.c | 3 +- src/aegis256/aegis256_armcrypto.c | 3 +- src/aegis256/aegis256_common.h | 74 ++++++++++++++++++++++------- src/aegis256/implementations.h | 8 ++-- src/include/aegis256.h | 20 ++++++-- src/test/benchmark.zig | 4 +- 14 files changed, 98 insertions(+), 43 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index ea93267..17ac474 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -224,7 +224,7 @@ aegis128l_mac_reset(aegis128l_mac_state *st_) void aegis128l_mac_state_clone(aegis128l_mac_state *dst, const aegis128l_mac_state *src) { - implementation->state_mac_state_clone(dst, src); + implementation->state_mac_clone(dst, src); } int diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index b14d10e..aedcae2 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -67,7 +67,7 @@ struct aegis128l_implementation aegis128l_aesni_implementation = { .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, .state_mac_reset = state_mac_reset, - .state_mac_state_clone = state_mac_state_clone, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128l/aegis128l_altivec.c b/src/aegis128l/aegis128l_altivec.c index 9e89aa3..35add00 100644 --- a/src/aegis128l/aegis128l_altivec.c +++ b/src/aegis128l/aegis128l_altivec.c @@ -64,7 +64,7 @@ struct aegis128l_implementation aegis128l_altivec_implementation = { .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, .state_mac_reset = state_mac_reset, - .state_mac_state_clone = state_mac_state_clone, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index fac0fc9..ad2de17 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -71,7 +71,7 @@ struct aegis128l_implementation aegis128l_armcrypto_implementation = { .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, .state_mac_reset = state_mac_reset, - .state_mac_state_clone = state_mac_state_clone, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 657983f..ef98994 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -683,7 +683,7 @@ state_mac_reset(aegis128l_mac_state *st_) } static void -state_mac_state_clone(aegis128l_mac_state *dst, const aegis128l_mac_state *src) +state_mac_clone(aegis128l_mac_state *dst, const aegis128l_mac_state *src) { _aegis128l_mac_state *const dst_ = (_aegis128l_mac_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & diff --git a/src/aegis128l/implementations.h b/src/aegis128l/implementations.h index 9314b2f..60eb365 100644 --- a/src/aegis128l/implementations.h +++ b/src/aegis128l/implementations.h @@ -33,7 +33,7 @@ typedef struct aegis128l_implementation { int (*state_mac_update)(aegis128l_mac_state *st_, const uint8_t *ad, size_t adlen); int (*state_mac_final)(aegis128l_mac_state *st_, uint8_t *mac, size_t maclen); void (*state_mac_reset)(aegis128l_mac_state *st); - void (*state_mac_state_clone)(aegis128l_mac_state *dst, const aegis128l_mac_state *src); + void (*state_mac_clone)(aegis128l_mac_state *dst, const aegis128l_mac_state *src); } aegis128l_implementation; #endif diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index 31e71c0..d43365c 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -175,19 +175,19 @@ aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, cons } void -aegis256_mac_init(aegis256_state *st_, const uint8_t *k, const uint8_t *npub) +aegis256_mac_init(aegis256_mac_state *st_, const uint8_t *k, const uint8_t *npub) { - implementation->state_init(st_, NULL, 0, npub, k); + implementation->state_mac_init(st_, npub, k); } int -aegis256_mac_update(aegis256_state *st_, const uint8_t *m, size_t mlen) +aegis256_mac_update(aegis256_mac_state *st_, const uint8_t *m, size_t mlen) { return implementation->state_mac_update(st_, m, mlen); } int -aegis256_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen) +aegis256_mac_final(aegis256_mac_state *st_, uint8_t *mac, size_t maclen) { if (maclen != 16 && maclen != 32) { errno = EINVAL; @@ -197,7 +197,7 @@ aegis256_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen) } int -aegis256_mac_verify(aegis256_state *st_, const uint8_t *mac, size_t maclen) +aegis256_mac_verify(aegis256_mac_state *st_, const uint8_t *mac, size_t maclen) { uint8_t expected_mac[32]; @@ -215,9 +215,9 @@ aegis256_mac_verify(aegis256_state *st_, const uint8_t *mac, size_t maclen) } void -aegis256_mac_state_clone(aegis256_state *dst, const aegis256_state *src) +aegis256_mac_state_clone(aegis256_mac_state *dst, const aegis256_mac_state *src) { - implementation->state_clone(dst, src); + implementation->state_mac_clone(dst, src); } int diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index 40a70ce..be51473 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -60,7 +60,8 @@ struct aegis256_implementation aegis256_aesni_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256/aegis256_altivec.c b/src/aegis256/aegis256_altivec.c index aca9f6d..5686e4c 100644 --- a/src/aegis256/aegis256_altivec.c +++ b/src/aegis256/aegis256_altivec.c @@ -60,7 +60,8 @@ struct aegis256_implementation aegis256_altivec_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index f5f5839..d5e95b8 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -67,7 +67,8 @@ struct aegis256_implementation aegis256_armcrypto_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 908ced5..4623843 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -288,6 +288,14 @@ typedef struct _aegis256_state { size_t pos; } _aegis256_state; +typedef struct _aegis256_mac_state { + aegis_blocks blocks0; + aegis_blocks blocks; + uint8_t buf[RATE]; + uint64_t adlen; + size_t pos; +} _aegis256_mac_state; + static void state_init(aegis256_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) @@ -558,13 +566,34 @@ state_decrypt_detached_final(aegis256_state *st_, uint8_t *m, size_t mlen_max, s return ret; } +static void +state_mac_init(aegis256_mac_state *st_, const uint8_t *npub, const uint8_t *k) +{ + aegis_blocks blocks; + _aegis256_mac_state *const st = + (_aegis256_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + size_t i; + + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); + st->pos = 0; + + memcpy(blocks, st->blocks, sizeof blocks); + + aegis256_init(k, npub, blocks); + + memcpy(st->blocks0, blocks, sizeof blocks); + memcpy(st->blocks, blocks, sizeof blocks); + st->adlen = 0; +} + static int -state_mac_update(aegis256_state *st_, const uint8_t *ad, size_t adlen) +state_mac_update(aegis256_mac_state *st_, const uint8_t *ad, size_t adlen) { - aegis_blocks blocks; - _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis256_mac_state *const st = + (_aegis256_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -606,12 +635,12 @@ state_mac_update(aegis256_state *st_, const uint8_t *ad, size_t adlen) } static int -state_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen) +state_mac_final(aegis256_mac_state *st_, uint8_t *mac, size_t maclen) { - aegis_blocks blocks; - _aegis256_state *const st = - (_aegis256_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis256_mac_state *const st = + (_aegis256_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; memcpy(blocks, st->blocks, sizeof blocks); @@ -629,13 +658,24 @@ state_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen) } static void -state_clone(aegis256_state *dst, const aegis256_state *src) +state_mac_reset(aegis256_mac_state *st_) { - _aegis256_state *const dst_ = - (_aegis256_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); - const _aegis256_state *const src_ = - (const _aegis256_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + _aegis256_mac_state *const st = + (_aegis256_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + st->adlen = 0; + st->pos = 0; + memcpy(st->blocks, st->blocks0, sizeof(aegis_blocks)); +} + +static void +state_mac_clone(aegis256_mac_state *dst, const aegis256_mac_state *src) +{ + _aegis256_mac_state *const dst_ = + (_aegis256_mac_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + const _aegis256_mac_state *const src_ = + (const _aegis256_mac_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis256/implementations.h b/src/aegis256/implementations.h index f8ec8a5..67afbff 100644 --- a/src/aegis256/implementations.h +++ b/src/aegis256/implementations.h @@ -29,9 +29,11 @@ typedef struct aegis256_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis256_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); - int (*state_mac_update)(aegis256_state *st_, const uint8_t *ad, size_t adlen); - int (*state_mac_final)(aegis256_state *st_, uint8_t *mac, size_t maclen); - void (*state_clone)(aegis256_state *dst, const aegis256_state *src); + void (*state_mac_init)(aegis256_mac_state *st_, const uint8_t *npub, const uint8_t *k); + int (*state_mac_update)(aegis256_mac_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis256_mac_state *st_, uint8_t *mac, size_t maclen); + void (*state_mac_reset)(aegis256_mac_state *st); + void (*state_mac_clone)(aegis256_mac_state *dst, const aegis256_mac_state *src); } aegis256_implementation; #endif diff --git a/src/include/aegis256.h b/src/include/aegis256.h index 097a72a..f88d662 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -31,6 +31,11 @@ typedef struct aegis256_state { CRYPTO_ALIGN(16) uint8_t opaque[192]; } aegis256_state; +/* An AEGIS state, only for MAC updates */ +typedef struct aegis256_mac_state { + CRYPTO_ALIGN(16) uint8_t opaque[384]; +} aegis256_mac_state; + /* The length of an AEGIS key, in bytes */ size_t aegis256_keybytes(void); @@ -267,7 +272,7 @@ void aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, * with `aegis256_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. */ -void aegis256_mac_init(aegis256_state *st_, const uint8_t *k, const uint8_t *npub); +void aegis256_mac_init(aegis256_mac_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. @@ -280,7 +285,7 @@ void aegis256_mac_init(aegis256_state *st_, const uint8_t *k, const uint8_t *npu * * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. */ -int aegis256_mac_update(aegis256_state *st_, const uint8_t *m, size_t mlen); +int aegis256_mac_update(aegis256_mac_state *st_, const uint8_t *m, size_t mlen); /* * Finalize the MAC and generate the authentication tag. @@ -289,7 +294,7 @@ int aegis256_mac_update(aegis256_state *st_, const uint8_t *m, size_t mlen); * mac: authentication tag output buffer * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). */ -int aegis256_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen); +int aegis256_mac_final(aegis256_mac_state *st_, uint8_t *mac, size_t maclen); /* * Verify a MAC in constant time. @@ -300,7 +305,12 @@ int aegis256_mac_final(aegis256_state *st_, uint8_t *mac, size_t maclen); * * Returns 0 if the tag is authentic, -1 otherwise. */ -int aegis256_mac_verify(aegis256_state *st_, const uint8_t *mac, size_t maclen); +int aegis256_mac_verify(aegis256_mac_state *st_, const uint8_t *mac, size_t maclen); + +/* + * Reset an AEGIS_MAC state. + */ +void aegis256_mac_reset(aegis256_mac_state *st_); /* * Clone an AEGIS-MAC state. @@ -310,7 +320,7 @@ int aegis256_mac_verify(aegis256_state *st_, const uint8_t *mac, size_t maclen); * * This function MUST be used in order to clone states. */ -void aegis256_mac_state_clone(aegis256_state *dst, const aegis256_state *src); +void aegis256_mac_state_clone(aegis256_mac_state *dst, const aegis256_mac_state *src); #ifdef __cplusplus } diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index eb8becc..fad73b0 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -288,7 +288,7 @@ fn bench_aegis256_mac() !void { var key: [aegis.aegis256_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; - var st0: aegis.aegis256_state = undefined; + var st0: aegis.aegis256_mac_state = undefined; random.bytes(&key); random.bytes(&nonce); @@ -298,7 +298,7 @@ fn bench_aegis256_mac() !void { var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st: aegis.aegis256_state = undefined; + var st: aegis.aegis256_mac_state = undefined; aegis.aegis256_mac_state_clone(&st, &st0); _ = aegis.aegis256_mac_update(&st, &buf, msg_len); _ = aegis.aegis256_mac_final(&st, &buf, aegis.aegis256_ABYTES_MAX); From ecbb4cf4f01212114cf4c0e5a15ba85c66aa2c82 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 4 Dec 2024 23:28:18 +0100 Subject: [PATCH 170/219] Don't forget to update soft implementations --- src/aegis128l/aegis128l_soft.c | 3 ++- src/aegis256/aegis256_soft.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/aegis128l/aegis128l_soft.c b/src/aegis128l/aegis128l_soft.c index e3cfd9a..a656d67 100644 --- a/src/aegis128l/aegis128l_soft.c +++ b/src/aegis128l/aegis128l_soft.c @@ -59,7 +59,8 @@ struct aegis128l_implementation aegis128l_soft_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; #endif diff --git a/src/aegis256/aegis256_soft.c b/src/aegis256/aegis256_soft.c index ea636b3..1ef3e1d 100644 --- a/src/aegis256/aegis256_soft.c +++ b/src/aegis256/aegis256_soft.c @@ -54,7 +54,8 @@ struct aegis256_implementation aegis256_soft_implementation = { .state_decrypt_detached_final = state_decrypt_detached_final, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; #endif From b445117724b3879cbaa2e10068cb7f6ccf6225c0 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 5 Dec 2024 00:18:47 +0100 Subject: [PATCH 171/219] Move aegis128x2 to the new MAC API, fix 128l and 256 --- src/aegis128l/aegis128l_soft.c | 1 + src/aegis128x2/aegis128x2.c | 18 ++-- src/aegis128x2/aegis128x2_aesni.c | 4 +- src/aegis128x2/aegis128x2_altivec.c | 4 +- src/aegis128x2/aegis128x2_armcrypto.c | 4 +- src/aegis128x2/aegis128x2_avx2.c | 4 +- src/aegis128x2/aegis128x2_common.h | 121 ++++++++++++++++++++++---- src/aegis128x2/aegis128x2_soft.c | 4 +- src/aegis128x2/implementations.h | 8 +- src/aegis256/aegis256.c | 6 ++ src/aegis256/aegis256_aesni.c | 1 + src/aegis256/aegis256_altivec.c | 1 + src/aegis256/aegis256_armcrypto.c | 1 + src/aegis256/aegis256_soft.c | 1 + src/include/aegis128x2.h | 25 ++++-- src/test/benchmark.zig | 21 ++--- src/test/main.zig | 6 +- 17 files changed, 176 insertions(+), 54 deletions(-) diff --git a/src/aegis128l/aegis128l_soft.c b/src/aegis128l/aegis128l_soft.c index a656d67..0df6933 100644 --- a/src/aegis128l/aegis128l_soft.c +++ b/src/aegis128l/aegis128l_soft.c @@ -57,6 +57,7 @@ struct aegis128l_implementation aegis128l_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, .state_mac_reset = state_mac_reset, diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index 9b4b26a..50c581c 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -176,19 +176,19 @@ aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co } void -aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k, const uint8_t *npub) +aegis128x2_mac_init(aegis128x2_mac_state *st_, const uint8_t *k, const uint8_t *npub) { implementation->state_init(st_, NULL, 0, npub, k); } int -aegis128x2_mac_update(aegis128x2_state *st_, const uint8_t *m, size_t mlen) +aegis128x2_mac_update(aegis128x2_mac_state *st_, const uint8_t *m, size_t mlen) { return implementation->state_mac_update(st_, m, mlen); } int -aegis128x2_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen) +aegis128x2_mac_final(aegis128x2_mac_state *st_, uint8_t *mac, size_t maclen) { if (maclen != 16 && maclen != 32) { errno = EINVAL; @@ -198,7 +198,7 @@ aegis128x2_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen) } int -aegis128x2_mac_verify(aegis128x2_state *st_, const uint8_t *mac, size_t maclen) +aegis128x2_mac_verify(aegis128x2_mac_state *st_, const uint8_t *mac, size_t maclen) { uint8_t expected_mac[32]; @@ -216,9 +216,15 @@ aegis128x2_mac_verify(aegis128x2_state *st_, const uint8_t *mac, size_t maclen) } void -aegis128x2_mac_state_clone(aegis128x2_state *dst, const aegis128x2_state *src) +aegis128x2_mac_reset(aegis128x2_mac_state *st_) { - implementation->state_clone(dst, src); + implementation->state_mac_reset(st_); +} + +void +aegis128x2_mac_state_clone(aegis128x2_mac_state *dst, const aegis128x2_mac_state *src) +{ + implementation->state_mac_clone(dst, src); } int diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index 7c06664..506bab7 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -98,9 +98,11 @@ struct aegis128x2_implementation aegis128x2_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128x2/aegis128x2_altivec.c b/src/aegis128x2/aegis128x2_altivec.c index 6fa113c..6422379 100644 --- a/src/aegis128x2/aegis128x2_altivec.c +++ b/src/aegis128x2/aegis128x2_altivec.c @@ -93,9 +93,11 @@ struct aegis128x2_implementation aegis128x2_altivec_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 6a7fbc9..697d983 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -101,9 +101,11 @@ struct aegis128x2_implementation aegis128x2_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index 4af0a8a..b7533ff 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -66,9 +66,11 @@ struct aegis128x2_implementation aegis128x2_avx2_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 959cf21..feebcc9 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -177,6 +177,49 @@ aegis128x2_declast(uint8_t *const dst, const uint8_t *const src, size_t len, aegis128x2_update(state, msg0, msg1); } +static void +aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *state, + const aes_block_t *state0) +{ + uint8_t u[2 * AES_BLOCK_LENGTH]; + aes_block_t tmp; + int i; + size_t len; + + tmp = AES_BLOCK_LOAD_64x2(0, adlen << 3); + tmp = AES_BLOCK_XOR(tmp, state[2]); + + for (i = 0; i < 7; i++) { + aegis128x2_update(state, tmp, tmp); + } + + if (maclen == 16) { + tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(u, tmp); + memset(u + AES_BLOCK_LENGTH, 0, AES_BLOCK_LENGTH); + + len = AES_BLOCK_LENGTH; + } else if (maclen == 32) { + tmp = AES_BLOCK_XOR(state[3], state[2]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(u, tmp); + + tmp = AES_BLOCK_XOR(state[7], state[6]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[5], state[4])); + AES_BLOCK_STORE(u + AES_BLOCK_LENGTH, tmp); + + len = 2 * AES_BLOCK_LENGTH; + } else { + memset(mac, 0, maclen); + return; + } + memcpy(state, state0, sizeof(aegis_blocks)); + aegis128x2_absorb(u, state); + aegis128x2_mac(mac, maclen, len, 0, state); +} + static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) @@ -336,6 +379,14 @@ typedef struct _aegis128x2_state { size_t pos; } _aegis128x2_state; +typedef struct _aegis128x2_mac_state { + aegis_blocks blocks0; + aegis_blocks blocks; + uint8_t buf[RATE]; + uint64_t adlen; + size_t pos; +} _aegis128x2_mac_state; + static void state_init(aegis128x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) @@ -604,13 +655,34 @@ state_decrypt_detached_final(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, return ret; } +static void +state_mac_init(aegis128x2_mac_state *st_, const uint8_t *npub, const uint8_t *k) +{ + aegis_blocks blocks; + _aegis128x2_mac_state *const st = + (_aegis128x2_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + size_t i; + + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); + st->pos = 0; + + memcpy(blocks, st->blocks, sizeof blocks); + + aegis128x2_init(k, npub, blocks); + + memcpy(st->blocks0, blocks, sizeof blocks); + memcpy(st->blocks, blocks, sizeof blocks); + st->adlen = 0; +} + static int -state_mac_update(aegis128x2_state *st_, const uint8_t *ad, size_t adlen) +state_mac_update(aegis128x2_mac_state *st_, const uint8_t *ad, size_t adlen) { - aegis_blocks blocks; - _aegis128x2_state *const st = - (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis128x2_mac_state *const st = + (_aegis128x2_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -654,12 +726,12 @@ state_mac_update(aegis128x2_state *st_, const uint8_t *ad, size_t adlen) } static int -state_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen) +state_mac_final(aegis128x2_mac_state *st_, uint8_t *mac, size_t maclen) { - aegis_blocks blocks; - _aegis128x2_state *const st = - (_aegis128x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis128x2_mac_state *const st = + (_aegis128x2_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; memcpy(blocks, st->blocks, sizeof blocks); @@ -669,7 +741,7 @@ state_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen) memset(st->buf + left, 0, RATE - left); aegis128x2_absorb(st->buf, blocks); } - aegis128x2_mac(mac, maclen, st->adlen, 0, blocks); + aegis128x2_mac_nr(mac, maclen, st->adlen, st->blocks, st->blocks0); memcpy(st->blocks, blocks, sizeof blocks); @@ -677,13 +749,24 @@ state_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen) } static void -state_clone(aegis128x2_state *dst, const aegis128x2_state *src) +state_mac_reset(aegis128x2_mac_state *st_) { - _aegis128x2_state *const dst_ = - (_aegis128x2_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); - const _aegis128x2_state *const src_ = - (const _aegis128x2_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + _aegis128x2_mac_state *const st = + (_aegis128x2_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + st->adlen = 0; + st->pos = 0; + memcpy(st->blocks, st->blocks0, sizeof(aegis_blocks)); +} + +static void +state_mac_clone(aegis128x2_mac_state *dst, const aegis128x2_mac_state *src) +{ + _aegis128x2_mac_state *const dst_ = + (_aegis128x2_mac_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + const _aegis128x2_mac_state *const src_ = + (const _aegis128x2_mac_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; -} \ No newline at end of file +} diff --git a/src/aegis128x2/aegis128x2_soft.c b/src/aegis128x2/aegis128x2_soft.c index 16bbeef..8dcb121 100644 --- a/src/aegis128x2/aegis128x2_soft.c +++ b/src/aegis128x2/aegis128x2_soft.c @@ -90,9 +90,11 @@ struct aegis128x2_implementation aegis128x2_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; #endif \ No newline at end of file diff --git a/src/aegis128x2/implementations.h b/src/aegis128x2/implementations.h index 374309e..22a17e4 100644 --- a/src/aegis128x2/implementations.h +++ b/src/aegis128x2/implementations.h @@ -29,9 +29,11 @@ typedef struct aegis128x2_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis128x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); - int (*state_mac_update)(aegis128x2_state *st_, const uint8_t *ad, size_t adlen); - int (*state_mac_final)(aegis128x2_state *st_, uint8_t *mac, size_t maclen); - void (*state_clone)(aegis128x2_state *dst, const aegis128x2_state *src); + void (*state_mac_init)(aegis128x2_mac_state *st_, const uint8_t *npub, const uint8_t *k); + int (*state_mac_update)(aegis128x2_mac_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis128x2_mac_state *st_, uint8_t *mac, size_t maclen); + void (*state_mac_reset)(aegis128x2_mac_state *st); + void (*state_mac_clone)(aegis128x2_mac_state *dst, const aegis128x2_mac_state *src); } aegis128x2_implementation; #endif diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index d43365c..35c1759 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -214,6 +214,12 @@ aegis256_mac_verify(aegis256_mac_state *st_, const uint8_t *mac, size_t maclen) } } +void +aegis256_mac_reset(aegis256_mac_state *st_) +{ + implementation->state_mac_reset(st_); +} + void aegis256_mac_state_clone(aegis256_mac_state *dst, const aegis256_mac_state *src) { diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index be51473..f32100f 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -58,6 +58,7 @@ struct aegis256_implementation aegis256_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, .state_mac_reset = state_mac_reset, diff --git a/src/aegis256/aegis256_altivec.c b/src/aegis256/aegis256_altivec.c index 5686e4c..0fb195e 100644 --- a/src/aegis256/aegis256_altivec.c +++ b/src/aegis256/aegis256_altivec.c @@ -58,6 +58,7 @@ struct aegis256_implementation aegis256_altivec_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, .state_mac_reset = state_mac_reset, diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index d5e95b8..bb9c5fe 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -65,6 +65,7 @@ struct aegis256_implementation aegis256_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, .state_mac_reset = state_mac_reset, diff --git a/src/aegis256/aegis256_soft.c b/src/aegis256/aegis256_soft.c index 1ef3e1d..065b4df 100644 --- a/src/aegis256/aegis256_soft.c +++ b/src/aegis256/aegis256_soft.c @@ -52,6 +52,7 @@ struct aegis256_implementation aegis256_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, .state_mac_reset = state_mac_reset, diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index cef8be7..84cf3d0 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -31,6 +31,11 @@ typedef struct aegis128x2_state { CRYPTO_ALIGN(64) uint8_t opaque[448]; } aegis128x2_state; +/* An AEGIS state, only for MAC updates */ +typedef struct aegis128x2_mac_state { + CRYPTO_ALIGN(64) uint8_t opaque[896]; +} aegis128x2_mac_state; + /* The length of an AEGIS key, in bytes */ size_t aegis128x2_keybytes(void); @@ -258,13 +263,16 @@ void aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * k: key input buffer (16 bytes) * * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce MUST NOT be reused with the same key. * - If the key is secret, the MAC is secure against forgery. * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis128x2_mac_state_clone()`. It is only safe to copy a state directly without using + * the clone function if the state is guaranteed to be properly aligned. */ -void aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k, const uint8_t *npub); +void aegis128x2_mac_init(aegis128x2_mac_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. @@ -277,7 +285,7 @@ void aegis128x2_mac_init(aegis128x2_state *st_, const uint8_t *k, const uint8_t * * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. */ -int aegis128x2_mac_update(aegis128x2_state *st_, const uint8_t *m, size_t mlen); +int aegis128x2_mac_update(aegis128x2_mac_state *st_, const uint8_t *m, size_t mlen); /* * Finalize the MAC and generate the authentication tag. @@ -286,7 +294,7 @@ int aegis128x2_mac_update(aegis128x2_state *st_, const uint8_t *m, size_t mlen); * mac: authentication tag output buffer * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). */ -int aegis128x2_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen); +int aegis128x2_mac_final(aegis128x2_mac_state *st_, uint8_t *mac, size_t maclen); /* * Verify a MAC in constant time. @@ -297,7 +305,12 @@ int aegis128x2_mac_final(aegis128x2_state *st_, uint8_t *mac, size_t maclen); * * Returns 0 if the tag is authentic, -1 otherwise. */ -int aegis128x2_mac_verify(aegis128x2_state *st_, const uint8_t *mac, size_t maclen); +int aegis128x2_mac_verify(aegis128x2_mac_state *st_, const uint8_t *mac, size_t maclen); + +/* + * Reset an AEGIS_MAC state. + */ +void aegis128x2_mac_reset(aegis128x2_mac_state *st_); /* * Clone an AEGIS-MAC state. @@ -307,7 +320,7 @@ int aegis128x2_mac_verify(aegis128x2_state *st_, const uint8_t *mac, size_t macl * * This function MUST be used in order to clone states. */ -void aegis128x2_mac_state_clone(aegis128x2_state *dst, const aegis128x2_state *src); +void aegis128x2_mac_state_clone(aegis128x2_mac_state *dst, const aegis128x2_mac_state *src); #ifdef __cplusplus } diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index fad73b0..0c2417b 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -204,18 +204,17 @@ fn bench_aegis128l_mac() !void { var key: [aegis.aegis128l_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis128l_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; - var st0: aegis.aegis128l_mac_state = undefined; + var st: aegis.aegis128l_mac_state = undefined; random.bytes(&key); random.bytes(&nonce); random.bytes(&buf); - aegis.aegis128l_mac_init(&st0, &key, &nonce); + aegis.aegis128l_mac_init(&st, &key, &nonce); var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st: aegis.aegis128l_mac_state = undefined; - aegis.aegis128l_mac_state_clone(&st, &st0); + aegis.aegis128l_mac_reset(&st); _ = aegis.aegis128l_mac_update(&st, &buf, msg_len); _ = aegis.aegis128l_mac_final(&st, &buf, aegis.aegis128l_ABYTES_MAX); } @@ -232,18 +231,17 @@ fn bench_aegis128x2_mac() !void { var key: [aegis.aegis128x2_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis128x2_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; - var st0: aegis.aegis128x2_state = undefined; + var st: aegis.aegis128x2_mac_state = undefined; random.bytes(&key); random.bytes(&nonce); random.bytes(&buf); - aegis.aegis128x2_mac_init(&st0, &key, &nonce); + aegis.aegis128x2_mac_init(&st, &key, &nonce); var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st: aegis.aegis128x2_state = undefined; - aegis.aegis128x2_mac_state_clone(&st, &st0); + aegis.aegis128x2_mac_reset(&st); _ = aegis.aegis128x2_mac_update(&st, &buf, msg_len); _ = aegis.aegis128x2_mac_final(&st, &buf, aegis.aegis128x2_ABYTES_MAX); } @@ -288,18 +286,17 @@ fn bench_aegis256_mac() !void { var key: [aegis.aegis256_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis256_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; - var st0: aegis.aegis256_mac_state = undefined; + var st: aegis.aegis256_mac_state = undefined; random.bytes(&key); random.bytes(&nonce); random.bytes(&buf); - aegis.aegis256_mac_init(&st0, &key, &nonce); + aegis.aegis256_mac_init(&st, &key, &nonce); var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st: aegis.aegis256_mac_state = undefined; - aegis.aegis256_mac_state_clone(&st, &st0); + aegis.aegis256_mac_reset(&st); _ = aegis.aegis256_mac_update(&st, &buf, msg_len); _ = aegis.aegis256_mac_final(&st, &buf, aegis.aegis256_ABYTES_MAX); } diff --git a/src/test/main.zig b/src/test/main.zig index 319b3de..64ad04a 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -669,10 +669,10 @@ test "aegis128x2 - MAC" { const nonce = [_]u8{0} ** 16; const msg = [_]u8{ 1, 2, 3 } ** 100; const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100 ++ [_]u8{0}; - var st0: aegis.aegis128x2_state = undefined; + var st0: aegis.aegis128x2_mac_state = undefined; aegis.aegis128x2_mac_init(&st0, &key, &nonce); - var st: aegis.aegis128x2_state = undefined; + var st: aegis.aegis128x2_mac_state = undefined; aegis.aegis128x2_mac_state_clone(&st, &st0); var ret = aegis.aegis128x2_mac_update(&st, &msg, msg.len); try testing.expectEqual(ret, 0); @@ -700,7 +700,7 @@ test "aegis128x2 - MAC" { var mac2: [mac.len]u8 = undefined; ret = aegis.aegis128x2_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); try testing.expectEqual(ret, 0); - try testing.expectEqualSlices(u8, &mac, &mac2); + try testing.expect(!std.mem.eql(u8, &mac, &mac2)); } test "aegis128x4 - MAC" { From 23fda6880bc1197ca1609b3855f0fdcf1e6cf03f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 5 Dec 2024 00:35:54 +0100 Subject: [PATCH 172/219] Document Altivec support --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 83731ff..7edda3a 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@ Portable C implementations of the [AEGIS](https://datatracker.ietf.org/doc/draft ## Features -- AEGIS-128L with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) -- AEGIS-128X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) -- AEGIS-128X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto) -- AEGIS-256 with 16 and 32 bytes tags (software, AES-NI, ARM Crypto) -- AEGIS-256X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto) -- AEGIS-256X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto) +- AEGIS-128L with 16 and 32 bytes tags (software, AES-NI, ARM Crypto, Altivec) +- AEGIS-128X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto, Altivec) +- AEGIS-128X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto, Altivec) +- AEGIS-256 with 16 and 32 bytes tags (software, AES-NI, ARM Crypto, Altivec) +- AEGIS-256X2 with 16 and 32 bytes tags (software, VAES + AVX2, AES-NI, ARM Crypto, Altivec) +- AEGIS-256X4 with 16 and 32 bytes tags (software, AVX512, VAES + AVX2, AES-NI, ARM Crypto, Altivec) - All variants of AEGIS-MAC, supporting incremental updates. - Encryption and decryption with attached and detached tags - Incremental encryption and decryption. From 4caf77fb36ab58a19c95000ca1c482e4d2e11c41 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 5 Dec 2024 09:11:28 +0100 Subject: [PATCH 173/219] AEGIS-128X2: finalize MAC using the first AEGIS instance --- src/aegis128x2/aegis128x2_common.h | 44 ++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index feebcc9..cb52a0b 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -181,10 +181,10 @@ static void aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *state, const aes_block_t *state0) { + uint8_t t[2 * AES_BLOCK_LENGTH]; uint8_t u[2 * AES_BLOCK_LENGTH]; aes_block_t tmp; int i; - size_t len; tmp = AES_BLOCK_LOAD_64x2(0, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[2]); @@ -193,31 +193,53 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat aegis128x2_update(state, tmp, tmp); } + memset(t, 0, sizeof t); + memset(u, 0, sizeof u); if (maclen == 16) { tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); - AES_BLOCK_STORE(u, tmp); - memset(u + AES_BLOCK_LENGTH, 0, AES_BLOCK_LENGTH); + AES_BLOCK_STORE(t, tmp); - len = AES_BLOCK_LENGTH; + memcpy(state, state0, sizeof(aegis_blocks)); + for (i = 0; i < AES_BLOCK_LENGTH / 32; i++) { + aegis128x2_absorb(u + i * 32, state); + } + for (i = 0; i < 7; i++) { + aegis128x2_update(state, tmp, tmp); + } + tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac, t, 16); } else if (maclen == 32) { tmp = AES_BLOCK_XOR(state[3], state[2]); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); - AES_BLOCK_STORE(u, tmp); + AES_BLOCK_STORE(t, tmp); tmp = AES_BLOCK_XOR(state[7], state[6]); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[5], state[4])); - AES_BLOCK_STORE(u + AES_BLOCK_LENGTH, tmp); + AES_BLOCK_STORE(t + AES_BLOCK_LENGTH, tmp); - len = 2 * AES_BLOCK_LENGTH; + memcpy(state, state0, sizeof(aegis_blocks)); + for (i = 0; i < 2 * AES_BLOCK_LENGTH / 32; i++) { + aegis128x2_absorb(u + i * 32, state); + } + for (i = 0; i < 7; i++) { + aegis128x2_update(state, tmp, tmp); + } + tmp = AES_BLOCK_XOR(state[3], state[2]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac, t, 16); + tmp = AES_BLOCK_XOR(state[7], state[6]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[5], state[4])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac + 16, t, 16); } else { memset(mac, 0, maclen); - return; } - memcpy(state, state0, sizeof(aegis_blocks)); - aegis128x2_absorb(u, state); - aegis128x2_mac(mac, maclen, len, 0, state); } static int From 086aeadbee4f4062f061422fcfe65ae8cb1d922c Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 5 Dec 2024 09:22:47 +0100 Subject: [PATCH 174/219] Remove unneeded variable --- src/aegis128x2/aegis128x2_common.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index cb52a0b..39eb8ca 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -182,7 +182,6 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat const aes_block_t *state0) { uint8_t t[2 * AES_BLOCK_LENGTH]; - uint8_t u[2 * AES_BLOCK_LENGTH]; aes_block_t tmp; int i; @@ -194,7 +193,6 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat } memset(t, 0, sizeof t); - memset(u, 0, sizeof u); if (maclen == 16) { tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); @@ -203,7 +201,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(state, state0, sizeof(aegis_blocks)); for (i = 0; i < AES_BLOCK_LENGTH / 32; i++) { - aegis128x2_absorb(u + i * 32, state); + aegis128x2_absorb(t + i * 32, state); } for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); @@ -224,7 +222,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(state, state0, sizeof(aegis_blocks)); for (i = 0; i < 2 * AES_BLOCK_LENGTH / 32; i++) { - aegis128x2_absorb(u + i * 32, state); + aegis128x2_absorb(t + i * 32, state); } for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); From c24628fc2052cc9716f28a85c34b70e054517a67 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 5 Dec 2024 09:30:30 +0100 Subject: [PATCH 175/219] Set adlen for the the second finalization --- src/aegis128x2/aegis128x2_common.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 39eb8ca..4574a3d 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -194,24 +194,28 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memset(t, 0, sizeof t); if (maclen == 16) { +#if AES_BLOCK_LENGTH > 16 tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); AES_BLOCK_STORE(t, tmp); - memcpy(state, state0, sizeof(aegis_blocks)); for (i = 0; i < AES_BLOCK_LENGTH / 32; i++) { aegis128x2_absorb(t + i * 32, state); } + tmp = AES_BLOCK_LOAD_64x2(0, AES_BLOCK_LENGTH << 3); + tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); } +#endif tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); AES_BLOCK_STORE(t, tmp); memcpy(mac, t, 16); } else if (maclen == 32) { +#if AES_BLOCK_LENGTH > 16 tmp = AES_BLOCK_XOR(state[3], state[2]); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); AES_BLOCK_STORE(t, tmp); @@ -224,9 +228,12 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat for (i = 0; i < 2 * AES_BLOCK_LENGTH / 32; i++) { aegis128x2_absorb(t + i * 32, state); } + tmp = AES_BLOCK_LOAD_64x2(0, (2 * AES_BLOCK_LENGTH) << 3); + tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); } +#endif tmp = AES_BLOCK_XOR(state[3], state[2]); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); AES_BLOCK_STORE(t, tmp); From 23e0fb0388fbed620c52a21194cf693379692bcd Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 5 Dec 2024 23:49:49 +0100 Subject: [PATCH 176/219] X2 MAC: absorb only blocks from other lanes into lane 0 --- src/aegis128x2/aegis128x2_common.h | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 4574a3d..16c2eed 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -178,12 +178,13 @@ aegis128x2_declast(uint8_t *const dst, const uint8_t *const src, size_t len, } static void -aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *state, - const aes_block_t *state0) +aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *state) { uint8_t t[2 * AES_BLOCK_LENGTH]; + uint8_t r[RATE]; aes_block_t tmp; int i; + const int d = AES_BLOCK_LENGTH / 16; tmp = AES_BLOCK_LOAD_64x2(0, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[2]); @@ -192,19 +193,18 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat aegis128x2_update(state, tmp, tmp); } - memset(t, 0, sizeof t); + memset(r, 0, sizeof r); if (maclen == 16) { #if AES_BLOCK_LENGTH > 16 tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); AES_BLOCK_STORE(t, tmp); - memcpy(state, state0, sizeof(aegis_blocks)); - for (i = 0; i < AES_BLOCK_LENGTH / 32; i++) { - aegis128x2_absorb(t + i * 32, state); + for (i = 1; i < d; i++) { + memcpy(r, t + i * 16, 16); + aegis128x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(0, AES_BLOCK_LENGTH << 3); - tmp = AES_BLOCK_XOR(tmp, state[2]); + tmp = AES_BLOCK_LOAD_64x2(maclen, d); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); } @@ -219,17 +219,15 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat tmp = AES_BLOCK_XOR(state[3], state[2]); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); AES_BLOCK_STORE(t, tmp); - tmp = AES_BLOCK_XOR(state[7], state[6]); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[5], state[4])); AES_BLOCK_STORE(t + AES_BLOCK_LENGTH, tmp); - - memcpy(state, state0, sizeof(aegis_blocks)); - for (i = 0; i < 2 * AES_BLOCK_LENGTH / 32; i++) { - aegis128x2_absorb(t + i * 32, state); + for (i = 1; i < d; i++) { + memcpy(r, t + i * 16, 16); + memcpy(r + 16, t + AES_BLOCK_LENGTH + i * 16, 16); + aegis128x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(0, (2 * AES_BLOCK_LENGTH) << 3); - tmp = AES_BLOCK_XOR(tmp, state[2]); + tmp = AES_BLOCK_LOAD_64x2(maclen, d); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); } @@ -768,7 +766,7 @@ state_mac_final(aegis128x2_mac_state *st_, uint8_t *mac, size_t maclen) memset(st->buf + left, 0, RATE - left); aegis128x2_absorb(st->buf, blocks); } - aegis128x2_mac_nr(mac, maclen, st->adlen, st->blocks, st->blocks0); + aegis128x2_mac_nr(mac, maclen, st->adlen, st->blocks); memcpy(st->blocks, blocks, sizeof blocks); From f5a77d4de3fc5ac7b676ed83c14ce022fa041059 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 7 Dec 2024 10:42:38 +0100 Subject: [PATCH 177/219] Try to enable AESNI and AVX* extensions even on 32-bit x86 --- src/common/common.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/common/common.h b/src/common/common.h index f4d0aee..877f95d 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -25,8 +25,6 @@ # if defined(__clang__) || defined(__GNUC__) # define HAVE_AVX_ASM # endif -#endif -#if defined(__x86_64__) || defined(_M_AMD64) # define HAVE_AVXINTRIN_H # define HAVE_AVX2INTRIN_H # define HAVE_AVX512FINTRIN_H From 0ed830dc5f6eb37bdc2e66d0c48247bc96b9dc6b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 7 Dec 2024 19:35:49 +0100 Subject: [PATCH 178/219] Call the correct mac init function in 128x2 Remove unused var --- src/aegis128l/aegis128l_common.h | 1 - src/aegis128x2/aegis128x2.c | 2 +- src/aegis128x2/aegis128x2_common.h | 1 - src/aegis256/aegis256_common.h | 1 - 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index ef98994..3a328d8 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -585,7 +585,6 @@ state_mac_init(aegis128l_mac_state *st_, const uint8_t *npub, const uint8_t *k) _aegis128l_mac_state *const st = (_aegis128l_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); - size_t i; COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->pos = 0; diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index 50c581c..9fd5e11 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -178,7 +178,7 @@ aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co void aegis128x2_mac_init(aegis128x2_mac_state *st_, const uint8_t *k, const uint8_t *npub) { - implementation->state_init(st_, NULL, 0, npub, k); + implementation->state_mac_init(st_, npub, k); } int diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 16c2eed..bdba986 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -687,7 +687,6 @@ state_mac_init(aegis128x2_mac_state *st_, const uint8_t *npub, const uint8_t *k) _aegis128x2_mac_state *const st = (_aegis128x2_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); - size_t i; COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->pos = 0; diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 4623843..acf66e0 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -573,7 +573,6 @@ state_mac_init(aegis256_mac_state *st_, const uint8_t *npub, const uint8_t *k) _aegis256_mac_state *const st = (_aegis256_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & ~(uintptr_t) (ALIGNMENT - 1)); - size_t i; COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); st->pos = 0; From 1774bf9a5ba0ca6c3b54b3b8d4f0c66df1ca472a Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 7 Dec 2024 21:07:34 +0100 Subject: [PATCH 179/219] Make 128X2 AEGIS-MAC consistent with the proposed spec --- src/aegis128x2/aegis128x2_common.h | 10 +++--- src/test/main.zig | 58 ++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index bdba986..6c2ac0b 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -200,11 +200,11 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); AES_BLOCK_STORE(t, tmp); - for (i = 1; i < d; i++) { - memcpy(r, t + i * 16, 16); + for (i = 0; i < d / 2; i++) { + memcpy(r, t + i * 32, 32); aegis128x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(maclen, d); + tmp = AES_BLOCK_LOAD_64x2(d, maclen); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); } @@ -227,7 +227,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r + 16, t + AES_BLOCK_LENGTH + i * 16, 16); aegis128x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(maclen, d); + tmp = AES_BLOCK_LOAD_64x2(d, maclen); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); } @@ -765,7 +765,7 @@ state_mac_final(aegis128x2_mac_state *st_, uint8_t *mac, size_t maclen) memset(st->buf + left, 0, RATE - left); aegis128x2_absorb(st->buf, blocks); } - aegis128x2_mac_nr(mac, maclen, st->adlen, st->blocks); + aegis128x2_mac_nr(mac, maclen, st->adlen, blocks); memcpy(st->blocks, blocks, sizeof blocks); diff --git a/src/test/main.zig b/src/test/main.zig index 64ad04a..9f9eab9 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -742,6 +742,64 @@ test "aegis128x4 - MAC" { try testing.expectEqualSlices(u8, &mac, &mac2); } +test "aegis128l - MAC test vector" { + const key = [_]u8{ 0x10, 0x01 } ++ [_]u8{0x00} ** (16 - 2); + const nonce = [_]u8{ 0x10, 0x00, 0x02 } ++ [_]u8{0x00} ** (16 - 3); + var msg: [35]u8 = undefined; + for (&msg, 0..) |*byte, i| byte.* = @truncate(i); + var mac128: [16]u8 = undefined; + var mac256: [32]u8 = undefined; + var st: aegis.aegis128l_mac_state = undefined; + var ret: c_int = undefined; + aegis.aegis128l_mac_init(&st, &key, &nonce); + ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_final(&st, &mac128, mac128.len); + try testing.expectEqual(ret, 0); + aegis.aegis128l_mac_reset(&st); + ret = aegis.aegis128l_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128l_mac_final(&st, &mac256, mac256.len); + try testing.expectEqual(ret, 0); + const expected128_hex = "3982e98c66fa9232e9190ec57b120725"; + const expected256_hex = "a7d01b4636e8d312af8b65b3bb680feb8ffd62aa234584001b1e419b4b40c317"; + var expected128: [16]u8 = undefined; + var expected256: [32]u8 = undefined; + _ = try std.fmt.hexToBytes(&expected128, expected128_hex); + _ = try std.fmt.hexToBytes(&expected256, expected256_hex); + try std.testing.expectEqualSlices(u8, &expected128, &mac128); + try std.testing.expectEqualSlices(u8, &expected256, &mac256); +} + +test "aegis128x2 - MAC test vector" { + const key = [_]u8{ 0x10, 0x01 } ++ [_]u8{0x00} ** (16 - 2); + const nonce = [_]u8{ 0x10, 0x00, 0x02 } ++ [_]u8{0x00} ** (16 - 3); + var msg: [35]u8 = undefined; + for (&msg, 0..) |*byte, i| byte.* = @truncate(i); + var mac128: [16]u8 = undefined; + var mac256: [32]u8 = undefined; + var st: aegis.aegis128x2_mac_state = undefined; + var ret: c_int = undefined; + aegis.aegis128x2_mac_init(&st, &key, &nonce); + ret = aegis.aegis128x2_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128x2_mac_final(&st, &mac128, mac128.len); + try testing.expectEqual(ret, 0); + aegis.aegis128x2_mac_reset(&st); + ret = aegis.aegis128x2_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128x2_mac_final(&st, &mac256, mac256.len); + try testing.expectEqual(ret, 0); + const expected128_hex = "30ff53a9e8fe94705b753598b4899ded"; + const expected256_hex = "cfcd370c2f182244b512ec5c7e71f54e2b56ae9e8462e845ec02d4f65bc346c0"; + var expected128: [16]u8 = undefined; + var expected256: [32]u8 = undefined; + _ = try std.fmt.hexToBytes(&expected128, expected128_hex); + _ = try std.fmt.hexToBytes(&expected256, expected256_hex); + try std.testing.expectEqualSlices(u8, &expected128, &mac128); + try std.testing.expectEqualSlices(u8, &expected256, &mac256); +} + // Wycheproof tests const JsonTest = struct { From bc12b21a42b568d1676e194cc0a6550460ec46c0 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 7 Dec 2024 22:26:53 +0100 Subject: [PATCH 180/219] Add a block to the domain separator for consistency --- src/aegis128x2/aegis128x2_common.h | 2 ++ src/test/main.zig | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 6c2ac0b..01aa97d 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -205,6 +205,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat aegis128x2_absorb(r, state); } tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); } @@ -228,6 +229,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat aegis128x2_absorb(r, state); } tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); } diff --git a/src/test/main.zig b/src/test/main.zig index 9f9eab9..06978b4 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -790,8 +790,8 @@ test "aegis128x2 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis128x2_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "30ff53a9e8fe94705b753598b4899ded"; - const expected256_hex = "cfcd370c2f182244b512ec5c7e71f54e2b56ae9e8462e845ec02d4f65bc346c0"; + const expected128_hex = "f472304012396667f51ab7450d87f460"; + const expected256_hex = "f376288f13b51c73ecb814922919a31f2cbe1fd322a0062ef7860327a2bc3159"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); From 57ade7c20163b1ae7828e431b3d618c3e30c339d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 9 Dec 2024 00:16:23 +0100 Subject: [PATCH 181/219] Add a table summarizing the differences between the variants --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 7edda3a..5484137 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,19 @@ Include `` and call `aegis_init()` prior to doing anything else with th [Other AEGIS implementations](https://github.com/cfrg/draft-irtf-cfrg-aegis-aead?tab=readme-ov-file#known-implementations) are also available for most programming languages. +## Key differences between AEGIS variants + +| **Feature** | **AEGIS-128L** | **AEGIS-256** | **AEGIS-128X2** | **AEGIS-128X4** | **AEGIS-256X2** | **AEGIS-256X4** | +| -------------------- | --------------------------------------------------------------------- | -------------------------------------------- | ---------------------------------- | ---------------------------------- | --------------------------------- | --------------------------------- | +| **Key Length** | 128 bits | 256 bits | 128 bits | 128 bits | 256 bits | 256 bits | +| **Nonce Length** | 128 bits | 256 bits | 128 bits | 128 bits | 256 bits | 256 bits | +| **State Size** | 1024 bits (8 x 128-bit blocks) | 768 bits (6 x 128-bit blocks) | 2048 bits (2 x 1024-bit states) | 4096 bits (4 x 1024-bit states) | 1536 bits (2 x 768-bit states) | 3072 bits (4 x 768-bit states) | +| **Input Rate** | 256 bits per update | 128 bits per update | 512 bits per update | 1024 bits per update | 256 bits per update | 512 bits per update | +| **Parallelism** | None | None | 2 parallel lanes | 4 parallel lanes | 2 parallel lanes | 4 parallel lanes | +| **Performance** | High on standard CPUs | High on standard CPUs | Higher on CPUs with AVX2 | Higher on CPUs with AVX-512 | Higher on CPUs with AVX2 | Higher on CPUs with AVX-512 | +| **Security Level** | 128-bit security | 256-bit security | 128-bit security | 128-bit security | 256-bit security | 256-bit security | +| **Special Features** | Optimized for high performance on standard CPUs with AES instructions | Optimized for high security with larger keys | Parallelized version of AEGIS-128L | Parallelized version of AEGIS-128L | Parallelized version of AEGIS-256 | Parallelized version of AEGIS-256 | + ## Benchmark results AEGIS is very fast on CPUs with parallel execution pipelines and AES support. From df189b587e55854c033a5436278ca6607e488046 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 9 Dec 2024 19:24:15 +0100 Subject: [PATCH 182/219] Update 128X4 to the new MAC API --- src/aegis128x4/aegis128x4.c | 20 ++-- src/aegis128x4/aegis128x4_aesni.c | 4 +- src/aegis128x4/aegis128x4_altivec.c | 4 +- src/aegis128x4/aegis128x4_armcrypto.c | 4 +- src/aegis128x4/aegis128x4_avx2.c | 4 +- src/aegis128x4/aegis128x4_avx512.c | 4 +- src/aegis128x4/aegis128x4_common.h | 147 ++++++++++++++++++++++---- src/aegis128x4/implementations.h | 8 +- src/include/aegis128x4.h | 21 ++-- src/test/main.zig | 35 +++++- 10 files changed, 208 insertions(+), 43 deletions(-) diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index 4a8cb0e..dd13616 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -177,19 +177,19 @@ aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co } void -aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k, const uint8_t *npub) +aegis128x4_mac_init(aegis128x4_mac_state *st_, const uint8_t *k, const uint8_t *npub) { - implementation->state_init(st_, NULL, 0, npub, k); + implementation->state_mac_init(st_, npub, k); } int -aegis128x4_mac_update(aegis128x4_state *st_, const uint8_t *m, size_t mlen) +aegis128x4_mac_update(aegis128x4_mac_state *st_, const uint8_t *m, size_t mlen) { return implementation->state_mac_update(st_, m, mlen); } int -aegis128x4_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen) +aegis128x4_mac_final(aegis128x4_mac_state *st_, uint8_t *mac, size_t maclen) { if (maclen != 16 && maclen != 32) { errno = EINVAL; @@ -199,7 +199,7 @@ aegis128x4_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen) } int -aegis128x4_mac_verify(aegis128x4_state *st_, const uint8_t *mac, size_t maclen) +aegis128x4_mac_verify(aegis128x4_mac_state *st_, const uint8_t *mac, size_t maclen) { uint8_t expected_mac[32]; @@ -217,9 +217,15 @@ aegis128x4_mac_verify(aegis128x4_state *st_, const uint8_t *mac, size_t maclen) } void -aegis128x4_mac_state_clone(aegis128x4_state *dst, const aegis128x4_state *src) +aegis128x4_mac_reset(aegis128x4_mac_state *st_) { - implementation->state_clone(dst, src); + implementation->state_mac_reset(st_); +} + +void +aegis128x4_mac_state_clone(aegis128x4_mac_state *dst, const aegis128x4_mac_state *src) +{ + implementation->state_mac_clone(dst, src); } int diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c index 1664139..9c838a3 100644 --- a/src/aegis128x4/aegis128x4_aesni.c +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -107,9 +107,11 @@ struct aegis128x4_implementation aegis128x4_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_altivec.c b/src/aegis128x4/aegis128x4_altivec.c index 3782021..dbe33dc 100644 --- a/src/aegis128x4/aegis128x4_altivec.c +++ b/src/aegis128x4/aegis128x4_altivec.c @@ -101,9 +101,11 @@ struct aegis128x4_implementation aegis128x4_altivec_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index ebfe6db..e88398c 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -109,9 +109,11 @@ struct aegis128x4_implementation aegis128x4_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c index f95e081..4a32fdd 100644 --- a/src/aegis128x4/aegis128x4_avx2.c +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -99,9 +99,11 @@ struct aegis128x4_implementation aegis128x4_avx2_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 86c7cd1..2372d35 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -72,9 +72,11 @@ struct aegis128x4_implementation aegis128x4_avx512_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 16cc63a..19384ef 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -192,6 +192,76 @@ aegis128x4_declast(uint8_t *const dst, const uint8_t *const src, size_t len, aegis128x4_update(state, msg0, msg1); } +static void +aegis128x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *state) +{ + uint8_t t[2 * AES_BLOCK_LENGTH]; + uint8_t r[RATE]; + aes_block_t tmp; + int i; + const int d = AES_BLOCK_LENGTH / 16; + + tmp = AES_BLOCK_LOAD_64x2(0, adlen << 3); + tmp = AES_BLOCK_XOR(tmp, state[2]); + + for (i = 0; i < 7; i++) { + aegis128x4_update(state, tmp, tmp); + } + + memset(r, 0, sizeof r); + if (maclen == 16) { +#if AES_BLOCK_LENGTH > 16 + tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + for (i = 0; i < d / 2; i++) { + memcpy(r, t + i * 32, 32); + aegis128x4_absorb(r, state); + } + tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_XOR(tmp, state[2]); + for (i = 0; i < 7; i++) { + aegis128x4_update(state, tmp, tmp); + } +#endif + tmp = AES_BLOCK_XOR(state[6], AES_BLOCK_XOR(state[5], state[4])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac, t, 16); + } else if (maclen == 32) { +#if AES_BLOCK_LENGTH > 16 + tmp = AES_BLOCK_XOR(state[3], state[2]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + tmp = AES_BLOCK_XOR(state[7], state[6]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[5], state[4])); + AES_BLOCK_STORE(t + AES_BLOCK_LENGTH, tmp); + for (i = 1; i < d; i++) { + memcpy(r, t + i * 16, 16); + memcpy(r + 16, t + AES_BLOCK_LENGTH + i * 16, 16); + aegis128x4_absorb(r, state); + } + tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_XOR(tmp, state[2]); + for (i = 0; i < 7; i++) { + aegis128x4_update(state, tmp, tmp); + } +#endif + tmp = AES_BLOCK_XOR(state[3], state[2]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac, t, 16); + tmp = AES_BLOCK_XOR(state[7], state[6]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[5], state[4])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac + 16, t, 16); + } else { + memset(mac, 0, maclen); + } +} + static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) @@ -351,6 +421,14 @@ typedef struct _aegis128x4_state { size_t pos; } _aegis128x4_state; +typedef struct _aegis128x4_mac_state { + aegis_blocks blocks0; + aegis_blocks blocks; + uint8_t buf[RATE]; + uint64_t adlen; + size_t pos; +} _aegis128x4_mac_state; + static void state_init(aegis128x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) @@ -619,13 +697,33 @@ state_decrypt_detached_final(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, return ret; } +static void +state_mac_init(aegis128x4_mac_state *st_, const uint8_t *npub, const uint8_t *k) +{ + aegis_blocks blocks; + _aegis128x4_mac_state *const st = + (_aegis128x4_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); + st->pos = 0; + + memcpy(blocks, st->blocks, sizeof blocks); + + aegis128x4_init(k, npub, blocks); + + memcpy(st->blocks0, blocks, sizeof blocks); + memcpy(st->blocks, blocks, sizeof blocks); + st->adlen = 0; +} + static int -state_mac_update(aegis128x4_state *st_, const uint8_t *ad, size_t adlen) +state_mac_update(aegis128x4_mac_state *st_, const uint8_t *ad, size_t adlen) { - aegis_blocks blocks; - _aegis128x4_state *const st = - (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis128x4_mac_state *const st = + (_aegis128x4_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -669,12 +767,12 @@ state_mac_update(aegis128x4_state *st_, const uint8_t *ad, size_t adlen) } static int -state_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen) +state_mac_final(aegis128x4_mac_state *st_, uint8_t *mac, size_t maclen) { - aegis_blocks blocks; - _aegis128x4_state *const st = - (_aegis128x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis128x4_mac_state *const st = + (_aegis128x4_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; memcpy(blocks, st->blocks, sizeof blocks); @@ -684,7 +782,7 @@ state_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen) memset(st->buf + left, 0, RATE - left); aegis128x4_absorb(st->buf, blocks); } - aegis128x4_mac(mac, maclen, st->adlen, 0, blocks); + aegis128x4_mac_nr(mac, maclen, st->adlen, blocks); memcpy(st->blocks, blocks, sizeof blocks); @@ -692,13 +790,24 @@ state_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen) } static void -state_clone(aegis128x4_state *dst, const aegis128x4_state *src) +state_mac_reset(aegis128x4_mac_state *st_) { - _aegis128x4_state *const dst_ = - (_aegis128x4_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); - const _aegis128x4_state *const src_ = - (const _aegis128x4_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + _aegis128x4_mac_state *const st = + (_aegis128x4_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + st->adlen = 0; + st->pos = 0; + memcpy(st->blocks, st->blocks0, sizeof(aegis_blocks)); +} + +static void +state_mac_clone(aegis128x4_mac_state *dst, const aegis128x4_mac_state *src) +{ + _aegis128x4_mac_state *const dst_ = + (_aegis128x4_mac_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + const _aegis128x4_mac_state *const src_ = + (const _aegis128x4_mac_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; -} \ No newline at end of file +} diff --git a/src/aegis128x4/implementations.h b/src/aegis128x4/implementations.h index 9d8d3e8..d1ec626 100644 --- a/src/aegis128x4/implementations.h +++ b/src/aegis128x4/implementations.h @@ -29,9 +29,11 @@ typedef struct aegis128x4_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis128x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); - int (*state_mac_update)(aegis128x4_state *st_, const uint8_t *ad, size_t adlen); - int (*state_mac_final)(aegis128x4_state *st_, uint8_t *mac, size_t maclen); - void (*state_clone)(aegis128x4_state *dst, const aegis128x4_state *src); + void (*state_mac_init)(aegis128x4_mac_state *st_, const uint8_t *npub, const uint8_t *k); + int (*state_mac_update)(aegis128x4_mac_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis128x4_mac_state *st_, uint8_t *mac, size_t maclen); + void (*state_mac_reset)(aegis128x4_mac_state *st); + void (*state_mac_clone)(aegis128x4_mac_state *dst, const aegis128x4_mac_state *src); } aegis128x4_implementation; #endif diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index 6de9741..2de55e4 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -31,6 +31,11 @@ typedef struct aegis128x4_state { CRYPTO_ALIGN(64) uint8_t opaque[832]; } aegis128x4_state; +/* An AEGIS state, only for MAC updates */ +typedef struct aegis128x4_mac_state { + CRYPTO_ALIGN(32) uint8_t opaque[1664]; +} aegis128x4_mac_state; + /* The length of an AEGIS key, in bytes */ size_t aegis128x4_keybytes(void); @@ -258,13 +263,12 @@ void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * k: key input buffer (16 bytes) * * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce MUST NOT be reused with the same key. * - If the key is secret, the MAC is secure against forgery. * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. */ -void aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k, const uint8_t *npub); +void aegis128x4_mac_init(aegis128x4_mac_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. @@ -277,7 +281,7 @@ void aegis128x4_mac_init(aegis128x4_state *st_, const uint8_t *k, const uint8_t * * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. */ -int aegis128x4_mac_update(aegis128x4_state *st_, const uint8_t *m, size_t mlen); +int aegis128x4_mac_update(aegis128x4_mac_state *st_, const uint8_t *m, size_t mlen); /* * Finalize the MAC and generate the authentication tag. @@ -286,7 +290,7 @@ int aegis128x4_mac_update(aegis128x4_state *st_, const uint8_t *m, size_t mlen); * mac: authentication tag output buffer * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). */ -int aegis128x4_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen); +int aegis128x4_mac_final(aegis128x4_mac_state *st_, uint8_t *mac, size_t maclen); /* * Verify a MAC in constant time. @@ -297,7 +301,12 @@ int aegis128x4_mac_final(aegis128x4_state *st_, uint8_t *mac, size_t maclen); * * Returns 0 if the tag is authentic, -1 otherwise. */ -int aegis128x4_mac_verify(aegis128x4_state *st_, const uint8_t *mac, size_t maclen); +int aegis128x4_mac_verify(aegis128x4_mac_state *st_, const uint8_t *mac, size_t maclen); + +/* + * Reset an AEGIS_MAC state. + */ +void aegis128x4_mac_reset(aegis128x4_mac_state *st_); /* * Clone an AEGIS-MAC state. @@ -307,7 +316,7 @@ int aegis128x4_mac_verify(aegis128x4_state *st_, const uint8_t *mac, size_t macl * * This function MUST be used in order to clone states. */ -void aegis128x4_mac_state_clone(aegis128x4_state *dst, const aegis128x4_state *src); +void aegis128x4_mac_state_clone(aegis128x4_mac_state *dst, const aegis128x4_mac_state *src); #ifdef __cplusplus } diff --git a/src/test/main.zig b/src/test/main.zig index 06978b4..07a214a 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -708,10 +708,10 @@ test "aegis128x4 - MAC" { const nonce = [_]u8{0} ** 16; const msg = [_]u8{ 1, 2, 3 } ** 100 ++ [_]u8{0}; const msg2 = [_]u8{ 4, 5, 6, 7, 8 } ** 100; - var st0: aegis.aegis128x4_state = undefined; + var st0: aegis.aegis128x4_mac_state = undefined; aegis.aegis128x4_mac_init(&st0, &key, &nonce); - var st: aegis.aegis128x4_state = undefined; + var st: aegis.aegis128x4_mac_state = undefined; aegis.aegis128x4_mac_state_clone(&st, &st0); var ret = aegis.aegis128x4_mac_update(&st, &msg, msg.len); try testing.expectEqual(ret, 0); @@ -739,7 +739,7 @@ test "aegis128x4 - MAC" { var mac2: [mac.len]u8 = undefined; ret = aegis.aegis128x4_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); try testing.expectEqual(ret, 0); - try testing.expectEqualSlices(u8, &mac, &mac2); + try testing.expect(!std.mem.eql(u8, &mac, &mac2)); } test "aegis128l - MAC test vector" { @@ -800,6 +800,35 @@ test "aegis128x2 - MAC test vector" { try std.testing.expectEqualSlices(u8, &expected256, &mac256); } +test "aegis128x4 - MAC test vector" { + const key = [_]u8{ 0x10, 0x01 } ++ [_]u8{0x00} ** (16 - 2); + const nonce = [_]u8{ 0x10, 0x00, 0x02 } ++ [_]u8{0x00} ** (16 - 3); + var msg: [35]u8 = undefined; + for (&msg, 0..) |*byte, i| byte.* = @truncate(i); + var mac128: [16]u8 = undefined; + var mac256: [32]u8 = undefined; + var st: aegis.aegis128x4_mac_state = undefined; + var ret: c_int = undefined; + aegis.aegis128x4_mac_init(&st, &key, &nonce); + ret = aegis.aegis128x4_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128x4_mac_final(&st, &mac128, mac128.len); + try testing.expectEqual(ret, 0); + aegis.aegis128x4_mac_reset(&st); + ret = aegis.aegis128x4_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis128x4_mac_final(&st, &mac256, mac256.len); + try testing.expectEqual(ret, 0); + const expected128_hex = "3742a0bf0a9e8604841fe520fc57621c"; + const expected256_hex = "3da44ead4e192d0df3c47c994c242b69dab2fdf0d98f58f96838d634ab945d3a"; + var expected128: [16]u8 = undefined; + var expected256: [32]u8 = undefined; + _ = try std.fmt.hexToBytes(&expected128, expected128_hex); + _ = try std.fmt.hexToBytes(&expected256, expected256_hex); + try std.testing.expectEqualSlices(u8, &expected128, &mac128); + try std.testing.expectEqualSlices(u8, &expected256, &mac256); +} + // Wycheproof tests const JsonTest = struct { From 471873e8da752bb925e1d173efe1a7df683384bb Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 9 Dec 2024 19:28:01 +0100 Subject: [PATCH 183/219] Don't forget aegis128x4_soft.c --- src/aegis128x4/aegis128x4_soft.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/aegis128x4/aegis128x4_soft.c b/src/aegis128x4/aegis128x4_soft.c index 6c24629..7036620 100644 --- a/src/aegis128x4/aegis128x4_soft.c +++ b/src/aegis128x4/aegis128x4_soft.c @@ -98,9 +98,11 @@ struct aegis128x4_implementation aegis128x4_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; #endif \ No newline at end of file From 1a9fb218511cf88b4ad5a73390b2faca5c0b2376 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 10 Dec 2024 00:29:39 +0100 Subject: [PATCH 184/219] Move remaining variants to the new MAC API and construction --- src/aegis128x2/aegis128x2_common.h | 2 +- src/aegis128x4/aegis128x4_common.h | 2 +- src/aegis256/aegis256_common.h | 2 +- src/aegis256x2/aegis256x2.c | 20 ++-- src/aegis256x2/aegis256x2_aesni.c | 4 +- src/aegis256x2/aegis256x2_altivec.c | 4 +- src/aegis256x2/aegis256x2_armcrypto.c | 4 +- src/aegis256x2/aegis256x2_avx2.c | 4 +- src/aegis256x2/aegis256x2_common.h | 143 ++++++++++++++++++++++---- src/aegis256x2/aegis256x2_soft.c | 4 +- src/aegis256x2/implementations.h | 9 +- src/aegis256x4/aegis256x4.c | 20 ++-- src/aegis256x4/aegis256x4_aesni.c | 4 +- src/aegis256x4/aegis256x4_altivec.c | 4 +- src/aegis256x4/aegis256x4_armcrypto.c | 4 +- src/aegis256x4/aegis256x4_avx2.c | 4 +- src/aegis256x4/aegis256x4_avx512.c | 4 +- src/aegis256x4/aegis256x4_common.h | 143 ++++++++++++++++++++++---- src/aegis256x4/aegis256x4_soft.c | 4 +- src/aegis256x4/implementations.h | 9 +- src/include/aegis128l.h | 2 +- src/include/aegis128x2.h | 2 +- src/include/aegis128x4.h | 6 +- src/include/aegis256.h | 2 +- src/include/aegis256x2.h | 25 +++-- src/include/aegis256x4.h | 25 +++-- src/test/benchmark.zig | 12 +-- src/test/main.zig | 87 ++++++++++++++++ 28 files changed, 463 insertions(+), 92 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index 01aa97d..e604ff5 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -407,8 +407,8 @@ typedef struct _aegis128x2_state { } _aegis128x2_state; typedef struct _aegis128x2_mac_state { - aegis_blocks blocks0; aegis_blocks blocks; + aegis_blocks blocks0; uint8_t buf[RATE]; uint64_t adlen; size_t pos; diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 19384ef..9dd1c3e 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -422,8 +422,8 @@ typedef struct _aegis128x4_state { } _aegis128x4_state; typedef struct _aegis128x4_mac_state { - aegis_blocks blocks0; aegis_blocks blocks; + aegis_blocks blocks0; uint8_t buf[RATE]; uint64_t adlen; size_t pos; diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index acf66e0..3ab1a47 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -289,8 +289,8 @@ typedef struct _aegis256_state { } _aegis256_state; typedef struct _aegis256_mac_state { - aegis_blocks blocks0; aegis_blocks blocks; + aegis_blocks blocks0; uint8_t buf[RATE]; uint64_t adlen; size_t pos; diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index 0777d7f..cb12585 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -176,19 +176,19 @@ aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co } void -aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k, const uint8_t *npub) +aegis256x2_mac_init(aegis256x2_mac_state *st_, const uint8_t *k, const uint8_t *npub) { - implementation->state_init(st_, NULL, 0, npub, k); + implementation->state_mac_init(st_, npub, k); } int -aegis256x2_mac_update(aegis256x2_state *st_, const uint8_t *m, size_t mlen) +aegis256x2_mac_update(aegis256x2_mac_state *st_, const uint8_t *m, size_t mlen) { return implementation->state_mac_update(st_, m, mlen); } int -aegis256x2_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen) +aegis256x2_mac_final(aegis256x2_mac_state *st_, uint8_t *mac, size_t maclen) { if (maclen != 16 && maclen != 32) { errno = EINVAL; @@ -198,7 +198,7 @@ aegis256x2_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen) } int -aegis256x2_mac_verify(aegis256x2_state *st_, const uint8_t *mac, size_t maclen) +aegis256x2_mac_verify(aegis256x2_mac_state *st_, const uint8_t *mac, size_t maclen) { uint8_t expected_mac[32]; @@ -216,9 +216,15 @@ aegis256x2_mac_verify(aegis256x2_state *st_, const uint8_t *mac, size_t maclen) } void -aegis256x2_mac_state_clone(aegis256x2_state *dst, const aegis256x2_state *src) +aegis256x2_mac_reset(aegis256x2_mac_state *st_) { - implementation->state_clone(dst, src); + implementation->state_mac_reset(st_); +} + +void +aegis256x2_mac_state_clone(aegis256x2_mac_state *dst, const aegis256x2_mac_state *src) +{ + implementation->state_mac_clone(dst, src); } int diff --git a/src/aegis256x2/aegis256x2_aesni.c b/src/aegis256x2/aegis256x2_aesni.c index 98020cf..7064c96 100644 --- a/src/aegis256x2/aegis256x2_aesni.c +++ b/src/aegis256x2/aegis256x2_aesni.c @@ -93,9 +93,11 @@ struct aegis256x2_implementation aegis256x2_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256x2/aegis256x2_altivec.c b/src/aegis256x2/aegis256x2_altivec.c index 52d7e0e..d34901d 100644 --- a/src/aegis256x2/aegis256x2_altivec.c +++ b/src/aegis256x2/aegis256x2_altivec.c @@ -91,9 +91,11 @@ struct aegis256x2_implementation aegis256x2_altivec_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c index 6ffbab8..8ecdf73 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -99,9 +99,11 @@ struct aegis256x2_implementation aegis256x2_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c index d5d7e57..01d4505 100644 --- a/src/aegis256x2/aegis256x2_avx2.c +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -61,9 +61,11 @@ struct aegis256x2_implementation aegis256x2_avx2_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index 94157dd..80f904e 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -178,6 +178,74 @@ aegis256x2_declast(uint8_t *const dst, const uint8_t *const src, size_t len, aegis256x2_update(state, msg); } +static void +aegis256x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *state) +{ + uint8_t t[2 * AES_BLOCK_LENGTH]; + uint8_t r[RATE]; + aes_block_t tmp; + int i; + const int d = AES_BLOCK_LENGTH / 16; + + tmp = AES_BLOCK_LOAD_64x2(0, adlen << 3); + tmp = AES_BLOCK_XOR(tmp, state[3]); + + for (i = 0; i < 7; i++) { + aegis256x2_update(state, tmp); + } + + memset(r, 0, sizeof r); + if (maclen == 16) { +#if AES_BLOCK_LENGTH > 16 + tmp = AES_BLOCK_XOR(state[5], state[4]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + + for (i = 1; i < d; i++) { + memcpy(r, t + i * 16, 16); + aegis256x2_absorb(r, state); + } + tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_XOR(tmp, state[3]); + for (i = 0; i < 7; i++) { + aegis256x2_update(state, tmp); + } +#endif + tmp = AES_BLOCK_XOR(state[5], state[4]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac, t, 16); + } else if (maclen == 32) { +#if AES_BLOCK_LENGTH > 16 + tmp = AES_BLOCK_XOR(state[2], AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + tmp = AES_BLOCK_XOR(state[5], AES_BLOCK_XOR(state[4], state[3])); + AES_BLOCK_STORE(t + AES_BLOCK_LENGTH, tmp); + for (i = 1; i < d; i++) { + memcpy(r, t + i * 16, 16); + aegis256x2_absorb(r, state); + memcpy(r, t + AES_BLOCK_LENGTH + i * 16, 16); + aegis256x2_absorb(r, state); + } + tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_XOR(tmp, state[3]); + for (i = 0; i < 7; i++) { + aegis256x2_update(state, tmp); + } +#endif + tmp = AES_BLOCK_XOR(state[2], AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac, t, 16); + tmp = AES_BLOCK_XOR(state[5], AES_BLOCK_XOR(state[4], state[3])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac + 16, t, 16); + } else { + memset(mac, 0, maclen); + } +} + static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) @@ -337,6 +405,14 @@ typedef struct _aegis256x2_state { size_t pos; } _aegis256x2_state; +typedef struct _aegis256x2_mac_state { + aegis_blocks blocks; + aegis_blocks blocks0; + uint8_t buf[RATE]; + uint64_t adlen; + size_t pos; +} _aegis256x2_mac_state; + static void state_init(aegis256x2_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) @@ -605,13 +681,33 @@ state_decrypt_detached_final(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, return ret; } +static void +state_mac_init(aegis256x2_mac_state *st_, const uint8_t *npub, const uint8_t *k) +{ + aegis_blocks blocks; + _aegis256x2_mac_state *const st = + (_aegis256x2_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); + st->pos = 0; + + memcpy(blocks, st->blocks, sizeof blocks); + + aegis256x2_init(k, npub, blocks); + + memcpy(st->blocks0, blocks, sizeof blocks); + memcpy(st->blocks, blocks, sizeof blocks); + st->adlen = 0; +} + static int -state_mac_update(aegis256x2_state *st_, const uint8_t *ad, size_t adlen) +state_mac_update(aegis256x2_mac_state *st_, const uint8_t *ad, size_t adlen) { - aegis_blocks blocks; - _aegis256x2_state *const st = - (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis256x2_mac_state *const st = + (_aegis256x2_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -653,12 +749,12 @@ state_mac_update(aegis256x2_state *st_, const uint8_t *ad, size_t adlen) } static int -state_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen) +state_mac_final(aegis256x2_mac_state *st_, uint8_t *mac, size_t maclen) { - aegis_blocks blocks; - _aegis256x2_state *const st = - (_aegis256x2_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis256x2_mac_state *const st = + (_aegis256x2_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; memcpy(blocks, st->blocks, sizeof blocks); @@ -668,7 +764,7 @@ state_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen) memset(st->buf + left, 0, RATE - left); aegis256x2_absorb(st->buf, blocks); } - aegis256x2_mac(mac, maclen, st->adlen, 0, blocks); + aegis256x2_mac_nr(mac, maclen, st->adlen, blocks); memcpy(st->blocks, blocks, sizeof blocks); @@ -676,13 +772,24 @@ state_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen) } static void -state_clone(aegis256x2_state *dst, const aegis256x2_state *src) +state_mac_reset(aegis256x2_mac_state *st_) { - _aegis256x2_state *const dst_ = - (_aegis256x2_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); - const _aegis256x2_state *const src_ = - (const _aegis256x2_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + _aegis256x2_mac_state *const st = + (_aegis256x2_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + st->adlen = 0; + st->pos = 0; + memcpy(st->blocks, st->blocks0, sizeof(aegis_blocks)); +} + +static void +state_mac_clone(aegis256x2_mac_state *dst, const aegis256x2_mac_state *src) +{ + _aegis256x2_mac_state *const dst_ = + (_aegis256x2_mac_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + const _aegis256x2_mac_state *const src_ = + (const _aegis256x2_mac_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_soft.c b/src/aegis256x2/aegis256x2_soft.c index c45cf8e..3e478be 100644 --- a/src/aegis256x2/aegis256x2_soft.c +++ b/src/aegis256x2/aegis256x2_soft.c @@ -85,9 +85,11 @@ struct aegis256x2_implementation aegis256x2_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; #endif \ No newline at end of file diff --git a/src/aegis256x2/implementations.h b/src/aegis256x2/implementations.h index ebf66c3..2698e38 100644 --- a/src/aegis256x2/implementations.h +++ b/src/aegis256x2/implementations.h @@ -29,9 +29,12 @@ typedef struct aegis256x2_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis256x2_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); - int (*state_mac_update)(aegis256x2_state *st_, const uint8_t *ad, size_t adlen); - int (*state_mac_final)(aegis256x2_state *st_, uint8_t *mac, size_t maclen); - void (*state_clone)(aegis256x2_state *dst, const aegis256x2_state *src); + void (*state_mac_init)(aegis256x2_mac_state *st_, const uint8_t *npub, const uint8_t *k); + int (*state_mac_update)(aegis256x2_mac_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis256x2_mac_state *st_, uint8_t *mac, size_t maclen); + void (*state_mac_reset)(aegis256x2_mac_state *st); + void (*state_mac_clone)(aegis256x2_mac_state *dst, const aegis256x2_mac_state *src); + } aegis256x2_implementation; #endif diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index 6d430f8..e94dc89 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -177,19 +177,19 @@ aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, co } void -aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k, const uint8_t *npub) +aegis256x4_mac_init(aegis256x4_mac_state *st_, const uint8_t *k, const uint8_t *npub) { - implementation->state_init(st_, NULL, 0, npub, k); + implementation->state_mac_init(st_, npub, k); } int -aegis256x4_mac_update(aegis256x4_state *st_, const uint8_t *m, size_t mlen) +aegis256x4_mac_update(aegis256x4_mac_state *st_, const uint8_t *m, size_t mlen) { return implementation->state_mac_update(st_, m, mlen); } int -aegis256x4_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen) +aegis256x4_mac_final(aegis256x4_mac_state *st_, uint8_t *mac, size_t maclen) { if (maclen != 16 && maclen != 32) { errno = EINVAL; @@ -199,7 +199,7 @@ aegis256x4_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen) } int -aegis256x4_mac_verify(aegis256x4_state *st_, const uint8_t *mac, size_t maclen) +aegis256x4_mac_verify(aegis256x4_mac_state *st_, const uint8_t *mac, size_t maclen) { uint8_t expected_mac[32]; @@ -217,9 +217,15 @@ aegis256x4_mac_verify(aegis256x4_state *st_, const uint8_t *mac, size_t maclen) } void -aegis256x4_mac_state_clone(aegis256x4_state *dst, const aegis256x4_state *src) +aegis256x4_mac_reset(aegis256x4_mac_state *st_) { - implementation->state_clone(dst, src); + implementation->state_mac_reset(st_); +} + +void +aegis256x4_mac_state_clone(aegis256x4_mac_state *dst, const aegis256x4_mac_state *src) +{ + implementation->state_mac_clone(dst, src); } int diff --git a/src/aegis256x4/aegis256x4_aesni.c b/src/aegis256x4/aegis256x4_aesni.c index b9bbebb..54f6aef 100644 --- a/src/aegis256x4/aegis256x4_aesni.c +++ b/src/aegis256x4/aegis256x4_aesni.c @@ -102,9 +102,11 @@ struct aegis256x4_implementation aegis256x4_aesni_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_altivec.c b/src/aegis256x4/aegis256x4_altivec.c index c061cb2..84d2db2 100644 --- a/src/aegis256x4/aegis256x4_altivec.c +++ b/src/aegis256x4/aegis256x4_altivec.c @@ -99,9 +99,11 @@ struct aegis256x4_implementation aegis256x4_altivec_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_armcrypto.c b/src/aegis256x4/aegis256x4_armcrypto.c index 42aa0d4..e30d55f 100644 --- a/src/aegis256x4/aegis256x4_armcrypto.c +++ b/src/aegis256x4/aegis256x4_armcrypto.c @@ -107,9 +107,11 @@ struct aegis256x4_implementation aegis256x4_armcrypto_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_avx2.c b/src/aegis256x4/aegis256x4_avx2.c index cbd2c30..aeb6369 100644 --- a/src/aegis256x4/aegis256x4_avx2.c +++ b/src/aegis256x4/aegis256x4_avx2.c @@ -94,9 +94,11 @@ struct aegis256x4_implementation aegis256x4_avx2_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_avx512.c b/src/aegis256x4/aegis256x4_avx512.c index 22d3b69..3c3cd64 100644 --- a/src/aegis256x4/aegis256x4_avx512.c +++ b/src/aegis256x4/aegis256x4_avx512.c @@ -67,9 +67,11 @@ struct aegis256x4_implementation aegis256x4_avx512_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; # ifdef __clang__ diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index b28a3d5..47ce415 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -197,6 +197,74 @@ aegis256x4_declast(uint8_t *const dst, const uint8_t *const src, size_t len, aegis256x4_update(state, msg); } +static void +aegis256x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *state) +{ + uint8_t t[2 * AES_BLOCK_LENGTH]; + uint8_t r[RATE]; + aes_block_t tmp; + int i; + const int d = AES_BLOCK_LENGTH / 16; + + tmp = AES_BLOCK_LOAD_64x2(0, adlen << 3); + tmp = AES_BLOCK_XOR(tmp, state[3]); + + for (i = 0; i < 7; i++) { + aegis256x4_update(state, tmp); + } + + memset(r, 0, sizeof r); + if (maclen == 16) { +#if AES_BLOCK_LENGTH > 16 + tmp = AES_BLOCK_XOR(state[5], state[4]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + + for (i = 1; i < d; i++) { + memcpy(r, t + i * 16, 16); + aegis256x4_absorb(r, state); + } + tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_XOR(tmp, state[3]); + for (i = 0; i < 7; i++) { + aegis256x4_update(state, tmp); + } +#endif + tmp = AES_BLOCK_XOR(state[5], state[4]); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[3], state[2])); + tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac, t, 16); + } else if (maclen == 32) { +#if AES_BLOCK_LENGTH > 16 + tmp = AES_BLOCK_XOR(state[2], AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + tmp = AES_BLOCK_XOR(state[5], AES_BLOCK_XOR(state[4], state[3])); + AES_BLOCK_STORE(t + AES_BLOCK_LENGTH, tmp); + for (i = 1; i < d; i++) { + memcpy(r, t + i * 16, 16); + aegis256x4_absorb(r, state); + memcpy(r, t + AES_BLOCK_LENGTH + i * 16, 16); + aegis256x4_absorb(r, state); + } + tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_XOR(tmp, state[3]); + for (i = 0; i < 7; i++) { + aegis256x4_update(state, tmp); + } +#endif + tmp = AES_BLOCK_XOR(state[2], AES_BLOCK_XOR(state[1], state[0])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac, t, 16); + tmp = AES_BLOCK_XOR(state[5], AES_BLOCK_XOR(state[4], state[3])); + AES_BLOCK_STORE(t, tmp); + memcpy(mac + 16, t, 16); + } else { + memset(mac, 0, maclen); + } +} + static int encrypt_detached(uint8_t *c, uint8_t *mac, size_t maclen, const uint8_t *m, size_t mlen, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) @@ -356,6 +424,14 @@ typedef struct _aegis256x4_state { size_t pos; } _aegis256x4_state; +typedef struct _aegis256x4_mac_state { + aegis_blocks blocks; + aegis_blocks blocks0; + uint8_t buf[RATE]; + uint64_t adlen; + size_t pos; +} _aegis256x4_mac_state; + static void state_init(aegis256x4_state *st_, const uint8_t *ad, size_t adlen, const uint8_t *npub, const uint8_t *k) @@ -624,13 +700,33 @@ state_decrypt_detached_final(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, return ret; } +static void +state_mac_init(aegis256x4_mac_state *st_, const uint8_t *npub, const uint8_t *k) +{ + aegis_blocks blocks; + _aegis256x4_mac_state *const st = + (_aegis256x4_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + + COMPILER_ASSERT((sizeof *st) + ALIGNMENT <= sizeof *st_); + st->pos = 0; + + memcpy(blocks, st->blocks, sizeof blocks); + + aegis256x4_init(k, npub, blocks); + + memcpy(st->blocks0, blocks, sizeof blocks); + memcpy(st->blocks, blocks, sizeof blocks); + st->adlen = 0; +} + static int -state_mac_update(aegis256x4_state *st_, const uint8_t *ad, size_t adlen) +state_mac_update(aegis256x4_mac_state *st_, const uint8_t *ad, size_t adlen) { - aegis_blocks blocks; - _aegis256x4_state *const st = - (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis256x4_mac_state *const st = + (_aegis256x4_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t i; size_t left; @@ -672,12 +768,12 @@ state_mac_update(aegis256x4_state *st_, const uint8_t *ad, size_t adlen) } static int -state_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen) +state_mac_final(aegis256x4_mac_state *st_, uint8_t *mac, size_t maclen) { - aegis_blocks blocks; - _aegis256x4_state *const st = - (_aegis256x4_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + aegis_blocks blocks; + _aegis256x4_mac_state *const st = + (_aegis256x4_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); size_t left; memcpy(blocks, st->blocks, sizeof blocks); @@ -687,7 +783,7 @@ state_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen) memset(st->buf + left, 0, RATE - left); aegis256x4_absorb(st->buf, blocks); } - aegis256x4_mac(mac, maclen, st->adlen, 0, blocks); + aegis256x4_mac_nr(mac, maclen, st->adlen, blocks); memcpy(st->blocks, blocks, sizeof blocks); @@ -695,13 +791,24 @@ state_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen) } static void -state_clone(aegis256x4_state *dst, const aegis256x4_state *src) +state_mac_reset(aegis256x4_mac_state *st_) { - _aegis256x4_state *const dst_ = - (_aegis256x4_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); - const _aegis256x4_state *const src_ = - (const _aegis256x4_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & - ~(uintptr_t) (ALIGNMENT - 1)); + _aegis256x4_mac_state *const st = + (_aegis256x4_mac_state *) ((((uintptr_t) &st_->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + st->adlen = 0; + st->pos = 0; + memcpy(st->blocks, st->blocks0, sizeof(aegis_blocks)); +} + +static void +state_mac_clone(aegis256x4_mac_state *dst, const aegis256x4_mac_state *src) +{ + _aegis256x4_mac_state *const dst_ = + (_aegis256x4_mac_state *) ((((uintptr_t) &dst->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); + const _aegis256x4_mac_state *const src_ = + (const _aegis256x4_mac_state *) ((((uintptr_t) &src->opaque) + (ALIGNMENT - 1)) & + ~(uintptr_t) (ALIGNMENT - 1)); *dst_ = *src_; } \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_soft.c b/src/aegis256x4/aegis256x4_soft.c index 4b2c227..f98bb35 100644 --- a/src/aegis256x4/aegis256x4_soft.c +++ b/src/aegis256x4/aegis256x4_soft.c @@ -93,9 +93,11 @@ struct aegis256x4_implementation aegis256x4_soft_implementation = { .state_encrypt_final = state_encrypt_final, .state_decrypt_detached_update = state_decrypt_detached_update, .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, .state_mac_update = state_mac_update, .state_mac_final = state_mac_final, - .state_clone = state_clone, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, }; #endif \ No newline at end of file diff --git a/src/aegis256x4/implementations.h b/src/aegis256x4/implementations.h index ecdf2cb..4ca8120 100644 --- a/src/aegis256x4/implementations.h +++ b/src/aegis256x4/implementations.h @@ -29,9 +29,12 @@ typedef struct aegis256x4_implementation { size_t *written, const uint8_t *c, size_t clen); int (*state_decrypt_detached_final)(aegis256x4_state *st_, uint8_t *m, size_t mlen_max, size_t *written, const uint8_t *mac, size_t maclen); - int (*state_mac_update)(aegis256x4_state *st_, const uint8_t *ad, size_t adlen); - int (*state_mac_final)(aegis256x4_state *st_, uint8_t *mac, size_t maclen); - void (*state_clone)(aegis256x4_state *dst, const aegis256x4_state *src); + void (*state_mac_init)(aegis256x4_mac_state *st_, const uint8_t *npub, const uint8_t *k); + int (*state_mac_update)(aegis256x4_mac_state *st_, const uint8_t *ad, size_t adlen); + int (*state_mac_final)(aegis256x4_mac_state *st_, uint8_t *mac, size_t maclen); + void (*state_mac_reset)(aegis256x4_mac_state *st); + void (*state_mac_clone)(aegis256x4_mac_state *dst, const aegis256x4_mac_state *src); + } aegis256x4_implementation; #endif diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index ab44596..1ff762b 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -33,7 +33,7 @@ typedef struct aegis128l_state { /* An AEGIS state, only for MAC updates */ typedef struct aegis128l_mac_state { - CRYPTO_ALIGN(32) uint8_t opaque[512]; + CRYPTO_ALIGN(32) uint8_t opaque[384]; } aegis128l_mac_state; /* The length of an AEGIS key, in bytes */ diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 84cf3d0..6692186 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -33,7 +33,7 @@ typedef struct aegis128x2_state { /* An AEGIS state, only for MAC updates */ typedef struct aegis128x2_mac_state { - CRYPTO_ALIGN(64) uint8_t opaque[896]; + CRYPTO_ALIGN(64) uint8_t opaque[704]; } aegis128x2_mac_state; /* The length of an AEGIS key, in bytes */ diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index 2de55e4..75b00e7 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -33,7 +33,7 @@ typedef struct aegis128x4_state { /* An AEGIS state, only for MAC updates */ typedef struct aegis128x4_mac_state { - CRYPTO_ALIGN(32) uint8_t opaque[1664]; + CRYPTO_ALIGN(64) uint8_t opaque[1344]; } aegis128x4_mac_state; /* The length of an AEGIS key, in bytes */ @@ -267,6 +267,10 @@ void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis128x4_mac_state_clone()`. It is only safe to copy a state directly without using + * the clone function if the state is guaranteed to be properly aligned. */ void aegis128x4_mac_init(aegis128x4_mac_state *st_, const uint8_t *k, const uint8_t *npub); diff --git a/src/include/aegis256.h b/src/include/aegis256.h index f88d662..378da3a 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -33,7 +33,7 @@ typedef struct aegis256_state { /* An AEGIS state, only for MAC updates */ typedef struct aegis256_mac_state { - CRYPTO_ALIGN(16) uint8_t opaque[384]; + CRYPTO_ALIGN(16) uint8_t opaque[288]; } aegis256_mac_state; /* The length of an AEGIS key, in bytes */ diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index 00ac5a4..fc67439 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -31,6 +31,11 @@ typedef struct aegis256x2_state { CRYPTO_ALIGN(32) uint8_t opaque[320]; } aegis256x2_state; +/* An AEGIS state, only for MAC updates */ +typedef struct aegis256x2_mac_state { + CRYPTO_ALIGN(32) uint8_t opaque[512]; +} aegis256x2_mac_state; + /* The length of an AEGIS key, in bytes */ size_t aegis256x2_keybytes(void); @@ -258,13 +263,16 @@ void aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * k: key input buffer (32 bytes) * * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce MUST NOT be reused with the same key. * - If the key is secret, the MAC is secure against forgery. * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis256x2_mac_state_clone()`. It is only safe to copy a state directly without using + * the clone function if the state is guaranteed to be properly aligned. */ -void aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k, const uint8_t *npub); +void aegis256x2_mac_init(aegis256x2_mac_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. @@ -277,7 +285,7 @@ void aegis256x2_mac_init(aegis256x2_state *st_, const uint8_t *k, const uint8_t * * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. */ -int aegis256x2_mac_update(aegis256x2_state *st_, const uint8_t *m, size_t mlen); +int aegis256x2_mac_update(aegis256x2_mac_state *st_, const uint8_t *m, size_t mlen); /* * Finalize the MAC and generate the authentication tag. @@ -286,7 +294,7 @@ int aegis256x2_mac_update(aegis256x2_state *st_, const uint8_t *m, size_t mlen); * mac: authentication tag output buffer * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). */ -int aegis256x2_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen); +int aegis256x2_mac_final(aegis256x2_mac_state *st_, uint8_t *mac, size_t maclen); /* * Verify a MAC in constant time. @@ -297,7 +305,12 @@ int aegis256x2_mac_final(aegis256x2_state *st_, uint8_t *mac, size_t maclen); * * Returns 0 if the tag is authentic, -1 otherwise. */ -int aegis256x2_mac_verify(aegis256x2_state *st_, const uint8_t *mac, size_t maclen); +int aegis256x2_mac_verify(aegis256x2_mac_state *st_, const uint8_t *mac, size_t maclen); + +/* + * Reset an AEGIS_MAC state. + */ +void aegis256x2_mac_reset(aegis256x2_mac_state *st_); /* * Clone an AEGIS-MAC state. @@ -307,7 +320,7 @@ int aegis256x2_mac_verify(aegis256x2_state *st_, const uint8_t *mac, size_t macl * * This function MUST be used in order to clone states. */ -void aegis256x2_mac_state_clone(aegis256x2_state *dst, const aegis256x2_state *src); +void aegis256x2_mac_state_clone(aegis256x2_mac_state *dst, const aegis256x2_mac_state *src); #ifdef __cplusplus } diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index 01d0ad7..e9d2482 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -31,6 +31,11 @@ typedef struct aegis256x4_state { CRYPTO_ALIGN(64) uint8_t opaque[576]; } aegis256x4_state; +/* An AEGIS state, only for MAC updates */ +typedef struct aegis256x4_mac_state { + CRYPTO_ALIGN(64) uint8_t opaque[960]; +} aegis256x4_mac_state; + /* The length of an AEGIS key, in bytes */ size_t aegis256x4_keybytes(void); @@ -258,13 +263,16 @@ void aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * k: key input buffer (32 bytes) * * - The same key MUST NOT be used both for MAC and encryption. - * - The nonce MUST NOT be reused with the same key. * - If the key is secret, the MAC is secure against forgery. * - However, if the key is known, arbitrary inputs matching a tag can be efficiently computed. * * The recommended way to use the MAC mode is to generate a random key and keep it secret. + * + * After initialization, the state can be reused to generate multiple MACs by cloning it + * with `aegis256x4_mac_state_clone()`. It is only safe to copy a state directly without using + * the clone function if the state is guaranteed to be properly aligned. */ -void aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k, const uint8_t *npub); +void aegis256x4_mac_init(aegis256x4_mac_state *st_, const uint8_t *k, const uint8_t *npub); /* * Update the MAC state with input data. @@ -277,7 +285,7 @@ void aegis256x4_mac_init(aegis256x4_state *st_, const uint8_t *k, const uint8_t * * Once the full input has been absorb, call either `_mac_final` or `_mac_verify`. */ -int aegis256x4_mac_update(aegis256x4_state *st_, const uint8_t *m, size_t mlen); +int aegis256x4_mac_update(aegis256x4_mac_state *st_, const uint8_t *m, size_t mlen); /* * Finalize the MAC and generate the authentication tag. @@ -286,7 +294,7 @@ int aegis256x4_mac_update(aegis256x4_state *st_, const uint8_t *m, size_t mlen); * mac: authentication tag output buffer * maclen: length of the authentication tag to generate (16 or 32. 32 is recommended). */ -int aegis256x4_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen); +int aegis256x4_mac_final(aegis256x4_mac_state *st_, uint8_t *mac, size_t maclen); /* * Verify a MAC in constant time. @@ -297,7 +305,12 @@ int aegis256x4_mac_final(aegis256x4_state *st_, uint8_t *mac, size_t maclen); * * Returns 0 if the tag is authentic, -1 otherwise. */ -int aegis256x4_mac_verify(aegis256x4_state *st_, const uint8_t *mac, size_t maclen); +int aegis256x4_mac_verify(aegis256x4_mac_state *st_, const uint8_t *mac, size_t maclen); + +/* + * Reset an AEGIS_MAC state. + */ +void aegis256x4_mac_reset(aegis256x4_mac_state *st_); /* * Clone an AEGIS-MAC state. @@ -307,7 +320,7 @@ int aegis256x4_mac_verify(aegis256x4_state *st_, const uint8_t *mac, size_t macl * * This function MUST be used in order to clone states. */ -void aegis256x4_mac_state_clone(aegis256x4_state *dst, const aegis256x4_state *src); +void aegis256x4_mac_state_clone(aegis256x4_mac_state *dst, const aegis256x4_mac_state *src); #ifdef __cplusplus } diff --git a/src/test/benchmark.zig b/src/test/benchmark.zig index 0c2417b..89e687b 100644 --- a/src/test/benchmark.zig +++ b/src/test/benchmark.zig @@ -258,7 +258,7 @@ fn bench_aegis128x4_mac() !void { var key: [aegis.aegis128x4_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis128x4_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; - var st0: aegis.aegis128x4_state = undefined; + var st0: aegis.aegis128x4_mac_state = undefined; random.bytes(&key); random.bytes(&nonce); @@ -268,7 +268,7 @@ fn bench_aegis128x4_mac() !void { var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st: aegis.aegis128x4_state = undefined; + var st: aegis.aegis128x4_mac_state = undefined; aegis.aegis128x4_mac_state_clone(&st, &st0); _ = aegis.aegis128x4_mac_update(&st, &buf, msg_len); _ = aegis.aegis128x4_mac_final(&st, &buf, aegis.aegis128x4_ABYTES_MAX); @@ -313,7 +313,7 @@ fn bench_aegis256x2_mac() !void { var key: [aegis.aegis256x2_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis256x2_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; - var st0: aegis.aegis256x2_state = undefined; + var st0: aegis.aegis256x2_mac_state = undefined; random.bytes(&key); random.bytes(&nonce); @@ -323,7 +323,7 @@ fn bench_aegis256x2_mac() !void { var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st: aegis.aegis256x2_state = undefined; + var st: aegis.aegis256x2_mac_state = undefined; aegis.aegis256x2_mac_state_clone(&st, &st0); _ = aegis.aegis256x2_mac_update(&st, &buf, msg_len); _ = aegis.aegis256x2_mac_final(&st, &buf, aegis.aegis256x2_ABYTES_MAX); @@ -341,7 +341,7 @@ fn bench_aegis256x4_mac() !void { var key: [aegis.aegis256x4_KEYBYTES]u8 = undefined; var nonce: [aegis.aegis256x2_NPUBBYTES]u8 = undefined; var buf: [msg_len]u8 = undefined; - var st0: aegis.aegis256x4_state = undefined; + var st0: aegis.aegis256x4_mac_state = undefined; random.bytes(&key); random.bytes(&nonce); @@ -351,7 +351,7 @@ fn bench_aegis256x4_mac() !void { var timer = try Timer.start(); const start = timer.lap(); for (0..iterations) |_| { - var st: aegis.aegis256x4_state = undefined; + var st: aegis.aegis256x4_mac_state = undefined; aegis.aegis256x4_mac_state_clone(&st, &st0); _ = aegis.aegis256x4_mac_update(&st, &buf, msg_len); _ = aegis.aegis256x4_mac_final(&st, &buf, aegis.aegis256x4_ABYTES_MAX); diff --git a/src/test/main.zig b/src/test/main.zig index 07a214a..e3e7490 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -829,6 +829,93 @@ test "aegis128x4 - MAC test vector" { try std.testing.expectEqualSlices(u8, &expected256, &mac256); } +test "aegis256 - MAC test vector" { + const key = [_]u8{ 0x10, 0x01 } ++ [_]u8{0x00} ** (32 - 2); + const nonce = [_]u8{ 0x10, 0x00, 0x02 } ++ [_]u8{0x00} ** (32 - 3); + var msg: [35]u8 = undefined; + for (&msg, 0..) |*byte, i| byte.* = @truncate(i); + var mac128: [16]u8 = undefined; + var mac256: [32]u8 = undefined; + var st: aegis.aegis256_mac_state = undefined; + var ret: c_int = undefined; + aegis.aegis256_mac_init(&st, &key, &nonce); + ret = aegis.aegis256_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256_mac_final(&st, &mac128, mac128.len); + try testing.expectEqual(ret, 0); + aegis.aegis256_mac_reset(&st); + ret = aegis.aegis256_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256_mac_final(&st, &mac256, mac256.len); + try testing.expectEqual(ret, 0); + const expected128_hex = "49f70470ccf49529674babd6db6670c9"; + const expected256_hex = "f5945eccdb14c836d8470b8abcf87e26bc635abc17e05d1fbf0ca05c679e0eef"; + var expected128: [16]u8 = undefined; + var expected256: [32]u8 = undefined; + _ = try std.fmt.hexToBytes(&expected128, expected128_hex); + _ = try std.fmt.hexToBytes(&expected256, expected256_hex); + try std.testing.expectEqualSlices(u8, &expected128, &mac128); + try std.testing.expectEqualSlices(u8, &expected256, &mac256); +} + +test "aegis256x2 - MAC test vector" { + const key = [_]u8{ 0x10, 0x01 } ++ [_]u8{0x00} ** (32 - 2); + const nonce = [_]u8{ 0x10, 0x00, 0x02 } ++ [_]u8{0x00} ** (32 - 3); + var msg: [35]u8 = undefined; + for (&msg, 0..) |*byte, i| byte.* = @truncate(i); + var mac128: [16]u8 = undefined; + var mac256: [32]u8 = undefined; + var st: aegis.aegis256x2_mac_state = undefined; + var ret: c_int = undefined; + aegis.aegis256x2_mac_init(&st, &key, &nonce); + ret = aegis.aegis256x2_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256x2_mac_final(&st, &mac128, mac128.len); + try testing.expectEqual(ret, 0); + aegis.aegis256x2_mac_reset(&st); + ret = aegis.aegis256x2_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256x2_mac_final(&st, &mac256, mac256.len); + try testing.expectEqual(ret, 0); + const expected128_hex = "1468bcd6376f12ef29b2ba281f491dd8"; + const expected256_hex = "e854c36a63b86dc22130c7025b9ba84e0e597871b075b563845171b856871bbf"; + var expected128: [16]u8 = undefined; + var expected256: [32]u8 = undefined; + _ = try std.fmt.hexToBytes(&expected128, expected128_hex); + _ = try std.fmt.hexToBytes(&expected256, expected256_hex); + try std.testing.expectEqualSlices(u8, &expected128, &mac128); + try std.testing.expectEqualSlices(u8, &expected256, &mac256); +} + +test "aegis256x4 - MAC test vector" { + const key = [_]u8{ 0x10, 0x01 } ++ [_]u8{0x00} ** (32 - 2); + const nonce = [_]u8{ 0x10, 0x00, 0x02 } ++ [_]u8{0x00} ** (32 - 3); + var msg: [35]u8 = undefined; + for (&msg, 0..) |*byte, i| byte.* = @truncate(i); + var mac128: [16]u8 = undefined; + var mac256: [32]u8 = undefined; + var st: aegis.aegis256x4_mac_state = undefined; + var ret: c_int = undefined; + aegis.aegis256x4_mac_init(&st, &key, &nonce); + ret = aegis.aegis256x4_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256x4_mac_final(&st, &mac128, mac128.len); + try testing.expectEqual(ret, 0); + aegis.aegis256x4_mac_reset(&st); + ret = aegis.aegis256x4_mac_update(&st, &msg, msg.len); + try testing.expectEqual(ret, 0); + ret = aegis.aegis256x4_mac_final(&st, &mac256, mac256.len); + try testing.expectEqual(ret, 0); + const expected128_hex = "8ac8b254b708d1dd673535bd5dc77775"; + const expected256_hex = "962abc85dcc6522311ae2fbfc6d0f66ee263fd18be4d9135f36d14bf05fa460b"; + var expected128: [16]u8 = undefined; + var expected256: [32]u8 = undefined; + _ = try std.fmt.hexToBytes(&expected128, expected128_hex); + _ = try std.fmt.hexToBytes(&expected256, expected256_hex); + try std.testing.expectEqualSlices(u8, &expected128, &mac128); + try std.testing.expectEqualSlices(u8, &expected256, &mac256); +} + // Wycheproof tests const JsonTest = struct { From a65be0de9e7fc44d4322d7b2b0b688d466d58159 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 10 Dec 2024 00:40:23 +0100 Subject: [PATCH 185/219] Document mac_reset() --- src/include/aegis128l.h | 2 ++ src/include/aegis128x2.h | 2 ++ src/include/aegis128x4.h | 2 ++ src/include/aegis256.h | 2 ++ src/include/aegis256x2.h | 2 ++ src/include/aegis256x4.h | 2 ++ 6 files changed, 12 insertions(+) diff --git a/src/include/aegis128l.h b/src/include/aegis128l.h index 1ff762b..98122fc 100644 --- a/src/include/aegis128l.h +++ b/src/include/aegis128l.h @@ -271,6 +271,8 @@ void aegis128l_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen * After initialization, the state can be reused to generate multiple MACs by cloning it * with `aegis128l_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. + * + * A state can also be reset for reuse without cloning with `aegis128l_mac_reset()`. */ void aegis128l_mac_init(aegis128l_mac_state *st_, const uint8_t *k, const uint8_t *npub); diff --git a/src/include/aegis128x2.h b/src/include/aegis128x2.h index 6692186..b436ab1 100644 --- a/src/include/aegis128x2.h +++ b/src/include/aegis128x2.h @@ -271,6 +271,8 @@ void aegis128x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * After initialization, the state can be reused to generate multiple MACs by cloning it * with `aegis128x2_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. + * + * A state can also be reset for reuse without cloning with `aegis128x2_mac_reset()`. */ void aegis128x2_mac_init(aegis128x2_mac_state *st_, const uint8_t *k, const uint8_t *npub); diff --git a/src/include/aegis128x4.h b/src/include/aegis128x4.h index 75b00e7..121b9ad 100644 --- a/src/include/aegis128x4.h +++ b/src/include/aegis128x4.h @@ -271,6 +271,8 @@ void aegis128x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * After initialization, the state can be reused to generate multiple MACs by cloning it * with `aegis128x4_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. + * + * A state can also be reset for reuse without cloning with `aegis128x4_mac_reset()`. */ void aegis128x4_mac_init(aegis128x4_mac_state *st_, const uint8_t *k, const uint8_t *npub); diff --git a/src/include/aegis256.h b/src/include/aegis256.h index 378da3a..ca84a63 100644 --- a/src/include/aegis256.h +++ b/src/include/aegis256.h @@ -271,6 +271,8 @@ void aegis256_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t clen, * After initialization, the state can be reused to generate multiple MACs by cloning it * with `aegis256_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. + * + * A state can also be reset for reuse without cloning with `aegis256_mac_reset()`. */ void aegis256_mac_init(aegis256_mac_state *st_, const uint8_t *k, const uint8_t *npub); diff --git a/src/include/aegis256x2.h b/src/include/aegis256x2.h index fc67439..d8d98e6 100644 --- a/src/include/aegis256x2.h +++ b/src/include/aegis256x2.h @@ -271,6 +271,8 @@ void aegis256x2_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * After initialization, the state can be reused to generate multiple MACs by cloning it * with `aegis256x2_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. + * + * A state can also be reset for reuse without cloning with `aegis256x2_mac_reset()`. */ void aegis256x2_mac_init(aegis256x2_mac_state *st_, const uint8_t *k, const uint8_t *npub); diff --git a/src/include/aegis256x4.h b/src/include/aegis256x4.h index e9d2482..27191f3 100644 --- a/src/include/aegis256x4.h +++ b/src/include/aegis256x4.h @@ -271,6 +271,8 @@ void aegis256x4_decrypt_unauthenticated(uint8_t *m, const uint8_t *c, size_t cle * After initialization, the state can be reused to generate multiple MACs by cloning it * with `aegis256x4_mac_state_clone()`. It is only safe to copy a state directly without using * the clone function if the state is guaranteed to be properly aligned. + * + * A state can also be reset for reuse without cloning with `aegis256x4_mac_reset()`. */ void aegis256x4_mac_init(aegis256x4_mac_state *st_, const uint8_t *k, const uint8_t *npub); From c5f6b4d3a0549f2f7875836544e43e8987d5a4a0 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 10 Dec 2024 02:05:39 +0100 Subject: [PATCH 186/219] Update AEGISMAC to the latest proposal --- src/aegis128l/aegis128l_common.h | 2 +- src/aegis128x2/aegis128x2_common.h | 4 ++-- src/aegis128x4/aegis128x4_common.h | 4 ++-- src/aegis256/aegis256_common.h | 2 +- src/aegis256x2/aegis256x2_common.h | 4 ++-- src/aegis256x4/aegis256x4_common.h | 4 ++-- src/test/main.zig | 26 +++++++++++++------------- 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index 3a328d8..edf3582 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -663,7 +663,7 @@ state_mac_final(aegis128l_mac_state *st_, uint8_t *mac, size_t maclen) memset(st->buf + left, 0, RATE - left); aegis128l_absorb(st->buf, blocks); } - aegis128l_mac(mac, maclen, st->adlen, 0, blocks); + aegis128l_mac(mac, maclen, st->adlen, maclen, blocks); memcpy(st->blocks, blocks, sizeof blocks); diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index e604ff5..e9954f3 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -204,7 +204,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + i * 32, 32); aegis128x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_LOAD_64x2(maclen, d); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); @@ -228,7 +228,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r + 16, t + AES_BLOCK_LENGTH + i * 16, 16); aegis128x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_LOAD_64x2(maclen, d); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 9dd1c3e..234215f 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -219,7 +219,7 @@ aegis128x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + i * 32, 32); aegis128x4_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_LOAD_64x2(maclen, d); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x4_update(state, tmp, tmp); @@ -243,7 +243,7 @@ aegis128x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r + 16, t + AES_BLOCK_LENGTH + i * 16, 16); aegis128x4_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_LOAD_64x2(maclen, d); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x4_update(state, tmp, tmp); diff --git a/src/aegis256/aegis256_common.h b/src/aegis256/aegis256_common.h index 3ab1a47..6dfbe40 100644 --- a/src/aegis256/aegis256_common.h +++ b/src/aegis256/aegis256_common.h @@ -649,7 +649,7 @@ state_mac_final(aegis256_mac_state *st_, uint8_t *mac, size_t maclen) memset(st->buf + left, 0, RATE - left); aegis256_absorb(st->buf, blocks); } - aegis256_mac(mac, maclen, st->adlen, 0, blocks); + aegis256_mac(mac, maclen, st->adlen, maclen, blocks); memcpy(st->blocks, blocks, sizeof blocks); diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index 80f904e..d915118 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -206,7 +206,7 @@ aegis256x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + i * 16, 16); aegis256x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_LOAD_64x2(maclen, d); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { aegis256x2_update(state, tmp); @@ -229,7 +229,7 @@ aegis256x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + AES_BLOCK_LENGTH + i * 16, 16); aegis256x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_LOAD_64x2(maclen, d); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { aegis256x2_update(state, tmp); diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index 47ce415..a1428f1 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -225,7 +225,7 @@ aegis256x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + i * 16, 16); aegis256x4_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_LOAD_64x2(maclen, d); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { aegis256x4_update(state, tmp); @@ -248,7 +248,7 @@ aegis256x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + AES_BLOCK_LENGTH + i * 16, 16); aegis256x4_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(d, maclen); + tmp = AES_BLOCK_LOAD_64x2(maclen, d); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { aegis256x4_update(state, tmp); diff --git a/src/test/main.zig b/src/test/main.zig index e3e7490..bfc9ab5 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -661,7 +661,7 @@ test "aegis128l - MAC" { var mac2: [mac.len]u8 = undefined; ret = aegis.aegis128l_encrypt_detached(&mac2, &mac2, mac2.len, "", 0, &msg3, msg3.len, &nonce, &key); try testing.expectEqual(ret, 0); - try testing.expectEqualSlices(u8, &mac, &mac2); + try testing.expect(!std.mem.eql(u8, &mac, &mac2)); } test "aegis128x2 - MAC" { @@ -761,8 +761,8 @@ test "aegis128l - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis128l_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "3982e98c66fa9232e9190ec57b120725"; - const expected256_hex = "a7d01b4636e8d312af8b65b3bb680feb8ffd62aa234584001b1e419b4b40c317"; + const expected128_hex = "d3f09b2842ad301687d6902c921d7818"; + const expected256_hex = "9490e7c89d420c9f37417fa625eb38e8cad53c5cbec55285e8499ea48377f2a3"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -790,8 +790,8 @@ test "aegis128x2 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis128x2_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "f472304012396667f51ab7450d87f460"; - const expected256_hex = "f376288f13b51c73ecb814922919a31f2cbe1fd322a0062ef7860327a2bc3159"; + const expected128_hex = "01b0e517aeb06e7b2799c596730aaaa3"; + const expected256_hex = "3fe7b4bbb1153575d048aebc623bf1bb1878c592432843b3c68610f6fa097808"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -819,8 +819,8 @@ test "aegis128x4 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis128x4_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "3742a0bf0a9e8604841fe520fc57621c"; - const expected256_hex = "3da44ead4e192d0df3c47c994c242b69dab2fdf0d98f58f96838d634ab945d3a"; + const expected128_hex = "1930de14c4f94f450b76d332b4bc91f1"; + const expected256_hex = "67b96718b12808b18e93d760e6e1346a4a863c54317d2b09525234e42601a2f8"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -848,8 +848,8 @@ test "aegis256 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis256_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "49f70470ccf49529674babd6db6670c9"; - const expected256_hex = "f5945eccdb14c836d8470b8abcf87e26bc635abc17e05d1fbf0ca05c679e0eef"; + const expected128_hex = "c08e20cfc56f27195a46c9cef5c162d4"; + const expected256_hex = "a5c906ede3d69545c11e20afa360b221f936e946ed2dba3d7c75ad6dc2784126"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -877,8 +877,8 @@ test "aegis256x2 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis256x2_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "1468bcd6376f12ef29b2ba281f491dd8"; - const expected256_hex = "e854c36a63b86dc22130c7025b9ba84e0e597871b075b563845171b856871bbf"; + const expected128_hex = "8c4eab1157d68d43f5eaae89ca36d4ea"; + const expected256_hex = "8b66d8ec75d3d5611ae9149e1c8ba7275a22ef940e5b405432ad011d16940e9d"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -906,8 +906,8 @@ test "aegis256x4 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis256x4_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "8ac8b254b708d1dd673535bd5dc77775"; - const expected256_hex = "962abc85dcc6522311ae2fbfc6d0f66ee263fd18be4d9135f36d14bf05fa460b"; + const expected128_hex = "9362451363efb0d3bc48af53519cd1e5"; + const expected256_hex = "61cf1bd44254ae57b4c8c9cebdd9e20270fbb39b39acb97e3cd7d27a62282cea"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); From edb44c8b9b44f28dfa5adf7ec985bdd0f749ea8c Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 10 Dec 2024 02:31:48 +0100 Subject: [PATCH 187/219] AEGISMAC-X updates --- src/aegis128x2/aegis128x2_common.h | 2 +- src/aegis128x4/aegis128x4_common.h | 2 +- src/aegis256x2/aegis256x2_common.h | 2 +- src/aegis256x4/aegis256x4_common.h | 2 +- src/test/main.zig | 16 ++++++++-------- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index e9954f3..f3a0011 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -186,7 +186,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat int i; const int d = AES_BLOCK_LENGTH / 16; - tmp = AES_BLOCK_LOAD_64x2(0, adlen << 3); + tmp = AES_BLOCK_LOAD_64x2(maclen, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 234215f..78cc592 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -201,7 +201,7 @@ aegis128x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat int i; const int d = AES_BLOCK_LENGTH / 16; - tmp = AES_BLOCK_LOAD_64x2(0, adlen << 3); + tmp = AES_BLOCK_LOAD_64x2(maclen, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index d915118..65ac6e7 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -187,7 +187,7 @@ aegis256x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat int i; const int d = AES_BLOCK_LENGTH / 16; - tmp = AES_BLOCK_LOAD_64x2(0, adlen << 3); + tmp = AES_BLOCK_LOAD_64x2(maclen, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index a1428f1..efcd14b 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -206,7 +206,7 @@ aegis256x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat int i; const int d = AES_BLOCK_LENGTH / 16; - tmp = AES_BLOCK_LOAD_64x2(0, adlen << 3); + tmp = AES_BLOCK_LOAD_64x2(maclen, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { diff --git a/src/test/main.zig b/src/test/main.zig index bfc9ab5..1debb3f 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -790,8 +790,8 @@ test "aegis128x2 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis128x2_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "01b0e517aeb06e7b2799c596730aaaa3"; - const expected256_hex = "3fe7b4bbb1153575d048aebc623bf1bb1878c592432843b3c68610f6fa097808"; + const expected128_hex = "21c6922d3ad6522ac57369600314c912"; + const expected256_hex = "83dd64b45d75ef3537f45f0ec5b275189b98fb241fed02672122c73f5ce8ac07"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -819,8 +819,8 @@ test "aegis128x4 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis128x4_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "1930de14c4f94f450b76d332b4bc91f1"; - const expected256_hex = "67b96718b12808b18e93d760e6e1346a4a863c54317d2b09525234e42601a2f8"; + const expected128_hex = "90b56cd04f89737f558e7add279bcfa6"; + const expected256_hex = "2b6e56d61a23e15ab84967fe936f7a68ae32b666412ed0504c57fff2cdb744a4"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -877,8 +877,8 @@ test "aegis256x2 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis256x2_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "8c4eab1157d68d43f5eaae89ca36d4ea"; - const expected256_hex = "8b66d8ec75d3d5611ae9149e1c8ba7275a22ef940e5b405432ad011d16940e9d"; + const expected128_hex = "47fb35135afe3520cf0b47458024eca8"; + const expected256_hex = "894989e7d22b766fdb108374dabdb055b0eda8776a27ae052f6ed36c25bf9a7a"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -906,8 +906,8 @@ test "aegis256x4 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis256x4_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "9362451363efb0d3bc48af53519cd1e5"; - const expected256_hex = "61cf1bd44254ae57b4c8c9cebdd9e20270fbb39b39acb97e3cd7d27a62282cea"; + const expected128_hex = "46478aec625986ecfed99348a7c2f13c"; + const expected256_hex = "d45ab883ba0917faa248e33a07d36699bab4dc9cd0253c48e6dd7a8dcf5ce1b2"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); From 7c72b89acc1a4ef03cbd6adaf6742e38ef006dc0 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 11 Dec 2024 13:03:21 +0100 Subject: [PATCH 188/219] AEGIS-MAC: specify the tag length in bits --- src/aegis128x2/aegis128x2_common.h | 6 +++--- src/aegis128x4/aegis128x4_common.h | 6 +++--- src/aegis256x2/aegis256x2_common.h | 6 +++--- src/aegis256x4/aegis256x4_common.h | 6 +++--- src/test/main.zig | 16 ++++++++-------- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index f3a0011..c6493a3 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -186,7 +186,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat int i; const int d = AES_BLOCK_LENGTH / 16; - tmp = AES_BLOCK_LOAD_64x2(maclen, adlen << 3); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { @@ -204,7 +204,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + i * 32, 32); aegis128x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(maclen, d); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); @@ -228,7 +228,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r + 16, t + AES_BLOCK_LENGTH + i * 16, 16); aegis128x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(maclen, d); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x2_update(state, tmp, tmp); diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index 78cc592..b86f1c0 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -201,7 +201,7 @@ aegis128x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat int i; const int d = AES_BLOCK_LENGTH / 16; - tmp = AES_BLOCK_LOAD_64x2(maclen, adlen << 3); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { @@ -219,7 +219,7 @@ aegis128x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + i * 32, 32); aegis128x4_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(maclen, d); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x4_update(state, tmp, tmp); @@ -243,7 +243,7 @@ aegis128x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r + 16, t + AES_BLOCK_LENGTH + i * 16, 16); aegis128x4_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(maclen, d); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); tmp = AES_BLOCK_XOR(tmp, state[2]); for (i = 0; i < 7; i++) { aegis128x4_update(state, tmp, tmp); diff --git a/src/aegis256x2/aegis256x2_common.h b/src/aegis256x2/aegis256x2_common.h index 65ac6e7..b729a0e 100644 --- a/src/aegis256x2/aegis256x2_common.h +++ b/src/aegis256x2/aegis256x2_common.h @@ -187,7 +187,7 @@ aegis256x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat int i; const int d = AES_BLOCK_LENGTH / 16; - tmp = AES_BLOCK_LOAD_64x2(maclen, adlen << 3); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { @@ -206,7 +206,7 @@ aegis256x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + i * 16, 16); aegis256x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(maclen, d); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { aegis256x2_update(state, tmp); @@ -229,7 +229,7 @@ aegis256x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + AES_BLOCK_LENGTH + i * 16, 16); aegis256x2_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(maclen, d); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { aegis256x2_update(state, tmp); diff --git a/src/aegis256x4/aegis256x4_common.h b/src/aegis256x4/aegis256x4_common.h index efcd14b..a3e5336 100644 --- a/src/aegis256x4/aegis256x4_common.h +++ b/src/aegis256x4/aegis256x4_common.h @@ -206,7 +206,7 @@ aegis256x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat int i; const int d = AES_BLOCK_LENGTH / 16; - tmp = AES_BLOCK_LOAD_64x2(maclen, adlen << 3); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, adlen << 3); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { @@ -225,7 +225,7 @@ aegis256x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + i * 16, 16); aegis256x4_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(maclen, d); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { aegis256x4_update(state, tmp); @@ -248,7 +248,7 @@ aegis256x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat memcpy(r, t + AES_BLOCK_LENGTH + i * 16, 16); aegis256x4_absorb(r, state); } - tmp = AES_BLOCK_LOAD_64x2(maclen, d); + tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); tmp = AES_BLOCK_XOR(tmp, state[3]); for (i = 0; i < 7; i++) { aegis256x4_update(state, tmp); diff --git a/src/test/main.zig b/src/test/main.zig index 1debb3f..91f8044 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -790,8 +790,8 @@ test "aegis128x2 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis128x2_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "21c6922d3ad6522ac57369600314c912"; - const expected256_hex = "83dd64b45d75ef3537f45f0ec5b275189b98fb241fed02672122c73f5ce8ac07"; + const expected128_hex = "7aa41edfd57a95c1108d83c63b8d4d01"; + const expected256_hex = "55b6449929cd2b01d04786e57698b3ddfb5cbf6e421bbd022637a33d60f40294"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -819,8 +819,8 @@ test "aegis128x4 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis128x4_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "90b56cd04f89737f558e7add279bcfa6"; - const expected256_hex = "2b6e56d61a23e15ab84967fe936f7a68ae32b666412ed0504c57fff2cdb744a4"; + const expected128_hex = "46a194ea4337bb32c2186a99e312f3a7"; + const expected256_hex = "ea884072699569532fb68ae9fb2653c9ffef3e974333d3a17d77be02453cc12f"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -877,8 +877,8 @@ test "aegis256x2 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis256x2_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "47fb35135afe3520cf0b47458024eca8"; - const expected256_hex = "894989e7d22b766fdb108374dabdb055b0eda8776a27ae052f6ed36c25bf9a7a"; + const expected128_hex = "fb319cb6dd728a764606fb14d37f2a5e"; + const expected256_hex = "0844b20ed5147ceae89c7a160263afd4b1382d6b154ecf560ce8a342cb6a8fd1"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -906,8 +906,8 @@ test "aegis256x4 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis256x4_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "46478aec625986ecfed99348a7c2f13c"; - const expected256_hex = "d45ab883ba0917faa248e33a07d36699bab4dc9cd0253c48e6dd7a8dcf5ce1b2"; + const expected128_hex = "a51f9bc5beae60cce77f0dbc60761edd"; + const expected256_hex = "b36a16ef07c36d75a91f437502f24f545b8dfa88648ed116943c29fead3bf10c"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); From c5f66ce0177949c432777e3f3b3cea81f82923ab Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 11 Dec 2024 20:43:24 +0100 Subject: [PATCH 189/219] Bump minimum cmake version to 3.10 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3338ab2..b4f0e03 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.9) +cmake_minimum_required(VERSION 3.10) project(aegis LANGUAGES C) include(CMakePackageConfigHelpers) From 78b069336a0e4770042f8d1e91727ad0d0c16c54 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 11 Dec 2024 20:44:41 +0100 Subject: [PATCH 190/219] Bump --- CMakeLists.txt | 2 +- build.zig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b4f0e03..9a6e65d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ configure_package_CONFIG_FILE("${CONFIG_TEMPLATE_FILE}" "${CONFIG_FILE}" install(FILES "${CONFIG_FILE}" DESTINATION "${INSTALL_CONFIG_DIR}") -write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.2.1 COMPATIBILITY AnyNewerVersion) +write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.3.0 COMPATIBILITY AnyNewerVersion) install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" DESTINATION "${INSTALL_CONFIG_DIR}") export(EXPORT "${TARGETS_EXPORT_NAME}" FILE "${TARGETS_EXPORT_FILE}" NAMESPACE "${PROJECT_NAME}::") diff --git a/build.zig b/build.zig index b55d2fa..6e83a92 100644 --- a/build.zig +++ b/build.zig @@ -3,7 +3,7 @@ const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{ .preferred_optimize_mode = .ReleaseFast }); - const version = std.SemanticVersion.parse("0.2.1") catch unreachable; + const version = std.SemanticVersion.parse("0.3.0") catch unreachable; const lib = b.addStaticLibrary(.{ .name = "aegis", From 18439cd58f50b23825620138abe6f1cbe705b69d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 11 Dec 2024 23:30:47 +0100 Subject: [PATCH 191/219] Swap order of blocks and blocks0 in 128l_mac_state Spotted by @utelle -- Thanks! --- src/aegis128l/aegis128l_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aegis128l/aegis128l_common.h b/src/aegis128l/aegis128l_common.h index edf3582..c1c06b2 100644 --- a/src/aegis128l/aegis128l_common.h +++ b/src/aegis128l/aegis128l_common.h @@ -304,8 +304,8 @@ typedef struct _aegis128l_state { } _aegis128l_state; typedef struct _aegis128l_mac_state { - aegis_blocks blocks0; aegis_blocks blocks; + aegis_blocks blocks0; uint8_t buf[RATE]; uint64_t adlen; size_t pos; From dee39ab4ba9d1014ef9e0915d40d7813c4cc4bd6 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 18 Dec 2024 14:51:20 +0100 Subject: [PATCH 192/219] Fix altivec compat with old compilers --- src/aegis128l/aegis128l_altivec.c | 6 +++--- src/aegis128x2/aegis128x2_altivec.c | 6 +++--- src/aegis128x4/aegis128x4_altivec.c | 6 +++--- src/aegis256/aegis256_altivec.c | 6 +++--- src/aegis256x2/aegis256x2_altivec.c | 6 +++--- src/aegis256x4/aegis256x4_altivec.c | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/aegis128l/aegis128l_altivec.c b/src/aegis128l/aegis128l_altivec.c index 35add00..ec52698 100644 --- a/src/aegis128l/aegis128l_altivec.c +++ b/src/aegis128l/aegis128l_altivec.c @@ -15,7 +15,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("+altivec+crypto") +# pragma GCC target("altivec,crypto") # endif # define AES_BLOCK_LENGTH 16 @@ -26,9 +26,9 @@ typedef vector unsigned char aes_block_t; # define AES_BLOCK_AND(A, B) vec_and((A), (B)) # define AES_BLOCK_LOAD(A) vec_xl_be(0, (const unsigned char *) (A)) # define AES_BLOCK_LOAD_64x2(A, B) \ - vec_revb(vec_insert((A), vec_promote((unsigned long long) (B), 1), 0)) + ((aes_block_t) vec_revb(vec_insert((A), vec_promote((unsigned long long) (B), 1), 0))) # define AES_BLOCK_STORE(A, B) vec_xst_be((B), 0, (unsigned char *) (A)) -# define AES_ENC(A, B) vec_cipher_be((A), (B)) +# define AES_ENC(A, B) ((aes_block_t) vec_cipher_be((A), (B))) static inline void aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) diff --git a/src/aegis128x2/aegis128x2_altivec.c b/src/aegis128x2/aegis128x2_altivec.c index 6422379..a9cfd4f 100644 --- a/src/aegis128x2/aegis128x2_altivec.c +++ b/src/aegis128x2/aegis128x2_altivec.c @@ -15,7 +15,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("+altivec+crypto") +# pragma GCC target("altivec,crypto") # endif # define AES_BLOCK_LENGTH 32 @@ -46,8 +46,8 @@ AES_BLOCK_LOAD(const uint8_t *a) static inline aes_block_t AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) { - const vector unsigned char t = - vec_revb(vec_insert(a, vec_promote((unsigned long long) (b), 1), 0)); + const vector unsigned char t = ((vector unsigned char) vec_revb( + vec_insert(a, vec_promote((unsigned long long) (b), 1), 0))); return (aes_block_t) { t, t }; } static inline void diff --git a/src/aegis128x4/aegis128x4_altivec.c b/src/aegis128x4/aegis128x4_altivec.c index dbe33dc..a479e90 100644 --- a/src/aegis128x4/aegis128x4_altivec.c +++ b/src/aegis128x4/aegis128x4_altivec.c @@ -15,7 +15,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("+altivec+crypto") +# pragma GCC target("altivec,crypto") # endif # define AES_BLOCK_LENGTH 64 @@ -51,8 +51,8 @@ AES_BLOCK_LOAD(const uint8_t *a) static inline aes_block_t AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) { - const vector unsigned char t = - vec_revb(vec_insert(a, vec_promote((unsigned long long) (b), 1), 0)); + const vector unsigned char t = ((vector unsigned char) vec_revb( + vec_insert(a, vec_promote((unsigned long long) (b), 1), 0))); return (aes_block_t) { t, t, t, t }; } static inline void diff --git a/src/aegis256/aegis256_altivec.c b/src/aegis256/aegis256_altivec.c index 0fb195e..e5b3161 100644 --- a/src/aegis256/aegis256_altivec.c +++ b/src/aegis256/aegis256_altivec.c @@ -15,7 +15,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("+altivec+crypto") +# pragma GCC target("altivec,crypto") # endif # define AES_BLOCK_LENGTH 16 @@ -26,9 +26,9 @@ typedef vector unsigned char aes_block_t; # define AES_BLOCK_AND(A, B) vec_and((A), (B)) # define AES_BLOCK_LOAD(A) vec_xl_be(0, (const unsigned char *) (A)) # define AES_BLOCK_LOAD_64x2(A, B) \ - vec_revb(vec_insert((A), vec_promote((unsigned long long) (B), 1), 0)) + ((aes_block_t) vec_revb(vec_insert((A), vec_promote((unsigned long long) (B), 1), 0))) # define AES_BLOCK_STORE(A, B) vec_xst_be((B), 0, (unsigned char *) (A)) -# define AES_ENC(A, B) vec_cipher_be((A), (B)) +# define AES_ENC(A, B) ((aes_block_t) vec_cipher_be((A), (B))) static inline void aegis256_update(aes_block_t *const state, const aes_block_t d) diff --git a/src/aegis256x2/aegis256x2_altivec.c b/src/aegis256x2/aegis256x2_altivec.c index d34901d..446fad8 100644 --- a/src/aegis256x2/aegis256x2_altivec.c +++ b/src/aegis256x2/aegis256x2_altivec.c @@ -15,7 +15,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("+altivec+crypto") +# pragma GCC target("altivec,crypto") # endif # define AES_BLOCK_LENGTH 32 @@ -46,8 +46,8 @@ AES_BLOCK_LOAD(const uint8_t *a) static inline aes_block_t AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) { - const vector unsigned char t = - vec_revb(vec_insert(a, vec_promote((unsigned long long) (b), 1), 0)); + const vector unsigned char t = ((vector unsigned char) vec_revb( + vec_insert(a, vec_promote((unsigned long long) (b), 1), 0))); return (aes_block_t) { t, t }; } static inline void diff --git a/src/aegis256x4/aegis256x4_altivec.c b/src/aegis256x4/aegis256x4_altivec.c index 84d2db2..1530075 100644 --- a/src/aegis256x4/aegis256x4_altivec.c +++ b/src/aegis256x4/aegis256x4_altivec.c @@ -15,7 +15,7 @@ # ifdef __clang__ # pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function) # elif defined(__GNUC__) -# pragma GCC target("+altivec+crypto") +# pragma GCC target("altivec,crypto") # endif # define AES_BLOCK_LENGTH 64 @@ -51,8 +51,8 @@ AES_BLOCK_LOAD(const uint8_t *a) static inline aes_block_t AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b) { - const vector unsigned char t = - vec_revb(vec_insert(a, vec_promote((unsigned long long) (b), 1), 0)); + const vector unsigned char t = ((vector unsigned char) vec_revb( + vec_insert(a, vec_promote((unsigned long long) (b), 1), 0))); return (aes_block_t) { t, t, t, t }; } static inline void From ac5eaa3f154a4a4deaf436308dad61fdd39f13c8 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 20 Dec 2024 12:20:31 +0100 Subject: [PATCH 193/219] defineCMacro -> root_module.addCMacro --- build.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.zig b/build.zig index 6e83a92..1b1153b 100644 --- a/build.zig +++ b/build.zig @@ -20,7 +20,7 @@ pub fn build(b: *std.Build) void { const favor_performance: bool = b.option(bool, "favor-performance", "Favor performance over side channel mitigations") orelse false; lib_options.addOption(bool, "favor_performance", favor_performance); if (favor_performance) { - lib.defineCMacro("FAVOR_PERFORMANCE", "1"); + lib.root_module.addCMacro("FAVOR_PERFORMANCE", "1"); } const with_benchmark: bool = b.option(bool, "with-benchmark", "Compile benchmark") orelse false; From 13c09cb5f3e4b12c5b71c82689889f1e21427b14 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 9 Jan 2025 23:25:07 +0100 Subject: [PATCH 194/219] Painfully try to support wasm32-freestanding --- src/aegis128l/aegis128l.c | 5 +---- src/aegis128l/aegis128l_aesni.c | 3 --- src/aegis128l/aegis128l_altivec.c | 3 --- src/aegis128l/aegis128l_armcrypto.c | 3 --- src/aegis128l/aegis128l_soft.c | 3 --- src/aegis128x2/aegis128x2.c | 5 +---- src/aegis128x2/aegis128x2_aesni.c | 3 --- src/aegis128x2/aegis128x2_altivec.c | 3 --- src/aegis128x2/aegis128x2_armcrypto.c | 3 --- src/aegis128x2/aegis128x2_avx2.c | 5 +---- src/aegis128x2/aegis128x2_soft.c | 5 +---- src/aegis128x4/aegis128x4.c | 3 --- src/aegis128x4/aegis128x4_aesni.c | 3 --- src/aegis128x4/aegis128x4_altivec.c | 3 --- src/aegis128x4/aegis128x4_armcrypto.c | 3 --- src/aegis128x4/aegis128x4_avx2.c | 5 +---- src/aegis128x4/aegis128x4_avx512.c | 3 --- src/aegis128x4/aegis128x4_soft.c | 5 +---- src/aegis256/aegis256.c | 3 --- src/aegis256/aegis256_aesni.c | 3 --- src/aegis256/aegis256_altivec.c | 3 --- src/aegis256/aegis256_armcrypto.c | 3 --- src/aegis256/aegis256_soft.c | 3 --- src/aegis256x2/aegis256x2.c | 5 +---- src/aegis256x2/aegis256x2_aesni.c | 3 --- src/aegis256x2/aegis256x2_altivec.c | 3 --- src/aegis256x2/aegis256x2_armcrypto.c | 3 --- src/aegis256x2/aegis256x2_avx2.c | 5 +---- src/aegis256x2/aegis256x2_soft.c | 5 +---- src/aegis256x4/aegis256x4.c | 5 +---- src/aegis256x4/aegis256x4_aesni.c | 3 --- src/aegis256x4/aegis256x4_altivec.c | 3 --- src/aegis256x4/aegis256x4_armcrypto.c | 3 --- src/aegis256x4/aegis256x4_avx2.c | 5 +---- src/aegis256x4/aegis256x4_avx512.c | 3 --- src/aegis256x4/aegis256x4_soft.c | 5 +---- src/common/common.h | 12 ++++++++++-- src/common/cpu.c | 3 +-- src/common/softaes.c | 2 -- 39 files changed, 23 insertions(+), 126 deletions(-) diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 17ac474..2da6e6a 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" @@ -256,4 +253,4 @@ aegis128l_pick_best_implementation(void) #endif return 0; /* LCOV_EXCL_LINE */ -} \ No newline at end of file +} diff --git a/src/aegis128l/aegis128l_aesni.c b/src/aegis128l/aegis128l_aesni.c index aedcae2..6b84b25 100644 --- a/src/aegis128l/aegis128l_aesni.c +++ b/src/aegis128l/aegis128l_aesni.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128l.h" diff --git a/src/aegis128l/aegis128l_altivec.c b/src/aegis128l/aegis128l_altivec.c index ec52698..987ef57 100644 --- a/src/aegis128l/aegis128l_altivec.c +++ b/src/aegis128l/aegis128l_altivec.c @@ -1,10 +1,7 @@ #if defined(__ALTIVEC__) && defined(__CRYPTO__) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128l.h" diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_armcrypto.c index ad2de17..73d8d77 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_armcrypto.c @@ -1,10 +1,7 @@ #if defined(__aarch64__) || defined(_M_ARM64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128l.h" diff --git a/src/aegis128l/aegis128l_soft.c b/src/aegis128l/aegis128l_soft.c index 0df6933..d439d07 100644 --- a/src/aegis128l/aegis128l_soft.c +++ b/src/aegis128l/aegis128l_soft.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index 9fd5e11..dec34b5 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" @@ -262,4 +259,4 @@ aegis128x2_pick_best_implementation(void) #endif return 0; /* LCOV_EXCL_LINE */ -} \ No newline at end of file +} diff --git a/src/aegis128x2/aegis128x2_aesni.c b/src/aegis128x2/aegis128x2_aesni.c index 506bab7..d63bde9 100644 --- a/src/aegis128x2/aegis128x2_aesni.c +++ b/src/aegis128x2/aegis128x2_aesni.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128x2.h" diff --git a/src/aegis128x2/aegis128x2_altivec.c b/src/aegis128x2/aegis128x2_altivec.c index a9cfd4f..8069b27 100644 --- a/src/aegis128x2/aegis128x2_altivec.c +++ b/src/aegis128x2/aegis128x2_altivec.c @@ -1,10 +1,7 @@ #if defined(__ALTIVEC__) && defined(__CRYPTO__) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128x2.h" diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_armcrypto.c index 697d983..c55a3a9 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_armcrypto.c @@ -1,10 +1,7 @@ #if defined(__aarch64__) || defined(_M_ARM64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128x2.h" diff --git a/src/aegis128x2/aegis128x2_avx2.c b/src/aegis128x2/aegis128x2_avx2.c index b7533ff..e2369bf 100644 --- a/src/aegis128x2/aegis128x2_avx2.c +++ b/src/aegis128x2/aegis128x2_avx2.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128x2.h" @@ -79,4 +76,4 @@ struct aegis128x2_implementation aegis128x2_avx2_implementation = { # endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis128x2/aegis128x2_soft.c b/src/aegis128x2/aegis128x2_soft.c index 8dcb121..7c36b75 100644 --- a/src/aegis128x2/aegis128x2_soft.c +++ b/src/aegis128x2/aegis128x2_soft.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" @@ -97,4 +94,4 @@ struct aegis128x2_implementation aegis128x2_soft_implementation = { .state_mac_clone = state_mac_clone, }; -#endif \ No newline at end of file +#endif diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index dd13616..b9ceb2b 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" diff --git a/src/aegis128x4/aegis128x4_aesni.c b/src/aegis128x4/aegis128x4_aesni.c index 9c838a3..0e528a2 100644 --- a/src/aegis128x4/aegis128x4_aesni.c +++ b/src/aegis128x4/aegis128x4_aesni.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128x4.h" diff --git a/src/aegis128x4/aegis128x4_altivec.c b/src/aegis128x4/aegis128x4_altivec.c index a479e90..07b3ef2 100644 --- a/src/aegis128x4/aegis128x4_altivec.c +++ b/src/aegis128x4/aegis128x4_altivec.c @@ -1,10 +1,7 @@ #if defined(__ALTIVEC__) && defined(__CRYPTO__) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128x4.h" diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_armcrypto.c index e88398c..5979c8e 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_armcrypto.c @@ -1,10 +1,7 @@ #if defined(__aarch64__) || defined(_M_ARM64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128x4.h" diff --git a/src/aegis128x4/aegis128x4_avx2.c b/src/aegis128x4/aegis128x4_avx2.c index 4a32fdd..bea0bf9 100644 --- a/src/aegis128x4/aegis128x4_avx2.c +++ b/src/aegis128x4/aegis128x4_avx2.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128x4.h" @@ -112,4 +109,4 @@ struct aegis128x4_implementation aegis128x4_avx2_implementation = { # endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis128x4/aegis128x4_avx512.c b/src/aegis128x4/aegis128x4_avx512.c index 2372d35..de7f831 100644 --- a/src/aegis128x4/aegis128x4_avx512.c +++ b/src/aegis128x4/aegis128x4_avx512.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis128x4.h" diff --git a/src/aegis128x4/aegis128x4_soft.c b/src/aegis128x4/aegis128x4_soft.c index 7036620..c0a2f5a 100644 --- a/src/aegis128x4/aegis128x4_soft.c +++ b/src/aegis128x4/aegis128x4_soft.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" @@ -105,4 +102,4 @@ struct aegis128x4_implementation aegis128x4_soft_implementation = { .state_mac_clone = state_mac_clone, }; -#endif \ No newline at end of file +#endif diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index 35c1759..71d0169 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" diff --git a/src/aegis256/aegis256_aesni.c b/src/aegis256/aegis256_aesni.c index f32100f..6e13138 100644 --- a/src/aegis256/aegis256_aesni.c +++ b/src/aegis256/aegis256_aesni.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256.h" diff --git a/src/aegis256/aegis256_altivec.c b/src/aegis256/aegis256_altivec.c index e5b3161..01a45cf 100644 --- a/src/aegis256/aegis256_altivec.c +++ b/src/aegis256/aegis256_altivec.c @@ -1,10 +1,7 @@ #if defined(__ALTIVEC__) && defined(__CRYPTO__) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256.h" diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_armcrypto.c index bb9c5fe..1b2a349 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_armcrypto.c @@ -1,10 +1,7 @@ #if defined(__aarch64__) || defined(_M_ARM64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256.h" diff --git a/src/aegis256/aegis256_soft.c b/src/aegis256/aegis256_soft.c index 065b4df..defaf36 100644 --- a/src/aegis256/aegis256_soft.c +++ b/src/aegis256/aegis256_soft.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index cb12585..9366149 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" @@ -262,4 +259,4 @@ aegis256x2_pick_best_implementation(void) #endif return 0; /* LCOV_EXCL_LINE */ -} \ No newline at end of file +} diff --git a/src/aegis256x2/aegis256x2_aesni.c b/src/aegis256x2/aegis256x2_aesni.c index 7064c96..b5bab19 100644 --- a/src/aegis256x2/aegis256x2_aesni.c +++ b/src/aegis256x2/aegis256x2_aesni.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256x2.h" diff --git a/src/aegis256x2/aegis256x2_altivec.c b/src/aegis256x2/aegis256x2_altivec.c index 446fad8..613f434 100644 --- a/src/aegis256x2/aegis256x2_altivec.c +++ b/src/aegis256x2/aegis256x2_altivec.c @@ -1,10 +1,7 @@ #if defined(__ALTIVEC__) && defined(__CRYPTO__) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256x2.h" diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_armcrypto.c index 8ecdf73..b82bb4c 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_armcrypto.c @@ -1,10 +1,7 @@ #if defined(__aarch64__) || defined(_M_ARM64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256x2.h" diff --git a/src/aegis256x2/aegis256x2_avx2.c b/src/aegis256x2/aegis256x2_avx2.c index 01d4505..c49f634 100644 --- a/src/aegis256x2/aegis256x2_avx2.c +++ b/src/aegis256x2/aegis256x2_avx2.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256x2.h" @@ -74,4 +71,4 @@ struct aegis256x2_implementation aegis256x2_avx2_implementation = { # endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis256x2/aegis256x2_soft.c b/src/aegis256x2/aegis256x2_soft.c index 3e478be..e70c685 100644 --- a/src/aegis256x2/aegis256x2_soft.c +++ b/src/aegis256x2/aegis256x2_soft.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" @@ -92,4 +89,4 @@ struct aegis256x2_implementation aegis256x2_soft_implementation = { .state_mac_clone = state_mac_clone, }; -#endif \ No newline at end of file +#endif diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index e94dc89..e5f2dfd 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" @@ -267,4 +264,4 @@ aegis256x4_pick_best_implementation(void) #endif return 0; /* LCOV_EXCL_LINE */ -} \ No newline at end of file +} diff --git a/src/aegis256x4/aegis256x4_aesni.c b/src/aegis256x4/aegis256x4_aesni.c index 54f6aef..3bfbfe5 100644 --- a/src/aegis256x4/aegis256x4_aesni.c +++ b/src/aegis256x4/aegis256x4_aesni.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256x4.h" diff --git a/src/aegis256x4/aegis256x4_altivec.c b/src/aegis256x4/aegis256x4_altivec.c index 1530075..6fe84f0 100644 --- a/src/aegis256x4/aegis256x4_altivec.c +++ b/src/aegis256x4/aegis256x4_altivec.c @@ -1,10 +1,7 @@ #if defined(__ALTIVEC__) && defined(__CRYPTO__) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256x4.h" diff --git a/src/aegis256x4/aegis256x4_armcrypto.c b/src/aegis256x4/aegis256x4_armcrypto.c index e30d55f..09f8d94 100644 --- a/src/aegis256x4/aegis256x4_armcrypto.c +++ b/src/aegis256x4/aegis256x4_armcrypto.c @@ -1,10 +1,7 @@ #if defined(__aarch64__) || defined(_M_ARM64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256x4.h" diff --git a/src/aegis256x4/aegis256x4_avx2.c b/src/aegis256x4/aegis256x4_avx2.c index aeb6369..286fc0b 100644 --- a/src/aegis256x4/aegis256x4_avx2.c +++ b/src/aegis256x4/aegis256x4_avx2.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256x4.h" @@ -107,4 +104,4 @@ struct aegis256x4_implementation aegis256x4_avx2_implementation = { # endif -#endif \ No newline at end of file +#endif diff --git a/src/aegis256x4/aegis256x4_avx512.c b/src/aegis256x4/aegis256x4_avx512.c index 3c3cd64..48cc84a 100644 --- a/src/aegis256x4/aegis256x4_avx512.c +++ b/src/aegis256x4/aegis256x4_avx512.c @@ -1,10 +1,7 @@ #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) -# include # include # include -# include -# include # include "../common/common.h" # include "aegis256x4.h" diff --git a/src/aegis256x4/aegis256x4_soft.c b/src/aegis256x4/aegis256x4_soft.c index f98bb35..963e1ff 100644 --- a/src/aegis256x4/aegis256x4_soft.c +++ b/src/aegis256x4/aegis256x4_soft.c @@ -1,8 +1,5 @@ -#include #include #include -#include -#include #include "../common/common.h" #include "../common/cpu.h" @@ -100,4 +97,4 @@ struct aegis256x4_implementation aegis256x4_soft_implementation = { .state_mac_clone = state_mac_clone, }; -#endif \ No newline at end of file +#endif diff --git a/src/common/common.h b/src/common/common.h index 877f95d..bcc5b97 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -1,10 +1,18 @@ #ifndef common_H #define common_H -#include #include #include -#include + +#if defined(__wasm__) && !defined(__wasi__) +static int errno; +# define memcpy(A, B, C) __builtin_memcpy((A), (B), (C)); +# define memset(A, B, C) __builtin_memset((A), (B), (C)); +#else +# include +# include +# include +#endif #include "aegis.h" diff --git a/src/common/cpu.c b/src/common/cpu.c index 1efa55b..7738c8c 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -3,7 +3,6 @@ #include #include -#include #ifdef HAVE_ANDROID_GETCPUFEATURES # include @@ -332,4 +331,4 @@ int aegis_runtime_has_altivec(void) { return _cpu_features.has_altivec; -} \ No newline at end of file +} diff --git a/src/common/softaes.c b/src/common/softaes.c index ed060bf..a5ec45f 100644 --- a/src/common/softaes.c +++ b/src/common/softaes.c @@ -1,7 +1,5 @@ #include #include -#include -#include #include "common.h" #include "softaes.h" From 45399c6907b86c476a4a3e75d568ee5e61ed212e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 9 Jan 2025 23:29:06 +0100 Subject: [PATCH 195/219] 2025 --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 1eb5b62..8723332 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023-2024 Frank Denis +Copyright (c) 2023-2025 Frank Denis Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 98655078e7b17b4689e1b9ffc1a1087bc7ac436d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 9 Jan 2025 23:29:53 +0100 Subject: [PATCH 196/219] Bump --- CMakeLists.txt | 2 +- build.zig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a6e65d..f3f31a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ configure_package_CONFIG_FILE("${CONFIG_TEMPLATE_FILE}" "${CONFIG_FILE}" install(FILES "${CONFIG_FILE}" DESTINATION "${INSTALL_CONFIG_DIR}") -write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.3.0 COMPATIBILITY AnyNewerVersion) +write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.3.1 COMPATIBILITY AnyNewerVersion) install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" DESTINATION "${INSTALL_CONFIG_DIR}") export(EXPORT "${TARGETS_EXPORT_NAME}" FILE "${TARGETS_EXPORT_FILE}" NAMESPACE "${PROJECT_NAME}::") diff --git a/build.zig b/build.zig index 1b1153b..6f7d30d 100644 --- a/build.zig +++ b/build.zig @@ -3,7 +3,7 @@ const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{ .preferred_optimize_mode = .ReleaseFast }); - const version = std.SemanticVersion.parse("0.3.0") catch unreachable; + const version = std.SemanticVersion.parse("0.3.1") catch unreachable; const lib = b.addStaticLibrary(.{ .name = "aegis", From 5b16f873bc99b0ca83d1ae3cf400f61e9b864f10 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 19 Jan 2025 22:15:23 +0100 Subject: [PATCH 197/219] On Windows, check that __cpuid is the MSVC function, not a macro Fixes #15 --- src/common/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/common/cpu.c b/src/common/cpu.c index 7738c8c..3c9c87a 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -138,7 +138,8 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) static void _cpuid(unsigned int cpu_info[4U], const unsigned int cpu_info_type) { -#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) +#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) && \ + !defined(__cpuid) /* __cpuid is a function on MSVC, can be an incompatible macro elsewhere */ __cpuid((int *) cpu_info, cpu_info_type); #elif defined(HAVE_CPUID) cpu_info[0] = cpu_info[1] = cpu_info[2] = cpu_info[3] = 0; From 06b1ffcb556ecc9f1064f70bf3c4be93009104fd Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 23 Jan 2025 14:52:34 +0100 Subject: [PATCH 198/219] Replace test vectors from Wycheproof by vectors from Rooterberg --- src/test/main.zig | 120 +++++++------------- src/test/wycheproof/aegis128L_test.json.zst | Bin 80895 -> 0 bytes src/test/wycheproof/aegis128_l.json.zst | Bin 0 -> 5613 bytes src/test/wycheproof/aegis128_l_256.json.zst | Bin 0 -> 6973 bytes src/test/wycheproof/aegis256.json.zst | Bin 0 -> 6329 bytes src/test/wycheproof/aegis256_256.json.zst | Bin 0 -> 7656 bytes src/test/wycheproof/aegis256_test.json.zst | Bin 92234 -> 0 bytes 7 files changed, 41 insertions(+), 79 deletions(-) delete mode 100644 src/test/wycheproof/aegis128L_test.json.zst create mode 100644 src/test/wycheproof/aegis128_l.json.zst create mode 100644 src/test/wycheproof/aegis128_l_256.json.zst create mode 100644 src/test/wycheproof/aegis256.json.zst create mode 100644 src/test/wycheproof/aegis256_256.json.zst delete mode 100644 src/test/wycheproof/aegis256_test.json.zst diff --git a/src/test/main.zig b/src/test/main.zig index 91f8044..096f3a0 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -926,101 +926,63 @@ const JsonTest = struct { msg: []const u8, ct: []const u8, tag: []const u8, - result: []const u8, -}; -const JsonTestGroup = struct { - type: []const u8, - tests: []const JsonTest, + valid: bool, }; const JsonTests = struct { - testGroups: []JsonTestGroup, -}; -const Result = enum { - valid, - invalid, + testType: []const u8, + algorithm: struct { + primitive: []const u8, + keySize: usize, + ivSize: usize, + tagSize: usize, + }, + tests: []const JsonTest, }; const heap = std.heap; const zstd = std.compress.zstd; -test "aegis128l - wycheproof" { +fn rooterberg(comptime file: []const u8, comptime func: anytype) !void { const alloc = std.testing.allocator; - var fbs = std.io.fixedBufferStream(@embedFile("wycheproof/aegis128L_test.json.zst")); + var fbs = std.io.fixedBufferStream(@embedFile(file)); var window_buffer: [zstd.DecompressorOptions.default_window_buffer_len]u8 = undefined; var decompressor = zstd.decompressor(fbs.reader(), .{ .window_buffer = &window_buffer }); const json = try decompressor.reader().readAllAlloc(alloc, 1000000); defer alloc.free(json); const parsed = try std.json.parseFromSlice(JsonTests, alloc, json, .{ .ignore_unknown_fields = true }); defer parsed.deinit(); - for (parsed.value.testGroups) |test_group| { - if (!std.mem.eql(u8, "AeadTest", test_group.type)) continue; - for (test_group.tests) |t| { - var arena = heap.ArenaAllocator.init(alloc); - defer arena.deinit(); - var arena_alloc = arena.allocator(); - var key: [16]u8 = undefined; - var nonce: [16]u8 = undefined; - var tag: [16]u8 = undefined; - const aad = try arena_alloc.alloc(u8, t.aad.len / 2); - const ct = try arena_alloc.alloc(u8, t.ct.len / 2); - const msg = try arena_alloc.alloc(u8, t.msg.len / 2); - const expected_msg = try arena_alloc.alloc(u8, t.msg.len / 2); - _ = try std.fmt.hexToBytes(&key, t.key); - _ = try std.fmt.hexToBytes(&nonce, t.iv); - _ = try std.fmt.hexToBytes(&tag, t.tag); - _ = try std.fmt.hexToBytes(aad, t.aad); - _ = try std.fmt.hexToBytes(expected_msg, t.msg); - _ = try std.fmt.hexToBytes(ct, t.ct); - const c_res = aegis.aegis128l_decrypt_detached(msg.ptr, ct.ptr, ct.len, &tag, tag.len, aad.ptr, aad.len, &nonce, &key); - const res: Result = if (c_res == 0) res: { - if (std.mem.eql(u8, msg, expected_msg)) break :res .valid; - break :res .invalid; - } else .invalid; - if ((std.mem.eql(u8, "invalid", t.result) and res == .valid) or (std.mem.eql(u8, "valid", t.result) and res == .invalid)) { - std.debug.print("Test failed: {}\n", .{t.tcId}); - try std.testing.expect(false); - } + const tests = parsed.value; + try std.testing.expectEqualSlices(u8, "Aead", tests.testType); + for (tests.tests) |t| { + var arena = heap.ArenaAllocator.init(alloc); + defer arena.deinit(); + var arena_alloc = arena.allocator(); + const key = try arena_alloc.alloc(u8, tests.algorithm.keySize / 8); + const nonce = try arena_alloc.alloc(u8, tests.algorithm.ivSize / 8); + const tag = try arena_alloc.alloc(u8, tests.algorithm.tagSize / 8); + const aad = try arena_alloc.alloc(u8, t.aad.len / 2); + const ct = try arena_alloc.alloc(u8, t.ct.len / 2); + const msg = try arena_alloc.alloc(u8, @max(ct.len, t.msg.len / 2)); + const expected_msg = try arena_alloc.alloc(u8, t.msg.len / 2); + _ = try std.fmt.hexToBytes(key, t.key); + _ = try std.fmt.hexToBytes(nonce, t.iv); + _ = try std.fmt.hexToBytes(tag, t.tag); + _ = try std.fmt.hexToBytes(aad, t.aad); + _ = try std.fmt.hexToBytes(expected_msg, t.msg); + _ = try std.fmt.hexToBytes(ct, t.ct); + const c_res = func(msg.ptr, ct.ptr, ct.len, tag.ptr, tag.len, aad.ptr, aad.len, nonce.ptr, key.ptr); + const valid = (c_res == 0); + if (valid == true) try std.testing.expectEqualSlices(u8, msg, expected_msg); + if (t.valid != valid) { + std.debug.print("Test failed: {}\n", .{t.tcId}); + try std.testing.expect(false); } } } -test "aegis256 - wycheproof" { - const alloc = std.testing.allocator; - var fbs = std.io.fixedBufferStream(@embedFile("wycheproof/aegis256_test.json.zst")); - var window_buffer: [zstd.DecompressorOptions.default_window_buffer_len]u8 = undefined; - var decompressor = zstd.decompressor(fbs.reader(), .{ .window_buffer = &window_buffer }); - const json = try decompressor.reader().readAllAlloc(alloc, 1000000); - defer alloc.free(json); - const parsed = try std.json.parseFromSlice(JsonTests, alloc, json, .{ .ignore_unknown_fields = true }); - defer parsed.deinit(); - for (parsed.value.testGroups) |test_group| { - if (!std.mem.eql(u8, "AeadTest", test_group.type)) continue; - for (test_group.tests) |t| { - var arena = heap.ArenaAllocator.init(alloc); - defer arena.deinit(); - var arena_alloc = arena.allocator(); - var key: [32]u8 = undefined; - var nonce: [32]u8 = undefined; - var tag: [16]u8 = undefined; - const aad = try arena_alloc.alloc(u8, t.aad.len / 2); - const ct = try arena_alloc.alloc(u8, t.ct.len / 2); - const msg = try arena_alloc.alloc(u8, t.msg.len / 2); - const expected_msg = try arena_alloc.alloc(u8, t.msg.len / 2); - _ = try std.fmt.hexToBytes(&key, t.key); - _ = try std.fmt.hexToBytes(&nonce, t.iv); - _ = try std.fmt.hexToBytes(&tag, t.tag); - _ = try std.fmt.hexToBytes(aad, t.aad); - _ = try std.fmt.hexToBytes(expected_msg, t.msg); - _ = try std.fmt.hexToBytes(ct, t.ct); - const c_res = aegis.aegis256_decrypt_detached(msg.ptr, ct.ptr, ct.len, &tag, tag.len, aad.ptr, aad.len, &nonce, &key); - const res: Result = if (c_res == 0) res: { - if (std.mem.eql(u8, msg, expected_msg)) break :res .valid; - break :res .invalid; - } else .invalid; - if ((std.mem.eql(u8, "invalid", t.result) and res == .valid) or (std.mem.eql(u8, "valid", t.result) and res == .invalid)) { - std.debug.print("Test failed: {}\n", .{t.tcId}); - try std.testing.expect(false); - } - } - } +test "rooterberg test vectors" { + try rooterberg("wycheproof/aegis128_l.json.zst", aegis.aegis128l_decrypt_detached); + try rooterberg("wycheproof/aegis128_l_256.json.zst", aegis.aegis128l_decrypt_detached); + try rooterberg("wycheproof/aegis256.json.zst", aegis.aegis256_decrypt_detached); + try rooterberg("wycheproof/aegis256_256.json.zst", aegis.aegis256_decrypt_detached); } diff --git a/src/test/wycheproof/aegis128L_test.json.zst b/src/test/wycheproof/aegis128L_test.json.zst deleted file mode 100644 index 032971966a6c15524d4d1842eed47347b8d2b03a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80895 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

    j5p`ac7)h|1oq|RxK!G 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 VPOxxtH%O=;=x@O;PXuNZl=}dg^E?0m From 3aacc8b55c5bd5a1874027cdea944c0ae6ccdfba Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 23 Jan 2025 14:54:22 +0100 Subject: [PATCH 199/219] Wycheproof -> Rooterberg --- src/test/main.zig | 10 +++++----- .../{wycheproof => rooterberg}/aegis128_l.json.zst | Bin .../aegis128_l_256.json.zst | Bin .../{wycheproof => rooterberg}/aegis256.json.zst | Bin .../aegis256_256.json.zst | Bin 5 files changed, 5 insertions(+), 5 deletions(-) rename src/test/{wycheproof => rooterberg}/aegis128_l.json.zst (100%) rename src/test/{wycheproof => rooterberg}/aegis128_l_256.json.zst (100%) rename src/test/{wycheproof => rooterberg}/aegis256.json.zst (100%) rename src/test/{wycheproof => rooterberg}/aegis256_256.json.zst (100%) diff --git a/src/test/main.zig b/src/test/main.zig index 096f3a0..6875b47 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -916,7 +916,7 @@ test "aegis256x4 - MAC test vector" { try std.testing.expectEqualSlices(u8, &expected256, &mac256); } -// Wycheproof tests +// Rooterberg tests const JsonTest = struct { tcId: u64, @@ -981,8 +981,8 @@ fn rooterberg(comptime file: []const u8, comptime func: anytype) !void { } test "rooterberg test vectors" { - try rooterberg("wycheproof/aegis128_l.json.zst", aegis.aegis128l_decrypt_detached); - try rooterberg("wycheproof/aegis128_l_256.json.zst", aegis.aegis128l_decrypt_detached); - try rooterberg("wycheproof/aegis256.json.zst", aegis.aegis256_decrypt_detached); - try rooterberg("wycheproof/aegis256_256.json.zst", aegis.aegis256_decrypt_detached); + try rooterberg("rooterberg/aegis128_l.json.zst", aegis.aegis128l_decrypt_detached); + try rooterberg("rooterberg/aegis128_l_256.json.zst", aegis.aegis128l_decrypt_detached); + try rooterberg("rooterberg/aegis256.json.zst", aegis.aegis256_decrypt_detached); + try rooterberg("rooterberg/aegis256_256.json.zst", aegis.aegis256_decrypt_detached); } diff --git a/src/test/wycheproof/aegis128_l.json.zst b/src/test/rooterberg/aegis128_l.json.zst similarity index 100% rename from src/test/wycheproof/aegis128_l.json.zst rename to src/test/rooterberg/aegis128_l.json.zst diff --git a/src/test/wycheproof/aegis128_l_256.json.zst b/src/test/rooterberg/aegis128_l_256.json.zst similarity index 100% rename from src/test/wycheproof/aegis128_l_256.json.zst rename to src/test/rooterberg/aegis128_l_256.json.zst diff --git a/src/test/wycheproof/aegis256.json.zst b/src/test/rooterberg/aegis256.json.zst similarity index 100% rename from src/test/wycheproof/aegis256.json.zst rename to src/test/rooterberg/aegis256.json.zst diff --git a/src/test/wycheproof/aegis256_256.json.zst b/src/test/rooterberg/aegis256_256.json.zst similarity index 100% rename from src/test/wycheproof/aegis256_256.json.zst rename to src/test/rooterberg/aegis256_256.json.zst From a075245acd196e78981f8b3a8101b40ec580f737 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 10 Feb 2025 13:31:16 +0100 Subject: [PATCH 200/219] Suggest some other implementations --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 5484137..b82220f 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,10 @@ Include `` and call `aegis_init()` prior to doing anything else with th [Other AEGIS implementations](https://github.com/cfrg/draft-irtf-cfrg-aegis-aead?tab=readme-ov-file#known-implementations) are also available for most programming languages. +Recommended for applications specifically targeting environments without AES instructions: [aegis-bitsliced](https://github.com/aegis-aead/aegis-bitsliced). + +Recommended for applications targeting a specific x86_64 CPU: [aegis-jasmin](https://github.com/aegis-aead/aegis-jasmin). + ## Key differences between AEGIS variants | **Feature** | **AEGIS-128L** | **AEGIS-256** | **AEGIS-128X2** | **AEGIS-128X4** | **AEGIS-256X2** | **AEGIS-256X4** | From dd1df42ac90c9d0b1a263add9d5eba7be4d9d218 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 17 Feb 2025 13:02:41 +0100 Subject: [PATCH 201/219] Fix 128X-MAC folding --- src/aegis128x2/aegis128x2_common.h | 5 +++-- src/aegis128x4/aegis128x4_common.h | 5 +++-- src/test/main.zig | 8 ++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/aegis128x2/aegis128x2_common.h b/src/aegis128x2/aegis128x2_common.h index c6493a3..e6f748d 100644 --- a/src/aegis128x2/aegis128x2_common.h +++ b/src/aegis128x2/aegis128x2_common.h @@ -201,7 +201,8 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); AES_BLOCK_STORE(t, tmp); for (i = 0; i < d / 2; i++) { - memcpy(r, t + i * 32, 32); + memcpy(r, t + i * 32, 16); + memcpy(r + RATE / 2, t + i * 32 + 16, 16); aegis128x2_absorb(r, state); } tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); @@ -225,7 +226,7 @@ aegis128x2_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat AES_BLOCK_STORE(t + AES_BLOCK_LENGTH, tmp); for (i = 1; i < d; i++) { memcpy(r, t + i * 16, 16); - memcpy(r + 16, t + AES_BLOCK_LENGTH + i * 16, 16); + memcpy(r + RATE / 2, t + AES_BLOCK_LENGTH + i * 16, 16); aegis128x2_absorb(r, state); } tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); diff --git a/src/aegis128x4/aegis128x4_common.h b/src/aegis128x4/aegis128x4_common.h index b86f1c0..3b1bf68 100644 --- a/src/aegis128x4/aegis128x4_common.h +++ b/src/aegis128x4/aegis128x4_common.h @@ -216,7 +216,8 @@ aegis128x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat tmp = AES_BLOCK_XOR(tmp, AES_BLOCK_XOR(state[1], state[0])); AES_BLOCK_STORE(t, tmp); for (i = 0; i < d / 2; i++) { - memcpy(r, t + i * 32, 32); + memcpy(r, t + i * 32, 16); + memcpy(r + RATE / 2, t + i * 32 + 16, 16); aegis128x4_absorb(r, state); } tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); @@ -240,7 +241,7 @@ aegis128x4_mac_nr(uint8_t *mac, size_t maclen, uint64_t adlen, aes_block_t *stat AES_BLOCK_STORE(t + AES_BLOCK_LENGTH, tmp); for (i = 1; i < d; i++) { memcpy(r, t + i * 16, 16); - memcpy(r + 16, t + AES_BLOCK_LENGTH + i * 16, 16); + memcpy(r + RATE / 2, t + AES_BLOCK_LENGTH + i * 16, 16); aegis128x4_absorb(r, state); } tmp = AES_BLOCK_LOAD_64x2(maclen << 3, d); diff --git a/src/test/main.zig b/src/test/main.zig index 6875b47..a3b7446 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -790,8 +790,8 @@ test "aegis128x2 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis128x2_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "7aa41edfd57a95c1108d83c63b8d4d01"; - const expected256_hex = "55b6449929cd2b01d04786e57698b3ddfb5cbf6e421bbd022637a33d60f40294"; + const expected128_hex = "6873ee34e6b5c59143b6d35c5e4f2c6e"; + const expected256_hex = "afcba3fc2d63c8d6c7f2d63f3ec8fbbbaf022e15ac120e78ffa7755abccd959c"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); @@ -819,8 +819,8 @@ test "aegis128x4 - MAC test vector" { try testing.expectEqual(ret, 0); ret = aegis.aegis128x4_mac_final(&st, &mac256, mac256.len); try testing.expectEqual(ret, 0); - const expected128_hex = "46a194ea4337bb32c2186a99e312f3a7"; - const expected256_hex = "ea884072699569532fb68ae9fb2653c9ffef3e974333d3a17d77be02453cc12f"; + const expected128_hex = "c45a98fd9ab8956ce616eb008cfe4e53"; + const expected256_hex = "26fdc76f41b1da7aec7779f6e964beae8904e662f05aca8345ae3befb357412a"; var expected128: [16]u8 = undefined; var expected256: [32]u8 = undefined; _ = try std.fmt.hexToBytes(&expected128, expected128_hex); From 44d313e6980b44f553f731d9311527b0ba1b18cb Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 17 Feb 2025 13:04:41 +0100 Subject: [PATCH 202/219] Bump --- CMakeLists.txt | 2 +- build.zig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3f31a3..d2eefe5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ configure_package_CONFIG_FILE("${CONFIG_TEMPLATE_FILE}" "${CONFIG_FILE}" install(FILES "${CONFIG_FILE}" DESTINATION "${INSTALL_CONFIG_DIR}") -write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.3.1 COMPATIBILITY AnyNewerVersion) +write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake" VERSION 0.4.0 COMPATIBILITY AnyNewerVersion) install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" DESTINATION "${INSTALL_CONFIG_DIR}") export(EXPORT "${TARGETS_EXPORT_NAME}" FILE "${TARGETS_EXPORT_FILE}" NAMESPACE "${PROJECT_NAME}::") diff --git a/build.zig b/build.zig index 6f7d30d..8d178e0 100644 --- a/build.zig +++ b/build.zig @@ -3,7 +3,7 @@ const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{ .preferred_optimize_mode = .ReleaseFast }); - const version = std.SemanticVersion.parse("0.3.1") catch unreachable; + const version = std.SemanticVersion.parse("0.4.0") catch unreachable; const lib = b.addStaticLibrary(.{ .name = "aegis", From 146429f635d574c2b200d9a50d18ba4aeb13f30b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 25 Feb 2025 21:08:21 +0100 Subject: [PATCH 203/219] Mention go-libaegis --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b82220f..1f0fa6b 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ Include `` and call `aegis_init()` prior to doing anything else with th ## Bindings * [`aegis`](https://crates.io/crates/aegis) is a set of bindings for Rust. +* [`go-libaegis](https://github.com/aegis-aead/go-libaegis) is a set of bindings for Go. ## Libaegis users From c7fe518a27840004dbd9dbdfab874c47edf8d1a0 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 3 Mar 2025 12:42:13 +0100 Subject: [PATCH 204/219] CI: split compilation and tests --- .github/workflows/{ci.yml => compile.yml} | 14 +++++------- .github/workflows/tests.yml | 28 +++++++++++++++++++++++ .github/workflows/version_check.yml | 2 +- 3 files changed, 35 insertions(+), 9 deletions(-) rename .github/workflows/{ci.yml => compile.yml} (82%) create mode 100644 .github/workflows/tests.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/compile.yml similarity index 82% rename from .github/workflows/ci.yml rename to .github/workflows/compile.yml index af124cd..b730d07 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/compile.yml @@ -1,4 +1,4 @@ -name: CI +name: Compilation on: push: @@ -16,14 +16,13 @@ jobs: - name: Install Zig uses: mlugg/setup-zig@v1 - - name: Unit tests - run: | - zig build test - zig build test -Drelease - - name: Compilation to multiple targets run: | + zig build zig build -Drelease + zig build -Drelease -Dfavor-performance + zig build -Drelease -Dwith-benchmark + zig build -Drelease -Dwith-benchmark -Dfavor-performance zig build -Dtarget=x86_64-linux -Dcpu=baseline zig build -Dtarget=aarch64-linux -Dcpu=baseline+aes+crypto @@ -40,5 +39,4 @@ jobs: zig build -Dtarget=x86_64-macos -Dcpu=znver4 zig build -Dtarget=aarch64-macos -Dcpu=apple_m2 zig build -Dtarget=wasm32-wasi - - rm -fr zig-cache zig-out + zig build -Dtarget=wasm32-freestanding diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..638da02 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,28 @@ +name: Tests + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build: + strategy: + matrix: + os: + - ubuntu-latest + - ubuntu-24.04-arm + + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v4 + + - name: Install Zig + uses: mlugg/setup-zig@v1 + + - name: Unit tests + run: | + zig build test + zig build test -Drelease \ No newline at end of file diff --git a/.github/workflows/version_check.yml b/.github/workflows/version_check.yml index 624a881..4fc8913 100644 --- a/.github/workflows/version_check.yml +++ b/.github/workflows/version_check.yml @@ -16,5 +16,5 @@ jobs: run: | grep -E 'const version =' build.zig | grep -E '"${{ github.ref_name }}"' || exit 78 echo "Zig build version check passed." - grep -E 'COMPATIBILITY AnyNewerVersion' CMakeLists.txt | grep -E ' ${{ github.ref_name }} ' || exit 78 + grep -E 'COMPATIBILITY AnyNewerVersion' CMakeLists.txt | grep -E ' ${{ github.ref_name }} ' || exit 78 echo "CMake version check passed." From 906a54489948240cd88a77d76bf4d402b287ec7e Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 3 Mar 2025 12:47:39 +0100 Subject: [PATCH 205/219] Test on Windows as well --- .github/workflows/tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 638da02..30e0d5b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,6 +13,7 @@ jobs: os: - ubuntu-latest - ubuntu-24.04-arm + - windows-latest runs-on: ${{ matrix.os }} From 2124d6be8b8572e79267354740c5d10954f12126 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 5 Mar 2025 00:12:39 +0100 Subject: [PATCH 206/219] Missing closing quote --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f0fa6b..dd2e711 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Include `` and call `aegis_init()` prior to doing anything else with th ## Bindings * [`aegis`](https://crates.io/crates/aegis) is a set of bindings for Rust. -* [`go-libaegis](https://github.com/aegis-aead/go-libaegis) is a set of bindings for Go. +* [`go-libaegis`](https://github.com/aegis-aead/go-libaegis) is a set of bindings for Go. ## Libaegis users From 96acec2ee809d5b1d380fb9b9573614cdf348c2b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 19 Mar 2025 08:37:56 +0100 Subject: [PATCH 207/219] Indent --- src/common/common.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/common/common.h b/src/common/common.h index bcc5b97..53bfd98 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -27,7 +27,6 @@ static int errno; # define HAVE_ANDROID_GETCPUFEATURES #endif #if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64) - # define HAVE_CPUID # define NATIVE_LITTLE_ENDIAN # if defined(__clang__) || defined(__GNUC__) From 1e87327623d5b20fb73a634b24265d6b65c49df5 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 19 Mar 2025 09:09:27 +0100 Subject: [PATCH 208/219] CI: compile with MSVC and cmake --- .github/workflows/msvc.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/msvc.yml diff --git a/.github/workflows/msvc.yml b/.github/workflows/msvc.yml new file mode 100644 index 0000000..7408898 --- /dev/null +++ b/.github/workflows/msvc.yml @@ -0,0 +1,23 @@ +name: CMake + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +env: + BUILD_TYPE: Release + +jobs: + build: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + + - name: Configure CMake + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} From 096d08401f9a2a8c536f422f6e094782bbc8bd59 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 19 Mar 2025 09:56:07 +0100 Subject: [PATCH 209/219] Add compile-time options to disable AVX2 or AVX512 --- src/common/common.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/common/common.h b/src/common/common.h index 53bfd98..696444b 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -45,6 +45,16 @@ static int errno; # endif #endif +#ifdef DISABLE_AVX2 +# undef HAVE_AVXINTRIN_H +# undef HAVE_AVX2INTRIN_H +# undef HAVE_AVX512FINTRIN_H +# undef HAVE_VAESINTRIN_H +#endif +#ifdef DISABLE_AVX512 +# undef HAVE_AVX512FINTRIN_H +#endif + #if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ # ifndef NATIVE_LITTLE_ENDIAN # define NATIVE_LITTLE_ENDIAN From 63cc58b71730fd3c44b860f3db7bd7a8b1757b6a Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 19 Mar 2025 08:50:17 +0100 Subject: [PATCH 210/219] Try to support compilation with "clang-cl" Target pragmas don't seem to work with "clang-cl", so try to manually define the macros that are expected to be predefined. Ugly hack; there has to be a better way to address this. Fixes #18 --- .github/workflows/clang-cl.yml | 31 +++++++++++++++++++++++++++++++ src/common/common.h | 23 +++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 .github/workflows/clang-cl.yml diff --git a/.github/workflows/clang-cl.yml b/.github/workflows/clang-cl.yml new file mode 100644 index 0000000..56e1f10 --- /dev/null +++ b/.github/workflows/clang-cl.yml @@ -0,0 +1,31 @@ +name: Clang-CL + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +env: + BUILD_TYPE: Release + +jobs: + build: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + + - uses: ilammy/msvc-dev-cmd@v1 + + - name: Environment + run: clang-cl -E -Xclang -dM nul + + - name: Configure CMake + env: + CC: clang-cl + CMAKE_GENERATOR: Ninja + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} diff --git a/src/common/common.h b/src/common/common.h index 696444b..9eadfeb 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -43,6 +43,29 @@ static int errno; # undef HAVE_VAESINTRIN_H # endif # endif + +/* target pragmas don't define these flags on clang-cl (an alternative clang driver for Windows) */ +# if defined(__clang__) && defined(_MSC_BUILD) && defined(_MSC_VER) && \ + (defined(_M_IX86) || defined(_M_AMD64)) && !defined(__SSE3__) +# undef __SSE3__ 1 +# undef __SSSE3__ 1 +# undef __SSE4_1__ 1 +# undef __AVX__ 1 +# undef __AVX2__ 1 +# undef __AVX512F__ 1 +# undef __AES__ 1 +# undef __VAES__ 1 + +# define __SSE3__ 1 +# define __SSSE3__ 1 +# define __SSE4_1__ 1 +# define __AVX__ 1 +# define __AVX2__ 1 +# define __AVX512F__ 1 +# define __AES__ 1 +# define __VAES__ 1 +# endif + #endif #ifdef DISABLE_AVX2 From 77492f68e07326516290cc3fb2a69fa51dda797b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 17 Apr 2025 15:06:08 +0200 Subject: [PATCH 211/219] Reuse the previous msg values for the 256X2 and 256X4 test vectors --- src/test/main.zig | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/main.zig b/src/test/main.zig index a3b7446..445b1ba 100644 --- a/src/test/main.zig +++ b/src/test/main.zig @@ -553,7 +553,7 @@ test "aegis-256x2 - test vector" { const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; const nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; const ad = [_]u8{ 1, 2, 3, 4 } ** 2; - const msg = [_]u8{ 5, 6, 7, 8 } ** 30; + const msg = [_]u8{ 4, 5, 6, 7 } ** 30; var c = [_]u8{0} ** msg.len; var mac = [_]u8{0} ** 16; var mac256 = [_]u8{0} ** 32; @@ -562,10 +562,10 @@ test "aegis-256x2 - test vector" { ret = aegis.aegis256x2_encrypt_detached(&c, &mac256, mac256.len, &msg, msg.len, &ad, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); - const expected_ciphertext_hex = "73110d21a920608fd77b580f1e4428087a7365cb153b4eeca6b62e1a70f7f9a8d1f31f17da4c3acfacb2517f2f5e15758c35532e33751a964d18d29a599d2dc07f9378339b9d8c9fa03d30a4d7837cc8eb8b99bcbba2d11cd1a0f994af2b8f947ef18473bd519e5283736758480abc990e79d4ccab93dde9"; + const expected_ciphertext_hex = "72120c2ea8236180d67859001f4729077b7064c414384fe3a7b52f1571f4f8a7d0f01e18db4f3bc0adb150702e5d147a8d36522132761b994c1bd395589e2ccf0790dfe2a3d12d61cd666b2859827739db4037dd3124c78424459376f6cac08e1a7223a2a43e398ce6385cd654a19f481cba3b8f25910b42"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(c, .lower), expected_ciphertext_hex); - const expected_tag_hex = "94a3bd44ad3381e36335014620ee638e"; + const expected_tag_hex = "635d391828520bf1512763f0c8f5cdbd"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(mac, .lower), expected_tag_hex); var msg2 = [_]u8{0} ** msg.len; @@ -578,7 +578,7 @@ test "aegis-256x4 - test vector" { const key = [32]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; const nonce = [32]u8{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; const ad = [_]u8{ 1, 2, 3, 4 } ** 2; - const msg = [_]u8{ 5, 6, 7, 8 } ** 30; + const msg = [_]u8{ 4, 5, 6, 7 } ** 30; var c = [_]u8{0} ** msg.len; var mac = [_]u8{0} ** 16; var mac256 = [_]u8{0} ** 32; @@ -587,10 +587,10 @@ test "aegis-256x4 - test vector" { ret = aegis.aegis256x4_encrypt_detached(&c, &mac256, mac256.len, &msg, msg.len, &ad, ad.len, &nonce, &key); try testing.expectEqual(ret, 0); - const expected_ciphertext_hex = "bec109547f8316d598b3b7d947ad4c0ef5b98e217cffa0d858ad49ae34109a95abc5b5fada820c4d6ae2fca0f5e2444e52a04a1edb7bec71408de3e19950052194506be3ba6a4de51a15a577ea0e4c14f7539a13e751a555f48d0f49fecffb220525e60d381e2efa803b09b7164ba59fdc66656affd51e06"; + const expected_ciphertext_hex = "bfc2085b7e8017da99b0b6d646ae4d01f4ba8f2e7dfca1d759ae48a135139b9aaac6b4f5db810d426be1fdaff4e1454153a34b11da78ed7e418ee2ee9853042e95536aecbb694cea1b16a478eb0d4d1bf6509b1ce652a45af58e0e46ffccfa2d0426e702391d2ff5813808b81748a490dd656465fed61f09"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(c, .lower), expected_ciphertext_hex); - const expected_tag_hex = "ec44b512d713f745547be345bcc66b6c"; + const expected_tag_hex = "b63b611b13975e2f3dc3cb6c2397bfcd"; try testing.expectEqualSlices(u8, &std.fmt.bytesToHex(mac, .lower), expected_tag_hex); var msg2 = [_]u8{0} ** msg.len; From 5726c4ad9c77c50bacf4971942e115fd5ad72d97 Mon Sep 17 00:00:00 2001 From: George Steed Date: Mon, 12 May 2025 16:35:41 +0100 Subject: [PATCH 212/219] Rename "armcrypto" implementations to "neon_aes" (#20) The Arm 64-bit architecture contains a number of architecture extensions relevant to the AEGIS family of algorithms, however currently libaegis only checks and exposes FEAT_AES. In particular: * FEAT_SHA3 contains the Neon EOR3 and BCAX instructions which can be useful for e.g. combining pairs of exclusive-or instructions. * FEAT_SVE_AES provides SVE versions of the existing AESE and AESMC instructions. These can be beneficial on micro-architectures with longer vectors. * FEAT_SVE2 provides SVE2 versions of the EOR3 and BCAX instructions, mirroring the Neon versions but for SVE vectors. As a first step towards supporting these new extensions, rename the existing code to disambiguate away from "armcrypto" and instead refer to the exact "neon_aes" extension that the code depends on. --- build.zig | 14 ++++++------ src/aegis128l/aegis128l.c | 8 +++---- src/aegis128l/aegis128l_armcrypto.h | 9 -------- ...s128l_armcrypto.c => aegis128l_neon_aes.c} | 4 ++-- src/aegis128l/aegis128l_neon_aes.h | 9 ++++++++ src/aegis128x2/aegis128x2.c | 8 +++---- src/aegis128x2/aegis128x2_armcrypto.h | 9 -------- ...28x2_armcrypto.c => aegis128x2_neon_aes.c} | 4 ++-- src/aegis128x2/aegis128x2_neon_aes.h | 9 ++++++++ src/aegis128x4/aegis128x4.c | 8 +++---- src/aegis128x4/aegis128x4_armcrypto.h | 9 -------- ...28x4_armcrypto.c => aegis128x4_neon_aes.c} | 4 ++-- src/aegis128x4/aegis128x4_neon_aes.h | 9 ++++++++ src/aegis256/aegis256.c | 8 +++---- src/aegis256/aegis256_armcrypto.h | 9 -------- ...gis256_armcrypto.c => aegis256_neon_aes.c} | 4 ++-- src/aegis256/aegis256_neon_aes.h | 9 ++++++++ src/aegis256x2/aegis256x2.c | 8 +++---- src/aegis256x2/aegis256x2_armcrypto.h | 9 -------- ...56x2_armcrypto.c => aegis256x2_neon_aes.c} | 4 ++-- src/aegis256x2/aegis256x2_neon_aes.h | 9 ++++++++ src/aegis256x4/aegis256x4.c | 8 +++---- src/aegis256x4/aegis256x4_armcrypto.h | 9 -------- ...56x4_armcrypto.c => aegis256x4_neon_aes.c} | 4 ++-- src/aegis256x4/aegis256x4_neon_aes.h | 9 ++++++++ src/common/cpu.c | 22 +++++++++---------- src/common/cpu.h | 2 +- 27 files changed, 109 insertions(+), 109 deletions(-) delete mode 100644 src/aegis128l/aegis128l_armcrypto.h rename src/aegis128l/{aegis128l_armcrypto.c => aegis128l_neon_aes.c} (96%) create mode 100644 src/aegis128l/aegis128l_neon_aes.h delete mode 100644 src/aegis128x2/aegis128x2_armcrypto.h rename src/aegis128x2/{aegis128x2_armcrypto.c => aegis128x2_neon_aes.c} (96%) create mode 100644 src/aegis128x2/aegis128x2_neon_aes.h delete mode 100644 src/aegis128x4/aegis128x4_armcrypto.h rename src/aegis128x4/{aegis128x4_armcrypto.c => aegis128x4_neon_aes.c} (97%) create mode 100644 src/aegis128x4/aegis128x4_neon_aes.h delete mode 100644 src/aegis256/aegis256_armcrypto.h rename src/aegis256/{aegis256_armcrypto.c => aegis256_neon_aes.c} (95%) create mode 100644 src/aegis256/aegis256_neon_aes.h delete mode 100644 src/aegis256x2/aegis256x2_armcrypto.h rename src/aegis256x2/{aegis256x2_armcrypto.c => aegis256x2_neon_aes.c} (96%) create mode 100644 src/aegis256x2/aegis256x2_neon_aes.h delete mode 100644 src/aegis256x4/aegis256x4_armcrypto.h rename src/aegis256x4/{aegis256x4_armcrypto.c => aegis256x4_neon_aes.c} (97%) create mode 100644 src/aegis256x4/aegis256x4_neon_aes.h diff --git a/build.zig b/build.zig index 8d178e0..dbb913e 100644 --- a/build.zig +++ b/build.zig @@ -31,14 +31,14 @@ pub fn build(b: *std.Build) void { const source_files = &.{ "src/aegis128l/aegis128l_aesni.c", "src/aegis128l/aegis128l_altivec.c", - "src/aegis128l/aegis128l_armcrypto.c", + "src/aegis128l/aegis128l_neon_aes.c", "src/aegis128l/aegis128l_soft.c", "src/aegis128l/aegis128l.c", "src/aegis128x2/aegis128x2_aesni.c", "src/aegis128x2/aegis128x2_altivec.c", "src/aegis128x2/aegis128x2_avx2.c", - "src/aegis128x2/aegis128x2_armcrypto.c", + "src/aegis128x2/aegis128x2_neon_aes.c", "src/aegis128x2/aegis128x2_soft.c", "src/aegis128x2/aegis128x2.c", @@ -46,21 +46,21 @@ pub fn build(b: *std.Build) void { "src/aegis128x4/aegis128x4_altivec.c", "src/aegis128x4/aegis128x4_avx2.c", "src/aegis128x4/aegis128x4_avx512.c", - "src/aegis128x4/aegis128x4_armcrypto.c", - "src/aegis128x4/aegis128x4_armcrypto.c", + "src/aegis128x4/aegis128x4_neon_aes.c", + "src/aegis128x4/aegis128x4_neon_aes.c", "src/aegis128x4/aegis128x4_soft.c", "src/aegis128x4/aegis128x4.c", "src/aegis256/aegis256_aesni.c", "src/aegis256/aegis256_altivec.c", - "src/aegis256/aegis256_armcrypto.c", + "src/aegis256/aegis256_neon_aes.c", "src/aegis256/aegis256_soft.c", "src/aegis256/aegis256.c", "src/aegis256x2/aegis256x2_aesni.c", "src/aegis256x2/aegis256x2_altivec.c", "src/aegis256x2/aegis256x2_avx2.c", - "src/aegis256x2/aegis256x2_armcrypto.c", + "src/aegis256x2/aegis256x2_neon_aes.c", "src/aegis256x2/aegis256x2_soft.c", "src/aegis256x2/aegis256x2.c", @@ -68,7 +68,7 @@ pub fn build(b: *std.Build) void { "src/aegis256x4/aegis256x4_altivec.c", "src/aegis256x4/aegis256x4_avx2.c", "src/aegis256x4/aegis256x4_avx512.c", - "src/aegis256x4/aegis256x4_armcrypto.c", + "src/aegis256x4/aegis256x4_neon_aes.c", "src/aegis256x4/aegis256x4_soft.c", "src/aegis256x4/aegis256x4.c", diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 2da6e6a..9d46dff 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -6,14 +6,14 @@ #include "aegis128l.h" #include "aegis128l_aesni.h" #include "aegis128l_altivec.h" -#include "aegis128l_armcrypto.h" +#include "aegis128l_neon_aes.h" #ifndef HAS_HW_AES # include "aegis128l_soft.h" static const aegis128l_implementation *implementation = &aegis128l_soft_implementation; #else # if defined(__aarch64__) || defined(_M_ARM64) -static const aegis128l_implementation *implementation = &aegis128l_armcrypto_implementation; +static const aegis128l_implementation *implementation = &aegis128l_neon_aes_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis128l_implementation *implementation = &aegis128l_aesni_implementation; # elif defined(__ALTIVEC__) && defined(__CRYPTO__) @@ -232,8 +232,8 @@ aegis128l_pick_best_implementation(void) #endif #if defined(__aarch64__) || defined(_M_ARM64) - if (aegis_runtime_has_armcrypto()) { - implementation = &aegis128l_armcrypto_implementation; + if (aegis_runtime_has_neon_aes()) { + implementation = &aegis128l_neon_aes_implementation; return 0; } #endif diff --git a/src/aegis128l/aegis128l_armcrypto.h b/src/aegis128l/aegis128l_armcrypto.h deleted file mode 100644 index 884e99b..0000000 --- a/src/aegis128l/aegis128l_armcrypto.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef aegis128l_armcrypto_H -#define aegis128l_armcrypto_H - -#include "../common/common.h" -#include "implementations.h" - -extern struct aegis128l_implementation aegis128l_armcrypto_implementation; - -#endif \ No newline at end of file diff --git a/src/aegis128l/aegis128l_armcrypto.c b/src/aegis128l/aegis128l_neon_aes.c similarity index 96% rename from src/aegis128l/aegis128l_armcrypto.c rename to src/aegis128l/aegis128l_neon_aes.c index 73d8d77..c5710a4 100644 --- a/src/aegis128l/aegis128l_armcrypto.c +++ b/src/aegis128l/aegis128l_neon_aes.c @@ -5,7 +5,7 @@ # include "../common/common.h" # include "aegis128l.h" -# include "aegis128l_armcrypto.h" +# include "aegis128l_neon_aes.h" # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 @@ -52,7 +52,7 @@ aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block # include "aegis128l_common.h" -struct aegis128l_implementation aegis128l_armcrypto_implementation = { +struct aegis128l_implementation aegis128l_neon_aes_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, diff --git a/src/aegis128l/aegis128l_neon_aes.h b/src/aegis128l/aegis128l_neon_aes.h new file mode 100644 index 0000000..1d3b95c --- /dev/null +++ b/src/aegis128l/aegis128l_neon_aes.h @@ -0,0 +1,9 @@ +#ifndef aegis128l_neon_aes_H +#define aegis128l_neon_aes_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128l_implementation aegis128l_neon_aes_implementation; + +#endif diff --git a/src/aegis128x2/aegis128x2.c b/src/aegis128x2/aegis128x2.c index dec34b5..bd6f00e 100644 --- a/src/aegis128x2/aegis128x2.c +++ b/src/aegis128x2/aegis128x2.c @@ -6,7 +6,7 @@ #include "aegis128x2.h" #include "aegis128x2_aesni.h" #include "aegis128x2_altivec.h" -#include "aegis128x2_armcrypto.h" +#include "aegis128x2_neon_aes.h" #include "aegis128x2_avx2.h" #ifndef HAS_HW_AES @@ -14,7 +14,7 @@ static const aegis128x2_implementation *implementation = &aegis128x2_soft_implementation; #else # if defined(__aarch64__) || defined(_M_ARM64) -static const aegis128x2_implementation *implementation = &aegis128x2_armcrypto_implementation; +static const aegis128x2_implementation *implementation = &aegis128x2_neon_aes_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis128x2_implementation *implementation = &aegis128x2_aesni_implementation; # elif defined(__ALTIVEC__) && defined(__CRYPTO__) @@ -232,8 +232,8 @@ aegis128x2_pick_best_implementation(void) #endif #if defined(__aarch64__) || defined(_M_ARM64) - if (aegis_runtime_has_armcrypto()) { - implementation = &aegis128x2_armcrypto_implementation; + if (aegis_runtime_has_neon_aes()) { + implementation = &aegis128x2_neon_aes_implementation; return 0; } #endif diff --git a/src/aegis128x2/aegis128x2_armcrypto.h b/src/aegis128x2/aegis128x2_armcrypto.h deleted file mode 100644 index 64cb2c4..0000000 --- a/src/aegis128x2/aegis128x2_armcrypto.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef aegis128x2_armcrypto_H -#define aegis128x2_armcrypto_H - -#include "../common/common.h" -#include "implementations.h" - -extern struct aegis128x2_implementation aegis128x2_armcrypto_implementation; - -#endif \ No newline at end of file diff --git a/src/aegis128x2/aegis128x2_armcrypto.c b/src/aegis128x2/aegis128x2_neon_aes.c similarity index 96% rename from src/aegis128x2/aegis128x2_armcrypto.c rename to src/aegis128x2/aegis128x2_neon_aes.c index c55a3a9..63f2cfd 100644 --- a/src/aegis128x2/aegis128x2_armcrypto.c +++ b/src/aegis128x2/aegis128x2_neon_aes.c @@ -5,7 +5,7 @@ # include "../common/common.h" # include "aegis128x2.h" -# include "aegis128x2_armcrypto.h" +# include "aegis128x2_neon_aes.h" # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 @@ -86,7 +86,7 @@ aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc # include "aegis128x2_common.h" -struct aegis128x2_implementation aegis128x2_armcrypto_implementation = { +struct aegis128x2_implementation aegis128x2_neon_aes_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, diff --git a/src/aegis128x2/aegis128x2_neon_aes.h b/src/aegis128x2/aegis128x2_neon_aes.h new file mode 100644 index 0000000..aa3d021 --- /dev/null +++ b/src/aegis128x2/aegis128x2_neon_aes.h @@ -0,0 +1,9 @@ +#ifndef aegis128x2_neon_aes_H +#define aegis128x2_neon_aes_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x2_implementation aegis128x2_neon_aes_implementation; + +#endif diff --git a/src/aegis128x4/aegis128x4.c b/src/aegis128x4/aegis128x4.c index b9ceb2b..c0589a4 100644 --- a/src/aegis128x4/aegis128x4.c +++ b/src/aegis128x4/aegis128x4.c @@ -6,7 +6,7 @@ #include "aegis128x4.h" #include "aegis128x4_aesni.h" #include "aegis128x4_altivec.h" -#include "aegis128x4_armcrypto.h" +#include "aegis128x4_neon_aes.h" #include "aegis128x4_avx2.h" #include "aegis128x4_avx512.h" @@ -15,7 +15,7 @@ static const aegis128x4_implementation *implementation = &aegis128x4_soft_implementation; #else # if defined(__aarch64__) || defined(_M_ARM64) -static const aegis128x4_implementation *implementation = &aegis128x4_armcrypto_implementation; +static const aegis128x4_implementation *implementation = &aegis128x4_neon_aes_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis128x4_implementation *implementation = &aegis128x4_aesni_implementation; # elif defined(__ALTIVEC__) && defined(__CRYPTO__) @@ -233,8 +233,8 @@ aegis128x4_pick_best_implementation(void) #endif #if defined(__aarch64__) || defined(_M_ARM64) - if (aegis_runtime_has_armcrypto()) { - implementation = &aegis128x4_armcrypto_implementation; + if (aegis_runtime_has_neon_aes()) { + implementation = &aegis128x4_neon_aes_implementation; return 0; } #endif diff --git a/src/aegis128x4/aegis128x4_armcrypto.h b/src/aegis128x4/aegis128x4_armcrypto.h deleted file mode 100644 index 43befcb..0000000 --- a/src/aegis128x4/aegis128x4_armcrypto.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef aegis128x4_armcrypto_H -#define aegis128x4_armcrypto_H - -#include "../common/common.h" -#include "implementations.h" - -extern struct aegis128x4_implementation aegis128x4_armcrypto_implementation; - -#endif \ No newline at end of file diff --git a/src/aegis128x4/aegis128x4_armcrypto.c b/src/aegis128x4/aegis128x4_neon_aes.c similarity index 97% rename from src/aegis128x4/aegis128x4_armcrypto.c rename to src/aegis128x4/aegis128x4_neon_aes.c index 5979c8e..95c1ae4 100644 --- a/src/aegis128x4/aegis128x4_armcrypto.c +++ b/src/aegis128x4/aegis128x4_neon_aes.c @@ -5,7 +5,7 @@ # include "../common/common.h" # include "aegis128x4.h" -# include "aegis128x4_armcrypto.h" +# include "aegis128x4_neon_aes.h" # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 @@ -94,7 +94,7 @@ aegis128x4_update(aes_block_t *const state, const aes_block_t d1, const aes_bloc # include "aegis128x4_common.h" -struct aegis128x4_implementation aegis128x4_armcrypto_implementation = { +struct aegis128x4_implementation aegis128x4_neon_aes_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, diff --git a/src/aegis128x4/aegis128x4_neon_aes.h b/src/aegis128x4/aegis128x4_neon_aes.h new file mode 100644 index 0000000..028b8e3 --- /dev/null +++ b/src/aegis128x4/aegis128x4_neon_aes.h @@ -0,0 +1,9 @@ +#ifndef aegis128x4_neon_aes_H +#define aegis128x4_neon_aes_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128x4_implementation aegis128x4_neon_aes_implementation; + +#endif diff --git a/src/aegis256/aegis256.c b/src/aegis256/aegis256.c index 71d0169..45bcbb2 100644 --- a/src/aegis256/aegis256.c +++ b/src/aegis256/aegis256.c @@ -6,14 +6,14 @@ #include "aegis256.h" #include "aegis256_aesni.h" #include "aegis256_altivec.h" -#include "aegis256_armcrypto.h" +#include "aegis256_neon_aes.h" #ifndef HAS_HW_AES # include "aegis256_soft.h" static const aegis256_implementation *implementation = &aegis256_soft_implementation; #else # if defined(__aarch64__) || defined(_M_ARM64) -static const aegis256_implementation *implementation = &aegis256_armcrypto_implementation; +static const aegis256_implementation *implementation = &aegis256_neon_aes_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis256_implementation *implementation = &aegis256_aesni_implementation; # elif defined(__ALTIVEC__) && defined(__CRYPTO__) @@ -231,8 +231,8 @@ aegis256_pick_best_implementation(void) #endif #if defined(__aarch64__) || defined(_M_ARM64) - if (aegis_runtime_has_armcrypto()) { - implementation = &aegis256_armcrypto_implementation; + if (aegis_runtime_has_neon_aes()) { + implementation = &aegis256_neon_aes_implementation; return 0; } #endif diff --git a/src/aegis256/aegis256_armcrypto.h b/src/aegis256/aegis256_armcrypto.h deleted file mode 100644 index dc67449..0000000 --- a/src/aegis256/aegis256_armcrypto.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef aegis256_armcrypto_H -#define aegis256_armcrypto_H - -#include "../common/common.h" -#include "implementations.h" - -extern struct aegis256_implementation aegis256_armcrypto_implementation; - -#endif \ No newline at end of file diff --git a/src/aegis256/aegis256_armcrypto.c b/src/aegis256/aegis256_neon_aes.c similarity index 95% rename from src/aegis256/aegis256_armcrypto.c rename to src/aegis256/aegis256_neon_aes.c index 1b2a349..94cc0fd 100644 --- a/src/aegis256/aegis256_armcrypto.c +++ b/src/aegis256/aegis256_neon_aes.c @@ -5,7 +5,7 @@ # include "../common/common.h" # include "aegis256.h" -# include "aegis256_armcrypto.h" +# include "aegis256_neon_aes.h" # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 @@ -50,7 +50,7 @@ aegis256_update(aes_block_t *const state, const aes_block_t d) # include "aegis256_common.h" -struct aegis256_implementation aegis256_armcrypto_implementation = { +struct aegis256_implementation aegis256_neon_aes_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, diff --git a/src/aegis256/aegis256_neon_aes.h b/src/aegis256/aegis256_neon_aes.h new file mode 100644 index 0000000..6172ca8 --- /dev/null +++ b/src/aegis256/aegis256_neon_aes.h @@ -0,0 +1,9 @@ +#ifndef aegis256_neon_aes_H +#define aegis256_neon_aes_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256_implementation aegis256_neon_aes_implementation; + +#endif diff --git a/src/aegis256x2/aegis256x2.c b/src/aegis256x2/aegis256x2.c index 9366149..7b18c1c 100644 --- a/src/aegis256x2/aegis256x2.c +++ b/src/aegis256x2/aegis256x2.c @@ -6,7 +6,7 @@ #include "aegis256x2.h" #include "aegis256x2_aesni.h" #include "aegis256x2_altivec.h" -#include "aegis256x2_armcrypto.h" +#include "aegis256x2_neon_aes.h" #include "aegis256x2_avx2.h" #ifndef HAS_HW_AES @@ -14,7 +14,7 @@ static const aegis256x2_implementation *implementation = &aegis256x2_soft_implementation; #else # if defined(__aarch64__) || defined(_M_ARM64) -static const aegis256x2_implementation *implementation = &aegis256x2_armcrypto_implementation; +static const aegis256x2_implementation *implementation = &aegis256x2_neon_aes_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis256x2_implementation *implementation = &aegis256x2_aesni_implementation; # elif defined(__ALTIVEC__) && defined(__CRYPTO__) @@ -232,8 +232,8 @@ aegis256x2_pick_best_implementation(void) #endif #if defined(__aarch64__) || defined(_M_ARM64) - if (aegis_runtime_has_armcrypto()) { - implementation = &aegis256x2_armcrypto_implementation; + if (aegis_runtime_has_neon_aes()) { + implementation = &aegis256x2_neon_aes_implementation; return 0; } #endif diff --git a/src/aegis256x2/aegis256x2_armcrypto.h b/src/aegis256x2/aegis256x2_armcrypto.h deleted file mode 100644 index 181416d..0000000 --- a/src/aegis256x2/aegis256x2_armcrypto.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef aegis256x2_armcrypto_H -#define aegis256x2_armcrypto_H - -#include "../common/common.h" -#include "implementations.h" - -extern struct aegis256x2_implementation aegis256x2_armcrypto_implementation; - -#endif \ No newline at end of file diff --git a/src/aegis256x2/aegis256x2_armcrypto.c b/src/aegis256x2/aegis256x2_neon_aes.c similarity index 96% rename from src/aegis256x2/aegis256x2_armcrypto.c rename to src/aegis256x2/aegis256x2_neon_aes.c index b82bb4c..d8f5cb0 100644 --- a/src/aegis256x2/aegis256x2_armcrypto.c +++ b/src/aegis256x2/aegis256x2_neon_aes.c @@ -5,7 +5,7 @@ # include "../common/common.h" # include "aegis256x2.h" -# include "aegis256x2_armcrypto.h" +# include "aegis256x2_neon_aes.h" # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 @@ -84,7 +84,7 @@ aegis256x2_update(aes_block_t *const state, const aes_block_t d) # include "aegis256x2_common.h" -struct aegis256x2_implementation aegis256x2_armcrypto_implementation = { +struct aegis256x2_implementation aegis256x2_neon_aes_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, diff --git a/src/aegis256x2/aegis256x2_neon_aes.h b/src/aegis256x2/aegis256x2_neon_aes.h new file mode 100644 index 0000000..a913e19 --- /dev/null +++ b/src/aegis256x2/aegis256x2_neon_aes.h @@ -0,0 +1,9 @@ +#ifndef aegis256x2_neon_aes_H +#define aegis256x2_neon_aes_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x2_implementation aegis256x2_neon_aes_implementation; + +#endif diff --git a/src/aegis256x4/aegis256x4.c b/src/aegis256x4/aegis256x4.c index e5f2dfd..6f8d169 100644 --- a/src/aegis256x4/aegis256x4.c +++ b/src/aegis256x4/aegis256x4.c @@ -6,7 +6,7 @@ #include "aegis256x4.h" #include "aegis256x4_aesni.h" #include "aegis256x4_altivec.h" -#include "aegis256x4_armcrypto.h" +#include "aegis256x4_neon_aes.h" #include "aegis256x4_avx2.h" #include "aegis256x4_avx512.h" @@ -15,7 +15,7 @@ static const aegis256x4_implementation *implementation = &aegis256x4_soft_implementation; #else # if defined(__aarch64__) || defined(_M_ARM64) -static const aegis256x4_implementation *implementation = &aegis256x4_armcrypto_implementation; +static const aegis256x4_implementation *implementation = &aegis256x4_neon_aes_implementation; # elif defined(__x86_64__) || defined(__i386__) static const aegis256x4_implementation *implementation = &aegis256x4_aesni_implementation; # elif defined(__ALTIVEC__) && defined(__CRYPTO__) @@ -233,8 +233,8 @@ aegis256x4_pick_best_implementation(void) #endif #if defined(__aarch64__) || defined(_M_ARM64) - if (aegis_runtime_has_armcrypto()) { - implementation = &aegis256x4_armcrypto_implementation; + if (aegis_runtime_has_neon_aes()) { + implementation = &aegis256x4_neon_aes_implementation; return 0; } #endif diff --git a/src/aegis256x4/aegis256x4_armcrypto.h b/src/aegis256x4/aegis256x4_armcrypto.h deleted file mode 100644 index bd8e9c8..0000000 --- a/src/aegis256x4/aegis256x4_armcrypto.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef aegis256x4_armcrypto_H -#define aegis256x4_armcrypto_H - -#include "../common/common.h" -#include "implementations.h" - -extern struct aegis256x4_implementation aegis256x4_armcrypto_implementation; - -#endif \ No newline at end of file diff --git a/src/aegis256x4/aegis256x4_armcrypto.c b/src/aegis256x4/aegis256x4_neon_aes.c similarity index 97% rename from src/aegis256x4/aegis256x4_armcrypto.c rename to src/aegis256x4/aegis256x4_neon_aes.c index 09f8d94..c2691e1 100644 --- a/src/aegis256x4/aegis256x4_armcrypto.c +++ b/src/aegis256x4/aegis256x4_neon_aes.c @@ -5,7 +5,7 @@ # include "../common/common.h" # include "aegis256x4.h" -# include "aegis256x4_armcrypto.h" +# include "aegis256x4_neon_aes.h" # ifndef __ARM_FEATURE_CRYPTO # define __ARM_FEATURE_CRYPTO 1 @@ -92,7 +92,7 @@ aegis256x4_update(aes_block_t *const state, const aes_block_t d) # include "aegis256x4_common.h" -struct aegis256x4_implementation aegis256x4_armcrypto_implementation = { +struct aegis256x4_implementation aegis256x4_neon_aes_implementation = { .encrypt_detached = encrypt_detached, .decrypt_detached = decrypt_detached, .encrypt_unauthenticated = encrypt_unauthenticated, diff --git a/src/aegis256x4/aegis256x4_neon_aes.h b/src/aegis256x4/aegis256x4_neon_aes.h new file mode 100644 index 0000000..78fc88f --- /dev/null +++ b/src/aegis256x4/aegis256x4_neon_aes.h @@ -0,0 +1,9 @@ +#ifndef aegis256x4_neon_aes_H +#define aegis256x4_neon_aes_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis256x4_implementation aegis256x4_neon_aes_implementation; + +#endif diff --git a/src/common/cpu.c b/src/common/cpu.c index 3c9c87a..7416425 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -22,7 +22,7 @@ typedef struct CPUFeatures_ { int initialized; int has_neon; - int has_armcrypto; + int has_neon_aes; int has_avx; int has_avx2; int has_avx512f; @@ -88,9 +88,9 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) } #if __ARM_FEATURE_CRYPTO - cpu_features->has_armcrypto = 1; + cpu_features->has_neon_aes = 1; #elif defined(_M_ARM64) - cpu_features->has_armcrypto = + cpu_features->has_neon_aes = 1; /* assuming all CPUs supported by ARM Windows have the crypto extensions */ #elif defined(__APPLE__) && defined(CPU_TYPE_ARM64) && defined(CPU_SUBTYPE_ARM64E) { @@ -103,30 +103,30 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) cpu_type == CPU_TYPE_ARM64 && sysctlbyname("hw.cpusubtype", &cpu_subtype, &cpu_subtype_len, NULL, 0) == 0 && (cpu_subtype == CPU_SUBTYPE_ARM64E || cpu_subtype == CPU_SUBTYPE_ARM64_V8)) { - cpu_features->has_armcrypto = 1; + cpu_features->has_neon_aes = 1; } } #elif defined(HAVE_ANDROID_GETCPUFEATURES) && defined(ANDROID_CPU_ARM_FEATURE_AES) - cpu_features->has_armcrypto = (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_AES) != 0x0; + cpu_features->has_neon_aes = (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_AES) != 0x0; #elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) # ifdef HAVE_GETAUXVAL - cpu_features->has_armcrypto = (getauxval(AT_HWCAP) & (1L << 3)) != 0; + cpu_features->has_neon_aes = (getauxval(AT_HWCAP) & (1L << 3)) != 0; # elif defined(HAVE_ELF_AUX_INFO) { unsigned long buf; if (elf_aux_info(AT_HWCAP, (void *) &buf, (int) sizeof buf) == 0) { - cpu_features->has_armcrypto = (buf & (1L << 3)) != 0; + cpu_features->has_neon_aes = (buf & (1L << 3)) != 0; } } # endif #elif defined(__arm__) && defined(AT_HWCAP2) # ifdef HAVE_GETAUXVAL - cpu_features->has_armcrypto = (getauxval(AT_HWCAP2) & (1L << 0)) != 0; + cpu_features->has_neon_aes = (getauxval(AT_HWCAP2) & (1L << 0)) != 0; # elif defined(HAVE_ELF_AUX_INFO) { unsigned long buf; if (elf_aux_info(AT_HWCAP2, (void *) &buf, (int) sizeof buf) == 0) { - cpu_features->has_armcrypto = (buf & (1L << 0)) != 0; + cpu_features->has_neon_aes = (buf & (1L << 0)) != 0; } } # endif @@ -293,9 +293,9 @@ aegis_runtime_has_neon(void) } int -aegis_runtime_has_armcrypto(void) +aegis_runtime_has_neon_aes(void) { - return _cpu_features.has_armcrypto; + return _cpu_features.has_neon_aes; } int diff --git a/src/common/cpu.h b/src/common/cpu.h index 395dbbe..fe0555e 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -13,7 +13,7 @@ int aegis_runtime_get_cpu_features(void); int aegis_runtime_has_neon(void); -int aegis_runtime_has_armcrypto(void); +int aegis_runtime_has_neon_aes(void); int aegis_runtime_has_avx(void); From 2be5f4f945f35bf9777011a9e84534bfc4468096 Mon Sep 17 00:00:00 2001 From: George Steed Date: Wed, 21 May 2025 13:33:25 +0100 Subject: [PATCH 213/219] Reorder arguments to vaeseq_u8 to improve AArch64 performance (#21) The register arguments to the AESE instruction are commutative, however the first input register is constrained in that it also names the output register. The constraint on register allocation causes recent LLVM versions to emit a lot of MOV instructions, significantly impacting performance. Swapping the register operands allows the compiler to emit significantly fewer MOV instructions. This change improves performance on Arm infrastructure micro-architectures by 14-36% depending on the micro-architecture, except for the AEGIS-256x4 sub-test which regresses slightly. --- src/aegis128l/aegis128l_neon_aes.c | 2 +- src/aegis128x2/aegis128x2_neon_aes.c | 4 ++-- src/aegis128x4/aegis128x4_neon_aes.c | 8 ++++---- src/aegis256/aegis256_neon_aes.c | 2 +- src/aegis256x2/aegis256x2_neon_aes.c | 4 ++-- src/aegis256x4/aegis256x4_neon_aes.c | 8 ++++---- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/aegis128l/aegis128l_neon_aes.c b/src/aegis128l/aegis128l_neon_aes.c index c5710a4..b4e0cd4 100644 --- a/src/aegis128l/aegis128l_neon_aes.c +++ b/src/aegis128l/aegis128l_neon_aes.c @@ -32,7 +32,7 @@ typedef uint8x16_t aes_block_t; # define AES_BLOCK_LOAD(A) vld1q_u8(A) # define AES_BLOCK_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1)) # define AES_BLOCK_STORE(A, B) vst1q_u8((A), (B)) -# define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B)) +# define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), (A))), (B)) static inline void aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) diff --git a/src/aegis128x2/aegis128x2_neon_aes.c b/src/aegis128x2/aegis128x2_neon_aes.c index 63f2cfd..db07e71 100644 --- a/src/aegis128x2/aegis128x2_neon_aes.c +++ b/src/aegis128x2/aegis128x2_neon_aes.c @@ -64,8 +64,8 @@ AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) static inline aes_block_t AES_ENC(const aes_block_t a, const aes_block_t b) { - return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8((a.b0), vmovq_n_u8(0))), (b.b0)), - veorq_u8(vaesmcq_u8(vaeseq_u8((a.b1), vmovq_n_u8(0))), (b.b1)) }; + return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b0)), b.b0), + veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b1)), b.b1) }; } static inline void diff --git a/src/aegis128x4/aegis128x4_neon_aes.c b/src/aegis128x4/aegis128x4_neon_aes.c index 95c1ae4..d5172b3 100644 --- a/src/aegis128x4/aegis128x4_neon_aes.c +++ b/src/aegis128x4/aegis128x4_neon_aes.c @@ -70,10 +70,10 @@ AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) static inline aes_block_t AES_ENC(const aes_block_t a, const aes_block_t b) { - return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8((a.b0), vmovq_n_u8(0))), (b.b0)), - veorq_u8(vaesmcq_u8(vaeseq_u8((a.b1), vmovq_n_u8(0))), (b.b1)), - veorq_u8(vaesmcq_u8(vaeseq_u8((a.b2), vmovq_n_u8(0))), (b.b2)), - veorq_u8(vaesmcq_u8(vaeseq_u8((a.b3), vmovq_n_u8(0))), (b.b3)) }; + return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b0)), b.b0), + veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b1)), b.b1), + veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b2)), b.b2), + veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b3)), b.b3) }; } static inline void diff --git a/src/aegis256/aegis256_neon_aes.c b/src/aegis256/aegis256_neon_aes.c index 94cc0fd..396608f 100644 --- a/src/aegis256/aegis256_neon_aes.c +++ b/src/aegis256/aegis256_neon_aes.c @@ -32,7 +32,7 @@ typedef uint8x16_t aes_block_t; # define AES_BLOCK_LOAD(A) vld1q_u8(A) # define AES_BLOCK_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1)) # define AES_BLOCK_STORE(A, B) vst1q_u8((A), (B)) -# define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8((A), vmovq_n_u8(0))), (B)) +# define AES_ENC(A, B) veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), (A))), (B)) static inline void aegis256_update(aes_block_t *const state, const aes_block_t d) diff --git a/src/aegis256x2/aegis256x2_neon_aes.c b/src/aegis256x2/aegis256x2_neon_aes.c index d8f5cb0..045e508 100644 --- a/src/aegis256x2/aegis256x2_neon_aes.c +++ b/src/aegis256x2/aegis256x2_neon_aes.c @@ -64,8 +64,8 @@ AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) static inline aes_block_t AES_ENC(const aes_block_t a, const aes_block_t b) { - return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8((a.b0), vmovq_n_u8(0))), (b.b0)), - veorq_u8(vaesmcq_u8(vaeseq_u8((a.b1), vmovq_n_u8(0))), (b.b1)) }; + return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b0)), b.b0), + veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b1)), b.b1) }; } static inline void diff --git a/src/aegis256x4/aegis256x4_neon_aes.c b/src/aegis256x4/aegis256x4_neon_aes.c index c2691e1..47af848 100644 --- a/src/aegis256x4/aegis256x4_neon_aes.c +++ b/src/aegis256x4/aegis256x4_neon_aes.c @@ -70,10 +70,10 @@ AES_BLOCK_STORE(uint8_t *a, const aes_block_t b) static inline aes_block_t AES_ENC(const aes_block_t a, const aes_block_t b) { - return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8((a.b0), vmovq_n_u8(0))), (b.b0)), - veorq_u8(vaesmcq_u8(vaeseq_u8((a.b1), vmovq_n_u8(0))), (b.b1)), - veorq_u8(vaesmcq_u8(vaeseq_u8((a.b2), vmovq_n_u8(0))), (b.b2)), - veorq_u8(vaesmcq_u8(vaeseq_u8((a.b3), vmovq_n_u8(0))), (b.b3)) }; + return (aes_block_t) { veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b0)), b.b0), + veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b1)), b.b1), + veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b2)), b.b2), + veorq_u8(vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), a.b3)), b.b3) }; } static inline void From b9cbd90041649bd1cb57df834af01acf84383202 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 27 May 2025 18:30:40 +0200 Subject: [PATCH 214/219] Update the setup-zig GitHub action to v2 --- .github/workflows/compile.yml | 2 +- .github/workflows/tests.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index b730d07..b9c6e3f 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v4 - name: Install Zig - uses: mlugg/setup-zig@v1 + uses: mlugg/setup-zig@v2 - name: Compilation to multiple targets run: | diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 30e0d5b..709bfe6 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,9 +21,9 @@ jobs: - uses: actions/checkout@v4 - name: Install Zig - uses: mlugg/setup-zig@v1 + uses: mlugg/setup-zig@v2 - name: Unit tests run: | zig build test - zig build test -Drelease \ No newline at end of file + zig build test -Drelease From de81e19eccb3092abb57067e0552317f7f4f72d0 Mon Sep 17 00:00:00 2001 From: George Steed Date: Thu, 1 May 2025 11:20:36 +0100 Subject: [PATCH 215/219] cpu.c: Refactor Arm CPU feature detection In preparation for adding SHA3 feature detection, clean up the existing code to reduce duplication of getauxval and sysctlbyname function calls. --- src/common/cpu.c | 100 +++++++++++++++++++++-------------------------- 1 file changed, 44 insertions(+), 56 deletions(-) diff --git a/src/common/cpu.c b/src/common/cpu.c index 7416425..9052907 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -48,6 +48,42 @@ static CPUFeatures _cpu_features; #define XCR0_ZMM_HI256 0x00000040 #define XCR0_HI16_ZMM 0x00000080 +// Arm hwcaps. +#define AEGIS_ARM_HWCAP_NEON (1L << 12) +#define AEGIS_ARM_HWCAP2_AES (1L << 0) + +// AArch64 hwcaps. +#define AEGIS_AARCH64_HWCAP_ASIMD (1L << 1) +#define AEGIS_AARCH64_HWCAP_AES (1L << 3) + +#if defined(__APPLE__) && defined(CPU_TYPE_ARM64) && defined(CPU_SUBTYPE_ARM64E) +// sysctlbyname() parameter documentation for instruction set characteristics: +// https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics +static inline int _have_feature(const char *feature) { + int64_t feature_present = 0; + size_t size = sizeof(feature_present); + if (sysctlbyname(feature, &feature_present, &size, NULL, 0) != 0) { + return 0; + } + return feature_present; +} + +#elif (defined(__arm__) || defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) +static inline int _have_hwcap(int hwcap_id, int bit) +{ + unsigned long buf = 0; +# ifdef HAVE_GETAUXVAL + buf = getauxval(hwcap_id); +# elif defined(HAVE_ELF_AUX_INFO) + unsigned long buf; + if (elf_aux_info(hwcap_id, (void *) &buf, (int) sizeof buf) != 0) { + return 0; + } +# endif + return (buf & bit) != 0; +} +#endif + static int _runtime_arm_cpu_features(CPUFeatures *const cpu_features) { @@ -60,76 +96,28 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) #elif defined(HAVE_ANDROID_GETCPUFEATURES) && defined(ANDROID_CPU_ARM_FEATURE_NEON) cpu_features->has_neon = (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0x0; #elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) -# ifdef HAVE_GETAUXVAL - cpu_features->has_neon = (getauxval(AT_HWCAP) & (1L << 1)) != 0; -# elif defined(HAVE_ELF_AUX_INFO) - { - unsigned long buf; - if (elf_aux_info(AT_HWCAP, (void *) &buf, (int) sizeof buf) == 0) { - cpu_features->has_neon = (buf & (1L << 1)) != 0; - } - } -# endif + cpu_features->has_neon = _have_hwcap(AT_HWCAP, AEGIS_AARCH64_HWCAP_ASIMD); #elif defined(__arm__) && defined(AT_HWCAP) -# ifdef HAVE_GETAUXVAL - cpu_features->has_neon = (getauxval(AT_HWCAP) & (1L << 12)) != 0; -# elif defined(HAVE_ELF_AUX_INFO) - { - unsigned long buf; - if (elf_aux_info(AT_HWCAP, (void *) &buf, (int) sizeof buf) == 0) { - cpu_features->has_neon = (buf & (1L << 12)) != 0; - } - } -# endif + cpu_features->has_neon = _have_hwcap(AT_HWCAP, AEGIS_ARM_HWCAP_NEON); #endif if (cpu_features->has_neon == 0) { return 0; } -#if __ARM_FEATURE_CRYPTO +#if __ARM_FEATURE_CRYPTO || __ARM_FEATURE_AES cpu_features->has_neon_aes = 1; #elif defined(_M_ARM64) - cpu_features->has_neon_aes = - 1; /* assuming all CPUs supported by ARM Windows have the crypto extensions */ + // Assuming all CPUs supported by Arm Windows have the crypto extensions. + cpu_features->has_neon_aes = 1; #elif defined(__APPLE__) && defined(CPU_TYPE_ARM64) && defined(CPU_SUBTYPE_ARM64E) - { - cpu_type_t cpu_type; - cpu_subtype_t cpu_subtype; - size_t cpu_type_len = sizeof cpu_type; - size_t cpu_subtype_len = sizeof cpu_subtype; - - if (sysctlbyname("hw.cputype", &cpu_type, &cpu_type_len, NULL, 0) == 0 && - cpu_type == CPU_TYPE_ARM64 && - sysctlbyname("hw.cpusubtype", &cpu_subtype, &cpu_subtype_len, NULL, 0) == 0 && - (cpu_subtype == CPU_SUBTYPE_ARM64E || cpu_subtype == CPU_SUBTYPE_ARM64_V8)) { - cpu_features->has_neon_aes = 1; - } - } + cpu_features->has_neon_aes = _have_feature("hw.optional.arm.FEAT_AES"); #elif defined(HAVE_ANDROID_GETCPUFEATURES) && defined(ANDROID_CPU_ARM_FEATURE_AES) cpu_features->has_neon_aes = (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_AES) != 0x0; #elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) -# ifdef HAVE_GETAUXVAL - cpu_features->has_neon_aes = (getauxval(AT_HWCAP) & (1L << 3)) != 0; -# elif defined(HAVE_ELF_AUX_INFO) - { - unsigned long buf; - if (elf_aux_info(AT_HWCAP, (void *) &buf, (int) sizeof buf) == 0) { - cpu_features->has_neon_aes = (buf & (1L << 3)) != 0; - } - } -# endif + cpu_features->has_neon_aes = _have_hwcap(AT_HWCAP, AEGIS_AARCH64_HWCAP_AES); #elif defined(__arm__) && defined(AT_HWCAP2) -# ifdef HAVE_GETAUXVAL - cpu_features->has_neon_aes = (getauxval(AT_HWCAP2) & (1L << 0)) != 0; -# elif defined(HAVE_ELF_AUX_INFO) - { - unsigned long buf; - if (elf_aux_info(AT_HWCAP2, (void *) &buf, (int) sizeof buf) == 0) { - cpu_features->has_neon_aes = (buf & (1L << 0)) != 0; - } - } -# endif + cpu_features->has_neon_aes = _have_hwcap(AT_HWCAP2, AEGIS_ARM_HWCAP2_AES); #endif return 0; From 6a3f914e8c082c7388535bc9d7d09c40174aa756 Mon Sep 17 00:00:00 2001 From: George Steed Date: Mon, 5 May 2025 22:14:22 +0100 Subject: [PATCH 216/219] cpu.c: Add feature detection for AArch64 Neon FEAT_SHA3 This extension provides support for the BCAX ("bit-clear and xor") and EOR3 ("exclusive-or 3-way") instructions. This commit only adds detection logic for Apple Silicon and getauxval-based platforms. At the time of writing Windows does not provide a mechanism for detecting this feature. Android support is covered by the getauxval version, since support for this feature was only added after Android switched from android_getCpuFeatures to getauxval. --- src/common/cpu.c | 24 ++++++++++++++++++++++++ src/common/cpu.h | 2 ++ 2 files changed, 26 insertions(+) diff --git a/src/common/cpu.c b/src/common/cpu.c index 9052907..f5c8500 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -23,6 +23,7 @@ typedef struct CPUFeatures_ { int initialized; int has_neon; int has_neon_aes; + int has_neon_sha3; int has_avx; int has_avx2; int has_avx512f; @@ -48,6 +49,9 @@ static CPUFeatures _cpu_features; #define XCR0_ZMM_HI256 0x00000040 #define XCR0_HI16_ZMM 0x00000080 +// Define hwcap values ourselves: building with an old auxv header where these +// hwcap values are not defined should not prevent features from being enabled. + // Arm hwcaps. #define AEGIS_ARM_HWCAP_NEON (1L << 12) #define AEGIS_ARM_HWCAP2_AES (1L << 0) @@ -55,6 +59,7 @@ static CPUFeatures _cpu_features; // AArch64 hwcaps. #define AEGIS_AARCH64_HWCAP_ASIMD (1L << 1) #define AEGIS_AARCH64_HWCAP_AES (1L << 3) +#define AEGIS_AARCH64_HWCAP_SHA3 (1L << 17) #if defined(__APPLE__) && defined(CPU_TYPE_ARM64) && defined(CPU_SUBTYPE_ARM64E) // sysctlbyname() parameter documentation for instruction set characteristics: @@ -120,6 +125,19 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) cpu_features->has_neon_aes = _have_hwcap(AT_HWCAP2, AEGIS_ARM_HWCAP2_AES); #endif + // The FEAT_SHA3 implementation assumes that FEAT_AES is also present. + if (cpu_features->has_neon_aes == 0) { + return 0; + } + +#if __ARM_FEATURE_SHA3 + cpu_features->has_neon_sha3 = 1; +#elif defined(__APPLE__) && defined(CPU_TYPE_ARM64) && defined(CPU_SUBTYPE_ARM64E) + cpu_features->has_neon_sha3 = _have_feature("hw.optional.arm.FEAT_SHA3"); +#elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) + cpu_features->has_neon_sha3 = _have_hwcap(AT_HWCAP, AEGIS_AARCH64_HWCAP_SHA3); +#endif + return 0; } @@ -286,6 +304,12 @@ aegis_runtime_has_neon_aes(void) return _cpu_features.has_neon_aes; } +int +aegis_runtime_has_neon_sha3(void) +{ + return _cpu_features.has_neon_sha3; +} + int aegis_runtime_has_avx(void) { diff --git a/src/common/cpu.h b/src/common/cpu.h index fe0555e..62b9a20 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -15,6 +15,8 @@ int aegis_runtime_has_neon(void); int aegis_runtime_has_neon_aes(void); +int aegis_runtime_has_neon_sha3(void); + int aegis_runtime_has_avx(void); int aegis_runtime_has_avx2(void); From 3fd2d43c520f2521f84edfc26bb8c4a6f69016f8 Mon Sep 17 00:00:00 2001 From: George Steed Date: Sat, 17 May 2025 20:03:29 +0100 Subject: [PATCH 217/219] cpu.c: Add feature detection for AArch64 FEAT_SVE_AES The FEAT_SVE_AES extension provides support for the Arm Scalable Vector Extension (SVE) variants of the existing Neon AESE/AESMC instructions. Additionally, the FEAT_SVE2 extension provides support for SVE variants of the EOR3 and BCAX instructions, for which Neon support is present under the FEAT_SHA3 extension previously added. FEAT_SVE_AES is an optional extension introduced as part of the Arm v9.0-A architecture. If FEAT_SVE_AES is present then FEAT_SVE2 must also be present, so it is sufficient to only check for the presence of FEAT_SVE_AES. This commit adds detection logic for Windows, Apple Silicon, and getauxval-based platforms. Since FEAT_SVE_AES also implies that FEAT_SHA3 is present, additionally amend the FEAT_SHA3 detection to use this in lieu of a more precise way of detecting support on Windows. --- src/common/cpu.c | 31 +++++++++++++++++++++++++++++++ src/common/cpu.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/src/common/cpu.c b/src/common/cpu.c index f5c8500..dd24424 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -24,6 +24,7 @@ typedef struct CPUFeatures_ { int has_neon; int has_neon_aes; int has_neon_sha3; + int has_sve2_aes; int has_avx; int has_avx2; int has_avx512f; @@ -60,6 +61,7 @@ static CPUFeatures _cpu_features; #define AEGIS_AARCH64_HWCAP_ASIMD (1L << 1) #define AEGIS_AARCH64_HWCAP_AES (1L << 3) #define AEGIS_AARCH64_HWCAP_SHA3 (1L << 17) +#define AEGIS_AARCH64_HWCAP2_SVEAES (1L << 2) #if defined(__APPLE__) && defined(CPU_TYPE_ARM64) && defined(CPU_SUBTYPE_ARM64E) // sysctlbyname() parameter documentation for instruction set characteristics: @@ -130,14 +132,37 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) return 0; } + // At the time of writing Windows does not provide a mechanism for + // detecting FEAT_SHA3, however FEAT_SHA3 is mandatory if FEAT_SVE_AES is + // also implemented, so test that instead. #if __ARM_FEATURE_SHA3 cpu_features->has_neon_sha3 = 1; +#elif defined(_M_ARM64) && defined(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE) + cpu_features->has_neon_sha3 = + IsProcessorFeaturePresent(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE); #elif defined(__APPLE__) && defined(CPU_TYPE_ARM64) && defined(CPU_SUBTYPE_ARM64E) cpu_features->has_neon_sha3 = _have_feature("hw.optional.arm.FEAT_SHA3"); #elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) cpu_features->has_neon_sha3 = _have_hwcap(AT_HWCAP, AEGIS_AARCH64_HWCAP_SHA3); #endif + // The FEAT_SVE_AES implementation assumes that FEAT_AES and FEAT_SHA3 are + // also present. + if (cpu_features->has_neon_sha3 == 0) { + return 0; + } + + // At the time of writing Apple Silicon platforms do not provide a + // mechanism for detecting FEAT_SVE_AES. +#if __ARM_FEATURE_SVE2_AES + cpu_features->has_sve2_aes = 1; +#elif defined(_M_ARM64) && defined(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE) + cpu_features->has_sve2_aes = + IsProcessorFeaturePresent(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE); +#elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) + cpu_features->has_sve2_aes = _have_hwcap(AT_HWCAP2, AEGIS_AARCH64_HWCAP2_SVEAES); +#endif + return 0; } @@ -310,6 +335,12 @@ aegis_runtime_has_neon_sha3(void) return _cpu_features.has_neon_sha3; } +int +aegis_runtime_has_sve2_aes(void) +{ + return _cpu_features.has_sve2_aes; +} + int aegis_runtime_has_avx(void) { diff --git a/src/common/cpu.h b/src/common/cpu.h index 62b9a20..bbaf2db 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -17,6 +17,8 @@ int aegis_runtime_has_neon_aes(void); int aegis_runtime_has_neon_sha3(void); +int aegis_runtime_has_sve2_aes(void); + int aegis_runtime_has_avx(void); int aegis_runtime_has_avx2(void); From 2859a320ef17697a805985944b7c2ef6714901d8 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Tue, 27 May 2025 22:38:37 +0200 Subject: [PATCH 218/219] Format --- src/common/cpu.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/common/cpu.c b/src/common/cpu.c index dd24424..450c223 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -58,25 +58,28 @@ static CPUFeatures _cpu_features; #define AEGIS_ARM_HWCAP2_AES (1L << 0) // AArch64 hwcaps. -#define AEGIS_AARCH64_HWCAP_ASIMD (1L << 1) -#define AEGIS_AARCH64_HWCAP_AES (1L << 3) -#define AEGIS_AARCH64_HWCAP_SHA3 (1L << 17) +#define AEGIS_AARCH64_HWCAP_ASIMD (1L << 1) +#define AEGIS_AARCH64_HWCAP_AES (1L << 3) +#define AEGIS_AARCH64_HWCAP_SHA3 (1L << 17) #define AEGIS_AARCH64_HWCAP2_SVEAES (1L << 2) #if defined(__APPLE__) && defined(CPU_TYPE_ARM64) && defined(CPU_SUBTYPE_ARM64E) // sysctlbyname() parameter documentation for instruction set characteristics: // https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics -static inline int _have_feature(const char *feature) { - int64_t feature_present = 0; - size_t size = sizeof(feature_present); - if (sysctlbyname(feature, &feature_present, &size, NULL, 0) != 0) { - return 0; - } - return feature_present; +static inline int +_have_feature(const char *feature) +{ + int64_t feature_present = 0; + size_t size = sizeof(feature_present); + if (sysctlbyname(feature, &feature_present, &size, NULL, 0) != 0) { + return 0; + } + return feature_present; } #elif (defined(__arm__) || defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) -static inline int _have_hwcap(int hwcap_id, int bit) +static inline int +_have_hwcap(int hwcap_id, int bit) { unsigned long buf = 0; # ifdef HAVE_GETAUXVAL @@ -138,8 +141,7 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) #if __ARM_FEATURE_SHA3 cpu_features->has_neon_sha3 = 1; #elif defined(_M_ARM64) && defined(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE) - cpu_features->has_neon_sha3 = - IsProcessorFeaturePresent(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE); + cpu_features->has_neon_sha3 = IsProcessorFeaturePresent(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE); #elif defined(__APPLE__) && defined(CPU_TYPE_ARM64) && defined(CPU_SUBTYPE_ARM64E) cpu_features->has_neon_sha3 = _have_feature("hw.optional.arm.FEAT_SHA3"); #elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) @@ -157,8 +159,7 @@ _runtime_arm_cpu_features(CPUFeatures *const cpu_features) #if __ARM_FEATURE_SVE2_AES cpu_features->has_sve2_aes = 1; #elif defined(_M_ARM64) && defined(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE) - cpu_features->has_sve2_aes = - IsProcessorFeaturePresent(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE); + cpu_features->has_sve2_aes = IsProcessorFeaturePresent(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE); #elif (defined(__aarch64__) || defined(_M_ARM64)) && defined(AT_HWCAP) cpu_features->has_sve2_aes = _have_hwcap(AT_HWCAP2, AEGIS_AARCH64_HWCAP2_SVEAES); #endif From c087740d223e113cf91f16b3aa7d31a2a000df0f Mon Sep 17 00:00:00 2001 From: George Steed Date: Mon, 5 May 2025 22:31:41 +0100 Subject: [PATCH 219/219] Add AArch64 FEAT_SHA3 implementation of AEGIS128L Add an implementation of AEGIS128L using the Neon FEAT_SHA3 extension. This allows use of the EOR3 and BCAX instructions. Running the benchmarks on Arm Neoverse micro-architectures with LLVM 20, this gives the following changes (higher is better, 100% = no change): Neoverse V1 Neoverse V2 Neoverse N2 AEGIS-128L 112.62% 114.91% 116.28% AEGIS-128L MAC 81.10% 80.32% 93.89% The EOR3 instruction as present in the above cores has worse throughput than the standard EOR instruction, with only one EOR3 instruction being issued per cycle. This is compared to four EOR instructions per cycle on Neoverse V1 and Neoverse V2, and two per cycle on Neoverse N2. This difference in performance observation can therefore be explained as such: * For AEGIS-128L, the presence of a small number of EOR3 instructions reduces the overall vector instruction count and therefore improves performance. The reduced throughput of EOR3 instructions is not an issue here since the limiting factor is the number of other instructions executing on the remaining vector units. * For AEGIS-128L MAC, there are more EOR3 instructions automatically emitted by the compiler combining EOR intrinsics, leading to the limited throughput of these instructions becoming more of an issue and an overall slowdown in performance. The imbalance between EOR and EOR3 instruction throughputs is resolved from Neoverse V3 and Neoverse N3, so it is expected that the MAC performance inversion is limited to this current generation of micro-architectures. For comparison, when running on client cores which do not have the EOR3 throughput limitation, we instead observe the following improvements: Cortex-A520 Cortex-A720 Cortex-X4 AEGIS-128L 121.57% 117.18% 116.32% AEGIS-128L MAC 118.90% 112.52% 112.01% --- build.zig | 2 +- src/aegis128l/aegis128l.c | 5 ++ src/aegis128l/aegis128l_neon_sha3.c | 83 +++++++++++++++++++++++++++++ src/aegis128l/aegis128l_neon_sha3.h | 9 ++++ 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 src/aegis128l/aegis128l_neon_sha3.c create mode 100644 src/aegis128l/aegis128l_neon_sha3.h diff --git a/build.zig b/build.zig index dbb913e..a18d4fb 100644 --- a/build.zig +++ b/build.zig @@ -32,6 +32,7 @@ pub fn build(b: *std.Build) void { "src/aegis128l/aegis128l_aesni.c", "src/aegis128l/aegis128l_altivec.c", "src/aegis128l/aegis128l_neon_aes.c", + "src/aegis128l/aegis128l_neon_sha3.c", "src/aegis128l/aegis128l_soft.c", "src/aegis128l/aegis128l.c", @@ -47,7 +48,6 @@ pub fn build(b: *std.Build) void { "src/aegis128x4/aegis128x4_avx2.c", "src/aegis128x4/aegis128x4_avx512.c", "src/aegis128x4/aegis128x4_neon_aes.c", - "src/aegis128x4/aegis128x4_neon_aes.c", "src/aegis128x4/aegis128x4_soft.c", "src/aegis128x4/aegis128x4.c", diff --git a/src/aegis128l/aegis128l.c b/src/aegis128l/aegis128l.c index 9d46dff..d301030 100644 --- a/src/aegis128l/aegis128l.c +++ b/src/aegis128l/aegis128l.c @@ -7,6 +7,7 @@ #include "aegis128l_aesni.h" #include "aegis128l_altivec.h" #include "aegis128l_neon_aes.h" +#include "aegis128l_neon_sha3.h" #ifndef HAS_HW_AES # include "aegis128l_soft.h" @@ -232,6 +233,10 @@ aegis128l_pick_best_implementation(void) #endif #if defined(__aarch64__) || defined(_M_ARM64) + if (aegis_runtime_has_neon_sha3()) { + implementation = &aegis128l_neon_sha3_implementation; + return 0; + } if (aegis_runtime_has_neon_aes()) { implementation = &aegis128l_neon_aes_implementation; return 0; diff --git a/src/aegis128l/aegis128l_neon_sha3.c b/src/aegis128l/aegis128l_neon_sha3.c new file mode 100644 index 0000000..b2b4cee --- /dev/null +++ b/src/aegis128l/aegis128l_neon_sha3.c @@ -0,0 +1,83 @@ +#if defined(__aarch64__) || defined(_M_ARM64) + +# include +# include + +# include "../common/common.h" +# include "aegis128l.h" +# include "aegis128l_neon_sha3.h" + +# ifndef __ARM_FEATURE_CRYPTO +# define __ARM_FEATURE_CRYPTO 1 +# endif +# ifndef __ARM_FEATURE_AES +# define __ARM_FEATURE_AES 1 +# endif +# ifndef __ARM_FEATURE_SHA3 +# define __ARM_FEATURE_SHA3 1 +# endif + +# include + +# ifdef __clang__ +# pragma clang attribute push(__attribute__((target("neon,crypto,aes,sha3"))), \ + apply_to = function) +# elif defined(__GNUC__) +# pragma GCC target("+simd+crypto+sha3") +# endif + +# define AES_BLOCK_LENGTH 16 + +typedef uint8x16_t aes_block_t; + +# define AES_BLOCK_XOR(A, B) veorq_u8((A), (B)) +# define AES_BLOCK_XOR3(A, B, C) veor3q_u8((A), (B), (C)) +# define AES_BLOCK_AND(A, B) vandq_u8((A), (B)) +# define AES_BLOCK_LOAD(A) vld1q_u8(A) +# define AES_BLOCK_LOAD_64x2(A, B) vreinterpretq_u8_u64(vsetq_lane_u64((A), vmovq_n_u64(B), 1)) +# define AES_BLOCK_STORE(A, B) vst1q_u8((A), (B)) +# define AES_ENC0(A) vaesmcq_u8(vaeseq_u8(vmovq_n_u8(0), (A))) +# define AES_ENC(A, B) AES_BLOCK_XOR(AES_ENC0(A), (B)) + +static inline void +aegis128l_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2) +{ + aes_block_t tmp; + + tmp = state[7]; + state[7] = AES_ENC(state[6], state[7]); + state[6] = AES_ENC(state[5], state[6]); + state[5] = AES_ENC(state[4], state[5]); + state[4] = AES_BLOCK_XOR3(state[4], AES_ENC0(state[3]), d2); + state[3] = AES_ENC(state[2], state[3]); + state[2] = AES_ENC(state[1], state[2]); + state[1] = AES_ENC(state[0], state[1]); + state[0] = AES_BLOCK_XOR3(state[0], AES_ENC0(tmp), d1); +} + +# include "aegis128l_common.h" + +struct aegis128l_implementation aegis128l_neon_sha3_implementation = { + .encrypt_detached = encrypt_detached, + .decrypt_detached = decrypt_detached, + .encrypt_unauthenticated = encrypt_unauthenticated, + .decrypt_unauthenticated = decrypt_unauthenticated, + .stream = stream, + .state_init = state_init, + .state_encrypt_update = state_encrypt_update, + .state_encrypt_detached_final = state_encrypt_detached_final, + .state_encrypt_final = state_encrypt_final, + .state_decrypt_detached_update = state_decrypt_detached_update, + .state_decrypt_detached_final = state_decrypt_detached_final, + .state_mac_init = state_mac_init, + .state_mac_update = state_mac_update, + .state_mac_final = state_mac_final, + .state_mac_reset = state_mac_reset, + .state_mac_clone = state_mac_clone, +}; + +# ifdef __clang__ +# pragma clang attribute pop +# endif + +#endif diff --git a/src/aegis128l/aegis128l_neon_sha3.h b/src/aegis128l/aegis128l_neon_sha3.h new file mode 100644 index 0000000..f9e5ce8 --- /dev/null +++ b/src/aegis128l/aegis128l_neon_sha3.h @@ -0,0 +1,9 @@ +#ifndef aegis128l_neon_sha3_H +#define aegis128l_neon_sha3_H + +#include "../common/common.h" +#include "implementations.h" + +extern struct aegis128l_implementation aegis128l_neon_sha3_implementation; + +#endif

    ae)b!fxLSZvEy!S7YqE5)Bdvcc3E8ZyH^ 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 Na>YF376F!U*(<6hcJcrK diff --git a/src/test/wycheproof/aegis128_l.json.zst b/src/test/wycheproof/aegis128_l.json.zst new file mode 100644 index 0000000000000000000000000000000000000000..1d2d5a212f7b585f9e23bf2cc6e2edba3c2acd60 GIT binary patch literal 5613 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 H`}^$XV^Osk literal 0 HcmV?d00001 diff --git a/src/test/wycheproof/aegis128_l_256.json.zst b/src/test/wycheproof/aegis128_l_256.json.zst new file mode 100644 index 0000000000000000000000000000000000000000..3e5cf70b4343d3fe1d1fc4acad03914fc307437b GIT binary patch literal 6973 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 PU+b*L^i56yzpk}nKEras literal 0 HcmV?d00001 diff --git a/src/test/wycheproof/aegis256.json.zst b/src/test/wycheproof/aegis256.json.zst new file mode 100644 index 0000000000000000000000000000000000000000..e84abb1582f88ea1d8c01d9d0db1a354fcb90828 GIT binary patch literal 6329 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 vrC?E%jExlyoPbRe;@HIL8s`pvNDE0 literal 0 HcmV?d00001 diff --git a/src/test/wycheproof/aegis256_256.json.zst b/src/test/wycheproof/aegis256_256.json.zst new file mode 100644 index 0000000000000000000000000000000000000000..086adce63ab3c239cd7e196e9aea9acee9c563f7 GIT binary patch literal 7656 zcmV5w0Y=lYxc;0H6To z0YL_z1)v2tWxC+(px*424|OiHrLSDhZ)m1B@lH~h_6BkN<)<;qm}q#&m#l2I*HsU> zohI^>B|AcJpOw@KNuRUN#bU!!Z1|ZA`aM}a?7yl-v?iaatvibP4CEgEms~iG3Ev=5 zXTd9)Bb~UmW27HHZ8eLTKN&Ma!f77`+1E%HeH&fV58C&wOv_=^LPlC~CoA$tuDt$v zj&ZuuKU~I%jmDzRFOTb_eM^lmLq<84MJ#^fwMWDLv!-`c`*09lHLmpL#?e~M@#Aqw zlDpqeBg@M^=5lm{2G)2>Vg&npYX_-f_k;wSYq(@>o8Haty=7bJBt3GqlO64Gs`wYJ z?<&OWlJv9^f@7D)D1{X3=6`1!o6oX1MPGw?jVP**Ngb*)D%!oM<=xYmk@S}EPvW3V)IVO3>(eRhbl2F`GjjkY|FZm`I1W78-63ZLV6bI zdeg^~;cWG!g9#6H`71lhQE8LY&#WpoEXyyG;-jFE*I`-YIi=aChZPw@sBCgx_2ZCL zCd4hR_$rV7*`94m@{Tt}l}x&ya4h05qIt!3+-I2_ja9{{2yO5AZdfTh9hyR>=>3QW z>2+e(qX=ntCS{1!XIPE*QN8W&j(bfz+=tj0&Ro%>GmX(n~>s4lc zEHfhOtrgEFG7ge`B1=f3rE?jUWt1+I?vI6dvoyxaC|`~o?j(Ob!75rDY@?%yDp#>P zJ7S;3o|Gs3tq(I9^-aPex;8#$%XC>|HxVnTHXLJQm$_CiBurc?vLt72wS6#$u2+rR zY#Fs@e%A0RADYdyefFNL=^EQI$n7il{%D62QfpOcFl{NyH<0wkAdXrZ|3mwKJd1eP z6&yUVbjXQVnJaE=zSd)Al)*}^W9oS`zd6X}KWw)9kI0}~4zO2doJq8hN6Q)<)^~L{E-aGQxI9`pJq_3!V zTu_Pp@ZcUfEYrCA%lHYwLN;X3>w&aAO1JkzT7;gEVY9*?H|WTX56yC0+Ob$LO-nf= zM7HEX^}Ji^i2?!=}Veuivh;qV01bcWA7r()R1%V3^B}BZ3 z=5XOb#0L%+7Qcan#b1=LxEK+Fgj+`J5g{~qU;zOL|A7D&1p>SX6c$KaJc$4n764QP-1Dnt zX@oUb zUp39{6VblCBHcr{*xrNsO!^94erXMIQh3*@Wz1k@9kbq?!_{d*n}X;&_W5|jr^skH zPW2M~AA0!cWWD^JR||dpQI|35iSd1q%k2|pCYL22mmOExsdL?k7b8DhEemp)em$X) z_q{5-cp}2Lggo&`Z0$vQ@=_#OvXW?~n8>QA*M^tYmFvbEV^c>W7ZG9F%Wl_DZ!TbByX2ZozAt zQDSR$CI4~Y*CK!J_rO6Ev-AvRT50na4MhCsEQ5^R50Y-Lq028`rcb#`5?-H^Gjk4? zq3uFFk~!q9xFc!#V(n{tGU1k%C68H>%5q#b5|`YX{<{0Ue!X{gr_GJsksEx-jlN5T z?7wOhZ6$_v*wcJyBlF0pe}M2~n(>7sQ6Gn;Y`EzVxfdp!YQ2SitoWLF?9?-9@eL*?x7byhVCy~S*$wZ*Dnd)u zVwO`hhh+|X&vB2X&~8=_?=>NwL#jPX)Spaq4%UokM^?Y>HyT#jg$8Z0Kd-Q9Xbhzt zt#ZxP{!NvLIoK3$JmVVo4!Mo-o|M@-Mv#QR2<+ zqrP00Pga-4s?7fJm!t?8#B#Xec`2etl#E!1WMPDBTj*D)i>FFlVkLT*d0M!DJa-b^}nkF1uMY4$16vE-CK35$2nJRvqMd!(!l z8HIn%Z_<0JpZOb~XM0L#`LzYqrSK`W2ONso7$f1Jg<&y=gyQF1xIyy0EJ7er_pTb3=7Ex)~*p$#|(zh`A6XNlFhyU$^Q%t@T1xNXhowTmTpcubk$vNqWAsCTp2y2kNX`tgKBha|1fcy3KH zX8dwL)zXVe(aMJx?oi`wQL)mJ4)Qw4p;o2O7ArXN%ca^9uAV~LS;)iq?aeq!v0;Ay zjivePmO&bqtNx0OPNN$8c1^7Eg@tHx0b9Ol`+_deN+?anQJe`Ygi`doapYS zZJAEdTn+!y-rG|o-qQ4#zq|D_WfZ#N<~X-$wGZ4puGC24rNgZ^P>GM?MeoV4 zwBO8Rd}1=?wtFc{TyglQD5ZO`VcdhUh!W4SNxRNx`$Eufnb|Abv1swe*d;i1=jWuR zP4Z`ydY>uHRbC%&NO^L^i2NX9xMtFmcZLu`U=6JuX^jJufyey?6>>Q#bOEPcCA>E>>v1)qFqJybLpJaZsT5^z& zb3*i22CosWY2SI#xE)PsDBke7oPtHBgG{WH6mKD_gN>0G)mypm*dG^OuTqWbi*`e1 zM-&I+NRnuNIMkmM{O3>hK}s>xESqFJ{r8y?nc@47LNiDq#LEsI1m{Z;otzhYE+nnq z3k^{Y;#0==^jo`YGF9j!6{l*r?dA#{c@M5ZY;wjLAro!fq{icszFld>Hv_LJQ~#an9wdv4fmr zFllKi63kE5#H%JmYKPqxp)orWBmeDOAxpHSl+yBaE<|_~BR0rXe$cHwvB6YION}kr zqeG*#;T6dt)2mHNxnY)tcbsvS?=V_TvE5H0quVo;Y5(XKOPNMT)E?EPkiFgXIwZd> zzmMlvSEkA`A>BfVW*@Ov!!o%|);P5;y9WBRqnB-B8Rz+ZOQVdmv7IWb-Ycymf2%TK z_hVv5=cM)OUNkpRYY8hEyQfy1c(0N9He%t=5+dn+eFewxa+@67n&G-xS$R{#q(-tZ ziyv{Z4L&21(kr7@W%ic!R}t%pn3M8136F9N_K{|;c(q9-gSe1CO)J->8ds{J1*Z@!%8sPU&X?lrovmyB9gcIpn$kXQi>RBb&Xx}8 zwOw^8wTpf`ZeK^*Ubyyp_}b_if@4Jah%#~Q@KRWXW0YPWgvY0kCWGFq8;z8=F{DHs z+r*kt{6?izsnJPD8OLn}?|G4oLb7Ft{*vBi6%)d<%s$*|=W)f9)TXYgds3p^BH>&7 z;yM)936+j5m8W9zV;k*85`3!nETy(cLw4&1?-?s?|VMaR$?wDH?hZ%0n|6+O$~ zW-?!;Jg(&&S`P1(8cFN8Nsf$tDeFD?M`X;_D5Cx8r5qV0c<4I7dHS zytqzNR~JIG8L^Ngsrq9=oNEwodE{eG!CPJZugofh&=5k%ellm1>r&Yx9Sy=lMn z#^}LSWc;lw!wD(Y(I88DH$%g53X?2l^r#mbqVlXc{iHT_@|Sb_Cr8;Ulxh0o-s)Hu zsoId9zOd;f8J3Jxs;872W4PO?TvpK~=3>-koR#Fi*{I=drxX1(tmEfFMeR~}%3x#9 zsKNJHj;6}BR9STWKdI#M8tce#@1ayhj)zAbojfOX(zOX**+e4T#rQ;6r`A8m?|tm7 zsZtp#q(oz=thVJd##YEl*f~7u3d@trV(c3-v*QSJla?zKJaV!DSJl_CdFg13?VZ%{q9bCxnq#gLB5~!C+acGnu?>5xO^K?{o+i|kn5tO zM~$P@71^4al2PNR3ReXy0AR4N05DZndaGnss?KsfaTJm{-xXmSJ*-NJXf&~#jy0xZ z5$fp9@cQ!3N~!3>=u%tJc8@IY*(;St)eucDpOxt*dB{X`D9t#({&AsK;$wTSro?ES zI{nKz3y<**4W{-|GDh{Q!JJ$gq`Y-9k&GhD?8Mq}V|s;2srINERCMTk8;Nk4I+D~& zvPsaEOuv{`A^Rw!tt5}`CQdS`y>CWHI-gN~jZ%Y$dD?RN?=;CBm1y^^OzJaicnqsE z+U=~hu_K2pQD0`XBkMw}tK|5ZfnB_~$A9wZeeU0-8Y{eC68rrV@pqKfVf9Yac8LzZ)l}T4E%G5JO(u!jej%$?)gd*WSd~zJ?LO&2UQ)V>BMHgv?=s!2W8*w2 zMz7RmT67Q|Nu`BsXVE6HAxwmol#C}rd~IpeI1wRCC|zqy8M98!@!B6wb>g=j?@ie2 zm7BOZ=r^>M_NQ{IcdbaWk7gbH?kTd{(?{gvxa35Lwgz2ZDaSs~p7i8o+Ei=HJ4i8E zy`!0txOG)rXk09Zb$a=mf6Av9>no)Y9;1GXXGwaDk%c5Fbi<~{Y>i<uMwot+6w7wWf!V8d4^6cgl;6{hc`~2NUloN=4_mbn1jyF_K&RS-ayyjUEJR zP+=TD*ILq~vp=VP6xB{C#N?-1o1*`A-w2!IF;M#vJUXCX?+Pz#2ym4oTwH!4P7nO{Vyz;|=bL8~U#)1R~1W8)IDc2MoRf!grZTH^A!o97_+9rgC z_6AdX@gazG^XJq-%anONy*7-xoEKon0SA=IVnG+#81kg2P2$c%byo zXVNV_KTVP~Wi)Z#frjHoVcIfrA{w_mO$r&uBOD}?RMvwBCa(bmZ*YqX4_wAZ4*sYi zHhzRGe~>CY(t4zlA9J@!^H^#Osh<>jd)6VkhE}TX2l3Mq)pSQs>Aa!D%dKI0vyQ2) zLO9c8rSZy8EJsZ&c}sq1_6)2^@>z=bm}^qY+3LMk+Fq&4T58LvcXA!V^XZ&eqbS?| zvREb)ox)rQsmW;6U=ET%Da94I#gt-UYwe|ucKFwrKvVq@KDdbrUl@0pg?QF7J`s-_jO>~X54 zT+M&a40_U5x%H$G_HZ2J#(JTy!a_cfV3+4U(~cIM)qbPvf7FHNML#H~en3i#qgp&>|s| zO-)RFT$pmbi}SWC@>?{`8{5lij^lbUWS;BD~{4UOcl2bE-JT$jxDROx3`zg z;qT(US*Kgb_{YEcV#ABDYCJ(FcUw+oXgVho6|6t?pj&?bh&|Di<4AF zlXun@Yn$Hif=YwWKdyObIj1D2Q%*~IvsKwnU7yu1qy}TTR zSCvNWr)TsabUjGN1`Q2K2{HK;JfdRMK}L?`$yK5SAJ2V;G!8BiDwIrb)PzG1%kp#G zk!|O)%>(mFXDW*Vf~BZJ@mxe1Ll7Z^5JCim5Mmrj?m|NZp&$w)T6Lxaf>0E~KnQ{$ z1Pnp~6@m~T1dk9P2!Vni5J^&kkxDyu+#Zjp@f(VH`~tVTqZ-TCoL05_}nK7fe}j%iY!2M97vh-Ly_g+ z_}iNuFA(|q-pfG(f-Wwrb8>8Z1W~bdZiCniqHpF){TDf8m@QmX9G@IKM z0i5BjZTy_eV7Rx*WpL3Nd!%AKaM^K?GQd`ksbYBr5}P-mrxgmo?VA8z035poz$X<0 zuy6h%JTV)9cpO4GrFa1&2F^!2sK3Wz58PsoXI~I8!I;{>ePf*Z$B=4dv@-Y1ev;4b zjh!l+x0{(Sn0U?1*YqJ31je`}0l~o1%T)_7EL1wAZUjL;mGjJaX?70=Pyi#hQ_J-3 z>sC|esk{gP957Cp1~G^R7$cGf+V|h}8Au~dWd*O5I_vWJgzOOK0028#&)UpQNE;=w zq)_D*hv47yGmtuG&2fZyR{|NDU1;r*9Y8i3i|U+i>K*n6)qx@qewKa zGz;;Q2Di3SStSAWl@IcdYdsws=*LgO=}c7rutPE>2NgL$PJcmeKr&JB776|g3Bk@j z|G8d^hV6*!K6SZeZv~WEafM$=&j)O-f+X5m33kLv z;t_C+LX_E8;r3fS=^jJ9us13`OJo@Va-=RDb=uXvL|rSyj2>4(&Jrb{M=L7MJ)x*% zqk{y+c|abU(-HEu{<)q7yeox@6!S@ngDR`g`U8A zX5eX=gE-E9`QiwLGV}?ODFG`UJaHg6#;tpzHU0q6+!JTYx5 zE<(g&c%!6E0X5`0f>7x8wzW-+=^yCJp-J+vlTa z3-dV`Lv@1>GZS&}KGqciTKIqg&Pe#>&(79{`v5U+Cw2I4$u%DsTGb4w6p7Jj#rlD4 zv_}m?IdTQ?8&Z^uht7NXKc(^<5m9adP%KOUjHzL_A<_{kcG`(S8nI#G0}>B5HJ6TV zGA}^TrhRN6x7`8PzuZhws00CIhf+yNOV&7$7GVoQitpJvDVQ z0YC!GX_cEOQcYHAu|O3V3z&zC1vKepnMrJ0BE)IhK`>vCmr}7n3zsQInTG)3?+xdf zG~a{YnR;w7eb?)`QrDL-ItG_D%_yX!@hw7jM}s%lDfJ!Yy`R^qayceTY1XF%z050a48R8 zJs@4uVqmGr!aJ+mE$Jg&aVH!qR` zfh@IfG5>Qx2r_Zx?^S5DheU)Xf^iMF!_>~7O48;f7T$8C`SJJO9H<8821lLI%rPJ=*2Q)Hk%hI>Rr+7Vp}*b7gawl1fhO} zDUvP0wnpGyXk((joy3V*$`jcGx}pw($;=wRru)|hW+3CdM1$YTBtI!Bb~NtIQPykf zWf?pK7UgQuR`oM7!;H)s)*_~c0C4GgbU`Mk8DELC?U z$bFj-2{lPk@0u_VPaqlhhd}V)2Oe|IK1>KpQj~!hV$dYgma5t8p9eyTK~fU>J*Ug6 z9ha&q6h{DR+CUr?kR=5jVByveyDsnC9c|mTJ!bA^IluwF0lWcG8Y?B+YOPbj5Zf{=oK+B>zWW5F{FPC(p$|SSs;noj>UHEZejen=-s-;9GhswUuCVA^y~F!RLLc{|pl{pd{o zN1QN^{LjH(G?ytGGem#S21oOo%+%h;JrQ@CF^{j}iF zL_Vz?*CEt6{en?Oc9DTHobx_0V^LkyoxAH;VsHL6TwDmEf9aXs{zyS=BS$2JSO4j@ zUtK%o>sk?Z32IXQ;_mb_xy8Z%B88+IKYYH;@k3&@hcUg?Xnn8{vfYW;Kb-uu8H+Gc zu!HM6QHpT7eF!0TQSt7Lb4#lcm-=7qkm?{>V;&4IJ-MU86$_g zy%u8BEO~l7vaSs?``6%GsCo3=7cB5{W&^iZ-!E8)Atm%da^c>L*cEV#IQ{znwT4cD z7>T7z@u@rr0Kj(#5X8V>3tk{Pih)0Znyxv5rEmBvFK=*k{^Z|<(20ah{+}RBInl7( z+J07Lwnk{_o#NqTXw3Egi>qgqOz}LUNiFje#qrSaG*@jy$O)UM7$!D^YGz&5x+aM; zS&e8xDL2-(fM+TyER8C5!FI!wpMH+Jx=>GwGsVI)In;(x=-m(@O0pgX#jbItB81uH zgx1VGea~&-XCdUDl?ofvDG1{D>(6O(bSkbtaaK?@Zn$RR1nz)|laDxpG2LU@ zj;861#x>lbLn%>_H^y+}==4q(yS*`1lTHM#vj{9J6(;`EVB2IB^9jzG88ljN_N79| z-LcoO(iw8~-lyDi8y2(V!kFJ?NX!gVQMk?U7|$5?g^K;+U1qOC?x!5yt@G^(Nw^0y zg=xE71bx~5TMwC+TRa;$|Ly*hSuR{5VTF+5`AMMzWe2YM-yVJ;z2*rT!e>LN@2^*l zXKLiSpTG4qlV;|UmL7Z8T(5=@KkoT@6avb3-}`Q=TwA9{cofPEGhXXk&w_!muii*mDMQU|x6xDnMx`_}nk=Cj(bHNQ+ zpQrRsHmP-SJOf9Rahj{oN;Ev4$!vq(dCuJ8zPgP9SIV8f zXI(xTlclhCa816#gq!mdX5tSkDbL}qrH?9h@TcSomK}(9Gay!5*u+bhSw<_=5Ub6! zI&^ct;lrv_)XtLF&FiODohL4&=vSHP&X3b6#E{j3yf$o%)8?j6)~)*W4vr?Gx}s=^ zw({j5zEf3g>XdXJH6;;#%epwQ%gkAY4i(N7mEogUSIh&61qCeUkjy$Et6N&Me-c9#j91`&^BN@?a)(dV3VY zD6NI18r&2L<`5U?uTdu{HTzND&y}*gJlSFrxQTi~hFM!dfmD%yY#PZ{og~9BdoiX{ z-9jE`b18mgh^yffBL9|5E%Zw}9dDu)#`>(ofIGJnQAe-t_4-Ofr!=X7%{K!3`w@4g z>Y_&kd=V~>3~uXI`Lnp#Sk}zX&+wDLIj2xuR}6EhPZh(*yj7k_w7K0F6Q}4nI(Ids zeAG@sG7Qq+Idzy;t$D97c@g*UdzZS-l<=UbWrW>Svn_JEMfQcQW>EUnJtmscRkX>4 zrSSz_)SxE4iO;#BV46m`ySzon7mJo|Bu1h8NJ1+x(r)VCeH|Ckx16G>O&|#i(;E6F zx9$Hae3!|Wa8cNb)5M6YliR)u-%;CyfX7J{>VwUKPP=}`?jYubn_sq_eo^-*ui0Hp zqp;1$`RNS+oFjiacbR3OEU z3`{4MtapnVY$g5Y9D-l`ziQxC@}6D_E-oBFqBg|BeKT`PEAjke>SE9NT9?3pf*}Ne zw5YK#M2LV03?YOF2qA=s6iPk7Mgox$>l{*O41y3O2!c=q2!Ya52ttq$j1Uq+%MbyA z(eB!ho$w=s@EkQzal{}7(bu(i{>b+MKY*trHu-XXPBcEJy;e6g*H=1$n!E4)58C0| z5zq@7)N6s0o{wxn7>ZuKfp!T<0cLe}&osx|>rFg3FyxBVL95RbG?>6?hW9WtZLRiE zTmum39Ko~)cN5aa0dfFC2MqEd?6X+s0h_?liJ1K5FOzDr=wV~2$pygZK-WE`>Et9x zoU?$70Pa|T=wt4ZG8rHdkUI*H`yfBhxHPZ;%sMm3g@_+SI1O0vk$lqpP(cL137l;9 z4O$5v14JC&4p6;sppA%D05E<8PzLn|2ohwmuQ56QKqUDmkFuZ#FRu?AHxR=JvD%e6 zklM13eg$(fgU5!$NI-!%lh8d#+wujE^eN2HB49`z(u&{`8GWc3`!_Db6ALa1?~76C zGC-IhQQS~vC;ABsf26!%Jfg-nxE~n@LjxJm_yF6eVpbeJ5+`XV8OUz~Lx4R{a5H#X zYxM>g!Utt6cErEV>csEJa`%zo{sW&yu%4rjbf9lD;Pr%xSj7f>WcTtG3v?g>4jF_u z2n)auuvW!d*vkK|1TzRT2r~!=dDIH%(p?gl!b)feYV{Nm^FQNgC0Qoq+*iLU=(e27 zB^4nmvsRAUU$8tJlgc7Gd63jR`7aKn2+oNX4&(Jpk%oPm``wuAB^U6&p!Z7lvfM{}D6uHY#5Sk!hQg4EY7>yH>WGi>)Y58E1V zd9+4Z+Yw^JGh9_{^~O=P|L*DFzM!sXL$P|-!|1=jskSv&Q+KYGZ2B)Yq2NDb^eoYo z7t8Id{2a9sVc0Y(_)-i>9vfwU+Dp(rlJfdD+D4y>qQYv!iwz;*f5KgU20bo*nmF@cskej z8xC+V>6xXgNmPF++Q7+;;sZ7)+VgAKt&9qvxWYPDvXXA0{J-mapRbb<$kud>s8KM>KyTbH!T?aoV7I3s`IHrlkBKQj8*OUd#kU;NZ1jV@&Fh~K4M_x zXD*Ka3f3WZawpv_;xM{d1)>AE&Erp3TBZS*WA&-tU}*5rW^E2$C$t4%3qI8|F92v^ z+%i3L2Dy1f#=h%yp*4cq03{+}8MP(Famr>C!#Q9rvADJQ?L%uModwO zq~LZG1|R~_6G{AHvyth*RnCF_Yk^2Yvihhm*2?0bvw8oid{^iyncEM!nXnnH>C#@0 zn;ULlwwJ3&efN}z<}?S98%RcH=og^F=Rb6AykTT$&VEZ@A9I}Ty!NG*+b8WC5}5P) zH91aiWIBDDjZeO?hiCXC+wkIeymHS2`bOH2^T3qDrJi769#Tx2LHSDIb2b8oxh@WXxo+r;QFp^ z<+=;ri6rAbs`HWqgRiYH0Mh&>;5Tya$6@nD^;`OAP5nwt(v~3Je3|&)57w~)1R@F9 z`5$07LlWAxnMu#GL4Eyd2c^7kroNc#xI?3QL1RP$U}n3-()=V`WkT;`GKX!tQr>PW zETvbhi_At25$fL>4-BrVcUXC5Sf<&#$wYWiQ`q+lGgW90ULEzDgg)1qqns+}BjA+c za}!W)C`!x=g4E9!21QWDroR-kuN!{xXs*LYnKXg<;oPEU+|eGVyp7Ry-B_N;FC^}0 z_nr=I5_?+&*4fv=%S>rMFoysoRmc7j1iSd3|BX_CCALWfZxnu()naV_6c#QvkDN$| zBro~#eg)+_5h9-}kq_^)bsVF=-NhNTsc?ixNN>FzKX#AV;V#+K<2*P8QgPIBULscG ztpP=9eC0HG;~`0Qd>HmD?K7nz4WSWan@!GjrKv2dsy(#>_5#{W6UY-<_;k3cc0Ff} z=*}7XSgV$2({CLS8D4mcCuTD7Qw!r4N)C<}*ufs(#9C`XQp1wd3=qUL%HciLocr|b zYdN~#)yClPATEGZpsUXEi*>y zDus^0vm8XsTJ7VbMa!x9L$K&g?0Dscv>WBEusaqF<4^8JUzCA$=yNnZo?OR0zf(Bc(NveHO0johv;0Sa{l}8{wV7+#R-ZiNjzg zUA~a78~R|o5tRiuu7I`R;Y|)$oy0ta(11!?GP9Cvt`nf=!D~V6r8mt2TiGg1=?kR0 zu#PpZW`guOH8qUC*Z{Pbyr4|H1}wEYM5@3BB<1L!j0;2GTt?-CfU^YI=Tw99u#{SqO4pX-+T1nusMhDs4Jn#gq9`BuBfQodoa<5p%ovV3R}rVoX02tY?ja$N;0n<_0hM`sHvWn(hP@fQRu8R zXb`t>(J2UhnK!$RX)75>*C>qoaYnov$2(Dd;jiuj#*CTFaH5@GO2T?ILapAAe9t=-tE7ZPPHd6ruVmnYkwB?)Laz#FqE5YF8rf$fVgd~KI zvMQ~H*>V?x#z*q#-D<7K@!< zyh^xKZ0;1KBJ{OUJZWl}q1-wJPY})HbRs}N@qat6U%}Lg_i>q*8S!|7AgBB8KYwa| zA^QPZZa2I+DZv}rxBT^rwagTWPKwBARc)R*SmXnh&D|>ruZ*pYJ4*)jbDQq?K+qyu zM^-fQ0NJ6FAX|~;8?7Jc(tJa$)l(?Pk&|&^twG&SoHGBiz&jlgrgo1;3hq#1pcE(x zgayZF`HETRJv)Bxp5)_V@2^)6`O*a*bl^0${o0VDwMz*6k3YD5gwO-SyN2)vVa`F^ z^ftYqx0$H;v?!&+e~thE)`|{pk1Xkx>M*83SgMKAP*ruy;GcSbLjq^c_;^6RBvbFt zbrQ>Y{A(dQU*sgmZi%3f`1%o(wt-UBW*ZlkSY)d}A!SmdEcUybNwnPnG* zi6jRd3s>Vod+7yEBG%DX-I|O4Fr^Wc17)aJGNCz~EQO6Y6%24x=-)UbLZMH&q%Fa2 z9dtn|nsGlS=63tKc(n5%d_>$H_iZL!Djo6{*@;YO^%rd;R8z8BPBjj}bY-G*Mj-Ft zm?9x43T!lFx^@XD?!L|pbU57&j<%&B(1u#ih`9v#1S$G_(wYS2kV7jyVBHfP_6Ko+M3 zg12f*$rc~%^NS5LncZFyQub3^se-CWp$~i$@(6j?^tWHtxxeX*tRn z+=EDDPhDRRZ@WOmH;9kiW_u6(@p704zSHMNL*co-Csz=o6E0^Gf4$PL{FKoRoxF?5 zf9S^aGC#2S&&G6_ zdEZ(`TV(&!jr;S@2$K4CV4)oV(;#zjsT6I&K8C>ixEYk;4^;r7Fb^&%&l-NMNT}#9 z4RHpuaSZ<9YtENOBvuw9Ix=e4F%~(#+BhyVUL3B$>~DvqrOWkG##ECHDpAbdi}YgTK(BlS6QO?IckwjAXRUU?{i!13IGw$Q-S~>0CWxYf|F76y46(Yj>0f zh=|@~(fDPjcTgU;@fac*64^XV#@fDnv(LABr9ZaTUn<lBs4Q3(qE|I{@4 zr|=^ny~r#V3~|Z{B=-LZLj|DIA&)AKEPOTwUu(Nkl04(d-%sv0l=x|VfC87@xtFPG zoQP`KL~T%U5SXrx-l0{LBK8yjwR&8JMf2fppcvBWAMq7v^6>{C=u~w;W%uc}fYsT? zBQctRE@Bc@zd8AZAE;YTK)3;1NR}$VzKk8-`M>H{+K|vjy5`rXz;CT~RR~EXPj(F> z`mId10=xO9UGvoi%4N(WL1hD#(B;8|z8dJfEr{bAR&;FC85hR~- zFVn5G%o!*T)C6Z)4afOWa@7~4%SXi%!%rI?gU`gldKLYQg(Qt`q>md^hn}}w9X|!A zo5M&*D(YOzI^j@B24HnNEe$5FB2dwOrS8$Y zydqB>BYe3mWn99ZQoz@`$gVO%$s1&~gI?NZ^w;hSg+;072VORyLiZ1eEe#nnQiA4r z@0>R_FyPX&B(eS+0*V$_Px^^5QCbCZ%fpzxJ_i%oPLx?W}R#}^-h_JH8Qmx8;p z?oX5t&{MhI==taa0sZ{C?XJs&w;c}**6Gsxa6EIN=ok*S_h+i3#_Jh`4z56MyqvJp zQ-?gvgD@J;w#4h5T!;JJFg3L^x~yuSS3V8l9)|ZLYGhczu=1J*5nvUNC+)+gzjH6h-+l58 zI_5Ox2amIZ?V-Q_MIzRp3H*&DA3_y957>rBriw(cja2L;6yx1|#XLESYt?Z({eu@b zHcE!1RpnuE1idlngwtTyqzM^eyT)s-;XfCuI*%2c!6K5XF@tyL7p8{Rz%e186w{=j z=#Z&-0THm5&8Iy1TPAr@Og!FFi^ZH|wE`kgcy~pDj}c8rH*xj?b17Mq64r*wRmGyH zrMHmBr0x)aQn4d6P3&LjA_9l$xzvh19!+IcxuJ8}cpl&e9ez>Re`BEKBz$RFXF@Fq zNsnLU=tI-PJGQiV3c8iykIoj1#@{w6H=|;|0b6zR>*DH-wR{ax2VJhONMv|@%PV|H zd+X_G4dKFsp7d%}aj{vrup_+fzNW$c(JSApsa6qm9lz-Q^e1g%62cIQ!i+f^X>EkC zz)XOgDv6$`)l;tr&DQIZ&cjuNGN!Za6QS+KgxE^|{v7#SQCued@IoL9+)tsX8!S{? zO5rp*cGt2>v%Yj|UrEep9SK-~CDpi0mF;%3yQg*oqE4+IxVY2+i_S07i=52m_%!`V=VAJZF z1dy7+xGa9wqR7*5E||gcDK`NhCU`fI>S_%c!BWo1_iw)#gDcRI=X~)yi_6P2p`vZb z2;T%_`Gku&rre>&QbD)Kg~eQ6cpensMfur@-O?Zccz07XTr^k&tTAkp-XY2l>JbUU6w7GQ`{rJ#NlPZXeo0D$@Oxak17AxW7f?=pxyYt zsM**UJs|GUhFqXBv64Ll#vz$ALlfCJB(v<#HJ!dg0A1W)3jkAhKP+a1**2y zJSLZ1>)d<(#6D~Kn1}z8)R2`r;a;-SZkKWC_vLDglQY1ULI70%@qK~lb);IQuHmbA z(*TzBOalN0bU0?+3DN6BI(`Qy1Tk{?1nY%pq33T2!SCeARScKmg>jDL9~1kXX)}!Q zsH7>NZqg;JTkQU7S7=!T^>WpwW8uem>$#j!@EGEH17}l0+mk>S{JVDN2MDJ_4z=Vr z$D(vTIxh&u$zl#}35l4eo&Wq4NO%&`vVC{3i7K7;{QYOSM68+il|Ck5YP^)YE*6V#-%t;-<7u?rt-W2Qg=j|Louu8XP4 zrPY%`!}oDq&w@v(=mw3K&L;nIV1vUEOy`SX?B#5%)Ipm2J-%i9B4nIlW(#q5tyuv! zdKz4>`LUYQbSdWRNaaIAn?V4KcI?j7%coihOi88c1D z@Kq_AkOAdm*AffNFib^(Y{$ikZzzFZw_|01yrVr+Wz79~VGkp{$ zRQZ71gqP)QEkKsyI<+;$=v5q^8rHc3m!RI)RF zz9ClHAEeYr-rB;>rrlg9L-B%NliIjpw&(GZ9Kwp}KplAs`&`5Bcwa2l;?j4x1s;9j za8OfH_BI#SztVus=-`jRa}1t@b0#i>9^}|(iq$)B+SQv7SXyM@_YnE^SoRrAGbe{T zVASg~C{p3|P+JyJkz-}=Pgav%Fp5JB`YJxvl&Qk4%fX=o549nuF=B+3n0;UEf=QkT z>RV?<+3d}*xumophH66d2LMS+eMar)VTGo3LDz5&9Yuq)S@iV8u>J?voJhIx>dRWe zI-hh}zvdO5pAu9;8CdtJNXbO_;B)td6#k}NdGCd@t8X{#nI2)+Vm{-gwY-Cm4u9by~5I{u0c{qJY@9IzlzP%%D4DapAy$*>;Vfjm6 zsgkb4KGUM6zN1gOh^&lUzZZ zv%Ka-7f^M76)-COrHs}&GD6(sF4|U?PXm}P*Tquv1}Re5e)1NGCj|WfTyWbx{Kz+YL$G}alpLNrm7TG7 zv#h$zA4QU;xHUW3x>p}*=+wXU{1Mm;FR{V(HU#GTcCFg;ybbVsz4~TixCT#@ZB9Zi zj@K0uea3FNV^Q1E^sUeV4m^ih*IDvvis<#_-Eqtj(jZ_*+IXLxs|oLWxY#(rf9{NC zJZ|nt&x&JJPa#}yT*Dy?XZ~T0Aonkhi2UjKF&i^ag@scMyE3l={BQ+Y0L4S9=RP3J zepJ%G8Bl6-(99W_&(@qve*`G}?$b)8RS|^hT&W@@(iDd{a^$26Qf%i^PVZUx)7hK#0a==;wl1UO(W%p^$;}$aG4m zl|rpiZE)()$37Quae!GC=(Nu&pUq1FgbEaklz4AF+~N#QJSD#|c79oy)%{F>>`L}_ zi$m0jj(YD07xZpi9tps#>u}s1CDn5=Rx6?*0dW-k=OGjGc9~XzC?jka?t89`Vo+UX zIT^GA=t;MElAI!<+-eG%BE|<8r~N&1y!tBsMNOM+XBB_=!#hcrh6VraYX*k}DJF~q zMOE&c(@m3nAqlS9I4*QgYNJX}uKVSKfR#pX<^hhA-5MXgk5;RVsT?LVY+eF(vAv^- zGCP@Z$L$_4`$_W(?21^Y<@#b^ouaZZPWY|6;nm24@-WIQVO7duFWrKtF6z)} zu-4p>CJ(tR`PH8@{Mxq$)^NpxgcWZR+R@J5h$QN2O@F=voZPh2|1E%ttHki}xmHMyC`X46p40nzlS~dS8Ol zmLz!|sG(nGCB$q_)8*5m?@p(8r6M6jwAd3_an?_M#D#eTu(IVait&|bpfz(dD(H5V zdH~~MZqxg`z;T-#p1x9xy|k>O&)JxWHXvgl8xUB6L7ay(Yw&j}w8W?)s_BvZ0kn~* zd*G1wSY@?RE_tgAeO`08CZ4Xyl4ru}W=G&Q$iQQ^R~^SN9b&b@E$!+Td3SfYTAn9_ z`u1iZPj%JhaLEFQfiGhuGxf03;khL&q?Ba;N&9A;zm%xYA;0)nE7#$mqN>{HqM#wx zj&G%If-rZMbPl}^`%`Jn63ly1K`7;OE1Cz%cd;jfu<(CldFI0NO%??LqVnMyTar$j z()YRtvo|qkaY}>{Tq%`80RhZzLOA~V5RbXC#0pK`DVnB>i7?T4tq0C>4~DaLZtk4& zTP0bDeVZZWF<+c_C~Rek+lu*bSyVt;bh&n8ReudvffjQZB#LQiADy2Vu@0J)Y0LuN z2thwK-GezF$Od{#Epsu?Q{nCQ%RnONI0`r#JHs^_~n z>S{R*S<@XU%vmuXgzoncNye0L<+!k;5Ep&OjWs6IDG>ZKNuomsl2m_Z?ld3A&L_Tb zLiX*(Z^ifx4_gzT#bp6A#8|qZSBPkVu0QUMb(4@ZtO<`4BDd-CGkK}SvW6(>iUjxJ zEVr&9QG_$TMbt%;NOZX0V!;r@kxb7jwlu4QOmEUjjrB2sSAF4_0!3(5X0=t38k@;{ zt+5XsfHQ$x22x?)d|m`<_tH8RZ!pLSD|gGjS8?2;UNbxx{0XKh4 zIsQKfT2PNUMe+j=Bf!aK;|xEL(NG~9Pe#X>I5}-2i3oB*GDzm|hnVP?riI5xQ^!Cb zsmO|gXuoT0KbO4Qht;)tg^q0ZmP6ri%Hd{4M|74Aubc- z8q5Lz@ERhi-RR{ra$Dh*ar-nkOx# zw*xcKP|mHrAGO$r$P$&*w(zdxF=qZyO%Z~Zb9`3X6~t1XANdZ^R^ zwIr<^zK2V{vVvOJu6F9mc!br?WPvwZ@zgu_<*C0_Msq8C$ZDe7X+C0wUAUU*9_vl~6Y! z7ojsu_G!lt0Fp(QSEX*w24#zTLWdstKBE_m#kTSrgeZ5Tr_9r7CpwKnBPwaPorKd4 zWHVq;8b)Q7zIV^y@#y}A{q>Q+RSKjDumNz0t`CHCI5Z>D&dqwcqZ8@Fx5teeN?al?cuB z(1Ub*xay5Y-IR`AS9$^H= z#t%;`2ULz6$+&lJu0s(SoLL^H(WDU&DH&A~%loqz19Gz2FN@MbZ0{1N2?M_QcR=wX z{F+w|t^=fA&Hwske2%%=ZRLd#u05Yy(abObgB5mnLJ&sEKvB`OR3-s|Xs975M2LV0 ziGTY0h&OFh)CWXLRbt!@Q=qjgb4pcBRGQ(24q$lj9vc#RwoAXAc2@v z1YsL60+myOtN@tmvx$YoPb&gnxSAjmfdJ2BRiP`mKLM`OTqg|S=3=87 zY*V#A0taV|q0po_TGR-f!1<(2fQCU46pQo2ON42(@D6?`bRdvS<%ATm1J<+x|NTXr z&S~TV@6aI2#q?wg`wyIe`J_QHODWDu!T=G_ITe&rA(^V9(5Yq9LmzNGXi$tYf}@Jg z*g$~l2L7Y4CKLGJBq9j_r%bsQ2A~9B#|BzPLXPENQviAZy`-*N<-cSdAXt+9b}SosuThtz&l+Nx(p6s ztr`o^0h?2Tau^#IQ?mmjP(G6-DfswQpyB(TI0BMbW-9*$49*pZjEr$3BGjg|1)Iq5 zLIwB_l)&laK!F5CCV6S|h_eFKLk8Ip7xmB*t&^LqPz8=E0vMX*)uBKo2aBn!L>?jh zP=N$I_$-(#L#1S-uz?ULpEIaWpt!A6l7+x=%?=106OqNScU{F0OX9IPzoaqE|?=nAmg(*kMSeMP%swy6+Qf%9;?AZ ziL?6YHtCy6B1HwJM*sxKoE20>B%C}wJirN$xlU=|h-^UhAArp{FliEqPypjObcSKs$p-@G4qCDRa4`4H^3Q-3 zke@UNd*vU_So#GBfX=B*fp+m3;~W&Z13wCm7915E6&w{Dzh>wM^b%+K)>hBtmZGf#a*J0+ua#4 zbX`S|Cp~+g13~rp!6sODVb`&0aDF~1M03IuCi3-Bxea5b2vG{W*@z(6S0?Xg-rZLO z5u55E0d%_0C`wedcOLPRV-F(66c?sEYKg(#^QPYzq7{-{J5ACHMWQm&CFMt8iVD%z z`y2mr6r%XlybW)H1Cnq(SyX9;_Ev|B_hVd&iL!4?A=yu*Tv@JSr%N=@sOQ|(UhL(| zXJah9OvXl@_Nwd{qlmNForjI;ep|YbYFn9DCtFUGS-9_wlpIDQyLLz@4GU8ydjhp( zuLC$VE|Hz>Sg19dTDIN9nkVF(W;)~Vu|c4dcko@Hi=WN!l20DmQsLZP)t(&4@8`sLqKp(tOnxN^#U#TB1?yH#Gcq_UjBwfEgPDM`%sEWuyi)jyzgxC zNdv`JhNT!P9zw}5n1D(&hu)QB|E@TbNAutOe|y-NjE%G9_%=6NL#JA3ay5YUD~IQXWJ1tLv?G2@1Ej)Zmg`3v-J)1hsJsQhWnMw1I%GaB?>zS zHA4UyoC3pprNWBx={s6_eFT~ZWk_sjl6-jc8$=$l@uR}ybYC(S23F4Vh$ni4m!xL| zBj!$g{d&PbT@@sdE}vv?X-@f43YHf%Z`a&D_Bi+%W5-lG3iQjXzNk5IvgslX$h{|6 zQj+~eMExP%f(&9~O28XvC2go-#$oovxD4BY@giI-iWDHMBC{n=Ix^^+;msB_a*dJu zVt_szM}6YD6wS?@PKOkZhkXM-&Zde{_8kag&F&%6)mGX*1+zMS-MI4F;UQSI?(&iY ze>{Q3bUl~z%u~cHN6Md+2xR0~4>ho^iJ(ZkZXM{*qv3aox7wOh!B`ME81LnY6Cmog zRfgr=SXXRl0JBmN!=@WBXi5&JQoK(iY{EFHb2r&6PZ%pJlGcNa%Sm>I>UmPxOL`Cd z-Fz^(v|L70T0vc-7A8U=pg=xo79{gGp{`S{A;Frc9PjxDo6y=HXFAMpf|9z%V9No# zuYh_1L8qQ}SgF;me7Vk;r@y3_571383eQXtLfvF~BfxQXqe(?}IqF59q0iBMfx_(( z&Cwv#Me04Yk48)Ib%WUxd<-lp9`YKK?_!`}H++(eO}tRuWVpTo=*oQ*BR8(4rv?Rx zXL{)!&`+DY4oAsl{0CO-!$jev-LsP~GO=LjSe_ef#^z8Afh?AUM=GGM;alXiD5*7Y z^Ds<8U^#v4{Ri^kf{hO;OEVTOQPa?Um%(L;lP!W$u4b(pjcbwg#Mx_ONQav%xDg)pTS3+rrf#yNE&Py1D&@aF7km?3JTK7&i^Ft_W z`Cy6Q8G6BHai!B%qeArp3h!WB+i+~a8v#MawpR#-7WK3h#|!$%$6%*G)*5^5Q5kf_ zT87PZhrh>XU-CGdk#lvO|^y&`oNxDARi@xCM6aO71&&|Gp~vYr2(VIu(* zXS;?iCkuI{%F(in<6<)^MohSuy_H)o4dXrMZh|ypK7ciB4CUa~3^;lzad+Zi_nr!6 zsEj^&ZSNEQh{3^)=*dc^G!i?etLPipkpZ%ct@ia~4Ul-;*ma^O)bq<; zdj&@Qj_;z|;lcg^WBd7p9eGrmWEkc!_O+XU4DL-7kMxfz7U)WS({Kh(*)AmT%d;tW z0(1eB)QI$%JF`HJW?!iKc{>m*ryP^RMe!u{H_LqSN+a+(VeMIo({)|&T7-@3c-fS8K zl&%>NEdF<7ASJ^|Pt#NXj(rj$0#};w^&~Ya{!KJ{qj<=17)?bKd#1eLAnZ$l$72}= z*7L1rY3P?*`U%caEyYX#wP>fQtBDkKYHS5Ml&hoDl7i_35Hfsq98mhoGOI#nDdwY2 zuUUER-sb$LeX)lE(3VFD_eNpL8n&1_a#+9(v+)%U+g>f3?ug)k*|2TC=5 zA-MBliUXlW9(A0BO{s1Cw6=C0hmlT_L3&0Srz6hwHsrU-&Vu*b#nF7;V^^wh1RWj$ zD*1B(C11SX9T1{3MY9^ZPQy|+3%9(A-r8`MPKx9N#1!x(UVvArB04H0;zrMKn{P-l1X~c8s>Ql@n z83Y-7X!}Wrf^LdalMzBHO+~_EGh$Uo5W*#0SR=nh`p}fF1m6}T?1OV}@Lq|qMdqh= zz_V{iRm}0vx;L0d#FmE8eo?~}pysM5L#cESZwMtLBLy9fZxxuke40C*^Q}s8(QhXj zxrv%8iViQ^HS7qdLGb<*?$HpzKWQH#x**dw)U|GRpXcUmVy4tAKJ}v6gl3;6$KO)AyL3LeO9PcH_|@+&$Kv>#C&^0&6(aTsDNZ^!fPUo z;Vvn@)=0Gzo_=46^4a8k|5}_S2CUGpKXhq(Do_$Uc^OlyUOX165aA5{ z8JBBiHT*z!;pFk6#Yy93dV}9!+{%Ub%dtH6&1FJfr!GzQ>Bo3=p1z({^k-}VYP!`e(zE9jRBvvJhoc_omxS^8Wx2sfVa4Vg z)Hi|=F$ImUK>FUI!U>FZ6ORgbW%m$jzX8}|L`tWBbO%FG%s)FVpr@c9y|5_dBt9mr zml_a11;~5II!7(_JsIR^rz=0dxbM$Db8kWGOkW|~AYFghy`dIMme5|d1ITRcOfx#mUg zU0X~+VW5VbZ&MuQVTOJ&({R%i-o?g}l#guoFI``%H8u3*gNB~?51?fq#^`q+PXI22 z(x+Y?kzRN&xZ4{I28^20Y9BsJv!_6@NA#r}dZYZr5rW0c1-naUbzMh}{=;U*CXwYF z^^CJqW%(N`pJ?fc*yn!!1ETvatSCLP^svy6uE6Urs>cv7gJS~c}lodAYFXMaSR&WPkGrHiCz_}O%B8uT!HfqQ?E~L*jDSKHvNP-SwwC{yYR^f+ZgBrY!iU0-nfN9vV5AvG1; zB2RH?MffX9lNfu`Zts>1jmN@WPModN1SFAQRq6kb=lQQGs<}7M=_17>l$_UK)E+~u zE&GKiv0o&(Ex7&+@Ic4 zwH-CEs>lkfg?h~6K>(x2Nj~-=r9@+wIHWYoqu|W1;VdLd_+Y3Hsl^UGoFv94?XggX z@YChCpv6#os@+5 zi!haSX7r*BoA~oG^IolcH2h`0Pzqf5g&l7^1$4zEHs~8q)iCGsPUo(*RBy^h{j;}O z|4qW`VMvmuvszD)yh$W z1rx8UVqM6ij0v1@w~eRqsW`et2Pj7crR~UthN*^g)2aN@>A$W|d(LkGW)Zo4^MuIu z{2A`KmQWh#{9h(DmWQv=$bB?oVy$@S;DhR`_WurF9q0BG3DM0;OOMWg<1^~Iu|AHX z9JnS}5+?98hh45a=e*>#3(Ab<0a$}I|+_nQTSZ9;! zh&>N{@D5H;nda{dY*aDAr2(CTotsoC+%+JL#2kmxr-8y&)rfKTER-D8f5v7(!!Ub1hJDNk@os=r#}+*?=R%cgN^__kK0~6w-=11lY$sBU!iu_{#fwT{Yk^Z(tBpj zmUX&d_NKh`N3@$BUAlMw`Zfx!!4dMK8MdXWe=F^(ZsNbk&I!l9F8pnB`E zWq6|@kdnFB^?hT1#_mJK8tYNeb}5Uo3(;d|^28w+Z}nnm^fPy@{=dq!acD=b><`;o z$|WomQf)!L*s!)uCGwc$P?0WT#)FvH_6W7NB^MM)KNy=9ARyrYFwskJBATu=0HUIm z{q_%OGYQERgmH1!s*Ns7_p_E{t~}h(IKkEGkR~@4U>ANw(`VJ zb$rx3_$K}>&zGUysa{s%LLGqim}$3czyyhP98c;lI4LtHAD%{X7FAQdP5W>mH1O;r zaxEZD{h9)qw*)w9aoA{D%Wy=hkBwVP+o`~mQlUp4@Ek|t;r zDf=Pk1C>Q+O19K*PHJL?7hn>&-(1UTD;`DG9p9@zWyU^FN}1AjGGbpOMaIRRquiNu z%SSJ*X`$zfB>vUW^`q%p&juf(bW<>1`Hp{)k=f zVPO>rhd9D~C$3TC){dt739Y1Kas0)*Znk4o#*zDO;qo@AD;nf*3|LQc_@|0ZTge}8 zR{UtasDv~JytkGA`gD1aZqCLmVSEL?iib`~gCzX}S5gbXGq!)suGo*93+W>4arPD$ zZXS!SLi9{!`<{agw&q1CD(e+-fp5kMM2T1B5^b8K+bFXZVEXuw zmvqpl3+}exC8bUxE4YJ^d~D!6)i!QXq;xGPY>cB5rOhPLy93CuPSzgm5zj|L*lMktt~0 z8ohD0fDlF5nj{Y|fb#TOFUI|w5gM3kiWe){i@Y*6%=ANj=4VcApN@Jg zv#=EIZ;n)Y(9piy3W;^K9Ihni2@CimowYVUooZ@~abGu}$w^Pjqfv{(x-mLz3uPXkL;4TdBS zI~XwvHdPQRWxLfvKk_`)uNXzQ0SOu9SF{P~YrxTC#wNzp)$Pn9xP?g2#xX2MRE85B za`VSgKSpv3dZ19E9rM-}jhwRW*LdM&jC=tkd_CH^Pf?f};r7SC9Zb#XUtpQI0zIK) zc&tsT!s>~3ycu@;%%KHD_7N?(4Tn4>48S2;Ftg^O zeSPmAuZI>Zt9u&NOL^3GL^N~ly9F^ZLz6`zy#7$JCq+05uQbzILdEerO??hr zRmgP94VKa$zE0UrnTB<(p|9JLO_YCf*_oajL!W8EXZFHoB~&qKc>A0EN`=Ifv!LDt z$;IvA^ttHi?+&kXZg9bP3F#NT1pdk-c{j^}Q-9B#Zob)i43CNd_x^M{t(J)ntvu`q zKEwP{oRCJ@H#HWh1d9_RK+XGf@;24Y#|B!AJ-5HA&>+g9kQ&y{VA1H60McoOGq{mB z2HCL=yo1;Gx;c9BZgxDJkuVkW4=OSJ`S=RbU=BcV&ebx-xfE}~O5(4>V2o*_C`eje z1VdUwZzWsLb-*_~<=;3|Q9q{YNU6R|m#Y;!8{$cBaVghfs|GcAVQ~1!LpzFHS}dkU zo&h>%_Zjb{K^Ys z`;f{QmhC-&$po3~Wo+I>b-8+_fCNj&h5!0`68Mctuqez# z-5tYf8QxE5^n8N2b#hi|&yb%<)sb>QRD}5y1i{plo!3=}`r+c;hX^#Cnoo%!om`e- zeJBAp&zPMY4Y;s2LOL6M_ciPR>wR+-V!&&NvEVhxc7U~r6O|rB_3P?ZLzAmVIPu-#4$mUowR??biy^(bA|x)Hy(LjmHN&s%MfjF=Nx zNgNtk$<@{<&9ih2H*QJk*Q&!MUocvuLe&ck9f#Hb;puxoh7QI)+xMK|p{B^X9H5VL=v$qpl?sJG2VZ7X!xq(;@; zMmiYquQOj8*i>vk?(6)$`o)wf4!)$raCSu7NR@oT)_H0N6g&ZeDj$| z#0V@=&;>6i)eP{C!tQF$e@jmr}z!Zr(HQN_#QG(hdIB;!~h% z6U+4jeuK(j0d$kPHpp|o>QEn6tjl7ilY4uGVzkMSb01o%YMexMjRQ=PsrN0tuR)uk zaNwZwkY)c5A-1*Cy`3>v_h(lmzgOO)qY+9I>$NpkVz&OnNL~q4cS%Z+%6TPC16L2c ztlGI=6_vudWHbfw32e_+j3ocwqQmSuy6D2qa^F4S z)fhiW=cfG5LI7kW%S{FrLFG=7lr#2-Z{_As)5vEzB20~ZcWS%o3YHR3>F_;FJ*l^m zwa`g3galu=;}^O_cjV+hl$ZvXHX8HDwmeEkuT)x-tTt`Ww9Wy?Q&K{pPJ<_7eh+Q) zv(vDa-zHoFI%E?a!AzrYnM=bU_nu@qcoT!q7os_(hLxOSDVT=B9-VC*c=E&s7csH$ zPESDYNtK#`3l_D^077;ZPXeH1vHY63i_sTHl{CJHg1u?nqap~e-PAbTfu^?V>sMGM z{scKm1&{=HCtMqT?&C5ym2bid1jGf}^tt-WZLL+YP*Y&*2z0dk0k6qFgW|z*k>KaU zVd<%~zOjS2d?*$XF+^U?>Zm20+yDn^r-gCd67fdvP5RgGAa%&&f@DdmtcUohf%Itt z4?UE%1JstwtK1^xPy@O-ZE*~!@XWUNduxIO++6Ja+qK+rpP_Z>x>nOI15kW2b>1$H!9sUobQh7OPAzE(};eMc@d*0m39S# zIfKMOCMRSe-sXV!)4UyczJ($@Q4HkV+i@K)27_|UAq?^n7cVROX^?Kx)70wuk5AcH zy3paI!^$$|vdN9=_a1OMZjHnQUrfXBvn}5gB})r>nSw$Hnq%PKXs?Pj7g9*abbff@ zQT#v-T^*}JafOOG@hLw^;IW2TpkT<-ba}P5tUd zZT$gy@hudLaJ)|7qjueP_hXjep1?Lb$R$aU2!OOZSdKLn>pTWi&{}^ZJ)7l|8y$5*9CzwLSUx3K^i{J{o*jde|g;SpBos3a^KN4>w$COMv zv+1qu_$|gy<(~65kpcLSat8}H9b7yoqui@!kBw>p!QExSXt{Sqp)1;%tZ*SbM zFDAw?b9k4NmlW8H1O+`Au@bdBK~;oO!-*|lOF6x$)37eYNuR<|%-`o}N|7CbQi?%P z|0gV=gzW{Au%ePFqVGV03l3hEVst_;DrkF3T-0Ak)lcQTy7xO#YwoG0gNw{DYtUjp z&XlHQj)X?i2ynM&X(j`K@^HKi@D(LAQ)+gxUB%HVF0|=KdSl;T&;IL3HO3lgGx!XY z=FdhLsuvR*bceZP*HSDs%J*IHph#&I(Z!pVfVK&7w^=!>08p6oDjlBl)earNVg!v? zYVo3cyEsu^e{V+Y{-JznEK`7UAocZ$UOOsNYG3xt*qZamVz!%BB&R*l^sRdtPYy`D|%>m-QXL&=^+wCLdI4Wpy?f(A$#WV zR7DM9w9NmV_Yh+!xWccUR-j+z;;!I*fDLv)tXsf#kgT5{)xc*>;x+x@`1)pjR@|%% zJwnPV2a}$iAX3)TcI9sMzGB@m3bb>x@O-O#JhJ_@04`{8IlAV=$Nfsq+pGK?W{_J`*HEDIM5_DR z6_So$68+Ak6g&fE&v!N`%taC1fV9X^Hy}0f8Wexth`#^dR+aDDmt83l{4g1SEn$=# zf(L^7mo6FiTDpF`He{>Q)-DB78HWDks^yIi8#Y{^VXe> zq4%aR%82~6T#E2b^sz22=KP@*5}eGgoYmG7j69Q7gM9>FF%*SxJVw@m`U6@}SL`LO zua_wdFTY1-@?V9y>a%#2ouyBjZp09~l(+8VN(DDUv*bt-_a>*g12dHXBr@{@jEC3d zRy15DX8GgQ(NC$C--@PoHiNgK$?tzYav16Ab;uf*4-6UxJMUsXouhZRS}v-9Od8C7 zDB!D(t;<`v91?0O{o@{tA4^3jncfU+-YS6dUKtzti!Ij5!QMw~@Jxd7o3+I}ho1V% zrUb)!C2)N~Qcb2n4t{y;Uq*Fq2R>;nnzs2tXtGU9s!I(3rSS{)6H(tt9la|dry`TYSm`Al& z?0j>W@G%xxk~i##@25Q7razF1yBqWbv61*%aW8dQ!>9!2d4Pej&KK&)&R)I6q1k&)YQHf; znPQeyruNn3v5Y4r7P==?mU|@)wHg+yMmE&7(P1m7Fh0wF_`vKPxwVyg8I&zg7}tsl zr?F11gIa2McU<~XzLAB#n~qdJ(rT?a5+C6wq9G{$(;~H*-n841otBRc9;8_xMtp#Xa`)JB8Fp1Uvq7PYwZHFvy=@s@^_c!LlWfz zBlR9~`jG=uV(FOZ8f>Fpns5RW zBj8YlL`N9u)k*@z(aSlN!ifP^ZjNuYe1TS0z^88`GML;8I{OTi760}u`B zqShc%Jy+IC1hQ5YG(lF}Q_eHumq{lmWcpRvX-T}B)ZK~d6-mp&WZTZqdT~ASsm|1K zBNTciX5VQ*WqbhCob@trXY>MGRMra4>XnAIx=Q@3gCa(8UCYPM+=}rR#)J)p{Umiy z&Ql_`HR%<${nS2%5TYL3Jt!O@f0T_!`c1Csyuf`@6P78aPC>@f@duvu1P8&E)x1*; z^IVN`ujoneA;ATWR z&AW|mhbJQs|9Xkd*J%f(c+WPWd?ZrXz1ldtxAkklm&x)>uP zA@m6S5(ch5mA|}jNH=H@GzS0K;QtWxO_&0ot z%_#;#5K2LMbYi6%>Ciz1@($h}5g_~-duESTHR87Af%L3kPo*>=64~dFkYA%Tv#=In z;2g23#*kY+w|5#MzWB1K4GCC=p$7jTHDJ+>xGb_<@n@2SqJzJ_#8KgfxbF!%MFQwd z1=C!BS)Nmgm*?CXktx)RiNKcOGRu?MRh@+M4bxgb4nP_QDF@g)5vR!9!0i7igH`XZ>)Ga!ao%}_EPje)ibEy7S4S1LKe8HV;nBM#{10`*{ z?BkH!5g+9kxdBp8?#OD@Pz%Bt*<|WkHg{6fg-QD4u@-}*RON()u1_S7OFq?KvzsuK z*=N~FkiPkbMZb$rC4wSrN;;4-1l*W>Nm4kUzDJbw5?UE-@A5V!k9LV;zfdo zFw-5I|6trX-d=caqfDje?!_FjEf>7NTMFT>U#VWy#D8B`f+yEd_J?}hBAcaQh}3Eo z8~Vhxc~mKtG`7@2AUm3iP}2@mNu?P7Qr|>Dh6UxbaHuD&&EF4Oab2US@*+FrUa-sU z^yi7%T0@2P6>?1anM_pxouelHge@z?dswG$Ymf%8+z5QhFoPXch_>J!4RyJw2S;dK z9H&tWDqzjHpJm}~?3&!`C1mS0@1=U6Hpa%KJQa0)+q>lrB802o3L>-e=bys=d|e~z zI_h1WlT_-+f=$ZJpNdkMO@{~O?f3NnHwUq^P)^jA-l^Myt;%p%#s)4}WOW*bk%5KQ{~&}tU5yMnONPjQ1g z@}uolwMw@AW@j<&k)-k}?w>?V`Y0IS|5WaL8ssHJ{4yn5s9eDp@|sAG$R{|KL~lSR zB&Z)$3D7-yDB9rqd*;!HhvTE3@8dA!y#--Ij0 z?k@;lFn8NLLS7m)1arvigj=)b%cP&x991Ug{3FViazMCmT3HcK>M;Y|RCG^Aa*}nA z5+Y?P0NL54rU6!-zD~Y<@drt@Q1`5d0Lk81xSUoX_je6XK4gU{<$HgOrI?J{TSHom z)Zl(1kqhP2Z|@K`s|6rm8VH`>_rHy~d9{bF&jVq9kDNSk4%MX6pPsYVE+^cP?`my2i=7cwdDy=E*YkbIlWj8(k*;I=V6{je*BFoN?8YAC8kI z*75OyIkP(%?h6i-7TIn(6uG2WzMb+a)!GvK48%!09O;*#1K}FkpJSGda_UTU-8|ni&@VQ{9T@UnI0~>^9c8OF{FkdH>bF(IJnre=QDkFe@W5>d zGA4LhdxlW#GINFR#X_un^ON&CLC4 zsmS9jYK`_(Skq|qu$)1_jf%x(_F<`is@D@Sj1}1pUn&{ysKOPFVS{N|nLi~MI3ZQ1 zb+%oby{uf2%yKIr%gf2txVb#i_u|jl^}2>9G5a9<%a;pdEk)V~7YxrOa%wK=LN;R_YO#cqz(pO5%Wc@*}E1O$l3ADt@2h zQrhAvYq4LEB5-x=p!}ld?HMmZc|j>eD13WCxXgdolXWJB(dW?#@8kVy|3D_BhT)r1 zHSaxZ^$TwncBg|8wy&oP++w-dpr*VKlwqi{w;^CojV#2*D zmL@P^=EQWfeQWC?WE#s=ThXjpENbu+w_W{y+20-~C}N7$mzaql)qY59lUX9|7a9p# z*y-X}ND+WpB8=r?szU|QPkj-F@7ZC*7u6q|8aL#or2?TQv!#xes@|8zzP%Z|lmnMD zHb;1|U)0|yyTk;!SfS+St_L5>+^K3iFlV&Hu{OdPkH*CgKp$cr6A?8%!EIk&r@2jh zp~3v-)qJH_4Ls2d6fGZ*cj)OS*wr{CiogO)od^pf(2$2Y{^*GA6_sW&kZ z9*}BjrC{`C*k|@jdt?fpsIuzY8qpV(VY54Jwra5dX$pr$HkWTCKBa3`cMR>3LXjXt z@}<=#eqDdp)z^nowFL^Cnp!{oW!U_#B8td8#BJH?PTSk0+9?_s8J79X^iup7l;Io) zvU1q9bR>Z4;TG6_#hJzH?>2A;NHLiw54*sqw(bVK)R`k#HWXpKv8Al* zz_a=z+mE~*bWXJVSRz%jI=g#_ivrWLPxNf*6L{*94~S`Vmd;O%#WPva@joA)6565U^b8@XN+VR z;M~wOq*x3y+avRO@{66JIhEiT%lin(dj@Rq*;GZ@Q}p+}qtp9U)8JqjH4(z-0tq_~ zi#4~WH!6Hd)lx^L)|i2Y^^{n0UjmnAD@JE=4rHg2pK~{USDq@vg18?mw}uzNwYT3M zy&GC+B|2<-)*X)#&WUHVmd|Lsbz60%xggy1hZ8?Cr(fv^0rPh^GZ^w8I>DTrtiW0h zu_E1L{2xjLNsJ0HayO;>S$C5V*=V@wEnOC87ekw>k_VGOc#;GTZKb}Cg}3jH{Xz=L7+ z!x?Y7oEkq`OTourG|@QLPr7iCUH&&8`1@V1z(G=oFPh`eV#?&+>sVR9jxIYSB~C6PCK^J4vk*8|~nBX3=&^}WmSUz&|=&+cwk zMn_Gw=c1cbuJuFsWyBXZ$jI-4vPVdhdU@dEgql@uBOWNEC20Y1m5RB(>!6d&I@NBw zHjjyyfLUc>x#ROkp3(ksjW#C>(@{BkU9hjjo~2~2N0LU^Y>*7fu-!c6tL0I~wJxir zq3D2sQe1pxiYri0FkJQh${iKgpH5Au*rPxYV%bE2kA8PvPt&{Lx#ZD={97q5BYv}6kyFlvsNfD^Fb-%Y67ndy5AX@B1ZQ;{>w}C|PE|{UpaYvCcL&67$z+h9{ZM9!*JMn8s>SnEf zX8U`-3B-83Brg%$YgGwgj-9h3{{3+_V1>26km zC|1m)`O%^JAWZ-56166)GSVWDs4SEg8S5j@=b8c*{uVzM4YoE4`NFHsDaOY-M=Ved zKH>XJz$j>Z6}VXpjyDjFPlF2`7=oWrAc4{^hx|Vc9BmKY)vI%XDJl|;!eAT;gu$iPKhp7Z4EK6+1MexpYr>cKT5uI?SPT0(Qxy{k(+Mxy*6hoRSFAW2!m~AW}`y zt$tvsBro2pHU~V}(1aui9g+wa*2$oHJ6`Q83X!Oj2>e%1d<1hyr&;(yV&n8x9F|ae z(bg2uGOEfXM}EkWYQDsH^7O!<;GOwC8N(R>f&P#Sp(tlJ!9fd34G>W}aD7CENsxXf zQeB}D7pY1G$zw@SIU#YEGgNe{LQ%_N53XF$AGH5Dl0fnk@y)$ht%^ZP$2&aot{v83 zyckB%JQRhtMVq>m47mAAl;yMP^&e|Y7*&pgc^IN45XOiCct#N+r@?$x5BsGSsfZ16u;Buq z!hJ4rZe`Z7Q6licV{HJ2mjPGi-v5D31TJiNc&lYdE5<8Idb%Gq1}05{JHKWe4&@G^ zy$aqm%PKqc23CO{cfdiT5mx37_@~`KZD(Gtum}THLN&W#0Bhx&L%HPNN~fe(F|U4V z%Yeo0JFluY@O;QxzV$!uEt$Zo`qo;dBy@jKDjUeRjl?(d#lRTJtj6`%HR(LqD`^6( zA21jhyqeUgY0Q5-%vlJ^KcnOA{S%U(-dI27%DcSU@(m7uZ2qwSf4kpTQlPQK8oSj! z|IsybiYLW7SI7}H&G_H!Oy{X(FaPr-$iBnFm02<~D*?wASRTD?bgw%;uP^q4rZTjy zsh6!UDVUIU?;oH(4WTq2QeClRJPylKbQbv8k`%u*?PWbNz+S4M-<3Ne^i=i$G3t zZ_OI=3hEJ`As%^L>r~DLM91hj8%SI|0oe5y)GB|}An}4?+WjJXMW&7^c%{^(*G3I) z(VS5Gp~Il~}BJ(^XnMXCuI6--8ObW@pJ4zxUyEu2M;{f$sf*~5X)YEls= zfHOSd#@fQ>MuN3}ul!beV2^%rCG06-1Q#MykW!Gal{Fm_lx?w;rh+N!vj6EOfPDP# z!F}@m9vF~;i07mxK)u`ZL!{86Yr2zT?D@ZpT~dwsawoG4`$s|sZs3H|T%~Dca_gVc zu}|OC-p-fg(6GdIZ0a4ehW3C@{>0A2UxU6w1}QWgFsBn7EDXqE100*N8;Z^K?S!oe zMaR++<+v>5)Apr63??+LL7iF6Y^&Z`l_}V%3=s(IM#MjZ(>^^r&85u0S-wf7P?4Hx zZ36&YN|wi(K6JPg|FI@&J8=pj-|IlT82=jLJI}xr`2?8Opb%S278)<rn8hT1UO!;dIITfbo%g#kb`4Iw7OeE|?8TG2rg-R8lZsZ9 zRJk-!=6_P-@OtaHH!SUI*uMf9j7MvuHzt1C@$A}}F~mP+G;&H;+M<@%aKcwxV^b9O zl0%F(x{{;vYS{3^hX(M_X9NVb#wsuD5*rZ*?*6wYut17lbD~VE9|^u(wNs=+L>fI^ z=P0m3-vPIAtu1V7ygfPr737_X?Jkw#qZt{zF_k*$SJdK7vxl$@A^3j;BQMW+YK6WD z8Z)MHEbHI?V)J~?Cnm!!V%0u`RMNIC?!QEe-<+7J)WF7BqdsGE9npoeWDX~Yk<+Li zNA_B#bs5Jh&ypbX-#%yJ$qo9`2IgWTj*>HpA!PF<7e(NFR!B6fB*1?aW7xn`L}qa07bfD3(j>-}AErZK z>Ux=Ra`L(HO9`AqZ+Oa7O}OEI8jB9{>JrEUAh^Y}E0%aA&foV)74!1$oxjt>1!+GP znZb-W?It@oy#Vea5>NC7_KtM*$~rkbp?)isAXy4JFic!VGKHq4%#dx)*D)croaj(( z7es(@O~g1@pI3h$%SiEVt=a$|`v72&j9qW6yvPB@2^IBS^d|-H^-J%eOrLmi2L1g4 zd$x(dWRtjn6k>!8O8E((d{s2yyD69koO@Vq#PPq0)X$Sw!vF%D%7sveaCe*W99j_4 z6xh**H9-I%o}}7qov&qZJy22JDn2v7CSL zcs#6VUii$roS!DFl*&n^HD?5;Y$+Lr-yL5fkom7|;q&8+YO$c{%|J;4RGWHW*pC?tgc+h}W6 zsg8#5pJJMH8u?}#7H2q_?&2qTxM~VNR0Qwd;1TVJD09WO$V$wjtHjDcj$hwQe&Ow1 z+P~~MY)8qBXI3q`OoK%dCjc9Ib0z}oKSFA`jqtr9Lm9MpTdT<$EzqPVOWA3|*G*dN zNj<1=^%E(IoAU#P*A`8E(&Ig{Yq<3XT!*4M-aNhz;plk^2G!mek|oi3;!VJOUkHUr z^yIuiKhTIrqFpVi8q!x(n7yzZu;DU%<|$=nqhSNd!m7!|%9WUM5HKMC7`vm2KgfkH zOdATwW{+^x3IRsn*_YQ=%4Lvz@*8lwaEZy16rM2Ki-!n|~FyPRcG zf6Y#SUh>P20dypBjR?(Nym4QMgk6xDT<+fwoYguI=%KJ|SUBfCDhv3RVS+z<0N^1; zUddr3Ra?V1q@$@dIVv|4vptuAQRtTBh|9Z*Y%yAXc-(wHTav(~Wc@hHc+=62J^|Bp z?lI2iD4|2Be06T9FfId=xM(p9^j55n!?6d<3;A~G;O2|f2uGARhRur7)jIs^)IcS_ zG6ShrGGDP~bxq+cz3q4>307SS7n0_V<&5(;m=+c@oXr-g@1rQ(xQ$qyXwu>?SL_6T z;NyBKX=s;ye_xpz2I(udxmnx89dU7)r)v1!x@C@;dPbQF2Ma_AS84BkZ*tPHhQT34 zP2ufRLAgSD{rD!EGZ_cAJw4$gbn2W>+>miI?%qP?yoF7;c9-uV7K{tN-o&H@rL zJGu!E$G*xl46*_BO6Hu?J(#>x4FHETFoLMkuPb+oFt#Ss1p$L#Gvs_!X^IXIpBVuK zl-iEDhgwxE(pX{aY<8xu9ntbkHT|3CI2k1DYLFS_y4vUggKOaCG0=hZ#;AWMIDS8- zNV-=SFg*;qz3B+bHqg|a<3v;_BETc>k7m(q>0 zZ z<(RMml@AnAU2QXHav&zRqmg~?1t*RLdi$?&>a2N1IRwf@9;+*RWaOtwsl0{b5b!Eg zg=Z>LH}m-x!SK*bHkN>Hf>`iN_fA0`fSpDK=cRY1N#0ZIF?``D(+9i!e4;l%*Uwqd zqWNyZ?_aLj|Di0#tmL@+%MYA37{hxL0?u{uev${$zAjY>+;7r|CA(FmPW)oyNG2>U z2M<~!#TJE`{l~NZr&N-iikarR{#z7OO|mp#)B*%l?SHa1Cm%Ur$z8m@P>Iz3)>v-q zMY0Z!^>J^ZgP;V0TKLytu+U>~_I!JQ@vAM7cppx+Ze~IzQIrD&BbZ}}*vYmosEmaU zOY? z@gy>*U-dlbKzl$Vc1fS^G3Dzofc9>g?RgRZ`O^8t3H8PbJTKfe0oG7RfARHg9ELLM zA!CHqdWU_^koQ02?)v1lQ2>lL$VL%giGTGrptXELgdCOSAH#m+4XRq^2u#_*B{3#K zu4^kUi1ulWi8p(`ZEtFo3#JO$eO2eHR)gd(oT^ECfM}qrrl^e-^+y!p0GHZ%KECYT zI9X!gn3-uwNDk$I;+S-s+euliCbuq$K?81qApJQG)!bF6xdzSVMpSl_q8r9{|1KHy zELM=DMW!@fASeO&qDv%QZ~>^xltL2XCErvYw234C7EFk!E9K9i^MWj22FhV@0_*95 zfeg8f-3pZ4(!*`N+v067*4}RPv7YPO?H0DPRGk20RE-2OIjD^)W6SD8^c`$;Y*Yq> z9=Leht0d#XvrlRNG8-P!{zPT*Qrg$`Q_u|B@$a<~1(7(^+4mEv7pH!PHW8;{>lH1G z2K&k+J104ke=E<%!rko??PR9!SDAz<52W{L+7Wm<-M^r0Hu)4uGvzx}#go2@uGRL{y(3hwDO%&JGn2m)^|4r`KNFz04@g(jwJxo!WMT)Gqd@GC4Li3v6-wgEej?{1)GzX zp1LP&4&~k}En55^F|4p8s@@aZCfPGli=7?QreQyKyR8V@&>-hwiZC$Aq)K3v4K1Jh z8*Rvm2wduklqE=GT`RU;lQB33KoE`u{|t_CPPHdV8s_=-y)F0i=`7#Ll%S@LUugei zpd@7uShLbIBJq1>!tWykBrT>Bh;8}d2(5b@akLPPkn%$?;Fu&d`sSJbXp76#MmC@4 z8$0avFnj)AOpi=_IA(65PF7FXnpqi8f{!?HbKfl>WZiqp7FcW zk{cJKiNgi__0rW{KU8p0EJ%$dX77=5b*}Ym6xpEEx&9coe#W*5$Y{5zKNsZvy&NGC2ZG*$xsM2PfZ0*rLF6pxX;gS@h z1t{XOI<}QEq*7w#M-3(D7#5Q1W~3eQIMtSVP3}t>KnN7nU!qt7i(gqzwe8|`N`FR-a2Y$Wz5k~06y|_5 z21Rf4vECg;lK(B^JHRZxCgR@ZJ<3VF-y?*0Jfu5XQpR?x!Vs!~ijhb$v5N(Hnt>x+ z3cj7(iUZNFb4{CVYq_a!Bwkd4>GqjO*ZR>JBI|GNd}ErHhI?zBW7{(8WMq(XHRXjm zMAfXGk`K-ZLbx9sAKHi9A~}7;Qdy+NJtKdnVJbX@+1A?t^Os&U>nIo6G_BJ4Q*kZW z9bQDna*~TT-yoNr*b__;IE$%y zJ-stV!YHFt@}mKi(!L>^ZT|h*G9&@;0s4C^d=#k$PpMmb`V)72w>+EQ;$R=jawVia zgB$G2ISHKHAE{eI$>-$8jjT|%GuaLxQ6WklBgOD@0~J^o zM8fD#65Jip@KP0MKriPam&q^hXWk3X(hq(&LfMnDTol>p3R;o>!#EN=9-p@|bePWg z1N}|SPDKMk@u(m7=EJVQu$36M;SeB{|7`{p@vwQMM9zzh&R#PAmAI+h&D*3VrqpU= z-c!x=4?eKbhgb%#2FdBcY8Js#U6GcLhH#Muq$VC?nfP$FH&T^1Hh&dB9ZqpOvPK|K zk-=2HgBvDokwXACN+R|zpu37+(N5utDz~+h36MSIIlt`Tc1<+g&GvjX!7}2Oi z;n{bS<-atXP5E|&e?x_Uq1EFI=L*Rw9oLe6Ei3&6$}420A0?J>4s|h^%_E2S4(x5i zOrzAS&`^#Ki~DwHmt3gd%|qpY4#YT!y0Yg=J z1G0I~LbLVDFSbl ziSzDmxkYwPv+OqTk7y}oF21?usj5<*T|dB&U!dC4z|TDG@q(cFoW$GGJWV@EFSxbP zziY1F z|BRt)x_*_jHRP(jB{`S?+N5n_uepatp583F*wZF~R;%7?=mRJP88%8b& zhGzHFKg{2;sidL*eAX^rfd=?pm#_Q`ms7uKq2+2}3l*w*3Qk4&yR2b^9oAig&BQ>m z$y{fMxUcwITRUPQKtLUhLehnP@Jh>dR+AWtl++(kE|4hdmA@}qN0;YX2&3zRe*Hg~ zeTPTa40PnhR_%Wwc__JRVT_l5J%nD*kj!L9@a^&cK|_@O9Z*nfZRuW?td~Ql3~LO# zmvgQg$hTj&uB|#Lf35p13`bxf{QNSKjP`MG$Vo`U^d>>CkNkwni@*wtEm?vBr>dq6 zo5Yla{|34+YkSDLS1_2jMToV*$6Ei7ah@#+ScVm41|4E{ea#B{75L6FX)ak~ ziImZ;1d*s`IJ;eJ;8-D}mwlnq6`%V-_MUPe?j=1~f{Or3K()VfEK9{Kd7Wag5w}n0 zO6?kCoRL8lrg6vd4AcVP*?o4l2Z^rhb#$8DFH4w$>vz(b>T`)`;JCe)D~Sg#6CA3* zy+Zsu4OF9ihUP17($H=Jx|xqxt{LBC8;u_p8$T|yX$0sxLHWU7&?S?a65H%mAbtdB zZzPv;X}0tPZ$cHhRnw>C5Jhzm z1XQBq1}WtmB#b}a0&laeYEu>#P8eF@yQKa(0=e&-Xz0yjoy^RI7O+Q6Feh4(6W+Ee zlGg~H@la`d`EbH`6To+9L*>ZI!i*sN{fY_rHr24)aqRD`HYE#G2_Z!#@dNz%*6OHp z94ly%izU=tFII0=$uCC7w+1BIc9tt_SM6>5|BnYE5;eZM6Pi4ConUgjn8tUYYziZB zKzd0~(7MoAF&gOQWuP6}H3@Hu7h1&s`y6oY)*QOjlia|85lArGinWD%qe_OM0mP9KCc%=y zjqi)U_r+rrygA5lclKuO4c;=Vb?o{rSm-ScoL-$m7)9=wy$1p#F!?Gxtft69OeCB1 z=Q{VzXP*m2hGGtH+LGH%=usYK1QGN6K-P?KtOCkJjR>yPRMpFS?!<2Dl;EW#cRKbn zQT0*UnacH(%vudQeIt5VNpc;7gE6`G+;-8CWP2fn-`IlEl9l1;qRX<7=QG<}1|Ie} zLxrK>tmrl~ny@UI!InR_w3CU8|11|i3YR53XiHWPQ~c~07>bYx5hSUo2vt?^;=HoS z7xUFnqd9{Ms65N&R=uE}qeR%ZwO>4Oevj}Y9#g0Hr6hp#Pf;z>vpf@lDg!7anIy5% z{*J|>_brD%AQ?f7j zA@U!wT;`4pP`?Ih`T6jGDd^kn${`<|E~5|Jp$tV&$t$Wi^vS6xq6<9rHFUS zQ?9haa$X=FlKY8BZ<(gjX9>e$!jGF;r$Er;-Z1hzpm!hQx>UP$A+#^RcdJn-2^G8| z!1c`sxsMSc)b~VGD$Ee`z01Rt^OR!SPE}H^yR%z%Tg}-pq|?gX+K2Qgxs%j5L>lgT z%El7|JVt`7RShgAA;eK4l)R&qW+y&uHEh{?*-$}7)m6VoR8X;3f2#gVwI2KJuEUur-ZcP2THt%U2Dgp}UB6|iri(H3XygsANaxUS4M zpVG0(nkPW5C5rCR>c39!CBl9BDv=%coeH`E`7rU$%4F6Gr*|aMcNA>z;CQtm!BsE^ zvmT4-u5+53x@}zw(b*@Bj!+xrh2K5IJrD+MP0W4^6IV%ref+AjkGu}aj99{|_1ugZ zlpdavF%pq=V_H8q79SGqBdr@@t+}vZPq^Ey-%HJuiF7#DsLSHk7v>OLK|WMnL(eAC zu8rdOpa5>cl*SVY98ezT(QOw&(v^sBUH!4PHl55b?rS62^CdH2w+k1`Jl}8N-=Tv` zsccv@_ycrV>!!WXXY4jRueQ7VF^^lRgM}4mdmL@}Et;mRDfp{UoC*fxia77tO(heb zICrS1Ai!78y9zp{Rq8nhll#hqdJ8?Cd|ks4i^j z^iT_g;AJLjGfZ}_VA-Uu{3avyhtkras;KMpLfIml9+N6JgIsa+QxADf=v%CIW1cIk zWL3klkfI%&y#9&CKcM$fP#5%r?0z_tLpr8|UhES@aXDKRfm1tha@Lbuc$o9Jg6Mhv zul)IO#x^&@Wp!6bM-2}Y>n;Ds40AOkXvx$|`{+1@HPzNwnoyexv8b5|1CW!8qfmNM zu}kXD6>d2*o+iv7@UaMkbU?{D^8sLJi4B{l^{+1;;%C3!b(v$ z*1na&2(un?k2ZOnh2q+B1jlI(U+||uxjRw4B|bP%Wg|=;CU8-P{{G&fzv;`ZZl?a^ z4!IXd+ZjrnJAg)oJvT5bv4Tidz0Bm^6A>mQaSpP2gc<(Rm=*N4kc6@#;nd#{C#$+p zxMJhEC>^M!fnWE)Ap`6#Z?KBjUCP}U=Ms{^KkP4nW+AM$@mcm^VF;5=&n4#G|nmmd30Hsr|=Z9v=Oqr7qy7MRJ36Jz#vK z0%xxo`MUI-2%kYR%nkStVND@g=Z2`|wl+e4^-k7Wqw3{qypMT#vL38xSHS^8JPk)|7vF~Xy8CETdjF za}jl%Mowr<&Yvpz4nREhcH%w^J)@sy6Qx+t<#6t>Kx+Nk zcG8$V`nvC%*^=Vj_VO;H?GNE$hrAnJ%rxef-Lg_#A^X@w;P%QY7=H)6?3U)IZ5d6w z|KLOY!`cvx(Iiv3AxLQK(VGNme4QT<|K^13lEtOI9*thF5B4K1{c|B6&P95?&xAxB zC2w$FCbBWn@~!kR{grN%;;bVTgF(g1>xsY`Q%~p;Vub-~F3?b2CQj<^F5u0lQox)p#1?0pBAJgfqHqaFzdDqCU^@gnFt~3{yFiG zi>=HxH^d*n|90%Vj>(}fMvgQAA1^QCYD@sW`F{2j~ioUakTbujInN6m?o!Xv2J3Bpjpaafek`R^ce%P3R zo@K7kascAOY_$g#;q3dj&=^ zSw3fMpf+!MG;E-AytR@7_e`P8@dQp_$Vf3TFJ+tp+k{Uy`_%o>NK)pKHb50@cxu5> zV3!brWJw&5?hQM#`>b^|Sqteqlxmzhx$ePFdrIZ|cq?%YMzjHbT604Hp=>Llpy9&7 zlj2#1_g(?g?^*umEn4a%`#f`;kODL0)YVw29nRzubl=!DOVWms4He zHPcOZPT-PFFN&W^*m%JbiUFM#jXs159BTw@RcmEyVm_mC{#kv^(5O~KOyEc{tPh1$vT?-2gZB>iPQaY4XJheUuV+t)K^zen{y{Pjf|E>krNz zRbG`gOK*f`)4gR2L6Nr8Ly{o$f%!p2d|y}M7-j9v)pfX5Pks4dZ?SkG7X{~YSsphZ zGxXhzUYw+@h_Ukp^nAy;TmgQb5YYXwY|#RYg?;yBEqo*yFu(+l1l!o^9J+3e2q9C1 z2*^XwTe`jvq2B@+DfcGvgC3bMVv^VRYdGX+LM?{75 zY!YtMQ6a@iMkfs(PO%CmVymbMc8vHq!I{5sZaw^zk>z{*HV_f@5hEHDb6R5a{$Uw| z-dtrN$Fr-6W_s9W8_BKJa~Rb5yo(tqt3J|(H%}8|X`-d>xFJB6ru?xOkt?3itoh|{ zw9!{qT=|mU?qqOdZas)qh2v2E1pDk13dJ332m^?1;@fc^ywRL(v0M>Fo!31Oq9Rwx zQKcMUnT2XY0oi?ZsPA}6Sx~FKg*{?#J~m5SDv_N2U+tZuQAS4yTRrUEyWV#y`YfG9 zP94yHVyw_L&_>JgcIy3IPR-YW&ri?Wtwd)029eWbnD1(W39evcfet6uw-s>7EBY%e zs|!sH#DUqnCVibtHl6bQf?$hxwh4 zT+dXG_N)e7F#>!P2=@Zf@@4FTrpsO2j5@*Sa0<@%gff;->8mONkMudBSClURc^K6q zit|Ovdo@=!H^RYGnMJ6p(Ja{3iyeABOrVWBrznq%bpo*fJ8w_1S|PD>w2P}_=K6FQgqvGn|X4dtUwv~T6!Fn7d~|Aq&0Y*{_u1B zz+bOrdM-5&Eenhj_j7Jvix!s<>2VJ;?P|V{cSCYiU4Dne27i^}6(+AJo%?1DrBIBp z`tY|v1#*4mRLiS?A){50sKN+Ycs77$b@K6PT*@>qj}caH^SxgCjsP5r$*P7d)%dJJ zDT>H>4~Y^o?>GLIl~XSaj+KzT`1wu}@_%tdS&NR3+Q$89r-L7d7WZuNy}GmNB<~`P z7!2N-plwM;(Zt2;uZa#b8cqHHZcvJ)=>KJHd$w-62%AWN?w$Dj! zL&cUI?m4jCg+|-AX%p{Jv&R#Bw+XQ}9QG7^W_uBy>hYg)e<+=LqQv(vW^uZKvtRIw zrE(JFI!&Lg+x}^8xd3V$qcE^SuEuUGE@5l&J{%)ZL!n`A3(IndGVmTP{S}oTHzq)w z)oq0t%3$gf!}HFKz2sVLmt!`g%PeKSC3uBz4`OgQ*}p0f@-0x2d};G#rZX5a2`CDK zD<7at(f7py#vz^eg?zsY5$8lygZl<$s__yv(_%T0Tm-l(^8f&|+tu@95qn122xRcH zR0QKaFM_}qx$-~XnJ>eh5Us_;1qGk^q*#LVZVQ``nYwi3ZOr~FgDB+COHL1|bdV7# zV{8}x;`|Qym#zDF8~kcK?{hUjGvnnCl>PMXb+A$ZuZH9Ajds7%_r%esI3|sAN?Y*1 z_*&?%bat=xk3%*bo;^vJYtH2>X20X65>qPRlD7Oqz3F-cYH|Rf6>e0JvprSIJCiPK z#%->?QbsuqBl}BDfxoIDi`J#go6x`oc%~o^rBnQ@|3I+{A1k(Ys!_;Ds50&(SILCk znhv{ZC;StPT+P_)F4!~rabDeML0XJht?e>omNIK{6a7BV;KrSA0z!|J6(!3fKB-~* z4TbU!=Rg(HK6-?-zr(&wxMpgBCEh$A-7)53sF8)UQL^~p`R>{_RE}|{5#`iI9#Hf+09mhRrTO+iTB9lIT zs+`&|M2h@FKQ-19nOD!c0RM1wdc~|*N+kh(TNX{tv+7=xffhey#Vfr2y*vE!LQmySQ5HlQ;3HHBr2MoMDQKxJ~N z=!nJY4b(0gHKlk9shKON5|Q#QFPt*CW*9I`Uoy}Pf#m%bL$7=tgl({QP93JSyHK|I zkOLf*$YJ$ng)Vy}uHS}(0!ngs)TIdY<^&PX zl4(;P?v0Pd>GB%vC4A+JDR26Wnxmu(V_)}hPNL@12GTQh<@o(%VoTZb+S7dfUVAy{ zFrgB^Xpyh5D~nY+BaoKHiOidm|1iRP*s7oz1BkNqq0zXwqozNjZS)6CtVk4d4`^Qv zh;b$N#Tqo@On{AEipP_Vw7@2PVQe^mwy~FVcx3xYp?%q9)gqk zu_*z!22o+taZRTM{W_va{5?c%e6Ubyfu;Sb<{B1UnQ#0=6sHydDR0?%ltc^2kXxg)#{LsE;s^_o>0P14<) zYywRi;W6}wrs%f6tUu4bLx~PZ9u_MgAWGsy-OJ|YOoVA2m|4)Nejs$v=o>y-v4j~| zRy7it6CHGvi@J#J0*w4Byw_#_28(vr#i!WofMTJ~iMSliwT$WSw}K6fZ0=V=FWf5<@lyx$9&5hEbdWOZik8RxRzIx8mQ0y7tDe8 zvAjn%%)iv}LmZVvSJ%ftQa`s>ll`|M`7Ya(&|J2ffuxK_*ixY6b68>ejuDnFsw-Z~ zHfk!t2hQXWEuphEQFYvpB@b^2%;L6uw8vCg{oUtbOf{{MsEBf8{JL0VeZ9~_p?vHU z5FDn(tAb}}KmX3UfjKx#$mPM+*3H|NY@s$5ZMfiezt{c5H2)S7>~T5TWCl<}y5BuIqD0Z!RBtxlJHPw+q}pHna^o=_P(axZyw{Wrxo5Mq zCo^fQ!P%9|PYgitLiB59>J!T-+sMX@+B)||BfItlpRyPN`fW=UEj@yA zp^17|wztHf~)>y2tD< z8|Mx@y((c;Y_n>5(PK}rrRGOwSf$@QLp-uHBL2w52;6?hY-d>|tvQ0*>B?A zv3}Gjcrow~_dw99SCxN$CfVTfKRoB+j&I{UK# zOy}up>(#_hD(P>G78#QQxa5}rE^mH+jBOY=Wpp9imUzJ94<;FuHTOd?pzRL+vpUks z3PpUfrumHWcUaQ+r1S5^#ElGckmuHQru7*y|1Y=A9h%Al4I{noT7{=w(uxR_g1Ca_ zyIH zI9*gl(2VfKuML4F~@)y;Im1JfvQMH+1ibIp%0Ii3CSspnq2oII0dT16EgNKJh zE95LlR|&@G!asck7c5GN4N-@;8a$<)asQlsEDP&sHt&BweVbx?i`6V}ZszxqE`VsBnV%dM5We-78GE9p4MJvr+!*^)Fj3P_QSSk*mXg;V? zH{AbR^6D<&QL<~AeWJjGkOkgdUf zrid!x3zt;*cZex<<@_oJ_ASYVH3jY_SphE|1|?BiM= z2zjEzd_opb=)>0w9piTWUZyyRpo>HJ>`MqjgHT6WDXhY^odwCH_}|PlUeS~pO==Tc z%=^B))Wish53Ue$h;KCZk@cN4v;maK+KNq0;vKw$wv7`xhfin^(783xvU-(ou2EV z`cA|j^ptfs^Xl351qOI-iqOkI-OfNntW89MQ;~D|GV+O!9Mf4HQfL2z>LoMow*(vU zG7k;fmfu*JgUFbAQx1+s44O&Ma85@TOK&kw(r7o5e9%e3g^8#3jy^(f367o9-{=N$ z3oc4#Ol-^-&>?wt-*kY<92!!?66U7{stJeaiy5P5Q+)wUVN_L^_6df-OCd+($L)=n zX;<6JWA_BZ&l=*zMVo?bAF9t|psIMGq%o`E zjh*CUi=m@PxKVNkRSJ>gmr9z30sB=96D(Dw?O&~Jhu{*T=BD|lM`6ep8Q6n7;G7LA zLJK9Tg506F1(eequCT?%lhsYUsc$!ibjyu~Nk9F~VWwpO0r!w(4X@0HPC%n6=?ThF zZhgy@CO+d(Oe`UT2w&du2knqWvLoIfSGp=3tPPFyu^R}smdNO<{r`X(Q?-X7_pEy= z^G&RMwQ>FyYWM(jon<0ZSQ$FuQLJFZPNzAMN^9in!BU3jx*Dl-ef36Lp1Ey4X$Bu$ z7yDbtSd+`s%zmuTfonvx6K_2CkU%v><$Oi z*^pc7h$IH7t+~{y=_h#xop-e+Wp1&+E_2~4LAO|KA;!MnFoC-sqj%nZ-~Fi*J4JpI z_ljL4X}f(t?OJjT@M-3JyPYg^WZ}321@&DWiZ*Cx+zW3lIFuDPRW{$Bvp< z*TPWnAK~*N80`Zwumh|oBPBKvtVzLEZBF=r0hk<@7G_yW$a_9!j*P%@=<=Tk$bra_ zsad6DqF6(61L0eza8@J%jKJN&xU85iQ{W&0W}<-u7vOp%C@W+JFhNA7^2-JP52|;!0oqlv{poGqIHPX1_Z6=D6fWuGC&_N06r%xDM09Psw9Dt6WeOOq6`B$fOGJ+77rhQkc58!_f7IY z3`9Wm;e8UUL?sP`QjRX^*=o6^7~Vp0;j-zygRoDikK#1KI>xeX-t&IDnug zx%H7M$JuktqLhDc>!V{t_II5O zBkacm$PWY5_xF|z0X!fPC;-{BK;iz}5PiF!!g<&^oox-+2v`B(LycPZwGj_JnD998 z3N&NvJ2TT)r!-52(?{`Z?3iJyg4OlIh4^~r5uXLUo_ zQ^S9!Ka(s#o&Xp)5EL%o(pFi)y%x|%XTaaAspIkD6kg0HzB6n~(c~B^mIB-AsOWjh?@i_b^K;`66aS^F1Plj*DyfBKesl??Um0L7+K3!BK%qiclQbCK6h!AKhg~254k!O2K`~^Z6efTf7(E;igCPXwIwCdQ zui;mK$_a(N^_dqDOc@D`fe9cvj+cxG;Ar}Lcp|6o22cT=lLwKX-vqxdFi?9m&;jfN z3o`xjF;4IvzWL(fm{ekjN6ue5;84*4=}#5YEA)z{^Ah053xNZ?BaRW`crYN73_Ry> zb-Zf*-aFpU^ZeRzgF+0u{;I?MJaUkHTRs!kh@kTGj0oEe`%|o~mAleGx2;k5b2T3_X7u8`+ z3v@v1AVGwS8fXkr0ET%jp#Nux43bqqi&wP4cY2)&z;bAqT?jK&&DjuEcH{3g9qELQ zb^w9{dAhz>0UX`|&)bH%4Y&=s4Y&=I1x~4cl!|Vd^#vw>R@q}`8(X*$sETM!=r&^< zm=X8z>(@7=_mn1}Tm#5Jcm) ztWf?lnQ(zP|Dn}npkaZ(^b9r%i!1{vu^Vu~h%X4H;S_dEY?s&llx`+W`y-g)ui~jg zPW1tzS<*3=J|@D?YwhKN7F5^)0$F0Z=l;*i@|h-N5I)L`wH8W(kd?JWNH|jWBq=}?+nstU zPjcG7#BY#3b<7r^ez%740Ji$g^POHvDgdrsAC+mK!bTv8rpl9Bas;mD^tmcgGI-)X ztr7=MJUdfoKeqzhf+le1g#G^jwSHYSYz#DqN+!1?bcRuX(Yvup{M7;JLvQJN2Ab!P z{jIYLbGu%wA#u94M4fR|QId8K-mP$*MSMy#S;RE%sAhLOF2m1zF-0i6-;oRvI?mk> zNwr7KpHNoMh3lTK+N1`*xOy~?9_QXXY5(N(yP31O2L;%}!Kf1&^%UMezO%gIIoH(? zX}~z!VRteg=dKupk}PANHU#oNktH_{SkSzJLaAkjp52|`k&&|sY+9pT*c;@O|54YB)da~@LU~s{!4+7fs=i6MEYSB( z|2LeHwEm_3#n#r%(D`G%CN+&uF_%V(*aljizif;@AIdr&5YB_bA> zrOQ@A9UxHCApI=OEE2mz&7lOvwA| zw9%wp7SXO%vIymLj^3A)E|Hd5{v&{r6-6)ck2dmZIxsIid0H*N8sk3DsNT}&TDLj8 z_NEhjQ{O6*RaS;`D6i#unX+rQsOg|XvU-@ZLY~GshpjpgFcnf*$V+i5*e`R9FNu8Ka3!nP}=X6 z*2)H93OmQ^nC=%P#ZL?}mOh+;wf>w6)KiDLH?^r*x@f41omvK(&S#M|5`lp<%@2jFGvu#_g_w71+I6k#?b*zALxc!u;a78rh>8bC`9ob6bcwd%Qo^{=Q9 zA31AEnA*gLyt5A7RKSrKx1pz9bU~9HTuS{8czh&K>)X3EQf3Nhjw0MAV?4U!;@Ab}WVrCz+Z0f0?WJ8UjrAbZe>ZS# zQ;d_^agq=2XfGqjcmuQ-zJFB8ShqBtA)qlKhD{7Nerm)b$Sr4uLjBVm@b)p6Ug}pbUa@s ziGn7Iq{U*_Y<3pJfx-e)`m#0><768SxalD;IYTW(DS27|!MB}7;<@H!{SQt+=SQ}C zxP05qlpdUV#Z#&4s;@vF{-|j=@ghiF^W3p6#2c1 zZYCcqq3Mr&vBc4pQnFWFrYv!t7+gLbH`k;cmc{y<6JFa1yFtd2D^~E#K6~SDlw?=J zANVTz?{^jqfWp=>xiFkC*InP*#Z+lcj#?|QEBZjhFqnGHsYo@nSS41@pw7Ob8V)5ztv^*;iQ7YKrC2sMN(pR z#lwx@CY1M37LdwmtcCRTCgMu-F8}r>Jr%)zFtyT;j!Y!jETS`*F9=$-xbT!R9ew<1kWbebR!K~ z)#f6!iC)LofRPqJ+TLJR(j(FuSfX=sn)pOY4)B% zfY^r7#M8yIAZ2G`V}4!u%z67UdfUT-&+y4eUX;UjrI5h)4vwVff6le=+4U$pem27h zVqpUQio7|%q*q90W=@%nTiA+5WuC%hloA_f_fY)*Yff_$xz*)GxCfOpoTV7X=+EeL zIs)|rQGfjlHBvatldoX%87t)$&;R^}S>>4aFHXh@M8&RSLGgi)I)LQ(-hIc;r`j}JXqN+Z`B z-$1>0+!L*|6g@aPVajcMH;-+!Xu6y)(IX{HsQkE9Fg0l+n0)Sqx_V z_UZ$OBYvTO)RnACsP#q%Hpg6VZ)Us%a7G0m3aDYGgri3J#9%kvhDgv3pKQW1Hy<<^ zkx8U*X~+(ex{xHP4MT^%yspyQpc)|T9gW60${mSY*~w2(**Ug{Hc={bgmT|VzAim9 z>wuNTEDq17S)t194jIcZapRUGM-F>0ERtkPx%Xqoik%8jQ47GU`O~Z}>A!Y32J6CS z?AX#5v zqz`gkn{^ZIq0`W^eF6H>?x)#S1pU~M*FgM1ywWJ^^4%lkJr5pPirWb6MP5WzF56W` zW^F7-5VL-EAXoAWbE&$Ny)ttzBRMm@xD zXH^>$54hGVMLqaNJo~m72d1U97_FOjidI>00C93MZ3cl8hQ1-r3idq%x>K&4*Qb># z$smwqlm?IuX8(T3KJ*a@VG(Cy0%UZ?dmD$A=aEESA-<+65%qHM9w?I+KX2CBnyU6h zO_X$8!vg=)3{|DqB)ogb9I5JM+8|`yfizZax zx!UT%&Q;uM)-&DM@o<}C7fgiHr?}QB5XUtAgOD-VWe%{+h}7Iwc^dB-qH_g^-uv&^ z?B#hVTn81lw41&-iyR;qP_&?isDDi+t=6CxB4LbpNk@e&0u!9|ZBW0y-E zT{Ilxsfqj7q)z~i=-L}bV z00@geTDx)FFSISk2XUAH)>V=4hc`zsId{s$45C>!6c2(@fH#}@$t6$r!kzqDQ9CGB zuukbV2I)C-b&lQIhKyQ&-+g*~Yalvv9!K@_0n4Sg(W!6@q>cOzA;Jd?jsG;vKPerZ z>$1U%Ota!K2Td3-Vk3Kyo?5YI<8N7dU4G(&HNZsYX*&CZAeH#dfDdj;b4h|M*Ie-i zd%&xr1P^KgML8EkYDV5IxWme&CA)B;Wg7ycmOQNow5J@+c8+;trEmT)if0JFFACQR zh^r7@$D?+fGtf8kT>tHVKO)5+2@kqa7W+kz6olMVV4c?$VrDuh#=prG^a1|{nj4lL z#o}lH7M@Bo70QL$Tzk)LzV{2uHWNefd|(f2%pO)UDsgElw@*)(>7 zMK!9mJzV|y77{Y=8fUZ6T!M(o+rTt0X`wT`Pl5@bb}PipWcJ}o3UGK(?X}^I(Wqe} zWOyluA;|jO9`_?xgB!*@+4PbI4JtydYB?VMAGSQUZcRTo7=l?TxQ9&9kP&hXtW&;i;J4or^-mvYzDO%Ie zwyX>V>@UhBnCy(KjMw5Y?I5%O)8g)p90%2a+>f(-wm_*jM;6$- z#w4o=_224|IHas-)FYRxu3Clla(}02KE;jT2X%5UCp~F|)dY2pQtwO<;x4~#oAy7D zoevlOs_j7uHF*>tE|=eNF6gIGpfCi^N>!zDL+b-(E{k7ae+5y=w8;cswF!nED@~dh zsLdt?h7dk6`7$u2{zT~I9Bd-U8+D^(dD@0y$S#Zc%T%F8GZ{ou{FSWnI|3G+1gZg^ zVSZ?;u}}rB5IHCMo?&CJ?0-Xs7yG0#3ET$mV+tw4X_94*L}?c6GxgNeLTn)Xdi>}uS-4c#j^aD>V@%SY?nlLOfAFM&Th?J;RK|4)T*7Syux7<<6m7#Ch~gZUyBN; zzj1*+h#p68ySC(a{95kuE_sA2%Q|v869#S>8OXRwW{uUnXULUJ{dO2>=iWyI-8f4} z$2Y^;C0433Bd>NI2eJGC)UkVBmnJvQJQM&~(s6RXWu%j0KgH4KqL8SREC+}azP+qY!=Xkb49FUGIy;9^xz zNUeMm82zV;bJ$uSI$a=U_j#9eA;aRC2&n-?dsf=G`)0&7Q#M!rP zUD0VQTOS2+fApa?JY>Vj@sqYCZz`(#B*OZVSw%)4$&hOtVGf$<1l9fFyK{Gw<4%6k zW3{U-;Gad7#7gu2&|~ic5z=A6#Z~fikVLU?VOolixAO8fam_29v5E%7;W1HM`c4*2 zICQNLHgp>m(nS4MInsf)BSr@Vp{)U25VUgu#49e_7Fg3mFhCNu91~QJ1&AL|nkrXD zl9w@`^N_&v=NS>zAAJCcV+d*Jn(~0qFBo! z5Lv-3v(P{ngr@f1DmrB>5e3E-{X4Y(PkiGs!#G@QC1#@Sj>%EK6=@r=cLV*LbaA2l ztv8~<@S91Q<2T=n0Ed0$;TLosqQ$BX7D)0j97ALE|AV&^PJ9w+RTA)+yK8j$%zWhh zb}qqWeCeL-QVw8VL*gjCxtfBP7$}U=?18$uvJ)I! z8TG6U2LCR)leIQX$NeqaHJ9a|lHI04#>n@HrZP~isAC1NR2%gB=}OXtwniYwdJF4g zq&2u>V0r`UJ)NLM5n5-5d)lylgD0oocDklMqld>w2#JU}hI-tzG+Hz3E)Nu*_2_@z z+T<;5RS39g_Io#!u&tgHD${VLP5XWk*&Yz7a;H_~v2s%kVj7DM|kn;8MZGwp4pGX%=Vi5Fs52u=#w7$?t`l#DFzF zNZ%h{*d}L=>coy-LY0Q(UB~Uz{LyZ|S>ee_WJK;HKPQaxq*zte2$nSYKpRm_+-AM$ zX=Q6X1a}WKKvPJ1VgOe_sK3{;yz2>i(P@zgCw?x^%acg(7cGB9NdklU-S%Z12f}TG z47ac;uQUc##r@m9u?_{y=$!(pzUgHO{^W^gJH)rGVd_C8RF*h$V;?h^AWQzPmmR4bEC%v-s)neYw!qok0d8g{ z_@-PGz~lR_M0Ol#Obi>XR2wS`X9CupRxqTCISk%cs8&)Enoh9mt(?`-S*T9>r^gc8 zM5WUaqV1vJ-qx)HAR{T;ZeZa5#FXeiWy_EWomgj}^LJTrn=HR3#n2Ur;m4@Z?F=#u zD+Hx{Ha4XJ0m|AasIEZ+@45^@JD?lXEB!!-!H0^3=>smGX}*6?nj) z=b!-pp@xId5KUNQZH7xes{C^}15Jiy9^+gROCX&2;ofrxF1hyxRd5xAuMaQHZe+Q| z?YC_OZB>oZxH!ISW}-D6FXL*Ex0B z9g5%Tg3}ycmelI5C}3$v;DypSut#{J;Ur1J_N_5K|A|AkM8^jemxw(Juui%r4($EM zmGYpYSf5X`+q&uH(IqSAS(SaxehEq8{CzTb5D2`Hqv}{e%QvRcAA0K3{P!<{bXz@G zkb|#fwJi8A=7HHg^L_w09AILpV!HV1%E?j`9XDaf;{Y7u?I2%Y3;oF{Ju5;BifU zLj**~oi!81@6j0Z$}HvX7@zLjtG6@VPMr<1Oii8L2XkCXqng5j`2ft%Z6dtj(oFfx z+miWc7s%{W2|N0*-WH)mIY8;EP>@d=n1d_*&~=utCjcBgf;K-1Y@A3SqweU(8FrI;|{XBNSqt4~=2 zEHdpAO9pm5UrANDVuyV4$pUd z=ip+xe!ecvmSMTgu;7hF5|;ISpsTno+p1pU?i z&b+-;B)aMTb74yp(oMVePXg08wYegVvF1ugx(+2lNMwLhe&}Ve0HE%2BV#&KN;zrAJuBDbGSEzQN5;sT0Q z^gY(kdtQostPSE0x;4hw=Sh)`#dn$_xRg%dIoN}~d&9hr$O4B92Z@gz1}+ug>ZsS0 zCHH`HC4T1NpFz;huJu_pCx)hsAtq=oTf<%kMrQzC0m*=e_HH zj3>b+WQ`1dpLIWr9by|qMi1hOCUsiOEjp+{kQT=XMNEZN?q*9wePtiK^H8bH%ZY zJt0^?Sk1I_7BQZCCa5l_Q}7(dPQh};0l>i+h-R`}eBPHG*4Q+oZ+%-RSs_R7xtdxh z58@we*$ zo&1CvCxSILwSn0(+UkQ5zW1O1@X2T&F+_M)jBxAX{|b6~=5dS>lxkwuC`-)VK`RGq zTT%m4sJS`xSL{AhfFlSjb6f>T3n@vL#~%yE!btw$2AKzhYsu3695$!@PiB+18KHcOG?Cf#2++7oI zgbJETK;Qr1ZEQZYO;RYWxu#NgZ`@Uo{ZSysUho)G+J3W@)*pc#&HU0`$bsn$ni`>e zX_fcZyfr~TbRv4hg>rYu7*g^2Z;n8T;(t?@Ay}hK-n;A3-9=}y7_5NJ`BKqkdzH$b z_?d#SGsNk$2kCE!t?Bkyy9&@$HR%ciqznJgq0?vSMFM*}Ur@$w#y`*xO@C;o(a($Z zaYVh}eJaB`5abb>3JGG}>TNu77ubpF*NIZjJ&7ZmBMl1l)Uw$Ti&NTVztW zA+lqR3fQ&CW~dslK=F$TeF{}8%-*o_Fvj#H!Zq32?LT)yi|^Tih3wL3a;_cAW|DqH z@icEU*mVaY6%ukLi`(7+rzbM3*v$Sv3IU$N*V1UHX19I2#JcI0qE`PFb~4dgTbo3w zst->-0~%QPmqxd-=pU_553wNC;jZPJx!jfiN6E2GCmOWwq7dK^V=l+Gmo4NUfL2+} z7^6$&H6vr_a#KfVv|FsyIS5hYff3J}@KstK^*&)ABZB`J3Y^b($u=f}=YHll-FNIv zu9>oQXbDB{0ILv*yJi!7MFLr!=I=x%D+?+2en~lp?Zc{4Xt^R`Cd4N}gdv7HN(ovj zfM}Kl^4m#R>E`P2pDi$tihP~&{Sh3J_A&gwsqJO4J~8t+3`gEws3as|AL5ykc^o|S z%-j{-;EIaSo4?n=5Vzn1nmOk+5I9BsIe&2xcZE+aB*Z?9Jis6AdTS#f@X*;)-9Pa# zZygRVnySixN<+X#!MXW{H0Ecwy}{EdVVVMpRFw4UY!3c}a7142AlOHK;-(-+(S-5d zKxg+>ONC<`hoJWWPh3MC|3M!ND~8vP{rPH2{DjY^QCT>(v@_>Uk8e*{27!YzBmfu+ z%I?PaDBDZ@QxWstfnaW?d5x{3f3~Oji7XW&0@k4!4HySwaNn;rNS3!^g04ycLt0Dt zvBHTskk+ePUgVAu`dwHlR6WcL0}K}TarDo6X~E0nDm5GQ_o=r*hOk~a<^q<$!jy~u zxHEK_I_=}Br+yMkTzbs9N3bwDhPm$uAhHze59eV6H7PBR!CGW~s7@>zMfZ#f3_6DMebiyNv}uT`OX z1YynJ5)~*C)LZAwzRwM|)5bX_?JcEj25wEtD!yCIC4U(XYfK@KHe*S`3}BT1lm1*j z*NZ0T-n$PUw`YD(BIv=<#xK4y+6{&xCT6NJ5nJ;@mrQB!lN+YrAV{Ih{GBxbAg ztT`)T0Cr>F=nrhK!0&M4=yl`sg;kcHi!K$U z@prgb*1Sx(iV(L_8@VTghyw1@k{x`rS6C1lR6j&-;a^<6!d()cCpq5=)JOOmen&y) zV{GDfx$S4fc1I1Lv`Uhb&=(Jee0S-7a6V@*XX{a8;(23s8ni+?7$XG8eZm+xlVjgA z=^eljS?Q3fTK$)&Rz{Q7u7bl?4CB2JRV{vnY)HL)q$J=oEb0I|`?BTUb7x0|%Uwv$ zq>jNk;>&oq%`NR3!Ye_6by_q_Y=L_@?#-kJ3>CfyztvQjyA}L+rE*^6Fivq+Dv7dn zg)wD9z|<>huSlo%wPTMP`=Ku#AP-S~HEj&gu?4#qdjkE3XHO$jCH-Myvr_#`?6p6FOxv4oak&+{+g( z>Z*xUwGFkDxUbew=Sy;I7#bCQA8Sy$36kk=eRz(jv;M<%GJmclYuS=o^jGKTM9j{L zaE@sG&I3;|kbarT)>m5gl=E9Creg`kboWqW7F%ITI06)t>$i~IUDd{?A4{tZJ@#UE z;lZJad%uAxF=@fDQ5g6gSW2|LH144!%|LBzsV7r#H^wvjoaf0Rjhv%guc3k=3Grmv*B(#x8<{~aIDOqkX1T+u@wpR(n%|PFstGG znblh@u8Lz{fUE2>)I0zLVty+hMRP71*PYj8b=(0m%dSUB!69MNTOn`CAk;fy1)bp)a-Ynna3(4=e<9+IFi@2$!Kb4 zF9D%Dt-gn19R~M(Nyn3}!zr*N;p$9|^5NT1b}fdyx)#gqy2svNtV>{D?-0 zZgjGf%)EpWS{0GhgXY+vV2HNxpwER@(A65aDO`ZcD<#@|-bS59EByD5p3+{;MzR_$ zC_00B1YoiBVS8Ds;}IXqAIS(~W=Wt*jsD!h3ZA`vz<7TPTpI@Hi1O)t2^=~fP5#9p zbAnw6>TL`a@2*Q{cQcCGlBaEc7c!^+{@U-)AQ)ag6N;aM@a5Qvzy=G?Co+*h}e}i$+nZ=W+N;kPU_e?5!C>dz+Rh zb)FVe()J*cwct7cccLq)L|wt5^vM-1))YnL4+O-yLS7pXTVFirKSIBA|9Tn*ubIQ6hm0B4EFn6wlCQ4~tyu`Pd2EM}yNGlbZ(xXT8I}9`3f?iy> zgN$3TtL9(+VaT`HB9v2@@-Ga#W1kKIc9v7cptGy=`*Fl0IrU1f8=Zkf`$dk+B^l>k zgj=;NCw-8{9mk|TD^I*^cp(lVUFKn$-NQ?siZ1NZ=MLl8YcwP9kt;h~y&soCe=EN} z&v}!EW^1|!<-lH&Ko3oC!avEz`J=$2d$xNQ4vW4a=E$zy?xQOVdpRXE>`h?7WImT* z&*SlT!g;-Ve{LdCSia(XHbK94NpP{%{Bb1_I6T0$heh=;%+9C_H8`cfr4Y8vLR|bl zChWxwqr#Hd7u?N1WF(SKtkDa*nkNdahUWPp0as=3#;FmH7P@(JCA%3k*TUWlNLpI~2LH}ukVv25=E|H7)MTT3$xBX>hZ2FW)LCC+9w$Xci3*@8p*IwK zc87krNTHyDn}3M?`hQNNbIXu$yD*~V?kplpPxuM7)PQfN0S|dx*@-ly>9%SCmddn0 zgy`y_0GRG1#Z8m*`o^>eoB5#qH>LSFd0{(qLEgzfE~-@10Obrn8Z8LTKJ7&rIWlK0 z(bp0{E!TO2UOQ=559x}+Mndin3v?vC3a;3F7+yg{OG)0IW@CH0lurM|dW!~a=<>t( zv9VGD&}ZEKN6TpmM#Au9dbo^|W~xc*g@@b~AR^;@=^D8I`Zj5ZG810`MJwOAg^fkZ zsM908J0E%loq>46U+=pfdfa+AJ#<$EUl?PMvJo|~FHv|Pgla=m^2>~F8B@2SuySi# z#WSg|mnyY`#WvnwjZ?b0#|1Anq|de1aJ8v@NE~PF9!JEqsx@-+rh9Ec0WfCn2p*9J zz~4jHU0xFBVP^(3;j%htzI&5z3!ABb{b(7=`ULi4Hw7w7r$txi(jOEk^kC!w%Ndvp zS)*5(r|3u#ZyB~ZcnZPaC;mY=mx}T&id2S>Lb8Id!d_yXE|%Es<5w466dYg%TzPhf zqR6V#0AnLDcLMF5q>Dr?Yp{Kg4`<+W4^aUMszL2npB*1CRMsZ#q4r2>8f+f;A?Z?OWcEG$zfP zvz}L8$%@=i* z%;FwY(MGP#2;2y(!FyBeF3Tb1x*{xKPE_Gp66B%er#%%^^JFDXLz!nVi{C8a#|J4F#$y%jtE|_4DGa8adrIS&0?=_e@_KP4{nVY9_DDZVTl2%JvUmHx9 zk?T{VGkQ^e^_ZHOx^3w`0pB7_qf2}8n zw`+w5HDg-LcM81XdI5KBM=y19Bh7l<&3;YrYEfEbp{PI96_!>u(AlCmC~5;5?K|>F zzY_(Sd}A(8!ItYxrq+R_g*aUo&5agKlx%mW&6!bL6N$xRIg8}pdn3B0pbb>8b6+gn zNF9T1|6`-nzh*$z_a#}jqh{Li%kmIB21KIv^>Zu_5T-S?wuB*vF%kjP5)P&jBszH^GkM42NL=(>i>O5**75+E%OL7&$KiDSxQODb08O>;9VA#zO9%$6nrtOnfW1wiD&YT=kF0C? zC=s01z@+Krf*%091Qr?~5S_%te!Mr}lA&(hP~K-hZ(O^rRo$ z_lau26r{}NKI?SgK7;vl_}|W%Et^-!xJfr5@d3vh0945eF}x7+bzRDilQwUJb`OoM zl_IBG=$E+ZUSoS(SOw zykU2e<#j}@edu*gmz5dbUS7@ zjx)!Jl4nr@ugpL$&rT1csv&W#jFRmZJ*l;ChzWX-tJGB~rAn$Xg%*83-`cGbzxIV(=}gH3yuO2W|t# zR^u+yB6OhP;y_M-@7TNd3yoOoDtZ#J`Vl7wQ(69-lI0^c=K@tBx`M2c@*^?@UQznW zD5@|u)Qai>=dE9=v`;ex%1ahzQ*KD2Eufx3yp;=eg(vY5g1D$MfE0ot2!aqG2!bF8 zf*=TkVhY3`l0`xUgb<^WB^}vN@8E|2IK;vpz9>4BUg>#S&w@C z2N2FeVHoD+RNG`&1AqbcK~MwTWaNn(AyB3MJpk+jQ0~Wd$_G^iPM$yk(8Evy;A?r( z^#dAko)$GYtX=f!0}PPQK%omL0(HVb1MNdlN7}`fn1qpEH*Gs^jPm2jeyByKe&^*2s8GT;KqS=kg5 z@K>auDn0tB0Wc6B0(Drp&qrK($_*p{I=oE*SUaTAdmvB^vWe!OI1h>jf{YQ4MFk`v z^iUw9^`Z4i^fA1mht&ZG(1$@C7HaX(;<@kv30Mb49UQJj6f*DwcIShPG(5;2{|)F{ z8o)sL3>3PB5~2?Jd0+!`=geK{I%Ir}IBp>f%q~m_0S@%fLjeMb0Qy*<^g_m5%jcsI zgr>j80SQo#^#OcUPV>0jn{3H}d0sM#YLNWobS{J)LumeV5 z=DZ+bVUcagkhKN~z&i(pC=hO0Tu|!m18CvXz}ft#QG*Z-gjy;Bbl^J!O0gJXRRRcr z9X${r4ja!(Hun-bDj`zJwzf|B_$UH`MMZfa1NyO0fC4~z(f|hJN1!TA!)W@SaK?pCWfCG{f_4cEntEE8%bm!P{xF-V4rxA~G zI9Nar{4I(DqJZ{njS}#pu|B{9dxruHIF5u8F|hxA^{+MO0KoSVQc(=q_R+6eXpfVh5;uQ}d5Iy|Y48j;Qg#(o&2@JeGHR>|~!0JQ;$;X`tbX>rK zXKDZosLnt^D6B_J007~kPy&~S77BtP8j!G~sv&0H;h={HLmwVUfO4?2?F$hGgbos* ze}*)w!m-T_8)yJ|R1~10!On1i0q-MF0tIV(0Rk2T#3xwtWE87d_vQd~##CUy0qIjv z9##OQ31XLk!Fi}g^S+31Km?G(q7D|S^T7|0=>){Jv1QK(BH-&(s{jK73_cCiNECNL z0~ClJ8C9sANXrH#00Ni?q6`m*Jy0}G0BsKrxFj8y^81BD3+2nq-a2nrWC%qUL|HOuCi zj_ER1)B;1(iC)={`8)AJIM>aAmFpO*Nz8m}s!_ti^`aaZ9chIqz7_ zy+HsMFh2h>V#KlI06j(+ay(uS_=A03y?!HGqeGPoRCu+lkp+KD3`4aqHxs5TQ> z2hgppeX|y#H?DMHmIJNaXX8unYZ&C|3CgEBvP)+S3l7{Um9U~*z>yMcoa%Oa7F0!) zLayfe2Nh&Xbvq!M!RgOcHV81?EJyzgv@lc=*NZ|q$6_n>r@oAIN9*LFDS1<}qym$>;IJW326pS2}kkv|m_cr5*!@77SNx>b=OF)#kjD2I-Ro zY6R)d0&M{1b#)IErg*}z0!3J8>I=a6%1M-4@%w%-MR90C=vD{}n@Q@-jv{N!id1%% za$|odkS@3eD25xH4Rpez3nLlxZV_Cn;b&BU`21p_5v^t3u$<95{QhL#@u1I`jdbv@ z@!SieqpU&+Kn*hZGgb{^*N?)NLD>Zh6MT-Sp9!ZolF@8AjOxs_JH(DD$+ z;eF#9^C#UGjfwTVHc*uqq1Ib*jWQCIvZ>L+j_eyA!BS zGx9F&2LW|SF9~cjN^u5S-p%W9QWuI$_L3WxFMG{sE4N5(^DP3QxnBFEDe=rw?rGPz z0mpo>#1oz|M@N_%B-$(^mqzJpv6|KR0khMy(-z2$aAxNe$ml7!X%AjxG!OY$lRDp;bH z{}qnO%R(l*%S5KJohUOv++?+>LE0upGb=LZRxjH-@e$x8G`kv?UTkkT?QeUm17}t2pVF_AoA;D|<0>RIn$f8&k|v z86Hk*9bw&4eNUs4efDrE&}bOjwmBu*u_%CFXHDTT42#wNL^3s9bIM~m*wN241F&IH zrzP;Me&7gum^8DC6dCUiesf8k;n8VKRu`@8LAKfRhU3n9Ys2E^xbvlOlQIzZ*zWCG z#>dgu;Fe4xFn`O=Xx&kYe+Mo9f-AgHHNT;E+X65*FxwCXrIKMH4cBx|8oU@@HLsC?d*H71vmWS%{r=n8yw4EPcK_ND#x(<+S!D4x$nXdGn>H= zjORe;;!^)SEOIa`<9|oB6vfn`{Gt!vVi?E@Qf2&Po-z zm3Eq=jWYpI32Yrp1*jn|#`OBa7xsDd-Jmr132G!{HqX$SuaK3^bNCuyI|vYaY%YQ> z3s;ORk8Aq96NOjhh~`N9VkJZ2$KS@ zElVm48#1HPgjmQ{+bGYsWlJuOUcBmao1UokdMb=1GBHNYIjh*hUWSPnObv1E#yoC6 zxn;YeJ}iUx*y-0??J}1{O@ppDsQe>$)C?{1{$eh3jyQqsOj;md?{VSS(-Z6dg~mK3Xux%$eGO6)FN&~+NMj`@ z{w(uJp4tgWU$mk`cTCR-9G3b&CEC@)cImQK9ka$E`F2NZx-Y52C5rTG4^QK18S$KF z$UFZYjKL`#>&-)m*2_3bVc`tx`HKDTjt8IOGsR=pTO_Z5aP4Rah%nCY09}Ld{mZKv zf2F3ynmtHaKX2a7-i}C!u9kEGqRAG*>o+D&Q?pSTz#L2KbHrj0 zyf#`HxU1*5CEAeBQLrmm=fvCfrCT8=%@R;oy9vw2km1t|yI{m{Zr;GM{Tn=Q%;90S zhVRYcd*-#TfbB(Hk~IhwW3mNRt%;FPzB%aVW^uTE9lj3Xc~j|F_^e33L?ZR|M>gya{l52x4ff!#!6Lcm?) zN-S`;3vu*vD>)8LW$F-nx#vJLSM?t%4@Oo)P4(5BvGZ3JT*&Z9=13>7_OSOgdyxWR z8d@WsnXwWPcXcfxwmH$Q=hP)>Y;|9Vv|rtnBCfMhu|wLhH^i`*MrLxxqv074>9E6^ zPl@AL**}Egt^T3Ith~{h4%5Z7>^y)`@#VAAtu@;-Okrj*)rdC;K?n+8c`wpB)H&2Y z!L~FSQd|$?t5Y=xNdaR-f(fL7=bx-QQ!AmpELpmc!r4Bc39S-ZvGzGpEgb`F3y|Jb ztY$cClsqvaHxgcc+6zg4A@nog)7={1n(*z+OO(ObIpvy^&w&g)uF%js)63qRPdhn3 zI|Abnb>V|_Fu`jlNCiGMz)FClSJ_Ol`pk%#e4=T$O5BNvsMT147BTVU$_`5!~?H+`7Oqk{$&bo!jqPlmogys zJ`0o!$K(LaP+c-3Xi(t7eeQ{nWmsPtacrP9OnUl3;j`u4jP_bNH}8S2n7*EaZ8Hzv z*4^$OWDHSeY#@`rKSePTiw}^e3w!f}f^)MUL4t#g-JdX~oOy@LH&$TgNX<~Z1wi&c zG3itVrcz@uiXBr{Ht*r%hQmY_beNZMCu1Mz3CSsF(ZiNyJE1Kc;s$6V1}T8NE600G zY>IOVy?Ld6DvwnXVk|GCM^B8qk0ooiL*Gl6s!q4sb7>$7UWho_JJaN85@HrMy``Ua zv5s71=J}6^0nU^UcmZ-2otv!S^f=gcLySPJ6j+Bw)#UpkkAR~rV-?yHm zc+jhlGT5y43Xv3EYfc@TwNJ^n9CjK&pd1-|2%!p_m>_|mU&Z0L!UMr5H;EIDPQPkP z8#A#K_5K__uP~HjDB%lCS3GntSa}{f`xyoYqc*SJclVfPenty1^S|48lM!)NqcePY z!1vw`=CYdQw(c@N4R29nlBNK=l-aEc+W4YhVcLN4(c!WVcm&jnBtfK_JCH214utu) z+Tt|!m1d$Ho*1>giQ#0Wh`HlNm$27mXzT~46<+q;&w(OB_)Br_W*v^*qIoWW{v?tR z$Qpv^uR2D$F}NtT$(Ww^w%QBZl*KNyf%#@>Y=~4p;BHEHem#CS;lA(gVhx0~&E!2= z7{iEaOAYNsye*4N3wyG@*W0+cs`(=dM!3ksa5pcI@1iO5U0VtCm3P-b?b*t@x`_)d zvyZ@9aKDYCO=fHjFSfDz#l-@_3kBB9Rp%w85*3l!4U`g?+zWM3Cq4St;@h*?pgwuW!8_ker4ve&J^0g%&!S8wLL!9b)6j)(! zmFh0LaeLy)*%+S%B%_ROSsM`wDx*peZjrT!t%ANLzBC@!MGTdZza#-=njwaHC6T`6 z#`b$`2ghT}J`LH#4ip~#S`z2{ZyZJY{LBUqa%maYyd}nt)|Fi$+!MCBK*3}I=S>Vk z78Egx_PhU%@G5_Xck=M6c_-++Ub%%E)?^ZkB`4{0Le+2S6ftvtCx^#0=48ofe&Kd9 z;IHGzi+qOI4Ns(XO`DW{9EOaaj@K7Hzo_?gb_k)7Z3=e(df#gG;GJmhou0_z;W$Nv zD{E@{c6@{B2(;~3&_iPj$1SV5c$j%O5|@wU$BY8Tv}LH_eFvs9jfb@o=%u9Jqiwh& z4nK@&R~VHDt|E$PpWfE&vjU8o4nVOho~F}ZMwpYeoMkSiZe8F6(H={_x$=aWDgSO&U~}3*i5APH7sZ zu@s{)IW{-NYa|pfnD^G4qyX}d+=NgV)YXFoC!D2SX(t_y9ac5JPtte*2R{2Q>#bcr z6mS`Jp=ARtlcX(?@j5|tDzB1zO`xV;@mie!Hn((RA<+^$j!H6NpbUkpR{^_nI-@BE zPsFmLj@i!M2Jx-$`B5vqoq_i$B&rQ%M7@&csC!geh^{-<5YqCN*?Gmiq{@-Um=^)1 ziuLg|U7d(7kOheT4xPRfc3v~+Ku6qSMR2s9KuY75*x>lu&xo2eXf$L$`ECo1eIjS0 z;n)xI0#ZyLVH6(FnH2*gsuDx2zQLNRust zLFM_6ktOWnJ;)TS=F|$DvPVJ6lvcrU5Vg^uz}RT&VoInUGj8|95rfuBjNySI-jBez zGb0alWWo0m=tF74CzjVyDMeLZf4krXHOSGTWR#trvq2rn0feUJY^o|gwoxu5MaPgA zz`;>igDG8|Sx%&qom7l{2U&btdx_X}KV0ui?56lJoc~hCyGlHz6u*NNNOfCgdRm}e zD}U`JkcBm{(_&AdG_F$h4=Z1XpEPvT)iCNFLyWjbPM*6J!^hf4SY+QT--wx|wcfR5 zTj=y5zb_7a4+M0hrb%yJO~k+y;r#mMQ2^cTPR#4H>={d}Vcw8M_^G#qt@}?ETYc}N zHcH2p#l6$sWV4cgxwYy>MX)lo#8`@+<42=;B=pwv&7T6G!hE5qH4wY9st|w}0T?V@ zK|K~ci3}*hZt--Fj765nt}-AJ>R(?E#!r?Bo8274k4&`!K%imI5&8e>f zd`p&ez-$%cd78xA_46DKf26-ke{9DgAVRzkzDjvPT9tL25SlT#GYnr=UjaNg|B~uC zJ-(Ow-Hns~Z?8U5L;bN!5JgO^)|M&&X6v$_Bc$+yoOlrKLI8uA3`*_p(>hfKjeGuP zSg>)^`XYlpo&Yc?4k-Vg0>{@T8%SjXiz?RU?{rf?EMQj5Bq0qA!vx7e+dkgDdf^&^ zUz$=*v1E%-{(=ygSo$7IOGDyaqWZ@>`7@3o0@r1vBeJ(-6okR!OXhi2#K*6m?n{EE zS9DSna1!H~m-If7!z#vKE0JGnKX?~3bN)IReoU|wVQ^=zRJjv33C-E)X$!*uND30! zY{;QLI?CfwBI}Rtf$pFOV?H@n_0Fk)r;cAuy|$9ogA7b^+d7*sNP9w-B4xP}zt3^u zA@$}nn|XWthOW31IU^hAc2qn9K78rd%A?omQQ23NWS@7`iY{;-n!ex~^c6$!DW%LX z`dUKS`^%_fn>!{A=~uT?;T$l6;WRrj#uKHIe1O$@@SV7>qcM!5sk1r4z09W~{ek~p zPN-Sz-HDDC)w95_#Mv`*4t)sLnQThh}S6Tf->s{|qPp zJU%0BxT2`XqLE{owC?;W*mu7=42=u{hEh;HMC>^(Ze<-H5nbe6B~rFkVSHZ7w*YlI z23JsD@~ zx&972R*Py_v1M6){>?pmQ)qylb<-ug-8~zxNVH4i^rRl%vs%Q6^y5)-T%`{hUm<>S!+|b9q6{55<0tPQN1b=2(9f$r8q$9r3C@ zUvC;aN0rRmS}|53lri_%FnRez$FGW=pcL^eJ%ck1rke7HtbCr%uW`X&y;+hFLtfBr zwn_P7bXHBh51A=o5DN=H%eQ?LY^b33AJm|#@O02f>oVMxel2k-)`N7B3c@e@C-VD! z*B>xO=v$!xNe4c`kf`n;C0JsQ^q`8 zgriYIoC@`d=fOCO-kHKXUx}VghZ9wK7rU)5d1mf+^;vO$5AXwmwgd?FA(`~ufdH`a zW_<88q|InGZK4TLi9`g_W><;((8`4CRaw$4|t$7e2q$O(G96%X!ZXKd||=y4|>;X9~*NSljX9i@l$M#D>n8B?Qq zuo!^+*?#Q-UEf71K6N||l-F22vBmOprYwf~lMCZZ3v!S4FPfVy@|oglQe2R9nCnMo zn2)bmT+gT->~r_0c*Ak33>_huXc2n}g_dpjCS%XfH@X|LYg1C)W;jR;fzS)|><1CV z&S7i|T-FxHMm`+nuf+p;lYE9jRp6TG7sS@0N`zjtodF z`GrS)fA7S9BTcsja1kKxoxP|mnpK}Uz*ojdC8NQSs+*O`xW$?#2*$2>6}P*1C}5G5 zcJ{7w#D)dz7x6(5?G2m7&Z?v;#uYV=2NlI8E6fm&H1Gj&V^oGg`+*8iu<;+9-s8 z`RV!fW**ci_A;S)qlg?8YD6{{G`mrWqu-ah3+FRqTAhxU9$Axvho(QnRL3ADaM;}qS@*;h5ka9EiZoXnF*X7L>8cE#+b)>m4 z|JQpf!Z^_9C8Zt3u@Pw%2peYIF|iU$$o=hQmu}y-**K*gz_3;G;ug_&D-`6_OD{wi z_jj&@$`{+~%@c~zXaI91t@!eeG`$DVjns=G`|p(KFT6P?JAS~e7(H#}iJiQ0_1|k+ zYBxnu`<9VCFFTcZg6d({4l5ZCuw=8`W3jo&^~3f3u13<{!2J7p90C^0AvS6nGlh~^ zu|X>7`ROsRr!GNO{{wo!u_urW^7W^3x->Bu3p-5)gY(VNkSv|hE_Rvnw%RcX^jXkN zt`*Je>Ih5Gi{=A`dvi2Mp}h7A1q59tRf0{0I$jN0167j!Izg(r(Mj;>-3=1c`roHE zW1&d)nV+5Af+^VjdXiKh)K4UlYpJs;_hUmN0k}U{lSG{s7*ofoGB&tD`~-p?Xnzl? zVZZ@iRL(ZTMq3|VzDnmxr9D{=rzEQo_Y7mXhBKmoxzHXjW*tf+ICqxNm%yQ)p#`v@ zz^NEC83@cpYf5(z_!#KO7*feU4}#87zYOgqlWIuM$_GR{O8{X0h*$$wZxd^Sa_MPs zdbNqkreKxGq5BG>$FZ=*=3gK}5Ntnuncs%$$HeGnD~uzb{4W`C~BDKbbm6Kx<9SaKnx-4QtIPtMbzz~Q8)F?)kpt{3;T=JH9HJ*3Dy16xC z__!CgdKwiM_dyaXTfv#G*%L(($&8(erXkQl;pydeYo7weDT3D<5*PVGHf4C;E1Jbn z>?L7mXaCGdaoi*iiR5}e1-*4)7NDjK*XQTy<_sP3rziE;w#H3YRLMih9SaEKuLx({)8s_x%XJq z*hg&onR6h6ctIM7|Ms0W%G@yh&QCS}{Mb)|wTwmi4&do2ToSfDBYwdX{*T`QgvC3S zZgkbrWFDuAu~Nn;Cfz4#1jpJyaPsATy9I-|q&rY6H|m7c-ynkKR4>jZ1u};A&y~gj zlX7(@m3?cMK;grjd)a<4q$y~NCBr|0C>nQP;~M>@^4_wueS^;G+Se3<)xo~}9qu`z!Y0z29U}In|#ncM@q!ax_@e|77rvhzqkc%MyefuJ?C{$LUk>xpu zeswx?;#TJ}+syCY(Q`;OH8F_jPDPW{i3E9knZ(8^UsRmdJ-m)TB?#*8enp{6H7Vve z4O$l4Q^CohcqO%S=w6WdrOPNgaM?No_`i}4vv+H?VfmC`3N@92L<$5^>#G`EETO=$ z^g{XSNcfHz2s7~eFva*Hx_39<-}Adj6;D+twN zcVTLSi$%c5hXZOHC(syPU}Lmm;yZai@cg-@7H<#698%^?goZ+|nZ&@uMHNiy(%*;{ zhS7Gjr`>|O%rGf5?@IzA1j7f*o}EJ`d7q4t44-=j0Cz&yMaUDYu5#~e2FgM>UVMd` z+89a$&oxkYuX3ItdF}x8i zwpEXi15@ZHAs5&Az)jXyVEI!IS#@)DivF7qB#vU>i1(D&^fzlE8!w!%PT%bGk|-fU zE2z9Oo%dLDZ69~MFo7=sm(IniPbiLddFup&kTw;jpzt~08>%6G9}Yf#jE-(Lf{^A? zAvFvPm!q-+(Tw(B5|D+`;uSpwhBA-BDEtRA)UFy@%#CoVfgg~pJ55Hw3Y0?HT8Uzu z9x4DMCGA)}PtlecPohOzL&q{@OFA=1IRQ z_n^s6p{zNL)(^-M<`pzfN^?02(S`%LmG>ymfd-? zMQb#M7I%Zv6C2S-XJS#)}PQu7xz4^E+r*MH7M%Bi#a4QZSn-aR=7I_uOTd!3ZzpbiLU7_5<3hqw5^e)fe_M?<)U!9+u9ch-?nJ%ZsM92Qn^R}vh`R(a6=4yDI zH6p;f9%1GslX=TlG@>NIbdhlFNOLi4$QuhWzn~gZ4l=Q;s23y}jGMXb| zt%<`uLoXT3xy;T}%CZEw6@L9%e<%X7Q#smrnXnL-6qdsO`L6H=6$YQ)(QFlcPqe}U z^~#$tw$B}yVc)ojmlm`_Y`^I47#eva=@+{OZ9a=do{w&+e(p4;#N*W`elw`Wn!C)F zkSBIDP8jTcA&St>Mu$xfqV4yYPdY{Al@J(&nX-`9wHAghkVP1$y&VZ_*#}$EyTY+Z zHfhUYdHm!8Q%PV&L2^JevG(N6<%P`^8a5}LaBi;OFD4YHZ!FtUPd9&LlG$%J@f}tF zm&3b!Ame5W8E6}k(a>HyVk;l+O%*OSbKtq=Ucf1G0UDu>|A(QK*puiLZLDWoGuHFg z+!uat2jp4@SEXg+6_sQ=sjA7>ji~od-v?M3p``G5X>GDe8FECh|5gP0T0r70|B4G2;99G#7JPGBkkGSU z>^g8IT7;cg+@&?mR1CDy%NgeS^n$%IzU~1F?Zhnq$`(%8!jk4@%T5TTPO4|tOz4Z< zkS~X~j*y-zklzr0K$6K>q1wD4`hSq>M>vigwNp!VcCj^c?iBpI=i2@%Z_oe8hb!1qqf|jYCixe_g3liS7AH-EI(ti^Fwb| zj5dSs{XC7d=4%bh+)oU<(Re(}DTG=$(odLfTFsIJhXy_!DY&aJ#C%}rZ(Xu!17sFC zU$NlxsFCN{ql1D}gw>NFirxi#9}k$=zA+01EJ&--g9LFEycQaaj!r}E1=xBcwuON( zWCjF}g{FwtxEMD!z}vk&%+fb=z8PO(n%~Z6?H0z>yqAhl?!+UN64E~uODLK>D=tR- z*C!Pksbgau^I>)N^8lARLRT6#LRN&ogIHD;5QgOe)TfKzPvyTcu7yPbfFDew6js|s zX8q9fMgt4!Pbcl*r(O*G$1cWgAc{%Efme;(OH4%`zAIHmRD~wJnD1H`u#pa0$wj(v z5c7<9mqYtpU-hQgAmt@Oc<-V#YXU|#1ABjUMi~Qberpa~5 zEmMHDw7H>cRz%t`Ojn^De_4}Z^8^gxNb9s2nsZ?R24=(!oSkkdr2r!`;0-qGnQo?l z8d|^5i2`{pf&}8Bq8v>cacB3o9^ZO2(mJ*0v#w9xWNf;>S{jyo<)X$i!K=p4?q(O|8#H29@2|^s(m-9AJUxRJGSkiUGMMp)QeDES?7ksBNby zaQgPu{n}ha<{YVC-5tIB1~23q`x`Z4Kz)_j`LtW)DYI4A zYfp&>t>;gh7);5k{sYqv6;_wro)>h-eD5}%s9{Cr5Pxh0v`bpQy$++ZAmT&N)+Lxd3`AVf$6gb<=UA$$XYQY0cGDoN4- zGB^xE@FxUtWM+u)zcKg_C30R>bZ3q=eFnT1lFFa2LRp&t4Heuo}Zj({-?2~i(_ z_=H^-WKbmGpdUbhM4naA~vOCO2NTw5zyuto z0l1tT6@HMRMiW2*oX10vo{=YgrT_$(kBb6ML_nJ%kO1`|QGyeJx=c#@+Q}0j9l5Q* z0eO?1s!VUl00vkew~K)e5z1o-BtU≷BM(T)YDzi~WECr<0=s6B!#O-M-1*Hytm4 z@nKQHb{4}y4Ayx8+?^ei5C8{%l?M_qd2UOWFgTfH~^>k<;7R_ewO`8Qkds24G`oY z!n(9$AAj&?*lVejn=!i#8237#+P?L8Np@+5t%#^kB#%Fv?6$rt)LL~f%}AbV>QcDG zx>3kr>M1Cnxdw$?Sj|wQK1G&?=Zupw5cW}XeBoUWQdcxz+{hYi=n*a;V||XImhNBibt)QzQ|{(f!1M!13fsYDVQfLMMIf|Oo^j|}6>_jchoa9j3!y)7a;yH1xjTo9XU#ZP% zEBm;PM1qkG<<&m+vb#pk>%z8OdsaXW6N}p+o4X`qA&)k9`(TUsYZyp9_0Sj{67p9* zSO!Mm2>v5$a_Ou^ixc-z>f>2qjl_yU{r(sZENsYvUelQn&!c(@T)!eHGz@)p&^EQz zfgshn?A+;A6!XWg;0Sw2acVBrIibI6ZgME9+{|-e*v~V~pAOs1ta9Tg)~M?`bp#PpPv2jX9|8$X>$ zj``hqo=x~M)Od%zl*Q;MSZQH10a@cPbW09|4!oRtRYc`5jY_#Er{Vo;EtI36>$woU zYt2?|gjl$0fpoqR3c&I%y~xFsSd0dTP7H0<{T((gA&K`1dA+)uJHYJmB~lRzVHiwU zk~0Q?h{3T}{#Hx5WUqb5t_a|0_g?kr{>YJ|M*H`IpWBAbrqIjIuX{!mfc)^zSsi}C zo`8?Z(c}S|+Ap=asXIf0gc*l8JG;Wsm6d?HuyEkKg_)oqOkEw;p+QZi?d!doF@>+1 z?sAkZz$vPVDda95od8e0!;Z|U1j};-hd?_sh%!p6g&gEx7y|IhB<`lm8{|!!BVvx9MSu+tNH4loMfR2&DHOD`HCEPcQ1|@ONQG^8$f

  • 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 diff --git a/img/bench-mac.png b/img/bench-mac.png index 114025e1d2aa2b2c9f488896de6efc0fa447f810..4e7d89c61dcaeae1ac4b784e325c73b96fe12256 100644 GIT binary patch literal 133281 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 z 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%0Db1H_X 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 W?F!$cqF(#^CkisE($$jhg8m;zL~Z&2 literal 124482 zcma&O1yof}_dZT{gS65ubwRo=Akq!eeWkm*kyMbDZWKvr1f=28-64%M()mAp;(hh~ zt^ZozyIg0%WzL*AduH~2_Ves9LRs+@CK@Rk3=9mWjI^XG3=HA|3=D!13LNl_4a`usWfRRx_{QfVkZe!~1)8;1-y0(Bm~1 z1Goe*!vE(=34Q$f@9W=9erx!9^Z#?hzkB~b^!R(j-segPt8Ws- z)mwYlbmm^fqU+LV{&r)2JN-s5zHj&Ew7r$vJICSD&%17Y-LwxcTJFy0S#@jmzIlwg zINqG^v$L}4H=5le>eV~IQuuC

    ae)b!fxLSZvEy!S7YqE5)Bdvcc3E8ZyH^ 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 Na>YF376F!U*(<6hcJcrK literal 0 HcmV?d00001 diff --git a/src/test/wycheproof/aegis256_test.json b/src/test/wycheproof/aegis256_test.json deleted file mode 100644 index 9b2f523..0000000 --- a/src/test/wycheproof/aegis256_test.json +++ /dev/null @@ -1,6654 +0,0 @@ -{ - "algorithm": "AEGIS256", - "schema": "aead_test_schema.json", - "generatorVersion": "0.9", - "numberOfTests": 472, - "header": [ - "Test vectors of type AeadTest test authenticated encryption with additional data.", - "The test vectors are intended for testing both encryption and decryption.", - "Test vectors with \"result\" : \"valid\" are valid encryptions.", - "Test vectors with \"result\" : \"invalid\" are using invalid parameters", - "or contain an invalid ciphertext or tag." - ], - "notes": { - "Ktv": { - "bugType": "BASIC", - "description": "Known test vector." - }, - "ModifiedTag": { - "bugType": "AUTH_BYPASS", - "description": "The test vector contains a ciphertext with a modified tag. The test vector was obtained by manipulating a valid ciphertext. The purpose of the test is to check whether the verification fully checks the tag.", - "effect": "Failing to fully verify a tag reduces the security level of an encryption." - }, - "OldVersion": { - "bugType": "LEGACY", - "description": "This is a test vector from https://eprint.iacr.org/2013/695.pdf. The test vector contains a tag that was computed with only 6 instead of 7 rounds in finalize." - }, - "Pseudorandom": { - "bugType": "FUNCTIONALITY", - "description": "The test vector contains pseudorandomly generated inputs. The goal of the test vector is to check the correctness of the implementation for various sizes of the input parameters. Some libraries do not support all the parameter sizes. " - }, - "TagCollision_1": { - "bugType": "BASIC", - "description": "The test vector contains a ciphertext with the same tag as another vector, but different plaintext and ciphertext." - } - }, - "testGroups": [ - { - "type": "AeadTest", - "keySize": 256, - "ivSize": 256, - "tagSize": 128, - "tests": [ - { - "tcId": 1, - "comment": "https://eprint.iacr.org/2013/695.pdf", - "flags": [ - "OldVersion" - ], - "key": "0000000000000000000000000000000000000000000000000000000000000000", - "iv": "0000000000000000000000000000000000000000000000000000000000000000", - "aad": "", - "msg": "00000000000000000000000000000000", - "ct": "b98f03a947807713d75a4fff9fc277a6", - "tag": "a008acb1d372d73932ec5e6df9aca70a", - "result": "invalid" - }, - { - "tcId": 2, - "comment": "https://eprint.iacr.org/2013/695.pdf", - "flags": [ - "OldVersion" - ], - "key": "0000000000000000000000000000000000000000000000000000000000000000", - "iv": "0000000000000000000000000000000000000000000000000000000000000000", - "aad": "00000000000000000000000000000000", - "msg": "00000000000000000000000000000000", - "ct": "b286705e6ccf368974ade9ff5550a4c5", - "tag": "367f3f14897b31c6a66eb7b540eccc8b", - "result": "invalid" - }, - { - "tcId": 3, - "comment": "https://eprint.iacr.org/2013/695.pdf", - "flags": [ - "OldVersion" - ], - "key": "0001000000000000000000000000000000000000000000000000000000000000", - "iv": "0000020000000000000000000000000000000000000000000000000000000000", - "aad": "00010203", - "msg": "00000000000000000000000000000000", - "ct": "1f452a22fc07f2471ab4345d7ab121b1", - "tag": "0d80d9c73cd4b8b3422b66cdaa45ae8a", - "result": "invalid" - }, - { - "tcId": 4, - "comment": "https://eprint.iacr.org/2013/695.pdf", - "flags": [ - "OldVersion" - ], - "key": "1001000000000000000000000000000000000000000000000000000000000000", - "iv": "1000020000000000000000000000000000000000000000000000000000000000", - "aad": "0001020304050607", - "msg": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "ct": "f373079ed84b2709faee373584585d60accd191db310ef5d8b11833df9dec711", - "tag": "787347bc96d3d0fdb33ddc8ee5ef4924", - "result": "invalid" - }, - { - "tcId": 5, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "0000000000000000000000000000000000000000000000000000000000000000", - "iv": "0000000000000000000000000000000000000000000000000000000000000000", - "aad": "", - "msg": "00000000000000000000000000000000", - "ct": "b98f03a947807713d75a4fff9fc277a6", - "tag": "478f3b50dc478ef7d5cf2d0f7cc13180", - "result": "valid" - }, - { - "tcId": 6, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "0000000000000000000000000000000000000000000000000000000000000000", - "iv": "0000000000000000000000000000000000000000000000000000000000000000", - "aad": "00000000000000000000000000000000", - "msg": "00000000000000000000000000000000", - "ct": "b286705e6ccf368974ade9ff5550a4c5", - "tag": "fdeb4a822f3ddd1fd4159e1db11a4c6b", - "result": "valid" - }, - { - "tcId": 7, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "0001000000000000000000000000000000000000000000000000000000000000", - "iv": "0000020000000000000000000000000000000000000000000000000000000000", - "aad": "00010203", - "msg": "00000000000000000000000000000000", - "ct": "1f452a22fc07f2471ab4345d7ab121b1", - "tag": "065a9af5cc2fd9fee11280a51e37fdcc", - "result": "valid" - }, - { - "tcId": 8, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "1001000000000000000000000000000000000000000000000000000000000000", - "iv": "1000020000000000000000000000000000000000000000000000000000000000", - "aad": "0001020304050607", - "msg": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "ct": "f373079ed84b2709faee373584585d60accd191db310ef5d8b11833df9dec711", - "tag": "8d86f91ee606e9ff26a01b64ccbdd91d", - "result": "valid" - }, - { - "tcId": 9, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "0000000000000000000000000000000000000000000000000000000000000000", - "iv": "0000000000000000000000000000000000000000000000000000000000000000", - "aad": "", - "msg": "", - "ct": "", - "tag": "f7a0878f68bd083e8065354071fc27c3", - "result": "valid" - }, - { - "tcId": 10, - "comment": "", - "flags": [ - "Ktv" - ], - "key": "1001000000000000000000000000000000000000000000000000000000000000", - "iv": "1000020000000000000000000000000000000000000000000000000000000000", - "aad": "0001020304050607", - "msg": "000102030405060708090a0b0c0d", - "ct": "f373079ed84b2709faee37358458", - "tag": "c60b9c2d33ceb058f96e6dd03c215652", - "result": "valid" - }, - { - "tcId": 11, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cc6657fd5f0014430cd8a2afa1b1270094c29427d5fbc0b0a2cfc0e87c83ba89", - "iv": "c0b1fdebffb7f2e277ffb88c0fa369b65f29c78d55e2cc258705a7e2440cb0b5", - "aad": "", - "msg": "", - "ct": "", - "tag": "5f9302932f6af3a489a6fcca836a9d4d", - "result": "valid" - }, - { - "tcId": 12, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b1336707a426d43755b503b69e0056bd99d169b991c2def3257921af839e2ddf", - "iv": "967304567c8309a58e259eb2141e076710f39dc65c2c0106ec20a60fd329a8f5", - "aad": "", - "msg": "45", - "ct": "fd", - "tag": "684e6dc775e429c59ca141a094087e63", - "result": "valid" - }, - { - "tcId": 13, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2b65da4d22e88317fe0d8c5c6198aadf6ccf17ee369f8dd2f0eeb129ac624cdb", - "iv": "69493a88893bc2c5fd6dda80988d244dafad94ea2d0e9e2bc6931fb2caff44be", - "aad": "", - "msg": "c83e", - "ct": "fce3", - "tag": "8f8d18ee473746e61bb8ff65ff8bea2b", - "result": "valid" - }, - { - "tcId": 14, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a8688eda6fca1f9e061dc9503bb0dd01316a6bda667618fa8ec6a21df06db431", - "iv": "fae7bf07fe8a6e343b2220108a6d52e61487aea62cb96cdf46108c1ae9f52aa8", - "aad": "", - "msg": "ee41fa", - "ct": "269c09", - "tag": "e888bde2d519b8a5b096fb3b19454700", - "result": "valid" - }, - { - "tcId": 15, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "64be0293c47b5f5db4c2ac29280b207cd343394ececb24b57bd8957dc952cc20", - "iv": "71277f82787ecbe27889d0a7c43048b504708a9a3d6abbe9a999a0f8638b9ce9", - "aad": "", - "msg": "9cdd19e2", - "ct": "d03c953f", - "tag": "39284c719da05d71aacb933c0e65634a", - "result": "valid" - }, - { - "tcId": 16, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b3de4c30ec4a098e3c9ffa0ab16e14dde6a27efbaf1fd3941c2ad20ae41a2fb7", - "iv": "31bfb1ca8df96a889ce286550e04227c65172eda139100eaace350a4eb88d051", - "aad": "", - "msg": "88b416974c", - "ct": "d4cb62f3f5", - "tag": "fb8d0aa5e65197c1b1919567e5c9b5d4", - "result": "valid" - }, - { - "tcId": 17, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1c009a156013c649ba9bbc4eea02e7978ae28eea59a89675767d178f88593c08", - "iv": "d4eb8679539a2c4b4ff69d52321fed18cd85735a554456dc9cbae916187302ff", - "aad": "", - "msg": "b88e11631066", - "ct": "2f82f8c0b0ab", - "tag": "8ab9fd0ad85e0bc63c300fbe7929d4d4", - "result": "valid" - }, - { - "tcId": 18, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "39d6df97fc89838297c6f3e60ebb0318a7243ae5a392ee36a6963155ed4e9246", - "iv": "2dd2ffc3b67913e9365d531bb7e0d052a8fdf6e1db7729b785f87c39a79e7b89", - "aad": "", - "msg": "db52a67880de53", - "ct": "c599e2248adbe6", - "tag": "5ca9af6e8d2afa9f496e185190aeb599", - "result": "valid" - }, - { - "tcId": 19, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "13a2d8c246198cd6a3ed9f5813e33d18ff998e13c23b4bb53b1f5bac41890282", - "iv": "afc91c1cc48e29bb8ebd47e30513ed51a9b40fe8404bd04ece456221dbeb4c54", - "aad": "", - "msg": "afe014240f6383d9", - "ct": "5c4442ad1ebad45c", - "tag": "0e9179d97789272ac6d9a6482d8a8a3d", - "result": "valid" - }, - { - "tcId": 20, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "aea4d3059b75103d8b6d663bb9af3410602bd9a42f4d5db385659194450feaf6", - "iv": "263142429a3bc9a0e97457ba21d8678ae5c477e8aab3ec85ea21d4b83fdec799", - "aad": "", - "msg": "2d85aa762b939b2f78", - "ct": "873fbd5d02e4f15a72", - "tag": "ac741b87c0f1da2cf3dd41a7035cc4f6", - "result": "valid" - }, - { - "tcId": 21, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4333d1f986461fa4d69123b2ef87adf900959bb4e458dcd5ed5446552b6885fa", - "iv": "598b6466e3248fa37a61347c260985965690073f5eab6a2300efd37280d7f997", - "aad": "", - "msg": "e82a46abadaaa28d669e", - "ct": "a553bf0d091456c4bc27", - "tag": "8b912708d27a9c38a16f942bf9b75de6", - "result": "valid" - }, - { - "tcId": 22, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e449c1153100263e4f243409cc498035ad9b7a94dbcb91cd4234fdec307dc921", - "iv": "54a76b720018533bb8dd833d7d030dfc8ec0ee717e701da4f28db4c3b6f8d145", - "aad": "", - "msg": "83d555fa74775c3371274b", - "ct": "54b03ac2cd39cbe99fff06", - "tag": "deebd6fc145b097a669b85163be80c79", - "result": "valid" - }, - { - "tcId": 23, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ee4171917d2337496812a2784d6a71300e6b8c1ac3b1ef58cee77c229aeaf2c5", - "iv": "e826a79361f9d582b64450e3edc82589487853d5b22feaa0c889875bd0d87cd4", - "aad": "", - "msg": "94d2f8697facaaa191ba617a", - "ct": "b80d19775104f5cb626a2fdf", - "tag": "c6bd5e50901d8ab9f31c0bcae3587aaa", - "result": "valid" - }, - { - "tcId": 24, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d40dd91fc2a5baf26e28772aa0cf9dc29e55b0f7dc94e438b67ee25c366b19fa", - "iv": "c6a75d3d9d12023d1a5034b14f154cfe3fff5ca826ce9c2e5013e25957961cf3", - "aad": "", - "msg": "34b64f66f98aa37be490136cce", - "ct": "53a79e75135d857a06b734abaa", - "tag": "aa835895e34628f02693c3097a9e6b58", - "result": "valid" - }, - { - "tcId": 25, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0615c046395787f642d83089a506c805d8b7a5bc426500859572b14229d94cdf", - "iv": "b2cb34d3b1acd5a44950c3d66f372e81e3dc36b9324662927d7960207cca8a33", - "aad": "", - "msg": "88d44abb6b2043f9862e79da7903", - "ct": "d627016d08d448f8f889ba0a0605", - "tag": "6f19cc5cb080d4b11f7e00d7a9984cb3", - "result": "valid" - }, - { - "tcId": 26, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dfdbe0ad5be9823963239f9f4dd9f364002a62a7e7648f47b1a33cd296586d74", - "iv": "9881cffdbed3316b2460e80f794bc8b68e5d98c207ac8750813d9a537c21a335", - "aad": "", - "msg": "2fb7993e304a4875316978a70151c8", - "ct": "ea33bd94569bb8d9b8c97ce5524ae6", - "tag": "6a067c556b79f7c64ca6d4b1593fc665", - "result": "valid" - }, - { - "tcId": 27, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "aa5429fd3f178b3885f2c696975e88890102455b5d9e42766429e80d4889672a", - "iv": "e1ed38af5753851b79175e4ae11fd6cf80033f81aec484ecd0448c5e7cc0a27e", - "aad": "", - "msg": "7aa8919ebb950f34690acb98651854cb", - "ct": "5c8f1af7c12997873056004cb403c9d2", - "tag": "43b93cc3a9e6ddbeb18ba8bead2ab28f", - "result": "valid" - }, - { - "tcId": 28, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4248496c86ea6e4e0c12b933e4572de9be5b440503b62030153365abed42bc69", - "iv": "d1c0c2d7457ab6d940eb910b39d101ae5e0a7a83acf7c90dead42357ac24a5f9", - "aad": "", - "msg": "da270cc998cc602eeafe17d513bc71abc4", - "ct": "61ab71fa8c28d748192b698ebb37997dd2", - "tag": "0829d170b7106834ace8516d870cd295", - "result": "valid" - }, - { - "tcId": 29, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ea9a8d0b7d1f51daf324a17d0966c0028c79c45c95b0a41a27b156936b3d3727", - "iv": "3b06ea6fd869afe98dbbbeaa4778dbba7cd736e21efe53c6656e3b161be52c7b", - "aad": "", - "msg": "b56f9db74c89a31114a868aeeed04fa96eb9", - "ct": "f7d2112fd12f86128d38d0f944268f414a79", - "tag": "cecb0f38354e7d904b38083e5465cdf4", - "result": "valid" - }, - { - "tcId": 30, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b8ca0e8e52406c0aa443ab52c06bc4ca0bc97b400d8bf8c35353af48266ae358", - "iv": "3eb0bba40be94c2ad95b02cd37a5ec416bc1e7a013ae6b92b3325b4a80d0853c", - "aad": "", - "msg": "c49d580e4de1e0b580ae37059511bb60fa1baf", - "ct": "90be5d2760c38972b61ddcc19de11ba7da7852", - "tag": "a8fa3c2b9deaae167d9035a52323a8ee", - "result": "valid" - }, - { - "tcId": 31, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bc706ed02cfc0405444bd7785978e7be125bdc1876b4d53bf3dc75c9e3d3473e", - "iv": "87581945f46ee4fe30d163bb0ade51bb485e578ec4de8b043f8a9cb45a3e3ed5", - "aad": "", - "msg": "a617aacc441cb3c18e852aea46332d870bca6e48", - "ct": "ccbbe9cbce7f8fd30eeb6bb081b19bd03a79aebe", - "tag": "16969049e9b7944b407b1ab8a8a88628", - "result": "valid" - }, - { - "tcId": 32, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c7f9c1e03adab533d2e2520eb49dcb4afab2c83b494e17e7c00fe241be966e6d", - "iv": "90bf6c508ee75a7d870cce8a584f139e36fe4f0e0c6d5dfba396becf4fb9cd53", - "aad": "", - "msg": "ade1ca34c4100cd392c352416b5ac4df1ec1d8170d", - "ct": "8e0e4a17e30b53f13266278b785e19111d6fd36796", - "tag": "cab58fa19cee88d673d76aab874f85a1", - "result": "valid" - }, - { - "tcId": 33, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c8134cda02f603b53daaab2ca9a575ce4d9b6411a10d21a533ed2cf6187c7649", - "iv": "21e37934e57c6a4501ade356225e72d4715205383ce3d4d92ee1d98f763f1dbd", - "aad": "", - "msg": "6f48478470a9b519c5ddbfa31c75b3ef0f912b9f2211", - "ct": "63be5057ef1f92f2488489c8f362e1614ff6c62d5967", - "tag": "e146f0449b62581528dff914ffff8bb0", - "result": "valid" - }, - { - "tcId": 34, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "11fec755250087303f694ccbc1d7d9d6045b7b126d0e9ef768ee242fc89e58dd", - "iv": "75d18dbca71ed1dc67a2dce1f981349947c3ae68f17e1bafb314bfa6c65045bd", - "aad": "", - "msg": "0617cfd4820bcc4a286d501373e294e023e82a9ca399d7", - "ct": "3e849bf51d5e0f6855330bf7d853507844c9bbd9a65866", - "tag": "795877aaae0c0f1adfea110e46cc8bac", - "result": "valid" - }, - { - "tcId": 35, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7a52c2b6ede52ba6d873263ef42655c24fcd2c4bb6660024463417aa343b8eb9", - "iv": "8bea66fbca5076afd7d41b2cf4999b5da124338601ff9d909220402b1d60fdff", - "aad": "", - "msg": "8997cde2096d24c4afd4d68fa5bf545f361c7ee7237e026f", - "ct": "8cd20030adaf830392f3aa3ee32489de0bbae56eaefae005", - "tag": "96db6875a2bf9d76515c39f5bbff065e", - "result": "valid" - }, - { - "tcId": 36, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e0613ec8a652a40291709b8cf2a09a54bac7e5ca1ec27307dc0b28b41dcedd92", - "iv": "991994417b809b7ce55a4dd81fdad73334d7123e4ea8e8f8eedef9687774a0a3", - "aad": "", - "msg": "fae03f24077056887b0be4f8d9b7d3a646f4e3935fabea6f35", - "ct": "f98121bed27db96a5f6bced9c731f5f4b7ece686461bc6e743", - "tag": "fe7c3a017e86746481b910734e68894f", - "result": "valid" - }, - { - "tcId": 37, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7d48ab97b65f6e1b9b8f5ed2e9ad19b099b90fdb992ae8577ca9ff79b3a0e2ca", - "iv": "d62fa8fab24248816bfe81ce55c0e991b362fc4913d10220061476e0a489514c", - "aad": "", - "msg": "46d00eb0533e2172eb81316b6e17438be42d6039c31466ca71cf", - "ct": "525b51961222500da8235a175ebbec64579b906733d32dc61680", - "tag": "02f33d53e0b6005b4275e0e6d66d0f06", - "result": "valid" - }, - { - "tcId": 38, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "60dea9f5639801a65a574fe3cdb803a20559ba30e22ddd27727621d60aff8e2e", - "iv": "67e460623e491800f29711d848c6afab7bf8ed558c46a8ec9342a9f3aad134b5", - "aad": "", - "msg": "49cfc182d3781f11cea5bce55eb1326bf972a2534cd5aff2c9d68a", - "ct": "85d770b346d9bb61498fa5b4391c122f46fb3afa4a92ec268d3eb4", - "tag": "f47a384a1cb935614ced948a274f6019", - "result": "valid" - }, - { - "tcId": 39, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "eb90e786a1de316e1cfa253422dbb1c4cd1cd0f711d05fcb45eb173cf0c11910", - "iv": "8db6aae6ec75035ea5ad5ec37c1f96ea1eda4007b5349c91b8746edf1a8e48cc", - "aad": "", - "msg": "74d6c81193af9f7bebbffca16e92b2573ac2b89f0a8cadd96bf3da28", - "ct": "1f3603e28dc9c0da297f5449aba599e930700e1bf7d73a780a3f80d8", - "tag": "13576a5d958b30d80ded8ac24c1145eb", - "result": "valid" - }, - { - "tcId": 40, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "22042b270ca2a6c054eceba6f7715f04ecea27fd0b202fbb66023de79c52fbe4", - "iv": "2076f6b00d155a9e66a7aecf07969aed8b396cbbad77841a6ee09d4e9fcbb438", - "aad": "", - "msg": "b8f0d60c07dad905aa972f4e93ac8bdfbb310d1c775e89dc4ecb065eb8", - "ct": "695190e6d9f5df4997b5f2aea68b0c2d085bef6f2326ba98245a82886e", - "tag": "24d4c15e39ec69e25c593b4baee3c8fa", - "result": "valid" - }, - { - "tcId": 41, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5431d28adda0ffad28ed5cd65ff37548f3bd042741b6e4ed55a224fbbb5ca6f7", - "iv": "948277af82a34d86112b51cfcabedcb1794d12cf4633fe0a1362ffa6c96ae775", - "aad": "", - "msg": "35735b6a9c0bfe8c3d77ab14368aea0bee0e9eeffb551c6f56c555c33c36", - "ct": "211db5946b4796f1adb0f35f76c3337188feb2dd7d4822176d458f728e02", - "tag": "43aeaa135bece6e469ee674045839738", - "result": "valid" - }, - { - "tcId": 42, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d2412f11fb6e76f746a87c3725f28fcd5db53017cbdaf23758a1fa6ce49c9375", - "iv": "01ecd22c6b276cbfaaf48417e04c65fa4fc10a2096b5f40441deb2f106f40140", - "aad": "", - "msg": "cf9ac2cf147c213bd24e6dab49f441ba0049d65a9eb93892b06fe0852ac8c0", - "ct": "4092d6589476b2a3ef5865f5e75aa74f9e1146e6a1269744dcb2f64af7a0bf", - "tag": "2f01725ec98d41badfb9a7d86914bf5e", - "result": "valid" - }, - { - "tcId": 43, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0e1689ce08a40e2ff93cd490793a22ca931c3cb05fda8e56b32a211525ca9cb6", - "iv": "e82abf57dce426592568e33ff31114f56a08684ac297125dd2e80ad4790779a9", - "aad": "", - "msg": "90e8a0a4d3149f2131c0d686a617e8778331aa9222c19c158f3aaa173fe1ae6b", - "ct": "c6bb611909a4d860d384e831bd047161e555a4864a36371783fd3b71d56b8b39", - "tag": "3f484cc57cdde31424ec548db0448aa6", - "result": "valid" - }, - { - "tcId": 44, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "786d80f3d15421f248dfc099fd62245ffbfa1ed83b38f07e534e63a0df27ddfc", - "iv": "82f73bfa6c3ed27f65d2ceb7b25d8c6d6c37d46f8cfd27ffa25646e12277368a", - "aad": "", - "msg": "f0b98e259998532f002e01e225506987400b941620b19df462d1fde3fcad11814f", - "ct": "f03ece79fb391b00369e9ee05fc1da452463fe82e67221677f73a06509207939c6", - "tag": "b64e125d040d109694de19d23f649283", - "result": "valid" - }, - { - "tcId": 45, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "102683bf80a8e6ba600726805d8c28eb6c32e383053d376b81819512f738661c", - "iv": "df55cb6cba92a35617f5a7a0d96570de075ef4904ce64796bbeb5f8341db7d83", - "aad": "", - "msg": "7ab63212edc1786c5519366a7e1c53069b97e1f1cf882c3b55db67f6c14a53dca957", - "ct": "d78b1b2ae6dd5d6cf2b7c95f589c43baf1ee10d3e579f6aacba33b53530ddfb875c9", - "tag": "bdebc4b6cf1a3083cc3c8753d3b09cbc", - "result": "valid" - }, - { - "tcId": 46, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e40ae0e8419ebc6a3aa67f7b70e18e8a1733c70fcd2e9d60c0f1db784cbaeedb", - "iv": "afcfd0103e8f9e8deb953d00f944feeb2bb8297c1e080f6821f17c7f1655ebae", - "aad": "", - "msg": "bc0a0fd548e31b0dbbc8e90f2ec847a55f442aaeef26ed62d35adb0edc4449d2d2de61", - "ct": "47eab239c5599c0003625ea72f3e9f6d370eda954ed913073ebd98c3cb72055a513189", - "tag": "9fa4f57168a021cfeb124b3d2e030363", - "result": "valid" - }, - { - "tcId": 47, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9cef79e6825233190d2d890ff742a0365e07e7a945850beed7f466da5e83b564", - "iv": "1bc94232aec8bad7c0529ec25c652cb97c231d4f22bcbbd1eea57ed15022d2cf", - "aad": "", - "msg": "d4296953764f83c78678d802a0fbfcfdbce2f74445e4ae260d2d3b7560064950e13acb5c", - "ct": "6ea2a4848c39ba8053f1d5cb79e87541b8fa46e8d24858cfd157ac1c4cf831e1b4fc313c", - "tag": "547cba417d57251f9c70d596704d40f2", - "result": "valid" - }, - { - "tcId": 48, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "19ccb4add32f729f2411a593fecf4c99e2a789c1531a8263dd2493fab004af07", - "iv": "510dd4ffe333224234300562fe02f4d38f61682fce03dc55609f7e90cbd4ff95", - "aad": "", - "msg": "1a1f80fe2df06d17676dbf1d291480136655323562dd61322a283252af0f95a42f71b044af", - "ct": "4afac7ce6f9bb02b64cadfa230d764f2549085576ad6fc0a7d7e6ba46d090da57eabff9de1", - "tag": "d8cbec02a96485c01b8404f5ba81f85f", - "result": "valid" - }, - { - "tcId": 49, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "39bf5512622e819a3123c6d9d580b6e9f765407554e82007f1f26815f11fe9d2", - "iv": "18a06de1f345865c7ab50014f6229455a1de8eae981071506d44d96a889c6aa9", - "aad": "", - "msg": "97b9dd9702807d69f89437ee4fdfc9e33c9252bb6b5f06367c2c8e2a8f21d3a0054308fff624", - "ct": "09ca710c172cc8bd2023f0a7fa34d4fffe0a0951c39514eb3ba43f76c3dc2a5fd6b63fa57ab7", - "tag": "cfb37bbedac64c3cd912192218f1b71e", - "result": "valid" - }, - { - "tcId": 50, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "77a765f8d164de88880794776bd7cedd14bbe2526b623d5ce9c1ad1cc804a3d2", - "iv": "3a03fdb72860cdb4648c2c5124ed7b704393ec99d757b920bb422f6cc61cb4ff", - "aad": "", - "msg": "f67d3378b072c0d8f03055a3e19564d6bb4e33b42bd32785b7a76589478b94870197979563ef0c", - "ct": "5f0d027f0874faa3cebf55aaa2ec03a20b8796c51dea0daf66f6e9e19395fade66bbb8b16e93c0", - "tag": "8662382965cca78a0a59b60a512988df", - "result": "valid" - }, - { - "tcId": 51, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c576d5d03ee5ceda8ccc6265fc0b829faebaf1ee6a66d5b0a9597acb35e1f394", - "iv": "067a114219d4661d10d755a714860e2aab85fe2e42a0dc007165d21ee62de9fd", - "aad": "", - "msg": "ed7a8c9978bdecc512a0d9354c653f5cba5a5f1ee876fecc1ae1c5ee87e332e38dabe391631d76a3", - "ct": "23a231656244697ce6be1fe0c71b306710d2fe8a848ad7e1acf292e0f30a200550fe19419b8fbc08", - "tag": "63ec16d14a9707320d3001da16076fa9", - "result": "valid" - }, - { - "tcId": 52, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "08cff3fb8dd3ff645b475adf799974c6cff9b03f32f4c6e87f7b81f6023798ad", - "iv": "fd47686b9a6392126a8f6b5e0c2d2ce658b4ca50d89fdc0e63eb0c6919cb343b", - "aad": "", - "msg": "568e4c98bbc9d0dd194fcafd2bd7f12672e13a3105727bdb9e14347e7d3be079872f1fc0f7b66dc8f8", - "ct": "837c440bb6f0f5f5d4f644883dccdf7d2b23c1bb856380423ac8ce9bfb9d55fb7f4d77908f2137c0fa", - "tag": "149aa82a95c53f652115edd99330d8bf", - "result": "valid" - }, - { - "tcId": 53, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ec1f16c94b6ab78205a7164088df673632f873179e8961eae350f4907c43ee01", - "iv": "70e14fba11ea4893f2b75286f2d1e7b5909ccdb3de1730f29c0e25102c21ec0e", - "aad": "", - "msg": "bff27a6b20d6f0f97e07436b9260c268e169bf49d64ccc569b4d02336441425b84b0ce255b47c839da6e", - "ct": "6b6d9610753b989f6bfaec2046f05bf6b1fd4fd139ad27cfa2904f804b988cf5a86d020a5b68e0ddd387", - "tag": "b47c40cc3b98eb19cbeee280976ba643", - "result": "valid" - }, - { - "tcId": 54, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6c0a28212298e0ef204673a26574c10e354e5bb25354236d17f5684c89d917f2", - "iv": "71d2a5d266df71edc447c20f3b478bafb76e6263f719a2a41741d6ec12da4b94", - "aad": "", - "msg": "fa1422438dfe854700c15388d852c9c39a13257a865039411a530ff8b9add56d1d6224e05e97b41e3570b1", - "ct": "d07248984411a1b417659964e88d5f47a1e4582adf09d562ada36e352e03de9fb119cc6a6d5ecab3e692a9", - "tag": "7386f218e7d1980b24422e582c14aaab", - "result": "valid" - }, - { - "tcId": 55, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "059ea04eebeaffd04f40b4bb6a005b79a4f95a6999beb0caf509db069c2970e4", - "iv": "165d1c32b3c7d748de074916e17a0aefee379cb1275cfef5324be4078f8ce670", - "aad": "", - "msg": "2437f7a9fe0cb755550d289aa5841a630ea95e92c8f6e0e8ad600008e7fc3a528b4f8a899b7a0bd36f4dc41c", - "ct": "e6106f086bbc303d0847db83f8ffc084bb5a390dafdb634e0741e05d2f90f57afef62e3e49eee7e3b3de7598", - "tag": "af968c70584092814a06250ee0a468f7", - "result": "valid" - }, - { - "tcId": 56, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a6111d3bc0b2ff329c4fdd41ad62719391c72853d5ad437cd2e81fad1be5915b", - "iv": "2093a1d900f23456475a22d040f8ee9b73f5064b3b8dad8caf092bddcd9503e4", - "aad": "", - "msg": "58399e6d5568c88a4e8914ccb58af5fcb7d91bc12939bc376e5a01fb217e6a7f3feefba7208378f119979971f7", - "ct": "d89d4c15fae3b7ff140402274e3cd104f053adca1986a693c51b5f422a414ee6c54b84abc5f9d8b16b02821a4b", - "tag": "a84ba7eefbe14bcd9f2acfb4e8165980", - "result": "valid" - }, - { - "tcId": 57, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "170173ec7d0ea706d51ad4295a84a74c8f48190a1c2e03f5e5882e7e865c6884", - "iv": "0ffee875fa186c48b110596e91fcc559a136ade9d42aa8230e2fce7e19cfdffc", - "aad": "", - "msg": "d1851168c0c7cecf7c252e8707bc4da4e472388714d22522a95cea841155a54ad3eefc28047f4b9cd6cf9819ccd0", - "ct": "d736a5019bfd2547ecc203ee7aa43c5005a0570fc02af32bb0d5385854f331b31f9e9fc888e2ff7208d61fe670b2", - "tag": "1c35c6f5c214f55638acf48ee6e3c660", - "result": "valid" - }, - { - "tcId": 58, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cee7fc038d8b87bef09ab9d9f78da476020d211cc71dde5f5e88a6af259d7598", - "iv": "73c0e01d0adf4d2db5163b96ec67d1215d78e222a9e424e6d944f06b86266fab", - "aad": "", - "msg": "155ad7bf00dbcf3daad76fbe60436f5c1b12f0cd811fcf5bfd4e8691f57bad93b35b8a692451fccbaacb377b19d953", - "ct": "b9e1c94087db0437a37c8fc3ddb705c00fd04278816f27ed8522906f352c5d71af03ad3c4efaf5ea75a7ce3079f23a", - "tag": "87843f351f2a2d40b2648cedf7095071", - "result": "valid" - }, - { - "tcId": 59, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d0314b44ba0de03198a07a3c515557223cc586efb7bbb8221f896ef10169f7a8", - "iv": "79a697e790f9b5b4f7bef71e73a68b530feb6aec7600a774935215060d1e4b06", - "aad": "", - "msg": "4f9756da2ee4dc423239d68ca5fd2a30157f75501745e6bcb39c415c93fd829383fd61b2442be34673c958eb9287fcaa", - "ct": "5c720fd442dbb80c4decbd1122db32a2babce4acbd2ea4a0c772ad5bbb609da4f47e1c0779f20f6ffb6a60da43a0a4eb", - "tag": "90843c17395993147fd699aab2b9d572", - "result": "valid" - }, - { - "tcId": 60, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "99bad0ca5bf16c23960b064fb2feaba92a95f4bf96148890ebdcaedef0c6d23b", - "iv": "dbe0450eaef487d3879c04440108a8595aedd55646c5639f361d8b8460ac4a67", - "aad": "", - "msg": "07bc8b49ccb70290a1c3d91f3bc48fcf067fadc70e619bb9ebb1a8fba05670d2dcdbdea436b5a21cf07c3b04e0317d1118", - "ct": "6838370b3a97414a7aec7083ab25b1822c4e33e62d7611e99ec376fabb385ef795da6fe1485f773e0f844c948a9f758194", - "tag": "254129f9e15e6bf5a749f3ac15acbeaf", - "result": "valid" - }, - { - "tcId": 61, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b9489cd707feb0c4f4f459b383451d0e70d74175a68561e7ed467c3d91d4b490", - "iv": "007f3426a8620b4a4b9b0cdecd946675bea089e4982ed5f7d9895846231a721b", - "aad": "", - "msg": "50f03a1c1cbadc2a994d53e2afa0d438a305d93564fef65639151165b50f5e1522833ebd4603b8727c37334c19f658f6f910", - "ct": "ef7e0645a58109bd5da6f3bd58a67d8e41e832e2673849e0c73c18fe0e8cd80d2bfd71736f652535070e17d1e05b877d2e2d", - "tag": "52c5f78eec35cfb0a791d40e98ac21c9", - "result": "valid" - }, - { - "tcId": 62, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f1e7b661b8da935f82f143285cdda6cec2dade47d4a41fda5621be7f33b2540d", - "iv": "97abedb4414a2e37feb57a5e52a25014ce01bf9b0d2175af374f0102ff49254e", - "aad": "", - "msg": "3e1d4b87eee34d0438081e7194876bf5738b4aea1dd7966e27b9573dfe7bfe4d4af0afc8b06d23ea2169c454e403b9d61a9e1c", - "ct": "4755e8c535b53ae296402d6de59784dc80f95426147d33ac500ebe83e60fa61a5bcdf8d6ef08c076a062fea06a299880d0ea3c", - "tag": "3fb0a5cf9fa5766b78929303d2dc5915", - "result": "valid" - }, - { - "tcId": 63, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "eb4d1ff42e314352954acecfb147b88e01402cf56c5fd415b2930056c8ded473", - "iv": "e062f6ee053cbbf50b6b82087454c30cc0b12d763e501909a2955f0c84d33190", - "aad": "", - "msg": "501339d7fef1dee47ce9b605980ac706116877a5220fcdbbc5ddbe380e968ef003e955cc2a82d74d39ab1f9af5c1a7a360159ad7", - "ct": "7710b66619c6422fc65be3dfb9a41d4ac6ce5ec618be74c11c3836072ff26ce978d06e8a94782cf5c71f7c34193d5a5caa98bae8", - "tag": "61c068f0040a6636b1f0bb1c220cbadb", - "result": "valid" - }, - { - "tcId": 64, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a4d4135f6931f562df05270f04791b4aa3ad6a5d83a4e9ff0e49186eb7cf97af", - "iv": "f0873c0776ccc52a2cae902944f440fb2507b7a74c117b32a89b0777db2d2127", - "aad": "", - "msg": "84814fcff9da79889096e0e62c9c6082f3a3e74a2c737e4b50e43a70807e776bbfc174093db425367037ae218f0519cb9eb78c7e16", - "ct": "3a6d572f5045968576afeec5bac25d26ea029a4a8f08c33699dfb131fe48e7185e1970c55c8e4efc1096fe7a16885eb04f97231042", - "tag": "7077e3a44ebd109dd6638740600034cf", - "result": "valid" - }, - { - "tcId": 65, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9600d378abe1aea55aa475e8817df1ff54004296c033938c6ae5f7e971976ed3", - "iv": "b25ee13a9590d492ff8798fa6b3ec4fe7bdceb5c97263cd5b6aa05328d888620", - "aad": "", - "msg": "61b4d3b9dfae824422a6c473638c3b7b34e71f077591dcbff2b5c6033d92b132a05c86d1ee203d18d8d9a8bff8dda053a068ee934e50", - "ct": "171d4b5f03ba5c7bf0834a497ebb264b49a85ee6fbd168cb14c30911ea0fca21de936c31acbe0321b42e2bc05f098320bdbb21001718", - "tag": "804e6e01e2c0a79ae6719a15f52151ee", - "result": "valid" - }, - { - "tcId": 66, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "653d41543c8eb91e25c7affa0dca6388b84f96304df08c86da2a134cbcb8b3bf", - "iv": "17ce792d02b8318bf6ff7c8ce52c1190d6aea913778261f013729f2c1982e70d", - "aad": "", - "msg": "3c8a2d67e2cb8c19a90049aead360bc8a8bcc7c7e6de60a57d3f6c5fcb2612d7bbc2b07b97652bba455310ea33deba89e1e6d2577b7b37", - "ct": "ae7d464d8d29cf0925c44281ad68ae9f97c30328942da3d780f7457ea128c3ac70e07c2b2ee3d249b60b6caf04eff08fb67efd2b085644", - "tag": "49f6707d7894db24728c0fd058a1d16a", - "result": "valid" - }, - { - "tcId": 67, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ff95a15083419826e001cd8b0f642d8281b76422631acbed8258058091d68cc4", - "iv": "95f6b74beb34ab2d7763a34e14a5b542c1ba8a14fdc0b2042f0fd265c515cf91", - "aad": "", - "msg": "cfeff4ad884c6eda113ecb3a6328455c3ce92ebd6cd07af53d5a89e892a9c804cc0b0846d691b398cc28a10c212626d27f4fee8bf1d74115", - "ct": "6adeba9abdf2bd1fec1a6beedbc23b0b859b171556af49e84c2e10d69e9eb7b487c2bcb7d786448afae5d07510d7cb58deae2ebf3755b01b", - "tag": "f62a3372936dfc68c16ce8fe195ba0a7", - "result": "valid" - }, - { - "tcId": 68, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b4b63bc3d343e8e55f8f49082d42675a696427c24e5a0637fd8517e1d06e01e7", - "iv": "8d9696473a1b955654d1e3d8ad4b9e9870222e85fec4d3423b1528010eea4c79", - "aad": "", - "msg": "c0b7a5a8a2c555ca86d6129359297302f67137474d118f82457778502202b5649cc58b52de3c4c5279265bf93ca7cd97b0112654b4d15140ca", - "ct": "7461042777615830130ccd15b9f3dae1185e56ddab98e7c65faffcd5ea403ae0e579afc22f14077f9be0309a812ef6c42d28b2fd9b2720317b", - "tag": "fb3fbcb125519291011a4d1a71e599c1", - "result": "valid" - }, - { - "tcId": 69, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1143ae6e77b8c91c8e54072b4f0fc6c604611eaf2c07395816b67b77695e9361", - "iv": "3843735fd86094225d60bc3cb3862955166f6d553466aea9499adf468deab87c", - "aad": "", - "msg": "7483d0f4cd0895f4b98abc11ff0be99aa0db0d91e95a612a4fdbcbfa3469efbe3b532a1850e9be14eb7bfdd51adb9a92390ac9c9dac4ad104f71", - "ct": "feb1574e018a68c09340295cc207d4a56034575639099db667cc9eb2782bccf37e6ab29ca726e80ee75681ac04be626ec9ac2a5c4a1b8dc7b7c3", - "tag": "e913a3b97acdced223343874840fae88", - "result": "valid" - }, - { - "tcId": 70, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "01b009a40a55c091f5fd85fee8f1e0cf77be9665461a506033640ed3849db769", - "iv": "32a23428d3a2769d3cca7a37728841bf2b6c58c17a33ef91e87427b8b6506ce6", - "aad": "", - "msg": "ea557974592000fc769f64c33a11721375095143bdf5fd0d32202c60eba7c90b25b192bcae602117529b1d26babeadc43eaf704e5ef32764aea8c7", - "ct": "bf83acc81770d3b62fdb47555407e7616fb6b4137c81e71d7c4f75b609d03777f016be7a63de1cd834fa1470ce5b70df305968f1c2973bf561cf32", - "tag": "eac049e5614c826ddbc29e2a44cccb6b", - "result": "valid" - }, - { - "tcId": 71, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "27460f2e35e1709f994b61a629f7281378164ced58478caea76aed85a82b2bf4", - "iv": "3b87be1cad24b501d4a87ab6872dabc23909f91432fd6ff09319a3b09a3fbf3c", - "aad": "", - "msg": "5493c9fe180adc4a4dc70800ea6f075da88727597795b38f89e1e3442723ce05f84620cc05d906d7ce498d67778d5de95a9e5ee6608e6020fc67c7a1", - "ct": "f784af42aab736584edd54c752a1b7bf788ebdd3aa59c44123929cdf2b89cf6d1ff412a377602d30f1f37c5b9ee09426659e9146f980d56aee408ff2", - "tag": "0e7419e9a139ac4f091b0fdbeec145b8", - "result": "valid" - }, - { - "tcId": 72, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5443f9795c9ddaace62627f53874782ce5f1cb46290744141db2f8251a21a0de", - "iv": "0226e83e0d97f85c279340c0ce50d03303b7a52d279a80e954882dd848529717", - "aad": "", - "msg": "2165821844579d2e141a3c2e1edb48cf2cde23ab900757eb5b7233e5e8dda9221af0ff01cc1ae4132e21bb47490da6d5498b67b4aa6e8bbfb2ac15faf3", - "ct": "ea88d460390261525d9032013dfb7f8142865381a0c41acfdc5d8e1d236d199edfa13892cdb6bc90a76e95c9c53421c893752ff5e1eb675c80e8666fa9", - "tag": "1bdf9d129fa87c267acf68dd45f57fcd", - "result": "valid" - }, - { - "tcId": 73, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "813e73725bd955466c67c77c27b697a7bfd5c8979af6b3b7cc9a4b12d229f511", - "iv": "06fa279a6edaf4af3c0a5be5dbbc973f6c6bbf68828ac8a91f40c75347c785a6", - "aad": "", - "msg": "98e89887f0e6483241720889236d393898c7464f1b2150d1903f0ce366c9c0230f03f245398f505a073ffe394c7f37013339f1485ca4ac1b5a45e6eac153", - "ct": "757ecb47f48fcb06fd5457b2b09c8306f163ad2f76a045e7cdf6152065b8133801d0fb1ad7cc99b1a9155b5665568450298e17d578131f58d49d26f4c839", - "tag": "ab34b62acf4c91c310c162dfb8744893", - "result": "valid" - }, - { - "tcId": 74, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5df4c8445be33845121aeb72ce1f7048ae92886b2c5a97933f2e9b722148f09a", - "iv": "c349093758eee3fae81688857a0ba58c4330165c59f135b0f0df8c56fc6edf64", - "aad": "", - "msg": "270be27cec71f34ee677f54920743a24933fc1029d326358dc87d1710a3b0b8e57094c64910f7ee841f3159cc291dd3590c396aea38bbe7aac816e1fa32db5", - "ct": "89977cce8980d2b19aa353aa67284fba969a68978995d8741228b6a3e2e4b7a06c81f3983dd363f4108de02cc69949a0eb1189f9d1f69698a2418731681570", - "tag": "d7f556376b9745a4054596ff98adb896", - "result": "valid" - }, - { - "tcId": 75, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5d6c28779c5f31e5219b7d8859255bf29cee6e76b3860f72ce07ad78d130898b", - "iv": "a69a29c4c859b931ba571e1acafe4c15296bafa0fdf4219bbbdaaf81f376c931", - "aad": "", - "msg": "a68a74e3ffb7a4daa5cf4ec3e7ebf7ee7d527dc4365869c39361bf2c6f1c8731ea12a50d020f57e3df4427ef7ec14fc3f623694c5540dc3968691a9b3f6527ee", - "ct": "946de451019a1b6a5f59e4de4d0ac4b2b98f10fafe38426ecc01014295295c11844a71673137b307baf7d29b4e925b1ae1f2a20205164df3c2e679637ff0b083", - "tag": "27b177c9079a2b73e52841517bcc12cd", - "result": "valid" - }, - { - "tcId": 76, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "953fb0ebd0e74967730826ea56f8ed621a0a2e8daaaa2a0e1d72b57f8bf21cfa", - "iv": "894bf9c66fb49ff6494a1ac42c25b9e1d3b0f53324632f818802c970e5d5754f", - "aad": "", - "msg": "2066f6fa84279e5ab977777917eaed2dc2b5621d30c71d57b663c0c836e04766ebc26792c8ae9e26b8735e7d0cab792e52b56558f790e07ba891b401fc91e9aa22", - "ct": "a8c4b42a77f06b33879c418258101b20636b97420368898d9cfa3acb4bd8b52be9e1c9b71c0bcfa2b7bd36e62e3007a9576e82a337335a06895f18a30e5b2b0047", - "tag": "985c47e4fd6715913d8b4442122a577a", - "result": "valid" - }, - { - "tcId": 77, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4eefa2d3e5d34e6cc425665fa1a81e792496d2825f7a713cb69a01edaf0c1f14", - "iv": "a7466726f78bee2b47cc3a12e685c90c5ae8b968a547b186513b0ce8ea6dfafd", - "aad": "", - "msg": "dba0d7f664e3019f8f2c39fc3e9c1be697a2eda1ea372689f863ece702fa5708e9fd1cd9b77fa23b76d606b7dafc339fd5f92cb90f2691dcd6b069d0ea2ea782dd2f", - "ct": "61ca55612cca30f283c8d5e1bbadf84e30b2a29d3659a81365585b6a7aa0d70a77ee97a9cc70763ae18d2f5b557636bd2ed4ee936575b62dd95250a989a0f1cc9e9a", - "tag": "356455da927fc944eee56062fae5a758", - "result": "valid" - }, - { - "tcId": 78, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "aec0af349fb301eedc771993b3289a3bdb176025e6c33261ca98dab568fbd1f1", - "iv": "aadd938e01e66f46958083e5fbae504aa36a4f742e38daae09217c934dd39cee", - "aad": "", - "msg": "5545038c26290587066bedff058697493bc3f87f15676d9b4d45fe2afabc733dfda71807c6229a0a6adca2229c9279b749e803b41939665d50628cae7bee176c232881", - "ct": "569976f31321e7fc14710121a22b563173d5251ddc70ebacc0091e5c6ef41707ef7a8e89d4438b76f64aec804cfdd598597e7631bf253c4e0ce2dc3d6f78948b140a84", - "tag": "329b819702eecaab69e59a8f7ef8441e", - "result": "valid" - }, - { - "tcId": 79, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "51388b58076c835e0b1886bc06215737deb01ec35f77e1b3a4236b0b80d1c9d9", - "iv": "aa8cf3701287d61965c9d208c64910f94f9a9d340887dde2e1fa8855d79d94d4", - "aad": "", - "msg": "c10414f98454407291d54f0599f90cf69567275b8827cf4684fde196ac31ddd44cc28b0498df8129df08d34858d6187ba9c1efb89d2688728a049bc01185e2d4751e64dc", - "ct": "4a7b366ff8302809577a12f7ef79a6f42da00758e523333cc13407302682a10307e114d9277d225d8e43843bd3804cf80186c74b0480356b4d5db28dadb859a9e71064c8", - "tag": "f37c240239f84ce387142474d841e876", - "result": "valid" - }, - { - "tcId": 80, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a8399c26603e04536c7f9ac449920c84e3a57ab97545de6c65ec9904c9803ded", - "iv": "9618ca90fb3def1eeae6adfd18aa9219aafd75d35e09dc497be6631b6e58dfa2", - "aad": "", - "msg": "e940b3b274368de43474e565be260b6607c8767566a2a018bda69d70bf80333edd8c65d7c59c6f72806cab4e29fc436da3474b0d5069619005df96339bcd3e4b8c1533b0ca", - "ct": "20438fa7bc9152ea67a2f622383b21cf9376abd08c838cb80525f520a2c088abfa01bf2b140dafdb8bdd0451ac3b48a517703f70ade3a5ef19f7673a019e46a62c5a5d8a3b", - "tag": "43c8f87061783506ab61d729716e49e2", - "result": "valid" - }, - { - "tcId": 81, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ab3b15ab974cbea948eaa63f515438dfe53c37c075cf5b256f435a43045d5a48", - "iv": "28a3698c60c3afe24ac16f14b9c532d5ce70400e60d20af8f9fd312a0ff31530", - "aad": "", - "msg": "919c3c766ef17a39baf7d783bc0eb1d9063891b8338669d20095e8d160cfd61a90a2ca20d0aabfb73d8c5a06c7cdd536f274fbcd4023138b04a8163537d946909c52fcc33e08", - "ct": "aec3cad0e8996ad3b74fef7018a8f0c7ad9be6e9ccf7f5381be6ecb377924cafe04bd17e90978c1706e73af0eefe9e8b9f4e1edc5c904dea0b394c4854afd9bfb78693154256", - "tag": "6c2f667c1699f431b9e99d9727f944d9", - "result": "valid" - }, - { - "tcId": 82, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dbafa1ad7586994ed94ebe1fd2960dcb74c8555c0e7d4d3bf1c5425ad334af0b", - "iv": "384527b150febc21459343313105bbed73344476d4794bd51a7bab46e76ab247", - "aad": "", - "msg": "322bc95fe30f3f4c07d8bc4212f2052620b687a3d1fd1eb917a890becd67a510b95c9fb327fdb45449c0bcd44ec0e07fa2818b182d48b9416c5f1148579fcfda1f32ff9fbc759c", - "ct": "733d617f566bca85cd70aa4f241990e5ef7c60142cec0d1fc1e78ad57483c5fc936a84f6e09470c32c3a873e43b9cfb85eb7386b3e04042c7549cf4a01b5c21d055aa28fc4e95f", - "tag": "1bc67d3b079f36ffcf1ca62400e52b16", - "result": "valid" - }, - { - "tcId": 83, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7af1fef7d7da2e6b3305a21c00c253c870db82d11f64405a1ccfb7619bcfae00", - "iv": "4cd47e58fa5902220668c8b7ea61b4804df98d748a11fc7f1352dc4e9b70f497", - "aad": "", - "msg": "ebee3de7b2f2085184b1904d88f7fbaea37ce081eca8bef02579c5df2d5e77ba7c70d321a6f273aeac2aa4dac7863a13d02b899605fe9cd4c1dc0c7f6e11a98514fb9da3d7c24017", - "ct": "c8c65e178d7edb29c8d16d6f31da250a07a0b72463f51c7f3721d138654472c31c6d04885b823ccedd5d4c626c663d1c06be909b457e5190901b74518afd53cf23f42d5bb652a105", - "tag": "5360a31183b0f24860d554b034f6d652", - "result": "valid" - }, - { - "tcId": 84, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "962f0b58b485ba9ff3dd4ade33e16d8dc3b7f0876347c310127613288836cb76", - "iv": "2d4099eee06b42649292dd524df30a5358311201a6ff2474c87a48ede94d13bc", - "aad": "", - "msg": "fc6350466f72975e5a1533b6655d0108d6a168ec9c60faf9c7c23928521a8c84ea043d1150ecdb3b3544d377c5c8381d7665718c6a6a9d3f36b59d23f80b09e724ae1cb575890adbbe", - "ct": "75d0d07a548e6fee14b0b32c7a8e9f6d4e67e67d43f4cc3632bc8bd92b178a6a981a119bfdc62f5af4f2802f0f249a8a4d64b9d3445f6cc00d3e8a8c6d1792e5f7cf87ab87cc8fa0cc", - "tag": "ea94ae5c9ac47bac0cbf65a0ba93d0e1", - "result": "valid" - }, - { - "tcId": 85, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e43d1e1f72ab06d6ca44e137190261667d892e3f249ad9451080b671bd1adc66", - "iv": "8299131f71905eeff053370843ec76527165f944e2c6e6e22d468b6323e8a205", - "aad": "", - "msg": "26aea27c1f92dfd3df1f9815f936802f7acb10b48bb5c39ed9f384a458a6143d4125e0fde0dfa68e7fabff47c73771653ba88b41d1cc35fc820e0d6a4515ca525dfb6ee0ba7d0749790f", - "ct": "8fa604d9334639396537c57df63462693858dddf42a89fadbb1437d9ef8f35b064fe532f7ad3ef3271f5e4c9a9715c8424a73b0ec388d6538c2677b3a1fd2709ca9a6421f2fdba49a6d1", - "tag": "2e557894409c66f817115eb2a2945e6b", - "result": "valid" - }, - { - "tcId": 86, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0c839efb654cf442ae8b1e6e1716f671ec29fad2e90b9c8fd8aecc7fb633c10b", - "iv": "525703fd2483494e878abe057c612cc6ce6e907974faff95b7bc073484a8bd68", - "aad": "", - "msg": "fc566e1fc95b4d8aa7f8724f580c70e41a2ba936f2e16efb91c65463b66ebbc5fc7163a4ad09faa68ed6e451ae277cc2388708156161a819fbe28bb66bf746e24082f406ada1c2dce0e522", - "ct": "a01aac4af93c331a4854c76b29cedfc198e3e2c7e380be9248bea45157a169ad2f47cb7399dca39ec5c645245f623276d2994a4f3ec6653fabdf1dd6451e2b6acb5cdfb812601786626a4e", - "tag": "6fd4b64a68459503e721fb2914682692", - "result": "valid" - }, - { - "tcId": 87, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "800365f95f001fcce679bb5d67e613ff45440c4fb152610a7028f8faa4470cb5", - "iv": "a68d8716a3804b799029afd4d202d7223ecf0342170fb4dbd53551672469e1f2", - "aad": "", - "msg": "73329382eea4f1c758904c06cb76998f6801d42e2565ea9dda197cf2dfe26f83cd47c754fc4f2b6a67a930dda6f7a33c5aa21d15abf12fef2df9ea5b11812cce9c208fb2027e9bab474e0b5a", - "ct": "636cdac619a3383ed9fc699cb7f7f8b049f27ec42f2eef61751908b3424ca30cc1d28cf2345b2e13b6ec2be34164e381abaed57a9bae171718415c90933690ff6fd95a2a20034ae9a22704bd", - "tag": "13000e12020169b183f49141725b7b50", - "result": "valid" - }, - { - "tcId": 88, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f6d89883c6622e9150e498f2254db6b0d8be416d52142c25ca5adb0fecae4765", - "iv": "871b4cabffead7733f46862f56f1821c4f267633ecfd10bb18b2976d051eb1ac", - "aad": "", - "msg": "543eec67f637df5d8b9929021a37865b1eb7aa171706593a1c262ccef485f1f1f987d39c2d4cbd36f219a59b3ff656d53783bfa89b2ccfca2a305261a9a284f9d577bdb0f1db9594f3819e102f", - "ct": "a2d8490f4c74759450d8cc6d2488681804f43f57b88cdb9ab0bd291916126a8d5a3a68eaa4174992f3744c7e2979999f78389dd8235a9026afbb8c91919e9a2935715f5445f119537c099c71da", - "tag": "9f0e4c071172bdfd2aae2405e9fddb9e", - "result": "valid" - }, - { - "tcId": 89, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6d733930637a25e68fdd877f0dcca0449be4834940c0f0aac0e7f02c7a996e0f", - "iv": "b1730671a0a8d27424144a60e0e1d3662c14db8462d041b3f5d398a32ccd21e2", - "aad": "", - "msg": "9155f3d749af3d09cd3e6728be44571fce10d1fee6c6ee51cd820612d2e0ca52e50483f1d945ecfa2a86a84f13409948180742bbb6b23e8751eacf6791150732fd5a81510445e2c1382771052763", - "ct": "a47ddfdbd1e46f8471f20a0ae8325e937ebab7fee3cd667bd2c2c349fdd4f058fed776a15f32188293a58c17b73c5edb8f0e1b3beabf6224e2019bd5a9c6b0d851b2353c8fe992eacbe159341af5", - "tag": "b85cce42feff6123fa771faf691d4c57", - "result": "valid" - }, - { - "tcId": 90, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "387138ed48a8b755d3d8c3f3a352c74b90dd8e6f456bb85d0f4271f40a1b1241", - "iv": "7f1b18cfdae24e0330bd1be4aee6280888c8b7eb2fdc5c1c7efd12940c72398e", - "aad": "", - "msg": "2dc0a6012390d8a9d96c1dce9a59366acbca110b2d9dad005262957c20a05d9e7564e90e8a63f8e2c261951ec92dfb077c88e0fbd38d7ba1267e4bedf2277370cc9d303e95466caf1a19c571481bb3", - "ct": "7d27081a9c45cb9b884392347cd9183e31ae8fd1213f1de8376d1c6697db37f64c2ee3ee431f83a6a3283e31d1222b926fb25e293ee201933b0c73d35c34166c67fd51c942cf77188d556c281a7d28", - "tag": "71cc48d2035dc29549b9d839d01a5c23", - "result": "valid" - }, - { - "tcId": 91, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "546c0cefe699504e0ef07c0f3d88ea9367583103b6dceb9063720f9cd8d02aab", - "iv": "037fca5ef085e9852ae6bdd1f5e1f114c0727160102db68f0c65607e4e3b679f", - "aad": "", - "msg": "54874e67863b4edb2607ac5c531a7005b6f115003b16de389acfd497717b1a59152cb5281b22e63b633d0eae6a7175f026125826b81ca28e3eb1baea33e380ce8f4b4acdd10914f6e71d5f0efff6abea", - "ct": "a83e0e878ad6262347dc8d1af879635265ffce81a5096b9ee19fcf6c884f37db91166016fce7b4faebfe9d2fca9d37386a98685c8eda50547280745ba38a97718f1a78db7709c098ca3c85d62abaf130", - "tag": "58351cad5d13159b047a7d9d730abe57", - "result": "valid" - }, - { - "tcId": 92, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7625793f758adb1f2bb45e3f025d254cef443ff763885f75948f74dc9a2354d0", - "iv": "d171126ee49f266c1031258a806623ef3f9410b16ad8fa03b6c058051a323dfa", - "aad": "", - "msg": "5a446d35481128097c481481d242974bcb7924861eac24dff59b7d9be6e9b3fd47ca6f54b5aee74ef2e730d54f1be83624c574053c6f1d85f85c0a50be65fc347bad5ef332f3f89b0da2f4667595308bf8", - "ct": "84949d716c3a274eaf6d1581842a1a62fb50db539e9bbfa5976a74cb14558dfe28a7404a3cd526d70099b67489d6ffe616952c34231765a89217c638e29dbc69d10d123f4baa1ca74a696ffda74063c408", - "tag": "1e238b72c1158813f2c321529965c077", - "result": "valid" - }, - { - "tcId": 93, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6c63faeb6b187311db36ca931187bfcd2568f596784f9034ee7d30d63bfd97e4", - "iv": "c05f2a92ffbfc2bb2be5798e5719bb9d8542e441f28650b1ed27c6249c3d0ec5", - "aad": "", - "msg": "a90fa860f84a242ce1afcce0a3cb34a438976344a521f63e49c7a30041e3cc7a85ab0ac8aab0351db553de9fdc016f00d1e1619c62fd72a738353751ce7e6934dba413d657dff3bdf1c8a9567fea21b455c8", - "ct": "e8d8325e2c96e6a7d01af42ca1a2429c98b55b7f9dcd91efdbf8f05a9ed283c6cce10f32f0fee19835be7ac683deb2bd259ab24b32b66a4d4265fb12885fb2dac431ed460d79c9424c522e9cf37b9aa29a08", - "tag": "ff9e790ffe95560912432104d3ad9c77", - "result": "valid" - }, - { - "tcId": 94, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e5dc2c78d0c96ef6ed37b18934a2bf84569714f22dc1535213d95ea47515ecf5", - "iv": "c41ea24c591654c0cc29e8f71c9761e8d82eb94c7e76bb6f10c2f33a417f8230", - "aad": "", - "msg": "6d82390933d6ccdc18940bbcdeaa80136c03e818db08c9f0bb456e44593984fd36a3eb56d86d4faf530df3815c18c40e4dab155e8919d9794fd45164ea9bc841effe85899b638d5d5745dc54af2510fb972739", - "ct": "78fae7e537f674086009d54f5355a62696b31f2370006225c658056df2c473f9b845d3bf75467ca5098e8ff16e8c507a04601c076c7c7ca5a8a03ab3f7d4d9d9d29dc128bf7a8b3b17eae37c752e5659277b52", - "tag": "79a3cac6e01bae0225e370db54d1b903", - "result": "valid" - }, - { - "tcId": 95, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9d68be8b4dba89f11a41bc0b4c6cffc27920f5c6b32cd44f65238677024993fb", - "iv": "fe2ef693172e6bc2167cb4ffe3b995592db60ee5bf21a853b643e65978f225ca", - "aad": "", - "msg": "1382fb3e514a8d465d7bb917abbbed945c6eb8b2fc764e8ed639e920a01d03f2da00fcb2332c2e1acc1587929a51f0edb08fd0b0f4b13d28ac2dfba203fe7ee7d889e9689f2b1bf96553b38cf51ce59126c666c3", - "ct": "fe8e475d75674bbb05ccc58211c4fca37a1ca5f447b140a7b34b3e1f6ad29a8c060d1bdbb82f785e911e5ea7d2842e004f1f77e8c61f65a00ff89e8683e5f43535aa5f5d2ff66c8f9492c6c5de14d370d3317e86", - "tag": "61e51c536f9c86a061414c5b5dee45e3", - "result": "valid" - }, - { - "tcId": 96, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b9a3433c5b754c93129f60037a102b3a3032449a6624814d90ac9dcc4695bb42", - "iv": "e6a50207393675b242c3dc271faabe98bc77abd89ac3a4c760c5d03137c9acf3", - "aad": "", - "msg": "f97aa6812235906b91e15ce30e1c2df8d68aaabf8d54f31f3df52d473ac87bc8053f101a97ac263e24e528b0bd20a0a7a02d3b3fcc514307747fa74a4463d801bf6a10f765780a8f13758c09c2a2defa40af8d0533", - "ct": "f1118237d41ce6c56148c1b965f9f18497e81ea3878b6e6f5414e7b3d22dd5ba6a016c67f4559ebe9e7578c7e9f64d2ea75e4265cde88cc9c67b8605e6f52bda13b496f11af6ec7cd91ba99ddf46298684983da6b1", - "tag": "4dc4b075da1391b27d936f853575c8ae", - "result": "valid" - }, - { - "tcId": 97, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "47a0db11b5cb59ca3c1d185fd434865c5b0b47cb95e5b7a4d1e4d1e211ce90e5", - "iv": "f8f999c18c006eed723510d64331a14259d2ea9b88aa292a72208809719fd0c3", - "aad": "", - "msg": "e110aa163c5eab5319793c12502a7b69743fafd0ac06b0213c6385efd68bda7259ff7ce4d9f2895f7e9e13b548d6be292ee18c226bc26b6480a82cde99cd437b7cc48e38b4cffd3ed23754a8567d37c0512116140515", - "ct": "c6de391471cdda1f75fd83ead2147dbe586104e43e8271c256b06332fdd7655e9d7e4b551e5a53159dc348131c885519e8d9c99a3af0682b7f46b64cd3a91384c64683fa2b79480c6e6ade84b475175c812610edea05", - "tag": "0a841ebdd9abadb44509199c1834d0fd", - "result": "valid" - }, - { - "tcId": 98, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a4b87442a2666484d75ae7a7215ec1c468b925efb7235300657c82152adc65aa", - "iv": "3c60cc3f18e77766a13990d4bca80b117c1ed906f7620472bebe167481fec9ce", - "aad": "", - "msg": "22f96e7a282400461cb1a09e3582c45c72728c9eccdda7e36ce6e79f776eb5d436d320ba221f693fc110d1ee14fef041a708ec35db2f0e8a2a9a89b91a276fd1714aadf39d3b9a7cbb98156f8e1d05232325086f1074a9", - "ct": "4328aae6a015c3517ed08696c4479837bacff1cc55486fb3c076a7e645b0895ef06f7383ec2316df04ae94d0fa45bf23585d25c2104755623363c2454d2a421193538a6e828749fb687b19041926cc53eae973c4699124", - "tag": "f8fcf9b8bebfc55b270012608b62971d", - "result": "valid" - }, - { - "tcId": 99, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a68055644644044493ba5a4bae205f13b67ab4e07c752dd9fef4f483983f1ece", - "iv": "cb4e77955c5fdd287c0ed7c5199913db802371e863917f5018adf22d60a7e160", - "aad": "", - "msg": "2785b80aefde20053ca7a8f97a872a11f69833fcb9645ce5febc4e37ca45919a904b9cbe49f254f4aa07d9ea12a2759e53752c34eba1ab34533a2101ddfbc5f20aef50173f92a011e1d0470aa5763de7cd1c5dbf782cec9b", - "ct": "f7e436f5ce23a71a467a41924e91871e76b6b4fc6da94d859c751e46a1038a61f3b8217e354a0777253085ef81dbef78a47bff7d5d91428da59566ccda428704968dddc05eb58718d454796d00287b17da7fce6deed79594", - "tag": "af4ea3e6296642ab32cafa501c757c32", - "result": "valid" - }, - { - "tcId": 100, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6d4e98292d3a30556ab943a056c6a751489aba9a768b5004cc52d51ce09fa5b9", - "iv": "7e86967adf3d6061963c7814bec20e0bca67b14454d1871c878a37b344dfe2a3", - "aad": "", - "msg": "524f5f09a570222127d8eff53d34f49c325206477fe2c1019ae94041a6cdedc7269183e538cfee5f0447dae6f25db078197f67c00c07e0c01a2bb3e2dcafe8842c1eea7569b312e948d182167191836fb2e3f552dfcddd801f", - "ct": "a6bf19c83a9875f1517750b70cb42814185992e8598bf298f58135c8b58f75a074f306d3ee66e897539765503b604051c27b82b32e68cb5fdc2e84744421e21e9dc69cc0499c9cd0d21b99f4edda01ae6b5ea1d0d200dc8345", - "tag": "bb869db149ca28ec26664200bcb2e0f1", - "result": "valid" - }, - { - "tcId": 101, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "38915b14a681bb7962f650f6cb2c41710ec230932cdca5c39e440c7bd07fbbee", - "iv": "bbe4ffa68f788d4930174027729b3cbf0242ed94e0670d37d4ae816298ff48f1", - "aad": "", - "msg": "44dee0c809bb5f630e618649a54791d84f9fb6301fec1e1dba2ef8efd46057b5ecbf3d427a275d8dc78900d64f5f6ad8bb20191a5e0a160a085ade07ea588afb89e818c64ca00d06e623a31b3e3b7b823a7d5fb9fff70747411e", - "ct": "5158994b48d5e8f8e32c9fc3b14f4a3097c648aa99c5562b014b4aa8253443ef04585bf040b66b1522b5d5b12f376a23910a83c468d37e059bd29780250bf0f70b50a4622e5e550f4ed63a437ec2d8b3c20a14ac9e88dc1c188f", - "tag": "e13ef6d793e8ca8650a9ef760e277711", - "result": "valid" - }, - { - "tcId": 102, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "97a380cd6e0e50c6c35803e6334826ee73de30d2e5b95bd97b84c462a3362e38", - "iv": "cb2d1caa5790b272d86bb67150123619dff9db25f725cd04255e470dc23bef13", - "aad": "", - "msg": "18a0db8177522bd244097c6055945083f025c0c68c88470f49ea4bdc0963061023887473ba38d7a97327bdc5392abfef45b9cca2e1df026b0b861a2ac4758d32d285cece8a5bde4ae9856a2253bb8d982bdc72746736370bab5c57", - "ct": "1f1375cf308f9edc70a1a46c58a634c4f4e1ba4ba69443a6e21cf904529627afe092e17d3ecb3756af7b7965dd865ac5741951ed7b1ad640a760c7c8fa0bc715b4f516860857b6c641011bc06c70db5b60ef0a02f542a356d3a571", - "tag": "66c17a19e08960f96b2843f3364ef75a", - "result": "valid" - }, - { - "tcId": 103, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c06ea90f1bf2fd085184bceb941e681876942570fe0032acf313d527b05a546a", - "iv": "2dd9c77db14bc80954de50001d88c3c69b681d99e1e33ad185ba806c93adb86f", - "aad": "", - "msg": "46581b4d1b90fb4ad63268050ba67ae3b675470feaa5b9142e50aa9610ffb723f5a53a4cab571c80722951738b8aead58b2ebc93bdcdcd9aee77c3ad39c22d338263195018655543c62e53f517b4c68f249fb98c91e1a475450d9b93", - "ct": "22f4aad1c6d6bbf634531ad66ae52822d938965c1977dd0d3512e16334b290f8d82e0f207fdec7d3960424c30f37035a928b4e45be1aea02a4784962c810c50e6c66c1b9e58e860b1322f93b3dda4e144c3ec5607fc65c9470ebb9b4", - "tag": "efd01de97a67880506a7a5ae3723147d", - "result": "valid" - }, - { - "tcId": 104, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cae801beb864dd50bc4d8c927c3760a062ef931af21e292c0c7c13d98375f04b", - "iv": "468fb43dea45d420d1cd11edc2817dd1cfa19f45ea39764549a37671c0237a64", - "aad": "", - "msg": "dd42114ccf0a304dd00f98a4bfa798ceb97cadd5a958769ea741017a80afbc01cb60c6ba92826fcc3a671fdad09b07f9ef1ca89ac121ad53aea137f32416683e40a021422616a35d415a53465cb4b8307cddfc0f7a4bd95279ea867649", - "ct": "acb8c83d6922b2b184f2cd93773a938c26c234fbc52a70e4a68301ba6c31152b300686c5758dde58655b6ea201389e5ef18391058c1539adab78a77e1a3d0e81d6ebb48a089aeb0350f58e46408949fca472cc453ccf3973d74c5813c7", - "tag": "f0392f2eeb65821e1daf2b8dd7e3ab30", - "result": "valid" - }, - { - "tcId": 105, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3eda56d5d221eecd63081df6518aa6ce3f037d878e14874e9dcdcd14bae27d47", - "iv": "1c3e8062fb918d723416cde19be8323a4f25b322ac20148a2c5c22f181db0cb8", - "aad": "", - "msg": "c4f661c661a86d25681bc04a63620c82dd21fd461a8445fd92525827bdc80d22e9b27139a8beabcbf40a3b54c76319f838f63edcd76f3417960a52f94e696f649f2e9024155d40c17afd7c4ee6230467a497847a2788f3ce560616325f74", - "ct": "e3c2a3f1b11e441bf3787c92686c4865079a047d7a5a3be9f28ac2a57bc3029c19004335073b0a254861cc03cc95fb86fc79c687f40df5b390acac6e7de29eef886b75433811db678fa7da5d8e86ad0ab8ad5b4802b28f6c8176cd2da01e", - "tag": "3a8fbf876c91ec124166113ed9e1ccf0", - "result": "valid" - }, - { - "tcId": 106, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1db6c36a63b2bdf9d05f117cf26f79845399d36e1e912061ea40e7cd4ea0b993", - "iv": "0f701973294051e9f4e666b71cab5e88b12af7017602d27fb375182e5c579ad0", - "aad": "", - "msg": "dcabcf26eedc5493e42fcb41802d347eb8d74de88ab1003ab90058c8da20edc35d86e95cebd1d65b96896b3e4153e43225cbdbaf72d56c9a0f75d54c6c5a04a42ecc1b4813f80753cac1d4dfba001bb69cec2345dba87023eeadfbbdcb1dda", - "ct": "e7e2001f56b118cdacb349f5e924afdaa80cc6d041aeb09e059209aa9c93e76df2943ffc05c469bfd78cd14d634698f0dfad4623080f973075f64fd5d89bd152b2dfe09e39f3615959bb19522ef9f90fb1b78950384df207e98c2fa08dc813", - "tag": "1a29c7af8e5b38d8c98d87b7ffcdff34", - "result": "valid" - }, - { - "tcId": 107, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9338aeff6495de87344a809830c9421e2a18a58656c50349f26cefbcd13674b0", - "iv": "498a50fb889a1b2d4586fe5e68d89ec471874b22f72d02f5d6e206ac4f704043", - "aad": "", - "msg": "9b9c440ffd524c502072c9c6fca15496e0c8a0c2ae5389367e32fd9c17ccee1453e91d971badfcb584b11f0d0cee960cd0e4042b79a03609e4e9fe557665af5e48fcb09ec3baa1f8930314510737a983e4cd6148d85df07793a041b1efe33a66", - "ct": "9ce4279ac4ddb65a9b35a858ed9d912e343803af65b5027b26530b0d284876bb23461c948defb859944e5b2758995b6a90ba5b7eea8d879dd9b388a318ecaaf69e46c64cbc2c6367cbe5ec5ed5dce7a8d0344ba762ae595ca54fd9214b6fb289", - "tag": "8a5c63f78b8756f6866954593d709203", - "result": "valid" - }, - { - "tcId": 108, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "26f0dbcd4f8a21473ff1bfbd6d10a8a6047e525d232a2450bd24d3b5c9215a21", - "iv": "8dfa6f3dec1896a3ca61714c6220f6393f11e77b5544a28cfba740121ea9b110", - "aad": "", - "msg": "457ddde67ef2657d82088d9bc0a5108a5630db951f5f22613c27344293e7e706ab1d761775826c1f8f541039f7b3d2790455d743119dddb8fa25dc5bb2fe6ac2fd4efc18fcca2bc5b724306ad99a19f4342bd4314b6d97690f99f3088b53a43f57", - "ct": "447d0c6c91b15ba6a4e456ce456d6fa6712f407e866bf7c465f843f5ae549ba2e7b44d4746566eeecf6d8d9a5ff1cbbdf5a75d6f2374e103d7864cbc4fd62f37b379125230a43399b21726159aee9ee3d67bc882a51f6fb349e6e8ceb39d1c477a", - "tag": "62cd4c95d51a93efebd94861ea2c31ee", - "result": "valid" - }, - { - "tcId": 109, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "283287b47e3cb0015e4101e0194f7893cacf06104cbf397f40077a23396a0f49", - "iv": "bb2c1f580a5d783f0b5a7269e2c9172546031885241c0ae5dfbf81f37fe5d917", - "aad": "", - "msg": "0ba4fd638d13460c7c14b5a3f1a9cba6f19c3f56183c08b38fd0a5d552a76c07e9ee074b20c61ab1792a46de1a29586fb23b372ccca407351bd02261effc2e6722704e4a89712ed147f6eddf42b3e8ff218792d17ae590bd6113dd105adf9f0198ff", - "ct": "92fcb8f06bdd93a24f59d7cea55143abccf53d43fe95f628a96384ee352557e6f8423848eb47e3dddde9dc3d60f460b54b6557e4571af9d557ad234b4fd707e3a5c749330c469ffab6e21137a018204e0fdfb70c8f9a8363357fb984856962e763d4", - "tag": "fe1b54ca89b431767165d2de9b868d9e", - "result": "valid" - }, - { - "tcId": 110, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "937759fba53772310a8c4ca4079044a1ffc6312eddd22b10e5ac0acf560fd4c1", - "iv": "2dc84195607333fe77397cb851c79cf74c71a0aa6b5f5e263e910754e499cbc7", - "aad": "", - "msg": "4576cbd4036c3ae32bbb5efa191f432eeb3545f861e4334026c8b57f269a419a82d70ce2762999a2879e0bc271f6090ae0c4438912a35e705f4c091518af0622464653744485bf4193f3eb75635d008f776d03c82f00bd0f60db227746c8d43dc1eebe", - "ct": "04adea81fd805e7ce6c4d1079d05582c883c0e2a1238cec232ed5d9b38b38af8ca649482e514620d1526fda887f75ffb80876b9a729e141af07b11faca2052e434cb2ea10932c0d1e39c9cc13a1ff218333777f30108e95f32c0a7323f1387f4dc20b9", - "tag": "a55d2d755b75bc68cf96b46789ce118f", - "result": "valid" - }, - { - "tcId": 111, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dd67b6c3a25685a1bbd1edfb7b5c11786b72b1fb882c32a9e577e37739f92a76", - "iv": "40e7167462b6697025f725894f5868198d6a54752d5497c2a37a7b7358b0e3b0", - "aad": "", - "msg": "902e8c211351860e0d355fbd3a3bdf7f453d94554d9f06c067bc808fbcb18e09539a19d8bf27af323db330c58a434d0dce018648c6726903660b207ccd3038b39a716988aef28909148b68e37308164fb07f942bc6e3bf9f9fa513b378c5ca7262800cac", - "ct": "b00b02c53ed46d1029557f902be59d7221310587729c17f3b65a2ef65fd1d70694a52af1be79a19c22b62805dfb15391e6e2f290d233bc3687719a0cbe99473b7cae417547589ca1d2c16535bc8e774375378c97f157706a5f733756fb7789dc3a0fe858", - "tag": "c334c082bb37aa106c2f00e0fc537aa3", - "result": "valid" - }, - { - "tcId": 112, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "db840593fbd34782a45fa71ac18d4f0302c2ea8f82b3bdc0d8bd3c5d2b65dd03", - "iv": "fe0aa72957a2ca8a09c6df04bc297f4f34bad0a7bf64ce48c4fce967369880f9", - "aad": "", - "msg": "2ea7813e96cf44fb3d3028b887bbb3ab2552258fcb44e741dbc8fdb23fab3c0ebaca5b1bd611436582399d4bd06eeb6a8c0bb0fb3173b3475c4b29f9ba23148077036efebc599c57ed816e1ea802474b5d872b2071ce19418fc52f4ccf99619181a29daa4d", - "ct": "0bdb4eead96dc43dc8802ba22aefcd865fd3f5a9a9c0a05b55287d7d5d77f5d7e26d5a5f24320914291ed0c77566ba53e246f973645870a69ffb06ab66d3bb3619517d11adbeab2a89e05d2ba647b4bf667d866f460a5696a901ed866113137a90ccf46d7e", - "tag": "f377f4f9fbba2cdbe175d0b60f14dd1a", - "result": "valid" - }, - { - "tcId": 113, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f2dd6f4a9ea60d148a72203322a09dcec7108320dd29dd258d4c0f72b96b1645", - "iv": "d4ef1d71a947a11f8c21b0ee1c77fc1958f92103e6f24973bc0bcc5ec579c31c", - "aad": "", - "msg": "5d383722dec098edbd2873622218d23cd594e3270c8554a60012d37db2450258ef4ed6d46c90ef334b6bc7facbb46c8cf851bb725c40324a21b1e4f664a92945ce5856f38b80853cacdcb36a16d75b9b00e9fe398790d0230b089d4c02c08a2538d5d827e9e8", - "ct": "77db238f1f2d140cd13c0d57a57cd5e6fcc1a17c4db9a75e5f6dc13d3511131e621f400ec5c68f19c236b1c4b467303b6aa9dccb1f07aee7e4a158b904c4bb28dfd45fb178473633970394bc19bdbec697deaa958ea5b326a102a5a6e4371a9b1fd517c461d9", - "tag": "ef86117d4fd10543aa62e58c22598083", - "result": "valid" - }, - { - "tcId": 114, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "858e2e9d85a091a17ed2259936c487ed520899897d58a6228271edfd97efd5db", - "iv": "714f06a2c59acd15b55cb1a6422eb6b7db374c4e6613026962abdc26271a1e1e", - "aad": "", - "msg": "2294d62b6408071a70dabf3db40b8252d53ac131fa8eed4aaef067adc0ba7afb61183a776166fdccb10bf56b3def35529be186a42640ff6afde3ef09d1e7d186267593d77fccb8417b7c2844294179422f19ede6a2fca0ec757022915fb16b29e2da52e29f7e2a", - "ct": "585b094d40aa23f27880e24a71ca29789711ea56ee26f240b06ccca5472fca008886306801da0572aac6f69a95b5d462392b49b110feceece5818606f4254ceaef1575e8be3f9f0d787e01fc47f13ce7b9cc15902d7edfb20fb31f5ad3d6ab2c2617eb1377a40f", - "tag": "c5a5d5c1bd843010b41bf7ef805a2f89", - "result": "valid" - }, - { - "tcId": 115, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b998b9cc298fe42786baf5d9cfe2f7d23cb9b896a90d5c9cbcb202b72cc905ca", - "iv": "cbd9b5db675a755213818253f99596983618e15c2a8ee192a5f0dd9158c3113d", - "aad": "", - "msg": "7aa7fa961f665c58a8dc0419cb0f468d35854f68d6a2ce3c8a96bfdcccd82d310b0a9c6af2f14bce065c934ee420f19aa868674ba2e625bf3a1939a93dd2f4a6c4b74a8e223efa78301a269e83455ece605d878ccb595c5dcaaf3b7f77380887a54a8bce68fbf64f", - "ct": "bd0e41b06a0e77808839266654ea5fde5a604dd1d869a629b2f27a34086dc0f064636451dfe9ee3cc455b7ea26ab97fc36ab651d5bb00a385ef2181dc5362fd032df3cdd590419d471a3491f90da7e319559cbe4744cea728d96639fd91ae103a197e91c3b49c40c", - "tag": "1afb12dad52af29dbe58a4b9143a6ed9", - "result": "valid" - }, - { - "tcId": 116, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9940e0bee193bb33981f1f181825d626938e1f93d5719c38c7818d2a32ba3afe", - "iv": "265d1b0e741badf587b06ba7c439c74053fcab0f0ae025108d03b859d8e39e69", - "aad": "", - "msg": "ce5ec372ac106372a6acb6d0fb5dd42ad2ebe48313cd73f532c9e634855f78bbc9c6ba17732e77dfc0ed6a3dfcea668118ce58915d1d94a66484af6bc23816869213189d446a82694b9c8f7f6103cfad87b579b98dbff7df9e081a5f2005ab3610ef6fd4e50b91227e", - "ct": "e0d48c5a435bdb8c98a58c7f103a17be52985643e4f0d77f720569cb858dec90087acf750b54907f17dbe4ebe9e5601a6a5d9d9002a6522128f759272474f7454dd0331ea4f11595a6fb8407296ca23fce726551cd59fa4cbe6b35b84ebc87304341a5e423cdb77305", - "tag": "e082feec52b84df32d6bc7947a7be5a7", - "result": "valid" - }, - { - "tcId": 117, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3d4ce2161af71d4a966718736a6a6f4459634af2f23041ad885647dbf7291485", - "iv": "3f080c9953439915cc32125192e6e8d15ecf893223d681059a8510ad90ae94cf", - "aad": "", - "msg": "d099b100bb3ef160b285f332e5bc7365ee35b6fadeea514940ac2427406f44963827c88f489af217c15ca85b2532fc4425e41a7cee54ffe01828fa4c449fee2af2a491ed316766fdb64ab555eda3f23b83714fd2b082bbb3166ad0fcfa4c10c54f1b66ebebc1d3c2d922", - "ct": "bcc334685f3934f57f4d176475f2682320aa8b179ff9228df415d8e20213a3ffd9c5d82e7e0b55f754e6edc70d794f328253ecbbaa7e95729efe607874d99528a9fcdca4d82c8ea54939d5dea3aea235d7cffc29fe7f2b3220adfab84220de5bbdb7d75153ca5c6c636a", - "tag": "07aa5ef35eb6425ebdc9aec6de1659fb", - "result": "valid" - }, - { - "tcId": 118, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cd602a0b51a71c5d684707a8b9750d1ee0b688551d8330c97c08dcb006906b6f", - "iv": "a7587bc42b2d84fe26a39d00554c99fa4c7215f585435ada89e7f4edcbb05ee4", - "aad": "", - "msg": "3b22f2a9a35d715b0fdfcdac27a870b3e505864144df52ff18a549530ed3508b9a3b2042d4b63495295479b5c4fa1b156ad48861a59b22dc7a87f650d72782575f7fc4d45ea95faee10a5bc0bc172db11cc5eee7a54cabb336e785ede39dc60ff9b1dd330878245e28d369", - "ct": "8c27689b3c025c37c5ba2e5291249ca86da0680af7e6afec9b4fbbe24f44efab2efb1e5a6d6ba9d1072c62b9dc0916f5d8fc0acb58db481475a62ef09fd43fa809fb5a4568e8c0bdc742e6f3c4b9260129d0a1a187c4fbc70003969a9450fc2cca699728907c470d4c91b0", - "tag": "1c83ca88f843f2ef6c195a12f49447be", - "result": "valid" - }, - { - "tcId": 119, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f3852497c98dc0432903a4a6b2282254f8bbf4586f9be9049d967d994309bb35", - "iv": "fd53e4b8f244fae8584e554a48316b1e4fa4985d35277365aea64d919c20b50d", - "aad": "", - "msg": "56ac8ee505201b918e51f11dc90e3ecbb6d250332fcde986c9dc17cf697780d56fea8739a24734f8345fc9d923a2dd41429d63711259d0171675db29b0b82317f37e917931765b62b4a7a4c29c458247ca7f1e3071a400e3f5ad30df3849d55d993cb32e196c0898bd429911", - "ct": "adce79789539e59805cd3054ce802453a09efb886e151c4bebf83a2859267f15cb22cb88ed1603520ff06a18658090da9b2f8be221a77b73e5b90c6a9b11ce06116b0b334a35f9090e7d9122134a54f60acf481e5b6e235568f667b19fc20111ede0ef20541d0e91aa562747", - "tag": "1ca414a10420629cd8a7c37f8b479ec5", - "result": "valid" - }, - { - "tcId": 120, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "507d2bead399c3757cc2622ed90dfd179c25b6d59683fca223a0b9cdc777ef9d", - "iv": "c54efc411fc4ce2fa878710d80164f0005e08763e190ba6a356e5655f1e7aece", - "aad": "", - "msg": "e7f635c5c6567aedf2eaca58e37f894ee1abfac1568e3416ffd6f26865f6d7cec354255fecd63357bc06c0d25c835861470bb4acafa4488bb1859c5b32637101cb10cc7823c23a84bb3752a2a98e0e3fd08f421232318ba0d25d4907af6af93df82da6ea46f7e64b554c5cb121", - "ct": "8d60687e8c173c3295d92e9a6dc21804687078c50386e46e8dbbcd6fb4024a71be92970308ee07bb5ce2a08be72bada5ac0b1972650e4edd2dcac3c08b690202cb69893676028754da08abbcf321de463c7557e2403d177ee6c038c059c00051cf5f631537b8dc519b9f87cbf7", - "tag": "b8a87a80d7a7e6a035ddc9288948c122", - "result": "valid" - }, - { - "tcId": 121, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2f9fb9d0d2d3212ea06404e95c731d7a8fb57dd05c88c41c78a0fe219f1459dd", - "iv": "7b2c1a71d78ed1c428c622a0b1ed2e24546993553205bf25d1808b552186617b", - "aad": "", - "msg": "c23cc8c2276a61b1d98fb9ed9beffdda88d984436d2ef21f42540b4b610d430514735b605c121f049e8af728d5cf30d53bcd596c10704f59e07f1d2c6414ea6299613527dc0bce9ae4dfa478d947f211c283ddc1ea210853ed4fdb615e935b62253ce4f7524fd850d84c617f18ad", - "ct": "92ccfc7cb5d71462283abfc4abab58695eace0ad6545c02f4677d4907032f59cd4007c654069df66257a142371d4cea9f23d717acfcedb64c2cb4915ea89ddd49bbc4969d955fa6428274997e233ce53dc5641341556b2044bd6573d5220d6a2ea0d1003960dc14b407dfa4326f4", - "tag": "3719887e415b9a7ca049a82a84805863", - "result": "valid" - }, - { - "tcId": 122, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b9a4a4299c39539cbd1c5024ad5e91847448550e0231302709a5ea36c13021a5", - "iv": "467d0eb4546200c89f95b15a4c66b24399e79fa81ccc315ccdfc2a5094918ade", - "aad": "", - "msg": "ffee593006b52f345dceb93760421e1cbf9b14e332ec5394d5974409d5bfeb1fd7df23741d502da4f69f6710f77be3ea2a2b4b5b823fbc08b6bd5b863e5ca116793e5ae55671cab713f4bddce47e27f4ce687d2874fa34e3df91eab40c7ea67b52edfd07de80410ea5309757ffb096", - "ct": "6c94e4b4285185b5eedb33ab4259541c32ed972dff3bef14e2e71d6ea56e25d127294232303b8b90e667d89a1fef01d507b79be1a5d8c6a1b5729c86ff8d38ef7591f1c35dfd65b04ba11d89b77ac20839376a2eaa7f07ad88bc7677ca239b587dd8038450d54b4ad35615490d0c07", - "tag": "d7af6c6fc75ff7bc621cb1c1a40e1be0", - "result": "valid" - }, - { - "tcId": 123, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8390f9ae4385443391ece4d8d75b7c71bced0fa24cbd2946c9df1b20aa0c510d", - "iv": "0080909592f3c9d79bea12779ceecaf4e39f89618b10e02f4e9f54936489506c", - "aad": "", - "msg": "0fd634459b8b516a524e052d915bb22163530391fa721ef52302e51243e6ddd39777f2360d94b3b302ed6b836d735f4a6386229c5c076896de66b89afb9776fc22f70405814ed90e1121d02c8465535c99a1fb670c3b2ce685bcf348ad212d1afdff7429fd98346d7c1c6e8dcc889ac0", - "ct": "63e46572ad0b039c900b58a742d0a20999fbe16e48d082a6449634b188126e788b33a5958f023d3fe2821a227e11f1239ad6ad23f548e9bbe8591be52fa5c77786a5a83ae4eb1a70a8ad7184f2d94197a95b5b91decc0f87fcb3e30a82b61d1b5d43646ab161ab50d257b965427ba167", - "tag": "25278cb1e4d5f6a6549662994231bf6a", - "result": "valid" - }, - { - "tcId": 124, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d7bd9a1c5bd5ecec8ea17ceb1818079e604a8c359752f715af891b104f41bbb8", - "iv": "0a903fa6dd3ca7ef88ec3792f60cf8e947fc64fbd943d2cfbd4d095a01566148", - "aad": "", - "msg": "6f4f60a69bce1ac54877c7f08fe53b5fab8f7e1332ac28dbeb32e9fd64da41f298737cec57b547ce685986701a0bd3dcd969353ca5e37ebe92d5874f244f42ddc137d5659bbdee509fd5367416425099a63099497511fa3e1a64c7c9844fc7eddbb2833ddfebda1e37c627523626f5a17a", - "ct": "59093c8e4b71367853f8a38190483e6974f5c3aa28240debf21aa2ff470a6fa073496f4ce59430baa09072d646e0a1d40960260d758d0a343f8f52a774edcd0dbbf8a630e0baff7bca7bd48ce3bd3e2908317ab321f876042bb14ddafda7846738ae9ddbe11c742561ea7e195493bb4d78", - "tag": "45448b67c17bb93a101f34a11920da60", - "result": "valid" - }, - { - "tcId": 125, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7d5fdbe06d0af6a60cb81b9c78329c09209a84da6f0bd503299ea637f56b2003", - "iv": "8320a4e6e01b6c397bb2b9a90382f34d3ddaa31d8c70afcc343e3d12aefe373b", - "aad": "", - "msg": "b5f216d812126876e54b230267974affb5bdf1253b91fb9fadc56f6004bfa54aea611109eb2c56026220a348d78f1e7243022c8e384c9307915242299a7000d4baa4b4db26841f9b69a2d69c7edd3e076e75465fec797e0e40a64d52d02475e964d9a0181ea6aa23479fefc74386888135dc", - "ct": "25e282980810afc14a59892accfd7e053f0ca6adfb61fe816456301359f4305c07287ac304a6cafa9e873cc5b59bf1824cf06c47dec1cad62d8bf91b195ef8bf912802ade6c0cde9928454b1f8c1ee3fd2a6a121cb95bcbad8eabe0287ecc1a4c80aa2e5ab777a39d3e62ef3b061a0c0f971", - "tag": "ac875eae918723e7fefc9a2b7833676a", - "result": "valid" - }, - { - "tcId": 126, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8adf96a94fd1d5e3f966265c3456e5d7878c03f3322400953303b9a726f71148", - "iv": "e4b34237054ae3eeb794bb10c46e9a4fa59d1d8c9578b3eab9855ff26647bf2f", - "aad": "", - "msg": "0c2997afae25ec57505a03fa81d6463c708514315f047d8355933c8c13d6d59caecc9c1215a1fce62d2eb1f44df08a5cb5fc88ca30a6f7a18d9dd6f376c33889288b2291b582141619896a5325498df9280ff88976f28e17da7b97b5a320490f0b0385fed41ff3b01658b77dd577755f19fc34", - "ct": "1d216366a08cf63c92e79849bc01f315829eb9ca473efb6715a9908662016509dc58e40065e455135473e4ce2f0d821c94612d801930fc11295d97dbef9556dfffbe88de7f141af135203750c8b480dd1145cc283677cf65033c14a4cefd125f8e9215dafbaa44f3a050d7535b90661dfcabdb", - "tag": "ce4afdc7c4e6ba3971682e00b5fdb23c", - "result": "valid" - }, - { - "tcId": 127, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bab7cf0b373b40a31dd62bef56ee5766c196a5b59ee132ed7120596d98371426", - "iv": "8b3932c5cbba99a0dcca4ae57f7512122ea1c32c515aa39717440c3ca1909f44", - "aad": "", - "msg": "46d9d827fb6eb8d6b1ca2b7e3e40a72d9e3a8a72034e8d394ac2d11fabf8631692bf52e1d5fa804ebe2b2790b1489c877c2ab5e3d3d652209d9e9307804e2aca423d0cacdc567d66faf8e1fd35e24d67c0d51f9fac9076c05bac40760d807de0aee2e65fa0569dafc2b8286310f79dffccb4620d", - "ct": "4554f0e67b219b1de9a01656c642441221e9bd1be0dd77687a2bfa9a0eacd9451d95b817a82247918ce5bf9b2f28cb699178c4535d935f08383fd5c345e24d2df970cbe7d949bb662c8f39ad8cbf65f6a532a3b5e89f5f5207380532c697ca1feec466f7f5e5138bb7ca2f16a588d0462c01d0ed", - "tag": "5f39e1d2af3985000ab3959b77109b6c", - "result": "valid" - }, - { - "tcId": 128, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0969bc5d1156948a0f05df7ca352c52d763b987741b1317aa1846cfe6940cf83", - "iv": "3691ac63548ebfecf5fdf637a47e9b42e2ad1c55db1766a53342515f00cbc70f", - "aad": "", - "msg": "282122103266967b77008d246848e65a694ce3f62d06b31cc8b83a6a9ee6b513bf7babce54fd5485fd45c4a7b682a2f427462965e0e0b8240efa22992a2b09205ed84a12c27ff50418a52811d914a69e7dfcc51c29f49c42eb0d3a8bd394b5f2d89c3528455413cb512b1193d05048cd8149793977", - "ct": "87330c6262fafdc6f6fc5a3a4d3b7b21aae80356f512d8b61245de9e1af3a74677398a574ab8ee014a0448b8ad3b94926cace75dbd97cf2e4e43b4c94c7246f123f7d518c9de89e5385a7cd59d8bb0ae08bfac8805f1fc0e10584b82a10b4140267a8fe3bac5e17b6e7fbe0d1b03d579abae6f9b7e", - "tag": "c2536e513370e7bed8afd15b3d215c45", - "result": "valid" - }, - { - "tcId": 129, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "29f690ae60d8d51e4a99f797a58300cd7bb2a74ff70b19f6d3ff8b161475e38d", - "iv": "2302f0d45497f5ad053063ceb15358e583bb48008914925c83a36c09ee096634", - "aad": "", - "msg": "f776dd76a3e04ebc708c142df17a01fd6d46eafd4db84abfe5f9784e0772f258b7e9ea4a4b44469e99c7eafb628af253441485075bb44512c452fa8a7142ab1d5d0e40fc51e1787e74c7485217358aaf68dfbb44e0639a084282997a0b4b2514df2db3f0c34c5f04c48d6e3a701ef7ea8dc9b2e632ca", - "ct": "c3a4e1d0ba58d94f8ff9ead4d3d26e9069fb2b2f1711f20c21cc7283062f1d71dbdce40c513c2285be781dbcd3f780e6de2164272641c483398305769527a31179907e88d346e4974beb8eef9c34dd2a37fdd423f4910b5508cdd26e2ad878ea5dde76e1d64248ddadd5909ad8bc05159e0c3f7ae88e", - "tag": "ecefdc1c94dc19874c3e64fcd1d79a11", - "result": "valid" - }, - { - "tcId": 130, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c58e6375073a85a7c3433165d9b0336bff592be69df616cafa66d8431de75327", - "iv": "c50032dd356bae975a19f71dcb5dbfdec5cdc04826b7bf7b6ccf0a80c716d39b", - "aad": "", - "msg": "a0350e522dcabcb96d403b5943d0f0269f481a8f887acaa496482e3c87520efd7fa4dee46f112dd7185a76a0700dc9c25a8eacd5e44311116287cb883b1beb4a9e961c3e7e09172c1e2833fc9af01fcb47408eb605350b155ad6dcbfab9f4da05c4040ac26f953732e3ee7e1b5c2777049005493904fe2", - "ct": "55857ebeab6a681dc38d4ddaf0822a3dc69bd8288be34954717d18bb99afcb164a0024f15764200ccb5160b819a9549ee404f4ef0b1311706c4f2781c6d9d1ec2869829639c9586a539a217cf83137839649ef720c34b9970a34cc11d13643a025c26df96b0d3b3f36d0f7e6327834ea0425253c701cef", - "tag": "c5ab4cf6d36ac935a54af464a3cb6c8f", - "result": "valid" - }, - { - "tcId": 131, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a36980698943fe4e47744ba17e3b75f04843349d0b591b7a93d4c3df0e950129", - "iv": "60ae9bb6a777c8d4c223967c8d34fe6e56f88f63394914ee54116064dcb24640", - "aad": "", - "msg": "042cefca6e7483f18d5e13ddf72cdc2e8ba3aecc3a2deff248c56cf6c09f1053464b9c29515b8f938b5e8209831bb92104a5c5f261cc80d3dc25185758873644272f67c21c93e3b522f14e70c87679f8b98d4387e40c669f9d0b7791b2a9e16473bf09bb0b3e8f6f380703b9ae45eb9daacbc0f57034d257", - "ct": "9ca904a497754095e48c3feb6625735b5eb134a11a3a3de57bf245767f757319dbdd3b5b6210fff6590f2a0e070a19b41afbd2df7a9914c038d75449c6aa95a1f7390c9b462857b7b93a662cbac561f50eabf73c836ba93740160ca837e03f5cb136aa053e2d6fe0dd2c3317b4aee33de6e3bc3529745040", - "tag": "83148577dfc67f94e14aad34ad7bfd9f", - "result": "valid" - }, - { - "tcId": 132, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6ca8e672aa1764505d0512c08c44899f37cdcdccc473dfac05ce83ba216292e3", - "iv": "aa6afa8bd7f407014ca576bef9155ae6f1be97763bdc587f1f075c538aff0183", - "aad": "", - "msg": "0a46dcd546a4d8742b6d46cdb7a8a6230ec9a07fb310384618253ced374541bd9551c7786bb0a421a8c43462c3ce624a01f289f7129afebcb78908ac3acaa4d9fa23656f0eada5e0ceb8a543e561aaba2cfd542a35a305f25c3aad7e9496e370c74b3cd28d6d5c9591a1c495813988c906d5bcf9ae20143b7b", - "ct": "9f11bad65d28f5fdb543ef759777960e4eddb0546ce220a6069550284364ddafab05ed770d41b4866858e37fa0cf87549a691564a9ddf68fcf41e1ed6f2273fa7460aa215b954db20afca5867aba7914524e1bb14d76cc24cb62fb7814a6ca2ad0de2b6d32ba9d6fc3a24c876bf3d981cf5f84d56f1ff9fe73", - "tag": "cc26e8583f7e68f8cbdd80415daa4aba", - "result": "valid" - }, - { - "tcId": 133, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7597400263b230b7ecc4d6d06103dc43ddf85e51b508e8d27d9d10a5d6dba9b9", - "iv": "9a73aee98b1eb3073055c121b578e0ef6c1477d22477a70ad664cacef130f901", - "aad": "", - "msg": "ba0a9df71d912afa7dc225ef4ebfead1ee8a25ad40279ac9b1d29f37ccaeb809eda884ec6716d1a16fb015bdde948499eb84ad8f39267719406a5fc79ef606fd915d7ab0e6ed154272e38c83991a4119e681923763bfe34bfeaa7f57b1505447bf55d5464150d97bd96c356c3e276694a3bc942251c421262c0d", - "ct": "1eb355ac82463c0318e03c6ca7aee1a4438d493b928f487daddcad3a430d9cd5b765bb3bbad52554edb6294f394c3cbbdf310cc2a5444f7d421118fb907cdf5c022bc15092851ab77c02fb42175bb54bae21f77a03bf230dee4d040a75a9b8fc261c30967d2a6996f4889fb921e205e72c2b4ae53cb7788a5fb3", - "tag": "00bba6e1400ba228a9c9f437aa2bc94f", - "result": "valid" - }, - { - "tcId": 134, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "50ca1dc0fa32e9c1f21caeddbe82980f0f9f96a06bf500c8ee65cb11ff221f72", - "iv": "9afb2539e3c0bcecde70f4d7a6a60ac2198d4919528f53e202af623555314f16", - "aad": "", - "msg": "fa24cd79595321bc3eac7b047872df7a2c58efed1b12499242fb9078032a81133cb3d22d514ff48024a5f7a7531e23f08f7e713c5fb5b7d844a39ea0bd56e6cb3ca80b8339a350d5f317c9b2bce2f0555508a8a9241108908a1818ecfc530f564b683c25970a3e172cff8b8993b4b73f96c19a2cb09a3336e8ace0", - "ct": "a1854338f61e065cdb33e790b2cba2e8e19592d282d8df85217b6491d176dcf6b93183831d7249597a237d3b0d5acc93f5ca99da51f55133f63a7724a5e094ea6ec4ee7bcbd554d4ae088d44ca02ac708cd640fcf31104661e51e84ddb92da6f0e6286450b9f67cdf73ae7f49b244c42c8a6ac3c2af930230207bd", - "tag": "98ee4518429d5e9c0d2de8582dfaec7f", - "result": "valid" - }, - { - "tcId": 135, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ab32de0ded66f67770c839bc1463c5f7bf8bef8dc192c1261291c401a1864aa3", - "iv": "7b85b58a9220c12c28a1c6f893cc639680ec14dd8ef499805ce0e71a5df7ac34", - "aad": "", - "msg": "7f9347a68c1048ae66dd1f1ec1537da39496d0e3db30481181c0dc93d4ba1cd6ee701cfbffc45a178a6f0935da1da065e5e81a3158d0bad050497a4071230a6ca077c698bc72609d773c9a13babe351222078ffffc6ded576c2b9676da2406b7c7462fc9556f562f5cd4258b91682b1c73a8ead6f9fc03f125452109", - "ct": "540b2536acefec71dcb0d536f8098afdfc208cc2cac8e5436877c01378c270f97b6950f19e08d7922ab6de13915a27304d47b01685cccc9d63cde8689befb90239fea4bbe15a184e1616536aadb36f02de3f8c241be52906e3a2540410754510e5a7d355b915426f04f4b6691a5399eb45c6b87146149d06eec0c6aa", - "tag": "28c75d51d88ae07c0148f4a5579bafbf", - "result": "valid" - }, - { - "tcId": 136, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "65b5ffe468047e2055ecdb129a9325d05fc1f9413ae80469b32e3f1b161f8d13", - "iv": "b64df19ae578f99ba016ed0d26e2be6867ca3540d3bfc42bdc0aa1c132e07894", - "aad": "", - "msg": "2b97bdb8e0688973ea99d277eb82984b2fdd9a7475ebae8907b6767dd9e002d40cf1c771a61541919c641aed4ae74fb711b0629d792cc54b2c738b82583d25ee20729ef641fb9f15d2a17d97a32158e06c5dbb3867a89104add1948963592e6932cef815fb0acd7d76621d066515865809f23d71792d9e718fff5ac7c1", - "ct": "b58845b7983057bac87b6b30ba06ffcd898de959e0429e0da6aaa70282592d8b0ac08bca84fc8faf4126f4c34849c87071f68c9232fcfc2060470c2dfb3f8c2ad7f293aadaeb75fb7c81bae7397bb0c6b0ca74397ac965ee96d6b50501dfe944341fff1edf04764cc90cf5e843d7f978c616a109db92879217fed56c5e", - "tag": "4740cd747877d983ffd7e83eba3085ae", - "result": "valid" - }, - { - "tcId": 137, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9b71174bfc475a2fbf95ea28902e501fd4948a18935675cb44ae7af07e85d242", - "iv": "8d1d404021623b5b5bf8afb888675cc9b240c4cd835dd61d8461acbbf9454e0a", - "aad": "", - "msg": "7aaa150b616ae5a10cb1f8085d0d0f026db9e5af1f8026ab1f525f9a67c0445009490ba5f5430ad44c0ff3c060df14ad209e8129d5e297c1696129be9eb25c035b970cfcaf975df806815e2ed67cffa1a4a9b1dfcc3fd4f766865be8bceb7acbc74e3d303719052803e86bdeab568126d3d8ba2cde9e4687b9af626da4da", - "ct": "a00983925bdaae435b3957eba6ba18cffdebf4cce817094f17061c0f190a070586ab9ba90876822478e9648e720d95222a8a1910e8eea5a578ae549e39a17c031f2c66bbfd0b5b82f493b4d3cd2dbc49cf9a082f1ed3ccfc0d3daa05f8fc03f5d9e52aaa9e6b9be2e6629688ff036ecb34e7645b96eeef3897eb33ebeaa1", - "tag": "9e91e2633a807dc54b62fcbf5b342da2", - "result": "valid" - }, - { - "tcId": 138, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c28e4999891d80ec8e2651f49e42be13860584e470208df98cb0708cba035435", - "iv": "9eeae86b92388a8a7abfbaad52ed5b2be19a4b490f4ac8cc929c12478ccb4468", - "aad": "", - "msg": "c8abf7adf6869e0ea1c958f110edac17af6c42c21276f8b62a58e60a71de676b99937e4667b25a9b1db20b4f2ba38b7ba8838c40e80e543cddfa85c976876fb8b0f8e50d0acd4a340470c2cc36dec0ef88723cd9931750e7096251fa5642bca05fd2b2d7e92d71d29c90ae70ce30962d5a18085437f8476f94d9c34bfe5937", - "ct": "7d9e144a8d1180d6fe333105cd0055d2067eba448b3244401eb3ea57287a2254c463b1e66a19a67d29dce7c6e84dcd479ced7551dbd7ae54c04fcf114f13dc717bd88fa47af384217e785cf29a1ab6dab42dce2b4afbf768035269f224599c54559ff985090ed77014ca49013d33348e70e269180d1f50d5d7758cb8e1d73b", - "tag": "dd660d8f8763724e93bcd1ee9f19c92c", - "result": "valid" - }, - { - "tcId": 139, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e325b371ed59218d8d2582eee8e40167bb1e4c4df9f148dda42aedeb4cdf5c68", - "iv": "26f8636b2a54cfc37553533b97c26f96b7ae2ab8f26ea2740043916d261b83be", - "aad": "", - "msg": "54c191502046b23b714e1d40157f3637955237b670f899631e26a4059170868f96915d52c1166ac1e9c906ae065887d1b03e0ff4cd53de646ad4a626a4dbcddda9b895ff325ece8c8bce44a479b0f115066dff942010e1b71895b0c0aec3e6f71fa8f14203454ecd4dfd03f8ce987432b79f1e3c1238c3ff915a0ae8d9145cb2", - "ct": "8793d942377e0fd2cf0bde67ef2fc99722e72f40681552f0d11ddc124fe8c2441758150373f0c5231d4a2151200ed933b650ac8db644adb4d2729ff0a53ce426fa0878b950ee3ea8b0a8c8c440988cedb55e948dffd562ef8b3d50fcb2d5c0a7d9b0b3089d309122e5921c8c9c8778f85a8d52d975553be5c08f247dc2cada3e", - "tag": "66423a2e67e57fee1acc54e1c995295b", - "result": "valid" - }, - { - "tcId": 140, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "44c89039eb9c20a10abc42909ae386ecfebae2668b00f5d0c75111a181b3f33c", - "iv": "2ce9df993ceb13acbec1b833da42572ca1f60e2df9b3cb77c7713fa7b5ba94f0", - "aad": "", - "msg": "6a9147c2c7bfa01f0012432dafdfe6d937b6b2f891bed29401a3f253a328c24633bd3d79a98b38104c13d8729d68d221311ca3926616dac8cbc926569d5e82cd37644716961fbad22753e49d9720df378b9272c6445e1dd82d7153f9d2ad34da1728eb345e97f300dbd6d9853c2a61a67f233dc6a45952c47d3922dc87da1f1c1f", - "ct": "0abcb84208ce0f929eacd5443a85e53572906464eb32db639d6b7b86969a637cee6feb2219d1fad74899f6e982545e246fa9b96b6d9b4d73afd1038adc9dbe0a5c23819a79058bb13148918a81aa10c2ab76c6525a3ba43c788423dfbd49ca3de5dee226bd2cc03be32dff92451ddeb1f36f45063480e614f0a6ffbdb03b19708c", - "tag": "d467f4a74e2edb54e595f8b0258a25fd", - "result": "valid" - }, - { - "tcId": 141, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "40840194bee4d7a96d538f11da4669a21b8fcb091e8995b954aac135c89801a7", - "iv": "6534e57faa8f54382fd88d0550487be3f7c5c7fec2225a6232ea9a21618e8250", - "aad": "", - "msg": "5d47e56252a43295b63ab2e22805a21492e100b3e92e3ed1ed6c9c66d2a8dbc3836d7b8433ced9e08d49f149c16c752238c52fcdb2cd010e72b9e1cddf219ea84ccbcd097bf4057c86c06cf998d6735303e2aadabb906629f7226502af757291ef66258d482c5170543f5dd5d2f5fc05c389a4171b92d3bbf19e16a88aea42ca4136", - "ct": "685c6d1af9f67d6853867a10c8cf76f631decb6e30eb5a15f4e305f4134c8f4c5ffe7b30f5ec3b1be79f3646d4cb8b68fe99e6fa342498e03043f2908d10b4711c7bad08e1f96d8813a62d240323efc2667bf12233d2b3580e6524a064ff685f8ea6a094c9df2ce9f3f72dbdf6f9e61a4927b54e718e0cff048e1040063831935eb6", - "tag": "2b5d6348259489ea5c0889c86d1bfb9f", - "result": "valid" - }, - { - "tcId": 142, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d0d94604aa4c930308a61e720d0db08adbb773f61a6d31d9d8b5133d926db13d", - "iv": "eaa24b0ac311ffc5a2d2bdee50e6c27ba9e97939b0548260b2d32ac99b14c137", - "aad": "", - "msg": "e2584f9b333497716c2d300258e0e072e002b70a7f9053777d6b62fb93b529df2b4540b1d598367f98384de4e2f3db0b0a1bd95eaf37bcf9ea9f4e5b4619241b8c89118dee5d3796f482ec144b9ef6cd69978135ee32406ae10349fe652e1a27581f497070c54cacf543938ad9b5cbafdbf205899e3c9bca40832778359b7599117cfa", - "ct": "43b75fdcab07b7ae0c4ec9499d4cb51065af30e777e7c6d77e1ad5f6ec45c35b18031c2c62ad800e4a6be9a430ce0c98af954c64f684230924bc629f9f10bc1341aa4fd6c14b96b454f456b8fab69389469173019485c8011da69f7a40f29849957efa664ed13edddc2c6cf29838b7f9239273b24cafb068c2d15eb62a71136867ea71", - "tag": "7a913f7d9d438910512b5eff1da0cd05", - "result": "valid" - }, - { - "tcId": 143, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f5d7da52f16544fed21e1b32ff694fb3c2e324abdb78b81e8406546c746c1df4", - "iv": "43eacb632a8da83932048d5463009d54b3b616eddbeb9eb1f46eded6306de2db", - "aad": "", - "msg": "bd6dc3d2dc940add8cb90c8182e9eb027061ca065f2c82f3a0cfe52ba8884c16ff2389b41e54df25e2124294cba801705d244ba2f80128205e34a645a490562cf4192eff77c61ba293765446e6cd06b9a855dcd50e39fd20816e0341892eb726ad5949db9b7498e280e50e4849699998e0625938ddecbe3e79da9700e11447f5158da8a6", - "ct": "4aba068807b49aa9c2fe48356abe7557dd90aa60b956a6f6dbe7b37898c69f6882e2b6bae42263125c1d94c08e65aaa0de47ec31fe5951c84427cb5a036f57f895f1146c8378c0051b5e4faeee43ff790ce7d877ad5846321eb32861c6df5f17f4850d60135dc2f3c0ac6f509c5f9d2f9ff1179ed996ef6802febe531ee9f497623407b4", - "tag": "0e83cf55fa73224f1cfd4c23a78ae820", - "result": "valid" - }, - { - "tcId": 144, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6ad30331244aa5036f50b92405090ab9cc53a56104f76abfc300d24c5b3ef986", - "iv": "e15bfc3009fd88eff1421b8a3ec9e30e858ca82eb6c9d8896398230403945126", - "aad": "", - "msg": "42666eb54e1f78912dabf1807b7cf66f63d0b0eb5461d7f85a8204a083a16f71f58d0eb245eb6e58d6fed48950bebc5dc960391f2736b27fed540402d46034b24d54145bfebae6998a9d9254a7feb3c7fd998516c5235a0f072e2c2648e362fc4ea455bb2588d26fdc09552ebed207927ef175ce02137bc318369c0fcbfbb8e4acc62ca1ff", - "ct": "a1d9ae5fefc26ef9a2d059cfd74037a27cfcbb07d328e17c31eb53de49a677a5e705469d801e414ef74bf058826e8096364cd0f0c116f9f337532a6785542af010e385bca949a7e4647b2bab1e45ca04394579acea71affb7a058e2705ee7d91a3b726207268336d5d51140f9501b098e5f09fc34c49cb06884dd25908092e468e44fb7a99", - "tag": "5c619bce9d64ca3fff173b917c2abb66", - "result": "valid" - }, - { - "tcId": 145, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d52b5444ba851a616b5e142c7f5976fb28dd2973b73a75b5df704b409585fec8", - "iv": "709c8b867c373140d1f11f1c74b88497a5a60979dd1d036ca08e9bdba0c3d301", - "aad": "", - "msg": "757ba48a63f7e38277fa8c6f481d031e6e06b8301e8dabae519906aec241938e79bfd3b33354cf2d11daea6766cec6158d22c555a87b98eda940501199f100e8a69547ce43360830105d326b6308a772bafd2a882303387000d53bc983dd39ce64af501b20c33cabec70f09ba3b321202ced0010cfe3dfef8dea3ae1d44764d17baf0c0ab226", - "ct": "56a195c8a3c6b11feb49c246138ace47516e69e63d316aa4088ee11b023a2ee46e581f9c1ed427cc5d8c21eb5da4cb23b39b62fa495c6f5f4d9cea7423e13d3db60719339b26f8fd7a42b94153ede14d4521c186b1d2726f7def695709440b070a99467a998e65baddf86aa79971711dc3db59b9b62be9061a995f7f7d9768692a7ae3e07f09", - "tag": "4ec572ee2d2689d588db8dc28a3efa91", - "result": "valid" - }, - { - "tcId": 146, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cd9c3316169837f38ce58ee692170a5d56016aa92778edbd2ce14d7566b15f32", - "iv": "56a90332bf2540d4ebfc3ad5d28acd8637944708d58be6e0e976f90bcc07b1c1", - "aad": "", - "msg": "38eac56f40c3168b893032e30a86e757ca843a128e7ce31ee75d3013e8ed1d378cb38fd64a5c0925b3f7cdc787e5a316c8abbcb88e496e85181973db314372a3935a97cea3a437c3d1d35b552461c950944e4621e0007b3f826197f80b2a3ee738586cb0a1e8103ad59c0fdfee5c9a905d84885f71bc5ecd088d712474018fcbf25e804ecd7f52", - "ct": "659cbb7074bcc2676888442b82186ff703a31afa0a49a739be9db35e16a2536dded6a900456c695dbccfe3d4708f66c80a1b4c2e85c83f8aa3bb1800213010729895cac5c9aac2c90361a3666529e67c32e1b01cb0bd985457d21aa92d5da24788d03f40bce4f44885085f7cc04de279d1259218ded5060a79e8e10ebe3cde3aa2875c07f5b86b", - "tag": "b23de3d27d4d16d78603f39b8a2913f5", - "result": "valid" - }, - { - "tcId": 147, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "00070a83d49ec5a4dd7c369d94b27a4d02d1ac9ab5b77b4194322bdf08db96a4", - "iv": "23feb0226737a1b00271245834cba2d56678dc9476c39ecbfda5dede17e4cdf5", - "aad": "", - "msg": "f8e40cac4aba2cc4ac8b6c5732888ed11e0deef04543f0a6ab87927e2ee993867161a66f91a749a629ff0868ea95687926b68dbff84242819823364b605c13d5e478ec802f0accd099ca395bf518a41730197dabf3aaeec0f002ecf1eac63c1386a0079864fabf883c24b43a3f68ffcd2a7800d995542d313b3af7468d7d4e2214978818f8bfc752", - "ct": "631e3b99a7285ca1c8f6bdaffce5c55f8d78af5d61b23a22b85f149bdeeac75d00beb0352200d7d043288f283a0b22e724fa1e20394df3ee1006a4f581cfccf85e68ac3c78f17f9cb12594ec06841a15a34c7fb4174a0953f9fa64b26989034ddbdb57e29c6614805192272a1036f0a49e2000413586d1d814e8ed2105a1cf19b7770875085ca9c0", - "tag": "200c35793cfd489bff1c46e587b9c069", - "result": "valid" - }, - { - "tcId": 148, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "29bbe034557ca009f94a0d84621480b89364c089b67b02fdfd0672789f4ca1a4", - "iv": "ef4bf5ef0527f45df51509c601c8bcac6f5d8c906000fb1f00daad6ef148cb1f", - "aad": "", - "msg": "7f579f5838c44d718044176d50e89cb52131d7ce6d90cca5a68532465c4c303a0a5920952b7ea13c393acaf5748ef606f44f1222ee00bd383b26ed388cc199163f6905c4d3bf9deef2f31548f7dfce2578962bb4c5b82003c812eaf20e8b1a7fe1b84d54ca786f439c094bf1b9f27271997aea6043a61f95c624d28de228d78617e470664453c0d863", - "ct": "6157fc024ab3448567ce0451725f364218933928e2362e606d3fa0dc91d5900f108a394e2db1d89d0a223ff33edd542c20762a11e7d3bcc23318b4f6bb083892a29183b7eef5e6cb6aa176ef26138b8c9ad90b693824bf6ca9b8167f5431bf7576f07d862c93f7fcf8551d4a3f92f20f014962764a5e4db353f6c3edff32092cf2ac71975a65af6471", - "tag": "ea8d39188270e64b385d11d73633ea35", - "result": "valid" - }, - { - "tcId": 149, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c6c0d4a8989cdf8a44bfee2eb6d254843ed5622dc32627ce7cf362fedfeb2c72", - "iv": "a6331a09be856a79cf2f23047ff8210cb087b34de2d457e93a9531bc1919a3e2", - "aad": "", - "msg": "952eed899de415013a3dbc6a6c2dad71b701df448432b028e75d3d1a4443a453b55cbe091fab4ca2735e8a40b027b7feee07111b12ec2f2ac6b5040467d0f00687c4f0d86af2a392ba368c4392f71453635b57c270d796a2da574a7234663fc43199daecf1da7e2637a36b478c1902bfd86bed24c7cc37b9eb7af0e3527fe65134b95494568a9355e878", - "ct": "a1a6bb93c5eceff4ac16bd4e0d7632bbf79d5341ad38d3603f5e7e24c5980b1b4c6de6f4285ee39dda7e22f0b81274edd7eefdc3cd6f99e21e92f1a164b5b10a0d69804f914c0cf3be21aff18bb40ebdf210a713b6a26b1ff14b8743e9ac7964a5c00036d699a91507576a549be59bfcca5cd3b3d3ed3833fc446ec08110ca9d8299559deab6ccd599d4", - "tag": "1ae34260c40a5f6d3e42cb8e511d2c74", - "result": "valid" - }, - { - "tcId": 150, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8ad84edf5cd8a1bb19b1c0362c80c2c1c13a7301c34290643be835fc4cec4f72", - "iv": "e4f80f686b31dea6c76c4b0d0e497ceded5df44a5efb1d29feb726569a55cd38", - "aad": "", - "msg": "4e06e064247fb0cb32772f88d525d8cbff9ec6393ba6ba2d0a443f3dbbd4026a4e7888190181efdf27dc1effc7c8026e9ffb2eb2982a694b16d94121d3595b0905290542217046129ec25717e8f607a56fcaf7fb58246e6c2dac6e13c33802711526acf81c3d94d508dfd8e459c2d923cb40e5c99537470464c151909aa45ae559a3d5c2095f8af3783bfe", - "ct": "da0c3a1fb509cd16e0d46d7a5d4a578298ea6457b22fdda6282f120d47f2ad417f5d8013d5c481b38e8c74406ce54eb5c791e219f11ea0af21acd6f724e408b33690f493127480dcf85fd73f205ccb0e0afa9b107e4fb9242803b931e4e1b6eb9747dbe7c48094b05bdf6d6934466de70526655411a35721cdebd8ec268973d5d965a916880270f219764e", - "tag": "dc262d3391ff28ba5d521f34a10d3ea0", - "result": "valid" - }, - { - "tcId": 151, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "fef769098292fad97a9aeb432a683f62faf3e3baf746dbd1e5816c7012b33372", - "iv": "2e3b5995c3c3bec824f3ff2f65a9e74cecdff8cd3511c8573ac5278a7335d1ff", - "aad": "", - "msg": "3dd5bb1ac4b1a05257dfbb7fffb0fe6c7f0e0df2dabcbbcae53f58de9f9213fdede3a33fca0859cc3c7fcc69a8d49abc1918301fac02692bd83ce935d7f5c6acc918c0c5f237c48db7c81b2a517f7424a55ad6faaac0992dee3ff5be5ac87cf037aaaf3bedc580cb6a7eaf3157a4a74adfe4b9439be56b0061bb3542550308b0ae5e676d40dda7f80ee6561e", - "ct": "1a341c0771e815606f43b2acb34de0abda10ee50e1c66bf3b824d2606351fba7a4a2bc62b4865ab78786c2e044d81ffdee657019786006d63c1f02251b1d6656e712e7dc29f02e1b0710d88a916a5fb0f557cc1a7211146780288c61025a21879838e55184c6b1ff5eab3e5949a134968217c5fcd9b7099387f7aa7138c72e493f7edccbca134b1dfc2d0845", - "tag": "4989593346da49c1bd31dbfa81cffd5f", - "result": "valid" - }, - { - "tcId": 152, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d0ae8af9b80c94ba9b45b685143cd04618bc60d61daef23c3bc74a418aad58bd", - "iv": "cdf113f2409239ffb41fd05cae0f62cb5142aa74543397712139504963c9054a", - "aad": "", - "msg": "a91711a15d52267e904986447d703a51100d4a0b41c1376728a10b90fe810019c3193ef99de0a0c0f4f278c4be6a91c87e4724caaa32d014d6d17a50961c55f4e36242f859a74873047c4f57fc0893a8910a2bed5e3b7aa0c9d61708921d082484d0d93c0736abde2f24a9607eaf3b82dd14d52200c3aaa63d208929cdd71ccb9d684bcfda4c9760274a1cc3a2", - "ct": "a0ffd551fa76784f74b9a3343b15dc1010177f56d389f1ac97b4d92961e817e155c0f3d3759eceb85b0f338715313fbee67943bd6c34f3e6e19a4d541b41ed428e753f09b3924d157820462fc8571d1921cfe652dbcec599d52c4529d400a00b9ec2dd9a3d02eb600281a5e0908acb48a582b7ad1a8ab0fa28e65254fad4f70b3a49cfe106f3ecb071bbd57c0e", - "tag": "69df3c8e6d09b20dc0fd23437496ba14", - "result": "valid" - }, - { - "tcId": 153, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "66a76377e16e8c7c2e7e9c07fd9378683d4c482121084309d6404f107117c51f", - "iv": "b3cae3d0df7172696eba8793c53b10d39d82265ea9224cc11fd838a77894f8e1", - "aad": "", - "msg": "0378e0c59b8157c6828c04cfbe13e0e502c473ac7c629cdabc2f90a36b60d173f16fe16029ae7cf23eb1916942ca89022d232ab26b512edff4c20faa1d1f9a3cc5628c3ada31b7292a4a8c05c2d74a6e2d8a1103def0b64a7488902b685603671fdfe23b39d8e6009556bdb112f24bc78c409be7bfb667fad66529d4ea486bf13b6d5fb56ddc5360c08807c24331", - "ct": "914771caa1982ef04481b77dbfed3e16d44ec5a20d42c97175f69fbeb31cea93c15f1d7874e75a92d029f0e30610ee0a885ce53915bb37e232e295bfc84d1e4b9e0bbd34f5e777e8f8144d9621040a3d8243498477b4356e4e2987ee7ab85c21035d83f124aeba6895950163c986befe4ebdd9a197c30e09d19c65e314f502b8a657c5c528080e8a1a5ab2eb5c65", - "tag": "1e5abe53cddb0ca0c906cd8469247ae6", - "result": "valid" - }, - { - "tcId": 154, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a59ec4afb05d7a3951d30b27368d71fed19e47f3e3b96165598097898f36bb6e", - "iv": "d53acc93a0ebbeb98a9571016925a4281e236e559a84e3e0797a934847b282ef", - "aad": "", - "msg": "c8c837504ff27302fd807dd0a71ada20322f7cc416e63ef6255489de333e090bb913cd449e7f8d7b3b782a28695d8af7137e453b13a9fddf7ede77a31ebb8130dfbec6216d58b7412be1732ec0b16e6526b5779d067927e9aad4b9ada9062488eb5b90d9f5da2b3048e6f8cc4036873c01a8299acf57eaa37c44387b04ab6e374300a208befad7443154d939b2d0ba", - "ct": "2569bed87048c29191053d17692f7e8efc7c1a1698ef82039d0faeb3548acabfa1fb37a2c476e59ed6d5ab0a6cf4015dddb3865a141329652d9c08bdea2416e8883afe3b6d63b2c53ac980d93abbcb0ae4dba7fdc1fcbdf83c06d66961b920aee4a705e362e13760f48613979dd34232fec94d80c7cb1d08ddc1a3fdddec791275f4de6305ccc8912e1f5d58577ebd", - "tag": "aeac93072470ff9c447bed9d88aa4f5b", - "result": "valid" - }, - { - "tcId": 155, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9f498a98521b6e6c7fa357d71792d61fde9435de2bcc45b82d8f9c708d5254e8", - "iv": "dbcf757e89bddfda746331bd4496b81cfac7eccd3cb9358c85bfb175c1f06693", - "aad": "", - "msg": "e6db99e5b46f57d73a91abae78652c1ebe46b4a9139a74ec460ac51e13a19585322659d7400f86a16fe71b57dac4df32a7bacf72187b5531a80fffdabe8c896b6081bb1f48d0dac1c2aba571fde23b24590ed07f1de5f0883212c4c50e33e2695cb7d6e51ca09e929a3404e87ccaf0d6490f7010065a661cdfd3f49868dcb7486376fa9bc4dd593c6c5b0ae1cd39405b", - "ct": "8a1dc82aa250b422a0d9ce03c83d81917c86147a7f9a6e6a212e0876dad5feda5552c130c55fb01869a4a97e3910a55077251b848a3a18b63e49d8de1ab31a4a178aaa063cfaa1f6c829b45c5e21acfc304f763e7cbb7fcc2c72e5165f0e72b2a47b8ff244ed095866cd134aa296d6d786d2e8150f68334c17b9b2ee0a6981b744dec6c37f69620ab17dc040b150e229", - "tag": "d1dbff3b95e596311229a8c6caa91431", - "result": "valid" - }, - { - "tcId": 156, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "301dc5769988dedc7e447214bc08609f6985554614c017d5367a3198be88709a", - "iv": "a06a7e612c3521a1cc98074df767921d017cc6c4c664a2e0b7106e8dfd39d8e3", - "aad": "", - "msg": "096f423e8ef6a78985c149d07c923768d24e316f4b17474e70d0499a0c468e0e537a98c8839958df96da0d0f32f11b04b7ee3325ea83ff67521d59d31c8f89f232f973915382444dac4440cedd40cbd08a6e780605f6d9eaf3377594f41fc44efaa1eb9e9d141eacb92f0e25f5881a2ab946f946c93702a902ed8ecc40a535900ea3bc9d6ec714bcc82583f985b7c89436", - "ct": "0353b31e7a0832c5b40fad2e475a3076b8b675fdb5c1942e59334fd87bbe06a688ec45813e93ec68bb7cb56b0510f36fa708c4d4bcbefbcc5b136a4d1994d15e34ccdff8a4c9059db5c2ac295a47508342084becf8438ba08838a65efd76e31d0bd7c3e85016427cc3a279081f5ae3ec9a855686adad4a8d658f605869afa3f712c1a57ecddccaadce51c5028976485ac6", - "tag": "e033ea5397e0372b6a537bd2648462f8", - "result": "valid" - }, - { - "tcId": 157, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "77930fa50bfac094133496729ea3798673be9785ce3e2744b03ef4b0a048f539", - "iv": "1686342b954de9b968a63f85d638cef2a88a67ec1ad90ba5bc53cdf2336e6fb1", - "aad": "", - "msg": "d262bbae1966de1f3e218db40df8eaacc19c07bab7d990e77ec0ebe33509bba87e1fa57bd745ecff641fd15941e011daaa7a55c7c5fffb49b50f67e27df112b9f49f17b934b535cf3cfecdc85aaf3354c4575fac2f0f25cffdc3752a83e689f0e2a58ca4b228cc06877c35dcd2b45fa8a4c3252410f659e7fd962e1ed11fa442e46aa02a096e946e25731576ba1c3f07ba98", - "ct": "895b8061bcfa91dc8b7b629b7d3f7fef3668eb0b2c7d9cf7040ff719da53c1ab787510d894a2c17047d3fc2e8c60957482ce42b438787831516687aa8950f082e391e598187ad00df93438a6099b5512e66649587d517f2daa638453b6fefb0c5f08cd045545d38699443b4057a209bc9f479a1cea5c4dade16582bb2a9050329bcec8edf2fc0a724e35646c3bf3b87659d9", - "tag": "6ce00bad446748be59bbe682b8829401", - "result": "valid" - }, - { - "tcId": 158, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8ad25da7855aeebd230d02ca9a1dcdb72fff3119f5a675d6e790720c8dc4c5ef", - "iv": "f3a4f8d25877f28cf9a6b27c450acad23ab3fe0eeda03143f7359419260fe3c0", - "aad": "", - "msg": "7896db21746538186d8c7f7e6f2e0097e4b8029319168c6fe92a4fc4d5eb6ae9e74c00b3fb3a8ac5009c285e88617b2e71b8c86dcbb45ac9ba9da22223f79f0558f61ac4bd9258693ba0286e2ed1e91ceb7828d47eb1dde26fd91bcf10fa9fbeb155bff700acb5be92e17cc372027834d4d94c0c7b548899c67fc7a7ae346d63a7a52a789d80c7a88face21a6a3b0702452a67", - "ct": "773df8239ad2559676cc77edc08c5c8fe2234b23c433cdfa5586647e6a5b04f63d17a6ab36c54612abd3c0ee71b2fecc7ba495d6e362382ce18d461e23d42be27f3a982a291b69a814a22ac6077860c09719aab794f50d08a949fc2fb2d349688e372823d2d154b6dfaefa236f83c7ed1450b741f3061ffb979723a54fc81a2cd00c7da6d33de75441fe7d8d54861cba45df38", - "tag": "f00cf1fd4f61fb6eccc7620f81e02b8e", - "result": "valid" - }, - { - "tcId": 159, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "65242c65ac4b9e8e144bac57c8da4bd4f94e2526befca73c6efb5315baf63de1", - "iv": "2fac55c20f8ae550833c80d99aea4166891fb4aa121b1463418b29f04f6bb234", - "aad": "", - "msg": "5f73ada8cc6c8db28cb13ea666bf442f0400c4fcb95d9c1ab693327b4b367b90c94d7bc0ed940501d31e372fc5fdaa4f9fbbf3bdf366f54dad144a23a3ddfbae944b96ba54c96ab64cbb7a94e7dbf1832173f43beae7b5000d5ed0f1ab1c77590544b069e0d82d3c6a6d66cb8f6aff0e5637bd7f4f3bde3fb82aeb4f7762bf68bbc35d808be68332b500664da3971ec1216ff34a", - "ct": "c4fdd7bf76e0b86d1636a16c96dbcdd6d5c1e5c84c383981baceff3f686782abc5a61c1013ec7ca143d0bd7d6458bafc647288a891ad354c61e7ddfd5954c7b47cb6e2cc096f0f258fdc755136b3a12d10e4ce07c12a6a36ca5e2baa2e96118efa615873e4a052d8478ca4819ab65cd094db2ef922b7fd9357b73f5240c7d75744951c43f1d4bfcc3647bcb1f781cc17fecfa81a", - "tag": "945796b8f089876e5651ee2c1bcb7cc7", - "result": "valid" - }, - { - "tcId": 160, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a6f8e5cf7fcee60a17dc216a880cef12567e872ebc2d808b8d8e87f527a99057", - "iv": "4807de9976f8c0d82b7efe98cb5cd1cb889cfa16280ebd8a7c5d7768b06ff65d", - "aad": "", - "msg": "7bc2afc8c02ee88ba8b94741d1399123556581984b15a3e1be8d074207ea9d059981d69844ce6e6cbdd44e24a20202b161e480e8943becf3facbfb6e8a687f431e11b4d026c9bddd24d1a559af5bf8b52430dbc23b955e61679a768cf0268601b373dd20cc4957146227fe00fe130f0b85e2b2bbe36974231582065df8afe86d7e6501eeae27f21c48135a6f0098fc270897676f28", - "ct": "f458641bd495bb6c9146c8614f4b0b31fbc28fb5c22818cd9588101a5f493b4fa8d78ac65310c64ced03d0e6023c27c9ed507459e34a76b846629e193711b4db00b41ca97bba772c1d340cda2ab400155e20c686368f81dd0e9862868493bd8a677027faf05e88d06cbbe2cbf05b57c6d443dfc49a23afd05a74d71d3615106b70129b1f993821e6effaf6bfaaade615739b00a017", - "tag": "fa78fc2fc6b0d9456c9e97b1b67f386c", - "result": "valid" - }, - { - "tcId": 161, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7d26c0b48e93c78a5e8d804ce3341ac5f72571880d5f680f731448ac4d07f461", - "iv": "da33fa6a3b8b8d1a1f5b2880319a0aad87bc230ff939bcc89c69690233a558b2", - "aad": "", - "msg": "bb0af9168bf12a130e8397b5efd7cd3daf2d1e5c894b6264fdf8e57433d206d3e6a24e70f75f630ba4a39a8cfa6f298be57c25ec1af2e9c58f8dee1f536992648da237b71c1ee368257aaeaed8eeffda646b1640612c21b12104e6f408a5d477724a028386dfae247b2e8566f561c8951c0390f9b650bbb4a61d4e77b06d841d7caf4316fde4810cd0325f4c301866b8329c2f2ef291", - "ct": "a412a8263bdb99a90b78a5351a2ed40deac588e8a9726540d1624a468c658535f932a0369f3f8e9783ab4bf481ce95a65ae3994c7748c4b36a4de7ba572b5d5727ad5d57b241667826a51be5f2fc3bbdfebc2bc5653f1681935eeab3cd4d165b7d01254a58acc57a7470ff00bacf579913d6353f43fc8a4430da9caa7e3e932294b4235b683dc71dab91a8c46e31f7c6b12da22e79d6", - "tag": "c956ae223b44fb46fe2e1d6645185645", - "result": "valid" - }, - { - "tcId": 162, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "92d7af55546fad292304af255e8a26f867f465ea06756c06743f171b65ea5c27", - "iv": "a2cafa64ee4a475c3d9e474a5e17e96570eac98377ea37e20360a800503bbc50", - "aad": "", - "msg": "779165a3e7b2e0af17e8f476b357138f712233d4063071d5f1ffdc81cfb88317efc93e18d1dc0ea8ebe7d4385a2faca9ec19f2850dfb61a93e23cb25159a9ca48f42026f9dc6e0cf3efd13726b32966432edad588c5a4168dd5e71fa33d82eebd8cd5c8c13fc2769bb0e9add84c9573994c24ee32a848c851aa76b62b1f0ab140ffacfc53a50f20a67805c0d09bcca5d68b21aabf814d4", - "ct": "abfb230d394652beae6dc66c2e933bcb553db390546e15a100726a047ae9bd43fcb692e02a5312a6e3bf662be5ce6b98493d9e1c36438ff5af7674afe85af8bff05b4a738d2638a7d1c4f7d2bf768defe386af0052b075eef4fd940fe5e3333f3573ef3c6afc1b78fbad97f80efce2fe176c6329119074a90f4e4bd0e428832bfecc6de474ba99909bebd8c0b6ef48258a4f99f0505c4c", - "tag": "5ad109ec32f99df3ff2b917c0822f3de", - "result": "valid" - }, - { - "tcId": 163, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0454b3f06408d9467b1163f3d5dbb30000f32ab8045c903962d33512f1aa6506", - "iv": "fb835444e7110bbf7c85f79d21c602c5f7d14ca01f2b830a2809321833a665f3", - "aad": "", - "msg": "697c91502df2102abfd93870620f6f857825be652ccba33663976d5ae4bd8dcef3c313ea60ca19856dd59c4026371f9515fd2d1ef0328872cb0b6e61a14350231c3ef16b612e2c6ec6ae42b030a31c6a00b96e69fedbad9f4d3ae41272a58bf05fb381ba71662ff7c4a27a9d287f729ff1ea9e117b667c14f61c36b109b77c13c7b351ef1369b7db4685ddb039ee1d96c5436e49cfb642f5", - "ct": "1d9ecac18348c9a41ba98c46516abccb70057c6d65ffe8a58a506e00fe4d1a330e89afebc5c4d146496da099de0c188d22ef24eab3babdf16cf716871f83a769fdc6da8f8e8b5943717ff2124ef9f8bd90958e0c2f539596fe37ef3212890f79c88a2942acf8d52c86aac98a1c008efb5ebdf36f56118f2e34ca5c69f1f275668036785908c2a89055a32180abcb54e57d720540b7f0fab0", - "tag": "98c50a50d66fb9d28af2615e2957f06c", - "result": "valid" - }, - { - "tcId": 164, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "877e5d547243778fbe6aed330f71e91097168b5f6e73f7138c0b2d0f352e7a65", - "iv": "af5fc0fc73f0fe9d7835a4ea743e17951c7a5af81940ac9f72799b6ddb7452a2", - "aad": "", - "msg": "9984f89fa27aeb39f92b0449414480259973bc543d06008da7ea5fe56b49c378bbc3a6230db1720f7d2f5ace758c8f28a73b8da04c3d7a1d8bd6d82cd1aba8459954c1c2373657357bca45f38a22d51879002f9457a239f48f022aabe94f963284f7ce0a70e8c13a8cdc5dcba682ec65f2dd5187102f708147c02315d06acf68f54cf5c8f9df98744701774ea812475747c97a38941aaa8234", - "ct": "4638476ae43be201bb4593d88fc7cf83beab82d71dfc688914b02e8a36b6e32c2bfa2bc97015b7d6270e816360ae09826aef9864d39106fc6644addbcf4fcf81d7cd4e5dfdea76f1cb46d035d0ac627fd01d4e449d2cfa2a77debbddec3d5b08474651a29ded5ffe9c912a5c4b363e6f623d85beab50594a78efa8757dd901436a8599601ca551c95722a2103dd79d45115cb16d9cd1bc1e71", - "tag": "cdbe26d8803086b1dc50a14ecfb04fe5", - "result": "valid" - }, - { - "tcId": 165, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0e38555883d6e637064eedf92f95c5657d1b46fe5f9acd09e2b9118b1fca6964", - "iv": "021b8eea5a26963134f3786d23eab28198bbcf9d41873d5adc91b66d87a6689a", - "aad": "", - "msg": "bb3c721655cde831961fef3625a73141a2311f5111036fc7be59194fc3d6e70bf99c138f88c760aa8ab62260ab14e1e0d274649c52151d36e126cf385444773e0f1799feb37b4bd707625b0cdc0ea46a9630a1806fa96da2eb175c1582584991904d5f9d9419774bf2d0f45cb6299b2e30918e3eb5018750699d51c11a048df102eb2a668e1574464e17e53b56d376baf862633e3810afb29180", - "ct": "2dfa10fbeba5bd043c808845321088d6eba1cead8db048f04c03019247c2d65f77d858c02d16cb0fdd0109e7e015cb9c77cf405f3b188ada49c5e8cddf4331f371e5973e705172178b16f60f97d4f56b875d5cded6518e2575f7c4541f981f4209243d3b691410b65bdd366846f4b36955e551ece0feb5b45734f4be9487e9207a0ad7712947d09c5f269eefaf9eaf59f03700dd8f927a05fad3", - "tag": "cd387927d18ddc72fbddf5cdbce67967", - "result": "valid" - }, - { - "tcId": 166, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5309848f4ca27ecde6f8d4ec77810ff18bac5507b4298df1dff7789bb7b5adbb", - "iv": "21f95cd18d26415b99cf52acdb09f72ce2b3eb2cb8892dc3f002483cba7c59c6", - "aad": "", - "msg": "0a8ccb7d214422fdcb1e36c046b1c0a843e8d169d018a12c178d84a9f8a2f4d92e04e774dd335df5d5397aaa464c12786dcbf55dc89b4126d5e413b4491fbf5a96c721a2fd53a2290c9b3a77f622de7fe59efd2015ef78659e293c1c2e1a0a02b6ca10043735a7e01b4460d712b78fbe54a7b4fc1eeb93a9c6a943be90b593475acfbb23b0dee901c49648210976051c16a786c15403692e65248d", - "ct": "21fdd4fb374f84db029c652f303148c8604e04f1cca14cf70292b5bc73a06c347a6f36a06c673e59e3063d24d49ada7a9f0d89cd1f945907ec341ed65f7e6ad8de1b12ef61ec158e79601bdac6c8829bca970709bbb67f6acdfcf0566bc6778bc034f344ecec4a1be05f40a5a20592cc836bb839237f9cb028a9b1f5fb57e7fa65f38e85ef50bd69ec83049f7b2f7f8525cfb30c4f3a62f56710c8", - "tag": "0a45c9b1c18d853ff153c8a9553b67f9", - "result": "valid" - }, - { - "tcId": 167, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f546bde0c759965f2af897026ae3597795b36b4a6c000a2bb71409c09c170855", - "iv": "d2ae0708c00db059bcb5dbb98be1345ab99f15fce32bce39750007e91e0eaf09", - "aad": "", - "msg": "9b1a8b868db1ac9d7558de1dd29f07ac73189989d591c08ac812b6ace5fbbe4f0932dc65d6d60659ffd4a4d970bc726f7d779d50aa0e04aaf9655ccadccb6b4eba6ce0292956fec5921038b3e59feb7ceba3c7e8b0de2c40617837f9a00863e5442ce64e6f9fe7f3893ed8a97b6cc2e20072d0ae659e8098d87eaa186256933b4417b930de39d9f6b738dbee6c9933eb332768fabca4daffd9f3ddf6", - "ct": "1282ebb389fa24feea236b22bc30a647102d564c8890fa62cb251f88e6fef2773e7e2748e16b76970e869a56bf1bed529636ba641ebd105c66f6f89a32773e408fe15f53f8a8e3c85d36b06eeb8001c7dbccca98b1ccf1552ad0351ce40f93ee25fc90cb20568f3bcde430878ff8880525ea4ea7e2399c2f493d1ee389b45e84b767f65cb31cea102dfa1c032ebb07e50cb87e81c1fb0dbb9cc322e4", - "tag": "bd9f561d76424557a60dbf3970e717e3", - "result": "valid" - }, - { - "tcId": 168, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b95d8caec944b622134bc8fa104980fa132bfebf2be549adab8c19f799bcdbdc", - "iv": "4632d7d9d62e4ea52c7e7540e58d3bcc4c89c58cfd9a8b2e64b62aab31362a71", - "aad": "", - "msg": "2c43567f6ea53be45826cc93931ce9f883120afd86a499d233163b0ce22da55481c10adcd85a54b768cf3d2e9572e6c3846c2ea00df0f61b74a4c71daca33e37d1489b259763d0e626b28faa892e55330669f2fdfa6ada55598db8921c4afa646869bd43e1d1bff3e535862967a21b381c50b1f0e262d0a9cf5d2667c376a46b226aded4d236f4f0a19fea2bb4173509f548561fd8a58edf5e222b3fc9", - "ct": "e51d2ba38584e09d45f9e2b26482903797b0ac52473cde1474b42b39183a7be808612c21964dd2e63e5e17040c78c98ae31c93abc472cc36a5393b54c049c6136892980bdcb49a35f7fb675b01da8b93d0dfe5d990209d7e07d6d2a7048594e27448b965ea020cd9a823c29389cd479ded3075bf11af9cf0cb1dfcfa9091f10370a5f3a986a283d20d85d350946402e8f7e6eb1f679deec73aa9d72e4f", - "tag": "142be223947b2ec8a81911ed0e12caeb", - "result": "valid" - }, - { - "tcId": 169, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "24eecc295729f4f65072efff352335c4d2e0e6a5b879fd8c810a5ac1958afaba", - "iv": "f6d088287d8c72e137794b0c30bdc092c52237942baa59257c87d24f47a0dc3c", - "aad": "", - "msg": "6e6181fb34d48d2a5468d5d13cd4bbc2f4e6e3f26c179bb5257c42af18b7613095acd4c2f588d60528f500e09230345dd732a05e97fffaf0f3518dbefd5b5a391e1de5f47daec85a82444541e5b7253d414a924220ab96965bdbe0d912dea7e2b0c92780f2ef68a08ccf413cf51a82d5f8a65b4424e76fb75ff418a655e9d08c9f23ddb6f8952527e1cc6ccaa3440b8d1d17713836100463ae5d78604290", - "ct": "3a5e0340de04751da514e8a79f0544c90f4f5746f811d0ec3651448a29d9703a206e8db83c53979d676e74e0204d84a4ea1a3380ac9a6b1aae9568b30921c43735ccad8b90f139feea2108992b0b78260cb6eb30ae797a8125a4169f0b01fda08e973593869d3df38260d9129ac06f9030e6f2f6a0a654cbc09e6ae79723b5cda9a76954a562d41df494ffcf2e6b01856212e84f531ac089ebcbc5418315", - "tag": "23ace2946e95fd30f4adf2d131b2265f", - "result": "valid" - }, - { - "tcId": 170, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6f251d4484cfbd7a45ce1e2173fd2d23f60faf5e8d1ebea5c592ec84e6ff101f", - "iv": "9d7c69049bd1ec684821b95324d18c10dac3fd43e0ffbb4d196da7e696ecbc07", - "aad": "", - "msg": "7f676e182acaf6e044d8fb215c52b2dd96e634cc5e1bbc8761e10feda32ef2f6dde292d99befbafa3d98d276dafd6a40b0ee70e5d058a51340f7976c3544619c91824de1fcf4e9b3739fa33d0c3ee276f53c400ef92a9fce4c684e469c751173365ea32c30f4e10501748462d24904078b9f806184c6d9b3cfceb84f0e48a8290342a376cd6239aabca43de6f7e2718cf13862444018b4c8c613b362c21a52", - "ct": "0b987adf162f5c2456f9caa956ca91dd9de48b7af2c00437b9bee5e415c2dc15eecf8cdda26d0f7aa7d70962af1f4c1554e21dfaee0254ad75a62a789d67b2bc71da6bfc28ef277a640406014f606f61751fd1e8c53062a7a7d59680ba7fdd0a06a80b0cf26004ed6429e8edd5ea61f9719640a1688546327dda610e4e8c5d1500a23d14faea88fee2645fd740bd7b651c5c2a397ead779c7429676cd13734", - "tag": "b86a31cfcf6d8c46378fc49363a143ef", - "result": "valid" - }, - { - "tcId": 171, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "87c8a7c231901ba691c257fa59fb0fa709182d8a4593f8dbca6be90d023333bd", - "iv": "32689eb1ad73d446e46ae5eaa35ad64ef57f4236b6e5a886e75a214d610ff80d", - "aad": "", - "msg": "cc32419f089df4baf919af6702a47c603d75837245a7e02ea5a4fd1e1e5ec7fda907acc69662e9f9e989d450fa0fe39ca2c0d56b9728484b75b871cb6e52125611e770a9f93a55c000eb901a29a6b60489a981fbbd40be4eb052bb76607f0706275e2c8c1a61e68b6b42a2b7cc22b2e0a76574756e872bf99c17e725cf4d93086161f659f1b6ac2166802fec3fc19212e718ddca5dd78ab06f2eec0321c0f75f", - "ct": "81a5a81d28b9e362b850baab2710dfd4e122b28490b6f41598d3fe19847ab20e7125261113dee4ccbd554882b12b30373d8546803b9c4a19db4817b90ee4fea66eadcbe9bfa1defefe865170261e4c236550383e25bd513bb940a7f05f0e69c70472dae2859c79368f721eb308c195bed637514ac2e832afe2fd4d2095bb9eba3c1b29359b1ad2c61c84f502139823cd8735f55c81ddd856655c578b56375f6a", - "tag": "3a6f980973450046e12e25f594a55574", - "result": "valid" - }, - { - "tcId": 172, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1e24400dd5cf517c1a228131cc7053b7dcfcb61f539c940748308b1f020cc269", - "iv": "e33396e15cfea4bb1527a50a38b9390030999a8b10a9b509a58d6d5358538e8f", - "aad": "", - "msg": "b4bd4c9682435730cc7ff2deb140f0d4748577565c33736c671f9fcaffe79e882b8f398785b93d672703b5381155b39714413ec5e83c671a63a4393387eec83f4175051f7a03fc689febc9c1da290b1c35564ab2b9e6376ac5be84d790f53f4715c83372a931e9b22d942f3eba8aaa1d2d287f52326fcaea4d960ae764c336b2665e0840b50f4e96c2ea8bf3fecece5e4b58701960d9a8f83a8a1d53819167a2f1", - "ct": "c487c50820a58ad5d5e33b034d2a200cfaded9eb72ae5a8a877389f13254dd9ef388ae3060a9c50abf829aca69a2df86d1c7b67158583a95b8f31fcbbb6af3b36ec67d0bda6eb597403f834586ca94b83a1dfe06fdf3ccbbe84d170bb7603325f3d9236bee2fcc9d36b6b1fd5d6f8895d241176dd1e71e501c0913c694c16e00a0f8e28daed226cf435d543ea1d2d415c10e617d6e2cba8d638748994cd4bdfad8", - "tag": "fdbb84f60b0b9ad611bad23ec121f163", - "result": "valid" - }, - { - "tcId": 173, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f5a6375911231929e1e94198cdcf5aac2588cc51ee90ebc8fb2aafc7d8149577", - "iv": "7bcb8e86c49eb178338921172ae41ba912300a8bc97b1e99d3ec3a94ce649463", - "aad": "50", - "msg": "b9853c71787e125df24f8a9aa36d312f", - "ct": "4e2563d6829dae52d04bca505b9f207b", - "tag": "1b2bb98b1e8531f415e6975343384f5d", - "result": "valid" - }, - { - "tcId": 174, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d5be50f10fbd8089212eb66b6b0c4fa1426989b60d401d6787c5451883cc3efc", - "iv": "3237078a0858f4729d98de63f6e93f938fe8829c0acf7636c926cab595209d9d", - "aad": "93e8", - "msg": "b68c781ce198d1fb944ac3edf32d73f6", - "ct": "d90acc0d2172ef07303c8b51da5a24d9", - "tag": "207262b59ce8dba50505257f5ea5f700", - "result": "valid" - }, - { - "tcId": 175, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8efbdf1b573e33501a5ec915c02f55c61e417292642e89a6e8ad5793271c48b3", - "iv": "77f14a3d087a5b0d78c411785b006f4855a54b8afdc7e36c998477ed9193a2d6", - "aad": "872475", - "msg": "755b843d16379340ebcf8ef15a8df5b1", - "ct": "bec099bbe02baf8e4bd3339232f7332b", - "tag": "d94baa9730bf25720767eb310472c6d0", - "result": "valid" - }, - { - "tcId": 176, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "64655db2e55445e45ec08db8a591e0f3de423ddf2eb28d2bc41fc40d790d8fd0", - "iv": "451e0f6d9a7eed1fa017db2d0d3a1ed13759b5d720fa4ec7a111638388c0ff59", - "aad": "defcd5c1", - "msg": "fd89020ff8e15f565f3afb2ec00fdce2", - "ct": "ff5f9e872f871beabfed294b4a3481e0", - "tag": "4c2480053bb659557fa03733c71b0c98", - "result": "valid" - }, - { - "tcId": 177, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "af19b9b61639fbffc673ac9218146c7fd525d04dc06793e4bd0a05252252b7ae", - "iv": "3e93ac925bd391f66563a30be5d72464a0723b53c6d8a1449bfec6ad19dc3dc9", - "aad": "b003c77883", - "msg": "1e5862b63b8b3f7adf12665fd5db609c", - "ct": "ab10817f17a9b910d067236f351f35ee", - "tag": "2bc7cfc8f893dc19f870ab1dadbb8937", - "result": "valid" - }, - { - "tcId": 178, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "fb2bb26a48765aae5d93a916f7f437a4a3b2cbd0ff9422d19b3165108b1f9b9a", - "iv": "63f5434c2fad72dbe04f2ca669ba959e3af89af9d83e32b41e1561d5372e3f2c", - "aad": "bcee5125616f", - "msg": "b9b9f9c976d9f72bf86ce517d2d8ec67", - "ct": "c2eb063876bfe92eacd3f9abc00b5150", - "tag": "0a9d8ac763f7b94b64922c2f7b0e4724", - "result": "valid" - }, - { - "tcId": 179, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6e37130cb190eedcaa159a7cf0e2cc59580eb343d2ebe48df7284732a513687b", - "iv": "639d9504fc9d95b891dca39c68d1dec201aa0dbd2aebcbe87430da92490ba920", - "aad": "ec86970a449911", - "msg": "9341f3732c26c9f0ed04886dc3760c4f", - "ct": "946a384a661a80a1f05467004bc666f6", - "tag": "f5cc7360746f5a84aac95d47fa17e238", - "result": "valid" - }, - { - "tcId": 180, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3eaf67cc348ebcdf428506105c7b19aee7c982269353055b8fca84c2523d12f9", - "iv": "cba68b46d8f377c6dca613a383d14b4ad13dc77bd40df1bd7234a583d0f8ffaf", - "aad": "8c6ea6e8eef0424c", - "msg": "bbc70d3d504bc5ed24a3228367b8b7db", - "ct": "b5df4b87680bcc9c7ece97a9f0fa5979", - "tag": "f5173a4ae189875dd37ddef8e4803a8f", - "result": "valid" - }, - { - "tcId": 181, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f14163aec54409c64e2ff698e55986fcffc98fef16e52b19f260af93cc385235", - "iv": "0bfd7f5103f5023a73e8cfe8c618a59c339507b845e5d5b913734e6bfffc50f7", - "aad": "e671b129464c29e654", - "msg": "68ad85b8d994e66664857a4c039bc8af", - "ct": "e02616208c3367e3b28f5d9f0b5ce7fe", - "tag": "7a48e0ef7c090a576c3945e48c9f0cf8", - "result": "valid" - }, - { - "tcId": 182, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c3db7a31fb79ccf85d7e6363676520b3c5d3c4d186d880429ef669deb8d6a904", - "iv": "f947af05e37a567207b13d0b21159d4406156083301fd8b1671e50e10d0adbf3", - "aad": "b83580f6d85e89b422e6", - "msg": "d55a0d2374d826cf0473d15a54d2cb1f", - "ct": "5df6b6a3dd724c0898cc7e2b1e158525", - "tag": "ebe18d912eadc32359b412fa1b1094ae", - "result": "valid" - }, - { - "tcId": 183, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b45230f8094227899076808fd29f71915cb5182ffe45330900c0ce2ead5a92dc", - "iv": "f9a53e7dff2849ce6bbca644d3f02f0d2f92a1c9da1a5f0d3db8689a8f4f6beb", - "aad": "5476792a8fccb6520d7e69", - "msg": "fca62e27520a05da487979830b5a31f3", - "ct": "4ae226f5f485ac69ca901650f79426e5", - "tag": "08dc3c57662524571582c40c382a4e1f", - "result": "valid" - }, - { - "tcId": 184, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "65d5bf7da66d73c93978f15edf7e9938a6e2367b74e23d59a8268c87668f8463", - "iv": "32f4f3077b7ad693f8c658fcad5b31c440fa2b3df9ae108c628681cc1df3e5b0", - "aad": "2b5a8e4d6954c5dadf5dd730", - "msg": "fc9c30b931d6c2800c1677effa2af81f", - "ct": "ead5c25764946fe37b3eccf0562b93c6", - "tag": "41bb09db5e139cfac5961da4d7371d3e", - "result": "valid" - }, - { - "tcId": 185, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c189d712ca65d57b25295d1c4b17c8fe9a12c30bb1f266e8abdf914e73a8a314", - "iv": "09814e992beaa319422740eba5ec662e30d89a3550ebb907b41ba2653a4831d8", - "aad": "58619e2e1324d4964f584b87bb", - "msg": "647e7404e0ffd65e6b9e2459db7c1005", - "ct": "a7929442d43392f21e9b80e1b64e3123", - "tag": "6b2fa5302c281c416766cd762c5a48a2", - "result": "valid" - }, - { - "tcId": 186, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8289265f3c7408f9c8137d992e9817a324ea3902908fc9c7ee1030a640cbef9c", - "iv": "88e786090579f95cc4ad12396f9a4e7493a75e6c099f23f54d0c9fc896211ebf", - "aad": "76bc40b22bbd4e2878a62c48a24b", - "msg": "a348ae570eb099ef6a0da23c198eb81b", - "ct": "4f962f96381e4f7757e201347d4460ef", - "tag": "2c411bc6c942d42356043ed3ff0262f0", - "result": "valid" - }, - { - "tcId": 187, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a2535b907026e2d6cedbfebf302c9296faa3158b423aa26e4d6d504359148da9", - "iv": "bdcb4fc291c6788b90e5a1e485672dc822c46a7e370c4d862131a0219d34b758", - "aad": "ca547fbe17b40378c7232f68ee0f92", - "msg": "71da938c536d70377fd420f58d2d5da5", - "ct": "ed6a5014dbd9f0b864e705d8e2e3ba3c", - "tag": "6327dc228ee2a5a453f068612fbdfdbc", - "result": "valid" - }, - { - "tcId": 188, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a636bd4c6f3709917653c8117892afcb7c79bb7467c0c96d5235bbdbeb50247c", - "iv": "780efd4a5c1d9341745da7a1b71891c054dd0eb3bc87c4da984a6b391f10a8af", - "aad": "f582b9eab59858ed9c0e4b401aa2bdab", - "msg": "e9b9455e724af1f37815e5b163890546", - "ct": "4c8ff56160f6c3bf73369824181746f3", - "tag": "40f4ec2959f1c8ebe0e8ef2c1b8d4bfe", - "result": "valid" - }, - { - "tcId": 189, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8d518a2d33c2dac728ff6f026c9d44280ee408814b865c6e57cc6085e71dd00e", - "iv": "1dc3e02f859383c3835bab259f054e7f74f2c1a274fa48de7cfe291de1d188a0", - "aad": "ca1f296d57ef15a54fe6b4171080c3c571", - "msg": "2cd892ab60d5a6efc18dc6e4b9e2fcc2", - "ct": "d9b72bbe9ba176915abdd81581aeedc6", - "tag": "b5b9918ce4c461a1fc7674471886b540", - "result": "valid" - }, - { - "tcId": 190, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "41f7c48ec8befe94a521e3f9778ecdb681598b0598ec84e0aee8e4bf9555f9d0", - "iv": "b8f0a6d2f35589629c1e5bc82c4e8d797e4a74fb2a9d8b6452fc2554f87eff7e", - "aad": "84f61f7ef191a9a43324b19557d8580ee617", - "msg": "13cfc69932814e1994c6e245ad31dcfa", - "ct": "45ea72fa372449480473a7b0aa9181cd", - "tag": "aeba539f3bf4ec48b62b2b75bdc617a3", - "result": "valid" - }, - { - "tcId": 191, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cfdf429e8aa868ba59a9b537ba8753d40a9cfeb5819c3e96320c4fc52517ee98", - "iv": "ebc73b0a6106cad695efda509a208c3fdbd58f1ce9b019126c1db6ebb6eed665", - "aad": "5bc7419ffd47e76330ac930a17cdb84228e954", - "msg": "749a3657de14fd30460697a251aeec49", - "ct": "0e8859ace358521530103aad8739c69e", - "tag": "42b2987ab243a0e9a8b76bb2997ae5af", - "result": "valid" - }, - { - "tcId": 192, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "873865655922adf537c13a6f6bc39b75ae7d2dea8d03ee31ac02d5a793d2f303", - "iv": "a6af2368ff12f4515928023fe5996912e9497de8e74e508b255aed1165da4d1b", - "aad": "4ebfbc84cddc89b9728d120e7186e56354fd4672", - "msg": "afcec5cf4e050cee3bb7869d40f2387a", - "ct": "5ba23e5adb44cb0152c622b01e4256cb", - "tag": "a5981622258526507b8a733c8261fae6", - "result": "valid" - }, - { - "tcId": 193, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "86d884eacb70586523fbf2fc9f40460555861bef572048d9922e3033dc5a713c", - "iv": "8f55eb5d8b930dcd3a761422128ef4b4b43155c46d398682ec7e3ad0e62e4dcb", - "aad": "3435497314f8d3526bd63f9d0cdd6d6c5fea5feb49", - "msg": "29c37ff4ef7d02cb849beaaa45815c13", - "ct": "e57794254c904d58cd751ff94e41bd8b", - "tag": "5da35a6c0ab39191520f4f4ad2bede6e", - "result": "valid" - }, - { - "tcId": 194, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "461fdedfd1ab4c0432dbc3bfa7d72f83eb0dcf4eeb4d92105b6679913b1fb68c", - "iv": "1f9a8ce07df1400f714771e4819b5faf64a800bcb61a3d4ea57d4647ea0df7ee", - "aad": "1ba61937c0c365bafd7b48ea9f9d09903d972c90229e", - "msg": "4b3645387d89df0a7fc68c4e4825d5b6", - "ct": "223fd43858e4b5e684c501828bec3095", - "tag": "5c87e6ab432b7c66891ac355f9fa5416", - "result": "valid" - }, - { - "tcId": 195, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "819dcec2b28dd248b19e89817890f877aa9a342d2fa71f879b51e2584336f75d", - "iv": "483460bbeacbad53268348a6f895a562a2b9deaa2b3cf46a55b91bfaf3c29835", - "aad": "22ae58559cbd43d930d7d33ac607f2cf565517afd3d7fa", - "msg": "842586024c5b9d218cc5243fb95868e5", - "ct": "9e8665a94282bcd0580e3725913ff204", - "tag": "369f632c928418aee71f327761db38c0", - "result": "valid" - }, - { - "tcId": 196, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8910d5d739e2bcb3be3fde14f51a13a8c1c3d80507b9b399bbf4e4ff693cdee7", - "iv": "1e8f347ab8bf06a4daae9eeb85cf56509fcd47b5490fddce3a110c91dfbc28f3", - "aad": "45317bcfc32e3c7766a8ee34c459334a7c459d70adde0f76", - "msg": "925154719d44b6ba7121ac5ebb730bb3", - "ct": "adfd90e79a067ae96f43e901d5fc49b1", - "tag": "bbd17f51867424b7264a87340c6c355d", - "result": "valid" - }, - { - "tcId": 197, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "eb500fffd84e7702682dc02b73f67533b3c4f0712ad3ee27832512ab9f4e7ae0", - "iv": "4725b93caa6892046c2a069951f5dae002a495e9df3cdfab600f186b77ea016c", - "aad": "c753e906fc4bfda724f2a7a9ddb14402924f752384844b5959", - "msg": "b6802ca06c5f4cde44f658750f4f88e5", - "ct": "42c9ae8ebffb79e9d18ec91e467bc264", - "tag": "796a4923f6ceeb2789f4ec3703f925da", - "result": "valid" - }, - { - "tcId": 198, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "908d802698c30749903c5174c34b1eaa6de22e3927c66b1821f6b0680cfb3f83", - "iv": "3caf30fbb10d3023687decf68c2198523a1cad84b47da371e006aef35c439a84", - "aad": "e2f27f35f8e575e7b3ec98674fa1e35a0dcd54fd93242604d270", - "msg": "5d51951e43ef73266ddfefc862e2de84", - "ct": "b94735bc1b4e380c253acc64839116c5", - "tag": "85d180adb5eab8aaeb2f51fda907693c", - "result": "valid" - }, - { - "tcId": 199, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3607114ab35d2f6164d57caaa6cbc4c49c016b165816b58cca3e10642699f2ca", - "iv": "cffee7ba62590201d8541682e5ed6bcfc2263e9731d259a201f54e43a9e2afe1", - "aad": "9823fb4c266e94fdd7976c4c7614e1a6082f88c1701bb129032c8b", - "msg": "0a360cf4bf8161a064d5a1ff38817094", - "ct": "933fe50ac1c2c11ea73244b83f46245f", - "tag": "cc1b8f41aaf6d1bbe1ba3b07e6e6f427", - "result": "valid" - }, - { - "tcId": 200, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c9d312f07eba5cbc312bf2ac812fafd7623b7c1185881b698aa0821d74b23ba1", - "iv": "0af1f9e944e35b5653cffe49bacb5f49ad6ec506046f46418c60bfcd4e7eff77", - "aad": "e893d2739b56b06764f1213e2d29f0e704905842d2c38c94819d8a8c", - "msg": "739e8a0f90efb776c525de92e6b29b11", - "ct": "70e66a76c8035ca02694f7a437d7ebf0", - "tag": "f788c111981c6336e84d688aa811b85b", - "result": "valid" - }, - { - "tcId": 201, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b6763d9567f2605f5996e8a947ea94e0594a4df309ded47d3c01437d3e70c775", - "iv": "c13e68fe490857e9f19787abda4a66d6c9416ba6dae28d49da7a8e2712b83e85", - "aad": "8930277e8addc0d141f8291bc189c58bdadced3632445d9aebbd6ee767", - "msg": "75f661b2cf0e08164e11a3638b0fe624", - "ct": "22e16eacc4415873463e6f126a82f03b", - "tag": "104376b09f39c2931d1548bf251dacba", - "result": "valid" - }, - { - "tcId": 202, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bfbd47241b3e78017dfa4e3e46bf2a5447d36dd7c1fa094e77593ab135a18010", - "iv": "00f09cb42121d3316cf5461f4745d2d8664e0aac42ad9bdcf7706222d234a1ce", - "aad": "3a2fc3382b4c053ccd7e21365f7e748a9386df7e95549a64f9307b723a33", - "msg": "7ed6e0e7af69278f8bd7dbf03c328b46", - "ct": "a2e93027c3567e3e1232fe97fd346057", - "tag": "730f3e36156606ad55619c2bfc4bd7c8", - "result": "valid" - }, - { - "tcId": 203, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4ad1752fc834ecd688bc555361a245e16a984e21cbdda0a4e05fa05bd82be834", - "iv": "f70006b10c2f965e207db8bfd3493a4ddff3603e9848a87c18840fd2bd41ba03", - "aad": "b410cbaef0341aea828daca0101a536367ca5042b0c320cedd0a8c7e189153", - "msg": "d0c526bf2c9b705977f3a067589d0990", - "ct": "cb653fe894c4ffe0606edb2923200396", - "tag": "add6dee0a1eda211d3a544db12c7a7fa", - "result": "valid" - }, - { - "tcId": 204, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ea859d1d59cadebb04e9a125256a857de0c398ba430569dd602670b2b1b54ad1", - "iv": "bda210c4c681c7644aefbe3c0145ca6f826666e01dcd9c0b69da886aa77f2062", - "aad": "c1ca91d97aefe4b2098331f63723896542541ea61adb7c43b96e352d3fa74031", - "msg": "3579e195be14d7d1b122da399e393bd9", - "ct": "f708b2ce0dd9ddc0aad1732e56789e4f", - "tag": "e0a65e9beaa029de8cc050eb1bedbfdc", - "result": "valid" - }, - { - "tcId": 205, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e550634af29b0b70c836dc2071c65f6ddf9830249457f2d17f04893cbcf2e7e2", - "iv": "7089169d17a09ebbcb2d7627a485340340f77043c6b6569e9bd66dc4d511b40f", - "aad": "c9349608d55558a4f28c273f24ee44644ac9e1520719bf6ed1fcd4edc75de48695", - "msg": "af425e8ec4ea8e6e3b726d85f1fdf483", - "ct": "f3580c49a85efc98a7cf9b0091d2110e", - "tag": "f671669347b54b6c5c152e014ff4929c", - "result": "valid" - }, - { - "tcId": 206, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "639f0cbaa87caa325cd2932b01dff8d13660a8ac0210d70f55ee26fe5eff227d", - "iv": "009864ea7d7e2f288ec4f78cb9d27e5f461e6f8a54611beda9f11eb13fb9c572", - "aad": "6aa6c016bb75ad036a8b6b2efee91a5f1d2c1a5fefba638a4b25eac6aa98d1a256eb", - "msg": "2be59862c7efb4da670d32a149eadb09", - "ct": "4377bf669b808556d2de4dade7fe8f59", - "tag": "e140f2eeb335a34b4dc7a86398889084", - "result": "valid" - }, - { - "tcId": 207, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6c787a33ea6ba76dfa727837db0da7b87675a11c7ef45a09d3dea037a6063b83", - "iv": "5a463eb0b7ac72046b685d24ae9fbf41b54b00563a8ad5032a689f7c8c642a6d", - "aad": "d929fe59735db2dfdc74c36b593ba2eff060dacf5195c1c13b2b7aabf16735d41a6d35", - "msg": "08c2ffabd35e1db5734626fa1434e149", - "ct": "443da97694217c8854d5a3f383c8953e", - "tag": "08021c074180835f5dd7293f99c360e7", - "result": "valid" - }, - { - "tcId": 208, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "80f611b4dcfa04cb587a04f62a351dcc649f4f735d4d76217e49f15d4f2f7fbe", - "iv": "bdcfa24c0d203d09858d42a19f4dad3ed9b2a5ccd4e23787857546281f378a3a", - "aad": "35ffc6dd9bcfb8baf28d14f9f26924138a8c9acbc3cecbd329205398e0c351450fcfbab7", - "msg": "cc039cfe40288eb52daf7d64ebdefbb3", - "ct": "623cde0c4f28fdb811fcaba81ecd28c2", - "tag": "81897829ab9bd28e2435e600e52ec9ee", - "result": "valid" - }, - { - "tcId": 209, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7c64c12e76fce47cccf9746bbb98f0125569127c4e13b783fff563431c31f248", - "iv": "160eaac5a21e7417e1e57d87008bdf37e399499bf0c1a237adfca171749cfd03", - "aad": "77b01b6915bf51c98eeda266256c5c38c331e37c4fffb43bfd15c605112c653a2adef6a684", - "msg": "1740d0b32dc1591022cb58a24f83f03c", - "ct": "c7f5657704742abea18e11b42207c7fb", - "tag": "efb8079d10c25b3c95ff1518de939a88", - "result": "valid" - }, - { - "tcId": 210, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "13e167e80c93b0f28622b29248dfdf04d6bd6c427e66d56c0a8904973948220e", - "iv": "08a4b8176d9c8e6576a350eb7d930eab26d1aa9c829ba1521627f40cce989246", - "aad": "572a9a501f88058f54131cb512403043d35816db2e2bc40073b4105c01ada104074623b681d2", - "msg": "3956fd44d2151b743610ad74384d164e", - "ct": "fa5c5131e1c4068ab19e2bcd7136f2f2", - "tag": "b7908a5a6170b1449073f255c5c061d1", - "result": "valid" - }, - { - "tcId": 211, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "02ef63d0fef34ac496459fe02dabb563d27e4ee3937773bbe1fdd504e99a0e6e", - "iv": "11c6b90c91f46455992fac224faaa2a6f25b693f1c8c3643c36a1f47f71051f5", - "aad": "f1c8b2c69d15d6db7d9c423889ad3655f8ca9314e2dcf1da959e1c3ba528e53b87ac839ca7b3dc", - "msg": "f2a7808a4ded05e5c1d4adcc614589d9", - "ct": "fbba7d8e1c7fb0e00e7b656b644d4420", - "tag": "2c2f490b335fa74bc6b24d10e683bb44", - "result": "valid" - }, - { - "tcId": 212, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7fb7978b63e5fa677d414860c1388f5adf6ff7fe9de5406ebd62481831b5eef5", - "iv": "50c9abd0391fe6a980755c40e5246e56108ef3a4c1a263109f799cab004b52b5", - "aad": "dc75051d3317602a50203d4a4f5562e0ebafc62f013f6068fc64b7db9b1bdadc6dc38a5057d9d389", - "msg": "7411da2c6c339ea6f2fc5c4e9dc2fd95", - "ct": "a732a7bc5aa0827a319e1315c8ba7418", - "tag": "06952a7dcac684f39657778ec44dad8e", - "result": "valid" - }, - { - "tcId": 213, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ac108698b6cb6fa838d31915a05a0c3bcbd44bd3c32973cd11beef589c97ad19", - "iv": "9a9c66ec2a890a2e7d1c53f6293a465bf7271d25900143ccf3726975e7bb1d40", - "aad": "1fcb1071e76af2332aa5625dac337c7474b38dd0447dee7691876fd4d95c867bcd58d664ab8c819196", - "msg": "e06133a723acb2b84792ef1ee5afc77e", - "ct": "4b6bb6f471e883e8171bfa80a8b5fe47", - "tag": "af226495d5fe31361c2bca99daad479a", - "result": "valid" - }, - { - "tcId": 214, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "04e15dcd6eced8c32d4c7744976c56ec7c07681a54b5808cb8b3f4ae19fdd3ac", - "iv": "6ffc51f01a84f63a639ebb7238db6ba66ee42511352b3d4caeeb4f34cedd5b07", - "aad": "97842831b281128e17409d910e76aab73b8496b667951c08d72f8af094add7c03e2dcba04e5e995aad37", - "msg": "165f718f6a6f0f5c06172f58f41598b7", - "ct": "a737acefcf5f1e20f2a05dcfdd43de0d", - "tag": "bddc6aec4d4df69a53bc89839b2adced", - "result": "valid" - }, - { - "tcId": 215, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5c3e9a582811438bd5f634a16aab81eeea7e1ae694bdeaafcedda5f63323cc33", - "iv": "24a465b1db39b531dbf8bfcb151b3d65f76b06448e659269c2290a63ee06dc09", - "aad": "32a4fb1786437fecaf63619efa273910ae0550b1aa687e619e01aa049d16023bf1ac95fc5244193346a154", - "msg": "af4cbf88b2ec86186da7964a3751bc82", - "ct": "26c1ce5e844fea53032f9313e1086052", - "tag": "6cda8189a4d2b1e8609b55e04c9b4c95", - "result": "valid" - }, - { - "tcId": 216, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "057f605f8b2e6603eb4372a5554ace0430a051a7e82e71df972e1f1479350941", - "iv": "edaafe170f9d903ff69b6ebf2ee2104cef528e7504d584693d272f727507e08d", - "aad": "c53e68a77f72f5855aaeab9723d468aca43891eadff509ab24c6bbd8164737a940b67cb38fdc80d5071c4977", - "msg": "0c66b785e26cb3aba3c3f276af70b47e", - "ct": "c01173828cf5a51d4274dba95db7eb73", - "tag": "1cc7bcd03c349be8bdcf629c992f2b7f", - "result": "valid" - }, - { - "tcId": 217, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a69e41003df1314049b4e4f252ca3eee2d300b420ed30e2d78cac8cec9824ca2", - "iv": "fec050cacb6d0d35a29bfedb0dee0e9483b260e03662237385063e6aedf209af", - "aad": "ee2ab7f70d66d774fc26e8b2eaaa601f4a961f357a6450c5c40ba6b6a509966220ece46a5ddcc85c744e277416", - "msg": "ac5d0ea045ddbbfce4ca13f0dfe77e9d", - "ct": "5d5bb9d87e9101e48a0c09d07ea8e5dd", - "tag": "5d85bbcca4b1d66425464f87b8295982", - "result": "valid" - }, - { - "tcId": 218, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "373f4d6eb63cb61ffe1e396aad422a0d0692f4d93dc61b835723f71eddfac821", - "iv": "1872978642261a8d18ce1b5ed5078700ef5ae034ae1f664ccc42b769f09824ff", - "aad": "bc33a1692f34c0dbca88825cd0b3671aef321216f9fd5c3db5aa3545827634d906383683046adbeb08e62c9a7206", - "msg": "7bc4c757c991c2e6a2dad55605398796", - "ct": "ad8676174c8aafaf4a934cde0d739a02", - "tag": "c5e500a0159cee641062e3770e331cf4", - "result": "valid" - }, - { - "tcId": 219, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "11ddfde01d942957eecc6b0f607cf1431336cb0bf7be6dcf7b5cda85ca15334a", - "iv": "9e160068e2c51e961b9a06ff01f415c9bfc6283a666215d79d6054dc84149045", - "aad": "fb835b1651ba0f091fc5223f7fedff5cf237d0339c76a3c75e10ab880ad70a2fbf08678a30fe6fa563798e76cd1ca7", - "msg": "b407ad3c96a3021b65a170bb25a5cac3", - "ct": "b82dde466a43173945026a0f04a2abc0", - "tag": "7b06f15cd72c8249734a6e0f80cdf895", - "result": "valid" - }, - { - "tcId": 220, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "83fb3a69e744c03583e27e5d7a596fe367b15a9e907b236230184d0731e2b34c", - "iv": "8bc1b2eb9d1d293fcc34ff8d0c07c2210efc8da40c70a9d1b7a5cb01f3f5471e", - "aad": "76a5dd33a206b7c7a7ddf7f5a8c86dadd8e757339e90636e94eb056283b515afc9dc2f64f25c9f99b378052820f14365", - "msg": "9a20cc4ca773930473787f09155d6009", - "ct": "87107c72db42fdc71bb5a3f8b08006bc", - "tag": "9b6dd172fd8d58b2047eb47290359d19", - "result": "valid" - }, - { - "tcId": 221, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "9e0b338bbe5a7830553f3fefec6212774a0c97d2f68efc21ba48de8b4df20162", - "iv": "01d9469201e829617689d3a09a34d229ca9f0a770903d192cf5a8e2eedfbcd97", - "aad": "d47d3959eaf042d63b79eff7470917f1da03b48f1d80632f6f6a9628966978aed65a3a4402f100bf86b2a1b0aed00b239d", - "msg": "3949efbb41d83543a9d02c7d73370386", - "ct": "88b786416c24514c8ca9e21c345d1d4b", - "tag": "97631f8f45c12f0512f1f241b7421014", - "result": "valid" - }, - { - "tcId": 222, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "13dcd7162ac54f27d0427f18c67aba5ab308a9fb252efbd69022da434fd265b2", - "iv": "8ada45dbe75d31aff40c491bf859ee874eb243f71f4f511e4145912b6e36a153", - "aad": "7b4a5bb55017201c8b38be9bb4b615000000075c2879e5ecd8effbde880573a219ef1a7955dcd488ccb00e65d9319083fd34", - "msg": "c71029d6b8a7d3844c17639b70f1d8dd", - "ct": "33d66adc55cec1eadab9df54268b5773", - "tag": "ed1be24e3238fa766cd509988cdcb103", - "result": "valid" - }, - { - "tcId": 223, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "41ceb4f21b18a117bf5c4c606b523b2f094c4b9550cd3ff02c35c74944d44f6a", - "iv": "a9adad66f3f1793281ef172f5112aa6be215e4491e796871b7bc674640262671", - "aad": "1610911f43ec87eff660d900694649020c92a95a7d79cae53ba033df60ace21be861381066d327271007059568a769bad18b5a", - "msg": "5a60718b6fb3c46f83d452bd6b80f131", - "ct": "b5567e5321b2ffecaec573a186b6ed18", - "tag": "f1a5e7aa3abc052c4c89481b3b7bb355", - "result": "valid" - }, - { - "tcId": 224, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "14c05283d90e4d2f639cd769778b44c37c6b865b5af313b53ec6d41933cef114", - "iv": "ca294cb1dc05f07d69e786043a7ef3e69d334052af0943e45a7df08febcd3e4b", - "aad": "a34442fcdf8c2a6e1a8ff5386de2c5447d882a1e265b590792b3804576f0db067a2ba8efbb1db6c8ebb1bbe0d686a7625ff0ae66", - "msg": "47211c201d0f3548f01f44e1e2c36747", - "ct": "6ef40c4208cb66155441789cd0771c98", - "tag": "2e536097f9283365b6987fd027b17bb0", - "result": "valid" - }, - { - "tcId": 225, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b1d00c6d357e510f201d2fa1fb1b8f63b5f6a748af6a2bd4c04265318575b284", - "iv": "41892a56714e30e45e72a578fc15bb9854d5bff3e607be150c07a4cdee397b81", - "aad": "6c4b345a7581412bc21aed2dcdb778cbe239c18ea4ce485dcb85476773dee5b2fb3b00ea2c33e024a47cbd486c857e2d5510bde306", - "msg": "b44cc57c382aed6934656a797fd5aaa9", - "ct": "0e95910c01de933df63933818c27dc88", - "tag": "0423183b42b41a766379e26351eb672f", - "result": "valid" - }, - { - "tcId": 226, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "73e707ee9777c860f17d093924ab49f0d4776c467edb976e26c63e741477e1b4", - "iv": "f847d40adf39279e125dc2bd5c5fe16f443f541a105857b37c1d92d3ee028883", - "aad": "27b91b52b7108ab84cbcd658b877f11997764c13e8c24a1d448049123288703c875d1c1b35a10fa4182e8b9f965585f3e375e8e270e6", - "msg": "fc0af6c0fe8df637600612b39acf3ab6", - "ct": "6243381b3fc1ebf10dba97353511519c", - "tag": "93d86bd841357fa76fe288e663e521d1", - "result": "valid" - }, - { - "tcId": 227, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b42fd84a6aa5d30ec86c6ee96cbf8f5ebee428be8c58aceb7df227841aa2e1f9", - "iv": "a083713d307d25090e7c945d4b05c9d2f4ef18ea7e05263e48b6556e68996704", - "aad": "bf4d4b25427244830eac4ca37aa5abaad05fc06213e1ef4b84cdbd681dfebd385b499deed1fe725c60fbb5c35d3a787f8c5e6f0ba7c42c", - "msg": "f5fd93e5cfe93ff94600cc2496336902", - "ct": "14c6b0e197f25cd5bbe2aca4d6e066ca", - "tag": "52ded2639c6d3b60dcfbecce75bd4122", - "result": "valid" - }, - { - "tcId": 228, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1512dfcd61047aa155af57aa1b8b82682713f506396fb87959f2597dfd321d18", - "iv": "334e5de9977deee89aebf5dcb946611cd894852b2bfa2e2b88f61efa2ebd6d76", - "aad": "40405fe795d75762b7c4652732554794ee1852ec060f189a10de18a056b280549b67919662f857e9e52fc1b93f0f1e1aecab4e08ac750a94", - "msg": "daf9c5ad9a20268ce23a351a80f3ca24", - "ct": "4881f2e843c37b7f9fae8d80082ab292", - "tag": "d81cc86671ea3b14c8ab319669472850", - "result": "valid" - }, - { - "tcId": 229, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "43307e94933d951992e4ad5b774883064e101ae2f476d0e84d4ba4556aa3083a", - "iv": "b7594b811d5e34abe8c73e8d97171167c57367534e5536073efd3b87d9c28f7c", - "aad": "295e606f210f9efe05bae3e8024154799470a33aa2cc4e44b127ea7a9e3ed3a997433b8ff8b94c2c09602e6395eb08641b7a9f7f41b352ae44", - "msg": "cbc1697acff471f7160c030ccc3d5429", - "ct": "4585dfa118ee45e5babd6903889c2b1f", - "tag": "84b5a43004aae8262b7964835afdf706", - "result": "valid" - }, - { - "tcId": 230, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7180d19a1d60222152c89f9a7b67fa3ad8d79a66e6081def31153fd4bdb28f8c", - "iv": "6eeca0a18002432838106584f6f8f4ee733b4b5385951a7cf84fc4a6af9fd8fd", - "aad": "7862b0c1f41ff1d435c4f00f7a0871c63854b56f76740def184d14720a6e27e47d820ee5e447084fe0e6ceaf494548a029a6129d3c1bdb767e63", - "msg": "486f9b9c146c0434a80caaa9a2f0e1d9", - "ct": "6f30f13fdd53d9d0f020236b7aed1fc0", - "tag": "3c8c3ec4242d4f857711717f39fd4538", - "result": "valid" - }, - { - "tcId": 231, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "035e7399a03e0b710c1d7bf9bd08a8ae0dd15dcccf43c1c799299e21f612424a", - "iv": "85dde470c38f3313eb165eda9bffc31f6921c11fdf29d7c8a8f302d9ff0eaf0c", - "aad": "e6e95849dbf2059668802a5a094a3a8621844127c4266122b96852aac3ed8739497ef7290b2b2644efe69d5902457c1366bb8910ab00ef45096874", - "msg": "b299ae4cec77dd37e67ee7822636c977", - "ct": "cf9c0a18ff82231f613ef51e5a55f09b", - "tag": "cf1181e4510839d4ac5bb46f39747537", - "result": "valid" - }, - { - "tcId": 232, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e8632335e54ba318cd5956801fe42d97b6c72e6310e010a2eeb41a274db1c947", - "iv": "ff95dcb99ce5aee1d520b10f4fad1fe8b1b74697f8581a033e4f0faaa9449b5b", - "aad": "5ad1327616ff56a296e9bac4bb7db766a868d2d7c29e010a3ffeccd8ac3227a7097e0dedb8b26721215220775d8336f34f1447e9266cb1dae7268d63", - "msg": "2ec8581d9ef8b42773feddad935c225f", - "ct": "4c630f2b0decc2b550a7d0a8bf140b01", - "tag": "aa866c8b5d80a8e63b22143a94fe393b", - "result": "valid" - }, - { - "tcId": 233, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7ac065da538b11d9b2d4f40a0d239b23893dce5289d7ea89d817723c6deadd62", - "iv": "090a9a11e4103ac32a7ddfbd4471f58bcfd1a7687f4d0fd03fc66ec6505f3b7b", - "aad": "0245e967d3a1cfff0ba4030ae93554d00abb58f6e9ad886fe907b3e9c4330a0e697419cc8f00c51828043cedd30c3b43d9c70eec52addd645b5ef103d1", - "msg": "8894118b40bc719fb7d81b8d582d9bdd", - "ct": "ecf075e6df9b6bbb9cef6113f1c0132c", - "tag": "03b08f3ec9d8c1be40a86d6b976e13f0", - "result": "valid" - }, - { - "tcId": 234, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0eef0478f34df86ffddd076589b4e5f6fd5caf6964a8617e5b18299f89eca957", - "iv": "b65d152f9cd80ac18b16745ddd1ebbbde4ca3582197537fe289408e6ffaf1521", - "aad": "8c8777285c47a22743f4135bcd6f795697ca11a9a0ce981c85dd2fccd1d811fd695b37eda5318f05ec62051fd9055dc6f7752a6b9ad28524db43e6c6de0f", - "msg": "fdf40499a0a846f135ddcb671ecec0fe", - "ct": "4dd3e8e9a55892d42ed11e01711aa6c6", - "tag": "1df1fac0c29751e833963d0db4b5f380", - "result": "valid" - }, - { - "tcId": 235, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ae1a8f59d2da45509d36f837bdec7fb51d151eb95fef4317f03ccda75045f808", - "iv": "a3fc3a5839ac3be48a54cd25cc48cdc1398478660fbf6875d41764a25f6be3d2", - "aad": "bb630cbb66abca1cc08073e9fc14cbc132ca2acc75e22f1ee275843f3e09c2d7589319e809e1b5792e04af9c0fcbad4b803cc894856aa9573e1154e7fd9b18", - "msg": "09eb253e0e8cd5967afeda427101fc79", - "ct": "749290b48055c732c082380533eec57f", - "tag": "439b9a85303525b6b072b41decc4b28d", - "result": "valid" - }, - { - "tcId": 236, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "626a94118c71e67a7a0affe2eb708c56784431b4b51f68c9f0ff9ff7be1183ea", - "iv": "da32d981b5363582271a84fc9d950800ad7e3ba2a5c0fedcdeb7f64ea435986f", - "aad": "1316fc0dfc805fcb7445c8a79e5b2a3910271b3939bcfe7afd61777bcb4f39bdb35ef59fd5a681454d9ef88c83d56bd025dbff93687719aa29d4841edc2b5f50", - "msg": "3a199d9be297df4e6a8ebbf89fcc2775", - "ct": "4874080cc65597422039f0f8af1c51d5", - "tag": "50e93ed10ab7819ebe6e7b2eb96ac230", - "result": "valid" - }, - { - "tcId": 237, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c34ad127119bc5831046e2392b192163f9e930fd96c1fe20f275a9ab9ef47215", - "iv": "9285b7d6fa334d8d61d97de7c5cb2668818c1c001c572c14ec61cf053a72ea82", - "aad": "67b9e31161d96874074b4cd584058213d8cb1c573a00335d9b1c27f0f06c9804cefa495cd0838a2a741c69237842563eb45dd239e5a5544cd26e1de518c21a800b", - "msg": "fb702b7f6dae9d1e14a692e3529e53d9", - "ct": "afce842db2505717724a6059def9a01c", - "tag": "aae23e917fed7482fd655b08eabbeeb1", - "result": "valid" - }, - { - "tcId": 238, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "24452c2745cf08d34d279dc5a1f60578fe26bbb8f3e773eb65289e2c9814c1dd", - "iv": "4b959a6ded090ac6529fb46c097297fcc561f8dbdad0ee54890bce23881c731c", - "aad": "c9487822018677d444b66ee55854c4508c7169041a83a2dcc5a75268ae20f46441b621d8b3f759f7e0c8d6426c1278c7febbde77e213cbe203eefcb261dc144c7030", - "msg": "36b8f48139318f14f5d1e975a11664d5", - "ct": "4b05e42ae9534dbfb2d526d80637960f", - "tag": "d16062c54251eb0ec8ae339201d1bb2e", - "result": "valid" - }, - { - "tcId": 239, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1b81256ba6d4876f4cb9e02b55c35b2d6826218ca686273559f5aeced0419fe1", - "iv": "e67e257380f72594d7a8eae0152e061d8f89070c8702c88ebcc37bbe83d839e0", - "aad": "4e94b8229a77c58d9149e7d8c635ba0ee20dac7c8a5e7bcfd63df4558a02e299c5cd2d4d9fb722686b3e7bf69a2b60ce6adf2e742a0b504b6af6cd741b9f65dd37e17c", - "msg": "2fb79c3bcfe623e3d27b5bb301ff4bfb", - "ct": "3cc219de9193fa59da30658a0767c238", - "tag": "1488707641693d41fde8418dc8b623e7", - "result": "valid" - }, - { - "tcId": 240, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "71b18b2627d11a807df168850967a2eeaadcb4f13dc25cad5e36be127a147a95", - "iv": "050573f3b41144891d8c9fa6eb2c7767cf6ab36ea4069f1210396a68a3c2769d", - "aad": "72c296ab5bffbf7cce59cf3cc56bc3449184ad7c6a9158ae5a54833cd503f95ffb28b87b8097021f39d17bc4dd2134b6173fee9ba2454bdbccefed5fd042543e23d714ab", - "msg": "a7a67ae5a74f3255e9886f743f1c118f", - "ct": "62ddfb927e0b7c6970d3b9050ceaa14a", - "tag": "f852d7c7fe2ffd66ccb3c6c87ffc7fe4", - "result": "valid" - }, - { - "tcId": 241, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e609a14a0d7ad7d5d395152f5e64d405437166f84dfcb667221062dadc4636e6", - "iv": "43aa0c769ee7962115444bd39e91bc9bf7627e1762c7b2ad64a2538d816be841", - "aad": "463ae71c643dc832ed44b8aba07df59612471c6458de0b0cdb96196cd2ebe7eba62e0e77c77cf0e337c9b29af84f3ee7484642aa6c7e6934b1d23758c25b4c9514f3d01614", - "msg": "91269eaeb6e683551505f3d76064b13e", - "ct": "d322c03594fab9fc11667e23098a5104", - "tag": "1957d40c4aadf54cbab6e2e08612b9d6", - "result": "valid" - }, - { - "tcId": 242, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0e4a9ca89bae1f2d7e19f6d571a94932f917ed22ccbe2834234e21a872604d48", - "iv": "9c6c093f36823c1c0027af9675d0fd2b83981a4f9050aae9403944a116deb0fa", - "aad": "43b0953ecc81768f992dbccf94cd2e0bc226dcfcc00f981c29aa34a5c7307dd9d4d4cb20d9d4edd33b7abdbee9f18eee52ccaf318d1efc513359dc84404437e4d71e034faa46", - "msg": "4731195730b97ccb97cbdc17e8e78a71", - "ct": "3006f28ec79f84604a4b38437f1177b4", - "tag": "49037736a8054a1918cf7b7335c18dc7", - "result": "valid" - }, - { - "tcId": 243, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f094f26892b03c4b87ecb2d540f5407882488a89e02851c3ca1f8729f75cbaf0", - "iv": "0a8c9eb8fecfb20e8e015c937f3ec6b2e4867176afa248396cc0dd9c9a6b4c8a", - "aad": "a9475ff091bc9f79dc700d089434aa1e7d0a7f1066b11e5b4664e06e96376a917f28b765af8390583d5b74822ff7fcd3ea7a1fd1a637cb4158eaa391bc081078327dfce149097e", - "msg": "ce7d9559e72b25d1e5e9badbb34f9f58", - "ct": "a3a0f295c7fdec0e26ba4eb00b3d77b8", - "tag": "8971507c744b64389ff3e31adf6c3492", - "result": "valid" - }, - { - "tcId": 244, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e1a27847b038d285e047696028aeead4965e1cd382eadf8a1dfe658d597a8870", - "iv": "893d5a6ac5b80f648293111f6260a934fc17abe790ffeaeb4e393b7906ae32f1", - "aad": "d35a2666cbe38b8d28d556d056db7edc5b9646ecd2f0faf8415705506f7b92e0773dee1f99c204b125ce31e65864d033873fcaa3e4b866d64584d10d08386a1ff00a0e7a0c078152", - "msg": "d8ff295b046d380b4499a6bb1430ec71", - "ct": "f12785750b95bc419ea02da2486e5366", - "tag": "164bca04334fb4aa5fade701ea8ad432", - "result": "valid" - }, - { - "tcId": 245, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "30aa28cafa515e053223f291ac82ba215502e73523e5929bfe5953072711fab1", - "iv": "127a2aeb588d0bf7bbd8ef804e40e2e1a07422d32ee356c6036e07949c0735a9", - "aad": "2df0628fd02933d430081982d01d2ae56f8c965ade72bac5c450b05c163e7c43e6dee3001bc2e55f8d08924bffa224dfa92de7af4b16ef168531aa4aa52955d4ab907a09886fb5a93d", - "msg": "16ed928cac7121aaa30f4ecf2e40ccaf", - "ct": "0251679289c7338e37663b74df4c7684", - "tag": "d11d0ff1a33554d0ebbba101afdae317", - "result": "valid" - }, - { - "tcId": 246, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2e1febad19c27ed91b09bb854bf792d33c21a64ff2aa2c37b3c11febfbd64c96", - "iv": "51f018c403b9fe15aee51e0d411264182ee1780b4c171978d14d23b4e8fb6f5a", - "aad": "7a025f5543e9deea1ad57b7e596f6c2419acb479c6ed3f5a37a892cc2a7a57e1821a84a2c4e79455a7529246055f0be21b5478ef680703dd92546a0f2fd2b600ffaaf8dce0251608d19d", - "msg": "f260e7abfdae819278fc380ef68ee836", - "ct": "8df9718d0a38e39f69d3812091a088d7", - "tag": "bf4db6538cf9a6d3fa6d434175e59277", - "result": "valid" - }, - { - "tcId": 247, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "61bc3fdff2d2b5e2166f0ed14c315ae97e454bb08ff43509787d40671c3f0558", - "iv": "ea19a60ca082ce13bbd9688586371ac29b66432d6c3875d75394f6ed465e4bfc", - "aad": "b3cfb2da9309182e7660896f6cc17ab904dfab8995e6b5356b9105aeba7df308a4d0595b7b635ee9b897e85ba72295ad8d0f76846f36938eca5d75f210bc310ac954001bc701f077121374", - "msg": "9b8c8579b2d99cedff873f9833ee074e", - "ct": "8b3ee6cca414c06a89f7dc1fa4f408b7", - "tag": "17fde6a01c33aab7876d01a6556d4fec", - "result": "valid" - }, - { - "tcId": 248, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a0a7ab29c11d6588174c2bc35306034265ded9c593852d6de3b791c4cc35b1ed", - "iv": "3f1ad612b05223bea7251684ac834674def69aa6475f66e40e572c934b09eb39", - "aad": "8fbb72629048095392b7ee15616bf521534916014a49e07e67d8ad0cbcff925bc6c70d292a907f198f21c73ebcc1630b0a5ae09dde52da36b6e3bc001f82e5e9a4c0d59c1128f96bac8f94ff", - "msg": "e02c85aa04dbd805a256c9aac06084b4", - "ct": "e58241defb54d00abe288b8fd74e1c76", - "tag": "bea20cb9900f2d65ceb9215d3830f8af", - "result": "valid" - }, - { - "tcId": 249, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c76512967adaf68ef0c41a995afe7307188ba1a368ed702545a88bf3e2d7f1b5", - "iv": "73fe52188131d6abe5aa6749dd7518498126504d9a747df865a598761fd6c84f", - "aad": "6941ee98e63f622faea2c96784445a449f3fd5850b8b26a0036e8dc93b015a42c3a1a0bb8238c0659a103454b8442183b520a10862d0225930ae96e89674bb7fb33611089aac7324ce6285c5d5", - "msg": "de16c4e62d9f32182881ac3e35e4c6ea", - "ct": "5683454f49770b6f65e3ef76bbe0ce41", - "tag": "bac871593fc0aa6346fdf9b0f44c8d70", - "result": "valid" - }, - { - "tcId": 250, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f4a0921b3b24106e9c2e7a921e7c0d1061742e7c5c0fdd72c124ac5594eec74a", - "iv": "25968986b4461b5b2c97f527124bee777f77c73a04517d4d5c5a5b16b22f751f", - "aad": "51081b4b9c559620b6e7f7942189cb094a8c25f65c48e2c7793321793a247436c567df49e054b8f7a4942ddc69989870cee78ad2d2176644ca0ffca44883b603e98d51db75dffd67748c2f625b45", - "msg": "02305e7bf2c7f6ff40b63f1fd33f4989", - "ct": "ca0407d907c6ae0eb5e46cbe4fef34fc", - "tag": "17ef89b87d6fa63a80e12d4011231872", - "result": "valid" - }, - { - "tcId": 251, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "84b6b535a6100f2c73f5f6a244063c10f2cbf1da66a3b65925f7d64066bfd4a3", - "iv": "63ff6d831d48dc2c5f73b056bfd440da0a6ba237bdee48b3963c589135c5199c", - "aad": "da7776c944d168dcd175d3885a581d6a64ceb96c14f2e637c990513bf48f23bed1a036a2838a2d9d036569615d43fa8a1645a516af04d7ecddd7acd23727525252f476d77017ae2bc0a77cc5a63350", - "msg": "d7856bb78727ad7f7063169f2f0ad3f2", - "ct": "02d516f7d4221c90528ca5363891ccef", - "tag": "ea79cf984ad224b3b9b8a0b89463dd6f", - "result": "valid" - }, - { - "tcId": 252, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2f10577cd53eb91974c1b5f5a4b56923975f02872a79b9959208bf63a9835ef7", - "iv": "55193a547921a339060982e6da55ac93501347f964e978345c1723a284007c7e", - "aad": "12cdf8b306799434e2564f354153da7e4a1e41259e1544e602c22bae521cb2eec537bc1ab08dc08cdae46d1541ee2cc957517cd47fa66ec8cbdac623039d32ce0905514e10e44f689c610f3717db9c63", - "msg": "a4f04695ef94f60423f0b9ad96a28c6e", - "ct": "0d439db39bcd263490de5bed9a263582", - "tag": "7cc8f8080c4742f495876f6ea92c62a7", - "result": "valid" - }, - { - "tcId": 253, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "41c6f54f9d60037f5a0b6c48271f34da4cd56ee0bbb792bd31e81704be7ffe31", - "iv": "e5e7146cc69c024fbe4782f9dac63100e507779c6651941d6eedd02c6f571de1", - "aad": "60fecbfe0292b2e7dea9142da680e36ae6c52a2a639c8d9963b9eb8c44cfdb9b3bb9a735a3bf96258ba4c3ac45f858a8954d5024ef2070dd73616e06b530a32753291ae462558537a5e28e7f6afdb14bcc", - "msg": "b836c614028f6b3dffdc6f6d7f0510d3", - "ct": "e5856829869c4e33baaae01f1e2fb76d", - "tag": "ed5bfde112225d38cdf54b409f91fa3d", - "result": "valid" - }, - { - "tcId": 254, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "caffa208b82f6fed41aa0a01510f73e0670f907db06b2d448ba49ded02773123", - "iv": "6300d3aac8a28776795c06601c145e1757e3edd8962e9d625ec2af82b2429086", - "aad": "548a2df28a973841fe27dfc10a7839b6196f1148e8a79957a3590b9819cb00e460f428141fd2e75745a74b2a053763f604faca1968fd7fa99b0b6f937bbe683ab2e134066761e7125e5dd743dfc006911e08", - "msg": "dee663001416d7ba6f37235aab4c4471", - "ct": "eed671c487da9b570d6b5cfa4352f05c", - "tag": "7b9ba538d5fde36c583b52a97afa933c", - "result": "valid" - }, - { - "tcId": 255, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5b6b72b0a2b753196e8ccbf253436a842078512fb03511b29063185f0557743d", - "iv": "387adc7a1ebbef5fc378819d057a1f3bbd23d3a8ca458d85b9df2b45015f1332", - "aad": "886936faffb81ae97ce3222015dc8785ea49aad6b566928cb87a64f0c2460969cb47fedc67d00252b1b1f8c3f2e86d068b7ac4ff4e94ba7b63669ede494b44415e187dd8ae0abd24740b0fee4246c28ae90f57", - "msg": "b693b5e8379d72d4012d7d12d6732391", - "ct": "e945ed3ecd082d1a3f0ce50000f375ec", - "tag": "8f485158ae6842773e28ce708c47565b", - "result": "valid" - }, - { - "tcId": 256, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e23d831d2d56a09af6a4c50d603b4c38f9823bf26491a99d9130df77c161b295", - "iv": "b42402e3fc9de41733b617938f9a537fda0f99b07b4c6faf3934dc524ee98006", - "aad": "a1eae8843fb4ca96016ab6e9a43489d95c790f01a76f80d4b509f84f4b222ceee5a230bb7090cb73a34e7ffafd887f9b82a0a148b87e87767c1437a129a00a894645271e635f59d4af811287924e4bc97ba364d4", - "msg": "0e9ccae6e19f489063ceff06015b533c", - "ct": "a480bdec2d7fdbf883d87aa86100a4e8", - "tag": "0bd4f19bb257379ba168f11a9c6ef655", - "result": "valid" - }, - { - "tcId": 257, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0121f9e686ad0a279abb0bd1ac4e9224643fcddc17d892c2a30cc5ec263efc5c", - "iv": "42ccb610a5c0a538350ba8cecc30f54587b5c03c38112571fcd5b1704977bf41", - "aad": "a367ce2be5851226e7f7abd79c277f1e3cf60973e64c1604dec3425397b0c2ba3eeddaec8e621be8b0e177bb67ba3c0a3f9c6c93fc26f4d0f40b87e8925ec0e507ba6b66869379cf3ebf2b7f42971fbd5c3b2b91f0", - "msg": "23346bd8e30ee7d2ec2e8a9e4bc3dd9a", - "ct": "61e65d220e21786cbc4f2b3ea4c71dc6", - "tag": "907d272cb55b845de71925cb8e45fb44", - "result": "valid" - }, - { - "tcId": 258, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "19d1baf4af53923c471fbf4abb3a0c5539676010e9f63bb0c2ff298539422d9b", - "iv": "7c861fe5fe6abb15b8c83b85c5e82dd330c3bf447a3d29a152b4809c3be06981", - "aad": "b7c4bc5d694a2683ae773005195a9532baca731ce9151d1d6ac85715598fc017c78bc633c75f2a2ffaa2bccdda2f807493524349f3edb0f0ed36969815c83d462a5c312737a917c4684c4d261d976b89c9f94c93010c", - "msg": "de7ec58c8c12bdb7c05aeb8593208bfd", - "ct": "b6d9d7717f37161248e42d15c9f4a1c1", - "tag": "5d44a92ba277003ae0b59120f6d25316", - "result": "valid" - }, - { - "tcId": 259, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e7528969b7b4219adec04860d90c5504bf871e7aa51468b9ae94bd8f8dc9134d", - "iv": "8a6a0253251939e2eb7c74adf60028e9671fc49bee80ad02a69fa10fde09f16f", - "aad": "93dffd829f6e0aa59edf0839f8a133e5e1820cfefdafeffa732177e6da792da8a3377674baeef150c6dea085d827321c5fe4d1f3a1c097ce9f288e8061b5c0b7f78c07dbd9e0ac1dcfe8d4aa049666308c91fca1f11e3a", - "msg": "a597b61f4b160047a833a282d1ab246c", - "ct": "d5ed29e8ff7fc2124b469d46de7cda25", - "tag": "2bca805c29b81ad5d05785cfa0f0b688", - "result": "valid" - }, - { - "tcId": 260, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a0d8e683d491155a1284bccc93b2746e894688fc892d37b267cb13ef3c0d6612", - "iv": "baa0a20ba1504e5e3c6060f34a0527c8e0e3af515c08bef29f7948f8035d88d3", - "aad": "97c6c0c91bec0629a1b8abad536b4411162ebc9baeccb16babc862d7650dbe1f28e4767ceae124b029c3ae93c7497df7061d6287bead3ba1012f676a68c9b4d79238b63fbde7232ac799a277ecd40904c0badd17b925e410", - "msg": "95c029b9914fb4ff464d618ccffd9ac7", - "ct": "e9a2610322cd7e092ce73a8cf410bcac", - "tag": "29553d5d1b7e0891cb6cc883060c98b5", - "result": "valid" - }, - { - "tcId": 261, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0c4a07f392b8a72599fb1f294e45a36a50427a6552ef778df68b097a2ce071cd", - "iv": "d2a72066829be14e4c959accc7116d9945c38e21624602d7918d08527896e09d", - "aad": "b69f811f2411bb68b9dac220fb48ca491cc176e1e9c97acc47fdc17221c14947aecb3201dc7565d79dd71a2e73451f2b7e6204003cd432ecab805f638aae2d5bd599fce1ab307c2b49d2f50915b17b3a55909fccac70adb3e5", - "msg": "b73b6ee1b34a4d5ce685babe84157fac", - "ct": "5508e3db8d71da02eaa336741f961f35", - "tag": "bf393ad5cd55b9b7244fe30e1d1c5c87", - "result": "valid" - }, - { - "tcId": 262, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7e7b339b20dc0da8444b4ec5f2bb4f58cf3772c358d36770eef35088b90275ea", - "iv": "6c72b2d29722f113606d5a31d455cd62a94d539e4705327a96c6d40cd24a1ee3", - "aad": "4bdb44a581df81851b0c169312981bf7b89a1c1e17762f63d0dab4b1fa7c6d55ddd90b7eb931402384a615b166350f774c50963a6285bf394f65a57d6c9997e90314f03cefd688e708acecc44e8e757f45a92d96b24ae7f3275c", - "msg": "3feb3a88e787d6fe99209ba506b1f7d1", - "ct": "7e9a51a186c724be750d6afb894b50db", - "tag": "55489aaea2e17cbdc9aa44a0e31653a1", - "result": "valid" - }, - { - "tcId": 263, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bcb4fac65b01ac468134c8c8781f7f01a75175abca645ba8b6a20d7269bb1b6f", - "iv": "d8a316352a60554e9313ff64005bc50cd48e6605637cc87799ca6309fdd8d838", - "aad": "2411fb3738283f37b0ba7900f8b1231453fbf93206c66510c641feeddd6de0f336d839ebe98ae81ef37395af68cdde5b3e141fa7a4c35a06c711a5f58659089314ee7dc2e0506823325d50cc00e4c70b940b3ef6203297979693c2", - "msg": "6e0a65fe4a6be1968cb9923052f2881f", - "ct": "60fc02bd31301925afa87150ecab6a35", - "tag": "067d975ffd16c38cdd2cb67170d5969f", - "result": "valid" - }, - { - "tcId": 264, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2814d3f6c157bc42d8882f948ae355670e64f68b3bce9b661c67f4c554dd8520", - "iv": "94ea9fa370ebf6582b39b97e7d5b7a1e0f5c820a89bc46a34e54688626360be5", - "aad": "f9450351d71475e46c0badcdcf0dc11005a9461b8c94203159482f08686c09f26e8b754c76b2865df5e5b99ddcf07c95c3cdaa88889dc4ab769a27c9988ccfab14cd957a3804ac0353e0548276bc1307483e17510e3023b3f393b4f9", - "msg": "cdecbd33bd0d0ae3c0c81cf949ae539d", - "ct": "68c1944bccedf09adf1addd3e033f421", - "tag": "7f490bda7e5e123722313c946b3866ac", - "result": "valid" - }, - { - "tcId": 265, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5de900b6c031d2d5139f6b15a12ad09a03ed9c290ba592cbda12b533bac9fe78", - "iv": "1a4098244630149073553abe30f5c521a34b6c13fd439d43ad22f795f0a08410", - "aad": "83788d53166614c33db35add3b3e5f151803cecb4c5d30e9ad1bcacc3a1feade1843fd958e3894f9ac3b0e91019e1a3c672664698b0c437b0da43b151b3ae2294dd5fb4885f756c6925d4e7add139b6212d75771112b1999e235a1a610", - "msg": "c2917b35f7b0f6b02748e648f0c85c16", - "ct": "657f3b19cd5f54d4356460f2a1ff5573", - "tag": "340e7b97b10ea654d0e392b72f4710bb", - "result": "valid" - }, - { - "tcId": 266, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "702c4ae35dc0426244dd81efd7a70fae17e4840d39ec6d5f34917ce77c058f2f", - "iv": "20238cdb554eaf1a8092cb88b794e06fb2e3e54c68db209f0844e092b8a5eeb6", - "aad": "777bd61fcfad1b9fd489d2b30a890f6e4e9ae1264ff6cfa9ea355cc15977b06869bbb0ac8820f16d664ba540873896ceb59a39e54c160cf25eeb92250106e5d61bb0b337599410bea5a1f0aa86cb477b4ec319701c9c8ff7a89b9ceff1a8", - "msg": "b386af2fbb2ae4cc80f5f58d2f2d72d7", - "ct": "7ffbe11ead1f7127989b985447e2c030", - "tag": "d14313e73d99f5bb5d9545ed80afb5e6", - "result": "valid" - }, - { - "tcId": 267, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "be1cdef86b661e1cc6f3c1bfdb2c0de6e70c460bb0cd3e190c6cb09bb575012c", - "iv": "d280928215ba5f5dbc4e7582bb051cf90da25b8e7abb8195a36bc1062c473eb4", - "aad": "b1cc01a51b3534e2637ebc216c9a2017496aee4ae9713975683d859b58a3693488edecede6f3f59483d9ac5a6a57f19abcbfdf0835d00efce30880868ed7080af245bd663c533e29f078eeffd8af9eb0ce1614a38cbd68843cdeb1d29c18c1", - "msg": "eff3bc8679cf11969e34f0f6bf48a25c", - "ct": "3a92fba6b4776f921c6b31d56b2e976c", - "tag": "3d5da253ffa961c09cf4c7744a2b45f4", - "result": "valid" - }, - { - "tcId": 268, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "09da9e49f32cfe2725634886b08a2f12520d7da175c068253cc685feeb13d3d8", - "iv": "e171ef5c829d79b2f8016591d8e2bfc7642135dcdcfacf4e7b2cb226fe9b86e0", - "aad": "2c3db0ab67e9e360205a4ced81388e732e62fef22d0cd47723fca838ae834d449732ed5cd7e9d8f7832c3ea2bb65b93f6e3cc6ed710d4c1889865ec2d8ab39cd463132258c2a7af5a89e9b73eabc5e8e2e4b65b7cf28db56c85884d2a3321b05", - "msg": "ac2a4b2daf0293089c41281de5986687", - "ct": "1d3323643d9a61f5672b7ef22eab9178", - "tag": "10751cf61aa35eda28fa4986532f9f6e", - "result": "valid" - }, - { - "tcId": 269, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "bcc1f09cb2182e4651495e81621767baacfbd7ea73c382fbfabeb935036a1440", - "iv": "6e13a4a4d28ba8de43ac23222404e331618513bdfa6b8f2c8c570b2e822e6c7b", - "aad": "610083b601af873cd9590af9ad0cf3664246a09f834a0ddf479f617c2faf4c62e21a8054b1d6c095001338da39a7695b9154ace60ba632e72bf01c381036c9b2dbbf99b8462f87218349bd43c731f7f455a1b601e66fa485521c222d1bd85f22f3", - "msg": "7b3e40fc19b3310c2efb97584d9dafbb", - "ct": "0c72a3d5b2f4f60cb1c1b7eaa3acd9ba", - "tag": "529365c006df67784ce325729c0a42d3", - "result": "valid" - }, - { - "tcId": 270, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "224684677590e7cdcf611cf46937d0c50a7ba5c39ad860b9f649297263596de7", - "iv": "6ca8e69c316056a16b24e8173447ca5ad7a52831c3730eabe9c235b7f42b7d40", - "aad": "14e8ddbfd2ab5a6192a50510db30373002db77a1bf3551bc2b82ff2d077f8a51dd68cecb7f30224c96e0d7d1c7c65aedeed8f710329370a5f3b8e6e2c36b7acee386f3d9b641ecad17564c69d1e19d49737e0fef19148bb334987b08e07eadf025a7", - "msg": "5161b00334cfd1d83963ca735d353244", - "ct": "fed58b0c31e14d675f8027ea8b1da253", - "tag": "9b6db1868d02970f67d93a34f7d52dd6", - "result": "valid" - }, - { - "tcId": 271, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1d6a4e1e1953cc531ba727b05473317b2b9d2e30f696e938ab06d35b6b574cd3", - "iv": "6b897992194a8881d9d1b257f62527ce0a19891ed786ec74f9123172b72de54f", - "aad": "2392595771787d54e8b625a95755fe140a316491016429bbf509ceccfc49e2320cbb553ba21dca41e07fe64eb11fa5b6703ac7b6fed386f6c5e971abb3437e024e011f13bdb2f56e7322b334626da41a9b564509cdc4033289db1a644cbbb2642cbc98", - "msg": "e15ff96a2582a082af24b4465c920fed", - "ct": "584926e9a6eb84576e5bdfb259f8667e", - "tag": "5e0ff125c83bec9ad9dc9655946ece28", - "result": "valid" - }, - { - "tcId": 272, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8318bddf513a61d389959b7fc7f515a13f0f5be9b2d1ef4bce4fadc807f2616f", - "iv": "006cc48bfbd01eec4beedf69c09405964747319e13c4b07cc701b7d769ee52cc", - "aad": "f129a4fb5eb9a1022df36d48b72b68cd7b2f961b92f64c8a175270ebcdde5a06714a336c092f49750107ed2ef2334fa813bbbbe7eb439139052635c4aa75fae347eb9e0a5d54ad50e69dfd3f6491fe3160b42d955036bcf5898d17dd27f31be37de1c710", - "msg": "f2d0c05695b92642ce809e0ef11b035c", - "ct": "2fc82d75ce999a7ea643fc03c90cfd84", - "tag": "197c28fd7620d5633f8320d400942aca", - "result": "valid" - }, - { - "tcId": 273, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a30bdcf1aff0748d98cfa0f1de64fefc3bd19cb0de65ad11a162fcf8805467e1", - "iv": "aa5c116ef319230ba3c2740d9c1b862806b82e90277f63729676548acc6b228e", - "aad": "ccea499b0c0856e842687145307efbf15b9449caf9c00bea68584502b0c278a6140f7575e6006d02cee9046a0493e90693bce6d59dc8bdea6c570c1686031ea564585fb425773a578aedac63c4f1e7c9006d31e69aeae44103cc32edec539540fe035fc236", - "msg": "ad4a30b555ec47748cbea7f52b62c739", - "ct": "428bd7115430b40cff472cdd30083655", - "tag": "1cfe9c19a203b754b641507fae6ae429", - "result": "valid" - }, - { - "tcId": 274, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4554167b76ea9c6c1291c05ca2b09528dc0e0b0c674bb23aa7ca09e9e4186bef", - "iv": "4be367dcad03966174ae37a216b37dadadd007591336a88c2dc90d1e2389da76", - "aad": "39d2b05a1cb832974589c1be485be99e19c6c36fd3753b1ff5ef635e09eab122f98dd954364e8f58810fc17e708262268c819657422440c6c9a6bad08a811d2d2e7fb5ed00ab17148e148ba24a05ac5ab80238ba374646b541b683fb8b5fd13e2a004badd5fe", - "msg": "0f09e06f872f313775d052c2ec3c9951", - "ct": "0aa3bcbb9583f80f5e3c7218463d00e3", - "tag": "b1c46232ff3e30170041bdcd58ef3919", - "result": "valid" - }, - { - "tcId": 275, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ae4b71dac35882c11fcc292efdf417f48a4d0a936427f4eb2d958f0874b9df69", - "iv": "49d36a05fa922636ea63bc185d513e67e441154a09127d4b4e09b6ed4c4cafd0", - "aad": "941c1e3c2c251aa6b7ccc49ab18eb9581cdd73841f13bf98fd95e89d34302d45632e98e99e6cb350e4f28cc38175d9589d34fbb1f9e5aec38b4503a026192a7d19661f0332a317464d543de82c9bc3af687ee279cd42c62e7c507439b971d29f93fa7b71fe820c", - "msg": "93fe650850d1aaa4a5c150eb7b4edf58", - "ct": "a823a7d3b10303abb5ab72ea7386dc32", - "tag": "a4068ece31be640f07bfa12dba478ea7", - "result": "valid" - }, - { - "tcId": 276, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "517f099de01ca53eba85e95d4fa39c1abb7f566195e5324c7c9900e0149fcfe2", - "iv": "0dda3b0f695a03f8715eb5d91de707844dfc0bfae78516893ff9c29c7db50e01", - "aad": "1ef9da962a4acf52638f67dc9fb8dfe63ce5a09497b0b09ae28fbee8f0e3655cd1b796999a447ba4ea7e8bac25c554623c91e6163397b6f4d54987bfdb58de4ca9d2be74e6083a7500b7ca5e7c6155b652255de45d11201d656e2e39ec443d505286010c8d0c3abf", - "msg": "77d82afceeb49a6391a2c7a8a2b86d23", - "ct": "3e3cff270cffee28c35b576b66876f36", - "tag": "cea89c9070fb26dc791288c2ea28c1c3", - "result": "valid" - }, - { - "tcId": 277, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3695d525d05221eac6dd166f55c16ef710d5b9e241e789625b1e527ebf804769", - "iv": "e2a86fc52d57c832a11c7d17d1bd36e22902042f03a321babf86e0be4d27d0ad", - "aad": "bc6f80cfde4ec59a84e5eff81fd22a7ccbdc239b3a9a38c31a3aeb89df07ad5807c92a513c6313b34e182301ce153b757e90d263b9b63a8cbfbd9425afa30cca529f04315f41ae0be9a1e702e8ad4779f649457d951e9d7a3cad7e97c3e023c5476e71b233913b8ae8", - "msg": "6fb7b799b33e6f521e171cfbf12b9652", - "ct": "296427b482f9b3adb724c0c83d592b66", - "tag": "bd4d5f8ea780a9cef556393e6307a0ee", - "result": "valid" - }, - { - "tcId": 278, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1ee8feb2251e3ca3a3ea1c86cd9120a4800c30b69e8d9cd093713b954ae67706", - "iv": "114b04c7e193afe733417783f6a5f912b5fc62ac3913ef49798e312701352745", - "aad": "7a6824bee9eafc7c45679e64be3c1841464b7b223a465d702218e33f93bc7faa25de2434b4b1efa58981082fe508b64b14e529a5f821ae17abede3edb41c904c30d0d2124cc56602c3f5374efe6d62a8b0365481b26d7c7029eff280e2830009e3d8322fad371b05866f", - "msg": "e7b8d06553ad3eeed4a0c99830042ee1", - "ct": "20789c83f0a4239fb2eb66002a96d6ac", - "tag": "4c45104bb1fd43523eaf6fff938dddfb", - "result": "valid" - }, - { - "tcId": 279, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7be3d39ea92ff383c015f565f0c33b8319a109c75955a41794abe0fbc422021c", - "iv": "76c7f4abfa47f0e1cf3f5dbc49a79e3156cc091374964b7c02afa9cd5c52dfcb", - "aad": "5872e50e4136edc82a480cfc40cb6dd40699a535bd293532555aabc9de4588fd24a3d6e48bb6b258ca9bf8c2e0086972aaded319e358c52f13f3a3043968220f5e200f24b485e42d20b9df3de408829ad3a3da081f139f48a5b2e6de4e35f6d925a1a3056dbc0b2af99d40", - "msg": "0e3f0e365a1d07b935cce24072317a9f", - "ct": "1174ef15463249821e1ed499fd4c8c8f", - "tag": "74f16ec2280c893c163d415d2c180118", - "result": "valid" - }, - { - "tcId": 280, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "10aab2bb1035a8a17cc2a0029fcdf3d6f42479a347e39e8a58c4b432b0457f09", - "iv": "46eab5b97f92b364ded3bdc595c74a36a3ef7d5b154ffbad84b7a9f84590de61", - "aad": "ac4b19ecb4ebcc4eeddd0051e6fafce114c0c44d5e6f49a6a374040f7c0e2fbf21f4e85b65b5deb5a59988df2bdf645848dac7c315bb9e4e47b88c431eea30d5d474349f875f2b0ff552ae34a14f62d3b035859025ed7f2b5da05a7a665b75481583bf14a53c4abbc752ff9c", - "msg": "031f8a6ec4bef5c3f75d8897b5a7c590", - "ct": "77d8c549d92a44e599d5d29835851c1c", - "tag": "01790c745242e51b63e2aaa6ce6a6840", - "result": "valid" - }, - { - "tcId": 281, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c91d41b39e9d9464a2d1c83505e0bb7f5f55452951d79627c36943e812f7c164", - "iv": "740f2333b8c08fde2281e18c4ad68311c4f76e331ea84a62ea68d8c0a0d1b510", - "aad": "71c15694ca4147b29c0ad4e6ac14c83de2ec25918ff9e541832d9348f114acb7425d3fd84edcece9f571a7892d768ea6124c4671b084f72129f046d0a6039a29746389466f124e988ff04a596bcf696b775f4d8a25cbe833de4ab38723ac08a3382d09660353d588394ec6c820", - "msg": "ac6694e45442510a1f14611f4c5202f2", - "ct": "0fd8e1a367227d8d0b6ef93f6434683c", - "tag": "59a88cfdaf8e0d896e34a409eb470456", - "result": "valid" - }, - { - "tcId": 282, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dc4740e8335e7614be9d0efe8805902e889d5d35f1f58aa5011798c791caa4b4", - "iv": "dc579d996f2d210d63bae885a547ba8e692bd44650daa2429f7819dbd2b51f9e", - "aad": "fadf106deced98ea3b2c44f0729a33a72bb0157ab850ca061324a8e3b12d1216374b736ff9c5af15ea6a04d7b92af2a74413af1912da4932d0365a1751970143e5dadeb2efb3e070078d24fbf35561d8e1d27695da59c270483d5d4185084dc8ff200a49cd6f7983014246bc5370", - "msg": "363930a314b1a61a694e73ffe00b9754", - "ct": "1a4d77033071d1ddf0fec768eb2e33bd", - "tag": "be5828ff456bf322f081410b317da2c5", - "result": "valid" - }, - { - "tcId": 283, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5b22fba457ca3fe89fc3dacd87c478baee37fd52911b6f197327ac221cad099d", - "iv": "1e45fd3a69e2bb1400e9a8c02b3ecd6de9f688a22ae08951857688c3f0e21f93", - "aad": "b86da3dfa4a5e812b5878d33a6077de1a865b4c6028cc7e48f971238799878b9ab2dc70b6343d058edb408e9837c76fa6a6b2b844538e1e2c89e9dee689de02da4f56adf7aff760a6d91a1087674f7a8bf3e17d7c5af8e9f8c861c7e949b4d75a44f0dd8867c8bc8e3afe03276e17e", - "msg": "69c964e634c787277e733114e96fd542", - "ct": "74e927258b1264d61b85b95ebce82779", - "tag": "aaf0f277867f2af08effbbf68a311416", - "result": "valid" - }, - { - "tcId": 284, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "20c4de70164c140b9b613dc215d95d68ec625bcd71969720f06ccfcfb451c6ff", - "iv": "ce7125afe1e140ec4d90d3ecb63c7076c7bf6c6e5be91257986219a650124bf9", - "aad": "1950c45d71e34be26be82ad88b5916e104aa32a0a111b596e8ca324059f18d9c9e27b71bb2eea957061581479ea9c43e979efc11f25b5f26eb48c0e6690cd1b127ed384d88f2ef16f98f3a1db980b8c286af71ace2f2894af23145bf28532c21f4e6bfd8d98c79096750bdc9812940de", - "msg": "da911512a525e755ccd6050bc102c5c5", - "ct": "fab1b62f0d6c664da38dbf705ac08fb3", - "tag": "2d916e0b89babacad9ed40d77795f409", - "result": "valid" - }, - { - "tcId": 285, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b5df329a2ef902f3770c3c8b8460a23f9aab9b8dbd7beb27b0b4c8b2dbc45ed0", - "iv": "d4b6a88c3185a3de4cdb5840d62eeefbee1377e3d7e774a6ee03f54886c6966f", - "aad": "bee1981b32ec594db0bdab6f79e98c9b528b831ba463aafe8821ac8109224fe802e79a2dd8e1d66ee714bf8422281cfddf65e15a707ec6865d7b09746e3b988a57ed64e189bdb5189e1da26695f634e2dab7f9840eb32c903b9aa441248ad404780eb2e1d1f180da615fa2f8da0aadd994", - "msg": "dbb00a69263516f0d3f32eeb6e59ab2e", - "ct": "60edef7c0797c33a35671119378dbbff", - "tag": "3310b467e6698f777de7014af36a3070", - "result": "valid" - }, - { - "tcId": 286, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "19fb391e79582f743c574c0be128639430af3e1cfef514b1331b4b6abf4e8e13", - "iv": "893728c103c2b8e1c55fa08120989b0aa1087c191ca0401a761cb7c94fb59b1d", - "aad": "4e6b5e14910af6acd8328fabd078a49eb7df55862320247623c5e491948e4e43b8bb8eb240e899ea0ef65ae9d090700b7eed998464c518fc8fdfa03986e07854c18376944db5408b452ac729407cff076c6651db416940526e513cde5b3b98d838f4e0ac9b9d167201780f94ce01888ff9e6", - "msg": "645c8eb1769fa5bd3616621269e4d33b", - "ct": "da38885e0a206973dab74eaa974bdf43", - "tag": "b66b258fbb8c4f47a32f2c6212558f2a", - "result": "valid" - }, - { - "tcId": 287, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ea579bd0a738a6c4c7bc72bbc802906236806e4c7b21c2da13b6596c3d16829c", - "iv": "909e81f6327719798741644c386e3e1ef36565365a0d38e629354ba1457eefea", - "aad": "08253f8ebc3dd69c545f29c6c4997c790489d493454ee8883135354873d1deefccdb32e756e2733a757e8739e591a0565428b022fb7dff208b90726d02a7e1ca13f144fd13a449432aeb431a2bcf6b972d8f48a6935e99874fce9a4a858333d3c69e8c29512cd4525f2072ba4c74f2fd172d8b", - "msg": "bb206ad96627f8702b98be0716772325", - "ct": "c4f68410093a970c4223fef443968720", - "tag": "e94249797a905bf1c968039376a9f805", - "result": "valid" - }, - { - "tcId": 288, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "dc7fab07d50b29eb8e7447b9b52d0e1bd9310b68ee6e6aa8501e4c0033768820", - "iv": "25cfe35eb342eba25972d74a728a392ac55502c214f549879500113bd122beeb", - "aad": "116169cf9905370ca172cdd972b31b3b11929f54809b258b3c69511c873a2f3dd124744b8b42138baf95eddd9e824e68baa1fd1970457556ed7fa7b4cfc2b910440a4183aeda4f78479a2c1b6c62e606360ca59d0691b9ee0a3617d70b96c49990c595583065015ad474c7e43aec78559f24c147", - "msg": "c1662895afc670ad946e535303b48a5c", - "ct": "f20aedb624e3257fb3b2def2a6fd1ae3", - "tag": "5f771a28823fc3258b6829a4307ed97b", - "result": "valid" - }, - { - "tcId": 289, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cc3e140976b7d952775729301c695cff686320526ce2f54e68220dfd484ea372", - "iv": "b503ba4b88305bb7ee5f27040dac7046927dd2628c652b18aa71e64d1d5746e9", - "aad": "63bc58401df8ffe13c17e233db6125c29e9e00ef9458cb5824fd8fcff354fcefd30dcca369df6ff881a417883207399fa6c47d8d458f7b9fa2684fe3386494087d6bcdaf7003d67f18e97e18546269945ec0c86b5e90224d61d3f640bf9db4232af67a7dc5ab432dc986108a8495ec44733570358f", - "msg": "77173e0ece6e8dfad273ff5ff20d3b89", - "ct": "137232542ea8eb5a1a6f9d2d758831cb", - "tag": "d3e7041c05d2df8699441b60c0e89180", - "result": "valid" - }, - { - "tcId": 290, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b1dc943c954574dc6b6d8f527a7f21d0ce6e9e7e7d70ca6a0166175bd053f7ae", - "iv": "4890f24dc7148ccff67676125ec50c59a2bde78653642f917121bd78229c5029", - "aad": "f6b76e5e9e141d021a6899d8cc9114513d9ae99c15b2b1241f717151a7ab617b8f86235b9bac1779e357896f25c7ec3baa0954628d4048810c049b1f13843622cbafe0a0b1d1263939586c6b52284fe6f61919c15f4061582909a93d3d3cefd4c2dae192ffc9f238c2b66e8c4c7ea86df997c3f6c104", - "msg": "2205fe6c5b0b1c7a30afba1c89560a6c", - "ct": "989b57a7069e972836b136f56035888f", - "tag": "e60004b3b4407cacf486a9325ed0cbf5", - "result": "valid" - }, - { - "tcId": 291, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ce820f3fc95218c8e818f810774a6b45cc08193418a9c0a0b005a19fa1c097d0", - "iv": "967738234a1d662f1ed0b980a23386b9630cf710ab24a70e593da54ae74abe5e", - "aad": "1f5b46c336ce545e01c061aa0f7f681e8204fc41b83632a85aa9c75318169d4493583fb801234363f72ab3a96b91244fd41f54927afdd82982dd9d9f99f648a16336a7dffad3120ddde9f049d1b9aa413afd9255035a0d5e3a854d8255265d04050af6bca14834737b8503e68bd14b08eaebcd15ae4dd0", - "msg": "6959f40931dab6f299762ed09d2c90d2", - "ct": "1cdf383064d3b0b183134ba72a7f5f20", - "tag": "c9027b1c07a03ff56412ea7b031e9f9e", - "result": "valid" - }, - { - "tcId": 292, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a41b1589285d3b0b331a6a3621cb16021c79fbfcc0ded246aefdf5c3f5c8b9b1", - "iv": "63dcb364b00f192b0ed761ea8278953b2f3d9196fb5145376a5a6bdff571bc9d", - "aad": "89e56d3d18adc07e3b2739bc2fe894effb228bd48dd007bd348ef2f8ad25730068d18a13cdebdb17ca84ae77f718442f4bd5e4142b77d116e2f355b0c01da538d9b6df6e9765edfdc84b12b131dd661b08156911b1c51da525e7d038c22b7bd7ff30b9a47505dd491a15cde5d72a62be6e0d6752bad742fe", - "msg": "8536ead9a2729bc62957aebd8749b13f", - "ct": "d87c75f96a3b75fce40efaedc3ed097d", - "tag": "3fdb82a302138dc2de0cb7495c601f22", - "result": "valid" - }, - { - "tcId": 293, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5062c27c15c034495b4b8640a268a7fe1a684da30b8a0af2c02684dc68610c2b", - "iv": "300c1f5716220c754c33fa6878393591e978e9d5a6333e70bba97dfa38951bb3", - "aad": "41736446a151c88a379a132f628d41e66f5f9e9f9808428da41bb861a45c75a333651718e8b4a885c5cd5a1392f238abb526d5ea53c8d63fa04be111386e8d86ee7985d7c38add1f3817dcd7f244b81573b470c1b231bccbd71a0df2f1f9e604b247bc92e5f07a0ddb8f37d41ab4f85a5d597908ad354755d0", - "msg": "bd8810a520e03f50989f989f83f11e0a", - "ct": "e90a0ef2612b92610dfaab7342f306bc", - "tag": "d6bea517a328900d2de43f8223312690", - "result": "valid" - }, - { - "tcId": 294, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "061808dedffbfedf92eb0911bb6b140b0cd7aaac64efa627237c56b54ab88d47", - "iv": "d60d2774e3e4af5daa974efb856cbaa448fc78cabceebc1639bd266631a56cb9", - "aad": "6b3f6f192ede3cfc82c9db79e30b1176c5cfbd05af153202696b95c205068bd002fd116c84d84b43f752da881b9af48ae6372c46192f9ec172fa72e78f9993f0471797378f10cc2b26c515078e3515c62aa4aacec59b0ded1041f117ec0586c473aef6769591602878bbb71578aec608269ac5b8c9959baa91c1", - "msg": "a32548c657c0399f559a2ca8bd9dee20", - "ct": "117005b74d237fc4ef7f7d4785f92c48", - "tag": "0c8e298d96ef76ced15ada64a91dba5b", - "result": "valid" - }, - { - "tcId": 295, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6a11eae9ddbae5f34b8d6b0be1ee7987ec72e37036c140cc7971c79dc5c0b6c6", - "iv": "1cec41107ecf40bd0810c483866dd52536bb21bba37cfcf6326f86d9685097b1", - "aad": "16898211d0caa71c378a7f773ec1da8cf5c58afe1ee8f986647eb9874905c526ae299f22c9b9a2ff68f720b4be30b93fa862ca673f2c5b13d58d7940d3c753e2945df5d01ed7ed9fc8018b079a35319864bc346f587a51d5c8b9b487fa83be11f2771e890ed6c6765ee0f15bc7a09c8812e67c768ccb99db364e5d", - "msg": "d012dd6ca23878c4ad7c39431372b77a", - "ct": "173f6cc2fe54bb334aa46834e52dd259", - "tag": "55eb84cad0fb895766d20444895109a2", - "result": "valid" - }, - { - "tcId": 296, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6d3568cda434f07c66f1b00081ddf49921f60804b68203f00f7f7159f577ee66", - "iv": "6792fadbb17795513874d9e895f3bc299de8b38c1e78af50a9c4351a3845c3cc", - "aad": "65369cb75e0c8259dfa78866eb856d8d14add63bedc796d15a1e061a68d9fd0f84dd102c4b610972cdc70ff98851d66d6a5b499029e32b4d74498d429378d93a31285ace5a18903e4ceddb8cd900e0092bb08e455cabc9bae02c228072c0ea15be846301fd77dfbf227fb2fc20a917483d62a712d7e95dc32eb48d07", - "msg": "4f0aaa0d41ff7a0a86c147db7cb400b0", - "ct": "b106029990fbd4d567462f949b66dd05", - "tag": "e43109259bd5fc171afce9e7cac85e28", - "result": "valid" - }, - { - "tcId": 297, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f29aa60d33833d2cf114a09d8aafc744f97930d8f731942156315adbcc95473b", - "iv": "1a6f5f3eaaf11d9dc612c9157f58e6f422bf4e8e7ec50fcd417973252f68eab7", - "aad": "4c9cfd19db2fd6d76026518cd1a3946a309ae58736e817dbe20772fb6a6b4c1794afab7926ae9e4b5d62784467f0de63b8a16dbf9a1a97b3c22ee0b24bcef64ffe197db9f6bedf71cc6155e4c76060d607abbd1cf92c81373135e6ef4c193c8a4b2505eaf9f29c20fcb02bc8692fcdac614935b1bb4d07c6c8939f6c27", - "msg": "418e9d324cb6632c0d56d8e206d19320", - "ct": "0ea0beca726a9f4e34bb448af1b3dddb", - "tag": "b25d3759d8068537b3dcdfe7e5965b15", - "result": "valid" - }, - { - "tcId": 298, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "6a8b563b0efeb9eb67193d09cc929a5884257acbbf424fb40d8791e827127da2", - "iv": "8e8601eaf45a3ef4ef8b919cd809669dafa1419ea2a905b941d380fbe3f141c2", - "aad": "928ee1caf5baa21cf84a3062d562d32eb2c60dcc2080075d79925b9ac487cfcb4a9efba720114934913a665a9e74cd265f01a712d823bbe057308f12f9a11e59e36ef7cc774179edc9756150ed303feaac94c189b4fe7ad07894f6bd755b329e45bb4f95a2f723156a46f3e4596d7c24c38c8f0e6187e4062351bfb1ae42", - "msg": "f06fcbd1ddd5fa91ce6445cdafdd5f6f", - "ct": "0a7029a76da807079e2c56912ea126b9", - "tag": "018a4cd7b554e781601c0ee7b1f4d8dd", - "result": "valid" - }, - { - "tcId": 299, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "50646cfad4d6a5ddc9e530dfeeadbb50b656796327d7db2abc814bc862067288", - "iv": "bd0a726c7b4234126c5561baa093138fdfb44d5a962dac9c20984b457e2542fc", - "aad": "dbe34f0b277ff272c7d92d9686edbec58094bcadd9cbe86d294956c6bc9b1c1f8f033eaf7ed414947305317b4994fc6a2e57c961a5abd41da710b6aa3d71eb1f546417a9cf7e7aa206196ae3454605f20b5f74a153bff9554b2c8ba26e8c9a446f6fb3bcce2c4192d1eb318f677ae0f61380e43d48c5a039edca652d599ba1", - "msg": "2182d1fc1ce702a08b0b3e7b53ad2347", - "ct": "adf1eb6f767711a4d1ca2a1e204822e7", - "tag": "90289d0bf5a1a80a66e99eb360de0322", - "result": "valid" - }, - { - "tcId": 300, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a5296e9d9c0dc466060161739a19b4eb48e10c04f36193597f1da1574c30da44", - "iv": "566ba1b9b4b680532dc975c9a6941dca01e0bcc3e0a8ebdcbd421be22ab69c34", - "aad": "c1c805c56b60d4f22b124bb0fe850462fd2a3b5e135ed465438e3c08a73ede593425174c6fa58d7a1157a56db17521786791031946757f7b033646026b34a2ef784225e520d8a6f55f5cfb4397788cf3106fba45c95a0e91b0185aef98bd26855446552bbe1e454c4bdc8d5781c4498a206dc62ec7fd0c5ea7e0ed274fe90b01", - "msg": "346f3d0fd6645db5614a34c1f8001458", - "ct": "5ae31bfe54fdf8ba7d401e5861016565", - "tag": "883bf845642361a57423a9700f3f6756", - "result": "valid" - }, - { - "tcId": 301, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "af31d6363a91a1527d7fc462e2b3d9a284b143fd2129523c4ee508a97bcd5c61", - "iv": "6ed67cedf9a615f19be7337d2cc3dbddbc0363718b8d788a6858f04066430818", - "aad": "5b6237ad805ed434e8e8c1a16bc15710483d1ab482c060b31bed8980f1f7b05de8a2193d584548283a3d9e791a8f3e0b15f3916640369b25d6fe8607cc430abb8291d3e06870392cd5a6e984fd2385a8429cc3c78d1bb0c4fdccb0d6be6b48d3cfdef83368c566f43f3b2633f2cfd3b6157f3e956f729003f6aa0dcb6a32b407b1", - "msg": "1ab1718ecbb79fbb3a48be0879888ad9", - "ct": "6108e1cf84056031ea8f37aa8c3bc360", - "tag": "d52d5b5468d003f39e8d8a2c69149947", - "result": "valid" - }, - { - "tcId": 302, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d5e4202e4ea907ffa20bcdaa159c992407f10df902a9e908eb7872f90dd8be81", - "iv": "4cd667aa4ea5084ecb66e692c2d84b481e16caff2cc4ed0b01eebe32bd82f4fa", - "aad": "e619cbd1b40c54cd35a5dc589d845a25703aec5eb3d0905a737c16adab5ae01add4d128508bffccac6bc7a8f0cc8ff99f9de2658aaf867199f11331904019e361d5e4c596d087fcb6989700299dfb9cac369a68a0636a1095fcb355a5ee0fad6e24d6c076d22897daac205e340fca67b821c0f96a7b6923a6fc3e6ee57e33b96d9cb", - "msg": "539724c10aff2c879c357855c3443d31", - "ct": "2b915f0c84b2fdf2dbde302bb43f25cc", - "tag": "62a8dd78221fac6c0b418d8b689dba91", - "result": "valid" - }, - { - "tcId": 303, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ad91ff2de2405afa0456ffb044721949b26d6978f0a4a1195807df4ef7a88dd7", - "iv": "c9aaa93b649515e365a557075ae4076f7e17dcd6f3d6335b67ac6d15e893d895", - "aad": "a187ff8ea11a017229c05ee6b9e073362e154dee1f2b623b5ed0d1911b68190b66e3207cbbc397ff551df1376fd992647f374f51db2c6fa714262fdfae6e709d27361a15cd85e5cde4f6b1344072414560495302e4fc7961cb693648b1c2bbd15b07d96b091dbda71845902e8616b5d690b29984181095e5453a4f99f7eda20e4d8746", - "msg": "ced08a217dec184e3476279096ccbb9a", - "ct": "c5a8337e27d5e3c4a634ee7ea96e8f9e", - "tag": "458b3e6d06bb17e923791a18eee8bf6c", - "result": "valid" - }, - { - "tcId": 304, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2b4169788b8df61981dcfb6309bcaf502c2b44f7d156cd1de9f061506f0aef97", - "iv": "ffc296149710b09978da3953b202287f5afd7e15b804b2ca53ceccb9cc192f43", - "aad": "3dc389ad62239a3241df5b06e9c2f4949cb272ece9deae134bde9ebf310b1bc86c317348ed709174c124a23456cb799325e6611ebbc022359d786ae634e9edf980aab6f3d0fec744c6a72e99d996691d9b9f9d5f6a94a3f6dfcf2ef4bd4eee0ac2dca15d52aaadbf3322522649bc950df09a000d434fa57b22d4eb3a07393dde1e9c690d", - "msg": "fbb3a9ca45ce7fd78ba14e0f3517f352", - "ct": "7b7a7459254a47076d8973a19a1f0d7d", - "tag": "45119c749614fa40b65008fab29d590f", - "result": "valid" - }, - { - "tcId": 305, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "8c621d059a63d4349a02d6b26b31007274b31e8ec00359f89e283771686346b4", - "iv": "5b379dd96a88b1a437612b008c0193bea32c9101b19ed0e0792cd5f6bcb9f31b", - "aad": "349da900f4202b62621e273c7923c5d6ee502f40be872adfccc3bb2c797f09683c0e44008301519ee72d6dc185a565a92dc43610488e8a8bbf49efe60d8031fbaf11ff3bb1512ef72b4b48928bb7bd9bd1815a7486c15af28a9a0edfc674a9a8030f192d4e471c2b2800cd8b599d44221762c0139e8d23d978478807d0416c30865b8c0dcf", - "msg": "54cb30f593d3791e09739ec277a42d3a", - "ct": "9d632d23797c06b1454ecde44e3415e6", - "tag": "412c80fd68d39aca14ec9a0f72abf49e", - "result": "valid" - }, - { - "tcId": 306, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a733dafedc75ea4c2ca5db7dded99fd6613d422948cc1034ee7c1ecd73fa1923", - "iv": "5137c9586f54b932aef3cf98311fa05fdf2bba049b4dddf3c01d12b0b4c30940", - "aad": "c084439bae1b45aa6fb48611c0a525d47daa1082575ca25d631c5ad4291db3861cbab311e9c62895ada42940ac0464d3bac901f81a9708dcc5a1aaed43307fc28c28f3286053d15e2d285901260f68cd103b2a3970c0c352152e69082366e8e8c7e3e0e1f7e21aa1bdf39f0a0a61536908304eb79768e284faac5ce97002f8130bc771f6d745", - "msg": "8f79d32bca82b42212892f4ecdf4eaf9", - "ct": "c2f1b216b37f4d794f788e0628e240f9", - "tag": "bfe8a757375590f53f96057d64dc0f9d", - "result": "valid" - }, - { - "tcId": 307, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a172127e85303908f55b62d11bc310446cb66f1e8bf9d30c721d30e470bff041", - "iv": "243ac72ba1843bd8a180945303d48629b6c30464aea2050011556336b0c4a18d", - "aad": "a9a857c5e3842ca066cef72aeab13c845d7427700067b9f0c918c9f7926439d9ecb07c30422024bef342930ccba82dda7b376d1861688dfd2ea4c1545c3c0c499af4286844ce6521cc60f6f16a5b9fcf03f793be262b463605e18d0271c6a02ad1387c8c0458b836a617763d5082b509d8f208f08b20974328b72b734df18009f2bc0ecf79f8db", - "msg": "e1c813702e8765fe4aa1b16174f42310", - "ct": "190bb2ad202a06bafb9e14089084b99d", - "tag": "ec30e7b7b228b601dd0998ca5326c9be", - "result": "valid" - }, - { - "tcId": 308, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1f7284996b078bb03b9e087c41832def69d3b66240c1ae2b808ea7760c3f6187", - "iv": "54cd502da52a6786e44d7ccff64e49ea069216e95b67c88995e27065a67a791c", - "aad": "97a475d3c97095f03b61a852154ea3d767d10fe919944e5d9da688c87b6ae6072b132dcf3edf09610eb3bba613627b8f4d104d8e8f0e35b07cf15b96c91e8aba971876eb42d8e05492e96a298b6820ee0d3a5f2fc65ee2c09e90bec7fe9f2636115e1813ee54193f81af6a61325ce4188ef848eaf942f4b1c0a12c5c1aabeb51040a448295350a60", - "msg": "94f961b56b77b30e92bff8033ad9703b", - "ct": "28cba5f9905ee873b52578a1c9c153db", - "tag": "8f18a8e217b83a93fff846f221780d4c", - "result": "valid" - }, - { - "tcId": 309, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "eb2f957a2a05f0d5a9f31f4269bbedca343ecd87acd015355b21b995ab46236a", - "iv": "7a09490b281d4aedd78606ca333a65937e35b7e6b9906160b0df9d2b664367e6", - "aad": "2e295ebd9cf4c5240045b322c3e3f75f6fe3564b0995df1fe428d1b3e2b051c03c09bec41582ad218f512570a9461424feb792d5d0d1291879aaf316aea100ad2c068da8670605e70854f90874c4f52304dc429e0b29cd6209f94892446b768b77c4cbb45de0e2599a6743ebcc72eab9e39a28744b49f88e6ec1040f5b95a7465cf23f0e977b0d89a2", - "msg": "b9be987e8a81dd3220997a2aef6dc0bd", - "ct": "f805c24efffd6db8ed57b1f5fdb7152e", - "tag": "b886e650675b1f17cb4410659abae76b", - "result": "valid" - }, - { - "tcId": 310, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e3f7bfa5f58a547a1ef571f29654940fae6f9d3f2689207fb12091c59ae482c3", - "iv": "ecfc064282d56577431ff609c6771e02d01eb3f7e401b4bdb864b188e2f77781", - "aad": "c8af979efd5cd0aa1649c9eeaf9abb1fbd11c8c1c9f48739362239b4de41bcba6ee24caf002185fe41c85ab4a3288333b40870473cb04a9cc8ec3bd4f009d1e49c92ee4298aaa29c02d9472ee9aaf85319abdebeda64d41a1d61d5d4c1fa09985bce070b0ba809595d1c2bb3b3887198482433ba9b9b52fda9a01e4d1c98f809ec17e1d59cef0fc80144", - "msg": "967bafcecbd0a6cd86db9f82f7fb46a3", - "ct": "91c8fee8f55ef768e008aec87daf64b9", - "tag": "4b56fe57b1c18880063392584c18610a", - "result": "valid" - }, - { - "tcId": 311, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5225f1ecc03b9bbabd7909f789212e361dfdd66d0c4e87068c5894c5c8bd2ef2", - "iv": "c00a11be74816ab858846d56cd6bbd10b9eba0a3942d6bfde1a727b94a8d30e5", - "aad": "44557a9cbc0e840e4b7430e359013361695828e8c594bd8778d431f84d9e78ddf98e489d3f1bb35fe2079594f4c483ec2beca4758548ee4b176373fb8efd158b32a590c652f14dc407fe7ab2600dfd0dd921ab4680d368024d5e0deaa8d627e372acccdb0e9fcd33cfd86073ccdcaa28726e6bbfa139d52e6a71487b08e01c03cafc7f31456e9dcecb9d52", - "msg": "081d5b536d0757d0c6db342822bf5c0a", - "ct": "7aa3cf1099d35e82c86c2c0e18fefd41", - "tag": "8ac48d6159e3ea51f7138b45ace9726b", - "result": "valid" - }, - { - "tcId": 312, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3fe08e04606583e57f2121d18d0f53d48186bf88b60fb77368f216324bb9b21d", - "iv": "b8b130e40567b5db6c2ebce46bbb2f63ed5e50d9182448eb8fb2b6acda95f369", - "aad": "a188dad7139e205e421c3db50e49ccc2d44ec6557ae435ff4d39a8a39000668522f4ccad8302dffab2049c41cffa0b5b59d334a66b2e6e5edfb8d8f2a8b9e9c8d86ff4999ca496ed5ecd5de38dd059f9f236a1abd5e51346210a05ef2bd58f9635ce6271670b7016f19be1fb0ae74cb62c8262e873da366947795f9a4d90a613190862c027d029154ca7c7f4", - "msg": "220cb052502fe87e4cb2bc9f9475f773", - "ct": "fe047d02550e9d3767ebab70c83a1930", - "tag": "038dee365c1db0a4803f4c055e6ee538", - "result": "valid" - }, - { - "tcId": 313, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1a2a75f15fee96a28e7d63202e11e801d60b8262bd18f47f29e1de5ceec8c23c", - "iv": "d85ec4ee308150e2beac4e49b8ef39e1cdce6a689b80b676b8f909c4fce38d73", - "aad": "44e64ddee1f534e46913765cc32bc7f78e3ed65c6fa642511a97d714c4ae04afa7a269acaa399c0869eb069eedbd7d6507c35108ad3cea549a88fd4a00c3a616e0327c710a0747ae80583bbcfe3e7d5bc8f2c728911dc25d844e119700ba7cb004e61a8abf9c9b7d9d2308b27cbb428f9a0585468179e07161b35014f71f24e56c1ac8dc5f3457520f5de17c73", - "msg": "051f61032938ce78796453ea350cd585", - "ct": "c8506b99f2829ea60c851bac4b852ea6", - "tag": "a9e48cd2f755ad42abeb6ec9b3f8f24b", - "result": "valid" - }, - { - "tcId": 314, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "fa888ad8669764978f5beda9f3af7180cbb319b94a96bd867f07f1f63b4bac22", - "iv": "0e4100d2fe798524afd967ef657c5e5f8a7003850a570c287ebe4295595b1b6c", - "aad": "71406f35b97111c7447862b06c1e985426efe2dc427e6002961bd127eafde64a542dc235ae2c81270af29c9fc21d1678b7306e4c590a612fff748bd411710f5597fc614a8625b16fd30b6fd6fe56414c82fd7e140ae5c253dbf4d3d6cfedbdf38f56737c2debf9a0bde5d81e55900e30414d70ffb3c91d770be76fa5225502279aed75cffe9840cc3cabe875da9c", - "msg": "dea9b4d72e022d9bcdff3c05941f4be1", - "ct": "c942a091a2a8531c4e086bc1365434fe", - "tag": "c6e03166f680d4d35f86893191f5523b", - "result": "valid" - }, - { - "tcId": 315, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "b67658b7df879a57587baae44b720ea36e20ef7b7addb9373e16a5d6411a61e2", - "iv": "385840e625c52d1be22ddbf0c8cea1a1c67e63d0e6f868e23d173c2a17814691", - "aad": "b06d9980eac2265eca73591e1296bea3f11cd1faf22217d4685ae0fd94eac7d2260f1b8eb88025f180de13377e78de0a68cd5b21a463156fac447e70d23346bff1022acb36ab031358bc0d4bfdc774b3d4c50bbf02a4aaf4420fd336b97698e082e9cee01b6bfd476fc02a436c91433c41eb50f00a36145f17127f7a2aa3f83e912f7ed15554c42c8b229c61604420", - "msg": "19ac352a5aa7ec6460610d5d2fc3f9be", - "ct": "9ca033e70f90e2a2f2e257c907b7af1f", - "tag": "1fd5a35b5fb951dd749c84774579d551", - "result": "valid" - }, - { - "tcId": 316, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "425d4c5f2f4e76a9a0b7b2bdf47392f88de4ce01747b6af7524f2831041c3d05", - "iv": "eab0a9f90134217879b9f827a5b586bf1479d25ea8475450bb747ea742dd10fa", - "aad": "6a4d41a6ca5295b1409103ab4b5fd2d947b75d75d095c85bb5ae39aadedd1e77ef1985252417e6f7030b157cb9ab18ca1a665a55e83458b56b07ff04b181b2fde815973a5a490afcc1aa961ed2746ff657893d096ea55bc98a658773edb7b3b934f5751fe5853df15d211e1181b6a445fa746410bb04c86792b62b7fceea2435042f78cf9176cf4cc4af97479e94ffcc", - "msg": "efdf6ef074853ed180bde5879248836f", - "ct": "2cd744b2ebd8629db6b248a1e246ee0c", - "tag": "662f346b041ea57b6d5b70bf120d1a4e", - "result": "valid" - }, - { - "tcId": 317, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ef3ba36ab299d8b96944380b7f282d3fff929ac4b5683480a0facf298b645c0e", - "iv": "01c6f0774b732e9149674a1fdf00f2e733639647abfdbd617ea68d250fa75329", - "aad": "ce88ab854c0d708e7bc0dd57889f70571adc4f9a73e9bb4704f456943c124709965b0fdb3e01a3cc69966051510b63b7020dc8b40be4ac02409c0b2f8de9982764a3d74bee3d4a9b2ecd760801f1032c687f711a0b62e473dc7fecbb39b13e77676eb61c5c6d8665cac7db057d7a071665429a6a7a05dfe8426467e54df367fd9b76511fb358c0f6920518b83e49b47f4f", - "msg": "976972ba5a65f18a7b6d428a2cc54744", - "ct": "1c65adeab03d3777fd6b8a88ca6095e2", - "tag": "af1361977b86d087f75e6eedb33c9f1c", - "result": "valid" - }, - { - "tcId": 318, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0e408ba35eaf8322ff9d4e2f3c57fbd86f65c6538b5b15c78b218e26b9e3cd3e", - "iv": "b6398d1a37b9f62f8aab55b0d1b1e628e568d788b7987590c145f08fe1496df2", - "aad": "232b000c7ef8517b9c58dd80b16af380d0f1f5aee18dd59abb4bb2bd361efed7511c05657e06c8010138c90ea01a7c9588a333078d8f64a3aedfa262a69c5ecf9bc1da0b46a18bd8362d6202ec8b7d7c6b1602104ab346ab3911e70ab7fd45cb8471193aa7506f1478c3e60518cf4aed11d336164f08e49ee2b49f7c51f8d3e658959880f1501244ff40fac6bbe567841f11", - "msg": "db0e2741ecea9b5ee4f3bc9a774642a4", - "ct": "aee04b5cd5c0c0e357858d2d81907495", - "tag": "2d4907e78d0120d622b9b8fcf3a985af", - "result": "valid" - }, - { - "tcId": 319, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4d5bc2abf2d9da8280cfc242306c373ec3350d331b9d20d6c34d9e83961c3599", - "iv": "0c55f67b24be42758c1bc4055b3195c2d9371f947655f6f1350390843e28ff81", - "aad": "0ecad52b3457a81199836362b020a3c0e4cd491fd42b8f7b7fc444da7ba774599b719526a36fd82d25b7efab6020fc7593caebd24ae9fd75d1ae4503be5e79dc7ae6dcc19ee4977abfffaa9bbeffc968b718d3653c0301f27fc151f3c099d761f1313dfc75d8340b7438e02d122ff0d8b86895ca55158db06a1f7298ec3300c92468231c4e2aec3e01c06b41fae1ac7f97602f", - "msg": "5dc035f186ec9bf929df23bd0b8b3f3e", - "ct": "d3366fa41d3aef6325438d6c1c1b514c", - "tag": "73a3dc45580c6937ce83f7d1c84021c0", - "result": "valid" - }, - { - "tcId": 320, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "00f5f9e6d2717a250c8402465f15a1cc92bf9a5dc70a4a9bdb41f124f9ef492c", - "iv": "67ceb6b2fd6cd57b2a8262ee66259a58df68a7c975cd9771ac74ee47626ac169", - "aad": "a6e11d49731b1e14381fa8717157c445cbe496a70b9a77ba4e6796f94b207758b52c26c305a8f7949a7db820e586247bf46031b46d301d018e54344d6c5fc2ea07af389d476620d62440c68fe30668386958a853b0f9a85c74483d1ccf77c518e05a0946f82deb7e069a2ee2cd00a686405abbc3f06f86cf97cc642c1452281c57f409853b40eb8878bdfcdb5f3eb2b17ad9ea53", - "msg": "4b288a8888d11201812e57bd5becdc07", - "ct": "b949d92941704d6b7345550a1ecfc727", - "tag": "8f7bdc252349f2034921ad4ee4044c43", - "result": "valid" - }, - { - "tcId": 321, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "a5f1b3ea03767f461bc3ebf32da8dc289dcd1d75c61014203003945eb6091e6e", - "iv": "23c584fdad481a3a3feb0abfd35eae0b5eb886825da76b7ffd1e101a9117ec2f", - "aad": "a75f0c0d0037ea7862f35621778044ec152e90d74d35e176bf49b7b1ddcf03747ee1d83c8f2f325848a02067a76e7d73d2329265ed66d6891c924a1de260b0e69636a0e43c3db750fa2754893148f25f65ef71a97fa9498f0a9b0d97beebaeb763b66e0fbf248ca8ff77c96f3583c4d5dce8f2d68f33574e5bdc7c11f83c7f5394af26e62d5b9ee23bab48a619201b6e963c3518ae", - "msg": "57468ed75ba57ac0653bb11727affd41", - "ct": "2f2426ba4c124de1ffcc546dadcce626", - "tag": "8c39032d57ad9db8f82cc14ee856a4af", - "result": "valid" - }, - { - "tcId": 322, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "823dc9b9246378baaa441efa00030a3f2fa981a86821073fe715a6f26344eca0", - "iv": "7b451d088a88608db3c32985aaab7ba7b6564fad36938d5741fdba4b8335d040", - "aad": "3bc27a391f779fa774e021ccc2425d05b7c4afa51482b689d920f750fdd5d5a866fff9d8f2d26533658409faa3f6a8a18f24cf0f6f8a20c407a2acb32fa73af5edcd0b395ffc7ce7084847e5e655160354f9b7dceca09559e166cf26944a227b92433a8d53a6e929bdb6fd0e01bb52864b9d015f470abeb996d7d465d68029235f58d1c7d7d419f34e8a1470d25c5d009beeb5ef15d0", - "msg": "376293414d079d093e2f0c31d4839400", - "ct": "1236f92d66c83724611a78bbb3da22f3", - "tag": "0976c7f88a7eb01726329ba9afb733b6", - "result": "valid" - }, - { - "tcId": 323, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "3993b624ef6b7604091eb7757e81ca54e47887c2824e57e1d37a3cc67224ac3d", - "iv": "b47cdfc36d4b0b4214ff347efde0226d9060a2eae42c7db2cae82143d2312988", - "aad": "8aff053594ea9085f7355b27c9b8ea8ff2f96934e19fed1ac410b3b2e4f68d0ac123aea1e458f758d7e6889bfe49b5a0fe5807e55bd03cb53f717f22d51164b9d9321fd76b9a593d3d7eea977e3f14454233b64f9e2c9efe571da406839ce5b83080215998d04afa5bb0dcd4b7b7dd129ef69d37de1f2ce3f565bbc6ecb1556af059df79c63a5a2a477f04c87c14adb3ad1fa27d5f883b", - "msg": "7176c2819369a35b5768eaf2314fb22f", - "ct": "274fab11daafc48289620b56b580700f", - "tag": "3363e2589fad8af593fa482ef3142771", - "result": "valid" - }, - { - "tcId": 324, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "790f56e8ddb4b8ee9571bb526d284be6ee3af02727c5c47fd9ec8840aac6f5d1", - "iv": "796fd35de168cc76b8ab857b38759cdee119e42a2c34cfcda6f506b7042eabc5", - "aad": "62ad5f2c1c0e901eddafe655b8d4950bf09e5941d7d6a2e6021f276903ae49c59f022f5d4582b2cdfddd3dd5ba20dde5a3442558a690deb5fa86e15a6dc4f8e692cd915cd2b5bf78152c5ab556d3eb69fe52e55b81fa156d90be09915c8b731be9280e1baef93b3555c6f238c6dbc7ea7ee16b27cd9fd68a23c7955240ae57552ffdb8d9e9145403edb086506ce8513bf2633f880ab65a3e", - "msg": "d20cbfe4ce007808f8334cd86aad258b", - "ct": "6078fb3bafb79976266927563e615bdf", - "tag": "74b31ceec91862ce56ad3706e42c2b4e", - "result": "valid" - }, - { - "tcId": 325, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "766e03ce4de2b3f4008ca1ba6ed7210ee9c7202d257507681c24d49770866114", - "iv": "c5fdfac100d926b0d4dddfeab407adc72dc6801bfb5589bd68ada29fd546157e", - "aad": "3d770e0ca143941aa2ea79a71f44015822971537e25970a8102b264b5be682c4e01bbf47c70fdacaa7c5e4256642ccaa08f43c583993d4b1145f599c5b46d16c3881a73675d9b64e7007c6586a9e9542c3a181a5dde40d03e6c27f88c8fee56f730fbe0ab442e2cad1b55b51730e0bb5d4d036a60c07b09056e76bfe3c8f12dab78bb87e7c5ff1a42b50e83280efae0a90ed4951c8bebfb040", - "msg": "541fd00c71a5e5b0706fc17b0b1495ee", - "ct": "c362a9d95156982f9cfba192eb633c01", - "tag": "9d0af45db986a72d9d4a968cb806a45a", - "result": "valid" - }, - { - "tcId": 326, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2466301f9acaa6f93deaacba49a1ab75c71e2aca8893fcbfa06de3473893b20f", - "iv": "9b6c5205a38fe83a2ee29550e5952c50b53348f390cef922bcfebfd546e25053", - "aad": "3c638c8c874c60db71cec68eb2d394dbc5654d55a49005d067ed577dbef956dd60fe1ed2f9970af5ad4901a04d58f7f09ac01d1cd1092341394002517133bd0bba6f70c0b80a3e63d79d7f5bbf495f55cb721bcafa8dc62964bb20fd8fdfcf9e0ec8caf802ef48014d534f0cf5701091201c825b61bc66aaeb49d88b9109ed3cace94813199cefde0bb156c661841702d260cef8de9c1c9689c3", - "msg": "1ab1f7b88238fd39b8901f84b7772789", - "ct": "526540c72850b6b741a55e9979c52d1e", - "tag": "b7a1491bebdcb73466145126d7a87292", - "result": "valid" - }, - { - "tcId": 327, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "16c5888caeb4b3e1508f54641cd16f96d705793b1537aaff0a8ef91081891957", - "iv": "26b110658127fe204c9e70ef475e13e7a02e197dcf290749ce0ae552ad847359", - "aad": "9132ed0b328cc8538d961f258f1dc61503d90197fb37dd4af3595b87b976def1cf47516b58b64005b1016e2aad8cb8aa37f5640517df593766e69f43227fa07a8aec4884e7964c3977febce97b98d3a4179fe52a10576ff5cc05481574dbf1109afdd77f32bd8b4bee8c43abe27a1dbac051337b53095c360af963c67e0a567445af1ac4f55dd7ae4cc64c66945475b132e5920a59dc023b3e4a5e", - "msg": "7036d7341fb2c066b5ecfd55d3da7f2d", - "ct": "262c6f05e3c011aa2754e3739cf9978d", - "tag": "899f90ccf38c684c7e94305c186fe1d4", - "result": "valid" - }, - { - "tcId": 328, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "5eeea3522a54504fec81b7cf6732315a150a6b9d403a143c8747220c49fa3048", - "iv": "609ed4f217d0e20022abf2fc4d5c4a535f7f7f8291ae274ff7e1e94c50f52592", - "aad": "cf58b52c07a99262b56449c813fa1331165c0ba684b063eb396c57bb1e968cb1bb102c62ecd26c0a878653989f743e25660ae2ee8473cc057aef1966acd9cad507aac11a183ba9594ad1ef954953eaeeb7e09f39d0203c8ff4817b281ab324c8c917c1ece10201a0a0bf91a3f7143d89da414b85e874b1e3151d889d8f0d5f86c3147f833c7ad23b404328537ed2be0e94b886ab1b84607a3833355d", - "msg": "2d6db9cc5df6099c8fa893af2cbf8ead", - "ct": "5603b44f4aab8bbe11ec5d0634ac6e1d", - "tag": "f2f99d28b05771f26183e0d806c7600f", - "result": "valid" - }, - { - "tcId": 329, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "679ec0c197553126ac98bb27c2caa113b75bd9cf33f7cd45e62bc8ea1a4d2a25", - "iv": "4a9dbf5694f277f4767310fa912147dc9586455e2bcc1835cf30175a8e1d7df3", - "aad": "4d1ed2ae07e0a77d83d1f5e9ae6483992a8879ffbcdfe505552de3991cbf08c935b0bf55fe3e87a9d34edcfeb38003208ca2498eb756e19b61f05aec48b14c96d72d63f32584e731a4abcf277f8855f364582f5992e5f33f230fa270d140720c51e07430e769b8f3515e74f90581614785cf39c6a033cc96e5c99f2b8c0a5e549c4d043a94d7bc7703d93e20f3fbd287f4d62f69daccc0aa0fe1ba5c94", - "msg": "1f3b621d49d44077f1df33c76193f866", - "ct": "dc9160da8c6215a7aab7dc10a6290f8d", - "tag": "b2e60fbda292da2653180f6ba4042057", - "result": "valid" - }, - { - "tcId": 330, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "e8593b3d8c543afb6fedbd397d887a1339212056746bbdc3cc005b9be2e62510", - "iv": "f2d58a11ba67e920b868b6e213437aef4fd981a7e6e8c1e7a4d58cae6b3a2c15", - "aad": "efb2b2830e022626c36e34f71510f21917580f37af73115106de59b1ab8899cbe23c8decf70d2d20cfc481f131433990ab7a37d5a4e01076ae61b1bb6e140219f3d2dfc0fdfce4664cdd4b11c95961a59be17068644c12ebaa17c52d5962777eb7d440a351c2ce8cacdabaf7c92fc6017c327503af0725d683478b2758cc86be4120b50d6e4c90172a7a715030d2ad33e5752cea484a6483512a52b750c3", - "msg": "3e598ce223a478b86717597c7a98f66c", - "ct": "7bc839c88289b261cd59b7384cb748bc", - "tag": "4e02b0d801249db447ec894c3e039185", - "result": "valid" - }, - { - "tcId": 331, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0e2b908afe85f71d4dc10f58aa0082bf4b0e43c452e52911b1032cc773579d95", - "iv": "d5331b875f0d4e61ea5a2abd52cedeaa075c21a1884c6fccf6bc2fab755f8704", - "aad": "117faf62651d68ac03ae49c13a50d437f57e04eb0c0dbf27550385f542e24de9efde45f4c665a08819a6b6e696cd446f1092ce4f1957d53b0bce5361e52b224ddfc5a5626c368a6d3b421d5cb50c1fb34a0e2c739ad94ee8cd941e125ca742f7b8dd3704583a0f7ad5183d51a019b1337407264fd6f68217d1468ec7a4a83b043729bbfd70f124d12ca3860773a04bc04f5cfc3053352024750ad983ef3b33", - "msg": "d95942a75fb8ce075161c04e977ea080", - "ct": "916553e5e385d2e3b43d6f6f03176cf9", - "tag": "fff6038d678be881d51e86952a9db8c5", - "result": "valid" - }, - { - "tcId": 332, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "7d127c48a345853d3c6cb66f1cacff5786c9cde49c9c13d1a513184f9b243d41", - "iv": "b25141c03862a068683cf6b375f8e03433ee09ab6c7d568a6430ea629f3bc463", - "aad": "4ce374f4ebf02e2c089073558cd9befe46822ad6ce8cb4c2889ef3892617e0b6c60c6375977cce6d96bf835feeff68e70b6c6413f9b0e8806cb37ca407b64e49157bc3c326e56b7df849c39f7c7eb2518d9ea98bb037bdffb0742e48fbc3f8dd7fffc7fa6a1b1a3314b37dcd97b4455927ad92abb772fe0d882f87998d6eb1072d174c4917474f39620bf0e21c2990a76900344381b5f5f57ce9460dcc5b6290", - "msg": "f5b47c5074380adbd503e8b76e7c7901", - "ct": "f9645cc68a6811d7cb698a1f66bd72ee", - "tag": "480f07011bb489f18ee5825e4a7d7405", - "result": "valid" - }, - { - "tcId": 333, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ea5bc75578da006dde869b5cb8ccfe15d135897683de8116156d9a03ec7646a9", - "iv": "db58ee12e49beb1f15dc4f495b36fd10fcbe6a760498a0c12d9a46f5020072e2", - "aad": "5937009a9265e26da7b5da6a28176c47977cd0a72477b9ef37c3d9243df3e773a8d3fe84d581ef01874b572d2771813fda702f9a0d96aab1564d0ab1e3acea91c93c67dc494ca9a63a37136ea65eb7bcbd5f8ba2c15eb5c3cfaea441677fc8920b31d2cf2420e1f4135a92f119dbdba8ef2942a7401ea76cd4b2f23cf3adb894474f0f6b9e1e2bfa8b36c0c06b0079e2af77047937c9898794810d0fd9617b7588", - "msg": "17d8e1a76e29a49c262e914ddd12ca1c", - "ct": "c2912be6253f5c2a19d9120a680bf3c0", - "tag": "dc5117796b604cdcd1ce1c666eb424e6", - "result": "valid" - }, - { - "tcId": 334, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1681ba0f1b2ebdc69318366eb214da5240e75524ddd3f58f5c0dc6d8d38ffe92", - "iv": "101df5ef22a91c0fe194854dbdf52c41c8df11112b61e09985cab0db0cc06568", - "aad": "", - "msg": "eedde49254392322771da0e1abad610252095cc4a67940c7e7dc2c480411322f848084132b303119081ed1d3ca85ac18551cfcf87228ad9b71081f823fd129c9d46bd1a7a9b078788e08413ebc06498189b798eeaa1f1a5b65bd02f96d816a32f5196e330048233b7c7e88ae81054ef620f26f9abd8fb08bf29794020d111a70d993f763ae6aa6da6d19a832b24e21553cf247d721e01fc80a685bd92c7ada4b6b0c17778f8a43c009b303c646ad6fa3089964382b7549ce3bd2befa55c7a8ab157b19d95f71f0733eb5ca84e2f61886a4e6d086f57788c918fbb808ec5eec", - "ct": "a8bfc9cd6a4b105ce839b9677ef91167e783b8ed2db0e3a32a761b21d4def44a92737d57a64761c5b877d35671b0e13998c1ba3430054125636b782ea8ae07afb3e974f2d13350ad0aae1a55e120400928a1bac8f3f72a360b6d813352b741fe57ba0f0f338a69f884943c9d30e25c6b27f06fae805c40d30a83db23b396d35982cdc9400061aa913b267333e30b036d117c3af7f8cc0b2dc812dd8e4ee62965a91cf827b3966e20848278ea3c2e6b7f93117d65f03a1505cf56b5df98aef7a0377845432e8e1040b1dad9de49257eba8a514cfe792b7bc567e08aeeaacc19", - "tag": "3233c6cfb36b9930b120f23162d03593", - "result": "valid" - }, - { - "tcId": 335, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "33bcdb149b044e355cf4d414a474e34f2c0e61a3206cf3b4c369b7f02971b460", - "iv": "ba0c19841b8e48d4f5820362561c75178b83c74388757129655c736fb2625b54", - "aad": "", - "msg": "b68b6e75bc21ab12cc7a3172ba0b7cf9805fd2fdcc7b030ff07092859c206b18819ad7ca6edeb6c2ee4f24a209e23dcb05a72977de15b58bb2867271e3ebf31e0b335980cbd46f6e10de607b80f8dd61b8d11df0bfd4c6afb996bc2ce8617c050220ff3a0024e5d970fdbd8d7b1cb13d3d622d56c8d573bbbd7db4d500bda6b6cadd7effd1c10ae1a99bfd12352f952576feabcf0348597a98262bab273d83c265797dbb26ddb7b0031b8f9f17d25063fb2746caecadb5b53a1f14184762dfb6b9bcbf382a48d37a1c0b4e4a6be23ca8e8adae38ed3553606a9b785fd26f3ae8", - "ct": "9cd55326c4b0178ff59bcb02f559e26f5bae1ccdb1713fb028837ef048cab16b05fd04f89b5ba34b49cb096c06efb5857969688d02a72d8dfbe398bfe7b51fb96c569757f5b0481f1e56a88aecb7c05e0398e882a7847d1afac8847d41f68f3858e4e571aa6d5f21ebdf87e6773ce3831a2cad2dc26ac606bdcf19b577f08debef760fadbd4d05f80152d2af8ea5ee2d85b4ed8f79d3714a80250552ce25c2157f559dc1c413f6df2e2ae10cea99fb3d78b8ce249c99d12fff001d2510266b233f6872382105a1780059aacd056eaa0344421df00103f7e69c2f8580342190f1", - "tag": "5412572f1ad86bc505bf2985ca705d30", - "result": "valid" - }, - { - "tcId": 336, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "fcca0a03c4825d7243cf02317f449c6a2a5e7395bd2df831e1c979f0cad64f02", - "iv": "2051496179be1df31154f6682cbdd74422aeb41dfa9c959495e0a7fa7f159a40", - "aad": "", - "msg": "46b1b4b912a15c176195c0d9121e10d93a370d5253b20537dbd70b47fa0675c46dc7ee9f0934144b42ab70516033c19ee34a5dff4ad36ccca7b3b91502c855b5d4964ad1b05b5d93dd2b07232382eaccb73a051c9a5165778f365a8e2320e248c820f48cbfe89735ac72472212036caad4a03e4c8af80ac55a476f570a2ba857116a6bfee31840eedb086f9f85f28e2faf91f003b64acf4ac14ff12c2c390ff095e265f7b534463868f501b7e71c8dfca6c135da3d7e3ce04dce408b8a51bed27bf43c30ff0a83729a54cda86f53edbfa9e34323f783676031dd9dfb55fe7e9c8d", - "ct": "7744304a50337a7e82bbcfedb44c32e1d66c6b44a8f098f11908025c9129debabdd77980ae37fa4a5b22be213f9b820eff4efd1ec30ed3758b7471b33595f89b21af55e584540a1b3c20f2ef97b03523fd2471f29ce81697edd538a670a0fc4bbf9eb8a79ebaa7a5a0ea6e9b37a8a2eb6eaed463c889136176960db81f88ace54c1cb333bd96e5b4a7bd5703f3f2927c646fc21cdba8670c882706259d99d8d5beb4297849312d6cd86e0c29d94ab942f02a14041561a5178624edf59a0589506e12842de858738871dc6d3e6544ba365fe64d6aea00db5d6fca526b80d7bf8ce8", - "tag": "07c4cbd2a154178b6dd44e4e6e3a7c9c", - "result": "valid" - }, - { - "tcId": 337, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c1206112ae222f94d81dc026004a3562b2df8f38d1ebd26ecdb8f87f9fc64bc4", - "iv": "682164088e0a900bc3b73aa4704cb2be45e1065df81226b0163fa17afbc33def", - "aad": "", - "msg": "5edfab93dda13d47cd38c4fba6677940f014ad5cabe54c89babaedc1f075982bb9b7202b39cde5e7e05fe8453580bd1094de6f90509408c4dcab89479b4d1491d195a484a1abc197d6e740bf60950dcd6c7a200b3fb65562db4803d4d44f134bfab3a19c46b5f496853ae5f13dcd32a5fe0cb40e03458688d54e1ca91d895d5f2bc7bbd92a43fb0442c59430e52aece2df753a0be8d2e47b360b8d3484ca69ca52aadc966a4820ebec0d6dc2f8b8a86085c8cb15f46d6fcbf41fbd6ddced0f235e9fbbd19dd5bac0721af6faa492ca0732b87eda3e818eb2157fdd87fd7570ded9129a1cd9f2b8f726c5c0b5d0cb27c5cc2b4cbee7c367b6866e66a9c7a0bf", - "ct": "b11b837360a1dd3cf3e533abda807aa01f030f445cd35772f0b32808eca4a546ed5384bf7ba56bfd4fd80853149eca91b4a0affee0318019556108f27e19d350276b2f226f3e66613b29ce0fb03e8be95a8af2fc635d5bc0fedeca2ec2ce34ace2c6be6adfeca3ebf3857c222fd407aaf6969f30c72414445c271d9519fd5e05875c1ea5ff3bfc5dfb91b753db359b1a82f8292a06a1a4701dc45ac1035f1a4647c785aff50cd49a1d31c82d7fd23ebd03db47d8d1604c814a29966fd231998b3a0cd769fb7e9e458546cb1c0a8d62cf2913aa29529c1b2082db3bf74a79705e4fcbdba05930120ae5a85f1f39bf6757000471a6fc67714fa95085da659a15", - "tag": "277bdd7e48f2b2bd7dd499e52db8d4a5", - "result": "valid" - }, - { - "tcId": 338, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "114e7f7f9ff1200a5483131cc395585d4a13a144f2e25c7dc797d87b4a832686", - "iv": "22fbf27efc861cef4faf639e51d72656ac1804ac196066e85198ef6aab461063", - "aad": "", - "msg": "af7a2316ee3dddecc36cb3c566a0116bd5654f325b66826d22d5932373a9e76960baf2d7366629854436d36b4c1d7431cfbb9ab1986592aa63ad05d59002e56151a2fb525bf4bb79d313334841abbb083d0aa54dfda0d301d6c9a0ececeecd45eab7e40f4f60643cee6e4c9664af5f0fcbdeac25a9d43b5df3436a6a87617c78722508c27cce14c99d8bd9275f31802c99189bd15b3d562db9c314c1924be0863ccf185efac4e5ba957a89664396b7267f60fd8d67f18361a7ca2b69c20f6bab8c1acd75d8691b4ddf6aa211c06b528f906f29087f176f510229a154660de0359c80d5a7fc63ce9145a82a559a574c389049da6535e288607c750f79af78cf1c", - "ct": "cb91222fae1fe32771a5aa07ba0414cd3aa5d981fb10106fac7dda6da56fe33d69909d19b84b61d43511d90273b4b9388622ee336af56cc68244379e8cf62a1f32cd8a59766adb568aebaecb5c894256248411a4e9598e1033d7201eae2c3f6f2f9162613917e8d0fd0eaecb4f9c7b148fdbb8008f615cd5c6baf02dfbfe70b316b708cf0afd3c07df5724fbcd30159659ffc100246c62caa5a63e78856eba2fd033ddf590919ed6b3af021e77839d76a2faab7e45975e98823d9e269b1ec32bd7f446ff8d8da253f967931383f275d4b7682be7e8689e1ec9096fa7ce2175622a381b4ac8c17d18265eaaf694e944290e50af34c40930fd23108f4e87ecea5d", - "tag": "46feaf11121eedd6a8d9a52005993588", - "result": "valid" - }, - { - "tcId": 339, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "08de13e336e5f0b64d1deb66aee8c614c8ad96491f1bc89090533fa9e83d8480", - "iv": "9f4570a661dcd2e16fa44d0fbd46943a8a47bdf4d91e507b519252a346b8e2c7", - "aad": "", - "msg": "e0d3d728d520d1ed416b58824f320b028c3a6e4c82860b5436ca915363773a9a1144f14d537a7ad6ac1af8d6a5b3efd2a2d3d72321e5c1af104fd9b8bed48afd049880cb9750ff0d2c4ed728e0680dbc9737a14b349d31a790d170c3555778037804195e84142cfcdb7c60a9e9ea4ed3ff4e628d3b5714cf15d18dad970acaa4d37d71e2c31bcee2350690b6c59936fa22e6c6347c74a51270f80dc7b510ac8d6b34055d9859c38cd8159162a68c4b404799f221cdc74277277b2a8f115d754381b091e0cb59953a2da19dfea55621e0e7e779a47a3795da00694f4d88a5354721d362c2ffc0ab2aacacf11da4bc4c0d16d94f5c78975e0524a43c954aecc7522c", - "ct": "24cba0cd0ba66f7fe680a3f6fd1c1f3d9c5ed368de7165b8d4e6b7b4104baf6cec3b90e3d97e3f14f1909dd007b97a6597b5c063d253cb3e3dafd928bfb55626d52826a28a5194a1e8f11c0f273588f6c28e520a664e50324b57c78088494c3d58bbdfb3d047f57a0cbc91bb4429f04ea45a57ae45886cd1dc0a6f9bb4daf458209000873d19bf095bb634207e52eb4b506c647f51c358622270d50ae50b5d3df78b7e2de5c55545f49553688f932ffd431cda24b44afd235d1f82dfca404b93ba35ed41e56a006618b940e3ac2a465d5b3e572c5f91505c43440863466d4544a9c7538d4ce6b1c1d6166fd56db0a0974ed660413eda45ce265b3df810936e1f0f", - "tag": "e76f527d7de85c47b1c4b1574e9d0f7d", - "result": "valid" - }, - { - "tcId": 340, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "f8969ff51082a385ea15742df1325575f5611e264d8d621da218306642031dd1", - "iv": "fce30fcee06678b381e147221a0d68c30fc8d1c120393b7b9a1790f9168f1ec0", - "aad": "", - "msg": "8cada95a3c50d6de3bd3e42b01695869cd7b06fe0bf311d3b81ebcd163e55e718a48824b6ada7535f75ab00db64cc98a8138e5b565d6bd6bc03c6df70c226e8274d2cc55cd98bf881b79e45a4fce44e64e4d7c2f139e6bb8e8e6fa0a15921e6b7c23da991fc3e741ef1b04ae5f7663e2fe560a0e01ba9196eb089527d2d1dfea413226830c2b06c81d29e9487a3aa9170ccf49af4106dcc19933bb348f75e14f1c96200abc5fbde754d99ff2dbaeee884c4b8d3121cdaf1bca0759a00ecb7fe9684a44bae85060687312ece024c23dd4fe9234798ec0566627a4de211f7c2fbca3ea9d58cc64de58a7295b891d1e2d9da1dab1156754ab6287112f35df866bc4d9e9069df36f3d4f4e62485e1b96f0c300b54d81e0d3919b4f8161f363fc6bd9d60531df05a10571460a37c2dfd9ed234c415b60a52b018048783c417432ea05d06e69c1d154ea52aaf86be7ada42ce247edcc6cc742ecbd4b58051118e60c04b4dd14647648b8971026ab96c6c076fd768a934d3c89c5429c26259430ab26a28e01c5500069187889a97619994e2e07aa29c0d514ec686f513d055e5c0bc07ea8aabc733471b2e32ea93cbe30f33ae0f9a44af257ea93a56856e5efb991dc914a9259249f6ae1e1140efb666955fe8e59dff1b7f3374c0ed74f11ed77142dedfc5cfd74195aa6c23d7b52fc1f9be9488757cefd6113cff45eb9b197e0f2f9", - "ct": "8433497793c90c889538146ee548f7e155ae4526c5e919c072dc14363a50e8597f39ef6804b66fb9c5b8976316bc4d08d85ec21e40721206ff1842cba077240cc323171feb327ca78d00d9383503bdf337c0b7b2bf4f83b63b174d2869ec304fdf10a2287a5ac2f6a4e819ab1e57504e4bad5618d9cec4e2634278dcdc9d1154aa3feb9c5640be286dc4fa659f7f62903d396d3e7e887f9f4ab5d1034787e21774a3d08a590f4eced90cdbf76026a2e97cdfeedcb6f5be02a40454873ce76f4d5f5f5abe5f9642e34bbbb0890e06416aaf34782169fc18bd87562b8985af789bfd715a546b535a6e7f4e4855e3dd9208de13d6633f832c74d43ea31eb5a0968348930400757b199171d6015cfbe4d68601d4b1a8263b3e4b8bf983370959b4ad648d1fb731fc429aec958a8e9c5e59f09a45dbcaa4db0554002bda0a884e7e81981c5ed5bfeeef4b55b517d3c82648f23ee59393ce9a251d55c4e8ca68660ec7a5f2c180ca97938c89463f31a0e8c7b8e42cdf998e5a3197075b8fc31495dfa6436808b97cb3a462e57ed5e4f8b4ac933a08ccaa5155086f0e37db2b0ca76b989541e804f58dbbd95e965c134eae1bde18bc87e2d8267b2a55b8c831cfee526a7cc091bea965670c834bf736cb6c232a4cd3c0a5704cf235613e14fa8fa9cda3e66e030525716a098cdebdc1d8b798eecc7d3c59b23eceeb0d67e52ac3bb4d", - "tag": "17f0e7730ea917082ca5220679337bb6", - "result": "valid" - }, - { - "tcId": 341, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "453afdc080f408ac979e0b8d3500980636dbaeef647414cefa55aa8b60bd43a2", - "iv": "0aa77983cee67b12c9aeee409e9103222de8bd0e6d2037963cf243aaed456c37", - "aad": "", - "msg": "7b8928012324fdc7bc535abd79e956febbbf8345cd65a4d7ddd4453670995b554c21e05d79f659065814a195f04a04d2a1d0e6dd1ac732703d21cb9b485e4ecf57e65d175658d65c1a1689b7ab2d6bbfe0dd769b7effe61d5f796d18df43a1f7334f911caf8c9ff284747455aeade610050bcafed6d412d3123323f95f171895d4cd7de174c44c8dee2fc3ce2ae4504a9c29bd3c01b9ee2d3e324b3a013d343ef88f423234b2f72d106ffa2a317ee95383f3cd8c00eb3c0a0b2233c8c5ebeb34e162e410507ec534b02bb373c765a1bcc7c4fd9ea895c135b47267192397232ab2caf28a3d7bb2f4a7c4b872cf3a897dfa9c245c7a6c4f08ea4962848d89fc06fb1ff9489faff651393c691a2432736893a0e161ea01aa89f8a5550775009c37385dc33e0212755146103de3ada3ed1564bc9682db448acf6ef66357e8a4e3a1dc7f8878cd2c14ab162d2a38e280a05d045a06971f8d35f640e08291c41b85a8333b050c0dc48ca4fb90da00ac7e81bcd6bd2d5efcd65ad68206452de710a23995fe38842376624c4f7e055d9eb226553ec6ed7826f17f81e4d71928d8f887a92e998dd8025a2c1ef4c887d356abf7d90aa5edd7d33b9f4127fe89c96231c71e54cc482eccaf5b7555a1e30fd669b8766d199a24bd084687f861b6d2d2a0afdd9dd90d2b7173eb14728521f1b5c992733f99e921e8eec002dddcb11f39a1e7f9", - "ct": "85a6a3a9581968ec7c9362e50d9bf02adcf1c6f8eb9fb0dea7a72d988bc8952c59201a041881f0f83bc0b2e84ff9f958af12906755d4a1e81bc2d7c8ea5cee1c5586bcbf6421dc56eb27ef495ef36d56c9a89feac393dbedca3b943d970a2f7c04e88dc070a573aa4249f188e92ed19f9fdbc35c49761340ca55c1adc9cc1de95b8d04bf4f9dadfecb4aa0e6a665bf3a827de5f479a51738e9c59214a364f1a31bd7aae9eb90f2ac3a5ef3e1e0a411682faea0a87218f11a44af962a90b126bc4bab8a7dbf5cf61a2e1478b4394a1d2b065b40315ac56faf81c37a04c7d006448ab2299cd13f2b1156af5849123b0ee038144dd535111baf863e0f6bf0ec921694acfedf5dacf6f1ad6fe1a222326500ec31090fadba8754665a51a5238ffe316ff8de180b7565773759e921b9d08e8b8ebf897b20646a69c03fa2f59a59580c013124cd55cf81d13e87d2a668ec310581bc5bce1306fe0674d297cb53dc9517941f56a67568c2fc85053f6ec695cec1e769e2c11be5ae67db5e35016242e63183abdebdfcc079c976f88a53a65dbb8a3e4e58d7ccb1283539c12c5fd29aed63445c5a393b16950474ae4087d8ad967ca3ceac739d7f5cbc5b18faf1ef5d88bae53e30e5f645cdb73671fc314a90f224f24555d7334da7285b382c3d50e3f392c83f72c27b17bd8946fcacfe53dae475341f471399d896a134826537044c5bd6", - "tag": "71341e5949c7fb9d84fb9b459bc0077c", - "result": "valid" - }, - { - "tcId": 342, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1cc5281debdb9851eb10f596f15e7d2468af06febe24b153f2398afc65f78a20", - "iv": "e8cdf499c28c1a8e83e8dc4550f4c13accb1f02b291b971657a150a74f2b32f5", - "aad": "", - "msg": "95fe940c61f2d7bf6d30e18783995e969b13650f8e03f77b1ddd6d54c17ba1968d787c0802fa40c6408ba1a235ded1d10b76d2b1e6fa8db42ac7d63324ec6cca6593126882d072bdb5e9caae664667e3019db05e6fa7c3be9647649252ab126205cb85b97a9561a9c00656e2c5b4222735cea4a89879993021925242e4ab7c4439bc5cc5d80498ee57d8c0db6f951d341ad4dcb63479cd6ced892bc70be83f62b12deb3c894ea33432eaea807a61b8592a5055268808e0451b9da4353faeb04734e22d590d27e6adca13ce58334463f649507e6e343d9aa79b9d1db64abe3d8a3a4dd8cc9dd96c11a38b4d276b686e30cb483a01b520b8a5597b0d81da5c6d7cbc82f21aa830e4888a42777f7e185204c93cbf529b7bfa39657ef2d7adea7795d7e4f8b0a21c1d84ccd341174366f5597764d0e5eb91890432a59ad2db58e3e87c14c0246d73d78509183bc350da2c5b85619abe0be1505e076a2f24cb22d02f68738cc4dea0d63b7674036dd17e8db90ab78556fe8336f036ea5405af0f5b613c7f05a6046014195c26d6e098a85f21d16d4cedce0de6036fcb9b91524b574942f8b64a2bcf76a093abbc92c44340d00892e413714e90d7486960605ebb7b89a989302b1de21f448dd133d447ebd3d9f25865de176683aa3ad224eb3a6dca600c4096bf88f5e83dad9e755f391cd424ce3ee73dff20b55b61a18ba9e9a5aab93f", - "ct": "89d2e8a39fe80d730e59c644cb35997710681e3789511d0cf46a031a840b1010c106774759b865fd3594e6c67fbc4a8412be654ef17ebcafc35a345b68f8ac5efec0ad299d54b516955873b6cf0fb1f0a97725985b616db5e579dfee9d0d378d12f837c1d5d9f2fbad7bc66c54e6e75e470ff2b5a092b6d71bd2ec537820006be3e0aa694b9a324de63eecc801da7a38b4d24d02622c0dc6cdef4bfe56992a17da7448183a476ce7348bd0fbe2202476b146e22b56b084b64b3c75341bd64e3fcd56f22d1180d5d6d4e5f83876b4222e7b6d06b7b1bc5673131c5123b18abd97c458acee59428951174b3d1f4b2787366b8bb5ce3d4fe1b53214eb28e5a910826807b648ea8c4601b7ed9f5378bece80594d017ba3f37642158b6a6e7870e301adf4140dd03a26f5c01111760bac9727ce3001a97b70d2de1cba63506766daa8a7335cb87fe38fcd403fce1e32c09a4bde04299f9b6b1b6a9b49c098ce2ad4f6a55545ebe316c3bb1659c9273e8156a76902e696bf8f8ac4f783c63901dd29d307ab1ff762318a736ce6f7e7d2524a93ec937476e99160676755b4d94f9b3e612ac4f7858d712c4db708a3fcd7a6526ad22edd66842cfca67a52f48fd6b4b26b9cfe09a0b032004842a1f5a8b926b92691d9a3c970b8d3e8e3a26e3de9c1683bf68a551e7e8c8b93b1e0f8a254571c1fb3f25c1a2ca5f06d0f7fc4ec35c2ec477c", - "tag": "df7e8cefc26946a2d7f38d43e14a049c", - "result": "valid" - }, - { - "tcId": 343, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c688e9d761c43de3fa2e137c155b4c20b07822ae29630a5f0abc550596568039", - "iv": "6e68f2f7782bb86559741d87469d8c723f029c824d2992ecb2e019d16997b090", - "aad": "1479db0081a121d09f468b9d672839fe6ebe60791bc212f9639d598a850d77b34f71441f040a2340a808564465b71d7830fc94137c36a7993fcd458d56e2a011fc4082ebe6d38a8cbefd8ed4a2e25e68d14debdc5dc0ca8a337ff3ee1c8fb5eabf674b4f49b47cd25b6a49ac521ed861e2c80a1c54951244feea0b3b736abb1d218b35fb98c47b69688fa4cf296982c49c040475f2a1031f4dc3589b5e310448c4c8b1aa09663ebe87c872bd5174ae7b8be75ed7ae795861c54a0281db77f4092beae1c8dd852da7ecf5139afacbed4b348ac66531bf5db28683b289fe1916", - "msg": "1b1633844c26b5039680f363dfc6e68043fd032e", - "ct": "80c6c9999089c77e9348287a8d14858e2963721f", - "tag": "26fa9a704b81935a1010dd9ecd06bcb6", - "result": "valid" - }, - { - "tcId": 344, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "4b1949e5a09a576e6ce54d9ddc9e7c09e9c35bb48a21ef61cf6a2cd68e9037a1", - "iv": "a2ff83b64ff37d095b1ebafa156edce1b79d92921673ceea345296e4b9226528", - "aad": "edd0eb412c15a201b9c755ab4d8e635cf0eb862e40dc4bf591251e04ccb763e01065a874f99dc63c41a36a7ad20b9eb5238d0c950c75230e627b6acd00a2ba0f5fdc33158e884d6255ffe00d760d69cb6f1961e619eda95a584b515fd34cc97a3effea8a110ae9b95602d9e5fb0bf7784ef245feb2296477f762e29e2b7f802627df3e4ffbc635297f0412d7e2e6aec88c3993524767ca0146bc5df595e1b2894151cf0c47b00079179afbfdad73dca62ce947454061b04702e11160b58e6cd6652e549744954c8d95e363a91164e28a1b717fa06cf9c88d9df193c57e714dfd", - "msg": "caa2462ecf4d272a61fcd223b2c2ca3e8a2cd822", - "ct": "a147247becfc32a864815ec6feb4ab63feaa0e74", - "tag": "4086e1d4c449eb04a4a08d14c096dae5", - "result": "valid" - }, - { - "tcId": 345, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d84b7a8d9fcf7bc3d53aa25e179596de32079908db1531a0b5f6f52fd8b76a35", - "iv": "3049bcc438e6e6663ded8e88254e652b9a96c872ca60b04fff742e85baddabe2", - "aad": "4b43e621e8de2db2a85c7bfea0ca904b0a2b30549da884ff7f2493f28d37a282a2517d2e8023046a6e3a7dea15575cc1553005896ea8199ee86816f79368aa7ef18750ae64af13066f10f810375b5956ab62ab12d37344578d54cf3419453ef2115a4743b9ed900684d128e6be2637ddc25f5b4ded87ba57a399efae4178d9b3676afcc49b3eed180ce4edcb625078bca3a917eecae4831c52dabc1fd3b9788ff89783e809847c1a2b6e58c2ae1c6e2f3cb871bd500734dfeeade9c22711cd127a19a76871e547f3a39b74ca77957b60a8686cb95acc467c89918c1f1d5411ec14", - "msg": "08970200232cfc32a005ba3c497fc7ce08047b0e", - "ct": "bb879fe68be9a8943e52e10c162cb1561643d516", - "tag": "7fb85dcb1a858d47f84d80dbf5fc63ae", - "result": "valid" - }, - { - "tcId": 346, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "c97fe46b1fb2d7ac6dc0a69e79c4af3eddb3fed12f3f689dea2bd5b2188ef525", - "iv": "a9e1525984a20752256fcf05673864d9fd1aef41785a1a74cfc96dc931e3dcfb", - "aad": "38c7a13764d53d8446561b4e6e5d3faa0a804aef3e7687ce13cad64483c1594bcf8a0c480858c9f735bb6f0e5d80c794fb9acb7fd4eefc56d8f460a5b95d80c431d0e57b680a165d028247b4b555485def7707d9419119497e200c27ad7a04d9ae0d3bf10a563b429df424d4d9c3db500844aeb9ab66fa2062112a20fa68e00d5d300cc787488ee29edb14552363557d4e748152f51ffaa98aaa8ceef859415c33e864b9be80f59d48d61530f7de134849499847b28ece11138518a5af2a644a7bf01ecd59071d2ef57f81fe0cdb3c6f78b6c7796b24094c1a4cb0864560702a718ba26f0c9ae0cb62945801643a0fc4c244e8cbe23b3afe84573f9ad44915", - "msg": "eb87a278df72ce5dbff59cc546250f9f2bd1d006", - "ct": "8f30761a364d02c59e1a4342d7d7ab58168d78d6", - "tag": "dcfeebeb095f75b99bdf8d2b38be6954", - "result": "valid" - }, - { - "tcId": 347, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "06dc3ff9cd965bc0f4a1d9b94d822c772157f4b71fd9651323ca4c8cd0d6b995", - "iv": "5e3fa29dd34126d674254c452461f30bdf364ca10d796af9c19aa4fe7c04dbb8", - "aad": "07d9b6c485d7aaf2995d4247378d833ed54fee871a4a05b6ca2702fd174e3c839ce76bb87fcd871fdff4c40b5671b1da7fd9fe6f6584b2a5ef13dd772087907ab6b7b89d6c369808d5c7e4bd264be6e2b270392262b6ae351f6801beb08c3b8824c3093404463842866f93841a5958ffb5d2e3873e125cb2ccacc47c0cac871d819b603b2398988924cb76ce4cae5f08f659a5e4295ab05a7a4b913a29dd9ed208a289ddbd8fcc090563e3b96c2777b9fd7e10546687b3eda1f76f013d66379e602db0707a3f5137aab2347ffbe99b50e935ed50ba9b4666a4bab09a0e17bb42a903998378382acc5a4388f80a807a187ef70ac7759c285da676c79bcb2301fa", - "msg": "1a9f69bf39bdc40b2c2ab8361f0794794ee384b4", - "ct": "329ca366b3172af4438e7e78f8f1585f6fddc62f", - "tag": "8be0c0f7b261d5ca547855daa6d3247f", - "result": "valid" - }, - { - "tcId": 348, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2fe2777980ba5c4d1701a7a39bfbcef67b9143b396a5ffcd1595d5ff75c3b632", - "iv": "7ad39457b098e7ac092e698d1540c99e82ea5861c00d1fca8ec1c7c0b6f03135", - "aad": "141f2dce50e9ac6d3fa92eb3a9a3f86cfcf20db08ad403fdf0fac5224924f47246bbae99812caf62a57a346a9f965bb1ffc79c5215f0e729d71c36add5c0a715cec8ceda849840de0f8f27ab1cae2d1c22a1b7d528f7bd6540fdbd3b97a2d4ac3c040150c24e32a55c07f0a3e25187e433a9dd9f86c89a71097b07449c66310258569363b4040159668a0d13d3b2dd49fef2a6e373c368f1e2269486dccc84892cb16e10fd399a8c6bcb56160192888d4cd0df9df9c9c66145e11d9b12d8e4792a77aedd6e088ed21cad8a583aba6831de3cb49f9cb30951372f0e34ce8ba73bc49b0eb825bd3be12e31393d4f4ddd477a39063f677fb8878a9235a3290f146d9a", - "msg": "acc98acab4600658038c896c5e65a82f4e57a774", - "ct": "230ae19d04cd1a524619026be472261b784ea50d", - "tag": "16c4c87119d332cd02c535c8fb244a48", - "result": "valid" - }, - { - "tcId": 349, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d85b05106b4166d78185d9aaf41fcf49c83e6399cec4dcc3e2fd763e8001c272", - "iv": "69752b640f52344a7ece64e266e963bf39faf64aa5ad9d09db3d46e70a507a4a", - "aad": "f0fd0db2e1ff3bd5cccd634faefd3ebe1602fd0ee3efe7457a8a99efed7e32143c90ef237b7c3bce4317e795e11100801ad4836fe4b957f0cb85e663e181b017fd374f4d9d65f664aecd40ca395e7686d4c7e128a81f19ba00203e58285cf3195f0ed653663bb2299fc07b28cc047cddc4877dbbf15395b2840530307be2c3242260f572c611cb5d55af34c39d23ebbb32168a06d46d72da074bc2493f28319bf971c010df9e7b5aad2ed1c0f3bfa800ac92558074d05e8c33542494fe37a28f8b0bd37481c8a45d03d74dba57f549e67c3cb126a2969fe35be6d6feb532b621a832f7e8f9ae94fd967910da1118796114c8a2e6dfa45ad43646bad1c56b73f514be341e209d0d5dcaff4fa06c849f0a96a7ef2216e51f36250ef263a07f59530e94b717207416319d1c5be9878accba0e2bbad4c067c7930c9b4415fbd4562075fcaee2b8aab9fe5d861fb50dd9a112c768d29d88f0267ef02d66d395fe287047a7c5bedfa41c2ca0edf696b2eb62e3c20f1a448bd1643cff3e366cfb5ea2caa51b8c5a3c61f675cc3c2ee66ab6a6e4d84849f2fdfc17290a39f3ed611be8e0289396b1067ed2030851bccd15d3dc8b97f797bd2fd87aa2854b08a8173e22f5197dc062fef33f28e77311a52bfa342b07ad48d737bc0adc1624bfd1255b267822bacac9fedd7e5944fc75de4fec3b05d8b6c98b3d15be44fe040e64efcd2a", - "msg": "1e2ace5b32c252dbae54e9db12890e67e532b8a2", - "ct": "3ec96a6150d2f486adebca80384bd4a27bc1acc1", - "tag": "69511bd79f9dc8fa8cbf5c5a8d460663", - "result": "valid" - }, - { - "tcId": 350, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "02f92f060f732a09374d27b0ae2838bc16af6df2d364a68f4b31f5ae56c38b0a", - "iv": "192885d984f0e4ff4d63045533d5f3afc89a8c6e62f4970e61fc5889af234f8d", - "aad": "2f9fcba45c12cb586a2f5983a1bc2f9d2910cd802d0625776855a7586ee487200bafe5392f52ea0e1c59b065811845a883c2fb8338e7d4e9b79b0641dbb9a1e53062b315461303c08368405235538448101cbc14a223f26814e3478b895ddffc98a27851626f3863b9a2a1b10e5dceb3d6e3a31898787f8b14e2145f7570aae21e9f0269e3e983bb998ce2c7989dca2eb913f43e4f1e6a0e9bfb7d556e2e63fc5e06d9e66e87188f60321aed55627fa9eb956270ea0c07b539abde63daf4115f73973ba8cef58c51df0af9e4011b0d904e8828fd4e645c1083200bff20e0285f65b425b80f29ec3adfd75513c4489901846230214b3bc107d637c1f712571da388b6a6f243ec72abe7dd4799a91f6cbc96a781133098cd40a38600779ea117b6cb29b1d11baa19edb34a05d434717675b16002a023978fcc67c5452d2c3b5cc3c6710bcf9aee626edc50f8d1e638fdd669992c36fb8c723525f2a703f8597dee179c53a3fbfa5923680b4a7e5736c5224d5d6efdd74ea69f8b9029c41fbb0696dffb0176a0498fb177c8025c85c990e8356ed08bb2bf9c361b4b82b548e3e9afe77d7426527a429de1d637669c7a55eb07cb69005595ecc11b11c4b702ba2ac05281ca571352f1c962e52a337683532e68d7a352586cd8de3c8134756f647ec2a17997d47e6cb04b8315b42b566fcd08bd8d6cae4f6663a05d781d5d79cd84a6", - "msg": "9165e749b54243b409f21ac7008e3c9d7ff18415", - "ct": "a3b512006219be26b4926a7de5eb98773f1f3f09", - "tag": "e6b993fe2b5c91f5e46fdea0e0e23568", - "result": "valid" - }, - { - "tcId": 351, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "ecaa3c16c835e5bfb06cd844dd0fe0811247f14e15cd23da51cf690aafbae38b", - "iv": "0196fddeb579793831c3f96481e90473e43476e58cd00a0d982df6c0db4406de", - "aad": "c53102fe3cdf1a1ac14de9ff9e7fc6c0d2c49f9f1972047a0cca310e2cc87a3d5801286d76ff827d19f50b45dc8e999d5af56e7bc0921ac17d30b99648a6232ee2ce35b7cfc70e088969fe4d594211562ad2ab2dfa19456c1baaa1053c0702497d8faf1780c375033aaef9007b038d15a7f6a82a7cc2fe7c5295e5ae3f0bd6725dc221a30fa3b90a37ab051179ccb724cb5f66f1b39eba6a6fd17918973b8e891ba93fc947064c32d6bb3d62e89b8d4c467ae13bec20492c6e9c72326bd7ff8ed0a52c48f7822d00877b0076bb503934fecfb25e04a3f678c2271e568222e424ca109dc5c2b21430894a8289677ac84eddfcfe444192e1080802f9501b2feece118c435dc5ad3e5f5e54c5842088967186454dbf2c1e34924ad1316bf29fc69fb178959dc4e931c69e8b8cf46172775bc6359475210fac15fa75952b6960e64421b838b942bdfb8696a69ddfb4a8242365c85407c509d3d5444be8f13e112b60a05fd3e7d5f46aacc45353189f14bb27c11c977bb4dc9633fba37c1b025cd62d87e2cd70f325bcc29b47a39e65005a2d26c0d49ab7fe008cb737be929cbdd918f06b59df820ac7004ba637043d1ba6051c65e62ce3c0ac2223af839cbd579e96aacc95a926ba36a0f6124ab4b38fa30c3b2906b454b02ab2b4f37d684f068ce2a977952682b2ab4543fb1bdc3afee593b6f780055f6b56e7960d2365b2ffbea3b2", - "msg": "b0b277c2eeb7e682c61f9ba89e6148ada5ffcbf7", - "ct": "a310a04c883ea48be6982f7db7f3244bbabc57a3", - "tag": "3813091e7220420a6c55d332e637858a", - "result": "valid" - }, - { - "tcId": 352, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "cbab295849b8e38c7c51233bdad60bad68bcebd647daab1098d51dc2da637dca", - "iv": "7a8642a9d5750f72d06aa2454c7ef43df199750c001575cdf733836866369636", - "aad": "18370da9968cc4f26e541df168072556715e7d1a60c8c0b031f7f7c8c5dfc16e2f5a44b34931ad34bbd7d434790cab443f5b315cbf9b3174ba2a054ce4723c", - "msg": "a9f045de33edf6ce642f57589dd4b142e309b89f31bde8cd1ea23dae411e911666592ee5f046a813ed3d3232c4f56dd251e673e946c87e0884b6394b60cf19", - "ct": "d191393c84e81ada1cc3183af324eeee6865202c2bce7dcf8072c70745750269af01ff2f2bd74688a10756c706ff83eb02e835584a76d837955151c1ae43c0", - "tag": "5fc684cee1ae80d526e197f0306273bd", - "result": "valid" - }, - { - "tcId": 353, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "d45a25c969c29336b22ab9a49aebfe95a466bbb6c30fe9edfc995088620f29fe", - "iv": "9b9e487866614b98fb0e8554a104ce0aece54730f08bf0346079ecb76b25fd57", - "aad": "fd32b6bda246577874a43bcf280a16fa2e102c46001acf6a315f9cdf0ea5dac218821862ddeb9a8d5467df60d2dbe2929e1e9064ccb3997ad57cbf3789d2d0d2", - "msg": "c6a1c5a02f82d7ad9a8c4bf296651adb91a9ef736933850edcbb98e1fbe42b81c5d3531511a8642d2b3e1f09a2c684b3abe35290bd43314203b81007f2889a", - "ct": "0656808ee764daa177fdee7e7ed67a68570069e4f6cb0808d28aefaa90c7fb90085ae32fe070b84902b96ed56885826b29466ee6a26822c5bfafa0081e1d4d", - "tag": "be39009598dc18b812b31f0d515895e7", - "result": "valid" - }, - { - "tcId": 354, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "2d6e3e0d80a07ec5b049e3c8725cbabb5d3d12f7b72e4115bba770fb9a3fffd7", - "iv": "f26be77ffb9ee80ef1845b39a5b3a49b48f68325c164919dd6f22cbfa8878c74", - "aad": "a3013e15435163831062bb57c49dcd0913aa218aa6cc6db5445e7ebe759373e5eb5c0a077ddf5d958404fc1ff449235d928e233a20bc1eabe24a50708c11f09828", - "msg": "6e697cf40ecb932b6be02aebaaab57f6a4c3040d5978e466b2aa1e2ed909436b6368d544939bfd89b76ebf25f0562951444427c026f501c6c21e2ad84f8aae", - "ct": "539eb463cdf24cf85d7d1d29724880beb1f5f97e55fa8b1e44fb1f6f3745cc8752bcc2181a8d66fcce748a70fbb7db68f5e14eeac43f5b0cda76083a2d8e6c", - "tag": "8fe0cef9e3f712d908c992289cca90ab", - "result": "valid" - }, - { - "tcId": 355, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0adc1c48d0ceb991e306f5102ede8235f1bab2382666f0028d00b557a306f813", - "iv": "483f4bf15d803189fdbcf6a2abe731ed70002ae8a4e16e32250b6d4d10361df2", - "aad": "fbd24d877c4fdb0334ccc5f046600e2b2a82ac67b250d83da517e05f8ff9c2cf5e5e39f47047ee8b945b5ef824a6b91aa838a66ac9eaff0c51cb2acf0770da", - "msg": "3a15e94962c0626f5dd375f59b7ec5601ae9aa6d6c11e073664dc9183d3b1df5e458217b4617af7456b2b60c9b4252ac9de6fca2eb9a7501ca62944191215f5c", - "ct": "eff9c9852bd377086ee17e56c4ca3aa1dc6b6d3c210e40e8ad37969b6556e335a8204484c57d1ac905015cde9c9ff8eed4b3a9246402df1b15ac01bd433c7520", - "tag": "3bfbf8751027588884ee9de05a462596", - "result": "valid" - }, - { - "tcId": 356, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "1f5438db29b31ad123edd5e4d3dd0c2b46e3908f284aa0b2429998c3f4b5bff9", - "iv": "a70d723761699cbc52783d276395ed8c34adee729d9bf33d03f2a10d538fa3ae", - "aad": "340274f5ae69537322fedf012a1456ddbf0ed9c71a9cf4e91b21a603d133309c6e2fd984debca375843723261778cb03f884efd52a40780b0849314e434c2946", - "msg": "f7165bbe5a34bded7bf9816aa2a19e58571266285121c8a8bb4e4d4c57e09df3f7ef5606d8a1d799bb10d9674f2a0fd7ad96b07903279c88cbcdc6d9131eb0f2", - "ct": "bda14f9fcf8689fa61a671b154762d8f3d8d1d3ec55c114f3bf9aade444b448560986a4f6b0fedcbb85a9544845347063ae1471dc7e7f7a9559947d237ffaccd", - "tag": "f8062e748a97fb59b6ff71791f0c714b", - "result": "valid" - }, - { - "tcId": 357, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "32f6964e488f4dbc3e42fdb8871611634f61ce479d56a5c7d8f7bdf30535e566", - "iv": "1adb78858353b90b89dc7710557b4d15d9ee5921cfec230516ab50372ef629b7", - "aad": "f3a5a8d99194955214cc5e484c41c1c084c23fe7d31709ed8674a268682f82da1c11c195f801168790e6d1deb46b57c65a4f57204d70c1bac1ca179fd4571689d0", - "msg": "61da2ca026a25cc1913de40ec96713979c2ecd381791bca1c1116b488f6004d15f0ddabf6dc890f89ef60059abd999d6f92b275cbdb664cc339c078fbffbe047", - "ct": "a8fc671ffcfc9f10e38e6520b921ee62bfcc980f633a95998cd9eaf1a8c9287cdb0add5c4be05ef2e0257fe0371f24892000e98d54d1575581d0c8ff547af286", - "tag": "6a62555e26d5586fe473621cdb41763f", - "result": "valid" - }, - { - "tcId": 358, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "0cb08f11518e427236f3a7d50e472acb75a6afaa100ae5f7f8afbed123dc1751", - "iv": "78b4748f8df4fdef2d68b3b3167126d56ccfa3f10a4b3e5da8d4c6739c8acc4a", - "aad": "e234a02fe07e8ed9ac709e5a8b03e38924e21e782fd01954137d3ce89f04333325956739f6d5a33b382bdcd134d53583d904fde28fb0f6380236455ba66112", - "msg": "0b87c210f5b58e715573cd7dc5e37164be9f19e1b07b25f6fdb3553054160c28871e343719da5ac53f101dd3cac2bc5d3744f6084c1362fc70ee414523dcf7a150", - "ct": "d751764554ac332abba222b1bb7c2e94eda2157fbafaeb4549d6ecb2dab3bac27a65303fea5e03e36a6e59968c858dce54964513d43543fd1c8cb4db55826c5c48", - "tag": "f2986dee7f816f67183ccf15ed22b069", - "result": "valid" - }, - { - "tcId": 359, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "14ad8b75997a56d07ce7b7eaee75d1904c676d60a34462ac56006993b802a20f", - "iv": "5e96776080ad737766db3d261c90168c75400889f0221c47f52d37fb43bdb907", - "aad": "d9e814674d25a44ff03643fddf4df462023f074af5303be4fb5b0bb7d633fe8bc447de7ebfd76a4ea917e2542743dc99458f6f3e24d5cf85b3d47f4e785b9aac", - "msg": "a184473408b74247637a2c18b27910da54a10197c4d02ae9b5e7c42e81a813775c8f07cfd78fcbff0936aa63bc79c9b79827ac64652b6ae5a06453e91eb00c0859", - "ct": "10711835ce941eb614ef691ff711f14ad616f2497fd94e3f56367a31f28ccb72848b956ed74cd69398bd058855f7148b8a02e63f616b29bf151a045b50e5d30092", - "tag": "bbc4bf99be4208b6fee04d53dc6b226f", - "result": "valid" - }, - { - "tcId": 360, - "comment": "", - "flags": [ - "Pseudorandom" - ], - "key": "69edf9019873e62f40636019cf37de0e8cdd854b3e30c847383827ec8c33fc88", - "iv": "5bdefc0d7fee5bb50db146eaf0fe68e949815678bf33ff226d91f8facd6ffb10", - "aad": "7aa0609c2769cb30e9410443a0dfe7cfc2944fd595ea8c47d351213c4860cd8d3dab4793e9749fd8c1df46e8056bb0f4dcf163ef342527e51e010fe1825f6f855f", - "msg": "80de6b3b12d1e55802bede2938d2ab0446c2153ddbc97d1f94820876a15223e0c1b63d98dd5dda10bbd74f1deda36648ada26957e95af5de06420ec1d998637ca1", - "ct": "03672eb551db81d1f0e6ade7385f31f8d46fdd1715cad05dc094ecfa0f800b626b9e553d80fe27c06fc678d58f045140bfd80fbf015b34f59d2b009932eb7aa6d7", - "tag": "0f0dda4c69e7b438feb3f3c1f8f22d92", - "result": "valid" - }, - { - "tcId": 361, - "comment": "Flipped bit 0 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c7b12b15690388d266072201f75331e5", - "result": "invalid" - }, - { - "tcId": 362, - "comment": "Flipped bit 0 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c37c28616f955e1fa01293613a913938", - "result": "invalid" - }, - { - "tcId": 363, - "comment": "Flipped bit 0 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e09ceeb3018394743af4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 364, - "comment": "Flipped bit 0 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "03a4dae23e30303ef8884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 365, - "comment": "Flipped bit 1 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c4b12b15690388d266072201f75331e5", - "result": "invalid" - }, - { - "tcId": 366, - "comment": "Flipped bit 1 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c07c28616f955e1fa01293613a913938", - "result": "invalid" - }, - { - "tcId": 367, - "comment": "Flipped bit 1 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e39ceeb3018394743af4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 368, - "comment": "Flipped bit 1 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "00a4dae23e30303ef8884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 369, - "comment": "Flipped bit 7 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "46b12b15690388d266072201f75331e5", - "result": "invalid" - }, - { - "tcId": 370, - "comment": "Flipped bit 7 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "427c28616f955e1fa01293613a913938", - "result": "invalid" - }, - { - "tcId": 371, - "comment": "Flipped bit 7 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "619ceeb3018394743af4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 372, - "comment": "Flipped bit 7 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "82a4dae23e30303ef8884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 373, - "comment": "Flipped bit 8 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b02b15690388d266072201f75331e5", - "result": "invalid" - }, - { - "tcId": 374, - "comment": "Flipped bit 8 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27d28616f955e1fa01293613a913938", - "result": "invalid" - }, - { - "tcId": 375, - "comment": "Flipped bit 8 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19deeb3018394743af4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 376, - "comment": "Flipped bit 8 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a5dae23e30303ef8884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 377, - "comment": "Flipped bit 31 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b95690388d266072201f75331e5", - "result": "invalid" - }, - { - "tcId": 378, - "comment": "Flipped bit 31 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28e16f955e1fa01293613a913938", - "result": "invalid" - }, - { - "tcId": 379, - "comment": "Flipped bit 31 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19cee33018394743af4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 380, - "comment": "Flipped bit 31 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4da623e30303ef8884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 381, - "comment": "Flipped bit 32 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15680388d266072201f75331e5", - "result": "invalid" - }, - { - "tcId": 382, - "comment": "Flipped bit 32 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616e955e1fa01293613a913938", - "result": "invalid" - }, - { - "tcId": 383, - "comment": "Flipped bit 32 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3008394743af4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 384, - "comment": "Flipped bit 32 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23f30303ef8884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 385, - "comment": "Flipped bit 33 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b156b0388d266072201f75331e5", - "result": "invalid" - }, - { - "tcId": 386, - "comment": "Flipped bit 33 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616d955e1fa01293613a913938", - "result": "invalid" - }, - { - "tcId": 387, - "comment": "Flipped bit 33 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3038394743af4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 388, - "comment": "Flipped bit 33 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23c30303ef8884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 389, - "comment": "Flipped bit 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b156903885266072201f75331e5", - "result": "invalid" - }, - { - "tcId": 390, - "comment": "Flipped bit 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e9fa01293613a913938", - "result": "invalid" - }, - { - "tcId": 391, - "comment": "Flipped bit 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394f43af4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 392, - "comment": "Flipped bit 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e3030bef8884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 393, - "comment": "Flipped bit 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d267072201f75331e5", - "result": "invalid" - }, - { - "tcId": 394, - "comment": "Flipped bit 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1fa11293613a913938", - "result": "invalid" - }, - { - "tcId": 395, - "comment": "Flipped bit 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394743bf4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 396, - "comment": "Flipped bit 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303ef9884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 397, - "comment": "Flipped bit 71 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d2e6072201f75331e5", - "result": "invalid" - }, - { - "tcId": 398, - "comment": "Flipped bit 71 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1f201293613a913938", - "result": "invalid" - }, - { - "tcId": 399, - "comment": "Flipped bit 71 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb301839474baf4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 400, - "comment": "Flipped bit 71 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303e78884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 401, - "comment": "Flipped bit 77 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d266272201f75331e5", - "result": "invalid" - }, - { - "tcId": 402, - "comment": "Flipped bit 77 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1fa03293613a913938", - "result": "invalid" - }, - { - "tcId": 403, - "comment": "Flipped bit 77 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394743ad4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 404, - "comment": "Flipped bit 77 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303ef8a84f20502a7b47", - "result": "invalid" - }, - { - "tcId": 405, - "comment": "Flipped bit 80 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d266072301f75331e5", - "result": "invalid" - }, - { - "tcId": 406, - "comment": "Flipped bit 80 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1fa01292613a913938", - "result": "invalid" - }, - { - "tcId": 407, - "comment": "Flipped bit 80 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394743af4e80ac6d06125", - "result": "invalid" - }, - { - "tcId": 408, - "comment": "Flipped bit 80 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303ef8884e20502a7b47", - "result": "invalid" - }, - { - "tcId": 409, - "comment": "Flipped bit 96 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d266072201f65331e5", - "result": "invalid" - }, - { - "tcId": 410, - "comment": "Flipped bit 96 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1fa01293613b913938", - "result": "invalid" - }, - { - "tcId": 411, - "comment": "Flipped bit 96 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394743af4e90ac7d06125", - "result": "invalid" - }, - { - "tcId": 412, - "comment": "Flipped bit 96 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303ef8884f20512a7b47", - "result": "invalid" - }, - { - "tcId": 413, - "comment": "Flipped bit 97 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d266072201f55331e5", - "result": "invalid" - }, - { - "tcId": 414, - "comment": "Flipped bit 97 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1fa012936138913938", - "result": "invalid" - }, - { - "tcId": 415, - "comment": "Flipped bit 97 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394743af4e90ac4d06125", - "result": "invalid" - }, - { - "tcId": 416, - "comment": "Flipped bit 97 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303ef8884f20522a7b47", - "result": "invalid" - }, - { - "tcId": 417, - "comment": "Flipped bit 103 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d266072201775331e5", - "result": "invalid" - }, - { - "tcId": 418, - "comment": "Flipped bit 103 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1fa0129361ba913938", - "result": "invalid" - }, - { - "tcId": 419, - "comment": "Flipped bit 103 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394743af4e90a46d06125", - "result": "invalid" - }, - { - "tcId": 420, - "comment": "Flipped bit 103 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303ef8884f20d02a7b47", - "result": "invalid" - }, - { - "tcId": 421, - "comment": "Flipped bit 120 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d266072201f75331e4", - "result": "invalid" - }, - { - "tcId": 422, - "comment": "Flipped bit 120 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1fa01293613a913939", - "result": "invalid" - }, - { - "tcId": 423, - "comment": "Flipped bit 120 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394743af4e90ac6d06124", - "result": "invalid" - }, - { - "tcId": 424, - "comment": "Flipped bit 120 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303ef8884f20502a7b46", - "result": "invalid" - }, - { - "tcId": 425, - "comment": "Flipped bit 121 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d266072201f75331e7", - "result": "invalid" - }, - { - "tcId": 426, - "comment": "Flipped bit 121 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1fa01293613a91393a", - "result": "invalid" - }, - { - "tcId": 427, - "comment": "Flipped bit 121 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394743af4e90ac6d06127", - "result": "invalid" - }, - { - "tcId": 428, - "comment": "Flipped bit 121 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303ef8884f20502a7b45", - "result": "invalid" - }, - { - "tcId": 429, - "comment": "Flipped bit 126 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d266072201f75331a5", - "result": "invalid" - }, - { - "tcId": 430, - "comment": "Flipped bit 126 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1fa01293613a913978", - "result": "invalid" - }, - { - "tcId": 431, - "comment": "Flipped bit 126 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394743af4e90ac6d06165", - "result": "invalid" - }, - { - "tcId": 432, - "comment": "Flipped bit 126 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303ef8884f20502a7b07", - "result": "invalid" - }, - { - "tcId": 433, - "comment": "Flipped bit 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b15690388d266072201f7533165", - "result": "invalid" - }, - { - "tcId": 434, - "comment": "Flipped bit 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e1fa01293613a9139b8", - "result": "invalid" - }, - { - "tcId": 435, - "comment": "Flipped bit 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394743af4e90ac6d061a5", - "result": "invalid" - }, - { - "tcId": 436, - "comment": "Flipped bit 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e30303ef8884f20502a7bc7", - "result": "invalid" - }, - { - "tcId": 437, - "comment": "Flipped bits 0 and 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c7b12b15690388d267072201f75331e5", - "result": "invalid" - }, - { - "tcId": 438, - "comment": "Flipped bits 0 and 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c37c28616f955e1fa11293613a913938", - "result": "invalid" - }, - { - "tcId": 439, - "comment": "Flipped bits 0 and 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e09ceeb3018394743bf4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 440, - "comment": "Flipped bits 0 and 64 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "03a4dae23e30303ef9884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 441, - "comment": "Flipped bits 31 and 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b956903885266072201f75331e5", - "result": "invalid" - }, - { - "tcId": 442, - "comment": "Flipped bits 31 and 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28e16f955e9fa01293613a913938", - "result": "invalid" - }, - { - "tcId": 443, - "comment": "Flipped bits 31 and 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19cee33018394f43af4e90ac6d06125", - "result": "invalid" - }, - { - "tcId": 444, - "comment": "Flipped bits 31 and 63 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4da623e3030bef8884f20502a7b47", - "result": "invalid" - }, - { - "tcId": 445, - "comment": "Flipped bits 63 and 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c6b12b156903885266072201f7533165", - "result": "invalid" - }, - { - "tcId": 446, - "comment": "Flipped bits 63 and 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c27c28616f955e9fa01293613a9139b8", - "result": "invalid" - }, - { - "tcId": 447, - "comment": "Flipped bits 63 and 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e19ceeb3018394f43af4e90ac6d061a5", - "result": "invalid" - }, - { - "tcId": 448, - "comment": "Flipped bits 63 and 127 in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "02a4dae23e3030bef8884f20502a7bc7", - "result": "invalid" - }, - { - "tcId": 449, - "comment": "all bits of tag flipped", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "394ed4ea96fc772d99f8ddfe08acce1a", - "result": "invalid" - }, - { - "tcId": 450, - "comment": "all bits of tag flipped", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "3d83d79e906aa1e05fed6c9ec56ec6c7", - "result": "invalid" - }, - { - "tcId": 451, - "comment": "all bits of tag flipped", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "1e63114cfe7c6b8bc50b16f5392f9eda", - "result": "invalid" - }, - { - "tcId": 452, - "comment": "all bits of tag flipped", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "fd5b251dc1cfcfc10777b0dfafd584b8", - "result": "invalid" - }, - { - "tcId": 453, - "comment": "Tag changed to all zero", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "00000000000000000000000000000000", - "result": "invalid" - }, - { - "tcId": 454, - "comment": "Tag changed to all zero", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "00000000000000000000000000000000", - "result": "invalid" - }, - { - "tcId": 455, - "comment": "Tag changed to all zero", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "00000000000000000000000000000000", - "result": "invalid" - }, - { - "tcId": 456, - "comment": "Tag changed to all zero", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "00000000000000000000000000000000", - "result": "invalid" - }, - { - "tcId": 457, - "comment": "tag changed to all 1", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "ffffffffffffffffffffffffffffffff", - "result": "invalid" - }, - { - "tcId": 458, - "comment": "tag changed to all 1", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "ffffffffffffffffffffffffffffffff", - "result": "invalid" - }, - { - "tcId": 459, - "comment": "tag changed to all 1", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "ffffffffffffffffffffffffffffffff", - "result": "invalid" - }, - { - "tcId": 460, - "comment": "tag changed to all 1", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "ffffffffffffffffffffffffffffffff", - "result": "invalid" - }, - { - "tcId": 461, - "comment": "msbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "4631ab95e9830852e687a28177d3b165", - "result": "invalid" - }, - { - "tcId": 462, - "comment": "msbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "42fca8e1ef15de9f209213e1ba11b9b8", - "result": "invalid" - }, - { - "tcId": 463, - "comment": "msbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "611c6e33810314f4ba74698a4650e1a5", - "result": "invalid" - }, - { - "tcId": 464, - "comment": "msbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "82245a62beb0b0be7808cfa0d0aafbc7", - "result": "invalid" - }, - { - "tcId": 465, - "comment": "lsbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "", - "ct": "", - "tag": "c7b02a14680289d367062300f65230e4", - "result": "invalid" - }, - { - "tcId": 466, - "comment": "lsbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e", - "ct": "b6c1000669eb0e577bf103d13d915b", - "tag": "c37d29606e945f1ea11392603b903839", - "result": "invalid" - }, - { - "tcId": 467, - "comment": "lsbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f", - "ct": "b6c1000669eb0e577bf103d13d915bb5", - "tag": "e09defb2008295753bf5e80bc7d16024", - "result": "invalid" - }, - { - "tcId": 468, - "comment": "lsbs changed in tag", - "flags": [ - "ModifiedTag" - ], - "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "iv": "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", - "aad": "", - "msg": "000102030405060708090a0b0c0d0e0f10", - "ct": "b6c1000669eb0e577bf103d13d915bb5b0", - "tag": "03a5dbe33f31313ff9894e21512b7a46", - "result": "invalid" - }, - { - "tcId": 469, - "comment": "tag collision", - "flags": [ - "TagCollision_1" - ], - "key": "0000000000000000000000000000000000000000000000000000000000000000", - "iv": "0000000000000000000000000000000000000000000000000000000000000000", - "aad": "", - "msg": "0000000000000000000000000000000053a6730dde888f93419741933cc00b230ffe14cec4e10f2b994525b7db4b082928d95f897cfd97d6baf42affb23e4a0d985c7f0d7187d4a53d1a5b9454b0db25a9f895536559636209b2cf9853b4d6152b8e23423439801580063e27b6327291", - "ct": "b98f03a947807713d75a4fff9fc277a6e1200353b247b91a353aa86c6990afe637989075c7427cba63be4c77fbb26e9b8f3dd64af30bb16c23a731709ce6c498d5af4608c51aa3daf27df7090a75ae104c9bafdf7691588f271dbc26ecd9546adebfe6045e0f6c43a98e93853b0068a6", - "tag": "b68e3034ad6c9007260341bb24be31d0", - "result": "valid" - }, - { - "tcId": 470, - "comment": "tag collision", - "flags": [ - "TagCollision_1" - ], - "key": "0000000000000000000000000000000000000000000000000000000000000000", - "iv": "0000000000000000000000000000000000000000000000000000000000000000", - "aad": "", - "msg": "01010101010101010101010101010101e12f8ced9549095fab9543e010b645d60f4976db2814b1da1908dbf3618a9a7e6e56ceaf59cc7bb8799ce4035dbf6c691239520dad4f8ecdb381a45198dad59ba399b20a887aa56c290cc5f58bee0a2e98243bac8dbc5ff2389c569cbbd0f7ec", - "ct": "b88e02a846817612d65b4efe9ec376a753a9fcb3f9863fd6df38aa1f45e6e1136dbdd4c3c3716ced7aeb0d2e9b009ace95b3723cadfbbd26b6737cec382598879669376c35cd397c43b5f90665242a2e868cb0979bab9fcd8b00dd8d1d48df6456f33e8f554a2490119695c25c2f4bf8", - "tag": "b68e3034ad6c9007260341bb24be31d0", - "result": "valid" - }, - { - "tcId": 471, - "comment": "tag collision", - "flags": [ - "TagCollision_1" - ], - "key": "0000000000000000000000000000000000000000000000000000000000000000", - "iv": "0000000000000000000000000000000000000000000000000000000000000000", - "aad": "", - "msg": "02020202020202020202020202020202985c4ae6507083b0f894168f3466157e6ebbabdae9959f3fd1ec7cc7b6a2421b0b3f83592e5a8747c86d4eba9d0a60cbf98367236b7149b8717e9a69355bbae7d3df84da19e620e14c09c62525aa93ccbd1501be867844aae814396ef0ed127c", - "ct": "bb8d01ab45827511d5584dfd9dc075a42ada3ab83cbfb5398c39ff706136b1bb7fcd60ef572b95db8a994187a6e4674a674e6148d9732c826d8a9cf6edfab020ceffb920149e1ea916cbad2f8d3bd21d11249a97353ee48331007ed6d3c4ac9124019417ac1af2e0ed424a8db7fef031", - "tag": "b68e3034ad6c9007260341bb24be31d0", - "result": "valid" - }, - { - "tcId": 472, - "comment": "tag collision", - "flags": [ - "TagCollision_1" - ], - "key": "0000000000000000000000000000000000000000000000000000000000000000", - "iv": "0000000000000000000000000000000000000000000000000000000000000000", - "aad": "", - "msg": "030303030303030303030303030303037ef37e0bf9611ddbee742411835dd9c5500d8d7e4978c80938c046ee590c69010519bb8d1f5c13c78d3908b309213813a2937dfb67857f035eeb12d2c3f934f72b3482aed8959296aa9590afd2dc34270e815b78a6734137a5684b5abcdb2eb5", - "ct": "ba8c00aa44837410d4594cfc9cc174a5cc750e5595ae2b529ad9cdeed60d7d0093a0e247ca89b7faf23133b568daffd9aeb87afeb4c2fbb8e42812778b2357256d660f54f19290174c55dcaf12b7fa74be82e3c12353f21d324b310cefe48daf8af66a65ffd58f06396df60be2e67d82", - "tag": "b68e3034ad6c9007260341bb24be31d0", - "result": "valid" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/test/wycheproof/aegis256_test.json.zst b/src/test/wycheproof/aegis256_test.json.zst new file mode 100644 index 0000000000000000000000000000000000000000..f580287dfa0ab8c2692371a9c88c6f259f80d203 GIT binary patch literal 92234 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≷BM(T)YDzi~WECr<0=s6B!#O-M-1*Hytm4 z@nKQHb{4}y4Ayx8+?^ei5C8{%l?M_qd2UOWFgTfH~^>k<;7R_ewO`8Qkds24G`oY z!n(9$AAj&?*lVejn=!i#8237#+P?L8Np@+5t%#^kB#%Fv?6$rt)LL~f%}AbV>QcDG zx>3kr>M1Cnxdw$?Sj|wQK1G&?=Zupw5cW}XeBoUWQdcxz+{hYi=n*a;V||XImhNBibt)QzQ|{(f!1M!13fsYDVQfLMMIf|Oo^j|}6>_jchoa9j3!y)7a;yH1xjTo9XU#ZP% zEBm;PM1qkG<<&m+vb#pk>%z8OdsaXW6N}p+o4X`qA&)k9`(TUsYZyp9_0Sj{67p9* zSO!Mm2>v5$a_Ou^ixc-z>f>2qjl_yU{r(sZENsYvUelQn&!c(@T)!eHGz@)p&^EQz zfgshn?A+;A6!XWg;0Sw2acVBrIibI6ZgME9+{|-e*v~V~pAOs1ta9Tg)~M?`bp#PpPv2jX9|8$X>$ zj``hqo=x~M)Od%zl*Q;MSZQH10a@cPbW09|4!oRtRYc`5jY_#Er{Vo;EtI36>$woU zYt2?|gjl$0fpoqR3c&I%y~xFsSd0dTP7H0<{T((gA&K`1dA+)uJHYJmB~lRzVHiwU zk~0Q?h{3T}{#Hx5WUqb5t_a|0_g?kr{>YJ|M*H`IpWBAbrqIjIuX{!mfc)^zSsi}C zo`8?Z(c}S|+Ap=asXIf0gc*l8JG;Wsm6d?HuyEkKg_)oqOkEw;p+QZi?d!doF@>+1 z?sAkZz$vPVDda95od8e0!;Z|U1j};-hd?_sh%!p6g&gEx7y|IhB<`lm8{|!!BVvx9MSu+tNH4loMfR2&DHOD`HCEPcQ1|@ONQG^8$f