From d26f1faca6eaf4815207ebff0d89a8edcec13a2f Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Thu, 28 Feb 2019 00:02:08 -0800 Subject: [PATCH 1/5] Fix thread name test, make sure it can't pass when it's getting the name of the wrong thread --- test/cpp-utils/thread/debugging_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/test/cpp-utils/thread/debugging_test.cpp b/test/cpp-utils/thread/debugging_test.cpp index 7df169ef..ec4f1e3b 100644 --- a/test/cpp-utils/thread/debugging_test.cpp +++ b/test/cpp-utils/thread/debugging_test.cpp @@ -53,6 +53,7 @@ TEST(ThreadDebuggingTest_ThreadName, givenChildThread_whenGettingFromOutside_the }); nameIsSet.wait(); + set_thread_name("outer_thread_name"); // just to make sure the next line doesn't read the outer thread name string name = get_thread_name(&child); EXPECT_EQ("my_thread_name", name); From a09d38e18272cc8b170649b6758f350dbe4c2645 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Thu, 28 Feb 2019 00:15:25 -0800 Subject: [PATCH 2/5] Don't change locale on musl since it would crash --- src/fspp/fuse/Fuse.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/fspp/fuse/Fuse.cpp b/src/fspp/fuse/Fuse.cpp index 13d7497b..dc454fcc 100644 --- a/src/fspp/fuse/Fuse.cpp +++ b/src/fspp/fuse/Fuse.cpp @@ -266,8 +266,11 @@ void Fuse::_logUnknownException() { } void Fuse::run(const bf::path &mountdir, const vector &fuseOptions) { +#if defined(__GLIBC__)|| defined(__APPLE__) || defined(_MSC_VER) // Avoid encoding errors for non-utf8 characters, see https://github.com/cryfs/cryfs/issues/247 + // this is ifdef'd out for non-glibc linux, because musl doesn't handle this correctly. bf::path::imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16())); +#endif _mountdir = mountdir; From 7b742f41e30f9234e4e1dc0833be5be407fe787a Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Wed, 27 Feb 2019 16:36:30 -0800 Subject: [PATCH 3/5] Update to cryptopp 8.1 --- vendor/README | 7 +- vendor/cryptopp/vendor_cryptopp/.appveyor.yml | 54 - .../cryptopp/vendor_cryptopp/.gitattributes | 1 - .../vendor_cryptopp/.github/issue_template.md | 15 - vendor/cryptopp/vendor_cryptopp/.gitignore | 7 + vendor/cryptopp/vendor_cryptopp/.travis.yml | 149 - vendor/cryptopp/vendor_cryptopp/Doxyfile | 2 +- vendor/cryptopp/vendor_cryptopp/Filelist.txt | 17 +- vendor/cryptopp/vendor_cryptopp/GNUmakefile | 114 +- .../vendor_cryptopp/GNUmakefile-cross | 41 +- vendor/cryptopp/vendor_cryptopp/History.txt | 19 +- vendor/cryptopp/vendor_cryptopp/License.txt | 33 +- vendor/cryptopp/vendor_cryptopp/Readme.txt | 41 +- .../TestScripts/cryptest-autotools.sh | 8 +- .../TestScripts/cryptest-symbols.sh | 21 +- .../vendor_cryptopp/TestScripts/cryptest.sh | 3 + .../vendor_cryptopp/TestScripts/setenv-ios.sh | 13 +- .../vendor_cryptopp/TestVectors/aead.txt | 6 + .../vendor_cryptopp/TestVectors/all.txt | 76 +- .../TestVectors/chacha20poly1305.txt | 9439 +++++++++++++++++ .../TestVectors/chacha_tls.txt | 360 +- .../TestVectors/poly1305_tls.txt | 1687 +++ .../TestVectors/poly1305aes.txt | 2229 ++++ .../vendor_cryptopp/TestVectors/shake.txt | 1206 +++ .../vendor_cryptopp/TestVectors/xchacha.txt | 75 + vendor/cryptopp/vendor_cryptopp/adv_simd.h | 122 +- vendor/cryptopp/vendor_cryptopp/aria_simd.cpp | 7 +- vendor/cryptopp/vendor_cryptopp/arm_simd.h | 189 + vendor/cryptopp/vendor_cryptopp/authenc.cpp | 14 +- vendor/cryptopp/vendor_cryptopp/authenc.h | 2 +- vendor/cryptopp/vendor_cryptopp/bench1.cpp | 6 +- vendor/cryptopp/vendor_cryptopp/bench2.cpp | 4 + .../cryptopp/vendor_cryptopp/blake2b_simd.cpp | 5 +- .../cryptopp/vendor_cryptopp/blake2s_simd.cpp | 7 +- vendor/cryptopp/vendor_cryptopp/ccm.h | 2 +- vendor/cryptopp/vendor_cryptopp/chacha.cpp | 636 +- vendor/cryptopp/vendor_cryptopp/chacha.h | 178 +- .../cryptopp/vendor_cryptopp/chacha_simd.cpp | 23 +- .../cryptopp/vendor_cryptopp/chachapoly.cpp | 207 + vendor/cryptopp/vendor_cryptopp/chachapoly.h | 320 + vendor/cryptopp/vendor_cryptopp/cham.h | 12 +- vendor/cryptopp/vendor_cryptopp/cham_simd.cpp | 15 +- vendor/cryptopp/vendor_cryptopp/config.h | 48 +- vendor/cryptopp/vendor_cryptopp/cpu.cpp | 15 +- vendor/cryptopp/vendor_cryptopp/crc_simd.cpp | 3 +- .../cryptopp/vendor_cryptopp/cryptest.nmake | 212 +- vendor/cryptopp/vendor_cryptopp/cryptest.sh | 3 + vendor/cryptopp/vendor_cryptopp/cryptlib.h | 62 +- .../cryptopp/vendor_cryptopp/cryptlib.vcxproj | 9 +- .../vendor_cryptopp/cryptlib.vcxproj.filters | 29 +- vendor/cryptopp/vendor_cryptopp/cryptopp.rc | 8 +- vendor/cryptopp/vendor_cryptopp/datatest.cpp | 2 +- vendor/cryptopp/vendor_cryptopp/donna.h | 35 +- vendor/cryptopp/vendor_cryptopp/donna_32.cpp | 128 +- vendor/cryptopp/vendor_cryptopp/donna_64.cpp | 136 +- vendor/cryptopp/vendor_cryptopp/donna_sse.cpp | 1 + vendor/cryptopp/vendor_cryptopp/eccrypto.cpp | 7 +- vendor/cryptopp/vendor_cryptopp/fhmqv.h | 1 + vendor/cryptopp/vendor_cryptopp/fipstest.cpp | 20 +- vendor/cryptopp/vendor_cryptopp/gcm.h | 2 +- vendor/cryptopp/vendor_cryptopp/gcm_simd.cpp | 308 +- vendor/cryptopp/vendor_cryptopp/gf2n.cpp | 126 +- vendor/cryptopp/vendor_cryptopp/gf2n.h | 19 +- vendor/cryptopp/vendor_cryptopp/gf2n_simd.cpp | 610 ++ vendor/cryptopp/vendor_cryptopp/hashfwd.h | 3 + vendor/cryptopp/vendor_cryptopp/hmqv.h | 1 + vendor/cryptopp/vendor_cryptopp/integer.cpp | 66 +- vendor/cryptopp/vendor_cryptopp/keccak.cpp | 10 +- vendor/cryptopp/vendor_cryptopp/keccak.h | 77 +- .../cryptopp/vendor_cryptopp/keccak_core.cpp | 261 + .../cryptopp/vendor_cryptopp/keccak_simd.cpp | 2678 +++++ vendor/cryptopp/vendor_cryptopp/keccakc.cpp | 258 - vendor/cryptopp/vendor_cryptopp/keccakc.h | 13 - vendor/cryptopp/vendor_cryptopp/lea.h | 4 +- vendor/cryptopp/vendor_cryptopp/lea_simd.cpp | 35 +- vendor/cryptopp/vendor_cryptopp/misc.cpp | 7 +- vendor/cryptopp/vendor_cryptopp/misc.h | 178 +- vendor/cryptopp/vendor_cryptopp/naclite.h | 2 +- vendor/cryptopp/vendor_cryptopp/neon_simd.cpp | 5 +- vendor/cryptopp/vendor_cryptopp/osrng.cpp | 6 +- vendor/cryptopp/vendor_cryptopp/panama.h | 1 + vendor/cryptopp/vendor_cryptopp/poly1305.cpp | 403 +- vendor/cryptopp/vendor_cryptopp/poly1305.h | 160 +- vendor/cryptopp/vendor_cryptopp/ppc_simd.h | 363 +- vendor/cryptopp/vendor_cryptopp/pubkey.h | 2 +- vendor/cryptopp/vendor_cryptopp/rdrand.cpp | 4 +- vendor/cryptopp/vendor_cryptopp/regtest1.cpp | 3 + vendor/cryptopp/vendor_cryptopp/regtest2.cpp | 4 + vendor/cryptopp/vendor_cryptopp/regtest3.cpp | 4 + .../vendor_cryptopp/rijndael_simd.cpp | 12 +- vendor/cryptopp/vendor_cryptopp/salsa.cpp | 17 +- vendor/cryptopp/vendor_cryptopp/salsa.h | 2 + vendor/cryptopp/vendor_cryptopp/scrypt.cpp | 41 +- vendor/cryptopp/vendor_cryptopp/secblock.h | 12 +- vendor/cryptopp/vendor_cryptopp/seckey.h | 4 +- vendor/cryptopp/vendor_cryptopp/setenv-ios.sh | 13 +- vendor/cryptopp/vendor_cryptopp/sha.cpp | 11 +- vendor/cryptopp/vendor_cryptopp/sha3.cpp | 10 +- vendor/cryptopp/vendor_cryptopp/sha3.h | 92 +- vendor/cryptopp/vendor_cryptopp/sha_simd.cpp | 23 +- vendor/cryptopp/vendor_cryptopp/shake.cpp | 85 + vendor/cryptopp/vendor_cryptopp/shake.h | 163 + .../cryptopp/vendor_cryptopp/simeck_simd.cpp | 4 +- vendor/cryptopp/vendor_cryptopp/simon.h | 8 +- .../vendor_cryptopp/simon128_simd.cpp | 21 +- .../cryptopp/vendor_cryptopp/simon64_simd.cpp | 13 +- vendor/cryptopp/vendor_cryptopp/sm4.h | 4 +- vendor/cryptopp/vendor_cryptopp/sm4_simd.cpp | 8 +- vendor/cryptopp/vendor_cryptopp/speck.h | 8 +- .../vendor_cryptopp/speck128_simd.cpp | 21 +- .../cryptopp/vendor_cryptopp/speck64_simd.cpp | 13 +- vendor/cryptopp/vendor_cryptopp/stdcpp.h | 9 +- vendor/cryptopp/vendor_cryptopp/strciphr.h | 15 +- vendor/cryptopp/vendor_cryptopp/test.cpp | 113 +- vendor/cryptopp/vendor_cryptopp/trap.h | 99 +- vendor/cryptopp/vendor_cryptopp/tweetnacl.cpp | 2 +- vendor/cryptopp/vendor_cryptopp/validat0.cpp | 313 +- vendor/cryptopp/vendor_cryptopp/validat1.cpp | 22 +- vendor/cryptopp/vendor_cryptopp/validat3.cpp | 7 +- vendor/cryptopp/vendor_cryptopp/validat4.cpp | 7 + vendor/cryptopp/vendor_cryptopp/validat5.cpp | 140 +- vendor/cryptopp/vendor_cryptopp/validat7.cpp | 57 +- vendor/cryptopp/vendor_cryptopp/validate.h | 84 +- vendor/cryptopp/vendor_cryptopp/vmac.cpp | 2 +- vendor/cryptopp/vendor_cryptopp/vs2005.zip | Bin 12489 -> 12532 bytes vendor/cryptopp/vendor_cryptopp/xed25519.cpp | 90 +- vendor/cryptopp/vendor_cryptopp/xed25519.h | 125 +- 127 files changed, 23222 insertions(+), 2152 deletions(-) delete mode 100644 vendor/cryptopp/vendor_cryptopp/.appveyor.yml delete mode 100644 vendor/cryptopp/vendor_cryptopp/.gitattributes delete mode 100644 vendor/cryptopp/vendor_cryptopp/.github/issue_template.md delete mode 100644 vendor/cryptopp/vendor_cryptopp/.travis.yml create mode 100644 vendor/cryptopp/vendor_cryptopp/TestVectors/aead.txt create mode 100644 vendor/cryptopp/vendor_cryptopp/TestVectors/chacha20poly1305.txt create mode 100644 vendor/cryptopp/vendor_cryptopp/TestVectors/poly1305_tls.txt create mode 100644 vendor/cryptopp/vendor_cryptopp/TestVectors/poly1305aes.txt create mode 100644 vendor/cryptopp/vendor_cryptopp/TestVectors/shake.txt create mode 100644 vendor/cryptopp/vendor_cryptopp/TestVectors/xchacha.txt create mode 100644 vendor/cryptopp/vendor_cryptopp/arm_simd.h create mode 100644 vendor/cryptopp/vendor_cryptopp/chachapoly.cpp create mode 100644 vendor/cryptopp/vendor_cryptopp/chachapoly.h create mode 100644 vendor/cryptopp/vendor_cryptopp/gf2n_simd.cpp create mode 100644 vendor/cryptopp/vendor_cryptopp/keccak_core.cpp create mode 100644 vendor/cryptopp/vendor_cryptopp/keccak_simd.cpp delete mode 100644 vendor/cryptopp/vendor_cryptopp/keccakc.cpp delete mode 100644 vendor/cryptopp/vendor_cryptopp/keccakc.h create mode 100644 vendor/cryptopp/vendor_cryptopp/shake.cpp create mode 100644 vendor/cryptopp/vendor_cryptopp/shake.h diff --git a/vendor/README b/vendor/README index aadcf953..4318b65a 100644 --- a/vendor/README +++ b/vendor/README @@ -2,11 +2,6 @@ This directory contains external projects, taken from the following locations: googletest: https://github.com/google/googletest/tree/4e4df226fc197c0dda6e37f5c8c3845ca1e73a49 - changed: added NOLINT comment as workaround for clang-tidy warning https://github.com/google/googletest/issues/853 spdlog: https://github.com/gabime/spdlog/tree/v0.16.3/include/spdlog -cryptopp: https://github.com/weidai11/cryptopp/tree/CRYPTOPP_8_0_0 +cryptopp: https://github.com/weidai11/cryptopp/tree/CRYPTOPP_8_1_0 - changed: added CMakeLists.txt and cryptopp-config.cmake from https://github.com/noloader/cryptopp-cmake/tree/CRYPTOPP_8_0_0 - changed: commented out line including winapifamily.h in CMakeLists.txt - - cherry-picked commits to get OpenMP for scrypt on Windows: - - https://github.com/weidai11/cryptopp/commit/aa043b38a7930725c31a0cd7016986d1c581c573 - - https://github.com/weidai11/cryptopp/commit/672f5c7f3dad8ae12b2d0ce0940ccb7c8e257bf8 - - https://github.com/weidai11/cryptopp/commit/7e96a283a3192d29aac5b60e5b4ff19248f00d9a - - https://github.com/weidai11/cryptopp/commit/ca32b63038d5f7b13e2e00809cd9184a1efe8c24 diff --git a/vendor/cryptopp/vendor_cryptopp/.appveyor.yml b/vendor/cryptopp/vendor_cryptopp/.appveyor.yml deleted file mode 100644 index a297717e..00000000 --- a/vendor/cryptopp/vendor_cryptopp/.appveyor.yml +++ /dev/null @@ -1,54 +0,0 @@ -# Appveyor's documentation is at https://www.appveyor.com/docs/build-phase/, -# and a sample configuration file is at https://www.appveyor.com/docs/appveyor-yml/. -# I have to admit its a bit complex and I don't fully understand it. - -version: 1.0.{build} -clone_depth: 3 -skip_tags: true - -configuration: - -- Debug -- Release - -platform: - -- Win32 -- x64 - -image: - -- Visual Studio 2017 -- Visual Studio 2015 -- Visual Studio 2013 - -environment: - - matrix: - - - BUILD_MODE: MSBuild - -# Disable build through solution file -build: off - -# Build through commands in script below -test_script: - -- ps: >- - - msbuild /t:Build /p:platform="$env:platform" /p:configuration="$env:configuration" cryptlib.vcxproj - - msbuild /t:Build /p:platform="$env:platform" /p:configuration="$env:configuration" cryptest.vcxproj - - msbuild /t:CopyCryptestToRoot cryptest.vcxproj - - .\cryptest.exe v - - .\cryptest.exe tv all - -notifications: - - provider: Email - to: - - cryptopp-build@googlegroups.com - on_build_success: true - on_build_failure: true diff --git a/vendor/cryptopp/vendor_cryptopp/.gitattributes b/vendor/cryptopp/vendor_cryptopp/.gitattributes deleted file mode 100644 index 50ca329f..00000000 --- a/vendor/cryptopp/vendor_cryptopp/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.sh eol=lf diff --git a/vendor/cryptopp/vendor_cryptopp/.github/issue_template.md b/vendor/cryptopp/vendor_cryptopp/.github/issue_template.md deleted file mode 100644 index ed98eabe..00000000 --- a/vendor/cryptopp/vendor_cryptopp/.github/issue_template.md +++ /dev/null @@ -1,15 +0,0 @@ -### Crypto++ Issue Report - -Thanks for taking the time to report an issue. Reporting issues helps us improve stability and reliability for all users, so it is a valuable contribution. - -Please do not ask questions in the bug tracker. Please ask questions on the Crypto++ Users List at http://groups.google.com/forum/#!forum/cryptopp-users. - -There is a wiki page with information on filing useful bug reports. If you have some time please visit http://www.cryptopp.com/wiki/Bug_Report on the wiki. The executive summary is: - -* State the operating system and version (Ubutnu 17 x86_64, Windows 7 Professional x64, etc) -* State the version of the Crypto++ library (Crypto++ 5.6.5, Master, etc) -* State how you built the library (Makefile, Cmake, distro, etc) -* Show a typical command line (the output of the compiler for cryptlib.cpp) -* Show the link command (the output of the linker for libcryptopp.so or cryptest.exe) -* Show the exact error message you are receiving (copy and paste it); or -* Clearly state the undesired behavior (and state the expected behavior) diff --git a/vendor/cryptopp/vendor_cryptopp/.gitignore b/vendor/cryptopp/vendor_cryptopp/.gitignore index 15d93060..b488e960 100644 --- a/vendor/cryptopp/vendor_cryptopp/.gitignore +++ b/vendor/cryptopp/vendor_cryptopp/.gitignore @@ -1,3 +1,10 @@ +#################################### +# C++ generic ignore +# Allows you to use test.cxx and +# avoid getting in the way of things +#################################### +*.cxx + #################### ## Crypto++ specific #################### diff --git a/vendor/cryptopp/vendor_cryptopp/.travis.yml b/vendor/cryptopp/vendor_cryptopp/.travis.yml deleted file mode 100644 index cc5fc8af..00000000 --- a/vendor/cryptopp/vendor_cryptopp/.travis.yml +++ /dev/null @@ -1,149 +0,0 @@ -language: cpp - -os: - - linux - - osx - -dist: trusty -sudo: required - -# OS X only supports one image. Use the latest. -osx_image: xcode9.1 - -git: - depth: 3 - -compiler: - - clang - - gcc - -env: - global: - - BUILD_JOBS=2 - - ANDROID_HOME=$HOME/android/sdk - - ANDROID_NDK=$HOME/android/sdk/ndk-bundle - - ANDROID_SDK_ROOT=$ANDROID_HOME - - ANDROID_NDK_ROOT=$ANDROID_NDK - - matrix: - - BUILD_MODE="all" - - BUILD_MODE="native" - - BUILD_MODE="no-asm" - - BUILD_MODE="debug" - - BUILD_MODE="asan" - - BUILD_MODE="ubsan" - -matrix: - - exclude: - # Skip GCC on OS X entirely - - os: osx - compiler: gcc - # Skip UBsan due to GCC 4.8 - - os: linux - compiler: gcc - env: BUILD_MODE="ubsan" - # Skip UBsan due to Clang 3.4 - - os: osx - compiler: clang - env: BUILD_MODE="ubsan" - - include: - - os: linux - env: - - BUILD_MODE=android - - PLATFORM=armeabi - - os: linux - env: - - BUILD_MODE=android - - PLATFORM=armeabi-v7a - - os: linux - env: - - BUILD_MODE=android - - PLATFORM=armv7a-neon - - os: linux - env: - - BUILD_MODE=android - - PLATFORM=aarch64 - - os: linux - env: - - BUILD_MODE=android - - PLATFORM=mipsel - - os: linux - env: - - BUILD_MODE=android - - PLATFORM=mipsel64 - - os: linux - env: - - BUILD_MODE=android - - PLATFORM=x86 - - os: linux - env: - - BUILD_MODE=android - - PLATFORM=x86_64 - - os: osx - env: - - BUILD_MODE=ios - - PLATFORM=iPhoneOS - - os: osx - env: - - BUILD_MODE=ios - - PLATFORM=WatchOS - - os: osx - env: - - BUILD_MODE=ios - - PLATFORM=AppleTVOS - - os: osx - env: - - BUILD_MODE=ios - - PLATFORM=iPhoneSimulator - - allow_failures: - - os: osx - env: - - BUILD_MODE=ios - - PLATFORM=WatchOS - -before_install: - - | - if [[ "$BUILD_MODE" == "android" ]]; then - TestScripts/install-android.sh - fi - -script: - - | - if [[ "$BUILD_MODE" == "ios" ]]; then - cp ./TestScripts/setenv-ios.sh . - TestScripts/cryptest-ios.sh - elif [[ "$BUILD_MODE" == "android" ]]; then - cp ./TestScripts/setenv-android.sh . - TestScripts/cryptest-android.sh - elif [[ "$BUILD_MODE" == "debug" ]]; then - CXXFLAGS="-DDEBUG -g2 -O1" make -j "$BUILD_JOBS" - ./cryptest.exe v - ./cryptest.exe tv all - else - make "$BUILD_MODE" -j "$BUILD_JOBS" - ./cryptest.exe v - ./cryptest.exe tv all - fi - -# whitelist branches to avoid testing feature branches twice -branches: - only: - - master - -addons: - sonarcloud: false - - coverity_scan: - project: - name: "cryptopp" - build_command: "make -j 2" - -notifications: - email: - recipients: - - cryptopp-build@googlegroups.com - on_success: always # default: change - on_failure: always # default: always diff --git a/vendor/cryptopp/vendor_cryptopp/Doxyfile b/vendor/cryptopp/vendor_cryptopp/Doxyfile index 2d26653f..bc814409 100644 --- a/vendor/cryptopp/vendor_cryptopp/Doxyfile +++ b/vendor/cryptopp/vendor_cryptopp/Doxyfile @@ -41,7 +41,7 @@ PROJECT_NAME = Crypto++ # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 8.0 +PROJECT_NUMBER = 8.1 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/vendor/cryptopp/vendor_cryptopp/Filelist.txt b/vendor/cryptopp/vendor_cryptopp/Filelist.txt index 7c34dc16..5fbc0fdf 100644 --- a/vendor/cryptopp/vendor_cryptopp/Filelist.txt +++ b/vendor/cryptopp/vendor_cryptopp/Filelist.txt @@ -18,6 +18,7 @@ aria.cpp aria_simd.cpp aria.h argnames.h +arm_simd.h asn.cpp asn.h authenc.cpp @@ -55,6 +56,8 @@ chacha.cpp chacha_avx.cpp chacha_simd.cpp chacha.h +chachapoly.cpp +chachapoly.h cham.cpp cham_simd.cpp cham.h @@ -146,6 +149,7 @@ gf256.cpp gf256.h gf2_32.cpp gf2_32.h +gf2n_simd.cpp gf2n.cpp gf2n.h gfpcrypt.cpp @@ -182,9 +186,9 @@ kalynatab.cpp kalyna.cpp kalyna.h keccak.cpp +keccak_core.cpp +keccak_simd.cpp keccak.h -keccakc.cpp -keccakc.h lubyrack.h lea.cpp lea_simd.cpp @@ -305,6 +309,8 @@ sha3.h shacal2.cpp shacal2_simd.cpp shacal2.h +shake.cpp +shake.h shark.cpp shark.h sharkbox.cpp @@ -473,6 +479,7 @@ TestData/x25519v0.dat TestData/x25519v1.dat TestData/xtrdh171.dat TestData/xtrdh342.dat +TestVectors/aead.txt TestVectors/aes.txt TestVectors/all.txt TestVectors/aria.txt @@ -483,6 +490,7 @@ TestVectors/camellia.txt TestVectors/ccm.txt TestVectors/chacha.txt TestVectors/chacha_tls.txt +TestVectors/chacha20poly1305.txt TestVectors/cham.txt TestVectors/cmac.txt TestVectors/dlies.txt @@ -502,8 +510,9 @@ TestVectors/keccak.txt TestVectors/lea.txt TestVectors/mars.txt TestVectors/nr.txt -TestVectors/ocb.txt TestVectors/panama.txt +TestVectors/poly1305aes.txt +TestVectors/poly1305_tls.txt TestVectors/rabbit.txt TestVectors/Readme.txt TestVectors/rsa_oaep.txt @@ -528,6 +537,7 @@ TestVectors/sha3_256_fips_202.txt TestVectors/sha3_384_fips_202.txt TestVectors/sha3_512_fips_202.txt TestVectors/sha3_fips_202.txt +TestVectors/shake.txt TestVectors/shacal2.txt TestVectors/simeck.txt TestVectors/simon.txt @@ -542,6 +552,7 @@ TestVectors/ttmac.txt TestVectors/vmac.txt TestVectors/wake.txt TestVectors/whrlpool.txt +TestVectors/xchacha.txt TestPrograms/test_32bit.cxx TestPrograms/test_64bit.cxx TestPrograms/test_arm_acle.cxx diff --git a/vendor/cryptopp/vendor_cryptopp/GNUmakefile b/vendor/cryptopp/vendor_cryptopp/GNUmakefile index 5633115f..83ff39b1 100755 --- a/vendor/cryptopp/vendor_cryptopp/GNUmakefile +++ b/vendor/cryptopp/vendor_cryptopp/GNUmakefile @@ -24,21 +24,16 @@ RANLIB ?= ranlib CP ?= cp MV ?= mv RM ?= rm -f +GREP ?= grep CHMOD ?= chmod MKDIR ?= mkdir -p LN ?= ln -sf LDCONF ?= /sbin/ldconfig -n -INSTALL = install -INSTALL_PROGRAM = $(INSTALL) -INSTALL_DATA = $(INSTALL) -m 644 - # Solaris provides a non-Posix grep at /usr/bin ifneq ($(wildcard /usr/xpg4/bin/grep),) - GREP ?= /usr/xpg4/bin/grep -else - GREP ?= grep + GREP := /usr/xpg4/bin/grep endif # Attempt to determine target machine, fallback to "this" machine. @@ -67,6 +62,7 @@ ifeq ($(SYSTEMX),) endif IS_LINUX := $(shell echo "$(SYSTEMX)" | $(GREP) -i -c "Linux") +IS_HURD := $(shell echo "$(SYSTEMX)" | $(GREP) -i -c -E "GNU|Hurd") IS_MINGW := $(shell echo "$(SYSTEMX)" | $(GREP) -i -c "MinGW") IS_CYGWIN := $(shell echo "$(SYSTEMX)" | $(GREP) -i -c "Cygwin") IS_DARWIN := $(shell echo "$(SYSTEMX)" | $(GREP) -i -c "Darwin") @@ -91,7 +87,7 @@ endif # Enable shared object versioning for Linux and Solaris HAS_SOLIB_VERSION ?= 0 -ifneq ($(IS_LINUX)$(IS_SUN),00) +ifneq ($(IS_LINUX)$(IS_HURD)$(IS_SUN),000) HAS_SOLIB_VERSION := 1 endif @@ -100,9 +96,9 @@ ifeq ($(wildcard adhoc.cpp),) $(shell cp adhoc.cpp.proto adhoc.cpp) endif -# Tell MacPorts and Homebrew GCC to use Clang integrated assembler +# Tell MacPorts and Homebrew GCC to use Clang integrated assembler (only on Intel-based Macs) # http://github.com/weidai11/cryptopp/issues/190 -ifeq ($(GCC_COMPILER)$(OSXPORT_COMPILER),11) +ifeq ($(GCC_COMPILER)$(OSXPORT_COMPILER)$(IS_PPC32)$(IS_PPC64),1100) ifeq ($(findstring -Wa,-q,$(CXXFLAGS)),) CXXFLAGS += -Wa,-q endif @@ -126,6 +122,9 @@ ifeq ($(DETECT_FEATURES),1) ifneq ($(strip $(TCXXFLAGS)),) $(info Using testing flags: $(TCXXFLAGS)) endif + #TPROG = TestPrograms/test_cxx.cxx + #$(info Testing compile... ) + #$(info $(shell $(CXX) $(TCXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 1>/dev/null)) endif # Fixup AIX @@ -271,6 +270,7 @@ ifeq ($(DETECT_FEATURES),1) ifeq ($(strip $(HAVE_OPT)),0) ARIA_FLAG = $(SSSE3_FLAG) CHAM_FLAG = $(SSSE3_FLAG) + KECCAK_FLAG = $(SSSE3_FLAG) LEA_FLAG = $(SSSE3_FLAG) SIMECK_FLAG = $(SSSE3_FLAG) SIMON64_FLAG = $(SSSE3_FLAG) @@ -310,6 +310,7 @@ ifeq ($(DETECT_FEATURES),1) HAVE_OPT = $(shell $(CXX) $(TCXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | tr ' ' '\n' | wc -l) ifeq ($(strip $(HAVE_OPT)),0) GCM_FLAG = $(SSSE3_FLAG) $(CLMUL_FLAG) + GF2N_FLAG = $(CLMUL_FLAG) SUN_LDFLAGS += $(CLMUL_FLAG) else CLMUL_FLAG = @@ -392,6 +393,13 @@ ifeq ($(DETECT_FEATURES),1) endif endif + # Drop to SSE2 if available + ifeq ($(GCM_FLAG),) + ifneq ($(SSE2_FLAG),) + GCM_FLAG = $(SSE2_FLAG) + endif + endif + # DETECT_FEATURES endif @@ -521,6 +529,7 @@ ifeq ($(IS_ARMV8),1) HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ACLE_FLAG) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | tr ' ' '\n' | wc -l) ifeq ($(strip $(HAVE_OPT)),0) GCM_FLAG = -march=armv8-a+crypto + GF2N_FLAG = -march=armv8-a+crypto else CXXFLAGS += -DCRYPTOPP_ARM_PMULL_AVAILABLE=0 endif @@ -616,6 +625,7 @@ ifeq ($(DETECT_FEATURES),1) BLAKE2B_FLAG = $(POWER8_FLAG) CRC_FLAG = $(POWER8_FLAG) GCM_FLAG = $(POWER8_FLAG) + GF2N_FLAG = $(POWER8_FLAG) AES_FLAG = $(POWER8_FLAG) SHA_FLAG = $(POWER8_FLAG) SHACAL2_FLAG = $(POWER8_FLAG) @@ -808,22 +818,22 @@ ifeq ($(IS_SUN)$(SUN_COMPILER),11) endif # SunOS # TODO: can we remove this since removing sockets? -ifneq ($(IS_MINGW),0) - LDLIBS += -lws2_32 -endif +#ifneq ($(IS_MINGW),0) +# LDLIBS += -lws2_32 +#endif # TODO: can we remove this since removing sockets? -ifneq ($(IS_SUN),0) - LDLIBS += -lnsl -lsocket -endif +#ifneq ($(IS_SUN),0) +# LDLIBS += -lnsl -lsocket +#endif -ifeq ($(IS_LINUX),1) +ifneq ($(IS_LINUX)$(IS_HURD),00) ifeq ($(findstring -fopenmp,$(CXXFLAGS)),-fopenmp) ifeq ($(findstring -lgomp,$(LDLIBS)),) LDLIBS += -lgomp endif # LDLIBS endif # OpenMP -endif # IS_LINUX +endif # IS_LINUX or IS_HURD # Add -errtags=yes to get the name for a warning suppression ifneq ($(SUN_COMPILER),0) # override flags for CC Sun C++ compiler @@ -1007,7 +1017,7 @@ ifeq ($(HAS_SOLIB_VERSION),1) # Different patchlevels and minors are compatible since 6.1 SOLIB_COMPAT_SUFFIX=.$(LIB_MAJOR) # Linux uses -Wl,-soname -ifeq ($(IS_LINUX),1) +ifneq ($(IS_LINUX)$(IS_HURD),00) # Linux uses full version suffix for shared library SOLIB_VERSION_SUFFIX=.$(LIB_MAJOR).$(LIB_MINOR).$(LIB_PATCH) SOLIB_FLAGS=-Wl,-soname,libcryptopp.so$(SOLIB_COMPAT_SUFFIX) @@ -1122,9 +1132,13 @@ lcov coverage: cryptest.exe lcov --base-directory . --directory . --zerocounters -q ./cryptest.exe v ./cryptest.exe tv all + ./cryptest.exe b 0.25 lcov --base-directory . --directory . -c -o cryptest.info - lcov --remove cryptest.info "adhoc.cpp" "wait.*" "network.*" "socketft.*" "fips140.*" "*test.*" "bench*.cpp" "validat*.*" "/usr/*" -o cryptest.info - genhtml -o ./TestCoverage/ -t "cryptest.exe test coverage" --num-spaces 4 cryptest.info + lcov --remove cryptest.info "adhoc.*" -o cryptest.info + lcov --remove cryptest.info "fips140.*" -o cryptest.info + lcov --remove cryptest.info "*test.*" -o cryptest.info + lcov --remove cryptest.info "/usr/*" -o cryptest.info + genhtml -o ./TestCoverage/ -t "Crypto++ test coverage" --num-spaces 4 cryptest.info # Travis CI and CodeCov rule .PHONY: gcov codecov @@ -1218,11 +1232,14 @@ distclean: clean autotools-clean cmake-clean .PHONY: install install: cryptest.exe install-lib @-$(MKDIR) $(DESTDIR)$(BINDIR) - $(INSTALL_PROGRAM) cryptest.exe $(DESTDIR)$(BINDIR) + $(CP) cryptest.exe $(DESTDIR)$(BINDIR) + $(CHMOD) 0755 $(DESTDIR)$(BINDIR)/cryptest.exe @-$(MKDIR) $(DESTDIR)$(DATADIR)/cryptopp/TestData @-$(MKDIR) $(DESTDIR)$(DATADIR)/cryptopp/TestVectors - $(INSTALL_DATA) TestData/*.dat $(DESTDIR)$(DATADIR)/cryptopp/TestData - $(INSTALL_DATA) TestVectors/*.txt $(DESTDIR)$(DATADIR)/cryptopp/TestVectors + $(CP) TestData/*.dat $(DESTDIR)$(DATADIR)/cryptopp/TestData + $(CHMOD) 0644 $(DESTDIR)$(DATADIR)/cryptopp/TestData/*.dat + $(CP) TestVectors/*.txt $(DESTDIR)$(DATADIR)/cryptopp/TestVectors + $(CHMOD) 0644 $(DESTDIR)$(DATADIR)/cryptopp/TestVectors/*.txt # A recipe to install only the library, and not cryptest.exe. Also # see https://github.com/weidai11/cryptopp/issues/653. Some users @@ -1231,19 +1248,23 @@ install: cryptest.exe install-lib .PHONY: install-lib install-lib: @-$(MKDIR) $(DESTDIR)$(INCLUDEDIR)/cryptopp - $(INSTALL_DATA) *.h $(DESTDIR)$(INCLUDEDIR)/cryptopp + $(CP) *.h $(DESTDIR)$(INCLUDEDIR)/cryptopp + $(CHMOD) 0644 $(DESTDIR)$(INCLUDEDIR)/cryptopp/*.h ifneq ($(wildcard libcryptopp.a),) @-$(MKDIR) $(DESTDIR)$(LIBDIR) - $(INSTALL_DATA) libcryptopp.a $(DESTDIR)$(LIBDIR) + $(CP) libcryptopp.a $(DESTDIR)$(LIBDIR) + $(CHMOD) 0644 $(DESTDIR)$(LIBDIR)/libcryptopp.a endif ifneq ($(wildcard libcryptopp.dylib),) @-$(MKDIR) $(DESTDIR)$(LIBDIR) - $(INSTALL_PROGRAM) libcryptopp.dylib $(DESTDIR)$(LIBDIR) + $(CP) libcryptopp.dylib $(DESTDIR)$(LIBDIR) + $(CHMOD) 0755 $(DESTDIR)$(LIBDIR)/libcryptopp.dylib -install_name_tool -id $(DESTDIR)$(LIBDIR)/libcryptopp.dylib $(DESTDIR)$(LIBDIR)/libcryptopp.dylib endif ifneq ($(wildcard libcryptopp.so$(SOLIB_VERSION_SUFFIX)),) @-$(MKDIR) $(DESTDIR)$(LIBDIR) - $(INSTALL_PROGRAM) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR) + $(CP) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR) + $(CHMOD) 0755 $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_VERSION_SUFFIX) ifeq ($(HAS_SOLIB_VERSION),1) -$(LN) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR)/libcryptopp.so $(LDCONF) $(DESTDIR)$(LIBDIR) @@ -1251,7 +1272,8 @@ endif endif ifneq ($(wildcard libcryptopp.pc),) @-$(MKDIR) $(DESTDIR)$(LIBDIR)/pkgconfig - $(INSTALL_DATA) libcryptopp.pc $(DESTDIR)$(LIBDIR)/pkgconfig/libcryptopp.pc + $(CP) libcryptopp.pc $(DESTDIR)$(LIBDIR)/pkgconfig + $(CHMOD) 0644 $(DESTDIR)$(LIBDIR)/pkgconfig/libcryptopp.pc endif .PHONY: remove uninstall @@ -1327,7 +1349,7 @@ libcryptopp.pc: @echo '' >> libcryptopp.pc @echo 'Name: Crypto++' >> libcryptopp.pc @echo 'Description: Crypto++ cryptographic library' >> libcryptopp.pc - @echo 'Version: 8.0' >> libcryptopp.pc + @echo 'Version: 8.1' >> libcryptopp.pc @echo 'URL: https://cryptopp.com/' >> libcryptopp.pc @echo '' >> libcryptopp.pc @echo 'Cflags: -I$${includedir}' >> libcryptopp.pc @@ -1380,7 +1402,7 @@ ifneq ($(IS_DARWIN),0) $(CP) cryptopp$(LIB_VER).zip $(PWD)/cryptopp$(LIB_VER) hdiutil makehybrid -iso -joliet -o cryptopp$(LIB_VER).iso $(PWD)/cryptopp$(LIB_VER) @-$(RM) -r $(PWD)/cryptopp$(LIB_VER) -else ifneq ($(IS_LINUX),0) +else ifneq ($(IS_LINUX)$(IS_HURD),00) $(MKDIR) $(PWD)/cryptopp$(LIB_VER) $(CP) cryptopp$(LIB_VER).zip $(PWD)/cryptopp$(LIB_VER) genisoimage -q -o cryptopp$(LIB_VER).iso $(PWD)/cryptopp$(LIB_VER) @@ -1434,6 +1456,10 @@ chacha_avx.o : chacha_avx.cpp cham_simd.o : cham_simd.cpp $(CXX) $(strip $(CXXFLAGS) $(CHAM_FLAG) -c) $< +# SSE4.2 or ARMv8a available +crc_simd.o : crc_simd.cpp + $(CXX) $(strip $(CXXFLAGS) $(CRC_FLAG) -c) $< + # Power9 available darn.o : darn.cpp $(CXX) $(strip $(CXXFLAGS) $(DARN_FLAG) -c) $< @@ -1442,18 +1468,18 @@ darn.o : darn.cpp donna_sse.o : donna_sse.cpp $(CXX) $(strip $(CXXFLAGS) $(SSE2_FLAG) -c) $< -# SSE2 on i686 -sse_simd.o : sse_simd.cpp - $(CXX) $(strip $(CXXFLAGS) $(SSE2_FLAG) -c) $< - -# SSE4.2 or ARMv8a available -crc_simd.o : crc_simd.cpp - $(CXX) $(strip $(CXXFLAGS) $(CRC_FLAG) -c) $< - -# PCLMUL or ARMv7a/ARMv8a available +# Carryless multiply gcm_simd.o : gcm_simd.cpp $(CXX) $(strip $(CXXFLAGS) $(GCM_FLAG) -c) $< +# Carryless multiply +gf2n_simd.o : gf2n_simd.cpp + $(CXX) $(strip $(CXXFLAGS) $(GF2N_FLAG) -c) $< + +# SSSE3 available +keccak_simd.o : keccak_simd.cpp + $(CXX) $(strip $(CXXFLAGS) $(KECCAK_FLAG) -c) $< + # SSSE3 available lea_simd.o : lea_simd.cpp $(CXX) $(strip $(CXXFLAGS) $(LEA_FLAG) -c) $< @@ -1525,8 +1551,16 @@ sm4_simd.o : sm4_simd.cpp ifeq ($(XLC_COMPILER),1) sm3.o : sm3.cpp $(CXX) $(strip $(subst -O3,-O2,$(CXXFLAGS)) -c) $< +donna_32.o : donna_32.cpp + $(CXX) $(strip $(subst -O3,-O2,$(CXXFLAGS)) -c) $< +donna_64.o : donna_64.cpp + $(CXX) $(strip $(subst -O3,-O2,$(CXXFLAGS)) -c) $< endif +# SSE2 on i686 +sse_simd.o : sse_simd.cpp + $(CXX) $(strip $(CXXFLAGS) $(SSE2_FLAG) -c) $< + # Don't build Rijndael with UBsan. Too much noise due to unaligned data accesses. ifneq ($(findstring -fsanitize=undefined,$(CXXFLAGS)),) rijndael.o : rijndael.cpp diff --git a/vendor/cryptopp/vendor_cryptopp/GNUmakefile-cross b/vendor/cryptopp/vendor_cryptopp/GNUmakefile-cross index 0ba83142..c308c123 100755 --- a/vendor/cryptopp/vendor_cryptopp/GNUmakefile-cross +++ b/vendor/cryptopp/vendor_cryptopp/GNUmakefile-cross @@ -26,10 +26,6 @@ EGREP ?= egrep LN ?= ln -sf LDCONF ?= /sbin/ldconfig -n -INSTALL = install -INSTALL_PROGRAM = $(INSTALL) -INSTALL_DATA = $(INSTALL) -m 644 - IS_IOS ?= 0 IS_ANDROID ?= 0 IS_ARM_EMBEDDED ?= 0 @@ -188,6 +184,9 @@ ifeq ($(DETECT_FEATURES),1) ifneq ($(strip $(TCXXFLAGS)),) $(info Using testing flags: $(TCXXFLAGS)) endif + #TPROG = TestPrograms/test_cxx.cxx + #$(info Testing compile... ) + #$(info $(shell $(CXX) $(TCXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 1>/dev/null)) endif # For the previous messages @@ -335,6 +334,13 @@ ifeq ($(DETECT_FEATURES),1) endif endif + # Drop to SSE2 if available + ifeq ($(GCM_FLAG),) + ifneq ($(SSE2_FLAG),) + GCM_FLAG = $(SSE2_FLAG) + endif + endif + # DETECT_FEATURES endif @@ -693,34 +699,47 @@ distclean: clean autotools-clean cmake-clean .PHONY: install install: cryptest.exe install-lib @-$(MKDIR) $(DESTDIR)$(BINDIR) - $(INSTALL_PROGRAM) cryptest.exe $(DESTDIR)$(BINDIR) + $(CP) cryptest.exe $(DESTDIR)$(BINDIR) + $(CHMOD) 0755 $(DESTDIR)$(BINDIR)/cryptest.exe @-$(MKDIR) $(DESTDIR)$(DATADIR)/cryptopp/TestData @-$(MKDIR) $(DESTDIR)$(DATADIR)/cryptopp/TestVectors - $(INSTALL_DATA) TestData/*.dat $(DESTDIR)$(DATADIR)/cryptopp/TestData - $(INSTALL_DATA) TestVectors/*.txt $(DESTDIR)$(DATADIR)/cryptopp/TestVectors + $(CP) TestData/*.dat $(DESTDIR)$(DATADIR)/cryptopp/TestData + $(CHMOD) 0644 $(DESTDIR)$(DATADIR)/cryptopp/TestData/*.dat + $(CP) TestVectors/*.txt $(DESTDIR)$(DATADIR)/cryptopp/TestVectors + $(CHMOD) 0644 $(DESTDIR)$(DATADIR)/cryptopp/TestVectors/*.txt # A recipe to install only the library, and not cryptest.exe. Also # see https://github.com/weidai11/cryptopp/issues/653. .PHONY: install-lib install-lib: @-$(MKDIR) $(DESTDIR)$(INCLUDEDIR)/cryptopp - $(INSTALL_DATA) *.h $(DESTDIR)$(INCLUDEDIR)/cryptopp + $(CP) *.h $(DESTDIR)$(INCLUDEDIR)/cryptopp + $(CHMOD) 0644 $(DESTDIR)$(INCLUDEDIR)/cryptopp/*.h ifneq ($(wildcard libcryptopp.a),) @-$(MKDIR) $(DESTDIR)$(LIBDIR) - $(INSTALL_DATA) libcryptopp.a $(DESTDIR)$(LIBDIR) + $(CP) libcryptopp.a $(DESTDIR)$(LIBDIR) + $(CHMOD) 0644 $(DESTDIR)$(LIBDIR)/libcryptopp.a endif ifneq ($(wildcard libcryptopp.dylib),) @-$(MKDIR) $(DESTDIR)$(LIBDIR) - $(INSTALL_PROGRAM) libcryptopp.dylib $(DESTDIR)$(LIBDIR) + $(CP) libcryptopp.dylib $(DESTDIR)$(LIBDIR) + $(CHMOD) 0755 $(DESTDIR)$(LIBDIR)/libcryptopp.dylib + -install_name_tool -id $(DESTDIR)$(LIBDIR)/libcryptopp.dylib $(DESTDIR)$(LIBDIR)/libcryptopp.dylib endif ifneq ($(wildcard libcryptopp.so$(SOLIB_VERSION_SUFFIX)),) @-$(MKDIR) $(DESTDIR)$(LIBDIR) - $(INSTALL_PROGRAM) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR) + $(CP) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR) + $(CHMOD) 0755 $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_VERSION_SUFFIX) ifeq ($(HAS_SOLIB_VERSION),1) -$(LN) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR)/libcryptopp.so $(LDCONF) $(DESTDIR)$(LIBDIR) endif endif +ifneq ($(wildcard libcryptopp.pc),) + @-$(MKDIR) $(DESTDIR)$(LIBDIR)/pkgconfig + $(CP) libcryptopp.pc $(DESTDIR)$(LIBDIR)/pkgconfig + $(CHMOD) 0644 $(DESTDIR)$(LIBDIR)/pkgconfig/libcryptopp.pc +endif .PHONY: remove uninstall remove uninstall: diff --git a/vendor/cryptopp/vendor_cryptopp/History.txt b/vendor/cryptopp/vendor_cryptopp/History.txt index c61da6cb..15bf004f 100644 --- a/vendor/cryptopp/vendor_cryptopp/History.txt +++ b/vendor/cryptopp/vendor_cryptopp/History.txt @@ -435,7 +435,6 @@ last several releases. MacPorts GCC 7.0, Clang 4.0, Intel C++ 17.00, IBM XL C/C++ 13.1 8.0.0 - December 28, 2018 - - major release, recompile of programs required - expanded community input and support * 54 unique contributors as of this release @@ -451,4 +450,20 @@ last several releases. - avoid Singleton when possible, avoid std::call_once completely - fix SPARC alignment problems due to GetAlignmentOf() on word64 - add ARM AES asm implementation from Cryptogams - - remove CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS support \ No newline at end of file + - remove CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS support + +8.1.0 - February 22, 2019 + - minor release, no recompile of programs required + - expanded community input and support + 56 unique contributors as of this release + - fix OS X PowerPC builds with Clang + - add Microsoft ARM64 support + - fix iPhone Simulator build due to missign symbols + - add CRYPTOPP_BUGGY_SIMD_LOAD_AND_STORE + - add carryless multiplies for NIST b233 and k233 curves + - fix OpenMP build due to use of OpenMP 4 with down-level compilers + - add SignStream and VerifyStream for ed25519 and large files + - fix missing AlgorithmProvider in PanamaHash + - add SHAKE-128 and SHAKE-256 + - fix AVX2 build due to _mm256_broadcastsi128_si256 + - add IETF ChaCha, XChaCha, ChaChaPoly1305 and XChaChaPoly1305 diff --git a/vendor/cryptopp/vendor_cryptopp/License.txt b/vendor/cryptopp/vendor_cryptopp/License.txt index aacf619d..d48cdbb4 100644 --- a/vendor/cryptopp/vendor_cryptopp/License.txt +++ b/vendor/cryptopp/vendor_cryptopp/License.txt @@ -1,4 +1,4 @@ -Compilation Copyright (c) 1995-2016 by Wei Dai. All rights reserved. +Compilation Copyright (c) 1995-2019 by Wei Dai. All rights reserved. This copyright applies only to this software distribution package as a compilation, and does not imply a copyright on any particular file in the package. @@ -22,6 +22,18 @@ Richard De Moliner - safer.cpp Matthew Skala - twofish.cpp Kevin Springle - camellia.cpp, shacal2.cpp, ttmac.cpp, whrlpool.cpp, ripemd.cpp Ronny Van Keer - sha3.cpp +Aumasson, Neves, Wilcox-O'Hearn and Winnerlein - blake2.cpp, blake2b_simd.cpp, blake2s_simd.cpp +Aaram Yun - aria.cpp, aria_simd.cpp +Han Lulu, Markku-Juhani O. Saarinen - sm4.cpp sm4_simd.cpp +Daniel J. Bernstein, Jack Lloyd - chacha.cpp, chacha_simd.cpp, chacha_avx.cpp +Andrew Moon - ed25519, x25519, donna_32.cpp, donna_64.cpp, donna_sse.cpp + +The Crypto++ Library uses portions of Andy Polyakov's CRYPTOGAMS for Poly1305 +scalar multiplication and aes_armv4.S. CRYPTOGAMS is dual licensed with a +permissive BSD-style license. The CRYPTOGAMS license is reproduced below. + +The Crypto++ Library uses portions of Jack Lloyd's Botan for ChaCha SSE2 and +AVX. Botan placed the code in public domain for Crypto++ to use. The Crypto++ Library (as a compilation) is currently licensed under the Boost Software License 1.0 (http://www.boost.org/users/license.html). @@ -49,3 +61,22 @@ SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +CRYPTOGAMS License + +Copyright (c) 2006-2017, CRYPTOGAMS by +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain copyright notices, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials + provided with the distribution. +* Neither the name of the CRYPTOGAMS nor the names of its copyright + holder and contributors may be used to endorse or promote products + derived from this software without specific prior written permission. diff --git a/vendor/cryptopp/vendor_cryptopp/Readme.txt b/vendor/cryptopp/vendor_cryptopp/Readme.txt index 372419d6..e0ba0cd9 100644 --- a/vendor/cryptopp/vendor_cryptopp/Readme.txt +++ b/vendor/cryptopp/vendor_cryptopp/Readme.txt @@ -6,30 +6,32 @@ Currently the library contains the following algorithms: algorithm type name - authenticated encryption schemes GCM, CCM, EAX + authenticated encryption schemes GCM, CCM, EAX, ChaCha20Poly1305 and + XChaCha20Poly1305 - high speed stream ciphers ChaCha (8/12/20), Panama, Sosemanuk, Salsa20, - XSalsa20 + high speed stream ciphers ChaCha (8/12/20), ChaCha (IETF), Panama, Salsa20, + Sosemanuk, XSalsa20, XChaCha20 AES and AES candidates AES (Rijndael), RC6, MARS, Twofish, Serpent, CAST-256 - ARIA, IDEA, Blowfish, Triple-DES (DES-EDE2 and - DES-EDE3), Camellia, SEED, Kalyna (128/256/512), - other block ciphers RC5, SIMON-64, SIMON-128, SPECK-64, SPECK-128, - Skipjack, SHACAL-2, SM4, Threefish (256/512/1024), - TEA, XTEA + ARIA, Blowfish, Camellia, CHAM, HIGHT, IDEA, + Kalyna (128/256/512), LEA, SEED, RC5, SHACAL-2, + other block ciphers SIMON (64/128), Skipjack, SPECK (64/128), + Simeck, SM4, Threefish (256/512/1024), + Triple-DES (DES-EDE2 and DES-EDE3), TEA, XTEA block cipher modes of operation ECB, CBC, CBC ciphertext stealing (CTS), CFB, OFB, counter mode (CTR) message authentication codes BLAKE2s, BLAKE2b, CMAC, CBC-MAC, DMAC, GMAC, HMAC, - Poly1305, SipHash, Two-Track-MAC, VMAC, + Poly1305, Poly1305 (IETF), SipHash, Two-Track-MAC, + VMAC BLAKE2s, BLAKE2b, Keccack (F1600), SHA-1, hash functions SHA-2 (224/256/384/512), SHA-3 (224/256/384/512), - SipHash, SM3, Tiger, RIPEMD-128, RIPEMD-160, - RIPEMD-256, RIPEMD-320, WHIRLPOOL + SHAKE (128/256), SipHash, SM3, Tiger, + RIPEMD (128/160/256/320), WHIRLPOOL RSA, DSA, Determinsitic DSA, ElGamal, public-key cryptography Nyberg-Rueppel (NR), Rabin-Williams (RW), LUC, @@ -69,8 +71,6 @@ Other features include: + 32-bit CRC, CRC-C and Adler32 checksum * class wrappers for these platform and operating system features (optional): + high resolution timers on Windows, Unix, and Mac OS - + Berkeley and Windows style sockets - + Windows named pipes + /dev/random, /dev/urandom, /dev/srandom + Microsoft's CryptGenRandom or BCryptGenRandom on Windows * A high level interface for most of the above, using a filter/pipeline @@ -206,16 +206,23 @@ library in your programs to help avoid unwanted redirections. *** Side Channel Attacks *** Crypto++ attempts to resist side channel attacks using various remediations. We -believe the library is hardened but the remdiations may be incomplete. The first -line of defense uses hardware instructions when possible. The library also uses -cache-aware algoirthms and access patterns to minimize leakage. If you suspect -or find an information leak then please report it. +believe the library is mostly hardened but the remdiations may be incomplete. The +first line of defense uses hardware instructions when possible for block ciphers, +hashes and other primitives. Hardware acceleration remediates many timing attacks. +The library also uses cache-aware algoirthms and access patterns to minimize leakage. + +Some of the public key algorithms have branches and some of the branches depend on +data that can be private or secret. The branching occurs in some field operations +like exponentiation over integers and elliptic curves. The branching has been +minimized but not completely eliminated. Crypto++ does not enagage Specter remediations at this time. The GCC options for Specter are -mfunction-return=thunk and -mindirect-branch=thunk, and the library uses them during testing. If you want the Specter workarounds then add the GCC options to your CXXFLAGS when building the library. +If you suspect or find an information leak then please report it. + *** Documentation and Support *** Crypto++ is documented through inline comments in header files, which are diff --git a/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest-autotools.sh b/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest-autotools.sh index d0ce2379..f70035f2 100755 --- a/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest-autotools.sh +++ b/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest-autotools.sh @@ -141,13 +141,13 @@ if ! "$MAKE" -j2 -f Makefile; then [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 fi -if ! ./cryptestcwd v; then - echo "cryptestcwd v failed." +if ! ./cryptest v; then + echo "cryptest v failed." [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 fi -if ! ./cryptestcwd tv all; then - echo "cryptestcwd tv all failed." +if ! ./cryptest tv all; then + echo "cryptest tv all failed." [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 fi diff --git a/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest-symbols.sh b/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest-symbols.sh index c4d0154c..42ad330d 100755 --- a/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest-symbols.sh +++ b/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest-symbols.sh @@ -1,10 +1,11 @@ #!/usr/bin/env bash -# cryptest.sh - written and placed in public domain by Jeffrey Walton and Uri Blumenthal. -# Copyright assigned to Crypto++ project. +# cryptest.sh - written and placed in public domain by Jeffrey Walton and Uri +# Blumenthal. -# This is a test script that can be used on some Linux/Unix/Apple machines to automate testing -# of the shared object to ensure linking and symbols don't go missing from release to release. +# This is a test script that can be used on some Linux/Unix/Apple machines to +# automate testing of the shared object to ensure linking and symbols don't go +# missing from release to release. # Fixup ancient Bash # https://unix.stackexchange.com/q/468579/56041 @@ -12,10 +13,20 @@ if [[ -z "$BASH_SOURCE" ]]; then BASH_SOURCE="$0" fi +############################################ +# Cleanup + +PWD_DIR=$(pwd) +function cleanup { + rm -f adhoc.cpp *.a *.o *.so *.dylib GNUmakefile-symbols + cd "$PWD_DIR" +} +trap cleanup EXIT + ############################################ # Tags to test -OLD_VERSION_TAG=CRYPTOPP_7_0_0 +OLD_VERSION_TAG=CRYPTOPP_8_0_0 NEW_VERSION_TAG=master ############################################ diff --git a/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest.sh b/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest.sh index f1a714dc..b79a6577 100755 --- a/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest.sh +++ b/vendor/cryptopp/vendor_cryptopp/TestScripts/cryptest.sh @@ -108,6 +108,7 @@ fi THIS_SYSTEM=$(uname -s 2>&1) IS_AIX=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c aix) IS_DARWIN=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c darwin) +IS_HURD=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c gnu) IS_LINUX=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c linux) IS_CYGWIN=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c cygwin) IS_MINGW=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c mingw) @@ -155,6 +156,8 @@ if [[ ("$IS_X86" -ne "0" || "$IS_X64" -ne "0") ]]; then X86_CPU_FLAGS=$(grep Features /var/run/dmesg.boot) elif [[ ("$IS_DRAGONFLY" -ne "0") ]]; then X86_CPU_FLAGS=$(dmesg | grep Features) + elif [[ ("$IS_HURD" -ne "0") ]]; then + : # Do nothing... cpuid is not helpful at the moment else X86_CPU_FLAGS="$($AWK '{IGNORECASE=1}{if ($1 == "flags"){print;exit}}' < /proc/cpuinfo | cut -f 2 -d ':')" fi diff --git a/vendor/cryptopp/vendor_cryptopp/TestScripts/setenv-ios.sh b/vendor/cryptopp/vendor_cryptopp/TestScripts/setenv-ios.sh index d9f86940..efd6a8b5 100755 --- a/vendor/cryptopp/vendor_cryptopp/TestScripts/setenv-ios.sh +++ b/vendor/cryptopp/vendor_cryptopp/TestScripts/setenv-ios.sh @@ -63,26 +63,31 @@ do # ARMv5 if [ "$CL" == "armv5" ]; then BACK_ARCH=armv5 + APPLE_SDK=iPhoneOS fi # ARMv6 if [ "$CL" == "armv6" ]; then BACK_ARCH=armv6 + APPLE_SDK=iPhoneOS fi # ARMv7 if [ "$CL" == "armv7" ]; then BACK_ARCH=armv7 + APPLE_SDK=iPhoneOS fi # ARMv7s if [ "$CL" == "armv7s" ]; then BACK_ARCH=armv7s + APPLE_SDK=iPhoneOS fi # ARM64 if [[ ("$CL" == "arm64" || "$CL" == "armv8" || "$CL" == "aarch64") ]]; then BACK_ARCH=arm64 + APPLE_SDK=iPhoneOS fi # iPhone @@ -201,7 +206,7 @@ fi # Simulator fixup. LD fails to link dylib. if [ "$APPLE_SDK" == "iPhoneSimulator" ] && [ "$IOS_ARCH" == "i386" ]; then - IOS_FLAGS="$IOS_FLAGS -miphoneos-version-min=5 -DCRYPTOPP_DISABLE_ASM" + IOS_FLAGS="$IOS_FLAGS -miphoneos-version-min=5" fi # ARMv7s fixup. Xcode 4/iOS 6 @@ -219,12 +224,6 @@ if [ "$APPLE_SDK" == "AppleTVOS" ]; then IOS_FLAGS="" fi -# ARM64 Simulator fixup. Under Xcode 6/iOS 8, it uses x86_64 and not i386 -# -ios_simulator_version_min does not work though it is in LLVM sources. -if [ "$IOS_ARCH" == "x86_64" ]; then - IOS_FLAGS="$IOS_FLAGS -DCRYPTOPP_DISABLE_ASM" -fi - # Disable ASM for simulator. We are failing on Travis due to missing _start. # We may need to link against crt1.o for simulator builds. Also see # https://stackoverflow.com/q/24841283/608639 diff --git a/vendor/cryptopp/vendor_cryptopp/TestVectors/aead.txt b/vendor/cryptopp/vendor_cryptopp/TestVectors/aead.txt new file mode 100644 index 00000000..3fe23b33 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/TestVectors/aead.txt @@ -0,0 +1,6 @@ +AlgorithmType: FileList +Name: aead.txt collection +Test: TestVectors/ccm.txt +Test: TestVectors/eax.txt +Test: TestVectors/gcm.txt +Test: TestVectors/chacha20poly1305.txt diff --git a/vendor/cryptopp/vendor_cryptopp/TestVectors/all.txt b/vendor/cryptopp/vendor_cryptopp/TestVectors/all.txt index 757dd464..3ab9c8c3 100644 --- a/vendor/cryptopp/vendor_cryptopp/TestVectors/all.txt +++ b/vendor/cryptopp/vendor_cryptopp/TestVectors/all.txt @@ -1,55 +1,61 @@ AlgorithmType: FileList Name: all.txt collection -Test: TestVectors/tea.txt -Test: TestVectors/wake.txt +Test: TestVectors/aes.txt +Test: TestVectors/aria.txt +Test: TestVectors/blake2b.txt +Test: TestVectors/blake2s.txt Test: TestVectors/camellia.txt -Test: TestVectors/shacal2.txt -Test: TestVectors/ttmac.txt -Test: TestVectors/whrlpool.txt +Test: TestVectors/ccm.txt +Test: TestVectors/chacha_tls.txt +Test: TestVectors/chacha20poly1305.txt +Test: TestVectors/chacha.txt +Test: TestVectors/xchacha.txt +Test: TestVectors/cham.txt +Test: TestVectors/cmac.txt Test: TestVectors/dlies.txt -Test: TestVectors/dsa.txt Test: TestVectors/dsa_1363.txt Test: TestVectors/dsa_rfc6979.txt +Test: TestVectors/dsa.txt +Test: TestVectors/eax.txt Test: TestVectors/esign.txt +Test: TestVectors/gcm.txt +Test: TestVectors/hc128.txt +Test: TestVectors/hc256.txt +Test: TestVectors/hight.txt +Test: TestVectors/hkdf.txt Test: TestVectors/hmac.txt +Test: TestVectors/kalyna.txt +Test: TestVectors/keccak.txt +Test: TestVectors/lea.txt +Test: TestVectors/mars.txt Test: TestVectors/nr.txt +Test: TestVectors/panama.txt +Test: TestVectors/poly1305aes.txt +Test: TestVectors/poly1305_tls.txt +Test: TestVectors/rabbit.txt Test: TestVectors/rsa_oaep.txt Test: TestVectors/rsa_pkcs1_1_5.txt Test: TestVectors/rsa_pss.txt Test: TestVectors/rw.txt +Test: TestVectors/salsa.txt Test: TestVectors/seal.txt -Test: TestVectors/sha.txt -Test: TestVectors/keccak.txt +Test: TestVectors/seed.txt Test: TestVectors/sha1_fips_180.txt Test: TestVectors/sha2_fips_180.txt Test: TestVectors/sha3_fips_202.txt -Test: TestVectors/panama.txt -Test: TestVectors/sm3.txt -Test: TestVectors/aes.txt -Test: TestVectors/aria.txt -Test: TestVectors/kalyna.txt -Test: TestVectors/threefish.txt -Test: TestVectors/sm4.txt -Test: TestVectors/hight.txt -Test: TestVectors/cham.txt -Test: TestVectors/lea.txt +Test: TestVectors/shake.txt +Test: TestVectors/shacal2.txt +Test: TestVectors/sha.txt Test: TestVectors/simeck.txt Test: TestVectors/simon.txt -Test: TestVectors/speck.txt -Test: TestVectors/salsa.txt -Test: TestVectors/chacha.txt -#Test: TestVectors/tls_chacha.txt -Test: TestVectors/sosemanuk.txt -Test: TestVectors/rabbit.txt -Test: TestVectors/hc128.txt -Test: TestVectors/hc256.txt -Test: TestVectors/vmac.txt -Test: TestVectors/ccm.txt -Test: TestVectors/gcm.txt -Test: TestVectors/cmac.txt -Test: TestVectors/eax.txt -Test: TestVectors/mars.txt -Test: TestVectors/blake2s.txt -Test: TestVectors/blake2b.txt Test: TestVectors/siphash.txt -Test: TestVectors/hkdf.txt +Test: TestVectors/sm3.txt +Test: TestVectors/sm4.txt +Test: TestVectors/sosemanuk.txt +Test: TestVectors/speck.txt +Test: TestVectors/tea.txt +Test: TestVectors/threefish.txt +Test: TestVectors/ttmac.txt +Test: TestVectors/vmac.txt +Test: TestVectors/wake.txt +Test: TestVectors/whrlpool.txt diff --git a/vendor/cryptopp/vendor_cryptopp/TestVectors/chacha20poly1305.txt b/vendor/cryptopp/vendor_cryptopp/TestVectors/chacha20poly1305.txt new file mode 100644 index 00000000..b5545091 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/TestVectors/chacha20poly1305.txt @@ -0,0 +1,9439 @@ +AlgorithmType: AuthenticatedSymmetricCipher +Name: ChaCha20/Poly1305 +Source: RFC 8439 (https://tools.ietf.org/html/rfc8439), Section 2.8 example +Key: 8081828384858687 88898a8b8c8d8e8f 9091929394959697 98999a9b9c9d9e9f +IV: 0700000040414243 44454647 +Header: 50515253c0c1c2c3c4c5c6c7 +Plaintext: 4C61646965732061 6E642047656E746C 656D656E206F6620 74686520636C6173 \ + 73206F6620273939 3A20496620492063 6F756C64206F6666 657220796F75206F \ + 6E6C79206F6E6520 74697020666F7220 7468652066757475 72652C2073756E73 \ + 637265656E20776F 756C642062652069 742E +Ciphertext: D31A8D34648E60DB 7B86AFBC53EF7EC2 A4ADED51296E08FE A9E2B5A736EE62D6 \ + 3DBEA45E8CA96712 82FAFB69DA92728B 1A71DE0A9E060B29 05D6A5B67ECD3B36 \ + 92DDBD7F2D778B8C 9803AEE328091B58 FAB324E4FAD67594 5585808B4831D7BC \ + 3FF4DEF08E4B7A9D E576D26586CEC64B 6116 +MAC: 1AE10B594F09E26A 7E902ECBD0600691 +Test: Encrypt +# +Source: RFC 8439 (https://tools.ietf.org/html/rfc8439), Section A.5 example +Key: 1c 92 40 a5 eb 55 d3 8a f3 33 88 86 04 f6 b5 f0 \ + 47 39 17 c1 40 2b 80 09 9d ca 5c bc 20 70 75 c0 +IV: 00 00 00 00 01 02 03 04 05 06 07 08 +Header: f3 33 88 86 00 00 00 00 00 00 4e 91 +Plaintext: 49 6e 74 65 72 6e 65 74 2d 44 72 61 66 74 73 20 \ + 61 72 65 20 64 72 61 66 74 20 64 6f 63 75 6d 65 \ + 6e 74 73 20 76 61 6c 69 64 20 66 6f 72 20 61 20 \ + 6d 61 78 69 6d 75 6d 20 6f 66 20 73 69 78 20 6d \ + 6f 6e 74 68 73 20 61 6e 64 20 6d 61 79 20 62 65 \ + 20 75 70 64 61 74 65 64 2c 20 72 65 70 6c 61 63 \ + 65 64 2c 20 6f 72 20 6f 62 73 6f 6c 65 74 65 64 \ + 20 62 79 20 6f 74 68 65 72 20 64 6f 63 75 6d 65 \ + 6e 74 73 20 61 74 20 61 6e 79 20 74 69 6d 65 2e \ + 20 49 74 20 69 73 20 69 6e 61 70 70 72 6f 70 72 \ + 69 61 74 65 20 74 6f 20 75 73 65 20 49 6e 74 65 \ + 72 6e 65 74 2d 44 72 61 66 74 73 20 61 73 20 72 \ + 65 66 65 72 65 6e 63 65 20 6d 61 74 65 72 69 61 \ + 6c 20 6f 72 20 74 6f 20 63 69 74 65 20 74 68 65 \ + 6d 20 6f 74 68 65 72 20 74 68 61 6e 20 61 73 20 \ + 2f e2 80 9c 77 6f 72 6b 20 69 6e 20 70 72 6f 67 \ + 72 65 73 73 2e 2f e2 80 9d +Ciphertext: 64 a0 86 15 75 86 1a f4 60 f0 62 c7 9b e6 43 bd \ + 5e 80 5c fd 34 5c f3 89 f1 08 67 0a c7 6c 8c b2 \ + 4c 6c fc 18 75 5d 43 ee a0 9e e9 4e 38 2d 26 b0 \ + bd b7 b7 3c 32 1b 01 00 d4 f0 3b 7f 35 58 94 cf \ + 33 2f 83 0e 71 0b 97 ce 98 c8 a8 4a bd 0b 94 81 \ + 14 ad 17 6e 00 8d 33 bd 60 f9 82 b1 ff 37 c8 55 \ + 97 97 a0 6e f4 f0 ef 61 c1 86 32 4e 2b 35 06 38 \ + 36 06 90 7b 6a 7c 02 b0 f9 f6 15 7b 53 c8 67 e4 \ + b9 16 6c 76 7b 80 4d 46 a5 9b 52 16 cd e7 a4 e9 \ + 90 40 c5 a4 04 33 22 5e e2 82 a1 b0 a0 6c 52 3e \ + af 45 34 d7 f8 3f a1 15 5b 00 47 71 8c bc 54 6a \ + 0d 07 2b 04 b3 56 4e ea 1b 42 22 73 f5 48 27 1a \ + 0b b2 31 60 53 fa 76 99 19 55 eb d6 31 59 43 4e \ + ce bb 4e 46 6d ae 5a 10 73 a6 72 76 27 09 7a 10 \ + 49 e6 17 d9 1d 36 10 94 fa 68 f0 ff 77 98 71 30 \ + 30 5b ea ba 2e da 04 df 99 7b 71 4d 6c 6f 2c 29 \ + a6 ad 5c b4 02 2b 02 70 9b +MAC: ee ad 9d 67 89 0c bb 22 39 23 36 fe a1 85 1f 38 +Test: Encrypt +# +Source: Botan 2.10 library +Key: DBA2F48661BD70602FDE23F98A587224D955C9B97657B624FE366EA473C9AC12 +IV: DC528938373B4440D5EAC33D +Header: +Plaintext: +Ciphertext: +MAC: 0E500B992193F9B002BF02B0B293C6F7 +Test: Encrypt +# +Key: 4AB9AE9D538D74BA03EB61625E023102287EF897AA108EA19AD35005C1D40A30 +IV: A3DDD97F558B7E408451A1E6 +Header: 05 +Plaintext: +Ciphertext: +MAC: BCA86ED1DBBDF0693867ADB0438B83DE +Test: Encrypt +# +Key: 0B8B657558BB6D634E8547508919B05AFA0F82C98E85DBC9BF44B05F9B1B2246 +IV: CFF204BDDC31975CB594646E +Header: 431A +Plaintext: +Ciphertext: +MAC: 92B72FFE80BC6A13EB7574637AA5E7FB +Test: Encrypt +# +Key: 04E7ADA0565626257803E998DD02225364AA5A706FA25520F026ABF75823A63B +IV: B6E18125E4FD87AEABF34E34 +Header: 6388AC +Plaintext: +Ciphertext: +MAC: 7B2045404A2836E8B3350148DDB94DEC +Test: Encrypt +# +Key: 7B385EEB873B2380A202272CB193ECD88448BED01987ABCC31B76588C80E8BC4 +IV: 8777CB745C433ABF5589DF9B +Header: 03B690A0 +Plaintext: +Ciphertext: +MAC: 5996790C81F20CF255DAFAAD6968BAB3 +Test: Encrypt +# +Key: DACDD93E8761D9F5CB2F524FD5A0D215E2FC6ADE8163285AD988E8C316459B11 +IV: 569935CDF86687EC4D1C31EC +Header: 8448C5DE1F +Plaintext: +Ciphertext: +MAC: C5A989379F7F272751256E6F2C158E50 +Test: Encrypt +# +Key: BA699222CF895206D01F05210FF5847B347EF53CA69D7C5314998BAB3CD44B07 +IV: D93CE112D1D5EAC706FAE1D6 +Header: 4EEFA059C243 +Plaintext: +Ciphertext: +MAC: 9B0836095F9AF0548F31649E974622E3 +Test: Encrypt +# +Key: F81E0F8F005B491DC33977B5622A72DD50E2A5D361DC889E5D1D5CF475CE1D08 +IV: E43E5887D115A0999D982289 +Header: C122F6B51CDF1B +Plaintext: +Ciphertext: +MAC: F05257FF23CFCDF505CAA8ECDE79A46B +Test: Encrypt +# +Key: 5598EF9CCC5631D49E26C0F06023782C4ABD1480416E2D18ACC8076F68EB2DC7 +IV: B802376E4B6436DC7B536E84 +Header: 93B8BE551C65D7B3 +Plaintext: +Ciphertext: +MAC: 106CFFA776EA63AF6F2157CE9233D256 +Test: Encrypt +# +Key: 89F3CEDAD66D040F994728F7A8208376E4B33EFF3069987600B9D0971A1CB9B8 +IV: 4DC0FCC955C68F7CB12FA480 +Header: 6B8EF1AF16174AAECB +Plaintext: +Ciphertext: +MAC: DDDE576982E95445E4D20F3D74F824C5 +Test: Encrypt +# +Key: E4F0D5441D9468E2883C4D4BDB3C4696070B757B36310BE82F7A243FFFE8C29B +IV: 9A5E63B1072E8D1B235E7BCB +Header: 55F1608A580FC0B7AB3B +Plaintext: +Ciphertext: +MAC: 66898EE87E2E2B45C1315290D70475A9 +Test: Encrypt +# +Key: 5D8F868D2B0E94DB147D92FCCCD603ECA657D4153A8CE5F8696DC5ADCD809688 +IV: 1F298E58DFC5E8214962C7E6 +Header: B87094262F5693961D7844 +Plaintext: +Ciphertext: +MAC: 5EBFDD4C14DFA2F215831374463863B9 +Test: Encrypt +# +Key: 927AB90F99CF978AB8D563FEA5B8EA9D7AA419D7225447AA7841D9E0D5F1E552 +IV: BDE4AB3EE689776D1F501291 +Header: 2A4A18252A77EB7B45C66B5C +Plaintext: +Ciphertext: +MAC: 8A39F633DCDC9FBF02AA30CA1A081CAC +Test: Encrypt +# +Key: 5879B2313CE306C3854C72091CFC2D747B51A70C3D6324C52C70F38E7E8EEE9C +IV: C20B2F1302B0CAF30749B166 +Header: 214990ADB0B6CC68CD089F6CD0 +Plaintext: +Ciphertext: +MAC: 0E168B75916C216E98769D35EAAA23B0 +Test: Encrypt +# +Key: 1D15C0C02DB90511BFE05582EDCDE9FF013BD0B42CF080A9EB97D00814072D80 +IV: E3C6486526F26EBACF2B7151 +Header: 8FC27EDEA9E62F115E1FBEB471B0 +Plaintext: +Ciphertext: +MAC: 5E1AABA9F5B0BDB78A50D4520468168B +Test: Encrypt +# +Key: 037FEB91DAEFF0E295F054E5B9D2ADEC70FA7EE241068D25393ADFF662BD9C9F +IV: 6B1DD01FFCDE7D7AEEBCDE57 +Header: 5DDF4E8763CB28B9FF9E7EBA124997 +Plaintext: +Ciphertext: +MAC: D419DC81A093E11F571973C43295E312 +Test: Encrypt +# +Key: 6C1B0B9D053DE3036BBAA6390D263F6EF8D9F20D58323DCA939EE259592E1B80 +IV: 0DA8DAC5F378F9D923451495 +Header: C7BFAAA5660BF392857E77670F7139D4 +Plaintext: +Ciphertext: +MAC: EB242D189E515511B7F2CE598AE848FB +Test: Encrypt +# +Key: 24898C3334730EA06152933C6493AB34403566DF38EB51FAF3847472AE5DDF3E +IV: 7D0E45341B009592976F78F0 +Header: 8A836A096A73B4F6B93A0401A68796760D11F680A73F1CD6B07A +Plaintext: +Ciphertext: +MAC: 665C2DFEC3F079B7D469457E5B8D4D4A +Test: Encrypt +# +Key: DEC5C3C7C10DC6729BDC9AF8025576BC82AA1CDB39720A90520545FCF298A164 +IV: B1B1E4CD398B2AA860CF504E +Header: 8ABC6B0A872E694B0888607D9FD3E2E487A0F39360A6C2A2E8CEF975EFC4 +Plaintext: +Ciphertext: +MAC: 9ABE763FC66D7BA9873719FF800A57BB +Test: Encrypt +# +Key: C246503E1EDD138D0779508C57ED66DBD918440D171452997449C542DEB89BF8 +IV: C7829B681B64D281D85A0B4C +Header: 31DDD141E402BC727955A205F1433F609BE74CC795F1A627EF3D30D92763C72E7702F9742395 +Plaintext: +Ciphertext: +MAC: 7412A4DA9907E6FFF3A5A135E9FFEAD9 +Test: Encrypt +# +Key: BE055B2700B7136891283A8F8B70E03023BD0F8954FF1F5D36DB43BF2B4DE0E0 +IV: 4880918FC8BB4B8C97F178A8 +Header: 5C668A7D95ABDD353D8F1F5E55698AB0EC22D8BBC8756D65DDA72742DF81556C9B396BA5346890 +Plaintext: +Ciphertext: +MAC: BAE399AEEE3FD30E3D85CEF8D7838E73 +Test: Encrypt +# +Key: 7EC0726E40591F550FAEC610ABEFC949DE1AA4391CF0787C7AEB1EFE1EB8EB97 +IV: 6FB9FBB7947C47CC4FFBB4DB +Header: 966B9712422EB4CF2EF2CC0CFE845FAFF522682132EBCCABC4F4BA4A889CE35DD36BC9065FFB82AA865C359C40B6A2EAEBC0514D5CFA0008520645E0A400 +Plaintext: +Ciphertext: +MAC: 3EEEEFE31223F35CFAABF5B277B093A0 +Test: Encrypt +# +Key: 8A740ABAC570B0FF63EA12CB4C6E0464C8F7E4BB30D8682C1E86A88A125A39D3 +IV: 39009597B840D812A8764115 +Header: 1DBEDA220660E9979258A0A0352AFDEC7F79F52C32C53523ACDE401BB958AFABA54622C561E5875E8D1322F38982AF0C78DD0AD1A9E4F2305B8724830EC0 +Plaintext: +Ciphertext: +MAC: EFB513F295A7AFB55DE601D61FC3A196 +Test: Encrypt +# +Key: D1403C67E21DF05CB77B67DF1FD7652DBD4DE6DB70B513F871978720C4E49A2D +IV: 7B21DD7EE8D20A1B49D3E78A +Header: DB30FE52E02E55B4A3654C3626EEAB6F8817882F140D3CBFCBD33A898DF58B2AF96CBB513CDA1C4DA32A27F586F06CA11B0CD18F7F012918E86FDC91DFFF68454B908409DAD85AAA06159B78F57580A09212C185CF +Plaintext: +Ciphertext: +MAC: D292355F0849BFF5905B46F90A612A82 +Test: Encrypt +# +Key: 289E628332C1DEEC35BFE24C46D4BBC467016873577FC363092282587FB744C7 +IV: D61EFB0BF7D52B09752F664F +Header: 77DCD4ABCA620F50215252A16F2D48C289C52A3799BF9F61158701C20A41DCE1394A19825E56CE9025484AB6E16F3F4B2BCEC1CE5D279D311225204AF3BAF72241F196BBAE792A1D4BD6BAECDDB2DCC0AA9F17639192B520B59B08446B8F580B421701A562E7F8615E1654428B +Plaintext: +Ciphertext: +MAC: 5AF531E36B49BB6947C58C3E0DDDB7F2 +Test: Encrypt +# +Key: 299F2955558D47584BF45FA9C84D75D3DF75783F25C20A0284546C4ABE1A5EA3 +IV: B4B5989D11BE88C577B24827 +Header: +Plaintext: 5F +Ciphertext: 2B +MAC: 7F640D72916550C54F3FB3821A88735C +Test: Encrypt +# +Key: 1F48B0EBE98D296B3BDA9D308D7A6F19858B96CB0ED3BB92209D571107B09269 +IV: 136ADC8169ECC701B3C53549 +Header: D4 +Plaintext: 0A +Ciphertext: 8E +MAC: E26B3C60A3409C856127D2BF8671341B +Test: Encrypt +# +Key: 7A2C705A10E601A63A2DC30C1BAE25A49C255BED5D79F5DB126EDE44BA399B9B +IV: DE5DD8F7BEB4254FF15B39B5 +Header: F138 +Plaintext: 66 +Ciphertext: 4C +MAC: 49F575768AACDAF6B681154718363218 +Test: Encrypt +# +Key: 53C8A3E60192F4A8D6F7516CC57B233AEABA8E27ED5482716EA3A9690B78D426 +IV: 03C50402A4617DE36F272A03 +Header: 5DBE7B +Plaintext: DB +Ciphertext: 2D +MAC: 160BEC95297CF5D988FD70C55FC24B10 +Test: Encrypt +# +Key: 1AEA4994982C1959271E4F4FBE0B8A2729684440AF969171BF9BD658AB902A69 +IV: 7DB8C1B820D7D42C175649A7 +Header: 85A5533F +Plaintext: 24 +Ciphertext: 4E +MAC: 0A66E56833B3ED1E7DB1B955A3313701 +Test: Encrypt +# +Key: 933A6C78CC7DD8646BE4456515E906F63B174D77D60761812FD38387293D40EC +IV: 85602202CFAC71CF164941DB +Header: 7134708436 +Plaintext: 0B +Ciphertext: E2 +MAC: 9CF70AB347102B02801E108F8C430A4E +Test: Encrypt +# +Key: 9888A6F4C7FA848A3E87160F03DA98D6A55E15BA780283AC05096EBD87CD0FF5 +IV: 37E1D599243D21C4A2ABB811 +Header: B91A093846BA +Plaintext: 4A +Ciphertext: D0 +MAC: 0C49E2306EED6135549F7F67ADB4B952 +Test: Encrypt +# +Key: 740C3E9C9CF1A3D0A8E3C64E020480FC3411558A7A73DCC7D3DB735EED503704 +IV: 6521A26ADADD9036BC247D95 +Header: 81D9E98C041E3A +Plaintext: 21 +Ciphertext: 00 +MAC: 9B591A05D037C8A33B471BC4E03413B9 +Test: Encrypt +# +Key: 834D723F01AF1F2A2061FEB86ECDB4DAB45AB90D8B0735C443499BFAAE81184B +IV: 61ED8454C412791FF757B56E +Header: 178DAB3B37D84CED +Plaintext: 2A +Ciphertext: B5 +MAC: 39ED648CAFAACAAC7A5BB749118EC9B8 +Test: Encrypt +# +Key: 4D32F7A513CE9206D6AB49AC1596FD474CEF89D223913725785E7A50ED34A48F +IV: 693A61C76CDF123634557B4E +Header: 88737AE8E6464C1032 +Plaintext: 25 +Ciphertext: 39 +MAC: 337C829325E785C9E745713857A36559 +Test: Encrypt +# +Key: 6ABC402CFA9A869BC95AE7A8674F4054BCC818EA8428ABE5E9315081BFAAC1EF +IV: CD0A32089ED119B309AD7D62 +Header: 3D2349CBBB5D4E6ABDB6 +Plaintext: 4A +Ciphertext: 27 +MAC: 82C382CBA155E53ADE32AED83B0A33A3 +Test: Encrypt +# +Key: 1B62464BBF9A5E379B14C366458F47344CD23D3953DB862BEEF0ADF79B06B9AF +IV: 53C6520931901AEDD13C7FBB +Header: 505D995B154C32F6FBC50E +Plaintext: DF +Ciphertext: 64 +MAC: 89647AD92F7417EBDE295D7308AABCD0 +Test: Encrypt +# +Key: D2CC91EA4949F7B5249A3D4234DCEC2B4933B028C4E564AB9F4E8AB97279DF2F +IV: 6D1427675973DC3CB869CEE7 +Header: 8608D00597975ABC2999642D +Plaintext: B8 +Ciphertext: E1 +MAC: 93ED558E23A26239EB3BBC4DF393F797 +Test: Encrypt +# +Key: 39C5B6AFBD785FF3272C9FF503638546487F17F8CA80C6ABD67CFB6BF824BC31 +IV: 3505F425CA091E2636E1BA3A +Header: 201ABE798755EAC9EEC07940A7 +Plaintext: 60 +Ciphertext: 03 +MAC: 31EB6A216904366527E7B866C4A35B73 +Test: Encrypt +# +Key: 24666A7FFA0D08640F1B390C1BF4DB8E6700F66B1362B7296EFE001CED5360B6 +IV: 6C6BB37DAA578B428BA49868 +Header: 98EC20BE8E774FA5E985BE6D27A8 +Plaintext: E0 +Ciphertext: 49 +MAC: E86C35DB76E4227B1A63925563F3861E +Test: Encrypt +# +Key: 54440564222C3970E585D8B739490052AD2DC73F68FFDCE47F1E2C117DAC41FF +IV: C1DE36135F7A0B66DDEC2C1B +Header: DC28DCC29A4EE0744FCA1760F826CF +Plaintext: 29 +Ciphertext: 21 +MAC: 5D803E23A14D5FFBD99644004E8B56C3 +Test: Encrypt +# +Key: 10E908143DCB4E34E8518E664F6137A96CF0DB95829BD4A50148E8E391BE7FBF +IV: FC96C8F75D66146B0823A5F9 +Header: 784249F5E3BA7FD8B08545BDAC0D0387 +Plaintext: 1D +Ciphertext: CF +MAC: 30A467D2361FB7C4B8ED58EBC93FA545 +Test: Encrypt +# +Key: 8D97BA959C6D7C8D030779B6DA9DC8C48080A120D12F69C6A3CDBD3554DECAA5 +IV: 3D61C9808C9E1A4C9E14E6D8 +Header: BCA940CC6B94DECC2EB7AB5B660225593D53D84C +Plaintext: 30 +Ciphertext: 08 +MAC: D37C22E76E1520BB76334A949C9506F8 +Test: Encrypt +# +Key: 49428AE6E9E87B9ECD09FF6EB8C62CB7618A00569669D02060C60DA84179D0CC +IV: E80D3021889AD22204F0067F +Header: C490E507A442873185A898E52AD044AB57AB26BB4C9F92724ECA769F +Plaintext: 31 +Ciphertext: F7 +MAC: 1D518008A047331072510ADD1AFA447C +Test: Encrypt +# +Key: 072F368A7AD5F88E7F4487E5EC27C4B9C9F362B0AA301DF98D4CCE0BC47679A1 +IV: 957D9B338C12593A97DCD43D +Header: F8A84DF5018F26101C702FCCD18BFB8F597025020119D135341257474317FB52C06BF354D905E4E7F5BABC72709FC9A64C58DD5019B8 +Plaintext: 08 +Ciphertext: F9 +MAC: 5942E2ABBBCED9C22867030A0CBDADBC +Test: Encrypt +# +Key: F7D7B1022118837A9CF3ECCE1FB5505F5D41F15A8520195442533CC2325BE4F5 +IV: E13CC61872E04B9325C5DA51 +Header: D4814AF964E8F46FF7BCF2A9AEE2D327E91FC2533A6611DD025D9AF5F9BD6D2EA5582AB5B769B88798F5903697D1FB025B5C93C080B6CB0115F4D9674AD778BE31D5A54506939396C52579738A53D1F466404B7F39 +Plaintext: A6 +Ciphertext: 34 +MAC: 25BE790869B364C1DB3AA05AA5CCAD1E +Test: Encrypt +# +Key: C27036BF60337ABEFA663E8F459EC09B892D751F9FB7161FA55645367769E5A7 +IV: 730E10867C486BBBBEEED612 +Header: C4E7C45348DC80A9E619C42A445B81FDBBA681A31A991F4028A5DEC744D5EB7D25E9E14E07A691CC2FEE2A4FE1D30C6AF43A8232576A486DABF58E29400CF4415E2CD23F6B2E89B4D255995AD1387D0B6A418D01C4B5DD21CAE1D1B9 +Plaintext: 91 +Ciphertext: 01 +MAC: FD8D69F705E6189D80B2FBF135C88F1E +Test: Encrypt +# +Key: 09B4D9A0421220D778FA395150CB1358E24771E95C1BC96B4DB7732AB937A348 +IV: B696700786584950467552FD +Header: 2F16BD45AF71F8D479ADBDCEE401BFBD812AEB8EA09934FCE38EAE24185AD332088CF62FC04E4C501659D3BB2358496159E123621F082ECE228017C7160C7E862FAC96CA717A6C5E2AA461527546425B01E798CD7A4AAA2DAFCF66577826232EFB67E1C940DF4A9EF1E86EF5CB49F2AB +Plaintext: 31 +Ciphertext: 32 +MAC: B08C6AB4BD1D2E9E141334CD679EBB6E +Test: Encrypt +# +Key: 065D4BA094E458B30DF9CC1F3A4C9A3ABF882286C55F9E1260DDFF4D6AF85CCC +IV: ABE25FB45883AE1176C41468 +Header: BE4CA79F76C67E1EE270FA4B83CBA482C9D5F04A8221FBA6A8F0C3EB4204B213115B55AC55A0CABC37FAB792B778DF4E034774F53B160F4D0C13C91FFDCEBE9ED34005C7014C23D1553C211EB52B3B499448EA5E61B954D339DA3501F5B5FF4DCAD99EAA83A26D9BEB8FBE8230899AC8A3E159FB36 +Plaintext: C6 +Ciphertext: DC +MAC: 751EE41CB65E665242921750A81F064F +Test: Encrypt +# +Key: 1449616FC31DC3350618E9B216B67D573116F842705111EA9E8E65D2885F61C0 +IV: 75A1A8D553AD1B8CE41821D7 +Header: +Plaintext: 4A86 +Ciphertext: B92A +MAC: FB130E1C89EA4CB21C0797649FB3CACB +Test: Encrypt +# +Key: C4944140068C0C47D9108668E4FD0B8B3CCCD744557FE17257F5B5A5530725A2 +IV: 46262009D5C0451A1872CAB3 +Header: 80 +Plaintext: A97C +Ciphertext: 2140 +MAC: 863368FA60D8E380520767709539A162 +Test: Encrypt +# +Key: 207C52B0464A9069746B59E3D0703B17780CFA56666A0DD50CC15202ABD33F7E +IV: FD2D90360F41140E8F883D4A +Header: 4996 +Plaintext: 37A3 +Ciphertext: 2092 +MAC: 3494F4B4CEB6DD63F9329995383F647D +Test: Encrypt +# +Key: 69E5F512677137DAEB504A8DA980DC36BE2D637F9812948F6C63EB05D8A3225B +IV: DC6A604D745CDFEB99674B02 +Header: EE2126 +Plaintext: 4A38 +Ciphertext: 2589 +MAC: DA2E0FB32830DEBFCCBCF6838ED2C9AA +Test: Encrypt +# +Key: F45F074F24E89A5CF3781D9F4B90A2F96D3C0EA765CF4B5D947E817514B1A751 +IV: E86D0674A84E5739DDA5BD94 +Header: EAE6951F +Plaintext: CBA3 +Ciphertext: 382E +MAC: A2C6D15389E8C3953515B6043CB698C3 +Test: Encrypt +# +Key: 4F9374023BC3709D619DAC2C6F3A977D137FD9B76D472F97F8933AE385DA3809 +IV: 9B57D325CD785D74F3F1652C +Header: 7C96C065CB +Plaintext: 4FB1 +Ciphertext: 6596 +MAC: 2B3CA40BDF48FE4CD4E328500870063E +Test: Encrypt +# +Key: F644B457B037404C387C843C116227131AAC8B76EFE14299AFA80655129F394A +IV: CDDEDC53130F6DA801A5FF61 +Header: BEF7F3193AF1 +Plaintext: E8EE +Ciphertext: 1124 +MAC: 0DF8DEFDA2EA600CAF116830BE86A9C9 +Test: Encrypt +# +Key: 746644BCC4281CE82F9BB560CEF2F9D71070085AD440A810C9E647BE5CE9351A +IV: 357CC55D9B3D9562932B9A85 +Header: 23CC10605F200D +Plaintext: B0B7 +Ciphertext: 18B3 +MAC: C0B3322AB8DD80D9A83B1A037E9A1E5F +Test: Encrypt +# +Key: D86BE16DBCC3B7B374B3789A1C7609D799AC669A37A148B810F572BDC02EABCC +IV: 0A9F95507ED1FBE5E7E0FA79 +Header: 5065C0CBA6EA9C2A +Plaintext: EFB8 +Ciphertext: A724 +MAC: D39D5DD020576168971515FAFB0E471F +Test: Encrypt +# +Key: C77E1DACD02E97ACF6DD6B8CC5387AFAFC5128AA3E9346C19948E8B1FD020EEC +IV: F657A66B0E5E65BB4F73317D +Header: A38321D077F21E9427 +Plaintext: 20E7 +Ciphertext: 757B +MAC: 053A9F6893DE1F6B39475A81A924A192 +Test: Encrypt +# +Key: 1D5203F224C6E088249A6970F719E673943A223CD102658D6B5BE119E173BC85 +IV: C573E879B3AF2460B7DFBB49 +Header: AFB05F4C678130789322 +Plaintext: 5768 +Ciphertext: FBC8 +MAC: 9A91F1A0C93A663C8F6E6B085DC925E2 +Test: Encrypt +# +Key: BC8E39CA35AA3BA78BF43C64AA2A403CE4F65927C5BC797A70A0372B604AF1F5 +IV: 628328E8E0F455D33C9CCBE4 +Header: 1C5F53E14FBA74DA6F1F81 +Plaintext: 1708 +Ciphertext: BB2B +MAC: 83882D590961D4762C6D714AF9333BCA +Test: Encrypt +# +Key: 954E06625E28408616A0B4C2F34F3D545FCE856B5D2CD8F827DCE6CBD793A7B2 +IV: CB94543FD49690897336D48D +Header: BAB4F517AAC51F02A6FD23C9 +Plaintext: A88E +Ciphertext: 206B +MAC: FB4D7F3EBAA55A53CEF3AB447D40C131 +Test: Encrypt +# +Key: BA86858B23F6F250C1D355EA4B400E4931E5B64C702FE90D7A08639993316ADA +IV: 5233B3B80FC7B1AD9A7E2160 +Header: 39027CA02BAAD0D91150CF40DF +Plaintext: 00FF +Ciphertext: C299 +MAC: 3F1A0EF1EF056375F240CE04375EBC94 +Test: Encrypt +# +Key: 2B788A5D43F5E63E7E95B02C1A3EE55CD1BDAF8418B2EE04B0F80ACA5CC54933 +IV: 2E34E0893D1EC29AFD233C75 +Header: 905BBB544D7E850FED10464F407B +Plaintext: 2700 +Ciphertext: 8A78 +MAC: 2E439347CC758A76466FF83B8C22C0FC +Test: Encrypt +# +Key: 9D4E52CA424A842F92C45C9D39B1606C352F9C992818F0F910D4B429C64B8376 +IV: 5ABBFC7AD80BE3C941E211C9 +Header: A75B143C7B55B4B5490E44F197C9B2 +Plaintext: 588C +Ciphertext: 014A +MAC: DC287F2DA92FAD4EF0EEB1EF6877669A +Test: Encrypt +# +Key: 8E4F0A96E73BF7519330B5006C6277103891CDF610534093DA0833F3DECE34A9 +IV: 8924B3BE324CB2304CB0978A +Header: 0BC3ABA0C004B4A5C3E8E86EAC25EFCF +Plaintext: 2DD8 +Ciphertext: 3564 +MAC: E5B17041FF81365F79132368FB4CAAEC +Test: Encrypt +# +Key: 5343B6EB54A13A581552F4A632BB24F6F1A378A11800541204EB3B7E4A2F5732 +IV: B512949B96678A01EB54DA15 +Header: 7B2DFEE5102F6C0D859586E9D970B0DD7ACA1559099E1B5C09 +Plaintext: 595B +Ciphertext: 4954 +MAC: 72669E94250ADA7A404718DA1F983EE2 +Test: Encrypt +# +Key: 01D272DEFE156D8C0F5A038DD8395E0ECD5956981D6C259AF9DC7532C9F3E3C6 +IV: 15FFD0EF777E2D18AF67AF63 +Header: 6E7CB6636FF6E9029B48FAD85D4C9D0B473B6E62D4E49C39D71AD89F9B31 +Plaintext: 6168 +Ciphertext: 4842 +MAC: BF99BC585B80175A3481EFEA029D0FAB +Test: Encrypt +# +Key: 1E90CC68BD2CA54BC70FB05134523BDF27A95DD20BAA974AEDF38C5CBA0A7005 +IV: 16FAA166D91DB3ED045CDE68 +Header: 7E59017D5E6EE16324E8321447EEEE5BD49647845974513EB506A3A603BA7C58B1E9 +Plaintext: 4E64 +Ciphertext: 6FB6 +MAC: 9F4B58BC6B99E99840A2001B29F549BE +Test: Encrypt +# +Key: ED156C7F1D80708499E639D92BF753C148FBEE3500D0AD9314C95C873E5E8FD3 +IV: F9F91CE05EDB0B89C047C826 +Header: B3DA5991BB667CB76C1C82242ADE39C133C4DAD919FEF170813D80B35038D7D8EEC5AFBA3584C1EFB5D7657706548A4AC90361B97DE80E3DA40E59B57EFACF16 +Plaintext: 7F10 +Ciphertext: 9253 +MAC: 4C17C83A6A7762BF5B6EF30F75E8AB48 +Test: Encrypt +# +Key: 859730672135931B15454B8FF78C8A1A36C07F3FEC7ABCAA023F17B5F052D066 +IV: 8F7339D5178298074392B587 +Header: D1449BC064A62D7B500F90422CE5FD660065ED698892FA0EF0B4561AB88F61D90E3EC2A5681CBD54CB3CDAA761B0DD9029056B37A2386B14433F825C32B67666B2DCA1C365611B200CF72CAAC7EAF10356144A +Plaintext: C686 +Ciphertext: 862E +MAC: EE5598D09AA7558FA2457F09224DC401 +Test: Encrypt +# +Key: D414C43AA2FF7F6636BF2B95AB498005F2742B49EBC76E36216869271C2C9079 +IV: 026D1B1DD6DC1C08F6F996DD +Header: 02141F6A54C2A6127ADE0E90F8B2ED115C552D353B8830BA575AE301A740FBA895D417591C9781BFA9BFE2C72863116470A85DA91B529BDE256B2C71EC06CF86599CD89FB6B77BA77B6B4EAEBCBF07999484C69A937C64D4A4A46B086376AE7B1B0493C93ABD6995CD7C +Plaintext: 934B +Ciphertext: BCF5 +MAC: BABD4DE5560140EE646ACF39EE8C2982 +Test: Encrypt +# +Key: 15CD65D64E9C59FAA874553F4D12E1BE9774FA772778CA6BC99FD2BB1919A676 +IV: 7ECD30653C0CF10C964B09F6 +Header: 19003A64337B4BC5377D20AB6B61EB580302ECAEE1830C9EEE5B9B6246208A780E644C4FD9F258F43F22A979B0BF717A1A29AE848598200CDFB94092EC14437621928CE34C49A1804D05BDE5D1E85977C219BF6E9E13BBC3F07552145A252AE5F5CE3586BC6BCB82BCBDEC99732B842A18A2DDDE18D5DC84DA80DB361EE48E +Plaintext: 004A +Ciphertext: C929 +MAC: C68DA364CDB75A114C157FD1CEA20AE5 +Test: Encrypt +# +Key: 7A79552D71C89A9FFD805CBDD985E8666CBABF749688033D960029244AB39AC3 +IV: 9E2BF85D88A935926BCA8EC4 +Header: +Plaintext: 5C96AB +Ciphertext: DC1FC2 +MAC: 4B8F497BC7042B250DEC570D84A2F3AC +Test: Encrypt +# +Key: C49B8D53B1D58BCFABE2A6169CB664DE116779BE874D1EABA7CBD338D489F8F3 +IV: 7A4662BD75DCC782BF0AAF6E +Header: FE +Plaintext: F5643B +Ciphertext: 78AE71 +MAC: C487FDCB6F8F7F66F2579BD3CC4DA4CB +Test: Encrypt +# +Key: ADD3E23C2F188E43B3B3DB749259B633932607F7B09A9E96D92D2CBDFB43ADB6 +IV: FA664E82BAD869B9381EDEAF +Header: 3771 +Plaintext: 2E73EE +Ciphertext: 67BD53 +MAC: 0EAB440AA38C6613D6714AB5F306A6EB +Test: Encrypt +# +Key: EB9E073679F4298F6EE04C2885A404F4BA5A76516111822F4DD30865D7E47FAA +IV: 9FF0CFDC2391D47F0AD9A9DB +Header: A8BDAA +Plaintext: 1567CB +Ciphertext: 8A1940 +MAC: 52A061773C8F367F53B7B24DE21C5E3F +Test: Encrypt +# +Key: 51ABF55DBCA9EC004C37DCD634C3AEFA428CDF9D2FC1A9BC1434D1205A2BE771 +IV: 78A34498A45D166AAD046BEE +Header: 1E902C55 +Plaintext: EA40B2 +Ciphertext: 51F6FC +MAC: DA1C4A6AFF65498089E9D87397D4AD20 +Test: Encrypt +# +Key: 97C5CD6D133683A542C8389C943325760E6F41ECDE3134C02A9BC292090C914E +IV: A2E1C0E516BD65F7B18AD01F +Header: CD7083ABC1 +Plaintext: 9903CB +Ciphertext: 58F2B8 +MAC: 9B748C3094F7792BFBD266A7FF35580C +Test: Encrypt +# +Key: 750D3EB6A348523090E546083FA820B998306377138F223EAF115ABD2D75BB2D +IV: 957CA1F79CD9D20EA4C7FD62 +Header: 3A13B4E22A23 +Plaintext: E811AD +Ciphertext: DE2122 +MAC: E6901FC1B951BF2B6110E775E1E9EE6F +Test: Encrypt +# +Key: 00A4440340DC2E0E4D36D29FC4F60CEDA57F0698C581FAFFE264EE471E9CA38D +IV: 3DCD99B586AD73D67606FF4F +Header: CC7A56BBAAF96A +Plaintext: 270B11 +Ciphertext: 86BEE1 +MAC: D34B27369CBC697C99A5FA8B4633941D +Test: Encrypt +# +Key: BCB52FE7FB30B398C8BF7EA593521421EC38CF357B0D03B19252267C2A40E0DE +IV: D47D6A427A17994BFAD17C2A +Header: 393B919616274BBF +Plaintext: 5EDE1A +Ciphertext: CA2502 +MAC: 912C42ECD0C50AE3CE21BF63B3C9A7E7 +Test: Encrypt +# +Key: 66D2A30CD0D3581B471E08A797296EC0483AA00CAF31E805B4739EDAFB139131 +IV: 83844CA1AFC20D19BFCDDEE0 +Header: 38F411082C35EA0F77 +Plaintext: DB6ACA +Ciphertext: 1B90C6 +MAC: 6055CC56AA7E612576B498C73725069D +Test: Encrypt +# +Key: 510723FECBA4E9CA290907C0B5BC8F3F62206A7EF7208DC67CB06AB3DDE9C493 +IV: A587E2BB78973C0EDEAAC486 +Header: 107EB4E4C5215762E9C3 +Plaintext: FADBCD +Ciphertext: AA4AEB +MAC: 172B165C8C996BF238940F1A21101567 +Test: Encrypt +# +Key: C59217CBF3C0233BB1A9AA42232CA312451AA5D08AA12E2263DCA1C4CE793F95 +IV: 660E75A72C9B6FD04A16CE70 +Header: 0508CA50165476A916308C +Plaintext: 229411 +Ciphertext: 64B83B +MAC: 5A79D03DF556EC144B7DC72A9604EE3A +Test: Encrypt +# +Key: 38C76BE0036CC754E954ECE4E80CA937EC5A07548DD92C4C6C0DB9CEB0AB25BB +IV: FAD095591D83731C5D491538 +Header: A42DCE90F89DF9CD6147F29B +Plaintext: 86EEBD +Ciphertext: F4A33F +MAC: E77C97A27757DE32F9C8150F63EEC635 +Test: Encrypt +# +Key: C9B3349F9E418271DFFAB0AC5B4072C91A8ADF8359E30675C8435DD195B577C6 +IV: 4F44C7857C6A60371400E1CB +Header: CD775D3DA0704BCEA773D5B0A1 +Plaintext: 3139F8 +Ciphertext: 7AF49D +MAC: 8C934C70D466A96C05ED7C5DC8BC3DDC +Test: Encrypt +# +Key: 577339B22391267E80FB82B0B6AC5BFC6BED4AA76A227CA4C11D4D918C15AC6B +IV: 68B67CD069B619302463A165 +Header: 6BA66DEF142F5486319810067411 +Plaintext: 31925A +Ciphertext: 95D73F +MAC: 1767D207DB65EF46936CDF2BDAAD4370 +Test: Encrypt +# +Key: A24CA477340258E724D414D5E4FFF2F6C7FC402CD6C03EA930A18D8E725E66A9 +IV: 819BE6A2FDE545F390A0B3E7 +Header: B22FDECD9F3DA40873F289E2973FDD +Plaintext: FD1A0F +Ciphertext: 52FF4A +MAC: 16CAC5638E4FE943B2785CA91D8E8D1F +Test: Encrypt +# +Key: ED037036BA6E9F91D61F9D96EA47C262F28CC806FBBDD5C19EF4901727604EAC +IV: 241426BB6528363A9210D4C8 +Header: 0C190C98AB49831F8A4443952690BB1C +Plaintext: E2451A +Ciphertext: EEF856 +MAC: 8F1A5C3770ABB427FD6334FD07106E28 +Test: Encrypt +# +Key: DE7B0A82B01ADC5172FBDB96ADF59108267CB6CBCDBD5F5EB078451357E94714 +IV: 0780ED9799E6C0349EE24379 +Header: 32A58E36274F0A70EFA387972D669410F65610DE63DCE275ECC76B096EB6AB8E891CE6A3E6FF0AE7F63DDB +Plaintext: B3E962 +Ciphertext: ABB5AC +MAC: 79B2239EDB0C4F5A137EF5495816A9E5 +Test: Encrypt +# +Key: 149FD4C9F187D8BB26409341E0C375188AB580D5E6CE92109185AA306B264AB0 +IV: 81D3372C78ED942026A38C53 +Header: 161CA82AB1F920A9D295493013C8300F49FD318E5D23796D57CF9E260F968DC941A70DD3DC1BE3947D6A6ECBF980E644F4D995D0C934AA +Plaintext: 0FFEED +Ciphertext: 72B1F9 +MAC: 192247E7C76A4675CE54CD6CD6D55389 +Test: Encrypt +# +Key: 7F410519EF7772451892F7C3E1B3FCA099BB2721647D5E08BF2121BA16D0C1A6 +IV: D1BDCBBE6EDF7752B26D2C2A +Header: F29DFE8A13D9127538DB2286E01CA8C77AAD2F466245C711B5DFB98719C5E195A59D45623593A58528DE4092B97DE31BCA4B9D05C6ADCF887AD3738967342AFA18B9A51EA4CEE7 +Plaintext: F71CFE +Ciphertext: 99A683 +MAC: 0392C6B49B0FDCF146FB8C300C811E17 +Test: Encrypt +# +Key: 820C1CE984F37E80FA0AAFBE16219FCA4E95098B23EA5BE393105E01F309BF93 +IV: 0F0F8ABA24869DBCB4A447B0 +Header: 999AA6D2EDFE933361C743C50A853DF7F9F6D26B8149F16FE7FAC04E8688B52FFF2C93E94B78436B2BFB941829BA494A38C7BD3EABC7E480D8A4AB93044096438167F146926CB4D107889EAFC22F +Plaintext: D299C7 +Ciphertext: C35B59 +MAC: E2A68B780B898836F2F9556C7790B18F +Test: Encrypt +# +Key: 51902F38A047F6A7BD92A50182035E651A1EC031A5BE3EEEF4249B127E322CA1 +IV: C6955EE1D6F308DCF4128642 +Header: 83A842A26148D1F08844FC0CB31825DDE43CF3CC39F82FF1AD604EBCBCB826E040CA3627D2F6F5F8F9AEEACE59BA3E3DBBAA7CF8CFB7A7B4D9C044FC9DD0D2DB737AEFD58F28DFAFA1C1B739C2405ADB3E2A23F277EA2782FA9407C258E7D2CF +Plaintext: 023332 +Ciphertext: A8EFA1 +MAC: 55BFE9FA6B3C4C816173DC1A261ABD65 +Test: Encrypt +# +Key: A129C875BB2C95C635584C6D4353F836D147A1E40D4F8FDD43C9D57DB15AA008 +IV: E8509E640DD1505AD8F82831 +Header: D5C62730768FF74B44109699BFD8CF3B8C2C91F1C26D537963F357F140003A7B4F730B385BC513B45C478DBDCDB3807CB135AA6024E9530E68E6444E1A707BE58BC84174CCC091B8F3A628991124238B25A361CD752BE1E50DF9179D64A31B2F7C9EE4 +Plaintext: E3F8B6 +Ciphertext: B7DA03 +MAC: 6A6FD55975A6710291BB6017A0F11FE5 +Test: Encrypt +# +Key: 492B3417ADF662E400B2C68F84F2A2A99FF756D6CAD786135CEA955147AD077F +IV: 318D94611794ED35807DEF65 +Header: 1CEBDF2FAD6694CD5842B8B45DF2240E05E3680B7032583380D57FC46E0281F3D08489856417AA6F13F9F176A70BB99D4075761F3994BE9CB99374A632548E44F12DA84046DD1E29E6FFE74E72CA3142EC69AE83DE94A314B5EDCAEFE9F234DDE2D347CA5323E5261BA5E73A5D77EEC7F30D495F996C7ED6CEBC5A46 +Plaintext: B6C02D +Ciphertext: B59BDD +MAC: 0A7337B8D49F8825EE23279CB00F443F +Test: Encrypt +# +Key: 5ECF7831C94A5F7DDEAC7DDF9953EB40389AB4AC83EDC2FA5C8CB604B7200163 +IV: E48DD0E356BF4B563CF3999E +Header: +Plaintext: C9B35E2F +Ciphertext: 2BE9EB0F +MAC: 5B5A5661AB1C769A2C3E459D99C3FB8A +Test: Encrypt +# +Key: 104EC54F6D995BC76AE9BDAE72504165CB24B08CE9A7FF5BE3F5B64FB27E9FDD +IV: 736C29D9A5FC4D0A91D432A7 +Header: A3 +Plaintext: DEF9E004 +Ciphertext: D2E9EE57 +MAC: DB52634A8934F7A87DB1C822B0654A58 +Test: Encrypt +# +Key: BE2D93CB0AF043AE69DA4612AFADB6B1A9BB8CC1596AF0AAEFCE5A0C907F9549 +IV: 479AF9529DB1F04AF9FEA450 +Header: 0B20 +Plaintext: B58477F6 +Ciphertext: 9228E8D8 +MAC: 738264A80C5307F93293899BCEBE0881 +Test: Encrypt +# +Key: 556F496A93B45BC066973E65AA8FB1423FB2E9A46BEC2309A2E825C29E305440 +IV: 00990511ADC8F48437FB373A +Header: 321169 +Plaintext: 89B32247 +Ciphertext: 7323473F +MAC: F31479A815B4D45DD235990A4E9595CA +Test: Encrypt +# +Key: 5A9CBAAE51E2ADB5BE6132A002A091FD66B2E967AFE13D9FBCEBD86807B81AAB +IV: 5B8758427509E07C84ED3E75 +Header: 76F5F377 +Plaintext: 9DA3951A +Ciphertext: CB1A2E4B +MAC: 4A8C11E2C114178D17D92DDD51BB59A4 +Test: Encrypt +# +Key: C02EEF09268111FE1009511B1B2D54E76293EB6A65E9EBAE7D95EBFB24588BFA +IV: 65BBB341F5504DE367707CF0 +Header: AC414CDD3F +Plaintext: E933969D +Ciphertext: 1A07211C +MAC: 4D9B4FAF7D44FFA49E023694856EC803 +Test: Encrypt +# +Key: 98D992567F1A5C25F2322129D669BBB9F3FA6CA2940B48162ABD0E1D440D7D73 +IV: AAFFEC1B69920C430CF0B9FB +Header: 5D786A4A600C +Plaintext: 2442D3C9 +Ciphertext: 2B27447F +MAC: 89F6EC62EC074A8EE5410617C3E22E4F +Test: Encrypt +# +Key: BB1202CB9FCD50C60711E7B2C3479B3ABCB95A33E8DB5125931294661B1EDD1B +IV: 5DCB0D0CDD902B53DE2519F2 +Header: D47A90A552943B +Plaintext: ADBC8702 +Ciphertext: 27956E10 +MAC: 309F6F308F7BFAFDE33E511DAEB7DB8D +Test: Encrypt +# +Key: 012E2EF763AAFDD750227F033BFF0D93C3004217B18C2290F0B3FE209FF6B1FB +IV: F9671F161ADD9355C179EAD4 +Header: 0DDB710260259C7E +Plaintext: 3BA7FFC5 +Ciphertext: EC08427A +MAC: 9EEF3203DACDAC9AEE9ECCB014BD070C +Test: Encrypt +# +Key: 99376276AB6FCFEB99965665EBD58557F5EDABD025C1CF4EEEAE7338FB5A734D +IV: CFA6DFB71BF9B2AF1932C58A +Header: A6D707D20DDC1C1A05 +Plaintext: 2670AE59 +Ciphertext: 349789E8 +MAC: 1AAE1EAEFF8D7F6E35A4AB92C5B19539 +Test: Encrypt +# +Key: 53122EAEFC1E63E0283616CAA989AD62E0C0D2BB5F7279519AFF87D41B25B856 +IV: 7D5FDE5C6182A2DFFD639222 +Header: A3972114EE5313FB647F +Plaintext: 8635AEAF +Ciphertext: C70A95FA +MAC: 5D2A4093D0DD768486B370568A37EFEF +Test: Encrypt +# +Key: 5B96270D2099FD81A69ED1693E6B3ACE15A99F7DE9879F14E3EED33B35C972D5 +IV: 8D0AA0ACE918B1F85933D17E +Header: 65472CFE7868A5730229B4 +Plaintext: 24BA2F7E +Ciphertext: 63C6C7C5 +MAC: 3D0B7E30F45D15B5B844555F2482602C +Test: Encrypt +# +Key: 3CF954D85348EF8D588A4B054AF054B800ABDDE7FBBE33F4B15FBFEA71181544 +IV: 3A86A7585028878ACE78BECC +Header: 4D73DA8FAA711F54A378C1A6 +Plaintext: DE52B633 +Ciphertext: 7D7E4A3D +MAC: B41DC4C2A752830EE3BD9A20D8B2A0BE +Test: Encrypt +# +Key: 790FDD7B372F0728F0B0247BE62DE853F1D6E34DAAFD128C1E51515A68ABBE1F +IV: 4E84058B01CE3864D4E51FDC +Header: 72AD14F06F27B746A85302D028 +Plaintext: 380134F9 +Ciphertext: ACD4B076 +MAC: 65CF9E96952C923ACF9603C94B38EA43 +Test: Encrypt +# +Key: DA52A0F3E62F4EDC3C83EE664ED7794ED80262AAF37CA934ECAC82ADC79473B1 +IV: 18FA65ECEF938218E3D5B254 +Header: 9F9E63995F4ABCF7960E08ADB20A +Plaintext: 7F5B5F84 +Ciphertext: 1A713A7E +MAC: 99A30B773E0E051C7B62C7D599918345 +Test: Encrypt +# +Key: 6DD7CB5E2423632ED280055FBBA20A6C908B18DEE52EF8898F24EAE0652344B2 +IV: 3D463F3ADBC61F649A76C881 +Header: FEBAF520D75FFED7F9FF335093E540 +Plaintext: B85DF652 +Ciphertext: E46E8DED +MAC: 3158C79509F0274E4549E5DDD2866A2B +Test: Encrypt +# +Key: A16AE6B1A15E4EC0F6ECE6AAB341D57F845CA2EF9724C4201AAB33FB8017B760 +IV: CDF34BE44FD8C2B97A434612 +Header: 6BDEAA56C2CC97D538C13AFB4615914C +Plaintext: C41B8B87 +Ciphertext: DB557A1F +MAC: 8DC3CD852872B5F3C6228FDDC8FC1C70 +Test: Encrypt +# +Key: 9227FCCE186224AE13113D3CCB20F1F2AA9C75E3C0B1694576D2AF399CD690D9 +IV: B66F10B3F6961D8BF49C4DBC +Header: C748DBFA5BF53455ED3A63C64EA80F2E77E3D64A80A59B3FBBA565AB8F40726CD9E4006D8E410AD7BA9A05 +Plaintext: C6622D9E +Ciphertext: 98092137 +MAC: 159A606D450838F04943AC9BBA132B28 +Test: Encrypt +# +Key: ECDC1A206EAFA3ACCFE9BEF885ACF023452263996B4C700E575282FB1617D027 +IV: DA87EEB0E070CFA542A0399F +Header: 777A42EA6CFF51D8949E6EE989730EBBB49629C2DB1580C946A64E5F84B333F81314E99894ECE3B36EAE46A6EA9D05F58CF41427C9D428B7C4 +Plaintext: 239D521B +Ciphertext: 586AEA75 +MAC: D863F1A2094DB2B6AA82DF6F8CF450C0 +Test: Encrypt +# +Key: 6ABF9CDB075E7BEC9D69797B3EDC5A011371245454771CFD4184C31CC8E8C0A3 +IV: 2227C453B0A8A501B0E52D9D +Header: 1F54E7B88D42DAB27F8A6851924A6BBCDB8A0ACBD3102BE75EF753A62D3218FA274DEF164AFC2CE36847E21CB76002891C3F1C611871AC8999FA25CCDF4F +Plaintext: 7A9CDA17 +Ciphertext: CF1D74D9 +MAC: D9D941CBE6AA699780FF7C2BF04B76F4 +Test: Encrypt +# +Key: D894AC744F102A3F697E5EFF6F931351E600F01B711C232726417AC324A65B2F +IV: 621CD171847BCC7AEDE774B2 +Header: EC680F5DBB772DC891FB4E909267123F169B4656F1688648275BBC1C627B6930DB25478414166D0E5CAB9DFD04E5546AFDCA1182D8A9B0596CC0EFC667A616126417B88B19B6605F366BC1C702CF825F3292A9 +Plaintext: CCBF476B +Ciphertext: 2EDC16D4 +MAC: 07CE3C25C5966C51E38474CBF19BC045 +Test: Encrypt +# +Key: 58FDFCB4C5D70210C92EA7FB4EBBB409040553D85AB0A87C60F86B70E1706E00 +IV: C178BAFCCEAE439AA1A1B624 +Header: E920E4D5FC4DEBB556F07A4A4A52C739D2B4E4992626F9E2F94C7A203CA0AC1BCD572B13FC74684471F51963FA9ACDAEC792B85BA6090277BC4C6ED5DB3B9CE71EECB6CB32377D3BEFCC9FFD0BEBC83FF8B24FDEDC03184C25026AED0E717C65834E7F09DF0C +Plaintext: FFBBDD35 +Ciphertext: 3A4E82E9 +MAC: F42B4C15677B7DE78D83BD366E33B8BE +Test: Encrypt +# +Key: 2F06F1D7E9B7396E63CA973124A51C2F90F9E28EC620532A252192D6DBC9F406 +IV: B8C0040E97245417D3B54B3E +Header: 50851EB95ABBCFB901938B0592F82F63E8EF620CC110C72A98D9AAFD5F4B2B6754178232F6E1A302B7EAA1B2152CA00F7A2D5004F356EB7CDD4320BD877D6C851B86A2DED9D8C888507199C0269105A7CB40A328D05ABC4382AE4E21220FDD421E8B6BD93F02 +Plaintext: 11BD573D +Ciphertext: FC856522 +MAC: 3CF96506924E8749BBCA4A85D89A3AD7 +Test: Encrypt +# +Key: B6FFE2284DF3C746296E5E9BE02E0C6CC00E619C2701C686A98212F3FA7E8006 +IV: B0D573A42EE8960423A94825 +Header: DB60FCABEC629F6D2BC1D6B32F27371FCA5E89DF872CBBECA693B93ADED76082110427FD8F77733E790B916A5448DD15A4254C00202767997BCFBCB6A41DC04465067F133D7E57BECB071D47187ED680BCF8C364699A81E1FD3FA667A3009D9DEB1BB2CF9C80C43C +Plaintext: 838E7C88 +Ciphertext: 0A6A0936 +MAC: C13E93AA2EF060702F4C4FAD24D710CE +Test: Encrypt +# +Key: 014414D52C7FAFB926D0EC29E6C888B5A0B4E3D5C8DA260DF46F88BBE7D06FF4 +IV: 7146D7C800A106FBDBF97573 +Header: F05EB366B055E95010211CF8EB5B00E12B9AD2CC83227E15DD57387E5522AD914D6C7227EDC4AE3684675744E6D8877E377270C306FF63093F052052A4BD84F736D6006539534DEDCBF763309AF5C03EEA5F888848AD38E6FA889D11B811217272B23228CB507E5E8623D2A0E1A469D98A07E044C496 +Plaintext: B5D4C4C1 +Ciphertext: 92FCC2B9 +MAC: 469692B9B0F63596E4B12A998F061ED2 +Test: Encrypt +# +Key: D1B2B1C0708A3BD5AAE4CED78319F12F6F53C6F025D464CE27698C2F6104D7CF +IV: 8E3D8893FAC25CF45178DB2C +Header: +Plaintext: BE7FFE74A1 +Ciphertext: 381908D684 +MAC: E4197CB0A13379929D07BC5F0CAA8F97 +Test: Encrypt +# +Key: 162F15753649E090ED26C389EB26DA10184C1E1DC59D04809E822BC021A11659 +IV: 4A53EDCC3CC3D65316892DBF +Header: C6 +Plaintext: 646966AACC +Ciphertext: F5A56BFEA6 +MAC: 00E337F89434973E6723CE359B5771B2 +Test: Encrypt +# +Key: B9A672916C5662E0BC3F68928D250A9B6C3DC86E73DA0247CFA29535C4480917 +IV: 35F9CD1671DBECE3BAC320BD +Header: 1216 +Plaintext: DCC0EDEA12 +Ciphertext: C2A939262A +MAC: C5FD83E679B15AAF43470CB58F7A5FF8 +Test: Encrypt +# +Key: 00B428F0F99549AEC45E1E22A68194E91C27DA54D8F7871A77AD370B05D145F1 +IV: A332E648DC55DA198AA40D18 +Header: CDCADE +Plaintext: 7BF1C28984 +Ciphertext: D70C5BDC68 +MAC: C833252DAF44C56A0171F4126FF0C6DF +Test: Encrypt +# +Key: 793026D06D84AFEE6CEAD9A9D589EBB5263F1B33B135C77E9E99EFA6C96729E6 +IV: D21C83BAF4D9CBEC725C9733 +Header: 0D40D4A2 +Plaintext: B42E4DEF5C +Ciphertext: 03FB8CEC60 +MAC: DB7B3CF2185B434E6BB9507F73DAAFA5 +Test: Encrypt +# +Key: 9C9FF2F7B89F863F219B72FFA654FBCADAD9DE5FCD3B484BF87BF30D027C8514 +IV: 71E72CB31DF24A14574DBD54 +Header: EAE5B88439 +Plaintext: 8B52EE82A6 +Ciphertext: 896F7F4D7F +MAC: 4394E5D47EBD08FB3BDB9BE00F5104D1 +Test: Encrypt +# +Key: C070D91A1624169F35895B31A4BA97B29A7EF37DC505EEC2AC8C4FB3D4BA72B5 +IV: 26DE1E2CE7ADCD2D376C9C14 +Header: 727C01E7DBE2 +Plaintext: DECE232F39 +Ciphertext: 508D3004C9 +MAC: 3FA9F54B1E19EF06B5FC11A76FC146DB +Test: Encrypt +# +Key: 626D7B3834C3C38943F0F00F2873131CD18F23E0458602829990030654E17CB7 +IV: 2DAC66C5F76231572AA4536D +Header: 536F80C4E97871 +Plaintext: AEA5E899A9 +Ciphertext: B09FC6D63A +MAC: 534BCA8703C1818BF75A715707DEA071 +Test: Encrypt +# +Key: 06EFF3D79F4405A24F22F3E618BB83820CC6043AD9C6B6C12E1763CDEFB46E27 +IV: E8FF49F9E85114BEC88E2586 +Header: 1F949162E6636477 +Plaintext: 16B67A45CA +Ciphertext: A5EE1D98C4 +MAC: A4337DB15A037625997B6A85ADE6CFB9 +Test: Encrypt +# +Key: 469BAF4BE04D9130B01D0677A31C80507173AA8206790CD5077FCE0CAAE136B0 +IV: 94B123F6A9DA7B3B71C4D94C +Header: 8F9EB2B0119D07F01F +Plaintext: 4B2B72A6E1 +Ciphertext: 0DBEEF5C2E +MAC: 28387DB8089154A53C4B222F0112E9D3 +Test: Encrypt +# +Key: F7E758A5E5C7E784A97198D594FAFBEDF5A1B4F8C817CB98F8BE81DFBD1477DC +IV: 54714937AAF8CFB42E6973E9 +Header: E32F72C8E775492036A2 +Plaintext: 71536EC7B2 +Ciphertext: A0EC4EC2B5 +MAC: 04C5B23C4FC15C842FD2951F2689A67C +Test: Encrypt +# +Key: C87128D22DC497EDFCF3064F40DEA820F3A5DC7D8EFCDF87E1E58C13BD63A849 +IV: FCC56D5DD41B4AEF642C17A8 +Header: 832DEFD038A27B6973B7FD +Plaintext: 40A43E6C4A +Ciphertext: FF0290A432 +MAC: D466749B5DDF4851EDA8FC0ECA58ED88 +Test: Encrypt +# +Key: 4DE1A7232234716ADA78536BB41C6360497CA2DF7CA8B92D8DB0881CE7403354 +IV: B92BAFEDDF861601D93C6D91 +Header: B251F92F5CD0E9F38F9FC153 +Plaintext: 8377904367 +Ciphertext: 03D85A75F7 +MAC: 54019C451E18189D5329588D1347FDC5 +Test: Encrypt +# +Key: 87C6EDA114068D314F12ABC97D5040C11D8F798C58347129C15A15E217820612 +IV: DA8B6B291B5615418BC9BD6C +Header: 04A8BF3EFDE4CE281E10AA7255 +Plaintext: D6CE39133C +Ciphertext: A09922ABD0 +MAC: 978A76D29A137E3EC23BCCB1704BEF31 +Test: Encrypt +# +Key: C70B7C83FF2A0B451CC8418AADCE889A1E9D4572C4E43E0F6D47DD9E0D3A0225 +IV: 57965E61AFAABB4DB136B25A +Header: BDFE20A9F74EDC851D3C9C9563A0 +Plaintext: 9B1F1DB5E0 +Ciphertext: F728014536 +MAC: 0539ADC7BBD9F2F86F2352623833A5B0 +Test: Encrypt +# +Key: D033C64A1BC8D898E0F77D6A5BD0FD77522C5756FBCD216646058F4A08C573F3 +IV: ACC300F42ADF3A0A162599D3 +Header: 0D51108DDCCAD34530853F83B9F490 +Plaintext: 3ACFDEDC15 +Ciphertext: 657FBCE905 +MAC: F243EC6993AEBDE7A5073851AB9597D4 +Test: Encrypt +# +Key: DE425BD01C16B5BB8C9427AD59166C567ADAD241B4543AD36C34A2423394C6DB +IV: 1D78158B525FC06FBC0EF663 +Header: 790BDCD1F91C6167F24ADEFD555F504F +Plaintext: 6F91B5F1F8 +Ciphertext: C71BBD8B5E +MAC: 796094CAC8ED429E905CDAF32EC5EC0C +Test: Encrypt +# +Key: C07B49E32551B1729FCDD83036339BD03DAFA451CA3E354525275D81D7DAF4CE +IV: 0EADF7B7E84F47223F5FB4AB +Header: D0A69683826DADCBE89E2E53D673D9DC7DE4BCA7 +Plaintext: 08AF76E481 +Ciphertext: 5FBC8288DF +MAC: 7141F0A3F2EB1BC644ADB84839E9BA39 +Test: Encrypt +# +Key: 3E9B198475FA2503679C0A9E958DAE83F4757F0F41C12E37F05A8948B7F877B3 +IV: 5D6D23F0F95D689697EFC848 +Header: 001FA7CE126E0D7EEC964C690A31EA465BABEF8C9FFE42451FED90AFE5CEF1427A87373CD596697A22 +Plaintext: CAFF4E1C19 +Ciphertext: C5364324DB +MAC: 55329562CD675E01A82C384300C69E5F +Test: Encrypt +# +Key: E665FF83A1B96AA15F5A9A28A7ECAD289592D5A2C65CEAB29134D2C762A1DDEE +IV: 786AFA1C77A218EE4DBD53D5 +Header: 1C134A1EDF75C7B2B29DFC00F6ED19BAFC232015708727FEDABED3B053FE9B09F1C97AB085C552873A0F48B6BCAADCB951D7F33DAEAA8E1C825A1EC7F646714A +Plaintext: B7A1F578C0 +Ciphertext: 62C8A12975 +MAC: 11733B51184AC1616AF3D9067D874312 +Test: Encrypt +# +Key: 572A1716665F5C9A48A5CB15E5989E78D96A09FFDBEB9CBE58D990EA175BB72A +IV: FAB811B336EF035B8407E5E4 +Header: 3CB3D359C190B73B53784126FD042A6BFF5DCC2B3F96004FBD118875A40E2C617C7A708D713F1BA49977D294D21B8C7138D937E5B0AA221EED79EABB712C59A603CC3C +Plaintext: AE626D5E6B +Ciphertext: 302C104DDA +MAC: 2088B234A509DC1A27C790FBA5EDC9C9 +Test: Encrypt +# +Key: 097A504D6E7AE88C049DEC5D2F13B683946D935A8DA28A8BCE9B7A813C892E99 +IV: 1892098C762A3FBA5E6B335E +Header: 29273901845E7665E4F30F2946F75778111F4722B078CF155B357BCE2522E465C9EC77568AC531E546E700BA3359C0CF0C6B5D4DB8FD1025B7F793A9BF8F88CAA96E61C4F8ECA192DD711AF8E54999E6294FF2574798E3ED7E +Plaintext: 9729E753C2 +Ciphertext: AFF08D48DF +MAC: BE7112311CEE34C586C90062BF804364 +Test: Encrypt +# +Key: 899E974C282D46541CCFBBD95BE699F9DFE5B80453527061727190CAB3716F31 +IV: D9854162A756C46E5624D27F +Header: AF59240A599C9BB2CD64444E3953EB0C9A016E554D3CA3CD1A5E5CF25A463FE080398A68972E0F227B5FB824D2FD8BE0B5F3372ABD93465651586D54DA32D0CB63A977B09B94DEC8213BA4CEFCA5F686EFA7995F79B132129BF9D45B5ACC60980E6C796E09 +Plaintext: BEF303A1ED +Ciphertext: 3E61CBAA60 +MAC: B009E751EED5B93829FF509E0049FD38 +Test: Encrypt +# +Key: 6290059B950C461467838C1AFE59BE251CD5F5164C400733DF5558315211B80A +IV: 0709F893DC4AF22F1C5C4005 +Header: +Plaintext: 44CB3FA98C0A +Ciphertext: EB621C6A09E8 +MAC: AB11E6836360E360C6C5693180A10A0B +Test: Encrypt +# +Key: 10A3A2194ECCAD4129476ADFFE309B5C25983851C2D6C47E3521A50EB3726E80 +IV: EF090016414281E2404F6911 +Header: 2B +Plaintext: 99511C208992 +Ciphertext: AA3A92C3BCB0 +MAC: 6DC8E61248450403DB959A4E5AFD7310 +Test: Encrypt +# +Key: 146D07EF12B91AB9DEED5051D019E261A84BD8F9AD928443C5EECEE2D830CC36 +IV: 81AAD749404A707FA0070ABF +Header: CFC8 +Plaintext: 648A385FF90D +Ciphertext: D12BECFF772E +MAC: D3B9FC7F54211A82F340367EEE138BFE +Test: Encrypt +# +Key: C285F6B0A9E84C04C6987CBC65469C5C2EA22CF0C88242809B88E8D9E12EE380 +IV: 061C38CD865916A6EFDD60CA +Header: 47C654 +Plaintext: 2011D6537438 +Ciphertext: E7994DB8E800 +MAC: 8B382FDED139DEB33C47BF68F6C7C918 +Test: Encrypt +# +Key: EF1B42066347627FF90CDCB6BA0F6B039A5045B480F1B20D9B09B8E054E1F2DF +IV: 225316327E86FA9E6D7A65B1 +Header: 0D131222 +Plaintext: A50EA5D3C488 +Ciphertext: 6E87EE8344EF +MAC: 3C54B9201E95C2B3623D1B54EDA7E4B3 +Test: Encrypt +# +Key: FA1CF3F6FEA320D5790AA7E1B7B43FE7F2D3D1A8FE10AB7E01CF6F4840A1A66D +IV: 04583D2F4BCB953181F348EB +Header: 297653DF57 +Plaintext: 8EFF657F136A +Ciphertext: 40423964E28F +MAC: A5AEF460A7EE370A7E31A8698291C028 +Test: Encrypt +# +Key: C1EABEE473F92D2481E31926104D2D8CD14CB67E6B01B805B187951C11E94FBD +IV: D1B406D26866E8E6EB318700 +Header: 1E97CDB284AF +Plaintext: C5799D176C2F +Ciphertext: 263D9A1121D0 +MAC: C213B04621ED60B4AD7E95E4B12EE4B1 +Test: Encrypt +# +Key: D4D59257EFAB02C0953FAE3CA5D73A43F6F3DE61261773B2E2721028FA7BBE39 +IV: 970AC7B10134556094CE582B +Header: 7AE4350D427FCA +Plaintext: F331C2657994 +Ciphertext: 9B094FB79DB6 +MAC: D2AD61B2B3596D60F6297164F8FDBD9D +Test: Encrypt +# +Key: DD484165711799C72382496668D154D13598DA4BE22CA8BB04A688573100C716 +IV: E4A70591C7E2B95636DC3C76 +Header: DAA1135ADDC7ADDE +Plaintext: D7E3B975E360 +Ciphertext: 1BD924CD2C89 +MAC: 91526E41498A0F277A006C73B9B73DD8 +Test: Encrypt +# +Key: D4593E9727A11C40445CE860B97B2A6CD3D3E84E2C2D445C3C7F01FA31F82583 +IV: 394F784B8975E6E3A5C15285 +Header: 501245DFDADA3AB90E +Plaintext: 03A55C3C30B0 +Ciphertext: B16F04061317 +MAC: 133D16ECD848EF1505BB362D0B18ED15 +Test: Encrypt +# +Key: 3193659F5F8A14B4776961766A3063CE1292BED6531B12691BFE7334FEBB8AB9 +IV: E768B3E2A540DBDAB5F64B95 +Header: 1C9143CD3943AF149D9E +Plaintext: 0B90E5789E72 +Ciphertext: 617CFC5A7027 +MAC: A116D19659AB22AC67AEDCE6E3543E27 +Test: Encrypt +# +Key: DDA6F6320239610CCEB80B07B0CBE32F968B076C40DB239F24D86EE51546A649 +IV: 202A73FB5C2A1D6BF3461AC5 +Header: B9157F43720CE9D1A0D990 +Plaintext: 4D5746035833 +Ciphertext: 8BC56DC405BC +MAC: 61C8AF116DA3B6A2AC16020430538BB3 +Test: Encrypt +# +Key: 18E6CEE7DE9D8461197A34ACBBB6F1F845EE064B58555B0ADC889EB6FEBB9884 +IV: 8FE48E0F32CA86BD687629B0 +Header: A83386DB9D3F1BAC2CE7C227 +Plaintext: 59561401E95A +Ciphertext: 4E35F6ACCE4E +MAC: C8BEC1E41405673AFEC2FAAB23C9BBE0 +Test: Encrypt +# +Key: 7DEB6ACA91D9EB38111C8C18F042D920746CC4E4AD1BBA3A8199A34466C53AF4 +IV: 2BB748990364A101EEA6297D +Header: 27FF7EBA2632DF04EB59641425 +Plaintext: C6547589F810 +Ciphertext: 6CF554DDADDC +MAC: BE15218C1B86D554A7D57A70C8CE43CA +Test: Encrypt +# +Key: 4EC1A95488D250C1953D99960A0A059CD1FF4814CAB1400EC822E8735D9A7447 +IV: 0E90EC16B84175E0AD5A3A45 +Header: 71D195C844F2145D157CD0459BE7 +Plaintext: 650D7C246566 +Ciphertext: 034DA25FA427 +MAC: D9F26BF040C38290252207FDFA6CF4FE +Test: Encrypt +# +Key: B667DDA3E2BFC8B4B6FBAC9C6CDF8026F1F3646BC5FE6C04AC48CFAE893105B3 +IV: A447DA4BC2F821C810E3499A +Header: 2F1057F0FB230A52E14D2CF240BFC8 +Plaintext: E9F7EC16CB18 +Ciphertext: C4BC9E4910CA +MAC: 0753C1C0559F967EAEF72BE71B10CDAE +Test: Encrypt +# +Key: 47E98EDFAA0D8157BD845556520AF050F16B9750A8BA8AF6AE3397018F50A9AD +IV: 0A180FBCEDDACF50AFC8C8E3 +Header: 272F13AC5719A7FA16058FC3204B8B9C +Plaintext: 812713D4A320 +Ciphertext: D2A53D7F5830 +MAC: D6F48F0B09854B2DCED66B085AD3B240 +Test: Encrypt +# +Key: FABFE35C2B29F99DB6F4DF02084138FA2E5717938E19EFF7883A17ED072DF44B +IV: 506701A2C8504C1AC595FC53 +Header: 62868CDF5E9AEF016473DA053B1F3B444D18EFD3BE82450F80E7BD07CF9DC2A439187072 +Plaintext: E8051F729740 +Ciphertext: A73820417FA9 +MAC: 80AD5624A647C4C9E390EC61953D5E2B +Test: Encrypt +# +Key: FF274BC9C631C664F09A20D1D1B1137C0FBAF21415200660BDAC39D7870EDCE6 +IV: FCF14493F006BEDC7A570D56 +Header: 8E4F6FE535D269279A2CD0D07878D517959D3F59E0B71993F20A7792A530FADBE4BBDE1FA37CE19FC9FA96C09603C8272868 +Plaintext: 7A234F498DAC +Ciphertext: E78FA2C565CB +MAC: D2A43CB5A95D4A43D0DB95745682914C +Test: Encrypt +# +Key: 572A96FE92557AF1E3D803ADD0F12E77BF3A5655E1A2FC6023141765DA6ABED8 +IV: 1EE40C24019276ECB8C28057 +Header: 01C2BD53A76D3E78268E753758008F20451E6752AFFE13390AC9E689E9C7A0807C1A5B085E80F2472F6C1EB0C0B17446624AAFE36F161418BA332DC68C057FEAE7820C670DED258A3DD25E43F5 +Plaintext: C096A9A06A0E +Ciphertext: 157A6AF205F7 +MAC: 80672CE56461DAE6AA4E8CACE957D889 +Test: Encrypt +# +Key: A9E9776E2F19FBF444A0EE4C5B3461852830B308F57A45A78E802D70AFBD4D0B +IV: A4EDDC50DB03FC19FAF24185 +Header: 25B6DC55B42802871B858E2669868A21DB2539291D7BC670253EED5C0291BD66D01C97AABDB0AF35D929368E8679EC667B7A9BE4456228B6F22D9155D8FFDECFB0EB26285AEB6D5B9C4DBA95674151D664D6 +Plaintext: 804C4AAAFF01 +Ciphertext: B2C85A994C6C +MAC: 363F3CC4BB4A548FCC4A561B78013BE2 +Test: Encrypt +# +Key: 99D6C1F500E1F8CB30409B3E469A0BF44572BC49BA84C04CD6C2F88C48471CE1 +IV: C269358BD7D50C0E4C675B06 +Header: 7935470809AF3E12CFB90F23EFB3518A34CB62994D3D3C368431AB4B1CAB5F5686623714E8627F4836552E7D4D73196625B50AF376978A6520738C4DC8594942947A01FDF878041704AA4DE8417B29298D24012D38E65CF443 +Plaintext: 65BEC1CF8157 +Ciphertext: 2CD5064D6D41 +MAC: 55DBBC09434B3487EF0C1BC2E9D2AC3A +Test: Encrypt +# +Key: D4FF58916B7DFA55F6CCF8884DB80D938D1361B98D3CC0697C97346F3C9E8A3F +IV: 3DAC3E3D3C3DAAACD2D34B4C +Header: E038AAB26BFB61A5D1C5A82484A1427A791920FABB2AC289A40DD34ACF88C4C62DF8FCBE0C6D534A71A33639E8FD3E89A63D793F0A1A2CF39BAAECE13762A8FE07E8733FC74501ED688C5353A25751CD0968755B7067478E64057D46BA34C01D27855A4408D252C8D5F53C +Plaintext: C0CBC1705CBE +Ciphertext: 82081CC83A4A +MAC: B5F828EEB00FA0A982592733056F9D5E +Test: Encrypt +# +Key: 921D6D53365DD86D1D00BD68F503DACEFED73A767D54882A86A6A002E6D9EE22 +IV: 61D26D4C4FBC2B0504728D0F +Header: 7C81D0DFDA21C2C2054C702DEDDCC67ED7EEE7D305E0420CAD182D727A921AF7EFF245C51677EB01591D146F5693DD9B258E69D99763AE907FCAB98FE4B0E99BB8093BBBF55C4A2159AE530FA28954181CECD967B1E70565D0081B10E16C4440FD4814AEE96DBFDAB39C2E012F0C +Plaintext: 5C464DE1DF2D +Ciphertext: 24FE63F96A97 +MAC: 2C955F5F8A69BFFE35A81519880BCB09 +Test: Encrypt +# +Key: B244F8A5CB182162EB572E17A0376D339AA6BA10798315DC18AD3F8F8C6C9DE4 +IV: 1B90234B3F0EDF7E3590B716 +Header: +Plaintext: 93B84A5FD02CCA +Ciphertext: 19BA05EC661F00 +MAC: 46E0A29F0A6087496301597C57AD4DE6 +Test: Encrypt +# +Key: 7EF78F91F3142BE55D80407A8D263B5CFC786444CB661B57C221660FCCCE372A +IV: 04E81D93C7976E2A5CEF4814 +Header: BB +Plaintext: 7AB939424C6DDF +Ciphertext: 0BAA98FFC0F197 +MAC: B7420BABD75E271137B8BFAC3B391AA4 +Test: Encrypt +# +Key: EB66FD147FCF0C1D98A48E772A03A35FD7C5278C86CD21BC88E06F83EC44AA5F +IV: 6336AF3F2673C7BC6F541031 +Header: 6797 +Plaintext: A01C396CE32AAA +Ciphertext: 6C80E3C83003D4 +MAC: EE1D44958E057531FD0C3A6F73A31AD1 +Test: Encrypt +# +Key: 6113129569248B4E73CFE29D14D214DC041ABADD1A8A64B0E087CC4ABD27F573 +IV: DC932A9343617D886576F8CE +Header: A3D0F9 +Plaintext: 88B2C8FF223909 +Ciphertext: B7D6BD7F865CB8 +MAC: 4D9D7E143F307BA567881CEA9BC8CB43 +Test: Encrypt +# +Key: 096BBAC6B9E5F0C5D6028D38B0815CE5FCF202A64EB279C0C054FFA0CC783B78 +IV: 75860C68D617288EA0FB6A2A +Header: BC0A454D +Plaintext: 301ED5807BB562 +Ciphertext: DC126241875952 +MAC: EDA41B12A34E15719A31564456F379C7 +Test: Encrypt +# +Key: 63DC4F0E468EED1EE4DDA995D9EE31FECFC0C409C3DCB5DB4AB7A515D122B3B5 +IV: 319B2AC59AAE46FB1DE99091 +Header: 4C070B7F53 +Plaintext: 363422D453314F +Ciphertext: 558E8CDE3D3DBC +MAC: 5C8818B30E82B474256BEC009E6B9777 +Test: Encrypt +# +Key: 28EDAD7538048EF5F9BAE038F60F82B3481C3084F814A7D9427FABB5B43A1A87 +IV: 1EE6712E3A12FA0125EB192B +Header: B46387018CA0 +Plaintext: 94A5EEEE5E6D8E +Ciphertext: 94FC5BD63A72AA +MAC: C15DB745398059B9BDE06B1FE6F9A4FB +Test: Encrypt +# +Key: B0975992DB098CABF477F2C3D358811DCA3C6B9034E2F79B2428C3CF37A23B1F +IV: 25D4BD2EDCFF7E3A63672631 +Header: A180FDFC938061 +Plaintext: E30048600A04FD +Ciphertext: 7DB54884741A40 +MAC: 6AF19546E44464B13821567C7A3BD2F1 +Test: Encrypt +# +Key: 20B708FDFB39C34F00077C20762FBEF715CD76FC70888735F27CC8AA12AC1E0E +IV: D3D457D099D1B75AE3729FC8 +Header: 3F403382F059D2DA +Plaintext: E54415C4FEC574 +Ciphertext: 773043796E8BD7 +MAC: 0D89629A6012EB94F25172C551C88295 +Test: Encrypt +# +Key: 1705CED525F182EEB6EC33E4FB8911A55A2BABAD2700C0FBB2863146CF0AA010 +IV: F0C441A02CF3C9A73C848006 +Header: BF05B5912A66CFCBE7 +Plaintext: F9D60D951D1E51 +Ciphertext: E7A0E741B7A0DB +MAC: D3F1956539BFE0F1568B9CAC052217F2 +Test: Encrypt +# +Key: 893395C20882786EE156227060578222BBA8021C2D96F2B8257B2AFE01F277B9 +IV: CAF3B95C112860A25D567A87 +Header: B2C4C2578E1F07482301 +Plaintext: 47FB698A6C7294 +Ciphertext: 708E0090CA002C +MAC: 0D750ED9B4A9EDAE6E4C3C3E0DDC226B +Test: Encrypt +# +Key: 3D6A05A98DF88F77CC7A3D28C0EF7281EE512B80CBBFE8D1CBBE335B7C1EAA9A +IV: A7ADBA427093EBD8DA6C63E5 +Header: BFCDE9A3C9E18E477704DC +Plaintext: DDA749EA94B83F +Ciphertext: 15C5F84BF6D17A +MAC: BFD08CA3163FC477BDED032F853EBFD8 +Test: Encrypt +# +Key: BEA224DBC03CF0B40442FC43CA6CCFBFA1ADA3B7961493E5C2AEEDFD608E3CB1 +IV: 78C1B818E2A1B1D9577BCDDA +Header: 9CB27463F06D4B0D3D2136E9 +Plaintext: CC823697189C7C +Ciphertext: ADD2129BCAFC9F +MAC: 0E53ADF507D429121AACD9612B552DCC +Test: Encrypt +# +Key: 6DD01F899EBE17AE05FF70F1706904C97046DB35404743D5BA39E94B0F1D10E1 +IV: 9A6E63A10D651DB934115EEC +Header: BB712FB349F8763A7D24F713A4 +Plaintext: BF4567B18DF381 +Ciphertext: 0BC937DD62E09E +MAC: 180863563454B5033C6DDF30C59C94D7 +Test: Encrypt +# +Key: 4AC23A2089FA17EFFAF3054A9B054D6668EEE8026DE5E7FA70071A010EDF2F2C +IV: 051E8EA95FD2DBC63AAD977C +Header: 1393FD9E5133D82CD65C1C654A27 +Plaintext: A424BB74751893 +Ciphertext: ED95477F6BBC57 +MAC: 5BF3649C00F5143B53EBE6D4E3971323 +Test: Encrypt +# +Key: F7C960051A972A00E82B5C069A2705CE1225EB1FD812CBEBF147E2F85AC2DCD1 +IV: BB23661470693901A7B324F1 +Header: F7A79DAAD6CCD6C1AD279241F6316A +Plaintext: 799C9E03396879 +Ciphertext: EE544F61A13035 +MAC: 439EB974E60924915C1C39133B1DEADE +Test: Encrypt +# +Key: 804DAD5F73A9937EE3E730699CD94123E3E73DA89691B448F24D797BDF63334F +IV: 710DDE5723BD06DEC2B30C98 +Header: 6F38CF2E35A43752D52CAA3E8F448FEA +Plaintext: 1BC2D98D828FD7 +Ciphertext: 49B0E7DC9D51BD +MAC: 14C00ACBE2DDEE812B13A942188D2024 +Test: Encrypt +# +Key: 64CDF2FD6DB21430DE1F31D9518D78CAAD4F096A64D5111C1F58F7AA6CE6AA23 +IV: FCB9BA2D69D535E217E5AFA1 +Header: 28CE358929F8633CAAB4A6F551B5C9AB501A8B241AB5FD79FF3CA9B6DD26785B98FB012D4DA809C30B346FB783 +Plaintext: D904E7AF3243A9 +Ciphertext: 25CB9CC145241C +MAC: E366C532EC5426DB525760231D681AF1 +Test: Encrypt +# +Key: 12176C96E7BD267313CC95144A4B4491FE6C6777F62CC81C4D27329F5CD9F1DE +IV: C98FBA87CEA53410A49C4E87 +Header: 9C7F11814D29C6BD4B67F17AC89FC4E8A3188AD60B96CB0A284D773B2361FE705B966594097F9F3383DAFC7F02DC753B67569CC2EDF40C5E9BAED4EBB6 +Plaintext: FA940FFF81F668 +Ciphertext: 5752FB8F41EBFA +MAC: ABB799AABEF9F01584388952BA98780A +Test: Encrypt +# +Key: 360C97B2CA6DCF35D2E5CE810EF99BA1D916069BCC2EDF422662859427762CE4 +IV: 7D959E87493EC9B9C140A9AC +Header: C3064F0DE75C87275862F12EC2450B2B45DE499AC5DB85E4F5534478B10F716A992B1963CF3CBBE4E7B64E496863BEC765D8B515AD47B65D2DE19830FA3DC9A8D7CF6A0DA18D8EE30D88964EE767497F79064D +Plaintext: D233A4C8357E84 +Ciphertext: A6F14768A555C0 +MAC: F00CD0A0422B5065765BCD4C88F3ED42 +Test: Encrypt +# +Key: C76454B3FD860B6BB220F3D1B4341E4EDCF2C1981B2859D88CFAFFD46A8140C4 +IV: 547FAF4A019FAB3B5C171887 +Header: EC82877277161B6823381817AF7FA992402BCBAF5A399CF06A51035654EB7CF4D99E18055A302DB2B8FD100D5C3AABF0B3AD29D08D6C9179CEE7154E2ABD123C9EE829F8FE21D0D16D312C2C034BDF78000436 +Plaintext: 694C0830E42F75 +Ciphertext: CC404BB1210843 +MAC: C3F7C45BD1BBC6D91E89D7C7C74BF840 +Test: Encrypt +# +Key: CA7A9B96DEBE69951D2A030833CB7AC1FC1C1B761450BFD245277AE79C1C2332 +IV: 55CF4C233234B3D54EC6361D +Header: 0C31847D103C07F0CF34C3160E34AF6CA4F699BD6B4B64069CCD03A4BFCE8F349FC346DC776CFB9F90FFC3D43CDAC376E449CB413908D694EC3B13266B96205062A934E9593DA3F11E642F324A37C4D4DBE87A49C1C5F0F6E858E8084041B7144FF7CE7815BAC7C5A2 +Plaintext: F8FEA7CB3D99AC +Ciphertext: CDC859F8F57E74 +MAC: 12010902347E70CB50EB8DCAF5412E1E +Test: Encrypt +# +Key: 945C53E8378A1D98D184C30D360FBF0D6828106F1BD7171F9F2B002FD4DC1C30 +IV: EB6BDC7576F99E17F8E49684 +Header: 4B99E590BFC3A499D24499D1E44E916952831DBFB8138C2063BD347E1CE67CCA1C5945BF4FD472C63190DCAAF437442E29AB57087947C2B33404CD11A0D1AF2B6A2C1706A9C5EEE802B016600DE16749F47B824A44ECFFF87805925C9589EEFF66868D0796ADE9F6CC275EC7821B44ECCD2B0669E147E97CDD44D5993D +Plaintext: C06ACC8350714C +Ciphertext: 04FD4B197A473D +MAC: 5687B151AD9A217AA6E724F28F1EA388 +Test: Encrypt +# +Key: 47E10CED31A0746169551C27FED316D6F23241B5B235F6738C64C0D1C2801608 +IV: 9C83D3529A091C8E8F33BDC6 +Header: +Plaintext: 25A3DE2C2D332463 +Ciphertext: 76E5A9AC81CF7E42 +MAC: 015C60DA2D9E7DEFA0C8FB8A99B6338B +Test: Encrypt +# +Key: CA5B689294FDD351710DF3A6603A620317BFEFB1A74A6C4343EC55E4AF710252 +IV: 0377B68B12858904D4A77CF5 +Header: A5 +Plaintext: CF2209385DAFC7A8 +Ciphertext: 652801156ED3F06F +MAC: 31F9DD64A84DFA0C63866C5E536F426F +Test: Encrypt +# +Key: 4AB10B2377D11E168F13300568214C411FC34602BC3E67F4019AFB1B64AB8FB6 +IV: 24FE08C4E7A2913268072570 +Header: 477C +Plaintext: 55726092BC10A98E +Ciphertext: 1F347AC4F1E672D3 +MAC: 02600D65A4D25E95050DDA81E6506EAA +Test: Encrypt +# +Key: 172EE558CEADC1A64E0606F22E284F8EB5A97C63725EC05CEACFB7632505D853 +IV: 75A6772002E32DBE948042DB +Header: 5DD203 +Plaintext: 7B14217C9A7B35D6 +Ciphertext: 0AE3D0063F1ECA6C +MAC: E3065AABA77696FC9D5B8050FEE75B74 +Test: Encrypt +# +Key: 84DFBA89DF62BCBE74E17CDBF11462C9380677415AC2E441A1BCC9BC1A068B21 +IV: 3642C0CDD518C3852EABD310 +Header: 80FD8E3F +Plaintext: 06BE285AA8F90C4E +Ciphertext: 7B503E3AD56C40B2 +MAC: 3E8C53F2CA2B033D75CC17D7E20B783D +Test: Encrypt +# +Key: 933FECBC39ADFFBB86B6D91F476B0612DEEBA0634D59A27D2DA479939701C71C +IV: 2FE42315542CDF5C8E839EB8 +Header: D3CDE7253E +Plaintext: 8A148F0171D7E052 +Ciphertext: 9EF7D8FEF5ADD774 +MAC: 258F39C04717D797C08BEF5A897D2122 +Test: Encrypt +# +Key: C11A90BFE3A249D97C10C0EF76F3C3030CF30BE16E4FDC170B9625F8A3C9DCFE +IV: 29EF92BDFAFE5D569A44501E +Header: 7BD079415163 +Plaintext: 6F6D4B4EB6396D16 +Ciphertext: 1D280AEE6980A6EB +MAC: 0176DD16DEF0C931015E65D9B7BD2330 +Test: Encrypt +# +Key: F6F3640FCE90F920724D376D40E02A054BAF293B037D5D7ACD72239C19E2B139 +IV: EB48732C5139FB86CCD7ADC6 +Header: E01713647E1A6D +Plaintext: EC2A7850458C784A +Ciphertext: A48CB561CFECE08C +MAC: 73C21130F8F6A48D876F3C2C96B66A13 +Test: Encrypt +# +Key: 0DA8A6CB691423588F1DF733E773FB32714DBEC1C1638408DF68414E8EC2D1C3 +IV: DA3811610325E8942C2D7B1C +Header: 8A87B623C4F0CA68 +Plaintext: E01BDA48F6F73C2D +Ciphertext: 545DEE76173DC86B +MAC: BBBE89AE42FB5D1163E44C408BABE4B5 +Test: Encrypt +# +Key: 305C654203ED6A28DDF24CFB9BD590A7F4B5B892D2D5DDC54F324F90833D0120 +IV: DCD34DEBEA9C091F8C15DCCC +Header: 550BF2CFB8C76998CC +Plaintext: 5CE9845021C40399 +Ciphertext: B6477C99A65D3396 +MAC: 6432DBDB7F10181658D81076DF106F6F +Test: Encrypt +# +Key: 3A5C4D4D25A812D5E6349AAE003CC26C8D13843872B84F9D14461EE4D2117E6E +IV: 675BC36FB009963DA0AFCCB1 +Header: 8E7A7499BFAACD1613B5 +Plaintext: 69236C514FDA74CC +Ciphertext: A22E532B5E510519 +MAC: ACC2F297991FC7CF1E6782D7FF68BD1E +Test: Encrypt +# +Key: AEC22AB4E490264A0B478DE0CB475F39C5343596A9D98F83950EB51B743066B1 +IV: DED8DFED8A52386ED1B3C1F9 +Header: 5C74661053E4073E07D1E3 +Plaintext: 067B8904EC7D3366 +Ciphertext: A6C0E8D0591B09C1 +MAC: 2529C0DB8EC3297A51C45ADEDEFCECC7 +Test: Encrypt +# +Key: 4BC0F79A4AB5DBDB77024151EF2F8E17C6C9C8C9D590B865677FCB5D6A6486AE +IV: 2C30CE46F02A8EF5A4E6732C +Header: A920C3CB13B87F27A6DE09E0 +Plaintext: ACB6F2A5A4D67898 +Ciphertext: 4986C41B9E3051BF +MAC: B21DDC894ADC054534B520A9CA4DAA59 +Test: Encrypt +# +Key: 7BAF81DB3B4655883AE54D54C30619F8484B8669F95F12AD5137286B15F8665B +IV: 0844D96D96955121EC630122 +Header: AB12A252FB2CC376423FAC8BCC +Plaintext: D3AE8F427D7A7AF5 +Ciphertext: A912AA7DCD4235A4 +MAC: EA2A663F191FD4180ACE4E7664CB2C21 +Test: Encrypt +# +Key: D69007C2856A4ABA0BCF5A450E06BA2F138890BE83B6731DD00365FD3C67B381 +IV: FBFF65F502BB8C016858D494 +Header: 6DA3B704C740E020CBA4E9AAECBE +Plaintext: 01908EFFF84F167E +Ciphertext: 68FDD212928A815A +MAC: 5FAF0ABF471CF0304EE54C4B769730C4 +Test: Encrypt +# +Key: FC04837A553FE86CE94411EFE1AA68B4B458E342DB590E0E6CFCE61388A278E7 +IV: 3F9FE29CEBB6EFEE2E4AAD16 +Header: 4C4E34C3B4F388012DEEE78E84FF2A +Plaintext: 7AE9B9839250D0C5 +Ciphertext: 8873BDFD08D0A69A +MAC: F085266F8E1312EE21B890640D948BCF +Test: Encrypt +# +Key: EA34197E95E474DFED210C6FFA9FA22FEAEA4F72B8D3EA9F487566BF0E53CFDA +IV: CF538A0E64342D5B29544079 +Header: 09C2B4476E888712D1ABA307AB57C3C6 +Plaintext: 06541C059B0C9510 +Ciphertext: B7D40025AEE8C8A0 +MAC: 5FFF5F2F59A0971933C995193DF0BCF2 +Test: Encrypt +# +Key: 287A334FB6ED1478597A21A3F8CCE398C287E966B264EAFB027C1089F77E8607 +IV: 8753922A803DB0BDC2144933 +Header: E83F7928B77A1F567714BCE64642CEF36A300106C26FFBAB3C621E99F25D4E0D83172CA35F024C51591D3DA4 +Plaintext: 12BB66A1D08D223D +Ciphertext: EEB8DA540B35DD9F +MAC: AAD2158262ACCA8B82BB997AB68ACB62 +Test: Encrypt +# +Key: 17CF93A5BA141C39FB7B792E0118A3C82663EDCA03B5430038632BB7DDA8F722 +IV: 9B37FE26EBF805C91B317114 +Header: 2C054B0435B7803B3C83458E977255444BCDE283740DC9FDC77F606E5861A1B712C27C80ADBAEC8F04B6D9E87D419F68DB65D6DA74A8D9DB35F8AAE254BE4A223DE69C90 +Plaintext: 98ECFE347474A625 +Ciphertext: 282318F9F7F98A0E +MAC: D6295165C13D33AC27956B7E16922CE0 +Test: Encrypt +# +Key: 9F5738284F94CAD919B1ABE4B8636D052A1CB7162B71DE51AE0F7B3AB280B069 +IV: 8907BBB6E710B8CB70FD20AE +Header: 91165D76DCFE608CE0F46C1D6436A311819AE355AA4C692BAA9A506D4264D44534B6D4B3EDF0B82F16B7F83A080CC3F3FFA3A60A42932F353FEC1BCDB260B396DC16BDF315FA8FBD971D +Plaintext: 1DD4481CF469D2B8 +Ciphertext: CB9166709DC02A29 +MAC: 1ACE9DEBD9A85413B560BD8EC7C81755 +Test: Encrypt +# +Key: CF40ADD0253638B1BA2F7899BBAF969850113358B92FA2F4832DAC465714574B +IV: 16B64661DFA6C42DD55D817F +Header: 474C2050A813723403322E234822473009C28A89A813B0CC154E4050E7625EE1D4EF8879D95F6A560EB69F3CCD68F47C81290B53A3EBD5E1C7E79B9C46A6D754BF0DD0AB00E3EBCE76FF5E12D6B516625DDB3F3CB242E785E1D052 +Plaintext: C10A142A22155587 +Ciphertext: 42535260F0B8A34A +MAC: 28C9E306AD3C379EBFD36ACB189302E6 +Test: Encrypt +# +Key: F1B928E224A42B432BC03B050151FD01367133475A0988F1E0D6CD8AAB20275F +IV: 89C05ECB4D408F071A058A17 +Header: FBE54FC906A695FA09D69FA5619FD958B5179034CB7A5FDC156D3E9CC695EC5BAAC77827FB2DD80FE24BA4E00247812E3BC629CCF921C8CA1A3539B584326D144F6709A898296866FF2D078EE78B5A6D4F0B40BCFC00B8CF491A3194C81C02CEB7E9987340580996FC +Plaintext: B8B476D7566BAD82 +Ciphertext: BA087B4BDA24056E +MAC: 3BF7E62E9D0EA898BA81041E2D2BA794 +Test: Encrypt +# +Key: E647298660FEEBD79AAAFFB3619F9AF7F0E1A6BCE8382F9837AEA4973E54B489 +IV: 8481A93880D39C02C5F69D5E +Header: 53D93F0B5A0732FE9C7530DEAF45BC898EA54872F069D04935D31EEF8AF4D35B1EB8FCC68D4EA3FB057747B7200E086C4A5697C9C34E780B432407C97559B3D7A903DC833766BCC74FE28D78E0CB7451F79E144FCB1CD0D3D194E05BCF9CDC3AF4F7FEA046E40FF26DA42D5592DF427E0DC0B4C4B4681245603845 +Plaintext: FF710095BDDD6504 +Ciphertext: 5CA0149B934D6DF6 +MAC: 70DAA2BEE90DF9DD381E0C19907C1EA3 +Test: Encrypt +# +Key: E280BB1B5420227685CA69CF6E573D2C979D6D9E7CCD13B51D8800469E73DF50 +IV: 78F900A0BC4316B92E4F2B90 +Header: +Plaintext: 16C4D4FAD9C0EEAE96 +Ciphertext: 5DB0ACAEF24DAF13EA +MAC: 0DCEAB536ABF00BB4DD97F6C0C8BABEC +Test: Encrypt +# +Key: FD446BC4CAE12232ACCF283C9EDCCD758F2689D52AEC9A9FBB01CCD6891837F7 +IV: 3E431633FF844819B495C48C +Header: 6F +Plaintext: 3F304F6689A3FB6E70 +Ciphertext: 02E889775552E8E380 +MAC: A9C3743B2BA319E7CE283FD7C17DE8AB +Test: Encrypt +# +Key: DD880239DEEC4E5F69899F11213CB77691C56D1F6784B2F9166C3C156A514142 +IV: 235B7B5F61241C533241B65C +Header: DF93 +Plaintext: A1A47171C34CAB5758 +Ciphertext: 119AC96128C09D164F +MAC: 471EA259A8A723440DF48D02D82C75D5 +Test: Encrypt +# +Key: 7F9D9FAC4BA57959E15FA5B2FD9C8D8D9BD5088466FC3C0BDBD5EBF2E42234FD +IV: FA03B9DA95E0874A552099AB +Header: 48C6FA +Plaintext: FB8704C687F068A7ED +Ciphertext: E46F2D79D788DB689C +MAC: 22393A9CD0CA476C466BE9220C7C5B6F +Test: Encrypt +# +Key: BFA83B3AAE14B51944CB551A6691E46CFAF65B6DA45B9552EBEF213DC87F625B +IV: D9F59287CA31B8F66662C019 +Header: 89059DC4 +Plaintext: 75294D8BEAA5618D25 +Ciphertext: 8D9585A3D50A83E9BF +MAC: DD63505907D5C37EDF22FD7677B43C91 +Test: Encrypt +# +Key: BB5529C4776084AD32769C0EAD16EBA596E39D76EBFC3CAB2054F8C5ABDA8CBB +IV: C4DD62D5ABE98EFB699C25E0 +Header: 07B0EE3CF3 +Plaintext: CE314A8FF37C0D4625 +Ciphertext: 901F8CA3BFFCC0EA47 +MAC: D422EE27C79C9CF91515629BD80F98C6 +Test: Encrypt +# +Key: F77A6FBC8E12A0E77B168DF37BB9CFD67F006DF33BF3B1B76FE7FF2254C37573 +IV: C1FDF0595143282D8D41C920 +Header: 0CA0205F7D41 +Plaintext: D96603FA72B7C35E21 +Ciphertext: 0142F6F537AD8066EE +MAC: D4722F7DAC6795A9278A7C73A9EF9304 +Test: Encrypt +# +Key: ECA6533322052D33F13BE7C5BD21AF74D81FFE529320147739DE55317D614EC1 +IV: 97E4DE4B7115C013F685B4CC +Header: E20B34C1985D84 +Plaintext: 57E1C21FF6E12FF3E5 +Ciphertext: B011BA3B2A34CF0284 +MAC: 42C82E3FD5987A6830DB0BEDD4A1F64F +Test: Encrypt +# +Key: 3D97AEB7532E2DE71BAE7553BFD4594FEDD623957E0897778DAE441E5B398056 +IV: 894E51CDE1FC27B59EDD2801 +Header: D71DB342A8E1B4BA +Plaintext: 6FE420D100D4CDC4F3 +Ciphertext: 58B1CEB7434CC3E7D8 +MAC: CC11C8DECE1E2345D2149F7E064E1B91 +Test: Encrypt +# +Key: FC12A071203B7A8B009F1AD5E122DD079FC11A499BCA6650B2BF4E7C645F703C +IV: 7B828AC303F3DCBBD1EE7CA7 +Header: 23CCFFF2405A2A118D +Plaintext: B300275F5E06ADB78D +Ciphertext: 2F626F9A4EDDABCB43 +MAC: 5AEEAFB907AC5692A3E05D9DDD9FCD2A +Test: Encrypt +# +Key: 8C51CE6B03AAD5E78F73DD741B5200542A08614370AD86B81001FE1B84CCA618 +IV: 7F8E6560DF63EB7E4902443D +Header: 89D69A54242BD008EAF8 +Plaintext: F1C9421936E8958F96 +Ciphertext: DBA7A8D519F978FDB3 +MAC: 24EA1EFD35393858D87B97112621C7AD +Test: Encrypt +# +Key: 608062A88C4D4FC2634402859F7F1B84D36ED670474DFCA274D0F13E909AFA5F +IV: 6DA3A041672D8A4902CE5B44 +Header: D08F64D9F3B534544BFC4C +Plaintext: 55F7DE643A495076E8 +Ciphertext: 4C2154F99F63647034 +MAC: 62EB07BFF3F58FA1F18B49ADE6AEAD6A +Test: Encrypt +# +Key: 2A95102EABEEA4A71C7A4CD046CB99B26E18C8B8AA896675D06A5485050558C6 +IV: E3922EAAB08F4A970112B7DF +Header: FAD5F0ABC5E2F93884FFD702 +Plaintext: 29F9936C277A638EB9 +Ciphertext: 4CFFD7F3CD1A69B35D +MAC: E8773D4F07707C5BBF5CA03545A59833 +Test: Encrypt +# +Key: 7A77803293449DBC1D0438708ECE11F4264561341987CDC1F7A86E734D847519 +IV: ADE9F132F9F03AC23F492779 +Header: F19744A73DD545183A13CAF3B4 +Plaintext: 03DDF457EE6CA92CCB +Ciphertext: E11F354BF76A685EC1 +MAC: 85FC3BC9FB02891C97CE60F74CBA3563 +Test: Encrypt +# +Key: 3A0D81CBF2E3C9AF797DA5D5E3783F4A91B90A20A53B41EECD8F39717698D062 +IV: 585318791DEA9CC541194AC6 +Header: E463D3FBFA50BD44771152F9D9C9 +Plaintext: 445015C130AB603A62 +Ciphertext: 0FEA81C77E1612949B +MAC: 9883FA13F79A3B226F92C774446075A8 +Test: Encrypt +# +Key: 4B7698B184BE6FC001743E02BA21A6D8D871AB22E76A2C9367393C2100C11E66 +IV: 61B9413D88DA2A8F88009036 +Header: 6F05C7D8ED730D532F4BF847D737CB +Plaintext: D94582A5460DCB895E +Ciphertext: 3D661CFD65DEC92725 +MAC: BEDD1BCD1C60DB9EE30AF5CAD6DD2EB6 +Test: Encrypt +# +Key: 4664B474E9E8F697AE2C93C59F0A2EBC9751AA22C6C446AA44AC8785202730C6 +IV: 37E7C171DA9A82ABDD2151B9 +Header: C81AF521C23CF931E71253FB359E6D9B +Plaintext: 947C4EC3C4D03D23AA +Ciphertext: 52FC8253613ABC75F4 +MAC: D1A5B5E679858E7FD62BE2499E319B57 +Test: Encrypt +# +Key: 5D372FBA8AAB0E8BB91D09CA49FE75E428B966834617E7C058D1F2C2F3998253 +IV: D56452442C32B61C15F0DCEC +Header: C87BDCF27FAA206A3FAF94B6C63AB7E0B023C812B3C093C6304B6919326A4C7E3946662DCEED91A894 +Plaintext: CBF83D359FCEB62002 +Ciphertext: 096A17CA4DA0C25B3B +MAC: 5CBDFB678923EDAC7C8A0BB4B56F1F7E +Test: Encrypt +# +Key: 4B5954DD5A988FF9AD58C1DD80BD87B00AEDF3FCE8EFD03A52FBAE8A514E8655 +IV: 686289B680856DE68EE76780 +Header: 02A39F954B59FC9D36712742051B5B22C0347745595A6B807BFCE471E01A75DCE6CA1F2A2DA93F489F132255C93EDF89CA6CA1A6B3 +Plaintext: 6464DB78959EAE8B71 +Ciphertext: 798F68E82BED7236A7 +MAC: F442DC2A6E2A916CA259DCE962FFB7B7 +Test: Encrypt +# +Key: 81331031A89AC57C4102C144898858927EF18A8F0AB975330473888016930740 +IV: D2B3266B8B5643FAB5C730E0 +Header: 8F98F8946CC89721C5002FAA012F19B615E2895CDEAE2F369DB60FD2F7F0EC244B3D32F307DB487357060E06D87C2D2A40C8ABAAF14776F0AE5C263C3A05F16EAA65DC1089 +Plaintext: 757983605C207E0341 +Ciphertext: E79974B690D5B76435 +MAC: C52B5E20DA77EFB8B7EDB377ED4800F7 +Test: Encrypt +# +Key: DC0B8E256C29F8419E2BB79CD3E77919FAC4A6782C9FFDF0797287175211820F +IV: 054545D93B54327B977EAA3D +Header: 4678A4B659FCA9C22FF9695C8BB1571877AA704503FC2D3D00676C0FB7A8A9F91684F3FBADD158D5E34F7C5EB46BB20EA62B9535BDA0600897B65AC6CED4EBD9953A43B584BBA1 +Plaintext: D78F4326E5787263F1 +Ciphertext: 385FFC64428EB25429 +MAC: C3372D52D220F154E1663376BEB1F360 +Test: Encrypt +# +Key: 3F7155BAE0FF0178E15428ABFC934AB9A7F965D5B4B5DC6FE58669A97C821E5D +IV: 6DA73BF232C6121493523185 +Header: 8085F8994CBC4567286B35A492C4DBF3AF20696FC4B29F0938D1A85616492BE463C8DDB13734640D95B6E0C1FDB8816BF42F43D47EB2E736F47D3A3953399FC0E246FC2AC4837853 +Plaintext: 0A228DAAFD26103562 +Ciphertext: 2A17E775E53AEB0916 +MAC: 8D0483DEEBE39CCCB8F1E2B1E5BB8AC2 +Test: Encrypt +# +Key: 3D754C834858EBF201178255E0157D0841D25A24D006FCB9B64FFDEB33C398AF +IV: 3BB5F67DF10691F3D9B804FE +Header: 12C7A064D19BBFB66529DF11618075898AF48BC1D504D64438020E82B964E50CC496A517CED3613DD47714086D6442EF2E3280E2E14A033B0AB26D7E042090BB4EDCA0FE50C0D87A921EA0EBAAA7DF43FB5D0F5ACB +Plaintext: 0BD1208FB958A278B4 +Ciphertext: D1431AC3C7C91A0959 +MAC: 2F0A54637376C9691A6971DD835D10E3 +Test: Encrypt +# +Key: 4A7F4261E6B35A2B8B330E86C8CE8D37AA6790DAC3E07C81CE4AA8D63D2E4E6C +IV: 59F33059F0509284D289CD5B +Header: D6235B5EF49411E5581FB22438C736F08E524757870DC0E5146FDD2FA547B6FEF8E6826D70B3AF7F75FDB5E5487A85D91BD81FE72EB1F37140E3C136EB0CBF3BF164BCD22174D67F68075C99B64695B7A5F6DB63ECC31A0E2DEFC4C1C5A1 +Plaintext: AAC9E0F97577258112 +Ciphertext: 6B881796300476EF92 +MAC: EBAA7227E289A156EF4EC66E03F9A36D +Test: Encrypt +# +Key: 958263F6A1C5F4C111E0D522DD7A9FB6F29E93C5A6D3E6F8273225217CBEECAB +IV: 95D252ADDBFE68E0A505272B +Header: 0C4BDEB53A56A4832A6F7EF0DABD5AF5A75010F81E590A294CB6084135B7417BBB8A08392994B308FB210009B5C172FA0BCBBED21C8A729191B0A73058FAD1ECFDB5B14B19AEF846DFE9D5F38993CA46BCF9DD86AEFC11C8C275E984E82CF74E +Plaintext: 31D7670D45D6FFD855 +Ciphertext: 9FE1432FC3B5406CC1 +MAC: B8FA14F20694EF2C845CD9638911F56B +Test: Encrypt +# +Key: DDF088ADA0F9F430365E24E9F9410EEBEF844B738820893A11EEB4CE9DA4E5E1 +IV: 21BAE9332CD415F86F38DFE2 +Header: DFFC9942793F01BB924AFD74881A13F8A19FBBE143D667CABB5110A1548864B0AB428D8755F2691D3B3CFF3C284131A7454D7EBD499DD752008739229242CC245F43D0D817A80DB7ED1284962783837028C9815F5DF12D2A575DA041C6852ED92769671498B72BFB9028F0 +Plaintext: A3C938F0A445672942 +Ciphertext: A2165CF15B30F11E60 +MAC: 98298D8B8E622471F2F0FEBD1455E91E +Test: Encrypt +# +Key: 31C5DAB4A852FBCBD50BC9D7F49C3A92DF31FAD3EA8090828621539372FA066D +IV: 4520513CE0EEB4FCB6351ED9 +Header: +Plaintext: E133200311D9969D0DE9 +Ciphertext: F3569B7C5B6C752E6562 +MAC: CEE3354967569EFAB248B2A37EFA2F76 +Test: Encrypt +# +Key: 61DDC11A92A74A35266AED09B69947F89198A6BE74EF8EA8AC83E444C06A70A1 +IV: AE60D4423298E595FDD564E8 +Header: C0 +Plaintext: 54A4AF1AC8BCEE9A636B +Ciphertext: F4979E0CBD62EDE384E9 +MAC: A38E6D35FF73F65D7981EAEBEC55ABC8 +Test: Encrypt +# +Key: 2A14AE53D63076E3F28A2EC65D116B32CF13B5A2A0E32064243717A0E6378A74 +IV: C743EBE9BF3F9DCDEAE2D7F9 +Header: 676B +Plaintext: 6B2595198561F158187C +Ciphertext: 7CE4BF3F39996331F1C8 +MAC: A3A52ABB56B7A3C3D5173D2A5420C25D +Test: Encrypt +# +Key: 7E5C6FB5C9B5B0EE5AF4F06B82A153BB08793EAC8643F6F7CCB005FF4CEEBE0B +IV: C3D7DE5BDEDC77269DFCC72A +Header: CB9A0B +Plaintext: 33DCBADC13551C271861 +Ciphertext: F3262425CF83D209F752 +MAC: 8D249C3DEFFDE56A7F67A731B680BFCC +Test: Encrypt +# +Key: 1D95A37446527F0F3CD20EA28BDBE907750442CCA238054D1CBF66640887AFC8 +IV: 3DDF3D7E32FD023937EEAD2F +Header: EBAB0596 +Plaintext: 04BBF69B77DE189BBAAA +Ciphertext: 0DA87A43870C36EDB221 +MAC: AB99D023FC1F5C284EA7636B8893EA63 +Test: Encrypt +# +Key: 2F2AD66463ACD29B5327242DF02FA0003F5FB3CB3CEB003764080EC4BCF321E5 +IV: 954D2BFA04B8BD788A8B183D +Header: 8DC59ED41E +Plaintext: D38A66F00EF795AD7851 +Ciphertext: F426DA9FCF727DCB5746 +MAC: 3F4FC8C1CB9F88C982CFF096C426B806 +Test: Encrypt +# +Key: D7922F307D0BE2B7220B0181430B7CB0A5DA9E8E66FAB0D718FC8C9FB22AE4E0 +IV: 9E48CA7B6827F905EF26EFA0 +Header: 9673E43F058B +Plaintext: 06B1FAA5CC90493033D8 +Ciphertext: DB8DBCFD870540C7D274 +MAC: 5CAEB60593B1E148692F234B2520AEDA +Test: Encrypt +# +Key: 4B02D673FB47593EE7D7E93B2B115F5F6C9F48FF54B4ABFCF473425677FF30D7 +IV: B6D96862D0ED5A1832C9F9F1 +Header: A9364BD85B2074 +Plaintext: 048C96D057E75C8C701F +Ciphertext: 7DD1251BF384AF440828 +MAC: D1A41188CF65864777262CE3A0248E06 +Test: Encrypt +# +Key: 862F5C515A2A22AC4B613BF07DF6204B452601DBE5C68E1C4815061F102C5919 +IV: A30942DC85250D38D8700CB8 +Header: ADB112B8E4AB7283 +Plaintext: 2A5937095CFED2DEDB53 +Ciphertext: 9DFB78133E8CA63D3ADC +MAC: AD7A27F7F594A2D58192D5B72CBCFD82 +Test: Encrypt +# +Key: 9336F0A8CB220DF6A2A69ECF99E0E8F92FEE80A0485ABC885263A828D660096B +IV: F4899918A7858046436E0D3B +Header: C10BEC1FDE0E72DC00 +Plaintext: 594BF54E90582ACD89AE +Ciphertext: 2DC1F62EEAD255F5ABCA +MAC: FEE70874D4AE3808562B1CDA31460F74 +Test: Encrypt +# +Key: FE622818251924FE62B5A159FA2F2ED573DC94AF0A4F8920417B76368ABEDCD1 +IV: DB574D9D19B3931799D78C2C +Header: 4451C0980FEE41BF3E93 +Plaintext: 0491CF920C216B8E1079 +Ciphertext: 330EB5239D4885CEE579 +MAC: E14F4FD8F2C0F604E736D56AB438DB73 +Test: Encrypt +# +Key: CD2B47019CDEBCC6D949A0D67343296CF41DD6485C045753C52492DDC6CB0690 +IV: 0837C2E659971B0D560A5DEA +Header: B83F4FAE3D85F4FA1F8B1C +Plaintext: 7F72B58F3E71FB977C95 +Ciphertext: 06014424CD35C2C19E8B +MAC: AAE6520A0E65E744ABD547A41D9934D8 +Test: Encrypt +# +Key: E431DCC8F9892516D996560EA8961C7D4E0123F871A6A8B252844D9406348B7C +IV: 83CED4ED012DF3C8666B7348 +Header: 5996212FDB70EF164239D6C0 +Plaintext: 91255AE201F43B5731B7 +Ciphertext: DA17B39A834A306406A3 +MAC: ADFB0D942708FCE5FCC3F6134617F0D1 +Test: Encrypt +# +Key: 1F3A64844E76BAF6C9E136E35856AC250B437730DEFEBEC97A742CF0DE58FA81 +IV: 5179A1B9D5D294ED9EF6E299 +Header: 7B2DD75CDCD7BA41D79C1B2A89 +Plaintext: 6962688418547F03CAE6 +Ciphertext: C59E170E37BE095AC2D8 +MAC: D21C7692051DD0B9B6A11EB1FD8B223E +Test: Encrypt +# +Key: DCA164A5B6E0E50EE9A3739244DD2570398E9026518A8FEDA1DADADFDBDE77DE +IV: AEF962F16081710B79C79C1D +Header: 7CBDEBB022F9E158BE05C74CCE63 +Plaintext: 79C9CB01FDCA4B97BE59 +Ciphertext: CB7259F6D50B9E3B9999 +MAC: 2F3EF2D850C660E694582626B25C431E +Test: Encrypt +# +Key: 5FFB2FF57BCB1BDF86D28EA7B54A6E3F8FF008467A0E2C1260088B86E5C960FF +IV: 39C184403F81080F64FF82CE +Header: 8BADCE2F03723C039C5447B2281897 +Plaintext: 2A0B8DE170F83074CBE9 +Ciphertext: EB950D4B975D07F5C607 +MAC: EB4F08890795FCED88D7DA9C2A7E28B3 +Test: Encrypt +# +Key: 2375E634F7B1FD26D411AB391B17EC31A5097AD523965E23185A8122D0FF94D6 +IV: A8DA220A7BE514CB99A8BFF2 +Header: 4F0581B7663FF8381481A7F0BD7120BE +Plaintext: 216AD09FE265D3B20078 +Ciphertext: 7B71E687535647A86B3E +MAC: 853D91DF0A65B8BB8642AD399BF2C800 +Test: Encrypt +# +Key: 63C52775F6217B442064BAEC20CC3BB823F736DF877AE851EE9192DF7E7F22B4 +IV: DDB6177C02950B76819D4B0C +Header: 44DDD0C18E20BACACB7A1CA06C464EF984C67DB9E2A0C760D3612C28537F5739CF9F33ACE7C3BA4D70 +Plaintext: 492579B1076E20967C04 +Ciphertext: E2558C8840CE164D5F2B +MAC: B729FA9DF5F3A5E6865381CEFD81F1FD +Test: Encrypt +# +Key: B22B83F4F3B8667FC21996FA39DDCD227834FA7A74E92CE5DBF43632FC3E1539 +IV: B974ED1111ACC51A823D6DE0 +Header: 597818FC54049589B5E7C530D508E7770E48F88116262156F51FC8B4154D06C1E5C0C7264B440E634F95F6ADC5462D76D6CB2FD8FE226585FEA24F5DDAFDE7DF +Plaintext: BEE3DE044889784B577A +Ciphertext: D6EE287CD9145702090D +MAC: D6A889098D41B1246B82A32247922BAE +Test: Encrypt +# +Key: 10172B4990057CF5A4E8656B17C87A37E1FFA61FF9DF80C452F1DC708A7AE88A +IV: 7BC1111802BEF7C62171A990 +Header: 66EFABCB866A78EC00D7F9F7939A036F3C26D78E6F094E1303C3E15327AC1121030E959E5873CA621D8D1A0371873EC2E0A3BBAB77D280B63772F3D424F24A440A10F20E58C8EF8E78C1060F76F5CB010939 +Plaintext: B280F6A905A6599B0566 +Ciphertext: FC853294B1A34CB6015C +MAC: 928429F289E1E51E9F2C5FC4F6AABA33 +Test: Encrypt +# +Key: A273243C18C8D3212EF28855A0ED03095FE66DE067458BDF81AFBC0F4A65FB07 +IV: 0DED46152C5F6A4374ACA5F0 +Header: D6F38D03770F5CEF85973A5D1A830D5E37DC5F7DF1FA665C4A6DBF94DC5CCE95450EC1B4D3A54AB56490A283544757C4ED034230DA475782DDC6444A6F24A2C9DCD1039D6626F57A9A10F0264981E340C315EA8ED32F54EF15BCBDC9E9D6 +Plaintext: D9482AA5700E9C2D6619 +Ciphertext: 5A8974D615E069A6F66D +MAC: 383A586F9941DCAB6D57F24EFFAEE63C +Test: Encrypt +# +Key: 0EBC02B8A3E9ECFA91D34F733872C254F92835CD47810A13F43DEFA858D0E758 +IV: 8178FF9533D7CC994A6E2ED9 +Header: 8573C5A9429E9BA958C03BA8C380B9540413F89C4378948FEA1E90A95F0F1E9C45AB19222D9CF25D88B4B4BD6B5F7378368BFE8ED1AABA6192BFE6D5EF1F23DFD29F00A93C5719F590CAD50F27E778326623C59187B232DB66EB8744BF8ADD65337E723DCD45 +Plaintext: E800E68F7EEF5C088ED1 +Ciphertext: 8D729CC6B652C602445E +MAC: B7AD01CD81F2510BC6688F670117CA7A +Test: Encrypt +# +Key: BC253472929852030B646C7E53C6B4E4B4E2F45B69C14E59052C5D8C42EC2D41 +IV: EBFD36ECE18A920C6FA0E2C2 +Header: 4E7CE471CD6D5983D2AD8CFF9380279F15A26405732F50BEBD58BCA58D13C89DA64D321ED049E0B8D3ADD796DBD9F700B5EA681A3A79510F611CAF2E4E2E62922C99196FDA01D9FB734DFA3670CCBFA3A962976E1779C03045FAB7CCB4B5EC5AC805C71D38A6BC1C33DF0F +Plaintext: EF16E9F75549EB2314CA +Ciphertext: 284EC6C1D676FF3DA5E3 +MAC: ABDF2E535AA9513C27DDEB31D5B6F6B0 +Test: Encrypt +# +Key: C71488780939DCDC969F9D29CC077811CBD50CAF31C0410CCFC087D217A1A77C +IV: A22FE9957BEFD5897F1E5D2C +Header: 503AC6A2B573D9203D3A47EE726B56C9731899A5A5078C6EF4C5F3A313EF3172609A6416A4E4E26B6C5C944FEC6088B55963D7EF3ABFC995A7B4D2B8AD874161A5DCA9EE7792AE61BD300FB8826DB14EEDC03E5C3643CD8D33D66410C5826A6191CE5DA0130059C69A2601D8603ADAB0DCFFF0917734F640BB +Plaintext: 98B2B286F6D979ED3BF4 +Ciphertext: 8C93E179F441F10863F8 +MAC: 5562FA9C8D4226E669BC9D34E6D49566 +Test: Encrypt +# +Key: A0A0AC83819EA7C875700D438B178CE9942D083A645FBC5FECBECF89BF16B659 +IV: 4A8210A052658EC85DB06D4E +Header: +Plaintext: AC0D61E3F596647CE2CD5B +Ciphertext: 07B8BDD3AE1F6A672CA870 +MAC: E10F8091DB33867265D3C6FB2916658C +Test: Encrypt +# +Key: F58054110E58F3E57176D7116FDD02B021B6EC938B34C0667AFA5975C375D2D5 +IV: 454AD295FCC717B2A1823B24 +Header: D5 +Plaintext: EB56B296C8A87F389B8392 +Ciphertext: 431870A03585D8FC1AF597 +MAC: C4C92316AC4491E4F8E8A15CC42BF9FD +Test: Encrypt +# +Key: 94D3EA4308DB80F196663AD87A89722D0D8A15514E4D6A5A64A777CFF7010EC0 +IV: BBA9CFC749467FFA4FCE35F0 +Header: 680A +Plaintext: 580FC7D959E7A80CB4069E +Ciphertext: E75DB75C1FB0E3B057811F +MAC: 2887367CD3966A63F4F3B1B3A54BB5C7 +Test: Encrypt +# +Key: A5072877D382104D0B1BA74891CBBBDD4A207F993A9D2C54DF5CA688E615B783 +IV: 4078A11709302FBF70CC8BEC +Header: 36093C +Plaintext: 329119BE1994E0424647A0 +Ciphertext: 2E629A63C9FD6F7A24882B +MAC: A5E4D26F992A50828EACA6C64D9D1B21 +Test: Encrypt +# +Key: 98A42DBCB8A87D83D5022E26281F7305273E1E3AD150A51BE03A8C0CC31772EB +IV: 4182CA01205D05D995375519 +Header: 9F1F39C9 +Plaintext: 853AAFE6399AC22D0AEB6B +Ciphertext: 144097275CCF5C48967C89 +MAC: E4146EAF32C5127554982F5FCB6ED1F6 +Test: Encrypt +# +Key: 83DEBBA9ED5D937CD50EBBD9D3CE759BFE1AD3DA8FCC7CB72CEEE5324DD6970E +IV: 1FDB6FB548C315E48106961C +Header: E3F3C2F5F6 +Plaintext: 16844A25A965A7C34B1387 +Ciphertext: AFDAB68CD3EDF7164EA7C5 +MAC: 5EB30C6761472FFC25244098457632FD +Test: Encrypt +# +Key: CB99231FE92497A33B54072FDD05075730F5E53130CAAEBF318526E893559F89 +IV: FD55863484ABDDB932B05C3D +Header: 2A5383B1B6FE +Plaintext: 8191799AD413DC516DC875 +Ciphertext: B92921866CC4AF67CB5143 +MAC: 53D3C61AA59EB201825FE5C2DAB6FE2B +Test: Encrypt +# +Key: EE526C8375932B90E5A64E0AB09C1820B7F1E31BF0068040029A39FD139C7946 +IV: F186F093B2CD014897A3156E +Header: 21A36D42EECB66 +Plaintext: AE0DED12617B2160730DCA +Ciphertext: 46461D2D24058268BF91AB +MAC: D12540715290EC90A265E9FA6ADBD4F3 +Test: Encrypt +# +Key: B2678A77A07695F5A586F198C915FF389834C668EA5D7B23B692C5CBD0BF7034 +IV: 954BC6900495980584F2386C +Header: 41F7B10E06F2206F +Plaintext: 4C79E39947F0B4FBB52BA8 +Ciphertext: 9E0A9B8D11C34A6E4DDD1C +MAC: F469FCC3FF6C051F031BDE472E2C3522 +Test: Encrypt +# +Key: AE0E7F7F30E390F0860784A7CC420E053796EB4C006F8AE3FDBB8BC4B4043578 +IV: C61FFB92E9DB7C8A74ED4C85 +Header: 8069ADB912E5B330FC +Plaintext: 5833414E82A2CFB1E8250D +Ciphertext: 38B9473C0F8B9ADF09C2F3 +MAC: 45141EE17B87450E421DBB91CD9718DF +Test: Encrypt +# +Key: 8D0BF35CD8C228727C91D3F1C7A39CC36BD5FFA0AB4A380AD5B75BFE2203F276 +IV: 5D04998AABFB32ABC8D45233 +Header: 6E7C02067D3F68A866C4 +Plaintext: 6B8ABCFE265970329D57C6 +Ciphertext: 3C3AE7AA6CA92354C4F395 +MAC: D1E3F7B866E487A759FBBB8BD7CE0A95 +Test: Encrypt +# +Key: 672509D195D370F45EE7A35F3E048E23FD30175E948567AB0716478DEC0F9BCE +IV: 7E4DCC804EDBF6F9A1B3E2A8 +Header: C4A02AEE98A603CD341BD8 +Plaintext: 787B9B13E5266BFAB0EE2A +Ciphertext: 95D1F82B2B52DAC304C054 +MAC: 9FBC76FD8EF2F588B712A12D2420764A +Test: Encrypt +# +Key: DCE5D9DAEDEE22B2FB999D07B3F6B3A1F19A03AA651B240CA2DFCCB84E4A1134 +IV: 03E08AF1B6DF9FDE39957383 +Header: FBF246082652CD0CA4371640 +Plaintext: BC238F53277830ED2615BA +Ciphertext: 8C357FC237DF526C46D342 +MAC: AC8361AC506D89E589BA4DE42BFE79FD +Test: Encrypt +# +Key: EC0FA4FB9D92876C3DD516D4513398AF832AD0BA02481277CAD9B6C91EEC39BC +IV: DB223A40716700D240AA79CA +Header: 8E2324C147F35EF30871B0489B +Plaintext: 4833A29CB2F9AA01E4D122 +Ciphertext: 5B7553482214CE215628F6 +MAC: 0AC65341639A85A09712DF2B439A69E2 +Test: Encrypt +# +Key: 86F703BD6A3BEA750BF72D7A0DA62DA2271D3E6FD31C6C4C2B9651FA22575114 +IV: 303460B2B67DD4D3F50A82F6 +Header: 4D71BD856045536138C5F5ED8A0E +Plaintext: 61D68A4F9E3849B63C63C3 +Ciphertext: 66DB4716AC70101F40B5CF +MAC: 434C477895EB23B0ADD13CEE11B55B78 +Test: Encrypt +# +Key: EE1313A59EF41F277B51A6B15AF8319436110C5C8AB240CF706E44DCF517DD55 +IV: 0FBB67B89B153CAB13E68A6B +Header: 76EA7EDDBB03A71DFA089A8B69A886 +Plaintext: 0E0CFC21832B1EF9D17EB2 +Ciphertext: 5AE0811228E63E07083742 +MAC: AAF0238FB015C5C2FD113CDD4E44F508 +Test: Encrypt +# +Key: B0754087BA58DF2F2620C1155C71A1E628436ADD6ED07CDCDF52777F9DB27778 +IV: C6F83B01F92AF272300A8B75 +Header: 59A756FFAC6B91619D140C87AA17B15D +Plaintext: 6A70E5F4D8DD35ED8C5BA3 +Ciphertext: 90444F87972D995CDCDB5B +MAC: C7D900BCB32F2D2C816B210E1C1D15C4 +Test: Encrypt +# +Key: 62686DB1FE89084BF95CA63E59549AC5FE4B4A78B74C4DCE8EFC57C228C72736 +IV: 88644A9347246311FAC19C6C +Header: 77C242B39392D62083CC917DBD878421F646230943A664114F8799665370D39745D5DD156C +Plaintext: DD9BC550525A8908A281AE +Ciphertext: 6AAB0B1DD0B1F91F583B38 +MAC: 1F872822D4B916B0DBB2AFC1B3C4534C +Test: Encrypt +# +Key: FB9E450BE76A82798F5DA1B3327B23783D18020A06DF7729B513D6B542CB0679 +IV: 08FE75FD1D7A2FF91E50BDFC +Header: A9914C8D3057EA26C3E19F9E897C58C90675C23EE9F741253B4BE37ACAA9EC6330FAB972DAB123D52C4ACBAB125CECB5CB475CE582287A17AC634B03C74C94917439A4 +Plaintext: 06C09A5C15D6679562D377 +Ciphertext: 10032970BBFD572DA76DD6 +MAC: 60F29C5DFA47533D7053285AA0DB4360 +Test: Encrypt +# +Key: 1B40E98D3677B40BC752B60914C5BE8D300B4E982DDE8E3DE7185D24261E855F +IV: 343C736B893FC505692EA87D +Header: 24FBC6B6EB45D7E4DE117B00A5E586E4FFC55F8F6185E1250B3DD4CD8A9D82CE9153E005BBFE0210C5C6D1085D5F8070BCA9ADC00CD5017D4E679B8C787E9A8320F6DA2B68ECE0E323642D02D47A3D5268017DC90934AC +Plaintext: 2B8735CC19C90D6A5521FF +Ciphertext: 1AC85D1A97EE94B965F8F9 +MAC: 7BCFFBC45D94B0C6AD7C7255BC065C43 +Test: Encrypt +# +Key: 0EEF3433AB826B9BD56FB9BEB7B042620EA2312B274A22FE23A4EE08D4C56118 +IV: 10433C9F044D929DA0CBCFE0 +Header: 1A2026E650777FC01EEF4885D4594B7901DC1A6CB1997BA453D9FA9F42E59E21F90A290F615863604DBF189FEAEC2C9D784260CF5E068CD8146143A0734CD768EE77A66B6E57DBAA61C878E13C5715FBABF38A3ACA6EBE453B1FAA712C54B99E76794F3F7FA4C563 +Plaintext: 17C7A689F0B37990EBEC11 +Ciphertext: E2D6F3CE3553C12CEB63B7 +MAC: 81BBA8FBDB2FC52EE74D5BF79A86ACE5 +Test: Encrypt +# +Key: F16A05FE0981A8B52648CCF4825B3D07912A33885A4000CD015FF7206287129B +IV: 59293CF2B3587D8BE26045C2 +Header: +Plaintext: 3FBA4EDA457E4E74E7FD9672 +Ciphertext: 6EE0E69F6DCC5C4221DF3874 +MAC: 45B2AEA812ACF90B018D561A86590DCB +Test: Encrypt +# +Key: F1945AF55D4DBB1F53824A7E71B7ADBFCEEAFC629751C67ED735AD843363DDB7 +IV: B6D37563F36A8A7117DDA13E +Header: 59 +Plaintext: 08D1B5AF308B6E265EA20E93 +Ciphertext: 774987D6C2C48F3E2FF80164 +MAC: 573B51604C9DBE1F557B193B7047496B +Test: Encrypt +# +Key: A45806057949394693E946BE31F15DB454F13D826CF0BAA5E1CD97133B89A059 +IV: 71F4D1AC1BE9D15248BB293D +Header: 2C94 +Plaintext: 08594336A262ED205300123E +Ciphertext: 3F8BECB3489EC8D8F27B0FC6 +MAC: 4598C49A18019C856EB906CBC9ADA3E1 +Test: Encrypt +# +Key: 1F4ADE884F83E7D05E2619A8C1B9F6521D57BDEDDB076A5630389D79F321F478 +IV: 05296A5E4123294A2AAB644C +Header: AAD4A7 +Plaintext: CDC9F381AF29EB06BF4E03E4 +Ciphertext: 7DB7209DCC5A401F795A9C98 +MAC: 56255FD9E5D4D68B912D51ACAD0F6D47 +Test: Encrypt +# +Key: 260FCA90D5B399234959D99C1743651542CD8720453E6D1E7CFCAAF023D74FEB +IV: 0084B6E4A04724CD107CF561 +Header: C364F449 +Plaintext: 5849662B5CAD731753BA9188 +Ciphertext: 6CBCF2F1D384C6697E06A850 +MAC: B0FA2FC0215AA8FAC06957D72CA24E2D +Test: Encrypt +# +Key: 8D07A0EFB42FF92642DB22912383FB23C796E62FBB3ECE9CB93AD6759424F05A +IV: 3260ED6892B5B6EBBF0696B6 +Header: 6139690EC5 +Plaintext: CDDC92C2FBD80B1F65739F43 +Ciphertext: 6F8C55B4356A45AAEEE3E1D1 +MAC: 8C29C6D3D5A2DE0662E13491BC100969 +Test: Encrypt +# +Key: FC860D18C253B34B90D97AD22674DA4464D4B38FDC07D09D5CB15685AE47295D +IV: 7C6EA4F5BF6B2AEDDFEE3837 +Header: 2D7E7A81A279 +Plaintext: 871994AFDD53DBD429F19565 +Ciphertext: 946674E5986D60DAD18AF58E +MAC: BAE4B26A20CE396DEF46B2DE61D50CB3 +Test: Encrypt +# +Key: 7476E0C70A54B2C604F44A6792ECA6496F3D381E890562BC44F1EC7BE2F6B09D +IV: 5EB05465767DDBEE3369F695 +Header: 725DA1713711E9 +Plaintext: CB211E642D89AD025DB34E31 +Ciphertext: D19D11D94940BEC30486A68D +MAC: 9E949AAE245D82A413731FBCFEFEC3C6 +Test: Encrypt +# +Key: 4FB1EE8CECE19CA6814971D093BE71136F18867A21880D291D3D12AE2B05B1AE +IV: 37A6C23D38C1F6F4FF4BC803 +Header: 69857F4809FF3F8E +Plaintext: 50419D9EE3A6D874EC4EF558 +Ciphertext: BDC15695C079B5CB1D659ED1 +MAC: 0280229777B0505472D4C2FF64E3C1D2 +Test: Encrypt +# +Key: FEEE5BF4E9E9D6E5538FB3A518660E043DF242FD3767774C58D4AF4D97940713 +IV: 950BB213FADD2894499A91C2 +Header: A9BBF7D3116B54D501 +Plaintext: F5C37FB33CBBBB07AD761790 +Ciphertext: 62B1DBB32D9C4473B983BE32 +MAC: 25A91E6876BED1BE1B623D666D17218A +Test: Encrypt +# +Key: ABBE469BE5B72FA7A739E475AC7CF8C55D92D1195D88F5276737A2AB18D7A1C4 +IV: 5D42C27F503C113D0963011F +Header: 4679B09C1D767FA302D3 +Plaintext: 9CE23CB36315D487150BFCBC +Ciphertext: 63D4BE4DC30A660E80ABAEB1 +MAC: 1CD6F9C11FDFC60FEDA1B2E292A2C9A1 +Test: Encrypt +# +Key: 29DB0C5D4A3E49F3449ECB3FA3102A8A22FBBEA4E873719353649DA65D430339 +IV: 9FBAE4A736DE1660A2F2F103 +Header: 3C5EDAB5BE587196B5A4C3 +Plaintext: 34FCE8040FC191AB9AEABB69 +Ciphertext: 389CDB63978FC9B5A0EBA549 +MAC: 03C0CCD41AF27A75D3306E571DCCCA23 +Test: Encrypt +# +Key: 05CD16E0FD513BD2C56B5D78D69753B62B5B54D4F157A04A1E75A7169121B9D8 +IV: 98CD9D438F7ADC77FB5F9D86 +Header: 5A40A5FD4CCB86A684D48ACF +Plaintext: 24EA1EE5CD53179FCA349697 +Ciphertext: D83AD967E82EB33500F408E1 +MAC: 035A1AC38BECE90B9608AC8FFFE02F8B +Test: Encrypt +# +Key: 0B2BC93B5F8D354752B8A322298447613D06E385A091E807959D4E9094865627 +IV: 7A23018207D74DD8800B3ED5 +Header: 801935E4760F879C31872B1EE1 +Plaintext: ED36566508157FFB9E2DB49A +Ciphertext: EE9C2D9B9804855B1B9C9A07 +MAC: 4C335042649C6B923FD9F258393551FF +Test: Encrypt +# +Key: 0F7A0676E442FBFA8408F59E741BFABCD8E30AC5DB3D64805E0107DF27D3F853 +IV: 7DC04158B5F0650767B62907 +Header: 0AD37476CBFAFE0DF11EB178D4F8 +Plaintext: F904DA6AB7B6D83BA0DCB1C3 +Ciphertext: 41840255621CE9983DDB895A +MAC: 47BF06FAB3B0084562847933BDBF5894 +Test: Encrypt +# +Key: D94EE66258734695D910EB5FF220EA721B9BCFECE9D688B885222A99AD85A63A +IV: 10AE42A3E5CB79FD96D69F73 +Header: 0E881EA3834B2D01F911A2109AB605 +Plaintext: CCD07CA23FC839454F0F75D8 +Ciphertext: 16F93A8E9F5812840698A3C7 +MAC: 307612D6E9F3FBF835795FB1AB002D10 +Test: Encrypt +# +Key: 2AF33C21B855F39ECEE7057925865BED2E28BCDB5363CB0AD5DC7202C2BF11A3 +IV: B8E5CD2E4A1C958732475E2D +Header: 88C5C38D11C7CFA2BA54E5300C8A908E +Plaintext: B0FEA2962AE441D48C9B9189 +Ciphertext: 2A2AA98DCFFE759D516982DC +MAC: 0A1EAE006D1F979576F00235E2538703 +Test: Encrypt +# +Key: C3771F5818223CE194BEBF2F56DFF2FD480E67FDD9832B4F90D4A803114DDD77 +IV: CD3C3003C96B05F77BBF39DC +Header: C2B0AA1F7E07B30CFB4E299358134EC1A74CA4663841B159F2E484F4 +Plaintext: 7C2B418FD14F459F81B7F76F +Ciphertext: 74070E8A930D7384692A23DC +MAC: A27D55BB2D767C085B65BCCFBCA2F727 +Test: Encrypt +# +Key: 19A72039FF59F84BC46CAD62ED2ABAF8C5FE159395D0BDE7BA331E49A42C9DEA +IV: DF5A5232A3AF46A84BE1BE12 +Header: 511E6646D1E604D0951D70780062B47C14C1C08C36007E1250CA67D1 +Plaintext: 18524E72F91D24BBC545BF4D +Ciphertext: 00BB314C18888CC0370B347A +MAC: 6A2D5571823CEE94F7F6E99BCB7C695A +Test: Encrypt +# +Key: 0703233BDCF7AD2481B4D95CF186EE666E78E97639011F74C2702FEA1F0E9A73 +IV: 0F65F78B8D9DE61B20584138 +Header: 94F516ED87215E85FC46B602C6C42EEAE300850FB5D9533D5C7C7C6AAA30CDC6C512D620C5272730FE1A8E2D9063AF8385D995B65466C2DBBDAA +Plaintext: AE76FA0EF7357B888CA833CE +Ciphertext: 8D498CC0C2FE038143D9568E +MAC: 43244DDBBBE8601CFB3D1227639FE9F2 +Test: Encrypt +# +Key: CA328F60CCAE42904F5E8FEAA3C76FCE166F5422F402A18250C8E4508D99BDDD +IV: CCC8CF958438EC810240E61B +Header: 38709B3CB8A20A5DBC863095FD2F66372FA5278039FBA20509BB4DDFAA92659DA8696E5AF1EED032390374582C72EFD09F2887A552D2157075DE0BB7D9BB4A80D57165B4 +Plaintext: A3D37F864AC332E4F7B4A240 +Ciphertext: 3E4FA668768C1D9697502213 +MAC: A026240BD394CD4735FD2AE203101D16 +Test: Encrypt +# +Key: 648F668240BCCD92909E5C02BC41EBA2D728EEB55B21AE8890E14B2297C35CB3 +IV: 622354BB478D0E28D906659A +Header: CD3E87A2DBDB3DE81D20E6E5445CCAE15ECE147D34AB3886BF6587F94F1B064E2179BBDEB507A9AB99E3DB7FAF51BBE2B2571CB6DC67B14EE27DB08A51171FE5D17F2DF608BD608BB9B593BD +Plaintext: 238F5B5914947BEDE5F6C0E5 +Ciphertext: BBAACFEA2FF0E8245B212A42 +MAC: A70AE44E543B839869188D7CEDBF1AD0 +Test: Encrypt +# +Key: FBD5EF758A13F7E07CA9AEA99E24DF9DF0587FBD9BBA087553E3F046600E6D62 +IV: 31CACAF33450DE362A2668AE +Header: 4646AA48EE0E058FBA45E57187F3EB03E40DAC39533470296F9E4F88E83CEB96FEBB6D47CCCDF3DCA044D14DE425BF8313424F57F2F7FFB47C3555126497D8136958B9BAE96A2A40695993D99EEBD3C4C4 +Plaintext: 852E5AC0CD7988617AA816C8 +Ciphertext: 5AC08FBC36E7453F447ED76B +MAC: 7CE77CA8DC6B59C18C1AA2380FA55E09 +Test: Encrypt +# +Key: 63F3BD045DC9103939BD22E370463C4080F114D7DD70FDBFC5D9A1DE9F85F327 +IV: 631C4CD0BCD6E5DB16755A29 +Header: EAC712CF4B3506D8FC1EBE97F3C93D85076F3B2FFD3DC3FDD53D939FC960F7B5F339B37DA68E8AC34018B2318CE1D9CA95B9FB91107F2CD4E386B05FBA4E957E083857323D2489033FAC034AA7D65AF6BDA433878C8E2E093314D036E86A74670D5E23D682 +Plaintext: 154F8B7E248C64CE9C3069E5 +Ciphertext: 06B07E8FBE623FA5553D4FC7 +MAC: 454007C802D8DBAF6106EBF1ECC625C7 +Test: Encrypt +# +Key: 98BBB7D501AD123D6E3CD6DCD08C86BF3742E786DE3C407278130355582089AC +IV: 873903C702C4CCC6D069FD9A +Header: B835AB1CC099FB26C3B3F331E604A40DA3F2D4C375521E840CB9008D9E81404DE47BA1E822DBE836BFDD4C646A8B390B26ADF20854F76D37DE3782CE77E4085AABA5C98B34BD38535B601646CCCE1C7E3F76AEBD523EF2D0ACB285AAB17C33F1DB4EC4DBA5C0CB605E8D731B4BF5 +Plaintext: AF426882C5D9A7E783062DBA +Ciphertext: DC25E3BC4194B571034FCF3E +MAC: ECD941E7ABB23E86899C561CFD536F70 +Test: Encrypt +# +Key: C95CAA8C50C6FEE3DBA9A5A9AE3BC3C4480D6AB24D4BED78C437AAD3170E715F +IV: 477D5FB5146911BD475ABC94 +Header: +Plaintext: D5DB4C8523A702521965785A82 +Ciphertext: 2B126E73DDA6B6248DC1A98BFD +MAC: B342748E3072A306F75E42BE9736A59E +Test: Encrypt +# +Key: 6F23365964078FFE2406B6C7E3BD7F131E83CBA109F46CEFEC5E2AB1C869F2E2 +IV: 55F7B2FF02DFE7D54F55387D +Header: E9 +Plaintext: 56DB6AC49DFAA6520AFB610743 +Ciphertext: DE67A4D2FA2D1FC814B669FBA3 +MAC: 28F29EAF2DDA9535B520B7F7AF9F0B36 +Test: Encrypt +# +Key: 87F4C790EE943442EE4F2F209EA3654F2E8143B6E9427E28AB5EACDCE9B6722C +IV: 468B6E622C8370B7E28F9D80 +Header: 77CC +Plaintext: 18CBD61AC4DC50969A1CDFBBF3 +Ciphertext: DFA1594F1A3768375026BC2367 +MAC: 79124C3D697B4E707EE9CDE52343AD80 +Test: Encrypt +# +Key: DBD6DAA48256B0AD01A52FF174713A1E8C2DAD89441D5A94BE9C7E9B0F1306BF +IV: 8E2E82A351959CEF2E89A1E1 +Header: A4C1CD +Plaintext: 03DA951ED155AD90ABCA6816AB +Ciphertext: 1270A92749351A390BA25C142C +MAC: 37844B753F73B8818A149CB970515F14 +Test: Encrypt +# +Key: EE971E2B42669D889FBA0AC05DB9EEB5DACF8EF0476C361458BFB313921200F8 +IV: F64E1832D07AB768F53D0BDA +Header: 797F267A +Plaintext: 8091FBCF56BF653F9D0CD77828 +Ciphertext: 25228E7A19E9E05BDCCB736DB2 +MAC: 3B07B0AB6A620CDA4FA4ADCBA568C566 +Test: Encrypt +# +Key: 630A2E34D536F839B9E8CA55E7F3BDC01EFB5E965D568433337058761781D01C +IV: D186593B27D958DE83531FF7 +Header: 7D048CFE21 +Plaintext: E4EB213DEB5BE377AA3284EB75 +Ciphertext: 3C2CA39E2B21CC00A2F2AC3EDF +MAC: 538F50135D2752B1AC2A7198F3ADCECD +Test: Encrypt +# +Key: DF226DB29DD0D67E88F57D67B1A04A23273AF8B8593B469C80907EE5B0393BA1 +IV: B8A7C3417F9213B36DFE2E5A +Header: 4AF3285D1699 +Plaintext: 25C115577239841370B6A2E4D7 +Ciphertext: 58BC40089CAC3FD8BF56502A06 +MAC: AE20DE2D2D46C7E48431E811A01F17C2 +Test: Encrypt +# +Key: 643AA9AC04954A7FB3F05CC618A9A297D0D9CFDF2665DD5FDDFAFBC215AD229D +IV: 9951B5FE60F27B942C162DF3 +Header: 57B3A139D93EA4 +Plaintext: 38D7276C50BD29716E031D15E0 +Ciphertext: 55B27FA6332D722A08DFE28EBE +MAC: C0F7D8FDCB440F39D94C88DCA960F688 +Test: Encrypt +# +Key: 6B18C3AEA0373B3AB00A6A569703AEAA56696AC314418C73BE9184E473E7BC09 +IV: C5A56797D6EE025A4CAE70A2 +Header: 886118FC3807CB16 +Plaintext: 00619796B5857FD56157F88A29 +Ciphertext: 6B407CB4793A07F6ADC19FF779 +MAC: 24F03787874FD8E609C32A53A234FE5D +Test: Encrypt +# +Key: 36411C161BB03291DA6DA7167DF7ABB641DDA005C666F855885FF24E4172D982 +IV: A0A1AC89DC6E3B7CE1CD01B0 +Header: 901C9131F16719C77C +Plaintext: 2C0DABECC8B5A6714F01D27B7C +Ciphertext: 693265E19EF27BA55687F929ED +MAC: 4E22EDBD996CA5E6D6F66DAE2E572495 +Test: Encrypt +# +Key: 166DE0BAFED764F26A70AD8862972E93B258A9596C2B91E7A2939C2BA3B5A405 +IV: 5F2000BFFC2C67E1A6A38598 +Header: 33852B2E99251D863126 +Plaintext: 9116F4EF9FE3C6ADD9DEC2D65C +Ciphertext: 24EF8EA6665B5EFAAD581F4CAB +MAC: CD39824A81DBFA8F686305128F0417AE +Test: Encrypt +# +Key: 62652989AD30618CD3F20DE88C1EDAC4BA39920D3B2C0B81B6955E4A9BFF8CD4 +IV: 5CF186EF4F0F2F988CC6C4A1 +Header: A86D82BE59BBABAF50752D +Plaintext: E84DA3878175D603A99A18CD3C +Ciphertext: 6C693734EC0E34609DFADC9954 +MAC: D8AC639A2E72432CE4E4D89F02BE57CB +Test: Encrypt +# +Key: 22DBB2CD777E4F0E945AC7C2A392C94FB201E12E7731DF63666BC6EDCA75DD56 +IV: B36D17277CC062964C031D0E +Header: 0788F47AF89A9383C4AD43D5 +Plaintext: 27C87FEE114AD451D4AD9C41A8 +Ciphertext: AE3B88E528E5371D61762401FB +MAC: E99FB61BC17FBEBC537EA65E7CDDC0B8 +Test: Encrypt +# +Key: 02A2C6F5879EF81F9E33D97282ED523E2EC3F5B4FC60C40DC76BAC2EE6A327B0 +IV: D12CAC1088010E12BA779D4D +Header: D82B300B993B639B7775A6348E +Plaintext: 3751725A8B1F1B241E94D84840 +Ciphertext: 25FF6A49A7B52581D6E6084B9D +MAC: 5F88057176D5C14FAF0EFB69D44F2E64 +Test: Encrypt +# +Key: 7727F041FDEE42AA71C029BAAB6D3ABA37584F03736CB2B1D6C54486BBEF3798 +IV: 6D309D65C349E081B243C132 +Header: 29B023EA6614BE42F8A1D4B20C6C +Plaintext: 39B89EEB1199B9A5441A0040E6 +Ciphertext: 3AB2B43A4A13DE513BDC54B2EA +MAC: DD4BA39C4715A184CB8F48B6F9D147AF +Test: Encrypt +# +Key: A4122C97DADFEC6A473F8C00CEC257079628855937AA5F4910E37AB0D1BBF1E8 +IV: 5585BCAB1E73D81602147E39 +Header: 8B6F6EE89E672635E93B1791C57BA5 +Plaintext: 2867B3C5A9ABF1B6CDD3458EC1 +Ciphertext: C10B987FB074431A278F5725C4 +MAC: 6AD0153BE36B37963254273F9BCD81BE +Test: Encrypt +# +Key: 63A0BEECE6F9A9AB5CD8F47DEB3F7575CCAF549F63EFD0FC389492058C1B3DDC +IV: 3404838BBED75BC271B84373 +Header: 63F5E8FACC6F424F1DBD6F019DA8B5AE +Plaintext: 23EA2C25BDAC1C10DD1D9CBFB5 +Ciphertext: 8C79EAFF71BDC6ECC8FC5009E6 +MAC: 6ED73B508CF4A74475265AFFCFC254A6 +Test: Encrypt +# +Key: C15E34C6B72E9F5CE524B170DA2D40E596631FE8AA983FC453A96AF4D3E30CC5 +IV: 9256C636DC8C66C3A082DD02 +Header: BFC809B345D9FC70643FC9B60ED610065CD2AF18672B7B8A86378837D053D39208659A64C07C19F108D951 +Plaintext: CA1390840E9A38079D1450F216 +Ciphertext: 22BC8207B6253C86AFBC8E9E95 +MAC: 02E290103B336C7F66E40BCE65AA683B +Test: Encrypt +# +Key: D3CC4CA9BB305839FBD23C43058AF3F8095A454DD8F0C47E70302335E2FD2B90 +IV: 8CF13A6FC587DF4E45A53B03 +Header: D97A8B4736355157FE99C71EA774976EA241CDBFEF864E0CC07BE78010A24D4113016222BA11A7B7BC348B +Plaintext: D840222734D009CFFFB99E8B35 +Ciphertext: E6E88A7E2E01C30E20E7F6ACD6 +MAC: 10DD2664F66E77BF3D53BAE4C462B222 +Test: Encrypt +# +Key: EE6BF4579B8ACD3551C1C7959FA4FF50A7FFA877C244B12014EE50EFFDB1261B +IV: B59B27801B63A4A4460B3CB2 +Header: 82AF49D3183C996EE45F8B1C6E9B46DFA753591874E9B760965CE5DB251B0162F5BDCEFF4536623C777B8858F316 +Plaintext: 2EBD8B4F63DC038F98C10DA32C +Ciphertext: 7C13BDB4095FF78FDD3EA1D90E +MAC: 04D2201BFC46618A23CBD32ED196AFBA +Test: Encrypt +# +Key: 141A2A527E1FB400FDAE2F8288ED2A08D8A64E6F8225413191D63F3312CC16A4 +IV: A60973CA1BF4230A7CAEF734 +Header: 80D061168BD8FC5AAD03324C0EDEDD01FF30287CE6FFDED51668A00E861810EDEB8597D4B67718CED0D2C95A3EF215D664A0B011155A75598C7F2326CC47C4 +Plaintext: 2DEA9475F8874D148E577B3A65 +Ciphertext: B925BA640413D532B5E9A13AC9 +MAC: DCE135A96D7762556A09CED4D2C7C5DF +Test: Encrypt +# +Key: F836954B588B458A0AE93D6F15D7189250161BB7BFAE5FA54311B0EC1037C8DD +IV: 58558D0F603C1964DE9B610E +Header: D3F507952D6B28D79AC85F43DBED324403F0A52B9D3C799F395E392D03D655572E529016EF676E1E179FCFF98B27EF1EEA1B0849B2CDDD6DAD0751F464B7DE96BA3530F25D +Plaintext: 017CF7A994F3FB79F620298CE1 +Ciphertext: 2B004B5C05234F61805024DFDB +MAC: 5CAFB4FB4165F171BAF16FEEE33B3FC9 +Test: Encrypt +# +Key: 9670DACCBE75CB48D45149B8F27EFFC06EB9F4E47D121EA2572FCD64C1608657 +IV: 56371A6271D85DB0E7F76ED0 +Header: 404E001806AB7AA8B9BC85E86DF9F4AF6E89024C48C000720FBC45F114DA97BE5840C8108E1978F6127556F12EF9B123FF01071789C1B9FB6E327172087CB9E8E7F472795D5120507C8A60 +Plaintext: 80F2791C6B4562703FFD147864 +Ciphertext: 997B06614D16605F892FC193DE +MAC: 50339061DB087C87929F059939E158F1 +Test: Encrypt +# +Key: F20E75F3BCE824D5AB53F396A46BAC078FCBE8357EFF34EC7A88F12C0160F67E +IV: 56BA40DE4A550B48931B137E +Header: 53D5791B0C9A5BA174EB94588915C6CBCAC557D269E0442947E59266F77F893BF8C54CF91848748D3E40BCACC933FC7DD5C050EA050CF3F3E8BD47E1579B59F8177D4753D63DFFFD647C37F51FC211 +Plaintext: ED5A57AB757A841E512299C625 +Ciphertext: 1E0CC5435EE1A29E91E9D38EA6 +MAC: CDD92A590A222427E82CE5D8EA73CBD7 +Test: Encrypt +# +Key: DCC5FB88C72EACA9728A04F55C6F2CAF5AF6D99C5CDCDF033EEBDE8F718AF53C +IV: 2FF43EAB3A7F1E4B66932521 +Header: 5513EACBC47CEA7931BFCC4B72750362079FDD33BA32DE8A65D28A5757CCFC08E7B3C662A46A2551804B74A8D30B8E4D9A3695FEF2169D98EE1C9EAF3C475EDE7EE1E0B11FB577CD184B94CB3CE955BE762F6826A362EA659899F3980A493F263CF950 +Plaintext: 7E1E299DEEE7B72069A46A2D42 +Ciphertext: 7FD4DA0E813EEEB038DCBBD9BC +MAC: 598C4DA4BB48D7C262223DEE70C8266E +Test: Encrypt +# +Key: 8E926C689F7F5371F4DF5A0B9165331202C7B9D0F6E0E76DB0D8A9F44C843785 +IV: B1A35D6B736497DA077D1CC7 +Header: +Plaintext: 2B06FF0E6ED5D7CF2FAA42C8ED65 +Ciphertext: D7ED83EF9E763EAA991D8FA8F57C +MAC: F22C31C59DCCE59A17398C4EE44A7A41 +Test: Encrypt +# +Key: 95B1D7EB2C3BB8B39E3FDB50FDC5DB7FD82152A83B3B26EBB04ACD235D5D5A72 +IV: 3DEAF7532B74360A8901539E +Header: 52 +Plaintext: A8C90018320AE890D655FD53D047 +Ciphertext: 3176104EB2D979EE82B62C1A9DB1 +MAC: 0CEACF53CD455C1EC694D6EEAB7149BF +Test: Encrypt +# +Key: E55F415D961190C2CD16EF762C05E7C95236778A35637D851A5EECCCA8A1724B +IV: FFC605C24983725AABA76F34 +Header: 475D +Plaintext: 55FD94568D529C75CF9E15D78EE7 +Ciphertext: 4BE0B31C8BC6EB411E09B0CB86E6 +MAC: 6F79697FF484B242552E343B20A37DA6 +Test: Encrypt +# +Key: 1C27DCB43B01B16A7E9AE658CC87B27581DB3B798D12D221D217A7C73AAE34E1 +IV: C4B75270E316499F41197D54 +Header: C3E1EF +Plaintext: 17DA073B1E2A0D03FE857FD55603 +Ciphertext: EAA746E7CCE2F9B9BA8DF5E0FBFB +MAC: D55C51078847ABE263E27BC9E26FA417 +Test: Encrypt +# +Key: 3AF9669503FD2A3DB4154B66EEF7D5800F7C26CC9E8B5BD47265F8F77BD54CB0 +IV: E0A91C3BC176D902879ACF4B +Header: 3A8BFEEA +Plaintext: A543C0FDB486238803201B37B537 +Ciphertext: 6EF3D833B0701C5CF901D3F843C8 +MAC: 1B4034FCD40DE3DF6E38378B54345AC3 +Test: Encrypt +# +Key: C1DEE005826A26B3358202DA6C555D171031047ED0EA675C769DAC105DE379FE +IV: 12A28E5429110370687B78FA +Header: 215D311471 +Plaintext: 7BD3455A19FFBE254C9CEE0BA55C +Ciphertext: 63B4859D848E283D346EF4B1C43B +MAC: 75B4C8E5EE25870EFAEB45014D203A87 +Test: Encrypt +# +Key: 2DF4EA6FBB3E50AA45A61F64FA9224188DE599A0E326A7F802C15FA7A5E537A9 +IV: DE715D753CC03B36DC2F2FC8 +Header: 821048B6F215 +Plaintext: DACA6700D32A5C8987438069AE52 +Ciphertext: CBAA6C26C32B9863589667A02C4E +MAC: AEDAFAF9C14100ED01DFB8F4D2C50140 +Test: Encrypt +# +Key: 3A7360F2CF82190429A92929300AB85785E375A71BBF8BF5DEE5612BB3627EEB +IV: 6BD000FEE33F519E916A3AFE +Header: 58295994934758 +Plaintext: 712B9D9602CFC59D14F2F9F3B74B +Ciphertext: 4BC09944D2DB83D1082A212E09E8 +MAC: 466BAAB539A4B492A2F211E8FE12F40A +Test: Encrypt +# +Key: 969D12DA90ED1C9A4D962E6573A64A3B9BC64FE94C77E7874B6D1A4555AD3083 +IV: 017D66CB083FA45A46029CB6 +Header: 5FBBC2BB81CEFBAC +Plaintext: D0356EDAEDF24B9D21E54064B598 +Ciphertext: 8CEB3D30F28618B7300CBDD90CC9 +MAC: 12470D3CA4812DB3B2CB4C892D940A76 +Test: Encrypt +# +Key: 9AB717EFAAC2D1A2E86A9D4D8D83C8E9BA1FD77AEF31D27767E24216537DB2B0 +IV: 5E7F3D3305757A83AEB0A830 +Header: 6C2B6CEDBF0AC9CD0A +Plaintext: A75314445AD66E1C55194864FD34 +Ciphertext: 3E32D4143FB74C6724205F2AAD4E +MAC: 63EACA63460B78969E773ABBFB2A7728 +Test: Encrypt +# +Key: D69B6026E2285A0DDE1A280C017746BCCACBD06C9BE7E6091C83713DD7563597 +IV: 1F476C2357C70D034FEC49FE +Header: B9CCDA8AAEF7229AE257 +Plaintext: 8E02D5E205DD60AC40E7BD22E036 +Ciphertext: 7754AD30DA4C703EE72D40572042 +MAC: 6A84EBDC304BF1DFCE87EB0E843C4535 +Test: Encrypt +# +Key: 0C45B84A83319F8BE4AA3D28CAEE91C5D13109E047BACF5B1C5A11AB13FCB7CA +IV: E21D58DFEE29DE9B5E5A4F15 +Header: 91641987EC700E469879AF +Plaintext: E4FDF42D98E40A1F9EED2C63DEC3 +Ciphertext: 3DD5C78B2A3A8677E31A6F476D99 +MAC: 7F7486DD8B9E3AF496B45D983D6ECA6D +Test: Encrypt +# +Key: B2FBE43475255C5E56D3E8D80B95137FDC045EF676FD8FF3AE0A32D6410A20CC +IV: 0F225C047770088711D01C75 +Header: 2880BD3B1FE2BB31B550D536 +Plaintext: 0677579ADEF443F28D962C186913 +Ciphertext: A01271CE75AB6631E4581CFFA543 +MAC: DF38E44F0CFF2FD825F14F8756C7C78C +Test: Encrypt +# +Key: 8BA9037816A05E22ECE86F780C1175B1EBAAFD0604940FEE91BAB13BF42FDDB3 +IV: 072D41CA48E8C6E3F661A0D9 +Header: C930F46C59E95DF94A9593BA2D +Plaintext: 98BAC0249800BAC3D7CD7565ACAC +Ciphertext: 085F095EAB1141EA41113F921C11 +MAC: 5B02220D311C879862876ABDE1F9D089 +Test: Encrypt +# +Key: 62E60CFC1CEDF600455B117D101F9E7380FFEBB9B9CDDA57946A8F32C57B08EB +IV: 2726E1C24E87CC85E1295CBB +Header: 5A427C5FA899D5A148C575368615 +Plaintext: 3E2D55C37924F46B49011C2D6CD8 +Ciphertext: FB487740B2DEDCB2F898780E77C9 +MAC: AD4A5A6762F0FCFA2D69F8156FE00B3F +Test: Encrypt +# +Key: F1FDBE4A684124A265E7AFB0CE3E955E33721B40883C20E7CB2F50F6DC8EF645 +IV: 13E199CE04B930FA8678C1FB +Header: 8B0593A9286D38C18BD1CBD4AE9E9E +Plaintext: B178FB72E10447F79463B4802AC3 +Ciphertext: C2CDE11EE44B461C9D05D32ACDB7 +MAC: 69489E9CA71063C016D9787C5E7540E7 +Test: Encrypt +# +Key: DEDF671991D4A38AD1B72AF72C969BA322AF89764919BE42FEE8E7B62501DB07 +IV: 3CE7292A17F333C7F341329B +Header: BB7C1C287CA76DCEA1D90C314A660527 +Plaintext: 934925D6508D09313B3802E8E3AC +Ciphertext: A6B2432C8B787CEC38950C982CC2 +MAC: 715888BAB61EED4B8A5272B717B34AB4 +Test: Encrypt +# +Key: 78822F055F3A5C02C6CD179FDC938169E34F2B649B935A4D4E4ABE46143E3914 +IV: E555C8170AB30202675F77F9 +Header: 5B43AD5AC9701EB994528C5A22B800932CF5F05AC51507AAD15C12F9 +Plaintext: BA49E4DFF9603F075D92C07EA400 +Ciphertext: F81FD7B3548F1B6A2685023C7965 +MAC: DD59ED21888160AFBE2EF8BE84982B25 +Test: Encrypt +# +Key: 9DE3482A1EC9E5E0DA15FBE0ADBA7E637B5CAF1E4DF68412FA4C277CF0DD46C9 +IV: 81B7CCBE01E65B4303152043 +Header: 31C0B2C3ADE995D1DA6ABE9CDE4AC2AF599A4D710481A9EA045C1B3C154A2723EA182A4D +Plaintext: 466B1ED8A4C87B5B69DCBF97360B +Ciphertext: 599CB3373C9E508D08226B66A097 +MAC: 82D6FF7B0A5EA56C4C58DCEC71026EA0 +Test: Encrypt +# +Key: DF65E692C654BF06D55D05D1DA2087CA96EFF44BFE28970BAC34EDE4B035A5F7 +IV: D8DAF8FB2F8B3C43618FF807 +Header: 198B3E63A5D726E646D41FD4928B108BE89CFA2709256161F2DFFF0C61F0411FC806462AAB0D25ACDC9737F19E232E18B6B26F +Plaintext: 2BD67AFCA5AA5BA00381F1A7BEF8 +Ciphertext: 966114A335513E5821379F01476E +MAC: 1C19B37339623407A74287E649BD261D +Test: Encrypt +# +Key: 1CAC4DB3A201456502929793613405552F4BCB90B2F1BF8068E19FA1AB755D4B +IV: D466CC5E311EFC320F581C50 +Header: 54664453DB14C9C2B02664CFF394021053CD89F1A7E17AADF35F7BEFDB398B329E2E89A7D1A5EE4EA35CFFF194D4046BA45A94006104A073175FF4FD5EA64821B987 +Plaintext: C451A8E5314C6DC45CE16B82DDDE +Ciphertext: 966B6882AC0CE7120F525E223031 +MAC: 80B9E0A90645CC67B4B00F2293B8425A +Test: Encrypt +# +Key: BC260A0F8F204E3BA0D778712EB1BEDD0C3971B46BF2E81FACAA36E0B6BE6F97 +IV: E098572EA007D9E376E72E78 +Header: E3FC96587E71EB8B9A9B1DF20D3190A0A5E19268E0F016B6B96EB090E8690E65D5675BBCB84B4094F552861FAC899735A08D9CD83E277956DF2916D9F53368819EB154B024932474DA9A9E20C41D509CE32A417BD54933CC1B1105 +Plaintext: D730A9D6A26ECC3D42CA06CFAA5A +Ciphertext: A93E5294A02E6B8835E337519291 +MAC: F254CD9CC8366FF52E340FF65F2E4744 +Test: Encrypt +# +Key: 084EC3F0F4334B2E2F21EA136F10C74F491F19DF67F4300B6112260032B862F0 +IV: 6E4A1D5D6584679191C1D460 +Header: 5DC07C64EB694CD01359B92E590DCAF24B716AA2549BE8ABE87FBFD319FEE580BE74417DA83643EE05F61E7CE90BEF618C2B13BE57240A72A6AA6E3735E42E1A146C6C45EF53E30177206263AE58E7AA8C56967622DAA449CDC2D4AC1A2ABB05DCB6A5BAD0FAAC4971FEC978F8B4 +Plaintext: 33E0DB930843C7B9758B8586314E +Ciphertext: 6F4FD07500DEE5486BE50811E3FF +MAC: 6E680ADAD756CDF54549E3A1014674CF +Test: Encrypt +# +Key: 3CDDDB8FCD9A4F7EBE30DAA1A149B1A8A919E3D4A37C6DE44506D15188CC5EF9 +IV: 96FD255B081CB99A57E17F4D +Header: +Plaintext: B1496C3D0C87977EE6415715971ABF +Ciphertext: 2E67A716807752C7779CFCCC2595F7 +MAC: 114516567FAFE98C80FD3212B90E1C21 +Test: Encrypt +# +Key: 38339C49C65ECE4FF2A45652C267E3A4A1C7186118A97172C9EF02986D54423A +IV: 04D9DBA34CEAAD27906BE937 +Header: 67 +Plaintext: 25E0908DCCCE16B7CD87A8B386E422 +Ciphertext: 6DE7D51CFAE03D90BD442AD6D06C99 +MAC: 954EDA42BFD6BA49E3E220C1710F4449 +Test: Encrypt +# +Key: 1A8ABF921034F91F913E78489054ACC68732D554AE179E6B88839526ED902555 +IV: 6FFEFA87AC08FA1E7E5C7D02 +Header: 7BA0 +Plaintext: 74B80EA966D701C25168414FEE8FCA +Ciphertext: 0F805CE02F0AA72ABC128828DE5A5B +MAC: 3DBDF259A8384A2533579F0591807051 +Test: Encrypt +# +Key: CA621ED798C6577EA77BCAF188EDBA7CE5839BA45A7F5986F36322E50AE5E481 +IV: A54A811C1BB58C34C0B56C81 +Header: DBEC75 +Plaintext: E6D99C33B9E3F3237BA833F2952C66 +Ciphertext: A6D1F9B71BF8B7A44E10ACC995D578 +MAC: 72CA8F60F6E7E6856C06051C2C584113 +Test: Encrypt +# +Key: C9AA187AFF93E08FA22478B87862CFD3DA6CAC5A8C6F9FEA036AC99939CA7216 +IV: 8466E8CFDC5BFFACA0DDD843 +Header: 159A4B8F +Plaintext: 2C0F16DFDEFE3A76868BFC4D0E4B45 +Ciphertext: C467BF616A59B338D4E26846B0C7E2 +MAC: 56C7169FC9BF79A837130A790DA86893 +Test: Encrypt +# +Key: 543A29E3C42129106C850C041BB610B3C5254CA4EC44D25049A0728E9C27F2B2 +IV: EECB6DDE370269D9F93B7653 +Header: 3AE7EE1646 +Plaintext: 5BEB2D79992EF4B9D73A6313C0BF8A +Ciphertext: 4B5F84F85C5BD05EB1E8520FECE104 +MAC: D4214E0D6A4B05772A376876967AD5B8 +Test: Encrypt +# +Key: 5F6835B0A52C4B310C853CEDADFB5BFBCB64096BF3B8FBFCBDD56A5DFE705D76 +IV: 624C76196A1375B4421E181F +Header: F1F42360B97A +Plaintext: F0B7544DB4C18176196125154741C4 +Ciphertext: B19020B497A316AE3D1BA28F97C839 +MAC: 096DAEAF44DFEE3161A06DDB7D84AB54 +Test: Encrypt +# +Key: 7D18CC17D12EB00465F3F0F5B85E2E40E2715DF15B8FA70CA0568EF5368602A7 +IV: 539AB90FA341ADD0541E3A98 +Header: 9BC4660D215ABB +Plaintext: 64253D21DED7AD4D4B927E8F93DBE5 +Ciphertext: CDF6B1B9786D0CE337608147414D58 +MAC: B008A3C15369AE71F8A576F5C78A2A03 +Test: Encrypt +# +Key: 8BC5072F45141F0645875A9535B6E80F2771A6C86A823CBF4B4C9FF32C2103A3 +IV: A9C2C12E3E64F7CCF465BAA0 +Header: 84D817C1ED84D325 +Plaintext: 9AAAD69B0AC30FB289EE6AD6E23A12 +Ciphertext: 720766B5381D4E63ED09345213C004 +MAC: 5F89FAC66C08468EDAD68851EED44646 +Test: Encrypt +# +Key: 4E63113FC508E748EE5A3239E77C9C12089289947A5BCF6B4347188D52357AC3 +IV: 18A5F0AA4B965D4F2B854C27 +Header: 84EC6D6B3A3B35D0F9 +Plaintext: 788955FD1E932AE102B042D3371B07 +Ciphertext: DE570977F4CDF000B3E8E8D212FEB1 +MAC: C5052174D8F9DA6CE4069A9E51AE6B51 +Test: Encrypt +# +Key: 1060DCDF83EDD0A6BCFFEE14B0095D7376B9394F20C6C44B769DE67E8A04D8A7 +IV: 2DC0C4C5B367135247659646 +Header: E25C3B4F7DB56D25161C +Plaintext: B5194D56F938FE693AFCD28D8F125F +Ciphertext: 5C4401C7922C5473CADBDE4D177CB7 +MAC: C08A47AFABCE98D84BDFFB3391C8ADA7 +Test: Encrypt +# +Key: 674F5B5BAE5C07D08EF8233B1B5EC6D1C51B893A73EE9F56F9391E7E7F7164C6 +IV: F4BE3D647309EF608E7A05D8 +Header: FD2FDD4DF70E33BB438077 +Plaintext: FEBB6FDCF6D05A29B5D1E65DE748E8 +Ciphertext: 5131C2EDDAC3EDE1A1CBD0D355D860 +MAC: B58510CA5F9E9E4929A3FE80C56E8372 +Test: Encrypt +# +Key: 072BCA57759EF0680CBF9C8AD499CD7FA8CD83BC8FFC07913BC30A9519DA4E28 +IV: 35EDEC913DEFE954AE95D858 +Header: E03A7572956D3468208D0CC1 +Plaintext: CDFEC1738925CF432A293EDB58A9F2 +Ciphertext: 6E782E7EB4E851017F3D6CE9AE98E5 +MAC: 65271AA1C2C081E96F1DC7891A4A56FB +Test: Encrypt +# +Key: F996A42FE5A993A468492C8D79A5058AC21C5F16A1877D782B15AA977ECB22A0 +IV: 7E8A8122746EDA63530F59BD +Header: 24CDA2C2AC5157895D37F87C9C +Plaintext: EA147198030FB2637E9E8F3AA2879C +Ciphertext: 858B22FB4AC2E914CC32F04786E5AA +MAC: B6FA67EEDBF862E9CF489B2B6A40FC1D +Test: Encrypt +# +Key: 46B4DF23C757A2A3E653E54C758229067F94C744A5460FCF76D9A3B0F7E8531D +IV: 454A47528A24C76D1EB93A76 +Header: 7E303202B4CEFB5A990DAC38FDD5 +Plaintext: 29D3EC49CBE45FE24E541191E899BC +Ciphertext: C584D28906D363BA08B33863112593 +MAC: CC93B8FA2486EC9C97C5E737544D27B5 +Test: Encrypt +# +Key: 53CCACB37AB7572BB3313469AE144888CD0C50FF00CB7FAC1BCA34E30F6F6F67 +IV: 12542426D5DB0F1A02847884 +Header: 72E68AC2A9D33DA31870A2649C71DB +Plaintext: 33FE321652928012AC2959FFE61286 +Ciphertext: 3C664E8966CF14EB7EB70A3B8AE7B5 +MAC: E7CB51D9320D76F755323A42A75D6E18 +Test: Encrypt +# +Key: 56DFF2B49CDBD016D36A9FB1313853CBAE838FE523A03A22243BE31B9D6D14E5 +IV: CB662E9F157AE7FA31CB00E6 +Header: 5A07646226DC9D5658815A0C096BEDEC +Plaintext: A71B34D1563CAC8063D3D816923145 +Ciphertext: A13D09D8D79C9B79F2FF5C7804847E +MAC: 38EDD090339699AE32AC0678E2633A1E +Test: Encrypt +# +Key: DEF64EA68F4656BE3E9205EC9C7C6AA2DBFFD1151F8FC4B202AACDEB9B3D94AF +IV: E487267FA6A7E3ECA5F27C87 +Header: 760CE170BD45F2025F88FBD577D0CE8EE4 +Plaintext: BB1F1B3043DC621320F45217DF036D +Ciphertext: 90833EDAB9EF812B5840EC6475B006 +MAC: 6FE0FC52E13CA1EF3A897B694ED9B6CE +Test: Encrypt +# +Key: FEC890F1282FF9AEDE3F7A19FC9834954743BBFAFE0DA02A351EB8731DCDC8CC +IV: 75573DA40275D949346910F1 +Header: E42F32BA1F99E75EA930F97F578D312B5F7A9C6E0411E90EA96D94D34F5C75E2E98F4F907B +Plaintext: A47AD29E7158C5C686307B4802F144 +Ciphertext: 3478E6EB5BC077E4C2927429206A49 +MAC: 793CFC3382948C9E84B0ADFB94895F0D +Test: Encrypt +# +Key: 0AA01CDC8945444F42C81F6AC3BEE0184909B5D5C18B5D19C3730C91DB7E35FB +IV: 5A9F9D9B5414246A9D628563 +Header: CC2E6CA7C1C61A970940702B85447948C44713F20D1848AA7BA6DEC643602B039E5170367C0AD1AB157EA33FAA8C45215BCB747A6E99C4C1D7 +Plaintext: 40EBB8279A5BD0151218BB1ECA4CB5 +Ciphertext: 8EDACF999E05E5471F49DC0E794C21 +MAC: F54284F426774C20109616E6E8AC832F +Test: Encrypt +# +Key: A02933A5CB076E0D5C4BFB702E4FC61D3A8AB1D3AE2C0E52494FF0E1E3330672 +IV: C73DB2784AB41041731E9B88 +Header: 08E0DD4C39510CF887F1FCA7DF82A80CB901A43FFF2C779FE1CB7548E8E7D5B993392AD15A5101205A4948A8BC15AD87151C6E3C54EC42D70456 +Plaintext: 2882C3D5AAA5E9406DB0A2C86847BC +Ciphertext: DA4CFDC2EDD84DDA9941DADF7EC0A2 +MAC: FE60A7434B19D801FCF3FB7FCA537D07 +Test: Encrypt +# +Key: 563EAC8FEA42C03C2B05283D1B7587391EA8D74F3450F733F1EAB0644EA31636 +IV: 7016D29AE701336B3BF69633 +Header: A0617947DEFDBB1808A0337B7231C32CC8335BB2271D0C117C852F44AC3CBEBC4280A4B8FE5775C7FCC04BD086CEA6BBB218229B20AECB34AEECD3EECB9C84B02FEE6F6C015962585C +Plaintext: 861C24B622D8E5547569445BA0F971 +Ciphertext: 783720FAE73E74C5A8FB9DA74A66D8 +MAC: 048D0574A6AA20D5FE0F9CA9221F1723 +Test: Encrypt +# +Key: 2046DC7E4DC6AB1E2B1269591855FDC6619EFB186CF28D71444C8A2149D894FD +IV: 234891857495473575F4E562 +Header: 6C93642583AE453F7AC328512178B550655D362D92CCA91632685859D5F19CA6D0F0A7A3C26D5A870EA3659F13BD13AB12B579909FAFF5D7A3CBEB3C823365D1C68E30D72D4BC4E4BA4A246BC43A32B73DE25BCC +Plaintext: 020FFE4F00CA4BB226938E29B499D0 +Ciphertext: CDE2538770E54E9FB4BE618BF47AE7 +MAC: 8EDE7BC2E6B3B963CB99C19A016B1E0A +Test: Encrypt +# +Key: CD410BBAA45272AB9BDED809BB355424D901FCEC521781656E2964F1357BEFAC +IV: 3AE3A63B64D7D03B9E0DC64E +Header: FDFDD743A3DDE27D6621E60BB094E42DCC6D1CD47B9033286C9470F017E74A0E5F6A502EC27BA454F8952E835516C6903ECC41D3B1FF8F3BD9234FFAC3A9CDF65A33E87C648D085EDD2F7F501A6C0009AED8B18A0BFA6BE90C8EB8FFE0AADA8A241F36 +Plaintext: E5D43B6369D61AB82DBDE686C86912 +Ciphertext: 9A9158DAA75AD349949DE684255F38 +MAC: 9A1093AEDE8D2F3928340207CB522079 +Test: Encrypt +# +Key: DC220CB4748C7EE639D6008F635EB778164FA709212DEEB91E6B4F48E8EF3583 +IV: 7295C30D2E139742A1393268 +Header: C8603D6D7133F70A9F9365409A3A64598445472B051CDFA72E59A91E7C5338322460313FDBB63B68127169560AA7046184D1FCAB87ECBE8B05BD2CEB8699ED0C39CB5F9EEDC7D7A42AA1ACA574FB445F8066132ABF38A4DD30340581F7FD8A6A32125296CCE21328DB750A88EEF9B03CC47B4C43 +Plaintext: B080AA717CF2C0B65DBB11839963C4 +Ciphertext: C59E3EFFBAA7900A1D5A9AB02A81E7 +MAC: 453B2E97D0CE66FB41B2CA0A53C74F50 +Test: Encrypt +# +Key: EDF93AFFD913842C3005D6EB6A3DDC154173DF5165C5EEE119C55D9C72C547C2 +IV: 1FD1385C0C680FC1E60E408D +Header: A8B5636CA7449DE605216EEAD32581D6A0CEDF49939FE7787167BA9B5B8E1DD828DCF934DA2600F71AC424BFEB7256F4A9809BE3D7929A9BD2053A87339EB6FCB0DC70B3D9F07C978571E30BA552323A40314639DDE00607A3BC55608A2AD796DCC02D3473F984B29FF611C0B6DA73F848A5E109A628308B6B67EC3761F6 +Plaintext: 08BDDCE31A94DE58177145E751651E +Ciphertext: 63249424727A521360CB91E8C6B828 +MAC: DEFD8B09B913F161B740987858904548 +Test: Encrypt +# +Key: E75A7FC6D88FB84AF4953BB3935DEE2234EC2D8E695004A69BF7CD1911B7720C +IV: 2242BE49BA39D82CE07F8C04 +Header: +Plaintext: 56D2E408CFF33F71FD9E0EDF4530486C +Ciphertext: 8A73ADDBEA49F1E6BA3F4110E9FE5F57 +MAC: 0DB9818E13E31033271A87B2696013DC +Test: Encrypt +# +Key: FEE3FE2AD1503384B08656DD96008D25A59748BF28E7C7050F1B3EA2DBCE348E +IV: 906D407976962C9FB54FEA60 +Header: 00 +Plaintext: E228CBA5A8FB6410180FC29F32BB0133 +Ciphertext: B9827BEA443FA9C90CC6B08A6EF2D263 +MAC: FD31DE5FA6CEA23158FA2476901F0DB8 +Test: Encrypt +# +Key: E9EF596CA81FB74B9954D60D87C631F13B96795F683EA42D38C0C12039E066AF +IV: 6D55F99611FADF583F6E2866 +Header: 257C +Plaintext: 012854C6272717932D102CDEFD0E16F7 +Ciphertext: 9429D4EB53C90B201B0CBA2C08A668D1 +MAC: 9B4435DCA790FEC18D20381A41520D36 +Test: Encrypt +# +Key: C204B1C4602924FFFA98AF0DEBB6E1328729ACF2178908A44DD0E5D880D13CFC +IV: 8C5CA7E8EA9731722D1928D3 +Header: ACC1DF +Plaintext: 7EF52B71771D8202B86A18DA9ED0C92A +Ciphertext: 8712D5FE66B7B6B67BB48D20A1468FF4 +MAC: 5FA4E15C47906AE2913A0B68A11B0B7C +Test: Encrypt +# +Key: 30C5F5A4C8F9C2A91B1018937D16BBF5BC76901EF27330AC4A909DF0B85DB64A +IV: 9E26ED5477AF097F8DE3AEC4 +Header: C913289E +Plaintext: 3DA19816028FDACBBB599837AB76FA82 +Ciphertext: 935FBAC19CC448B42D22C6E97D2F73E2 +MAC: 2AC52289C5963597FC6B6478FBA2AFB5 +Test: Encrypt +# +Key: E434180C674108700F99924E2163299D608011F66354AFC3391DCDE4C32578AB +IV: D84DEF2B2A94CE77C4B5B8C9 +Header: 304BC89134 +Plaintext: 09607133C055B3EBF2D4724C5293C639 +Ciphertext: 14BD168211091FE8CCCD751AA606F594 +MAC: 97808175C832434E0A819FD54B660E7D +Test: Encrypt +# +Key: 61494EDE11568438794346829D6854013C7E6C247D4941B155AAA061D0F7EADA +IV: E64CCD41854603EEDDDE97E3 +Header: C9069F555A63 +Plaintext: 14F91D12DEF881057807978A9D377322 +Ciphertext: C660B59E0435CA7A49128EB79D51EB44 +MAC: BDEB6C56EFD613ACF7C636C5F524C07B +Test: Encrypt +# +Key: CC15AFF01AB33F8D65316ED2D9C8BDBE851C4172E772EC6DD2C8FF8340E300F5 +IV: 654430703E9073E1242915F4 +Header: 41CE3857601C0A +Plaintext: F3331265CB2B2AA81716ACE3EBA029A5 +Ciphertext: 3B5BA14CAB408555E483D7197FE8119C +MAC: 44B893493FF793F804471AF8695E6750 +Test: Encrypt +# +Key: 32436CD8C5D690B5D99CDA9B09F0E5882697CF5400A501C7A933CD96E7CC8C96 +IV: 674C0DD380A9B0F1EB5D5087 +Header: 6676873924CB2B4D +Plaintext: DA37FB464E94E829D24E569DC11C4A07 +Ciphertext: A3C3D803B783297A440C5EDACAF6E86E +MAC: 1A2C9A4A3C0FE7CADD234E6FD8A1522E +Test: Encrypt +# +Key: 4D77841ADFB6AFB44A01C58E154A7FBF9511BD15F8ABA2C955355B82F25C7C2D +IV: 1DDD0E457E8C8403288BA955 +Header: DE1CDB55C310D73734 +Plaintext: EE52FE53FB875C744758D548B4A28848 +Ciphertext: F01EE1053A72CCC8075D05BE296826AB +MAC: C5A8C2DB35701D5A9A857B0C44DD6DBA +Test: Encrypt +# +Key: 88E5FF3D4C051928E32AB8D58FA5BBC6F3CCE24054BB2236E2868441F28C97FF +IV: D5CE1E5C043E99BBF71FD94A +Header: 0300138B76522AFB6B3C +Plaintext: B412441CD285F1297E618A4FB0D664C4 +Ciphertext: F20F1F2248841FA41530CA184BF4F641 +MAC: 017407FB8CB086BE2650AB1DD7C972E2 +Test: Encrypt +# +Key: 7AA449B3AADAC85AE4793306BEE9DA11E107FDC2732FF465330168EA684A38B2 +IV: 87F2FE4174DFF7DD991B2164 +Header: 0B015CE2DC9AC8BE163ED1 +Plaintext: 36FF586C5C39E2C9BEFAE80DE46E3B61 +Ciphertext: A0F3BAFCFF42FBF55B8AC6B9D78AB47E +MAC: E95298846A358EF5753F88A1FCA25774 +Test: Encrypt +# +Key: 3D966D1F53FFE312C16D796F7CD49B3D377979EF18E8888B3F490E0997E61E75 +IV: 28294A3A97F658E761698AE6 +Header: F04F821CD4AEF1F1D752DA5D +Plaintext: A32E6A5B2A49EF9C5498673AFA450AA2 +Ciphertext: F8D66E62DB7DC5631493619918AFDDDC +MAC: 4658D84C84393A2FFA0997B88C74BEED +Test: Encrypt +# +Key: 31E57AC20B7A63CBCF1161773C7E4E7B9C41BB1A90792C7FF651C4289198CD33 +IV: 2A422957A021FCFCA92150B9 +Header: BE1DA171167226E24F8F7E701F +Plaintext: 69133DD8E4E4CC54697F9B1B15A7C9EE +Ciphertext: 2C2F5748DFBE75926E52690B8EDEF7CE +MAC: 7F4949E12550D32EF47C07EDB5735862 +Test: Encrypt +# +Key: F1C7AC186AE74DAC721C6DA50CF5D3E4912AD5A7CAF274398C1EE052D78FF8A6 +IV: A1934D8B5F40024A8C51F6A8 +Header: 41B5B9D99369DB431C4D8DDD9CC7 +Plaintext: 6B4E566551742EF8E3D0978875B1D2C8 +Ciphertext: B41BFC9E91538E5588D500B920B3E264 +MAC: 2C67E380B2022BD9A7D0BD1FC230828C +Test: Encrypt +# +Key: BA2B93D4119DC6A00DA47B9610C3F8C30EE2FE5887652389FEED5F4B0664A446 +IV: 0DA4A92BC7202EA1987AF70F +Header: 446DA23E4DE56E049795BA5809F6DA +Plaintext: 1242FB07ECF2EB703ED3AE1941DDA062 +Ciphertext: 4F4E67645D58C264A1F63777FE7F395A +MAC: 478A44426B4DA71F071BD82C188F3CB2 +Test: Encrypt +# +Key: 84465BFB1A9F6D8D446F52E4F167C7734E3CEFE774B007AB41E7A8A5AE88A22B +IV: F789A38D688EC5C273498F03 +Header: 7AA21CC8C71E34A01F6D127D2C233541 +Plaintext: E3FDFB077D43914A85DD54EBE495C189 +Ciphertext: EDAEDD9EB801E462C417A582F673FBFB +MAC: 3912AEAC3A0F39BDE258A6D53233BF16 +Test: Encrypt +# +Key: 48330B8A4E6234C3AFC55715F37ED2BD5C3D085F0F39AB5DD0B60B173F8ED64C +IV: C5350B159BBE63EA4E6F892D +Header: E79F0EA8BA9CE4C9F2B73173E1416D40384707C94FB07366CCB22805038AA4E896405E9DF9BB7AA4B9731D9EC2 +Plaintext: 49B37E065A52B52BBDE6A36170CF1D1D +Ciphertext: 7933A24AAA24B602616E7A248CB2347E +MAC: 3D8C7E715919CF4C671B7C041F4FBD13 +Test: Encrypt +# +Key: 25E2280760474741355C0E4A080958A8428CCDC052F2AE51E019FA0CE7615334 +IV: F16F974E47A501BC67510371 +Header: 32C1C38C0078FFB637291D44C0355D102D6968B9CD0846C64A210392E151723652D07EBB33912BC25DAB557AE2DC +Plaintext: EF1A4035AE555E33674D4BE368CD01A6 +Ciphertext: C43C77C284AC5DEC8CC0CA8F4C7BE2A2 +MAC: 1DD1929D1099BDFC7B0DF7A4CDCD0700 +Test: Encrypt +# +Key: 5AE27C89CA63057E08234DD761A264A3D7217A8A6934A34E5921DFA407131482 +IV: 6324C63EEB9F1B9DE377090D +Header: 5C31855493CD23628B4363CDB8DC0A2B5A296786E3F2EF1CF05B08EC892B3D8F6948AC4F48163C781C4DFAB111F0CA82AC457EC2D8560061205782FDB489839524C4573F377E7E +Plaintext: 72152FEA5AA253AC4AF5D886D1D1DDAC +Ciphertext: CAB091651AAC96AEF859E731C543E7D2 +MAC: BE1E36042985D0CF0D5AEDA8F21DBB66 +Test: Encrypt +# +Key: 1C8E23DC52B1355DCC867252DAF673453DE8B08932A826300A04A1F2D36035E6 +IV: 041A913765242DBF6D0F6032 +Header: 66B8A07EE650915D9F281ECD1B9A9E552DD7D75CD1C1E9B925F4CCFBCA4EBDA82D40984086CE6CBC3CF3ED9657A11E67F07276943A793EE102D28F94EB6D58AA73288B2AFF8BAD67BC46DB8595E91D37584CD5 +Plaintext: 82E9DE8E8717739E10C9135E2AC659A1 +Ciphertext: D0C9983C3D3AD98E212403F05353DE6D +MAC: 35906DA4AF6C18E8F4BCE37081EE3715 +Test: Encrypt +# +Key: 0C33EC77F10CC9E5624F2B270F7D4C9CD83DFC795DEE69D3FA251E052B1DDA59 +IV: 2E2065447074866B44E43BA4 +Header: 4A0FEA774FE532200AA1F79A91826E4BF04670CAF6AB26FC85681B93B7E0926C39BBBB63D01D5759AE5DECE1E80912D3AE5D6D77030DF5331E32B6ABB84093B0806967C74D9F68CE75B14D14C79E7375694A565E72F14C47B658458343401F1E6FC90C799D43928E +Plaintext: 3FB67FA996D8CD374276EB485F965D3A +Ciphertext: 16BDB2E723445A2BC7C2F5A0AB845E02 +MAC: A0C31E1971C6070FED2A5737072B59C6 +Test: Encrypt +# +Key: E46A739B6B7C70BA6622430302BA3DF2CE8804A891F115D2781106020EA00C1A +IV: 5D42E84EC8348E549F3AA7CD +Header: 32AF25B2355399C9F5C1C3F6465DB951F2CB6CC9E76ED4A28B7BD7A3E226707E14EC929DAE5C7AAD1019471166A728A49141558B4018AF8C042C93CE5D909F9F76616A9BA4640B9B735E0B3A183ECA257DA42DCA64023B10BC05616E5EB4D95A638CF188570B74EFC0512787DFF3B7A1BB87CD246295AE89432E9CAD +Plaintext: 5D888ECECAC0D6E5BE404FAAF4F5E68E +Ciphertext: 8BCFE334C50B6FF6A8DF8AA1D5EE0657 +MAC: FDE4E89A97808E61DAFBDB60CD5D6F6B +Test: Encrypt +# +Key: 294EED0227DA1C73098E1134FACD2AC9802FDF2ACE7D911AD5A7331B10E8B6A8 +IV: A9D3BB1D8C601650AC1E279C +Header: +Plaintext: 4AD8E487F58B0468F1AF12D2F68B873BFECB50221A676F37C71CA446C7FB4E17C62801BBACD170D384B0E81C88D6F3DAD9B9 +Ciphertext: C82A9FC663656B7F658302B4D81F74CF06E5C88EE6CA0567872ACD0F72467B7EEDD8627C8F871B0D2A65768A08E5C056A4E8 +MAC: 5403D3434AECAF7D25CCCBB4865039C1 +Test: Encrypt +# +Key: 634D9E59BC9E1CD643C9EE494603425E7A4F4AADAA8CE1109332DDBD212438D4 +IV: 9408BC69A3DAE8668CC8D78B +Header: 12 +Plaintext: AE28E59F2AB94E9690B7E8521DB0F4B8ADE57DAC3693176992CC0F1137E0E9D9989DCC699E6DC0618C0B65250FD0EEB7412A +Ciphertext: F4033BF2ECA52C969410B4B3193E2886B2686088EA6755CFD4DCC096E4B5564598ACDA48157092D6AC546E0CD83E2DAC62CE +MAC: F14C23F305A6973961A7857C62FF0F84 +Test: Encrypt +# +Key: 057DA3B8F84CF07CE5A0F9567EA8497418E25958042B1CD3C0AE2E0B29C81A9F +IV: 012A3A83D8FA461BEE7D0449 +Header: D3D9 +Plaintext: DF1C7D5430BF5F7585D2EA2FE19245193A9F4B851A99F522D29D94BDE64DF4A00FA103B90CFFD76D6CC4E327C2FA939D5C09 +Ciphertext: C5DDDC5D5C8BFADC73EA658B8199EC8F98699BF13868FB91A630EFD468314D792BDD00687DA745262556D280D1B861C071EB +MAC: C9BB1400B2EF60E61F375D859518144C +Test: Encrypt +# +Key: F763781F1C600D7A0A0E8140F4B5B4A5F0E4B06F37D6CD51C46D971A430436AD +IV: 4A8B65F3308279625AD0D213 +Header: 68E661 +Plaintext: 7265EE645F910F6A92EEB955E429F200B4DD75F4B7C9AE04D9B88185FF0C5CA372F5A0B54690F10B8814B348824191D345BF +Ciphertext: BF42C05C4432BB8F6ACF1230120FADF7DB266195F706549129F37203E2674624A13B675AEE4CDF6F89FDDDFA92BA1291748F +MAC: B738CBD78E246C0F1B9B1842C47B9AB8 +Test: Encrypt +# +Key: BAB66C5112FA264FB133479EBD0580A2F0E3593EB791CC5491755491A63A90E9 +IV: 6992A0BA964B603970941878 +Header: D0015321 +Plaintext: BAC9F229EF3D765F6943765E19465541B6FD1E42CDB7D4C6F67D3CD32AB361487976AB69DB4134F4757C3E599F69C6677D7C +Ciphertext: 68A87C549FBC34EBBF4D450D84CDC3EE5D42015D8D643AB0028C2558B62E7BD23E6FBB01ACDEC79AF952399AD8133DC05E63 +MAC: 88DA614283E1CE7B30BD66DF4FE3ACA3 +Test: Encrypt +# +Key: 484B2B92F1BE08DFFABDB7EBB477F822312B71BDE457C850F64DEBA5EB83EFA5 +IV: 420D7D33B12DEA88125779AC +Header: C9108D2778 +Plaintext: 87034BFB185D9EB0FA0C5F711C87CFAEBCB0F0CCD989118C955656B02467399BE8E0C322355CADA87820AEEF28391105A7E8 +Ciphertext: E16079EDD0C26A051C69B5285E157596512E93979EEB2FCEA3714DEA3EBF409B3ED85783E21A8C3FEB9124921723E7A376DB +MAC: 57A6BC5F9652CB5A8254D4A03E13535A +Test: Encrypt +# +Key: 2360BC06586F5C3436DFAB383197A88605AEB2CB4EAA5D314C60BB25E0B380D0 +IV: EE093F2271AB93902ED9AF41 +Header: 281D06F1C8DD +Plaintext: 622233CF90DABA9A1D64DA11191937BD737C60849637997DA17CAC0D070B93D278D9374FE53E5EC4411B73C09966B97A204F +Ciphertext: C242BF2D2BC5A43E88DA1ADA88531C11F6224090A8EEEDDCA6DFB7F3254D2BA8D153E72E7F8DA42FA8E2A100F2F48E78B1C9 +MAC: E4C2A71FCA1150984794605A152544BC +Test: Encrypt +# +Key: 9D6F3A1AF3D28E784E6DEE86F60BFBA929284D4C18375CAE2E7BCAE5931AAA2C +IV: 5849537C835A6EBE895CEBC8 +Header: 8762B10DECB28D +Plaintext: 9797E2FF1C888923AF5889CD49858DB4E6068B9B21840D8F1E627E7ADD40C83EC5DB477C49CDD2AC0179401F196471585E1B +Ciphertext: C0BEE5F495A60069BD4BD6113BF0D05F3F6FEFBC93025164DCCA5452247AD2FD61E2A6FB3FA9A96EF77D20E2AA05CE887C86 +MAC: 49E54698E6DEC96F02A4CCCB0A18F9E6 +Test: Encrypt +# +Key: BD921CF06CBE1FCAD04B7600C019CE76F9396B15CA560183BEA774899C0171A6 +IV: C9A9EC89F39B6F349D9E693E +Header: 1D908F897DF57838 +Plaintext: A0FD9C3DF2048711028A908A158F9FB7A917DCCEAC44223F1D2BB92F683C4BA65B6415B89EFD2384C4D060C7396C239F949C +Ciphertext: 2E98A68993631C9DD21A6F6925339335CB7801118A4E5EA3DBA4B9E9D4F630C50AB1152FC008BB0F314C34D094D1CDE46C3F +MAC: 8536F3195EC5B0EBBFB20D068AA0FF99 +Test: Encrypt +# +Key: A314EA13F50FF06297DEAF7B31CDC797B43EF13A5387139658214F0297973919 +IV: C6CF0669CEB5703928BBEF6D +Header: 0315FEED00A9639877 +Plaintext: D8A71436D0F6525A67F5B850470727EB440BF815B079E4A445306000932AAEF85A7044E5041B509921C7ECD0FF45AB0BF575 +Ciphertext: A5B84AFD457CC869E73020AF5708D416D50CF43EC16221755CA74B38B4F01DE71A33DC18FCB080A1DE5E3C4E6DA824E50A1E +MAC: 70A7AABBD0845D7F1CFF1F1185231F99 +Test: Encrypt +# +Key: 1EEE20C78B5280FE0A445029A336D880B6387C5BC6742B8C485AB005085A1513 +IV: 86B92D8C8C4D0E528CD910A9 +Header: 4BDCD7F21C108730997E +Plaintext: E259CEF425F90571E0C8D32B9E1419D5993E2518A27DA87E61C857D3360C1E3B7C02209403BC8205F176739096CABAABDA42 +Ciphertext: 0C0BB6028D77E3412C00A0FA851FA07520B9DC1AB6D00AAF7FC3C3B675256C4EB1584FBDC92BCD2E7A4E580F135D82C33912 +MAC: 775705E898A8C0C5CD995B5D4EDB6BA3 +Test: Encrypt +# +Key: C38142B8DDCED9A83D21E718BD440430FDDEB5B5C2178841280E40B14C304074 +IV: 0B72793F0817D986DDD580CC +Header: A361AFC19084522472FE83 +Plaintext: 248256C3F7FDF1E0602EEF34B3749D3F71BDBCF41B40F480C738D0FDEE033C3FE93C278A771CE9B00CCFCEA087D961C2C46A +Ciphertext: D0CC875CC80BE2D49DDB488E7DFD9156296FF491B244FB82F712D0E833AB537DFBF002847574395E791EC6622E1E0FC9FE28 +MAC: 54C711B3A66DF60BA8AEDE337D1B6C81 +Test: Encrypt +# +Key: 0CBD2F036516102D550038E0A960F5836D6E2EBD849E10D32AF5A231451D6FFB +IV: 19D6E4243E16F25FA69E7BBB +Header: 2AE66CE8EC4F7FCB828A0316 +Plaintext: 106DBE8595B15ECF98E0128AACE0ED4C70762214D9BFE2C975A281A17FCAE7B33CD1E981F4FD5C8C21F2FF6CE332B8AF8392 +Ciphertext: E228583197CBF08E29B8982ED0490D11F35C0552B50E259940B5746BFC4C5DC37E1D99C31122DB9BDE4F383ABAC452683649 +MAC: EA5420F88EA990DCADBAE423142D0CA7 +Test: Encrypt +# +Key: 2268053060F9D66E663A2989F55EA071AB229DCC73EB59D09A22DF4D175CE14B +IV: B51D30D423E2C91267BE992D +Header: 0F9083455AE1ECE3247D6D3795 +Plaintext: D7AC02F5FA5DEF4A077111545E232C7C8C208928656CEF2D194E9D906050A2DC83C1AE13E12068572AC00CBBE78BBFBEFBE6 +Ciphertext: C6983B097ABB6CAEFD2B49D1C0A3F47F511A6EF12171991FF4E8E66D0522B150EDD8254D6CF8C847D7D2B791E821A5BA1B42 +MAC: 1C638960C75DEBC9A91A5A90B47694DE +Test: Encrypt +# +Key: 340A2D300E987901F9C344A25F1F36E2B1405256C5B654C3BD46E34AF6910337 +IV: F30088EF88CAB729AE65049C +Header: 5826AC9E04D1613B04AEAB58DE19 +Plaintext: 93E7020CCF47D56EDB5594B5FDE44BCC188FB2788FC77ED869CDCA1EEA8EB252F751FDC1B02474EC0DA5F4BBCA8F9C45B1DE +Ciphertext: F39546087D4EBE70E317E5D875859C344528DDF650DDF22B5E945F0DBE3B2C8EA1FC13F3764DA4849B06A3347C62E7FB1710 +MAC: 42412BEB13EB4AEA7CBE9A564620E400 +Test: Encrypt +# +Key: 66849042463300E3E65D1B718C57ED40796B811DE702D5BB4E223373017CD8AD +IV: F82EC6F463E477045559DCD0 +Header: 3D0E8F8672BDAFB5AB5A73948D77F0 +Plaintext: 7161381BA2CF41D060C428BF10FBE0BE468EEC1E0924708CBA133F3BE3613BC984D97A909D606D42147E14020568370E7D13 +Ciphertext: BFF4F6D2B61A18E34A4D1F6B8EB6C6DC0A7FF181E07BFC98AC4B7ECB57B91A989DC2900CB2B140E0C27201D517299182A74A +MAC: AAA812F1982E82BBE0AF609F611CEF8D +Test: Encrypt +# +Key: 4B12DC992534E6DE5286D8D98C72996BDE6D35F0599F8B8C87C3AC9874B482D4 +IV: DE8BED3C3BBB1CEDEEF33DF8 +Header: 538A02754DE38C8122794C0F1F7CFD0E +Plaintext: A933AAB373C1B881972F6C4784DCF265ACC4F87BC3B3C68B992B0A9B59C64BB93895064F0AB7E7D3982F425ED6C9B1AE50B7 +Ciphertext: 5EDC48C9CC757A8A1FBB3FACE006C278D9853FB67D92B0A6D477A33D0010E5615BFE6F229BD9B606B001181623B80E873535 +MAC: 355B544C0B4CB15174C4881ACB0E48A0 +Test: Encrypt +# +Key: D79716A8E8C060CF341D207273E1ECB55B2BCB3B95FDAEF80F64A7B109F6FB3E +IV: 537F0A9886EC7EBF345D7F73 +Header: 9C95AFCB6130AD3A09828AAE947CD783412FCE2498D609D173FD006F426A1D12C01EC927CCD768E529CFF3781C27 +Plaintext: 9D739ED45C78F4EEA77B9105D61D40935CBE971D4412F71AAC3C2505E81C61F7ED101ADE9DA97E4310D5A603689D567837B9 +Ciphertext: 49177EC89692B850819A43AFA80F2205C67A0CE1ACC64C583B0FFF802B2A28FD8F8C3AA35A7DE0AC28E6EC0CD7DB31E27956 +MAC: D438FDC4B5604547A04D91422A8A1CF9 +Test: Encrypt +# +Key: 44670989F667B5CE9F2ABF10ADF60EB1DF20914A156865BADEE2134CDB6D69A8 +IV: 181BD0B19CA07FD6116ADFF4 +Header: E07776D68F206E6C8AAFF1A9FCF87F50273C0A48652AC726711C1E4C013B77819A041D5EF32D998EC5CB3715F94F30BB42ED75418B92AD577EBD5763AB6F91EC4027183076ECA69A04 +Plaintext: E8F1C615231158128D8EBA40E4F0A9FB8D07C546C4092F288CE4848811B93C98918DD55A59CE290ED096E5465DC233EC9D0C +Ciphertext: D8277581CDF6CD6784A1DC5A2F9AD2C23780965C8CE281AA29EF855459C172C5C74A86A5D6C22BC303ED162C269326A25573 +MAC: 86B19E1E441ECB9BBC2F85F6E65FC098 +Test: Encrypt +# +Key: C03DBE3BF4EEF15A42FB504890B5EBD7C396CF693F74414D26E947323AEC4D10 +IV: A730F7054EAC8CD4B2E0866F +Header: 6E5ED1A38131860C9B912D70E90B423BB0F3BC34FD5ED991FA65AF6EF0A3A434C59BD661BCAF04D34E7372969315B04DC8C823D6DBA45787131CB526D770C0F7F03DC81A74D4AADB3D37A242D4B932B827586EF3F95B +Plaintext: 5F532878492DE913B65247340126780931CD6B9DCBA5971040783B005B0FB2CD2F1A2A399FE0783E3B96B2F9CD25DC785810 +Ciphertext: 2A3605E5274D25AAFF2224D0464C34D93758E4A1C1E464E3677A9CE3C6071B77A153503118FC5034D6991C62C6D1ACE90C66 +MAC: AD4382DA489CE8CD95C476DBB0A63B01 +Test: Encrypt +# +Key: 5C85D03F355C4B06FDFC15A6CDDA60143C9528C8CCF561D4685907CFD8290EE4 +IV: 5E92702BED20746E04FA064C +Header: 18581DA8A4B0B093C0E87333A4866B8096C26F9D6D82932F29A2E1D773CA2AD7D49493A5FB661BFE08C6F1101A844543F6BDD79061F865FC07D0449597FC6776777677788235BDB7F4C8B049D1D05C7F3A43DCFCCB4B11320D +Plaintext: 9CFD0E06710B3473F9FA7B1BB92998BC0B160540F5ABE62B5636AE1E773DF2CC1DDB92DEE365431E2301F0B480058BF9F5CD +Ciphertext: DF337F75E4A47D4404496512A87B39AF5EC30BC8C85CD71D98720A4BC3F77DCB694361494389C98884040728D67BE758A01E +MAC: 64FC35E7C4ED0332ECA9EFAF63C8BAFA +Test: Encrypt +# +Key: 9359050B09A563FAC3D3B1CD56694565EE3E24C49EFF9D2E6C872DBBB3104F9F +IV: 87416A2C3326D0C9609F8C58 +Header: 9F48EBC7E168396A22F419DD8ED701A34394F80FAF9E00A35032C8CEB768ED06392F4F2C005002FEF9DA489FD5828D4AFEC6FD6A77576B5E7F335AE44336F1C928B7E57CF6E701784DE56B48A4AC88438CA61CDEADB78744C1C309F483AF835AD2 +Plaintext: BDC49FA218C910AB9ABEB2ACDAAC0C90D300EFD673952273DE5AD2E9B3C12E266EE094CF0A9F28BAE40182BB332623AA064B +Ciphertext: 42EBA920886021E7B39B9DB26C55390716FCAEB98D8738BC5D5D981E183A40E8DFD4AF446E44DCF0FFCCC999BBA863F085F3 +MAC: D1F94068209F99062672FE410C237D20 +Test: Encrypt +# +Key: 4B40358A76A36A95AF2F12967D626487E56CB9BB3CDA68689F045B8285F8B7D9 +IV: 1D6B7557535D7FCC9D5ADDC9 +Header: 6918D35E6EB3554CC97E1EB9BD7C0E8B8A9DE88EDCE50EDCF1E9D039D3C952158728602466B37FCBF49F54F4E11CA665DB6C9355769007B9EF0BC652AC736E85450CE4B9C4B67F60FD346C900A7E06A363D756B348974E51318E35D7F570941A3610A7F420E8 +Plaintext: 807AD1BEBF02C4CFEF35722A0BB04E86E1D3F67B290D48661C275A9CF5060786C89DBF5260932CB949DEC570E7CE4AEA7F63 +Ciphertext: C2EF82FE98A0C353C144754D859C29024B1B94BE520E9D63211EA572336EAE9CBE3833AFB47C477C279DE540B17F0DCFF06C +MAC: 4D815D95A17CDC23FD3CCBBEEAF492C6 +Test: Encrypt +# +Key: 45F481CBECC865225E89EDC10ADF376C4B64503A1363BD53D0411DD82FCCD4AC +IV: F2808AA21ED540C8E31D9D41 +Header: 83DDC38A8B4B07251C24A39CC2C7FAF2A361C4713375FA5CD0742C0CC51FDCCC3320CE08559B1AA15A17D8C3EBADC4D095F7C91F527C69531AB25DFABEA8E4E2665F4E762007BFC0711DCC2EEBD4D0EC5542B5234D8EA0BA7F985D41283C171E15875A204E15297A0A2E0BF6 +Plaintext: 341174BBB8EBBAC4A8C4A5C78971FE756FC808CA732E0BA7E589C9F9FF2EF2354BC0E562CB4DA1B5CA3C9CFD836FF4EE25F9 +Ciphertext: 6924C2D89F8511C6D8ECE071AAA4A0D6EF980FC81154926C3A40844E7B26ABF274355101F971E2F519BD2529ECB8CE198738 +MAC: 43C9AD074E41790BC965B4E083E537DA +Test: Encrypt +# +Key: 82918509F2850797DAD0A26DDF509085954B41E233D26BC05C99E36845C0D141 +IV: A50F01A580B4E0E2357975EF +Header: +Plaintext: 64F2F1182AD49F53955D1365DF7A19F2108756C186D88343297FAA6370B04DA3F63FD1721A406BE7B79AB83801996E532403D0711C38F7DD16 +Ciphertext: D09272E05E7249390967B0970672021842B78A0E2FE7F43A21EC01E2C3F926B41A2EFE5859344820AA82B072BC6ED73168F14FC0473CAF8AD6 +MAC: B332E761A5CF19D4D14A9EC03D465538 +Test: Encrypt +# +Key: 18B96792C9C8EE791E051CE1AD213F8F6353298BB8CEB753AD754C8E0B152FA8 +IV: 05B33FF0D71C76348F2C62BF +Header: 23 +Plaintext: 9717F23B2A930CAC9491AE015A1402A3E6E1E78C0538B5C93A4755E12C9C2E7F90A3709753A1B1F1022E759C4A3D232350B8E73CC5BD5994F5 +Ciphertext: C17E56036F0807702EABB1648DE265AC67DEA9B8357A23EBDC4339EF2EBFD4A693C478B5253D023726B4C3302226E9D279358AB34FF94B96EA +MAC: 5289A05A0689E389B5F6AB051BAD8FA0 +Test: Encrypt +# +Key: 471A0C5A8B59744293B7E30A1E46DD4C79AED867FF6984C38C8EB9939FE07AE7 +IV: 09BC04B96FE32BB9F92816C1 +Header: 79F3 +Plaintext: E315C04DC953313B2068B7B58E4550F5DF72C89DEF7BB9155E2057F9225EACCD92753EA20DB946A7CF0CCB1575C3EF01981E7138B104F22281 +Ciphertext: A7FCED2AC6E6BF29BA33915D8405CA23E90A773990905F33A2850F5324206F509BA6C285046189802F931C4A9AC519C3EA286819F4836CBE75 +MAC: 2E2A4500396B714AB789F358CE58F2AD +Test: Encrypt +# +Key: 33648D2590950C255DE0A9D59C7BFA4C5EB5F3AB7EFA39C6D0938BBA7AF48771 +IV: FCE24883361B5E83CDFB8A2B +Header: F3D244 +Plaintext: 6AD26122437FAEBF8B3CB8EC46758F28F9A477E7B9378CE80B7EF3E0D6342DF7DA88B297331820C503A74E148DF5B4D96A61994D85458E522C +Ciphertext: 553236ED4B1D6D364240BB72F5D157E6B3D3D881BA8B4DD109B24650577D5A6FC405B31D360A2F4027E3E28326CEBA9D672B05D92A61CB2A86 +MAC: 57D2219FF214E9287F2C21B65FD58C65 +Test: Encrypt +# +Key: 06EB16AC54A67C7A829248293A1E46B1B64AA9444F09FB78BD684175C8A68BC0 +IV: D7156836B3DE071B97C07336 +Header: 8F34E348 +Plaintext: 2F2B50C02795CD97CDBA48F30FE91C5B7B7A43D5BD785F266D106181A164FD8448BDDACF1FDA7E622581411C66971D630A6753C8756822535A +Ciphertext: 484EBE28C97A02FEECB1B5584D894EB070EE9CCCEC697867F682091F61ABADA1B9FABF6420E665EEA2070D4203AA4B9C289A73A4ADD70932D7 +MAC: 4E0926BADEBECF89083F601305961355 +Test: Encrypt +# +Key: 6DAB22028616A47247A28AFBD672CC549CEB62D4295B8FDD5060CB5F47E06ED9 +IV: 312732D7D8D09F769F531689 +Header: BFEE64C8B4 +Plaintext: 7B3C5A3201D7B168CD6B785FABFDF3D77C3F52D318C4072D547E4BBCAFAB29F3EA6616AF888EA55D07C82E662AF9E0CB1D4E9CA172E3471EB3 +Ciphertext: 0C15C296D89CD3C7F04F0B1C896DCBE4EEDDB9C94665ADB36888CC32FF0B5DF1C5EA4F653B639600DC1EA27FA01C59F84F476F762C85EC8565 +MAC: 6E4C7B1437BEB2AD76B66D123B5119F4 +Test: Encrypt +# +Key: 71323A50FB6959DBFF57ABD4989FA19487864AB675B140F535081860D5E45FE1 +IV: 41E9E77C3D5E1170FA6C42BA +Header: E71F841D1F36 +Plaintext: BBB7767B8A980084B9426EC3D9EEF0793126BC53EDD7FCD6142FE2AC4C0CD62B55F2184255D30C99727678B9CF770DE1BB6C1ABD85061D700A +Ciphertext: 83C49C7AF518A4003B6810FD0C8A77C122535BA26811CF35E1EE44F8CCB6BD8F5C66F6A282A08DC09662FB5459AD22D798950BD15A007FFE90 +MAC: 6D21EC5AAF155A205BD99F1D81039620 +Test: Encrypt +# +Key: F17CA8B391AF972F7C7E0984ACABA3557C14D5AF062CEC2A4A8F95C99DB6FDB5 +IV: E26F6AB5FE95D7345186C77D +Header: 18F01C3270FA15 +Plaintext: EF9A993F6F2F2CBD4B5618B0512ABAFA699B2DF570790E2FBF9226C67446F3E3976AF9C49FAD0FCC7D0E90AB160D13C50ECF27F93E2FDA1F18 +Ciphertext: 3517D2B7E286F5262897A62BEEA9F6002655831F5506C56F9E62C26062F760F61EA7BD0C7B31A3E5284BA03926793A949562DAC9EF483A0766 +MAC: 4A27F7E904404FA0829511972F71F17C +Test: Encrypt +# +Key: D612717994573A710E40F6E2D23642AA5505105E5DD6304A54AC544595E6EB4B +IV: D97D00F0CABAD6523E06C981 +Header: 415EB91EC6209366 +Plaintext: 7EF04ED381666326E5B229251037EB22DDED2FB4ADE19B3E03EB187588328FF493BE11D072B8FBEF1607660B88E91B18BF09E3A36C35BF305E +Ciphertext: 4D7096C10E90795B9371C7828A4EC583BF9985D590DF70C48F73B9E1C2DC0F1B468D7D9DBE0664E870CDE349AF9716B594835862373508AA29 +MAC: A115DF8C1C12C3C2EA1A02C38FE814CD +Test: Encrypt +# +Key: 4D0FAD068BA52DB183D09CF554DD4E6A35DF4368DC6130C7BA06C815BD0C207B +IV: DD094A8186594B13B5F04EE5 +Header: 979407968D0B4652CB +Plaintext: B5C77D727CBBF36781CCBB6D1B5FE6221E9FF50FD3A261D1C7B5CD9C5B234221B0BA62FBD3A62FF4FB1CD89975B7AD9C06F5CB6EA146BF3189 +Ciphertext: 5D864D585696C029FE0D0BD47428D35D2C8DEBE85546AEF6F43E8FC76C8D7211CC48CEFE82E958B794F25B0A625973A89E5E6EEF8626366C02 +MAC: 3402EAED0C834292EFC90CB2541E58FF +Test: Encrypt +# +Key: 4170D7DFDC9D660A45E2782FA67336FD51FDA3C2A79D4094CA6883B2A3E66737 +IV: E47A5C5A85FF99F46756EBD8 +Header: 11CE431E5EA629825226 +Plaintext: BD62CA7942B4B95A2406449B6460DD9BEB46123300CDD3702062A7129011B9BFF9634539D23E698FE6FAA566A2F5D41A042D78156BF4EC9D05 +Ciphertext: 649536914C3DD8759389EA8242EB6FBB6DBDD595C50BB498426BA4364BC9163AF61C54FE777BA97187E8CEEDC3E8851F9730885D5DA37CABD9 +MAC: 181F7DF4F55A61970F08346952CE8AB6 +Test: Encrypt +# +Key: 9BD1AF922691CF568EFBC04C69F095E66710D47C1F561B6384F21EEBAEDB178C +IV: 1F29F047D4055DAA63904C28 +Header: 87776C9DCDF4C4FCD048EA +Plaintext: 61EF840839A87A2B2CA654F5D84D4A093869C498C4AA1A91EDCD24E547E5583B3F9E487D9BC02D278454CFF468BDFE3C8C86D5DCFBE24F26E7 +Ciphertext: 52619EA25DF4556BBA279DB0CB00EFBC3ECBC9D79B402ACAA744EF1A7148960D41CB3E318187BEB5D262435A69F56E721450E9116A1DA9E6D8 +MAC: 0115C2F84D29C0D190F65E8B06A28795 +Test: Encrypt +# +Key: 4895A15DAAF8E5EF2028965FDDFDBAC9E66EAAE06E461FF8BF9E9D5A3A2D7573 +IV: 189E60759E6CA40964383F91 +Header: 6423E7310C5B7155B34BE1EF +Plaintext: 09B9E30241B5217BEB82D519AD431CBD30A48E93FCE45A254B2607942197F2E0045BCE0316B66D2A76CBF2469A0D4EDAF36A8B3559918F8397 +Ciphertext: A0C0573ABE3807930391345388DA7528FF2D1A8311772B1609A5D93193C1075637AA35AADF81681C0644EE4C53E4DD9FC6ECC1732BD5476124 +MAC: D5FDBAD6E20A4D96B0FEF74D63B68C4D +Test: Encrypt +# +Key: 164D665F8ABA242FCE6376B79ECA993CFD80689ACBF238C270523A16347AF0E9 +IV: 19213379CCBBC6898B0E5D18 +Header: 8AA40BAA770CA05C8FA882B776 +Plaintext: 4DF35DF0E95EFE003B08D0E2A9371A32EEC5CD5563A25F9B85360C109FA75E585E41206B5209A8D635D4557B3F368382E1A7F156EDCF2C0130 +Ciphertext: 7FB52A11075734A86D657E6697EFBC0287BA15997F4279837CBA8867455C9FE5A70F342ED6FFD3D99245A57E4A3DD61FBB5628492A92473533 +MAC: BCCAC989A9522348F812A8199955DB71 +Test: Encrypt +# +Key: 2C662490DC4AD329F997A63AE9E01438E29766DC51BD213D891E719870216160 +IV: AD33029E53BD2C674BCB4F3C +Header: 5759BF6E922BFCBB0ED674F0FA2F +Plaintext: 60393CFD111105433A486DB8CADE74C91BDE935154E8D80C017D0A6165E7FEA8AB19081EF9A7D82BF9489278419EA034B0BBA504915E01966D +Ciphertext: DAABE2AE110E105896B97A6BB142B81DB81EBA336CE0C33F6AECE2D6EB9DA78044794208DDF27045AF741A5976C0EE0AEDFE54CBFF4450C0C6 +MAC: F52FE938C17C18C362DDEBB123E3FBC1 +Test: Encrypt +# +Key: F76FFEEB3B5825AF85287F4221B61AB09401D6A00572FD96CC7408C35D20094A +IV: D1491E12F03C97AFDB862FC6 +Header: F652A52742AF9D4B724C4AB1F33CE4 +Plaintext: 91DB123C89544559136FA726E410262B072022D8D3C2D2C57D96C97044E910EE33092F0A8B2E2494C33F6457EA25F07EA11F80335BDDB50BBD +Ciphertext: E6C15CE2021B642EB05233F73F49459E0F5465F78C6A06C1D1A4FE2265BB6409850B38C9FB77BE21F1A2D5977F4CA52208C61BB41862610010 +MAC: 14BB62417C9DEE008529F26DCDD99628 +Test: Encrypt +# +Key: 2A98FD75FFE87778CEB5D727081132FE5C1EA7A24C9BC31DF532F4FC87990071 +IV: 67CCC21AA94D761A72EAD3E2 +Header: 97C280CF3ACA71E9D1EE2B3A5F38644A +Plaintext: ED4193E88EA0FF22957A3A756FE52D174D4B16E64E14AB239E1ABD7DA4B0AC580848459D9F4F813D852757153F226EEA04B27C6186BF7D78F1 +Ciphertext: 2CA2A51B558C756BB51D6A73799185C871FE086C6F68C2F8F1543EE6D00FCA5E7B1E9952826622DCB171BB6F5E7A228D8313BC92816AC19C65 +MAC: FE6514CBD9B9718A4EE51FCBA077287C +Test: Encrypt +# +Key: 574F88DE579DD5A345BD88CBD2CDCC37D9181A26A729A010F6711552BDA096AC +IV: 36D1E9126C11CE0B30798172 +Header: 7730A1C6143F3C8322E940182E1819559E055D204A089CE8BA376899B1A3930259C1A673 +Plaintext: 8EC40DB8ADB23CAE7590B6B1B6D30129ECDF073EC83CE7E1AF2FFF8426CAB0A2797D20A138B7989AB84C05E86F3AE2C9263C7A01E012573298 +Ciphertext: 200436B8A6826CD735CE70A7C02ED8149D717278BD1E9FF3003FEDCCDE6273EA1F104C5A1B53CB02308F8A32C59716D71E6BE7147BAFFF0293 +MAC: 894431C622CCFE49E92BB3F46C926C0C +Test: Encrypt +# +Key: 4CB2EAD08DAB1D89CA82ED22FCDEE7FD32BDFFE3DE95F754E4D6A54132A7B047 +IV: 9F5C876A576BECD677093593 +Header: C2F2C3FFEAE967D4FB8CFB7B2D28D1ABD1D1AF5B5A4DDB15414E37810D29798F450808FCF4 +Plaintext: E7DB5D9CF60947A32F9CD4694101E3B3AE20332DF8594037B24EBDBCCC95961031A239CEB1D5BDDB8F1896CCC4944558839A351CB877BDDDCE +Ciphertext: 7FA3F7089C14BBB5E1C14137BDD19B51D9DF4924FC0C4518E48EA2C80B1BD5CA08F08705C17D5919DE427FA98346712D3B5A8DD2E8A4CE0F16 +MAC: 7159E96EA7A2B63307CE3343EF884DE8 +Test: Encrypt +# +Key: AE5CD092179698F7212AA70E7137C93FDADE41AB6AD972CA02873E9B43335713 +IV: 302F10F79DB233FD3DA37FAB +Header: 2C2460AD686A8DEDCDA0B9F5F8160C67A9A281FB98F2FF6F1FDFFF70493815E88CD76C63DF93C1033F6A33CA8151 +Plaintext: 0DA43273C30F91C35CDA753EA75FB3ABAF4BBED72A23C985E0D8C2CE7607F97B748284D36FD4FC81E94FE45DF85FB2C2C21B92FA55DFF6FD3D +Ciphertext: D56EB96D490704EA51B64E0DA58D339E72F1D43354AD7128FDBE42A8954EBACCB58DA8B8532DBD4225143EFDB928CF6AEB92C3905B2B743951 +MAC: F19287789CC64BD9B28A4CBA1B75365D +Test: Encrypt +# +Key: 6EDFC28A6182188C0D8CD701123A203A563505E5ABB29597E2B0815122DB3C76 +IV: 1B596D9313847C5FD6940BAE +Header: D7064E649FB4A51F35BAF4D9747B654DAC3B150306EE0BFA7E38A1FAF5369867D5200DB3AF7E813789C5AC842780111F0F3EE43F24399A11A328A3FE00AD +Plaintext: EA377C51002050BCA289E85809E7063151E2452D6707A2A833F3D129054744B4DABB46C8AC69277FC0196F33CEBB7F950F2E4B4012F8321135 +Ciphertext: 9C04A2C55CAD11F7F5FD3FD834BD916B4E97CD3F51167F5D5BD34C0F52F53A69B4F4D95FD5B5E87E71291145C337A27742D00D6A94190BA71D +MAC: 325C1DA75B2D1BB4015439767B064F32 +Test: Encrypt +# +Key: B475ADFC7989874F5769475CB6C7D7F57928524DA92DF291153358FF723A0F27 +IV: DBD29FDC27DED7A40BD7E960 +Header: 129C6DA5C728FF79E4CB246A94D6318777D2631EBA662D3E0623FB9039D2DBEB8C2548B7DF43403E796A7DC4EB5E71DB4FD5559A991B88FD285013EE26DDCA9509D08AEE945329FF301EF200A18DEF15BCEE5769F448 +Plaintext: B339FA1F5B1DF7AEBE8B7E948E89A9BAB89427FF6CB64D3894DCF32D15644F77360DC754E2957B3D9ADB94EAC55313265F9FEF78303E0B78E5 +Ciphertext: 2159FB3801401C9F5D973DA668AD7642C6671D9CB2FA497CA329871610FE838A7444C96E44E2537B98EF7330AFC6FF7A1E65F3352B16293F21 +MAC: 2BDB0E8E5BAF824361D390843847C5DE +Test: Encrypt +# +Key: D63CC730B149CE6196404856E9829B845893AE341ADA941D1EE2452865F763FE +IV: 1261B9133D87909EF6E719D0 +Header: 3F2D133981193BB3E3F414BD7E877319A4553C074A1F1C5E2EB7A208C9633E39B4D4964CD994E57AF2F395985CBC389D6CF231672FFB9BC7B96FF7E9DDD33947A9FE9339BAC0972EF98675C6CC1ACA714F72A9E7A65EF936 +Plaintext: 070ED579E66FD8D312412E46BB129F420399449F6288DC42612179492CB00CF2C154D92F5A42076983CD33765CE48608E172BBF9B499DE0073 +Ciphertext: 0C89A58E8D6BEC41D9115B25717F15772A2B4DA98FE1EDE90A7F3D6C3A825C5E6026DFCFF44D89093BA0C4A532C03800F72A0C0763B1B53D13 +MAC: 91E1AD45E4E9434BA04750C966BCEDEF +Test: Encrypt +# +Key: E945056FFAB5D08824104C79772389A363FE065C69ADDFA3FDE044872248E7A8 +IV: CAF020EA686D90E6B2C1F86B +Header: 069CB4852543A8B96F686DFE35D17F8A4106299FD7EC0C4874641BF7492F714DC592848E36C4AB32E96AD5EF3F389E5F6C81DB213F65D41313549157E4B83021D62C1D67E4DBE2BDC79FAF8D567244BAD7D3ABCB02FE339D1198680C429BC20D6D0A94E2060680C6504EAFB71244C5FD21 +Plaintext: AA54AEE5B5962F1A75DBBE39CC3F3F3E42AEE5A565001FE2DB659498D6BBBF97C2313E8ECF159D10FFD58545C734F7675343E59F0F363A3C13 +Ciphertext: 2378EA089CD9511186BD994DAD02FB2166C134BEC0B6FC2B6C6CAE1165BA2C1897476B61E859C4BFC2BBAB74410DC809EF64DBE9E4814FF0B3 +MAC: A24FA7CA0F727E05F65E38ADC6E2AE09 +Test: Encrypt +# +Key: 0B39BE37040C1C9583E61C46DD84E515261FA2D24BE98ABDFB133BCC0521C3D7 +IV: 6ADA5414A335021EABEDCF6F +Header: C03ABF332F8C433CD862EAEDBAFD63F24172344AFD871822EDEDD7BE61D992D1BFD1B41D09047D852EC04386900F19105180EC4C8D1901D4A71E337BBE9637D0FED3312E746C39AB2597E96827AC48D9E5ADC41B0249440AACF170E8125B25C7213A19FC4A2A222F100A34DFBBDDB9A2752610CDC48523BF85A1FC21 +Plaintext: AC88EBB9E004EC808F550553227142A333618069E27026A5DF1C499486871DB20D408A38C0B047F5F20CFE25017D1747A42A6A2326B344A955 +Ciphertext: F0B0F9955F7E8049900F206CD38797AA8571A60249C5FBA7BE9923CA21DE6F1C56955D1889A3D44D618D3F4DEFE7A7E56BD667B49FDBCD0F2E +MAC: 66805F192D3EC213E8B97C48B270228B +Test: Encrypt +# +Key: E38C50E3157B460BCD148BCDEDD11D304B192FF8BECED2A01AC92397D58F56C2 +IV: 59DA763AEC2F5E785D33EDB0 +Header: +Plaintext: 6958E48CFED300169EBBC06251B20948B6B01023103495355A1DEB00B640146817744445492E41493A02E175D0AC22C453F3E23153877F4B003A +Ciphertext: B6166144868E41629C948A0D2F148468202083811465AD7217FD4FC8E096D178D6C2D6EA7AA85F3908CC9DE266AA284757EC191BE1EB8288F14D +MAC: D726D60F5FFF91A16E6ACE47531C0E60 +Test: Encrypt +# +Key: 1EAC7AE1862A71F7A881656337C0FFB0B36E15A694100A81746D9BE904691F8A +IV: 27123A81F0F4B3AFE7BE7FEC +Header: 92 +Plaintext: A97C3912C01BE76AD03C079645CF8558DE123BC99B8A5B27567917B30976A49433002F3F28D4F0AD5DF495F12AA23B1F9DECE75C25B0D2C16878 +Ciphertext: D6A1233B051D7C6D15DAEC32864F0620E5BD88EE47F06B3A33E7D6F2664F77EB134E9C21D95CE7BC01229DE8594A00D0596C30A166AD82DF4F0B +MAC: AE2F034B690507E72702A3E1F832B44A +Test: Encrypt +# +Key: 93E538BFBA51F8D7D191232BF78EFC4B4F959622A91E0344A4BA64806D30DBAD +IV: 68B439CDC1BCE8864C929488 +Header: 0BF8 +Plaintext: A0F93B58651F6AB83E7AAD83BEC9ACAA4AF5E466B1BE7AD373E78D5B244ECE66406A7909619DCAED41E0E365339C5E0BBE3DA98DAF17B6E62006 +Ciphertext: ED36201D6D2F3B9CB062895FC57A43D48E1E9242DB019AC4F6C2B5C73DD93367913B838752246102216C88BF2F2CDFEB88DA0EC84DB4DBCBE0EC +MAC: FB3D20DBD8757E7F51414AAE666C6FCF +Test: Encrypt +# +Key: F4AAE2A95AC712AF0CC3159F3EE6B1B555F004AD0BECC17BFB6C7890D81A357E +IV: 6D4BDC12AF9D1C3E639DDBB5 +Header: 6E844B +Plaintext: 301DD70019271737251885E401F3A4B90119B23C9B1D1A6CC16B7297AD19DDF01E299155A4615758F8FC5F904F8AF73EC20075DE46ED7DB63458 +Ciphertext: CCD8E712BB021E8CFD4A2EA2C9273FA61514266769AA56C6F1E532BB3FEBE990497DC5FCC5F4E330A4F0D4C28330B7AE3F27066680DCE4B6F8B9 +MAC: 53DCC66577AC283D148B6A830F11D9F3 +Test: Encrypt +# +Key: C738E0787583CBC695B5F01372A4AC59A0A243616BE24DC1CF007E878246EDAC +IV: 6E3C0954E0ABFD2B92B1D763 +Header: 682127B9 +Plaintext: CCE43C266EFB46F0E722A7F67B86B501C1E4DBB519D2205F7760FB101D97588E13B65E3265C25C76AFDA1C765B61FA41EB7A4AA3C99763458F32 +Ciphertext: D596C90E65E0DA3B0773F1480B2363D6FF9D8FFC12080BD82DCC3AE02E45FCDF1BAE4AD00479125B577CEC9E313C3E93D56A825FC7A015F8341A +MAC: D998F1A13C61A5A13DDCE3650FA18EFB +Test: Encrypt +# +Key: 1BBDA766681B31B58D1C6CCC0B381A812C4DC27D0EC9A16028DE3A7D8A2106F1 +IV: 7DFCE21D01C321813DF0A6B6 +Header: AAA031924B +Plaintext: 22734A43F33991BA70EEC9E151DC6E740A424C8623E86C934DD427CBE44D0F4E1F6CD922B68F5B2A526644B9C5986391C4CA6890B1810EDFD0A6 +Ciphertext: 6DC5664D91AB3DC904948F942109F256497A50939646348312D648355EF8A438ACC3C3BB694B6A749CD785AEE8F64C5AAFFA0C476B7C08BB0FFB +MAC: ABFB10E51070E60BB8F07031C2B44167 +Test: Encrypt +# +Key: F34BAD0047CF3D77F20A235CF8EDB61CE181454D66D34B08A61EB1862CC653AA +IV: D8BFE5117CA71F5D290781B8 +Header: 40EA8041725F +Plaintext: 4E66D800A6E32FE447107A0B5501DC8275C087527DB59B91F5119869D3C7B5C1DE326036B641DFD77BFCB568B5AD7FE3EC6015E7C6A443604003 +Ciphertext: 2B7C591F30F5B94FBF892B2DDBD032689B504699615305A43E92DF59B144158DB8FEDD7DC7A5E19077C5FB4A5890B816D14FC427F191484DFA18 +MAC: DD42DBDCC8FC18AA9C309F6EDC263BA9 +Test: Encrypt +# +Key: A789E496588E81D2B125391D681CB861BEEBD03ADFC6AB3D5DFD44D0CD6E678F +IV: BDE4E2F6A7D21CC003B3E5B7 +Header: CF322270E50309 +Plaintext: 4E743F33976FB7C08A9B84B31A81861585B86CB7F1EA5969F7EBB5A6641608CE4D8A2A984B7B7A11484934EE7CC9144CC8FCD46452F57D70AE7A +Ciphertext: 02C50513CB21D795561FADAD619CACD5727A7A0918978DD96E56AA5C64DE2E2527A0B877C591BC9D4954ACB3D70E250048F626B2C9B50F1F3E28 +MAC: AE1673C82B0BA4A8EBF036C0DBB73E0B +Test: Encrypt +# +Key: D8C6BDF4587EBC182396891B8F05C5FE1A066CB8ACAD6E7A154C316712535E65 +IV: 12F09A6231F91E6C80F93CA3 +Header: 381D7356D4909EF3 +Plaintext: FDA73AF4C5D5ECB65F7BF99D380908ACA942FAF724849EC1C52909AEEC4E75A4AEA2EE4E4D0983BD8CCB6EEC68A65E068FA79C82672453B7BBCB +Ciphertext: E81997AA63FF20B14D764B0FDB77730B6F66A3A6EF15E2CBEA6F97A1A6A5800D4478B5A80CAFF7FECF5363D82B0D56CDA64EECBA3B55DF93F55C +MAC: B85C83FB3B0764909A55E4756DE1239C +Test: Encrypt +# +Key: 71501AA591787DC4DF511C067B628C3E1C5CF5569D878A0E722FF56CC715E73A +IV: B2318E688DCE4F53A2AB67E9 +Header: 9FA055ABAE78F0FC67 +Plaintext: 399020055EE38AC16E7CFA66D7A0A5FE1B4B0DABF69B40FE878193731D4F6783A320567D0F6796E31F7B3BB99D6C9478CB19606193843814473B +Ciphertext: 9372C8124646028E238EE356037367C5B21371B6071F4ABB8AD339ACD621664F467F4E0E53C5D36926305E7BE5804DAD06031A1AB280239A8758 +MAC: 7F0F3C1DE6E6A983A57A75578BD7E8EE +Test: Encrypt +# +Key: 3A14F2AACE099C9FB39B299C9B05982E22B1B8AA6DDFCE5B3C0E0B1DC6A02622 +IV: BFCBA60DAA865745A5488220 +Header: A33532B87BBA94095F1E +Plaintext: 0511247110D990F3A2014F7420553336B760F7937A195F73476625EF160E794BB4139F089C2877D530EA20C8AC38CBBAEE06480FE42FEE28B5B1 +Ciphertext: D7C290FD1DFD535BC850DEFCA4F63BB7A1F9115C16D44D7A0088C4237A85246FD98576CAE4A757206434B66A54D9DB74C989E20931369B4460B0 +MAC: 5AE380C17B8EBA3BE52C49A05D445174 +Test: Encrypt +# +Key: 5CB4A108669CB072DE86DF598ACE450806C61DDD943AE5E601316AAD79683F8F +IV: 0D860B4EA47D42E60811CE01 +Header: C8EF4198F470331E1EB8E3 +Plaintext: A432F4BA369FA18C431DAFEFB2DCA32D213862182B88507D3C965F1BBAE6EC0258503ABCC755FBB17076A254F9E00D43F640EFEFE34556A0CB97 +Ciphertext: CE1C97B28C8373D1B9795EF94EB8A225ECD6A5E78487DDC74102F1518964F7077E8CEFC5B07D7407E5505270B97DA27E614A084C76136DA0D476 +MAC: C8C024BF0CCBFDA4F712F22897BEE3E0 +Test: Encrypt +# +Key: 036B873B1B843A0930C7287B5451BE4EF62461B66839BB70F76C6C565C2466AB +IV: 30A3487D6FAD3437BEBFA0A3 +Header: 62713C7A13FDD29047BE2996 +Plaintext: 4B2AD165E7D56CBE77CED43DB4CE132FFDA043C5882834D8DC5537FC5988B0FDDBC6B719226CC74ACB72C332F574FB40651E3F430A32C67AF2B5 +Ciphertext: 95686DB23AFDB82614736ADDBFAF4CFB8C3CFB440C315C3E66370897CB19253F1627E0D3D6E373F38DE62335389202089A5880D6C213E62E66DA +MAC: 30BDA5C741DE9278F1DF137061E2B898 +Test: Encrypt +# +Key: 8BD409E324BE85AFFBFB70504699FBA9BC3A04F343C77A067617FEEFAB90460E +IV: 32661F89496BBBD6EEB37D71 +Header: 85A756F76F054F163D7957AD9B +Plaintext: 864275A9ABC1F9C84DC629DCC21E697D1B061C995FAC0311540D70708DE4F2816A57469276947092EE1D99DE99037333A4F4ACF1CB593268C3AB +Ciphertext: 648F270BBC8892E6827B9DCD0A97A9D4E4E9B36CAFC38494A0C532C44F116955C9B7847257E51D6BAF30344988325935F85D9EFE1EC19CF3AB84 +MAC: 5623D1F74DF9474B4E39CAFDDFF85087 +Test: Encrypt +# +Key: 1DC69723FD36F4A2BAF0B97213F413A7FAACD0B941135CA0DF181F02ED64225B +IV: 5FAC01C2F4626C02358327AE +Header: C6795234E50BA37C94C64E802227 +Plaintext: F6DEB723A1554F3CDC2EDCB631E8CA7CC2D20EA57FCB04E296B7C3F0E4F43F995AD8F16FAD06BE660E6C4D978CDDB488D37A2FA3F93C3B5EABAD +Ciphertext: 68C05EA0F512030483C0DBD17FC3EFD27777AB90802DEAB4492B038B78CAF110F7BA2E22185635A7E76387D2B4781050F89E885984445BE1ACDA +MAC: E3B940412228AA65D8A463E9E1191205 +Test: Encrypt +# +Key: 33D1DE77A85E37CC41DE2162857A8F287235E5B1B137D3602E398BAF2AA817C1 +IV: BC6FFD598ECECC01B40F891D +Header: FEA030576BEA49148D34F37FEBF8C7 +Plaintext: 67C65FBF3276795CC7573D52AFC62DD841131CD1FD4B68E660EDA1C2E9E213357773CE37C6AAA54F79D2CE54D0EEEE07FCA4D0C8CB8258BDE032 +Ciphertext: 00D428431049C84679B4EBD1D8780FE0D712D4AD0D163B4EC98C6FBE577F59EB8AFAF3421283FCBE64063EE7AB36DAA52D1FAF72E19355C07C86 +MAC: 0A2194581641646DD150F355B34969B4 +Test: Encrypt +# +Key: 64CCC7C23BD777BB229B1A340B77F659A7A42D9D4BEFBD4D255460162B1E6EF0 +IV: 6AE2C8FA7C933CF8DB3388BE +Header: 597C24F6EA341D9BD2A7AA1EE927564C +Plaintext: 47465354636FA2F960122C3E85C8FDDF5AC4EA0915987B13C9354AA45DD769A8A9556A787DCE6F3B3AC9D35461C550B7BB4518D39DE97D68EC1B +Ciphertext: 13693AAFB2981A50F435A366DD6CED13AEA8EA9BE0571520C5E9229380BD5DEEFEC1826BC576E82CBE142DFE7A0E4BD32970F92274060F30E3D8 +MAC: A0A1CE516D7A058A161A20527E73D633 +Test: Encrypt +# +Key: 70737845524857380CD44A56272404088901A17801F704577BE0A4874D537AA2 +IV: CD4260B874FB69589731BBCA +Header: C633F4E9D6FE9AA81229D58A33B7B314B69D5DA55238C7AC15D58EB27FD8302656D7B891B8E1D48F4F3B7C0B7F +Plaintext: 279898957F960CDC353C2DEE089D9BF0388039D889ABF86AC37D77893F7A91F30AC2A1A85C3F42357D3ABB338184F4F51F4F9E6DEAF37574929F +Ciphertext: 475626F96825E0C510D8ACFDD7C0C8C612EBF3A51272AEFD64D2CCD75A12B6C7AF05100B1E0E1247EE5569197FDBE83AEECA7ED17646E3BAA5F5 +MAC: 2127B142E5D6469E5B1FDC5354EE64FC +Test: Encrypt +# +Key: 784DCA4FA72D2149F94DAD8AA1D3BCB8B9FB58DAAF587E45C4802A0AAE6F7DD9 +IV: A907E61883E189CC8E6CAB1C +Header: 14534C42CF7D6943B548B6514DBC9094F719F5751E014C6D6A036508E06AE0BCD13AD074B71B907B5A5892D3829AB9CB12436BAA7223B4862EF9A289F7006C809513BF1D73466A70 +Plaintext: 74C5E92B25F0BC871BEB875E6BDFD9FBD856335D04A77C9BB8F68216A33BDA62261B33FB8D7F3E62F33DBEF1A7F6CC9EBA7E71C243D73DC1E0B6 +Ciphertext: 719CCF61DD0ED572016B9257E73C344A4E3B83119672589C9B7ECD9F8B888320181BA353502A4CECBBCF26A278E8CFBFF227AA343639203D1528 +MAC: 3B9467659B24A1F2EAC37B37A8341836 +Test: Encrypt +# +Key: 837CA65004C2959D14ABB483CB1B327C438973B8236673A9C37D2A9E0EC48626 +IV: 1149E85B0B199FF17848421A +Header: 7C52928FDB79C662A72046D03BC7649D0909E9F54D1140F56252E0E8835DB6FCFD167544428DE1C157AB8F3898327F20CF161CD1327044334D408F2F432E754129748D9942F14AA8A09DB9 +Plaintext: 5C8B0DFFA5A410A940AA2C5F340E0B8BA431C2D17641D68D6F09F2913189E9311115178AB2DC03EB77CDCD1B618D71563529268B3F4577D66108 +Ciphertext: DAFA3EAC9DC93E4D175A933244C090AD6CDF401A9837FD445CC5C74E2A370B736F1238DF48794295021AFC1E7C5AF6FFACCE95788B815456FB53 +MAC: DD347BE0C4B586A9687D3FD136A26E4B +Test: Encrypt +# +Key: 9BACBB1C2AA3C65C8BE25B989FB4682C86BEC9F0214778500AB6643AE0DB0A06 +IV: 46764CACE0A6A16FC7D5133E +Header: 82E34E3B8D0F858D87121F3E884DEC20A2DBE5862BA19A3DAE2C61341630A60D4FB01EE9FBE68B01FAF4B2F6936A202C59ADAD624DA39A4D12F40EE7893AC122DDEB11F35A6858C8D28C22B699B43F79461716823F4BFB5CFF8292D8D30F1710995BEAF549E816 +Plaintext: 4084DD1A6F97B92EFB263A020E3B19F8A3BB001CD3B3FD7A1A4BC110A0CB567E4480E72DB019794638DF30477CF5DD33DAB72048ED0522120ABB +Ciphertext: 37B2EBA5CB3DE801E7B00C1C23843D552DC8E3B08758D1BC98F4814AC0432D719E3260F47332B2A98BC8CB08EA3E84262D495FC33ECDB3A57C35 +MAC: 6D93AF36BA1739F5D623F8BCF7C12935 +Test: Encrypt +# +Key: 058F1CECD40961D89E8DF1644091D2BD1CEC8BF6522CC3A5D26CAD58090FB11E +IV: 168C42C2C477E211B92D8C19 +Header: 4317B0690D57C013A5F15D361EE28698FBBD66438CF880DE4F7122F8398B4F0AEEDAD48C008C52A7CE064C9BC7E8A466B1DB816EACD1A7800424B93A1F74E33E094C375D8DCC4F9B4B63487D8CEA4ACEDE927EF3FEC3ED3EB37FD00FD500FE78C265BA9C742245DA +Plaintext: BB264B1371DFD45C4F806E7878CE3005B8978C25FCCE2E28F824CFBCE94585CA3D73132EFEF50AD27736175F5647A62DD9CCB956268CF289E285 +Ciphertext: A5E304915753EC4DE9E54B83AB58026B8C09165831B3A0541D454CF63E6A249C3D4C5384B55F6270490CFFEF516A41D776CC47A39BB68C27DA17 +MAC: CD382D61F3EE5624A62027ABED98A82E +Test: Encrypt +# +Key: A45166F71063567C4513854AC0CB1CB3597F2C8C5A8DB569550664BE9991B67D +IV: 253D3671C68B78AA9DE49EA6 +Header: CBC40705D02DA40D041A2C94E9E97C592C5715619A7732AC84DBB2C9985F20A670D9552A882A3CDEE72F1694D51133A96DDFE97EB637A2DC9D25CE9EA9BCB1C6EF0BCCA1C753A84181D6A953F1A6A851BC0C24CDCBC5729680E28901A7B8971795A98AB6F9ED75ED8DB41882 +Plaintext: 1CE21C30497A21A1826BF46A5491F1D7B4A29D5E3103289FA424C62B99C201002F6921AD71E98C9C80B7F2B363A63325C08ADBA42FF853F34793 +Ciphertext: 78F69750FF643F39E1CF0F030164D41D82AC136CC175D552034E75F1754583A4D2952D91DB22DCB230A2D23DBD7BE5CD209F54C187E425E01C55 +MAC: AAF4091D22AA41CF79C6116166803B5B +Test: Encrypt +# +Key: FFB6BE8A37C5B3044A4C92CCE777A7015E0DE1DEFDAA67DBEBF4C2423E6A2EFB +IV: 6AA4F0905A5C5DC713F56CC4 +Header: 449ABDDA92CC28C4E625C7432DFB5E159A3780B0DA92BD7FA11158CCDF8DD26031649F407966D4FF2A1CF5CFE95C7DAE7E8D5F30E8EB6071B855F7AAB185445E0F237E5E0B559A64E5A6592130135BC346EFD8A45E0E34E4BD39847F226784F3782A2A008EB35A33CDF40D856CECFD151F6EC047 +Plaintext: 899B930A1C1A66626646E31FE24818C8E25E430D0EE8320DEA23581AB96350B651987DF8D5CA1229D8A6CA5E188FDC7AE0DDE0E27CFD14E7374B +Ciphertext: 9B2375F003CCE0FBDFB8319031939FCD6E1601337B1B8BDEBEC8F1303D8DFE555EB8C011E55BEDD43EDAACD00052A9544D23E6E8DF0DEE15B581 +MAC: 33B6D9E52A1DAB146201020D74893BB5 +Test: Encrypt +# +Key: 5E6583D5698D34FA8B6EF60E6D99DEB2B52857A157217BEDD7A7E307EF954E5D +IV: 3A31374E254C17F97FFB3022 +Header: 2FAF4D95E2B922039231F36071560606DE3E02FD4969BD618DF04EC3E9A999490B87D30FB4B1539B7E4883882EAC70B1D4394EDDC76286DF0905511FF773023C40892E77827633993F723AC536BA367E80FA7E01EDE47C1ADEC82FA2637FB8812CE8F1B42977ED523E24708C86ACED668A31F5DD2097508C5137CA7C45B922 +Plaintext: B48A46C98497AE4253B1A52C2521EAB3C4EC04DBCFB56E71F43BB3364872B4D87EB1CBED226D55C812C4B440774855A3EE603F393373099F672F +Ciphertext: 804D5AD8A583515E64AA6DFA94D195521E3D178B7758F4093D91CE9E53E9D5A81AEC97ACFE2D044154A78049F5ABD337CE3D4B9A981727240E7F +MAC: F07F4CF6D324110031E00C93EA7BD5CD +Test: Encrypt +# +Key: 89397FC5FE9C50F1654130C6D9F5813FBF2BFB5C5562CE06983E99224A11D014 +IV: 40BFBC8CD009044477B38D63 +Header: +Plaintext: 8B2EE1AD7FC280359456440029BBF770D95509195647B46DCCE167C7340DE0C74C09A4C8E2092010C9D5FBF410C735331A55C72928BACB5CB15504D948F1A7104A88E5242D6C10CC237AC153145A65945BA3B2C5EA038F07D36CD6F39A0E118CCD08F00C83EB847E457421F9191C10C462A2A0B3CA87236290 +Ciphertext: 9819D7A832EC102BC7E75042BF1E026D6B26A745826A7DA414FC2B8E93A30E3C6A12609483F83670990CA40A7F9813B3F4A4BD239A404C83B4778707EAC8B9016BEF6C7EAAE57C32D22B9E77B64A463C8956F64ECF6224557DE0A43C69B37E8171F08984FD7399BEF5E3A8D0AFD0C8FF7F8061E309F854124E +MAC: 24B7FD6ACC9C5B7250D9E7FF61BEDECC +Test: Encrypt +# +Key: ADC7D45636754827F3EDA412D089FA668AD15ACD0FB711D99D0E19165869FC55 +IV: 0DD4505FA62E1546DAEBBB46 +Header: 83 +Plaintext: 41553111C2DE34FCFC2D4C9D423FDDECD45AB678CBE1106A57C186AE92A2DC30FD4DE755BE3EBC439F9065BAC079AF32FD570181E6D3B637C5638B4169FB9D4E6FF42BEBD978E525401466CC0E139472CAA5E221B1197D484FC78323F25D9DD1796F17C6479246442AC7B125E8FFE3F0CE9DA9262FF86B78D0 +Ciphertext: BF9E7AD67486BF633287BCC10417270D6316BBFA81CB3A48392F7C8E4FDF0E9C8CC01B0379B40A0B9217048E8E98FFD90A49FFF097391D832D7A28074343F91C4E9778B3F7FC384682DEDFAF7421AB2B7B5265BB5224C2D498D63DC89F9ABBEFAFFE8B6A2D2D0839C45EEFD3CCB92386B3F475115209EC6B83 +MAC: 08EF64A06DB39612E7659E80DA60B723 +Test: Encrypt +# +Key: C2D9459010E474AC4328A45FC09D61A01C5D1D29AB8130C34898C01CD705AC66 +IV: 1147E64571E750E30FC71EBF +Header: E80F +Plaintext: D600D4448738F7B1EF7D892A54D7A49F5A6DAF15941529CCCB66BBD7541A5ADCF0910F19A1ABB1E72834237C418B5516B191DDC56905A488E9D22EA9E9922BCF7A3FBA2975CD593647FA6BDF0FF56C5C7ED8DADBE22149E785A9B59D34694A65F2519BD2A2A5317856E58769D4C8D984113C217B473CD656BD +Ciphertext: 4F8D695A6B6907124338A7A0E769A891E9B1FE8F775BFE9E4F3E0BCCEC02CE4FE470575775816C991103A3D6F3A22480FE8879EA29EEBC4AC9F2979A5CEF7B65682CFE0E847B17ABD348C2F26AD6B3347493B1FA0529C8312C72BF96C77ECE3632FBA575952FC22873F14DCAF1A781372A9B8F8BF062907739 +MAC: 9432036A3ACF6B8944A37A452B0275FA +Test: Encrypt +# +Key: C7B4E6F35D0976AFD459932E6B659A335B5F6E8CB76C55E54EB24038B414A3FE +IV: 745A3B18AB36E9EDAFAEC378 +Header: 29CA4B +Plaintext: 9C68A4450672811399F8E1A5E782128A2738F38C5ED26DA0BD8BD041704213B2046BDEAD4B36353CC4A4886957407418F32D3C2CFBA3B4FAB2D1640EA501BAC6000102DBF4D53E4E4EA7CEC89FDE8B141068943919741FED2B64BF9EDE5D693C075F77737F23F0E08632C2F64EF71C483DA94EB6DA2106E69E +Ciphertext: 2FAE00562C8C00824AE5E8C606013FBD89E6C61A18FBDFA3389A17DC3A08B215A6E52FDBD0B178937F1879574FE9016C185CDC6C325C53BF99B1C86742D659314465E25B2A746F46410A062A28A7051A3ECABD794226B24F76D4502CDC09B444DA40401813C7A289CADBBB0E1F037B51AC8D83A231AA434DE5 +MAC: 184124E5E471E839CD6CF00D9B5B55B8 +Test: Encrypt +# +Key: 85928BB36F2B9672FF7154B635E2A9E2B584AD4387CF77B99C4CCF4F3A71F9B0 +IV: 27A4A4E55FFB81408C2249B4 +Header: 57289710 +Plaintext: 48EAE51B5C4CDF445208402B00DE7DB30EA9A321938E384C399757602F8B852D9218A3767549683B7F517F881019EBF0FDD85102FB798B9F97DADB0B83C32D351C7760C4D3C445E86104BAD9A567FD4496E377C957D50F3E084CB4DB04A51AC389B8D3C7CE0FFEE403F3050B9F4E67AF857C8F27FD72D55506 +Ciphertext: 46C393647BD3E6FFF632907054FBAF5A424E0C7EBAAEC00B493BE2C78578EDED253EE6091608E4378A3B9BA2E683B6757A24B42844C7B380690545DCD077768A6168880DD5FA67867B951EA3B7A1826D3A9AB403AC1B4F6970F8B9EBB4B7EBFE36EAC11B0798CC053468F596AF3621A2C25CAE4CDE903CF1A0 +MAC: A2E22FB7C7C4117F1ABBCFE1964320B4 +Test: Encrypt +# +Key: 7FAA4C654B1186D9DEC34CC6FA9B2B2984F5A2CDA38DA40E3DFE7055BEF11C65 +IV: B6576CD3687C7BF28505F21A +Header: 1AE55DB88E +Plaintext: 59C2E93C7495A79FBCF17E1AF01D791C5B8B9803CD1131BE839959B3F484B5352E528C5EED13ED805214F8EF7FE38FF00499E8F36F05D064343A4C45400EB4AA3A0A2A095AA8A9B0647DEDA5000312B9E3CC2AD785E0392AAA2AFF3B7C4E6FD93D8CA90E47242DCDFEBB071E5AC21119DAF79F4FE0F3AE742E +Ciphertext: EAF6CB821C10D2143C418CCA33D3FB7C7CA37B752D7CA3F05B16F901804521397D1DECAEAAF4E3BF86F7CF3F1F14130332E6C5A3F78B3CCB76E1A7BFBAB8F3DD446B0C27F47E6C44513C884DA3D23908782D9E46463D266ED77E7F880E16A6A9672D4F2C304F009FE0C1767CA3DC3CBAEFE2CA32AF725F9330 +MAC: 370DADDDF70BB895C55EE2A6906250FB +Test: Encrypt +# +Key: 59A1E54E137E7D06764C2D018EF9F8F76A1C7F39ABD154B356205E57274C18B4 +IV: A2EDF377ADB428BE1A320A74 +Header: 28D9962E471A +Plaintext: D3FD9511FE63470765EA952396503447F2B0DC695EF46C81F57CD0D2B6EA9AA154B8D39D9091EC97696571602874C3E211F569444748966CA3A6AD93C535F9D3771463C40D08CCD6E7B77308FD1432710D942728D56CF6602396CAB583805F026BA05E53C9E2F058E6EDC65DBF93463774EEB5D0D8BD2DEA55 +Ciphertext: 8DD27D22A9E22CB2F74D29EDF4B29B298B59C40EBB1968C2FAA5B73214A88FC1001927CEDABEFFE1865C0428B2E3C333AA47DFE255B23EA2AC5DE72DECA801080934D3222D85376FEF524325D560880379A2A6CEE3CEBA937DE3DF58F5F1A2C486376C2E4F997639ACEA54A0327BB963E1C91C995247DDD919 +MAC: E7DDA2BC8561A2F212646E028C6C7CAB +Test: Encrypt +# +Key: 57319C1DC96A42A7772865EEA6D2508BD58254B1BEDBF248F7D6103626D64B35 +IV: C7EE9001AC40BC87D6E9BF97 +Header: 01ABBC3AF02B9D +Plaintext: A7F34CF46AD8677EAA1277486ABA350F8F7C3B538FE3CCDD7AAD2BBAF97579B2E5855D0994D18EBAC48DEB47493FE4A2ABD8CFE4A71EB1FE716AB9025BE8B427F18225191136DB94AA64893026F61A0656E25A098418D459AD37C1764044633C02F230A81995A54101A37D1F2046EBA1E20FA77FBAA076F5B3 +Ciphertext: 046B525B9F55F9BC24FBA03D3D5ACC7AD46726D16145DC3BA29F0C3AE63B44205F8E3FF7667FF02609B4C3EFD8B1B45AE7A8FE0F26FD3FC68F3C609558A5FD0A6E989519AD05CF4C83232228EC4E8A9CC03608AFBA9C4663CB8A74237FA653EA3FC64D821339F836C2E9370522DF1B4630357D9FB294790536 +MAC: 5F23328814EF3F8104474735A1BDD6D8 +Test: Encrypt +# +Key: CE207178BE2B43623C1E007EF89C424F9728A676BB3C547D25BD9C8FE410C213 +IV: 4EC4741CC72AB55F47B46550 +Header: 05DEE2F913F1A4B4 +Plaintext: 985DCD06A982A2A7CF3E897305ABCFE8B1A1935E39437BC8F91E687C1DB8EC1CD92757BBCEB466A28F7A928A6AE45CD8AF2DA2F7DDC603F496EB6F06525E2CDDE7219DD11B569095D2CCBB69DADAC8A5F63843F3BCE22360DE8F9CC3F014C14F771D3BD5CAA0BF17D615FAB7018C48D9C0C91131181AB2983D +Ciphertext: 843C4D8D96CA6EB7C928E0A1BEC95E52D8829F993ED7809F4ED79E5C0A6ACF764F1B593EAADC841425545259CA8B88121D01D235BF2AA8C2337D6981144FF8C4BEDD299E65A6015F67672CD5862D9D2E6B972C14EE61BC666EF342B4E3EC775B1CA6182BD27283F43F500739304261EB2E98EC9F80C62018E8 +MAC: 6A346771236E3ABDCFE6829A4DA17039 +Test: Encrypt +# +Key: B9701031FD616CE0FC10029C4BA910B1D54BCC38B538C885A7A1082C54C87E31 +IV: 24D8F0E2DE0B1BB07449E3DC +Header: FF67E91C6F513423EB +Plaintext: FA7ACAF414DA7B44504969425A3A104B9887096431E80AC9A36B168FDC39656D4D132447026540994E387CEEAA16EE30FC3D044E220583B25772EE959EDEE0EC42B8222A24DD701D30DACFCBA9A9DD8DD26CB09ADBE549EDD45DCE617214445C1812851B710C4152D3EB3A9C88ED91D510B6AC8F37D310A20A +Ciphertext: 57E02130F398D5ADB4FC2BCFA3354EFF482401A96CD3AA1D596A831CD0B6A9C41094C7C5B1C678F70686CA314BE81CC97F4670F4439C937E816F4369371DCA342593EF6419078F9FBC986C90D8EC2C4B664B2342C07D31F1F0F40CFF3E06F2A835914E7FC833C089E6A15A707FEEE70F8E27F22C242FF2D655 +MAC: 1AC8FB530DC34DA69AB65CB08B71FB1B +Test: Encrypt +# +Key: 02621C58ABE762FAE5073872572C3430292ABB7D75A7D52D798A7B3B8F8887F7 +IV: 05EC89002BB694B5A90A93CF +Header: 4752CB7A05529EEC21B6 +Plaintext: B3CD0E4150687195427AF75A06CD819C0823EFBFB0D2668D1F28C8BEBBF96C37B9C5ED88A5DC15B5BE36C34750A01D59EA3F174152F30871C8444CF56D0528E37B2503A60EBE0151B537FAC1F99B62B7DC63C3CBB3A1402162DC2CDEAABFD8E4E5552939EAFD19C4A449778AB04BD74755087F8472CC95856E +Ciphertext: 13968960605D154FFEE31D99C4B2CC0433706F00C471FA51D4E150FBB48EE7FF9A6A5A71A279EB5B8A7B2DBBB2CFC8EA422EF5A7EFE7653FCB82D96AFCB33FB4E42BEA51338DA6AEF5671F6692E73D017D9433505779458E8C867F3160A1D611B6D7713B8A8CBACF8C579B7CF528EA2A8C8E769CF8EAC5E856 +MAC: E8A946A50D978F939D2EE9F10F463B23 +Test: Encrypt +# +Key: B2D21E115F2AEDEDD485F75BCAACC3DE72D7FD5E21EAB61B49F4A14CD50A2960 +IV: 48BD6E0665117AB69F8B2137 +Header: 384C9EC19D3E5EFF4F590A +Plaintext: 24F7BBC23852060A9CF45E4179017E2252CEF5FE31E2802F5AB1192629B6A5265275D6FF00D8FD85C9640CD41CC95476D0F2BF42978BC130FADABB12B025F4835F01C7ED9EB5EF140A5035B82BA73EA2B0AE03F925D2710CB450B31C26943ECA55F9DAB7128A2651207A5141BB9A9ECDCD2D59B3213C9C27B9 +Ciphertext: F3289BD0C99E34BD8FA2DEF27A27DA562849E1ED9FAAEE119A4BB0DEEB46E1000C4840DCD9356569E071C7D3A00A08B9AD6826CB0BDB11E9514A60282D64175B304FEA61F70B27089BD5AFBFCE49048D805DB24ABBCD573026C29D749BA906040DD59EEAFED24D37FC7ADB3B738B94BA4BB77E6FA0227FE2C8 +MAC: 74AA33DA3B659748747FF4080E26133E +Test: Encrypt +# +Key: 74988A7AA6F76D7D50223BA575BAD7EC570F05EA0C2C0E97A215DF286F47F7D5 +IV: E3B37283455286B465FB12AE +Header: 4C5916833F8FCB950C961B3F +Plaintext: 6FF60111F5350806CE16A08EC0BF17F516148F436BE6AB5A64C65972E68AC2B5860FC69988098A8645663ACB578B129207CAD31DA843910ECE8B1FF98DAEF2554601EED1D62DA4845AC330D7A9E644CED338B1164E41E0631601E493259F4337A44469B239FCD954E15F86A6EEE2197C1C9BF43E6F84E76322 +Ciphertext: EEFB792FFE5DBC2820C7928C97102E4EF476256C9AB68847B3889C7BAB0EEA61DBB52566D3047495CBE5115C11557A281A90E2F6229223C63FBCBABA48F83E9949749EF83CD014EBD04713EDC0AB7B5EAEB70753FD8630E57EF7E8202DC2CCDE9ED6C16503424F26434C3AC1187358A35108756F010A6E6A91 +MAC: 6F8833BB96EC1452FE2BE6F2B468D4F2 +Test: Encrypt +# +Key: D2D2B156F80E382D95C3875FE944F47F23751A27E7EAD72C58BB347BAC037881 +IV: ADF25EBEFCE5DDD8B3666832 +Header: C15CBBF33386ECE8EAA83E7F6A +Plaintext: 06E88347D3AFBBF3D0F3DFA69E2E9C1EC8A7D2EE39A373C5FB90A817F2C6EB154EABB67E2034379315A18F276F2584907735BBCBE7C3620709332D7821380BA524E05DA89D92A4B8C5CF7DFC47899653829F96B3997941FF6CA968D8B31D60BB9DF07108E99D92215979B77E9FFF4DAD3DCB8E597686E09D2D +Ciphertext: F0AAA6CAEB020EB240B1F8F46F2FA646B32339D5BBF079772662A3CBF8830737E83A09993DD8638F158209E7B7D754CCD1D8B15A70E24B406792CC9FB38D98BFFE216C01DBD00D8AE1B590E43C711FFE3AAB1D6BECEFFEB8D25EF14F69C3A2283425190C1367612F70657823524B525921214688E2A177EFFC +MAC: 5B070731AAEFF9F58D52775671BA07DF +Test: Encrypt +# +Key: 6CFD0E2C8D4F7E3F8FEE46FACCABC2438226373D6B434DCDD3EC9EF5D37DFDB1 +IV: 70804BA4F55D6157826B4372 +Header: 2038ACF21398E1B5D298263FF3C6 +Plaintext: 2D2BFED758DDCF74937F79A8119C16B0EF96D5152E76DC432FF465DFF992DCA37459A780CE7E05951F4DB53578882154C524EEE3B7A6CA32056A072EF1630CD10ACF10FECFD964A772B777DA07D1CC8EC039B8171AEC7259B101513ED516095487CB9B52D7444637F2D98790CC556A93A1DAE5687476288AA0 +Ciphertext: A575C8093811F8D2FD69F50640E0DF4D2480A1FB41E892E86FCF4E50845F5BD9B1666E79BA7C2F4870E223B025DF959FC04C3DF4A452B44AA845B14D942D07A374DA9316B8E7E5D4AB983ABFF8786C8BF0CCFF84A10EFF0FF8E2944FEFF2062F94B735498E7067D9862C9959FBC18E52B2AE7139D3C1E2C0F8 +MAC: E280EFEC1766DA2D026F35252048E7E4 +Test: Encrypt +# +Key: 9E5B5D3D7FA51DEE166F6A01CB8A4C729858BB9036D3B8379F15530C969594D8 +IV: 9034EC0F54446D59F8FEFA74 +Header: C159980622DD15E7D4B3378D61CF4C +Plaintext: 9C792C3DA7849F418CEE0BE5286B9FBDBF9260B11EFB20001B22D328B0424EFD303858363096F80D26CB89E51F18ADF234E93690ECCE46789D5EFD5D8A5552B1DFF8B3F11B507768FA25DCD135A3F3FA0175FF768ECEA160D4B8C5ABF629ECE08B77B3D14BBC0CCA3420FA451E88395F148D2B5DE092F3FD80 +Ciphertext: C2D2D21BD1408586337736FB1E6E65723D3D1BD55C4BAB06D8CACE2B7A0CE1F8DA0A424E2CDC64E6F0A8DF689A95852866C117E346A7F4E2EDE9160A7B35428A027994A9FA50C1B9322980820183E9C5808C6900D84EEC25ECA6BBAFB40617A95F567D05F2CAC448E5BBC70A85C472E227DB48AFCB0109379B +MAC: 6C1E49ABFD5B5EA357949FF2B682B1E6 +Test: Encrypt +# +Key: 07C219E5527FF3AC235BB8729D58AD8AC7ECCA48A64EDD7C2DD5DD6641DF2705 +IV: E6026931F833E6924D73A444 +Header: 2A4771E3574E610FC8B17EC5D4D46D03 +Plaintext: 84C0DB93A72AD6DEDA063959F36B87EFBA9FBBCC02972480F426FAA880FBB552F2F3C9C1012372A0DF7513D154F9BE740FCFC422C1988804C0080AED6970EEDD13091A68FDC7D669DDA2E65286C5F7199F81D65B26E783864C0F027428AC23DF08B6E59CE975DFB5B45DD7F89FA4D7BE26570EA871C4F328AF +Ciphertext: B7EDBCE1D02F21B8A73F8AAF14EFEEF9CB06F73079186257F1401DF5EAF7C98EA6273BA0DC35BC7D712C4978C89749E98D33543EC87254E989404B2520F3702DF4B04074DCDDD51D6B722956D91231CA97343614B190F8122DB7F2D0F8847EC2444BF3ABEF2DBA3904C253B5ACF2B07A97BCC490961D21B4E1 +MAC: 589A0BC6AD4E0C568A4673F171AA5630 +Test: Encrypt +# +Key: 97605EFFF0BE8B217876B4A00BF5559A2FB219E2F98B6460223D36FAD1B9C61B +IV: 913FF2B15DBE7EA995441BEC +Header: 9499C6EE4B15453C41DD4D7B773A2C2A1715926E78E1 +Plaintext: 2816F5B2343DEBE4C6D88C588A52761395DA6BA913FB4E8ABD42AF7B35F71F4FF0C02C30235F22AB026D46768E94B1669103B336E44E8C1CFFF25C36DE553C94FA785C3A4EE6D28032E75B92E0E87044706CE61106A5B9C8F414F81550CB51B75CED5D362962D888BCE7A2975A204772D2CD200A715BE2067F +Ciphertext: 1ADC22D6F73168D6C7B582062D6D4007676FF9F84702B2A1FCA058F079178D5B0EB29801D69E2AA67BC4A46BB4D0DA3491F64203792A51DF8DCB3861268DDECE51CA5631AAB823AB345A0EC9FBEBCFC51F5D9EEB81F076F2E3E1195CBA26086AFA2E8913153BE3655CB8D5B286E7F2DD1CCD945E57F2BED2FC +MAC: D113891036DC325D800D830D432D9C54 +Test: Encrypt +# +Key: 4C0650F91B30593E2B0497A9F5AED7CFEF8278290532A66297094BDFBA2F1035 +IV: 0A4587C223E206772AE8CC3F +Header: E10840D5F6493DAFD42399E5934E3FABB5BC45A78C00BBA3B7B2B62332F96E +Plaintext: 4C01004E0AAF0313F3090C7D7CD43B03316B250E1FE4381669561086BA553C611DB710337DE911BC69ADA5E578CCF8506C3A8EBA0E2522BD72E2B538D4EC9F43508D9B402EDA5B5F2AC0EA3D4BF64F3178E756CCD6E7557A507C8678723F427E0699759C40AF27542027ABC54F79BAD60141089BA7A4C64C7A +Ciphertext: EBB39163C9D62290DE442BDA72CE7BF2952B0488FCBD49B8F535A76B2111A57AB90AB0A9B1A8669D8FF6A1B550D0FA3119B52BC0EF69C6965A140F5A918635CE220A7039570A6855E4815E45BF2C28FFB53E95390F6C938ECDFD3C2D0AF5C68A0EFF800AFF1DD3BF350BEFCFA5F7B826F70E3E3B631A82A0C1 +MAC: F4DA7E7BE080DC1B30281ED16A90710B +Test: Encrypt +# +Key: 015F8B67DC3560ABB4B05264F9D445FA5D0A607B32DDCD63C17404C3BCF08620 +IV: 2DD63C7276D7BDAA0230F4A7 +Header: E23A3580ECC1E039AAC68A12831C86D81FFFCBBCAB8591F5003FF46B5B5AE3F907ABFC +Plaintext: D3652FE65282EE42E75F27138DE1F031FBF6A5C5B9EF485868AD9B993B1CC2DF932FE31CABFA5AEB06E319256CF70C94C98F90C9517F721F039D417F2BE2A887B848088A58EE4A3D2BD47C68338437477593818C22826C5611CA566A7C9C703E4012AE595891FBCE59ED04C64FF6923B4853A0663C7112387D +Ciphertext: 5E6B10AFC971F72B17E0229FD93B0FC80C7A37DA3222C09E99C7469F58E47BB5F4265D73352DD881862B166DF581101CA7C281E252BC92BCEA33F14BEEB47BA171A00D8ECAE828588F645A880342C452F4A574318BBD62F0DE18D9CDC17CB7F242DE88571E859212014894C4427346E4D1EB8E54A2C17428DB +MAC: 65D6989E120EDAEAB0D48F0A8D04290C +Test: Encrypt +# +Key: F50CD02D5CE435C450DE464983FECC5A948B0D8960802572279E447D69616FB2 +IV: 47DE34AE8EA2E62A9BF74135 +Header: 0EC700F141B7FCBBD3A6BF54849DBC43C2435E32460B79AFD1291DED40E59AD8AC25F71F722921A897A9D285B87D30E9426EF26ED30AD132FC7C9B65263F7D +Plaintext: D321A64218DD71E832E2EE032573D0C7E21EDFF81BE30CC2146B68D15549066206C164C5FAFA918E9F7B23EC16A3778FF4352EB0542534D69E371F1A9A448E1CCF93FD834160098D1CE191BF3FABB37FFFC317A6ECBE70B653BA7053479F985D0BAE65AB7CEB1140E33B4212EF3A54EBE09A11BC2257F66FBD +Ciphertext: CDF7107945B3ED9C1EC8A7D85248F06936BD04ADB6EBDB3CB457501022105912A7731318DE9432AA7A37BEB4BC66B617C14E643145FC981664D0683AC8C79ED65C8130467A0B12028888F91C29CC5B17A657980A8D330F80D343E0AEAE6AA6D8D801C1431053E4985D1F6A7A7F300C0EF92957BB231535E716 +MAC: D19E7E63DEE26975829FE3C5126B0BF3 +Test: Encrypt +# +Key: D02F8907285B6D8652C6F180A0DCA80FB23A54FC30D24DFF44EFBF1C95CA8570 +IV: 28C0319FC5BDADF4651B3768 +Header: 83F1D75D0A103373A05788898B8B5745D026170F7C0B029FB0E68A5F7E4770FB662D05BFAFEB316DF0B2B442A2BBCD5C46112F5E14E0BE69AC575180E9F3A755DD6F53750D7BEDCCE0B4314D717BC0FC6C +Plaintext: 845FAE0B324C55413C5DEF33D0D73AFCBC500A49EDF2A990FC6AF6BD3446122599285647D9F86132670BC07B2E906EA70212B7BC92B49CBD7D99D67BEAF913B9AD9EB0D62872C422FD0591BAA186E87DADC4F0D4621BAE79BDBFBB5AB64602C600C286E795E48EFF0E9F6D7879413D2774EA2D0BCDF22E8421 +Ciphertext: C279353D4EE40F331E097FC471568CEFEDD575028579C4BC3705F33DAF92E57790BCC9A6171F62A2EA1B548AE02B59C0613BDC0ACAC26F33D134F122AC116343CADD0B913589D1CB38A0229C907575C8A4B9C9B496E12ECD54F69B5006BA7DA6AD1895715E25CF7EBDA81A57A4FC6D7F7018ED40C82F35FB8F +MAC: EC098F4E26E53EA98079F5C253A19E02 +Test: Encrypt +# +Key: 6E60E828DFF6A2E4E376694464DC34108B6822C1AFB70AE71DE6D9A49A983D34 +IV: 2873810E00F3A300608189B4 +Header: 29181DE9C9D2CB3A4A850F80F158CE3577CB009EA735D0764655B960F79C67C45459F87D39FBA7365D145967F62A956A338C2033B51C1D3B3C2FAD6253ADBC0B95B4C62A17AFA47C69E290C1D6F4F10A7AEDB5F998DFB2B49B091822C0980576BDB0 +Plaintext: 2F4D66A7C1C9DA335610A205717F01E6519972874E33C792F03592F9F09336EA7D203EAE2880FEAA7DDC7763F8F60EE4EB98CE7185160D7A899363603C00F9BFFA7F92100F07BDE08899F2DD6F800D481E77C9B4C840EAA8FCA00B86C329A444D7D277D3D7ADA734657444A2F119222CA2E8B5E6E8C2C29146 +Ciphertext: 6EDD76DADD548242CDE2FD36DAAF35A10AE1275316CD4B6B1E9EB0A7E1F6785C4B665EE0083965674DFACB6694D02772BD9D157EE3D59BAC858B4F2F9CD9C46D471991E02EBDFED4D60F6F25E945BF413FA779A091E797BB33F266EE5A354BB0176596D9458215404A95620B72548C4BE2B24658B65D582088 +MAC: E01EDA91F608C0E107EA1E7E13E62C2A +Test: Encrypt +# +Key: 782A4A7CBBAE15B07D44C7B5FA8E853B06DA79F0963869C03C75BD9D259C8B0A +IV: B3D176CD086C0169486FAD26 +Header: D57FE96B8D420CDE4FB81C3F7005F0148D8FD6769E03D85E510674BAC4D40E5E7279E0F99B64BD5BEBE8B7137A0E4C45574EF57A19A5A1A2440A804C51A2FFE61BB6E22E5C5FE6462547A61BC207F445B22C2C32A3EE62578E4C41CA2AF6E07E21788D3185C2F3B964F2F0096C7D234C0F442812 +Plaintext: 33E05A0C2444B2BBB68CC814F06A7B643A513797441DB658573AD4CFCD5B421468FB6917815FB0BA519E494B9F04B47026751BCC32903ABD5849EFB965BB092469FF05D8CC9D0894435E2BEA49C6D7D43B51B5A4387D2B224B4E589C31C0FC953DA648C9811415607DE51F190EB77649E80B2D72F816B9FF3D +Ciphertext: EEB923DBC1589534E3BBE363BAC4DA7FB7A66FAAB160BE6562267AD81F50E95310A5FEF9A5CA173E2CD638F4C806A081AFADE0CF02CB7C062204D54653D569585A561F1D4B2D36B559B8535B8DE9002080162F9A77444F3B870BB65103BFBEFB9F95E7368B4CABEC48B913940C6959965F829A860CB7AB7269 +MAC: D63B6D5D76FBA2737F6639A60AB53321 +Test: Encrypt +# +Key: B1F7A0A175D513CB1AC18C1CAC44F9852FA05973097F2EAAF4486BC7CEB1F9F2 +IV: 6373830F08BD430D277D128C +Header: +Plaintext: 185ED468F7929FA69803D0268A0418245B3D148799C32AAF25F95C699A12966B58E5DD5BA50ABCFCD61FCFA5F4FA902D203D196D272A2D82EFEAA8A18D4FFCB70AF705BB16DD24E6DC46EA4569ACBDD77C8719543FADDB2C4DE5C55F64B96D67A3BD3A857086EF26E96C17F767658F746548D68E13AFA4F17426171E74C36483B2 +Ciphertext: A300891D002518D60DCB3A2B5BCA35BCA3751C0EEB36119E71AEC87AD3B1B2D9CB9B6093FD0C3EB133566E4C1FB19C5FDC54EACD9AAFE03788F4A520572C32DC635455D8888C261E9DFA9B95C5322F0E8B836AB2253995CD52DB036F57F8F9EEF36900611C9DE40276CBF7850C0D56B9612758ACCF7354F998DCBDC056229EAFA5 +MAC: 4469AA57EFBB0D36925E7EECEBCFD71C +Test: Encrypt +# +Key: FFCA45AB25C3D258B4EBB96177DA1E00314A8DCC380FB9463A4AE421BCE5298F +IV: E6A31ED13FECF00A9DA26466 +Header: 27 +Plaintext: 70EBF387212012DFF54BCB7CDE1CC9B68E32BDF985DA3E7A1AC160A993707BCCE7BFB4C80D05B7F5B7605DD4BC6E8A86A2DCD377133C603387222A252571372DF7D4E1D1934EA7F28EF14519F89F639289DA01B9658702F4B80243C14D4BD345D989956906862B11B6E17EEAF7D72A2170CC9E239CC1D8D7A10E1FC76C6501ADFE +Ciphertext: 652E55F2E102420440A2CEBBF2C73980B714C17A57C7F33498F9C2DBF7EA8F2A3ACA3ED1C677E03D20ABDFF528A04B87E937B4B6D79917AA566A11CD02F0C7F0727BDD639AA030114EFA1928510D044BBDD8D12A02813B781CDED764AD8109F42F957394145F325E99A1AA32C7E0585B313C8C00ABDA7ACF24D4DBB5E7BBE64BC3 +MAC: DE38945FF5B8E9C63F886FA13AD477B0 +Test: Encrypt +# +Key: 277B1BC42E97C874A1F1225650D59538113F813F93DB00291CA90B3D5257B35E +IV: 2B03C97EB05295E244185D96 +Header: 4EE4 +Plaintext: 30960192EC5073849676080464730B0C4BBF42286EA9A0A6FAB0C679704B56185E0BC9AE8951546BF5B5AD1A3140F27C48C9FD09C4B6DE3D4E21FD34A7FAACA8574629E1454E7D8B379A705BD85B244933C95ED18A8DD01CF6640B4E09CF4538A43D5FE3387E641F6C9FE02C5A4F0E5F53B5DB63750DD0F16CEF95357EB117EBDE +Ciphertext: 18EA8741847CD60B32753C7E134025968D47BCE5183ABE2C6F3216C3CFC49F710F84DC912AFC5BEDD67C0420C50C580CF97A84D3220080A06DFAC22DB943A7060A31F57DF3D927E74F3D092FDFFBA9CC467F0CB5C157CE80ACE69F8ECD7D6549B63F9CA92832B491B5093086144B68918EB561C78B4901D04962DE12022067635F +MAC: A92644800263E3F8F9610F9060F10BFC +Test: Encrypt +# +Key: AE498A38FF90AF5D1B1FC5FB4A2653197BD8C585915CEF54EFB6A5FF4EDDEFB9 +IV: D4AE878AC6098D01D618B7A6 +Header: 7E71F8 +Plaintext: 8FE8FE04D84E433F31A31EC7BAFE0C92C62B34B2D883C82CF08D2F5A5A7117C84C0A6498D6605A79F560FEACF709A272D25068E65A9C5E420AC3D95D6DE52FEE5BC3EA47D65AC2FB707D19879E8D4B887930C20D1AE036B996A0CDDB89B3EB5200BEED4790918FF131707CF9FFAF2FCB7C7FFD8EF81180D17AC62EA4B12B59510F +Ciphertext: 7CD118E8954F9164E0A3A404CE7AB005FC40E1577D24019FEC1518B7A5406F564ACD80FE07EE272E388A64D9E6BBDEFEE86C3A0925C3DAF94C543B2AE3A350B651FD351ED23C7EE3E9DC4FA78EAD7C6185AB0D5521915DA8B6891039955F2CAE1445B8C13E273F9C213B9F0AE566C8FA921EF3EE05980DBC0D32F231909C5D111B +MAC: 4B6528322EC00D800D385DD48050723D +Test: Encrypt +# +Key: 8CAFA15B3B16C8AB73B983688DC9C9C03CC15508EA81544C75C29C4F6E282BFB +IV: F6E7553E20AA4DA88DF8880B +Header: 8FC09139 +Plaintext: D964BAE6C2D5F6CEA40BDF9417EAC42187F12A5A933EE13AFD1150BFE3C577EF8242E07A73F16A787192A80C563851FBD55CC6A0B79D3A9878F08F826571CC0A8FB438E359CEC597090C199CC340235D7D3A9FF630F400FB3A0882771A1364BB85DDCC147B49EA1BFA67D47D4755ECAF14D697266A03D2A64431D19C538CCC7A68 +Ciphertext: 931B6DE7DAD659F34CA3936104E042F80DAF7334D472F2B02EFA78DF2ECC420351DDD014B4877CEB479641EDE490D21D9370020C5B0F4FD88457C82E6E9F18C892F62A9507E149B374681CC4E40D949C4BFF44FCDEADD523A65C3CE4A6F6D3794347349C5DDF507B7FCB103487AF0407F5F456FE2555CF682238A9B68ECE441792 +MAC: 4E6829651A118C56C522192B1CAC1B78 +Test: Encrypt +# +Key: ED4E674952CF7C400D4D06344FF8B0D19121E4380DC3301F3D00EFBD3640D015 +IV: C23F654DCC8C19BECA33CFFF +Header: 63E8A13C39 +Plaintext: E3DA3F3B7DED14F5757B085F86DCD87C74D20E61833B923AEDE522A4713B6B4615E12F06268BCEC1579CE7A80D1EB7DAC8558BE6C0C0329B1638C4A022AF2663BE4DE37061B472528512CB29477679EF0C0D869856746EFBACAC6DA4EDFE2A8523612E7E43E2C81A954EA2C4B10FA2C9C50C9B82F65203177A60C6FC746DF7EEEC +Ciphertext: C22ECD6668F3B418E53330EAB47E2AD947017615570872B3EFA4075F199BC9008D6C972923FE0DAB967A063BDBCC893E9FF68A9527BB962BCF19224B86A398FEE4D1F7AEEAF71AA0ED42BD73BBDC2EA2F20E04CF3A2917E99C144B03C2D37CC4031912885AF7BDF8B9955BF9068A45C8C75690336F3AE4EA1A7459CF171BA155EF +MAC: B6E5EC93F2701AF107919384F4E1BDFE +Test: Encrypt +# +Key: 233E1E019163C2FBE89772DE1A47270705318A4E2683787D66832831C11A2F53 +IV: 0A68D90AE807CFF27E0D918F +Header: F86F789D677F +Plaintext: 1D8FD1A1FB4711F22577507D9DD908494527B081046495F5CE950C011E15D072A09AAAE8324370B95F4E680F60584DFFA40CB3ADD3B95788EB4C4CB8789209DD8D6BE604CB4D6875E320863243A6F89EA5AB487A668408DA898438CEEC418FFC40778EF5A2393FB5BFC4D85AF3B9C2955433E080EA68BC7D7E43384CF48C92E51F +Ciphertext: B28E968CC945E89F5E0AF61298DAA5E31E7B04D3B1FB3DE0B9118C75464E6F94CF800588B66591D94F46F70A069D2054B2D954A9950298F2F8331505ACA0FB1DE8222AF5E6E3C08750FE2665348DFA781A6B9289FD87E843A6B4889E28737E2A158288026DE3FE71C3B5D7D4B6A9B3C61424484E0317818F3347A19118DAD536E8 +MAC: 7488A2A5106027F925B25982EDD102C7 +Test: Encrypt +# +Key: 59EB759F68398E64D56C0DBD9918BD3E93BBA1337CBF727719BF5B9ABB4022E2 +IV: 8F1F022D95F792C1599EF927 +Header: 6CF6C508F4517D +Plaintext: 17D89D4A21637DD27E3146AEA7B35712FB32C3A5245140961379DADFA5D26243FA09A97462146A73BE273774DE7A4BC67C05F8421D288FB83CEAF3EAAACE00F82408864BD566F5FE38B2D0F845A30E58CC7CA4C847B8E1464C03CFABA3856175A60940AB8C987D9159AD7384769A4715FF0B8C006EF7D92A2E6F96ACD5BB5B01F7 +Ciphertext: 7D21F70CB299FFCC8A7D1D8F5E14A72AF160E8C3E11B3EB65E311E4859E41B707E7280515073EBB863C41D49D80502C2246CBE64DEDB6C3722D679AA8913FCB3A98E9491FB040163A4D10B542221D980E40488B3FA24CB620064D0B793CBEDA2E47B8FF2AB534B9C4CFBFA226B602ECE33CFA162236DCFC849ECD8CD6B7570A528 +MAC: 2FE7B8F3684646953FBEE68367CA2871 +Test: Encrypt +# +Key: 446992EC5E0568FD4DAEA53A81431934A0CF29CEB1FD906FD97272005466CFCD +IV: 5081580C93F9AD8362EBB3B4 +Header: 4794B25094F2FD59 +Plaintext: 18ECF7E9298420D5A693009980D3EE9B699C5097CDA5981B307452B212F6850B84FECB54A52772A333FF9629F4D3BBBB532CC014CDA955E28BA8FC029BADF83A17E18D20EEDEACFEB3B34F37C9617D869DAB3EE3F671DCE186FB5F75238E95A21A12D0791326F4D6C5B16BFC88254BA5E10187DD7F7E57E98213B225213455F3D3 +Ciphertext: 0652E1F24844A32211C73B7282B8463D6AE0CFE18C0EB7B841736219BAB7055390ECA9F911C98BCD152FC023ECBC96CAA5971F161D19B2DF65F5F3D323D7EC3CF9DDB535F15BA09FCE964ADCA8E5E0A95B74A23EDA541F64E4EAA6EA6745BE9683A6E0E46D29D9C33C06EACDA16415669F1393CE57746FC2E83F672BAC480A4F72 +MAC: CD07C01202BFF4BEF0F203FDC3B21752 +Test: Encrypt +# +Key: 3128A2A1F43BA97A181088365299BF079F49C7DE4FD91AF5188AF4C8B4F9F5EB +IV: 15137077BACE387523CCE421 +Header: 50264BEC148C3D5B27 +Plaintext: 697DE4A684700432C0AE5E6FE6CC2A95481B2AC0855D61D8D4744618DAA38500435A383242137616492E3162014D585089CCCDB5B8BD73A801A290F986267892180D1EEAD3E1C50D6843E5062585A35707B7A1F631117C33E2EABE8031F2AA129CFE5C39FD959EFCED18BC67BCF77E578F217D060585AACC048180EF7A15F089E8 +Ciphertext: 9BA5BDEECF7048324B7FF145AEFB328978DF09AA11C0A8DB9B96A5B378ED48D9CDD94E48C024A5ED9CAC65BE1F9098D3BB8FA4E597B6AE11D517522C898D6371FAA35CCA031BC56B8F438341C2D0532BABC84D81E7218F4FE7A151FEA80ECE56E7E1C2CFA98CC5DC686530ECEE4D4B71AE07D8E7422B11A968040ACECCAD333EA7 +MAC: FA56BE1DB28211ACADC564E4AA33FC67 +Test: Encrypt +# +Key: 3DF3F56B3103B18715D900FA5A1F501CB2A9ED21982CB4F0945D2EAE255925A2 +IV: BF41D29DEAC679B38FD1DE14 +Header: B8B02ECCF7DA8EC4769D +Plaintext: EBF9C8F50574218DA7F92EF38C5429B16801F852B8642C3E82C445369D285EC07BC5AE0D255221C80C91DE6AF493BD6705DD05F2FAC78484A87787ABC7A0D582D24FF83159AB76E86617DB50AAC9D737AA73E2D3166DE5C4F3DE6D65E6E05DD20F05F32A143968E4C352588BA7DB5E8108940D6D29848C14A840089DCA2EB5CC13 +Ciphertext: 59C5AB81DDCB33E42D214D45ECCADA065747E3EBE1A864FAA1D3FF41966135D6CB5ED7FE0D94C2868725B665DF613D181FD6EAECB5E643A47AAA4CE9E618F9053920515575B6234570530EA3420E63F8B830970F4FB4AD1AF2860A194185FDF56EEA29A4CCFE4DEA5A1CC2C3C5B887DC22C84A045383F8BD9C3A5808DBF9B37F1F +MAC: 8AD0F24750944325FC351846B2357483 +Test: Encrypt +# +Key: DDF129979942E3FE1E9EDA66E0E66B87D150EB6041322CB0BEF6FC672BD01204 +IV: 10B105666E005D4C25FAAC2F +Header: 27CB7523598CF68389FBC7 +Plaintext: D054D816EF1CB237ACD45E1E7DD9BA850722EDBEC01284F9A509CB3B2A0A1F1598E76FF6E95BCD3411CB03C7FF8DCD841E90F76D004149F9CEC76FBCBFB3E2DA4007E04E72BA0AD8E3593335DBE338EA5DC7645747C56A79EEF1E486018FD132919C1C02A02E7796C616D4476B8DA9F6B1D6EDF05E40A5F399C50410ADCB0A5504 +Ciphertext: E91C85A361ABEA7940143A5B8D87D0D9079CC8AD95E7D13E9FE750EDF47B766480FA90EE32969C097C9C048F9B156A80A6F61AD978DB38AD6DA2EB8AEB5764EB4FE5FD5719B03B7EB8EA43F04F8A9D8A90F3064381997D5E23BA20476A2759A6EBDC83843EBC00F1E3ECE1ABC10BDA56A43754980E9CEC7AE0E45C56908BA7ED8F +MAC: 707B0E8B69FD594325A7D00DA6DD6CBD +Test: Encrypt +# +Key: 897963EEB0C5778BE9F471FD8AD9450F0313CFAA023CEC5F34A3F99A24B41071 +IV: 3B24DA8B4431277EB3EA011B +Header: A256AA37EF4947CCA5EB0D5E +Plaintext: 8F8E98685E763BEA19CED0330C5EE1272AE666E39B9CE1AE3E0D0D8431B8A386E2EE4ED8FB06825C9F636EAC0C3DDA6C20158D7D4EBE4C0B24DB60D5787C2B2A0AAA153DE74497CD11A5C2D87F44F07995EF96CA4908403A258495E365F3A473378DED585974A5629F8DEA5A5ED8C3852D4E9D6034B710ED4E0C1F7EABE91857F2 +Ciphertext: 5648391772BEBADCC8B949156C508A0D35546FD7C268A024F022F5539E6511DC2285D576C844DBF0FF4063DF27AE8E6D648E343D50DCA18219DE5C1ABA59FBCA11A1F2C6CF49EE61615CDF399C54C3F6C284FE1C59E3E048B245EE1125EB59D62210C1874154EB17F58EA33D25527257CCF35F0D9E64A5697442367B7F0BD783B7 +MAC: 937BBEDD24F196FE2CF6C6CB5B9CE7B1 +Test: Encrypt +# +Key: 94DA7519AF05E661C6120BFE4A4CFDC90211F4B0BF65300BDEF201B037131AFC +IV: C07C041BA32ED64F1BEB0236 +Header: A3119391EFED51119978BE6517 +Plaintext: DB171EA65DB54AA7C1E9A2FCE5745102673F691ED58235A3B8728F1289B91B288B3FC05DE2382D1CFDDFB43F17025A0FCCEBAC3815572E729F32A94275F075521468E234B81E29B11C56B6FE45972DB300CFE0FE7047DA9931F1725129C3EC3842A1E7AEB43C32EF5104D3F20C52D6366AAA8AB10155A78B1ED4638B6FB44D361D +Ciphertext: 0DFFE6AE4402A82ECA1972C160CC0CF42019FE78241B73DA1098DFDF27FD1DD022690DE4290103CD265BE6BAF99BE96DD626B004E14A680480456E045DCA32B0CB11325F9DB22FA81EC6B12741687C75DF819DBFF656A0D219C26B3A13B914E0713940083FDAC050FEFEE3F125ADD9F1CC5265A1E19BAC9704504CAE511C30DE36 +MAC: 1B384CD1C4A484DA108FC33F16B52F9B +Test: Encrypt +# +Key: 3612AB9B3D3880E2EAB0359D9F83E5454D8BAE8BF56D2202FF8F94876C5DBD1F +IV: 9CB8649E168BBD875D16B3FE +Header: 3C4DD0A8337324D0C3307A92E75A +Plaintext: 3B8A2E267DCD1808AB46DC7B1CB2C782F2A4B482F328009177A724DCA39AB4DA26D851089D21A64973BE5C9E2BE420D190A9EEC0A7F546B786FBC711FA7F27105C50572D206012698E3B4306A0CA72B809E4E13D16ABC99CBE67A050BA7ACD615FE86615AF17FF24FFCFAD3746FD3101A1E8F87A546121A64143F58C30DF056741 +Ciphertext: 1DAA984586572066709D29F4D6044ED3E0CB3E5F08DEB7451F93ABDA2FEBD62A3037A282C14067EEAB623AD128070F6AF2923A6EA5A7B018EEBB0D8CEB5C83B7943C7D8ABBE0BB6FEBBEC7890AB0C03177050D3543EDBEA439518E14F45A6521A22FF4B1E33D168A6510385CDDB1083FF92B81FD7451EFF4BB5F5B239D85B8485E +MAC: 6E8CFCCB88152A8ED6CDFFA86AA29B92 +Test: Encrypt +# +Key: 438FEF4B073FF927488A35C14C312AAEF2391C012D87E558AB0355541D0666A4 +IV: 31FFE19938E570A2BAF91C49 +Header: D6E8AA949EAA89F858EA9A88814E64 +Plaintext: B17E8F62D4F6BF85EE34A6AE3C0B7A6E79F514B5BA979C096ED054359194659B9269290A48F12E211A30E32C74506DA69754BDFFD11600772A200EFB22244DE9DB895DE586AF568071A0AC3BAC70F0DE9BE94CF92EDE3131FC1E0395EB60D55D7761BDF99B43954DDC87EDB689FBC3A7B8E0B1FBD5749F454948123B59D97ADAE8 +Ciphertext: 75BBC7938571548AB2D05683E0456DC62F6C2F2C56EEE2D7F522AC0525F2D1E4ABC67D949080DAECB861AF3A616552D361413D936132622058F98DFCDD7352061E32B078D57C077046873D09F372D711BC0DECB4D473FE345E5100401F7ABCEF3E0131413132F9D8A46B372CA782C310AF12F6811D38125AAFE41D3A8D31198AC9 +MAC: A5B63E84C7968BC77F75E4B072CACCE5 +Test: Encrypt +# +Key: 04597BA9F0C3D5B698774DB155591AEDC49E11C53F1D9221485A063C5DF560E7 +IV: 1F797BC494E261B73A28E26C +Header: 31B84D983E92CFA508F96C01FE5228E1 +Plaintext: 3AB5DDCA1FCEF9B1DDE63463FAF86E9C6E165BB76255398F6FDCC4C3CCBD1A71143B51836C5A20D6D21C011E56D957A7D84B90328EB76154D219F0156109AF39067BAFA65435C4899C781D7B55DC1E02A571527ED99889F88F2F52311EDD2A451A0435AF49BCA19BE0CE0358B534657BF8E530080A14366404898A99FB98B77833 +Ciphertext: 7AACE34B52AC3AF76E121A31F2FE1D281CDD872209322BC8CAC5DE059837AB4DFBC110A0B8D5C8B4489CD985CC4ED9F4DDA03A68E8069FC85F73EAB704AF53CA976C65AD404310F0E06030E1C3EBB801500A3161726491E920631A7D77CDB8041C086DE96262AA9F5CBAEA5CCDCB27B87ADAD3C58ACAEE4C52C286BD8801EA1451 +MAC: C89CE2CA218D0F9A398CEB1E4BD9ED63 +Test: Encrypt +# +Key: 5C9BB406C1452BEC03C245B27E4B5F632D73F65F026D136F3B9A3BA1B7B436FB +IV: 98BD5BFD1046A58FE77E29F1 +Header: C7ECCE96B12A73346778B51BDC4189C64D786320435CA2827056C68D7ABC45B5324E +Plaintext: CA78E7AA1D2BC0E79269FD81BD97BD96CE4628D5CAC9C381CFFE49D383B7CB53D64EF20AB4D1AEA155E2D7D70C0BA62733E089AA4F0F6366D88BFE7B8BFFAAF08212F765A387BA2AF27CB06071CC1BAFB821691CF41BC4F5D0CDC6FC37BC7EB8C54ACC5C5C1EA93FDCCB498B1D6723EAF270C7D44EB3956DDF1D8BA5FDBE1C05C2 +Ciphertext: C0E2E6614EF2B5CC97F1967D5F251148C0C63FB2BA8F47BF90D6BD220AF67327FC29144C223DAED8C8CE5F9113CCE8C4A6588096471485D71EE9554F798D255C99FB3C46F99C4C12FE193AD3D92F57044319303CC2FACDE515D409977DAD27F5A9C3024890717D46A277462FA0DC6046BFD8DA8B1E92D64CB063BA8162AB05F653 +MAC: 3E30CAB8E3C4C08737E6C5C4C9B23E92 +Test: Encrypt +# +Key: 69E2A9B6619FF8767A1225824F4A6DD2330B340EADDE8C7665B011114CC9394D +IV: A2EA70870094709E60C5A3AC +Header: 7DF9CFBFC2E29B8A6168D94DA3E90540971352FE2F712AB928C1A08DCC7BC64917091FD1F24A81CEB9D55BABAB73D5DCE5BB +Plaintext: 4D3F7DED69E0D77FF3811C1A624A1E32788DA7A3ACC4F461609D13621B202A216E1F895EC2E8335A0478B7AD84112CAAD7466A6B5C9741DC2D3BC10B15F280080640F80CDA002EAADF04AF52F33FC679995E0CDB239456D7257178C8EEC888C052DFE954EDC0CB8984C894A811FE7DD05B917DCA21C5CB681202B2F02319BE73F7 +Ciphertext: 97764F55559BB3225F717221385D0024A0AB606E2F44EA872B3B81201C435B538B8654AC4642455F6CC142E69E3AD44CC67F3DE74D15A0EDD0AAB227948541992DBE058C050E62E7010D9991390FCA1853F86E15B659BF0DA9CADAD4364F74BA82B0B341EC19B23797E5C63E1528C9D08827D2D15F1929147C5C96093A62F87365 +MAC: 3D3B516AAC225A786BB0D194CC049D28 +Test: Encrypt +# +Key: AD18539EF76A7DA8402CEDD6D0A8EC0400509529E38CF6FFAE7AD26BC07C22A1 +IV: 30A2422FAAFACDD55B36A29D +Header: AAB28057E36E323E24D20E5DF989AEAE2459FCB79D1323E6078C253F09F9FB9D1188181B1CDB23F1CAE19B42A4FC254FC704B481052AAB391FFD1C596B877FC1F051E77F765012 +Plaintext: 50A86E6C1F9D0A6B4C3C3A606D8E14DC3DB8733B52934EB5634A0334024995DFD7595C174D5CEEA57F3CD070C59782E05C714DE0774382C04F06441CE8AF7918C2E7344248E9ECB476D145919F230B92749773F9F9FE513BF1D33807292211EC0D5117E7D99EB271D101D80E842345F58200E7F65AC1133BB931D73373452CE95D +Ciphertext: 9D93F1AC455F07278053AE35E24D84D34F01A0A6C65606591C24427B80C8DDD3CEA90F454A73240F0BF09F3E9A6DD16BA6EB4EF2FF001F43AACD394C425E94B7D54504EBB7E182F234300C7E4FE74507C38A633121C48D48C795ED477FDC0894099B397FEA4836C165B1A4D8EAC370381F2E338DAA37C98F68B96C09915332B37E +MAC: 80389DFD0D3D8A601E2236F5A0BD8A57 +Test: Encrypt +# +Key: 2C7862C18046CD85C9707936EA48E35072AEA336B5CC4F7266495E6373692FC3 +IV: E3ABD3F0D9B3931B6C2EF0C3 +Header: 7F6B2C12749382079F22A0A2CC9D76578D1B54985BD4F5B9ECB30F1F7DB7F1D3ED233A8F84709F64E85CBD491F21B216339C260A2E75C75D430D2F9D28E1AFC741D24FA6770CC73D964089F64F9BFC2D +Plaintext: 593EAF674E4D1B9490C77D73ED433A491251B88B318EB044CD56A797E5F62D55E74228FCFFCB4AC4AD940C1C5A03767C2CF39106AE9A9FFD7FD29139FB5F2045646D6D414968466391CA9D0B2ED90788EF197919661861CAAB93B2EAA02220DB80F59B28251F4FA7789E3DC88C67758A1FDA8DD1A66CEB3E5C45079E8C2F7D4A69 +Ciphertext: 432868CFE9153A8DCDE135C352C10B7D673285A0806E9349F5E54F8198464C05C4E9FB2E230EF039398A17AC633D54F595BC391B15E786692BCB1E9A0F165C53FCBE72367B62C27604E6DEF792AB7BD9A8664A0D73175884F16B77E6E5B256940CEA612D830942D7FC25E0615BE7650D6EA1A725AD507834EA337137E89A4C89D8 +MAC: 83FCF675F22C0A5477EB1232056F4858 +Test: Encrypt +# +Key: 9B1D0A3CE1495C11CF5BA29B3A371B0FE855EF1587006EDD9708857E1D8766BE +IV: 472A3CBB8E6AD523624F405C +Header: E577415B2F4800FF6AF6EC879C6D34D14427B4630601130550081C1BA1C2EC64CFABBEBBF3F83E9A1496F6A353EEA89384B2DD67DD27B96DBBF95C5282275A9E3866A6CCCDD23A3D2CE09CE5B83ACB582DD60D +Plaintext: 00DA5D06838AE6C06B8AE51EDA9E9774C0DA55799D17CA693154C615D2F239AEB689AAA7FA4801DF08CADF4278EFD9077C28B5B32EFE55679997B84B3B3527437C8188B3CC02124BA142E3BC4CD03226C4CA3D81EEEB2A00B6D2F3EA230EC02900FDBC61F6DB5BEDB6C9CB62BA24DF367F06E10A64B6DF135B1D9683EB57CE2274 +Ciphertext: F5A083E9F71EABB2C945CC4C0AA7C0B1D781B960B82DA1E15DE42AA63953A38E6F3B8E2EED283E67A7B2E02A13AC7BF7BEF286657FFEA005CC423CB0D9358A2461F3595FD627F14C92838A970139E3D4F3F116C5969B9DF56AD4786A64A9F43677D7D0B05D2FACA9821903B6B4D30A10F770688105C82923539ECBEE7BC1F40696 +MAC: 655F8D7C2BB628B92386E5D04778ED72 +Test: Encrypt +# +Key: 940F5095BE7BCFB869B4B642220E321BD56E6BA84D221067D41668BE22BA467C +IV: 7FFC05E25AEC6743F1CD0F15 +Header: 400234B927EAFA661258509EECC323416C50DE79AC478D619DE9DC271F46767CD13CA4BC5893E845FB8DEEC874EC542D8529679BD9AABD00B7FCF2629629228F2806823E3F6EB937ECA95A532F58944AE66D118AC2513D24 +Plaintext: A54CCF8E8E45AF02E4F7F26F0F673C5A8AC8B3B15E8707B4EA9B366CC208683034BAF5DBF758F5387B03AB87211F1CF465DCA4341AB5F11C2DDF307AB2BC5938774062FAEC3413159A2A72BDCA5A9E2097BFFAB70A51125A2B6CE86FD6162137B2F31B114AF2F56E033D95D69E36B0E46D5AB4B8B968831C435AEB6F51BF42D684 +Ciphertext: 6C3B848109BBDDC6402AC017C781BB444C58ED8417FC2231B62912E4DA1D4D8374FA298BB928D481101347C5953311C85F13DF36390C2357641C031E24F12981C7D1FE30A7F2FE95AEA6FDE640881B482E9C8B22E6F3B4FE6BD87B3563CB352C533CC25BA5CA62FA8DD89CE4D62DB03100B5682A62C133CD74F17C9EABC9C24106 +MAC: 6014E21A842FF603AE7186171ADB85F5 +Test: Encrypt +# +Key: 999D302DA25A250B396E46C2C2BFE5866D9E65FFCA4B8428187BE9B725AA1EA7 +IV: F2F23343CF0CA4934CD66595 +Header: CE4EFBA061A993F221FAAFA649BFF3036A00F3E0FF0B433DE89FAACB0C224E7078A1735E1D8702A2DACE45A9363DD0747001E6907FC6D5BE5B0D429ED80D06119BDCBB5BDE7838F603CBA2B8E32159D73EDBB54753D5387C3D345A9D7C77DD780260D8FE257B47A59BA87883E882065E2DB1 +Plaintext: 32985D86089676EF003F8A95C74D2E73F8A89928A83006B8228F2F42FD3A996448B3B9F026905A76637BBA39ABEB4197EF40D0C46B1CB61BBE1901CC53E17377640493F4D9155F45B26C55448B4D0D14BCFE40C0039465A15FF9E668638B6963260FB3C0C404E73CCF5799991C1996C01EA3878C37AFADCA206ED42B1DFF6FBADE +Ciphertext: 2BBC068C612729445B06925A7E78CB0676F1BC7877DEABCA866A8881763A6D92A7E7A87847E823B9295952AFA7EE5E74902794C7D712F25BF169A2B38C10C625E6E4730EF6E822509E473CF34A7725FC7F55A864467D367B9C5B24F316F025E83769F8E958072082353FC7D6F66576A971DD52C72C94641DC911D88E23CB33929E +MAC: 0A04DA3A57BF90C276BDF68DB616B2B7 +Test: Encrypt +# +Key: 6495BA68B4336F5E771E149C6349E3FEFBD82C1A0E0FF0EDBC063B6FE94F8A81 +IV: E3923A7DA19973A356466F0D +Header: 62CA5B53F0FA451DDBDEC1E3E99B5803FD16F51A843BF43CFB032DD015006D0AC3D10CA8A2AFD840E3DC7BEF306480E3B6DB9F7D4ADE3948B2E361CB4606835D9D85BB11651D1094D25FE6C3CD9336A946829A6E292EFDA1DB183069F2B57C5B50A003C59CEB1C3146A0BE5FBBEAEC46B51CEA5C +Plaintext: 0A770F700F1AFA02EDB0125B0B1B81C7B2C9B3BFA87E025604CDAD4CA9B4AE54C10A4E5871A1AC870311139119A2581EA6E81D44956F006DEDB9A63382BA28558A9F3C95F42D2B7A10D5F46A722AE0C55CB018D63E4B661AA2B1617A637F6F08AB1042C7981B8610D2231D0B7480946B070C42D9E6F7529C376EBBABE2A6A781EA +Ciphertext: 08B411D9664EEB855171EDC6AAD6A9D20912D9EDB7303B6FF64A85264158E7A4E4F792E07A17E9B13608E195F84F38C88E59E64A0744F651D0326CF2D7209C91AB5D101038C13C9D0930EBE3D1713ABFFFFD828CE3935398E4BAC266F2B67565B8B85DBCFB72BB8CD46DD212F339A1F7813EFFCE384FCF97A1345CC13864A233A5 +MAC: 4DBEA66F853FE452414A8F7371F75060 +Test: Encrypt +# +Key: ADA3820D876029FE53B7A647798B706E66D7346A661B96A0C1E5EF17B588C496 +IV: 17CA6CBC93D4E796669F93F5 +Header: C3E91CCC512D24F499BD6EC798AB8332DFCE4715AD2B06146E50F9773F02521A49468F1F2B66FFD4149E23E69F7DAB723368B1CA6B2386E38FD56B629CBA3CE802D5E074DE02ACD02FB183D28331BD0407F122549D9103A6F1EE9BA5BA0FF3B130503CF35EA362B14BEAF42EE393BEDA01525E67B0D6355E9D68692A1D6808 +Plaintext: 088E95530300BAD41B24535052B457F32C705818BB334D47210C7F2A2D2634390A6C518CDD239A2261F7AFC65CAC312A613064864B6604BA1DAE57627B5E2A056D4DF858A34C778F45B07FE7E3F66A32DE858F3DB81A776734789A8AE568E061DFF893A9B1F61DC374E51CDA12AF369C6DBB8F9B7C189ECD01F824F0D3A04C09C3 +Ciphertext: F4DF15D4620FEC4D0D2F5E7085C8C198FD4954E5B5F30D87C65D6BFB9754C36C7EE56B4E8CFD699FD12C2B85C046FAF2DE1106F596DC1919145B501125265DCCFCB55CC7FEDF61AC69BCEF7E448646F21BA4C628E81D12C7DE89E7AD131E9663A6B44796313A7C8A03E347166C33D14C4282DE08D75A470AA26435002B3945E117 +MAC: F43F47D2D75E654CB5637757E3B0F443 +Test: Encrypt +# +Key: EC24EDE378EAE8DC18F0EB4D9DEF998C52745CDD116DFF7F82FFF527F2BCC681 +IV: 47C298475CAF3E16510A2247 +Header: +Plaintext: ABC42913A9B1660EA580A41B5DB1F2122471896FC5DDB0ACF62EB6B34B8FC6658C7C29E95CD3C297EB336BAA326760B3EC04EC22E241B5AC8682C9C42123F7B0F280067FD5B9395CB93C2ED887D199C187914C163380263D73252B4011CF572E30218410A1FE42E65DAF7D9DB4C1335505AF4DBD6D62BFAD6FBB935584ED5A165BBA87F8607AD7742F7A1AAD76FFBCE24306A593B127CDE1B8995ADEEFBCCEDB706F388F983B4CD007BFA38C08727D1C005FF9F1F1EDCDC6F387F2BB +Ciphertext: C08E4A3F3E2F9FD75692764EF12778F8303579612EA3F2C275BC811A2F7502BE9FA8146C6FB728ED07ABBE20A98DC2848AD070F9F264F634CDB7C26D342FA127F8E7A8D7496716B1EA6ACDB68587FB7D84CBCDADF70D7086570E8EEB3325B08111BF7813E5D16220347ED7C8D0CEC20E977E12D74EAA4DF6DB8CAA0EB8AAA8DEBD520117E77DB3C9DF61CC9B6F721904F822BA22307237FE40E4BC2836E148B56E972CC794FA84763565483F10ABA782C9C562080DE9425858AC4410 +MAC: 1D31ED5DB21A0E23B621259AB13E7D79 +Test: Encrypt +# +Key: 9C3A240DCDE0AA4691B906F86E1D0DC14AD07404A62E6B7EA75777AF38F941E3 +IV: D86E2CBD8039E121CEFBD9D6 +Header: D4 +Plaintext: 17CA00EADEED1D352FCD6466EEFEF90AEE5FFB5005DF9FEF22E603D741308DD9BFB964207F43277346E7A099AC732F24DE3E93A347A964873DE99E9C8D643F03DF8121926042723460C5574D21D239AD7E50516FECB8B84C3FEA636EA19CE4CDB806EB13CE032177ED5998B27793EC2414D57862CA8C5B8F1F519F48240660A7A9897BA9D2661097F7C7381E4A4CABE4D518615E8FC7199E03C43657EBCB45238AD4927019D532E093CFC0881121A330B46A74AA4E78444A44DF0B7D +Ciphertext: 3116C8932BFD6E3A1DCDFA5E2DDFC03A568FE49492D4BD8F74F1B663C6160E2217323446B97E2FBC2661B440B916193573A1C4A897A32E064022029536A4AC9055822003DA7DF6CDDD1A38592DE0073C4B48DD5CB6292FEE14E27B10EDF674E9009F10A28A41820A3606FE6101502CCF5DA63AC70273B2F2C322E85DE3092629FE0F22A0CE540442EFF323EEC1EBD2D6DF7D348A841A1E91722BCDB00CE8CE7EA5D0A67DDFA6E12CDA8F715041DF38F495C081238234E2C115EA3744 +MAC: 19FB24336B7357558F7118620D1D6277 +Test: Encrypt +# +Key: BF0B6A5F2646F05BFA6803AFAA89A6BC00AEB29DE4BC7A5CAAA72C267762E186 +IV: 996A3542D8A41C5BD6CDBE84 +Header: D69E +Plaintext: BFE70EB0548A032B64E465B1D46051410A3F1CAF30A29A63983EFF8D962BCE13A58B4E7CAD4AB10F4707399519A157E5A18D496CACA35590BB7643B2B07D1625F9F362F234848EF186DB83BA17BF5AE9E6BB9A7B4314A8623C9126C5790B6CE33DFBBDB502438191E4D80B9C4E321034F4EF521B4BF042985EA526A6E1C707D833BF941ED99B220E016F136BF2620E86BE8E17362DC3D3E29083001B0D3B5BF538EC66C6EDD8D3744565A765B4817B7BDA7A8133FBFD04014B4A32FC +Ciphertext: 5426694F5B0C4E1C470545A90F36DCF92B619D7DAEE2008EC53CC67255DDFA4063EA15BB13E5B174378C5752766BC2886C3FEAB6642B5387152CADE037ED771E58964C04C2C3A31284999DC4479A4135AE6E815F9DAB3E59E3C8414E15D7EF264C5AF0A7D81BDB1F7ED824C60342E6D60B331AAF09D71676D5BF73BF116F71B26F1D3AE3918FAC852619F4528499CA4181BA5C4BF7C70271EF60F276032D2F804453231A05EAF87B4F1BB5B6D935F5128A0D1BC219A3D00A87DFB2D5 +MAC: E42D53C62E433CBD41D3DD7DB4027CB4 +Test: Encrypt +# +Key: 9B4E281FDFBDF5057D3EF01705F32F10D8CDBC5A67B4A9310F518F72CB694120 +IV: 7ACBA21D7E5C011926452145 +Header: CE6232 +Plaintext: 17A6E53C916458C387085E3531E56B1E64D3041403C1426A3072B342A6A57715B821FDD608880A4611251832E6734C55D9E2066DA97B0943120E4FC545B4FBBA32CDB34BE5D883AC302E8393791C36A8A2546960B0855EC1492C3AA9DAAA0EBC3DFC07EFCCA931246EAA639FBC58347E51465E58D2059A41AD6DD1A1FC922CF4A38355E8AC15ED6B2E57A2A41C13F896B3D78DD14A83CB1BDA466B57C600EF6F2B9FEE89ACFE2175044217C36568BA7EACAE4E0890871AE4412F5CD7 +Ciphertext: DF1F62289051900F7B2B740680639E6AB8C687BC465C103C7B45596FCE3BBA1A6A6D4A54A213D6262F61C4F45BD10F68CBD7714B53AE9B09A3B56BE4579D02E2F249F22C6842BB18DA882D59AC5E6A46A1C787373BA84FF2C160B6B2DBFE1A956455F2B4180013389AE585544B82E0FF4CAF910BFF8F3364C8C77D96432E1C4A23051A518A533E95D5088F1942184AFF7AB2ADDA93ABCCCAF8A6A06B4F0704BA0EEE43B99571016771426AD310415F18F9F06D43D103871359155FBF +MAC: A40E95880D2A3B8E35D2FCFFD9FDA99E +Test: Encrypt +# +Key: EB9DD88893541005C05CA5DE7AC66B7BEC742ED142DC479C2AAA42A1553B61A7 +IV: CAFADBEDC68D0B864630E379 +Header: FF1D40C4 +Plaintext: 2CEC1E265265DB8C34872ECF01186992485759E0B85A80AF869687F11E24424ED1B819B7F7468823D01D702E8E6CE3FB9045F16A057A1D6D54BA06794C54AEA1BB6D103DA9289927B9819C8E8E05097061FFB74169A72D48124B5091B4E86AA9B480F736E2822DDEFCD4CB56F79AB63E7E76C0874AEA73C924AD76621499C0E6C20DEF388E81D010569C64D36D6C3EC13736F498221A75A1925C17443D09901CB97285EAB7C7A64A09C202DED6A579D02C84DCE3E569EF543A598BA4 +Ciphertext: 4FC00108F551EE23EBC7F0465A3467AA132D820EBBCA591EEC0F1CE93C4D49B0B6A9F626B4EC88FAF3B92A0B9CF1B2721A0D802CDFA1FDF4F2B1603C1A1D1532F2C59AE4AC06C1652B1C358DFBCB14C6FE45F7A10D75E4E00ACD44043BD8918D2CBC856AA0531A2614F160A5CFE0B4882699FA0D838FA1D6507F0CBADFED2B007438A2006769A2BE84FBCC029E7B5C4D05849F3181C2C1144510AF3AAB13BC08A3AF20B87857771D1AA5588A3DA7847AFB5A793D3C7AC4FD8F6E2D50 +MAC: 6841C1BE8B5DFCFBCA56B370E0139C43 +Test: Encrypt +# +Key: C2D13D192FAB1808651023B332968A2792207EA09B48544C879F1C956846AD70 +IV: 1AFE195324C0B05C6BCF1FC2 +Header: FF686ED8C1 +Plaintext: 9A9CEA4D9D31896046A20AA62627A1C376C071B581BA21ADA30E2F180DF20429460C89DD6820AB5CDD680FEC98C8F826544F7CC2236CFAD32C03315AA04C3102780442E46C233D968B75AD06E2E9E17EBC14B601AEF826F521CCBB10EFECABAE6C49F04848E8CB12E1D9EB5404770A8D667ADF617EAEA4B44B35CD3D992368E2156E5686DE76493B91721CE56C9798F6116967991A7FE6E270BD29BB9011076E9EEBF92764C7E15D8B6DE2076ED931CD034B80139CC70DBC49B11682 +Ciphertext: E73BA0A3D4FB1136529498B2B07CF93EBC1B802F0C42FFB5F5A7532018C7E8D03ADD1665A8D7054E187319D7CCFE18AAC54740E8FF100DD8396C2C6469B4A9E112C4F6A84A45FDDCD87672DC3F0BC9BC6E7C9868F784DB117C75ED7EE70176A26AA1D03D7E262130B6B1D41673FD5E0522F21B0E3CEFE446A3D4EF20EA33B8B53420F8E3F1DA53C32AEA27AF4C13789B05E355DF29F971EFC0E358BC1BA9ACD6CCADF743E3D5EC4CCC5F23A1FF638E7A8F888F77709126A524B0912A +MAC: 7F999DED0CC4D7B2931D88E466A07230 +Test: Encrypt +# +Key: 2AA8D25500F208F6E2ABEABFAFDC7DA44379382947BA41C76014D58F7E62319C +IV: 1C44C5076AEEB3AA9F0ACF70 +Header: D59CB729DD41 +Plaintext: C513441E96C3BFF1791B8E9BC6E640E21CB77C3D6682CAE28D04DB5F18AA7BEE66226A4DBF30F046C278FC6CD02292E786AECD074216C5D194B3A65421FC203053B05AC273D8B2BAD5339D7B9D813ACA1C41C642ABC402D21FB535681D3DC64DCCAA98A647481BF5484301F8C742F70499593D041AC288F87E496BF0EC5D9EE238A807BE2B5AE07C216D3E85064F5FACA6D397FD6F66129C2F71EFF75E9473D4AEE36C58A66AA8302AF6873C06F5EE797B1A726652ABEC65A5F56811 +Ciphertext: 2BC5FD3003EFFF07ABED2C1776B998CB2B1D205D4E0C9E4EE5DD0B97C295BC6C6DBF739DFFD834E64AF237BE80FA7AE49DF9ABBBC1B59885E9E531BFF8A574BB515387868CF78E3D8BD6D1BBD1D2EF9E0DCD0B405FA60B7401EDF15797676C8F991BC70F1B24F128AAC85ED961CB5991CB637BA3498B0D6CD22D8230884FD6BBC1E6F331A72812E6C291B3318C79CC451159FF502D6B64A3A488BA7F5864B8118B97E9DADA0A64E956B68EDCB4E414487467A3D1D2F036A8D454BBC4 +MAC: C15790C5FA1456D79687BF072B0F5150 +Test: Encrypt +# +Key: 3373FC671F8CF839A7F5274B457E47C65AFEC623BFDE56E5CA4365B0C9D1F200 +IV: 1CB4377CD27D304DA7C063CA +Header: 1DED1C76EEF8A5 +Plaintext: E9F3C80865EC76CE750B1EEC0FA4D07CCF57C474968265BE589BA3DF66E92E5315CB8600B72F7F0DF2600083BDE91C9FBF48E5E26A00DE0507D0F4651778CBF9E828FCAC8C64C39557B90EBC20928F730FB6D257F0E265033EBCFF2DA8C677BAB88AA8292BA926D033D5B7CCF6D18B11ADCB2A0C0903C30052AAF0F38E89136B648B1D2D4DDE742A226EFCEE7260B129DE909EF12CC5A0A0D4753BA4F37AC2B022534F86FA173B807307C87211A4E2D8A1F0666B1B011A2BA0CE5B37 +Ciphertext: AAAA6600E1BD31A36477E7117E79114B4385B19898DC667A4C1B3923B45547B1CB4C63C3E5775915D24C5BFD2916B12E14AFF76725E512B9EC47A09546A7304A4830224A49C3F44AE6D788262A57D3D0605BCB4FCD0374FFC31AA330ED106ABC9AB62DF0BAF0AC2E44EDA334BAD1EDA99FB79463A835B6042C10706E2A89D0D4B806771B2D3B4296335E37B5AF2A7C3E2ACB236EC6232E2CF86BB3A9D55D7CE77725DACAC182855C13FA7FE69B4E58B74A0275BF5A7A4DB884A29407 +MAC: 03BACFE728A4EA85B3BB6843D990D8FA +Test: Encrypt +# +Key: 83238752035717B76E7AA81C7C60BC74FE52369887EC4AA9DCF7154EDB34CF9A +IV: 1ABE5194DAEDE54477136E65 +Header: BCDBD1F55CBA75E4 +Plaintext: A3D15C604FD87195F366274BD64CDD0C350FF3B28C32F9CE02D18B9587A11177F30FC3B2CE265E7F1245CB3D5C56736E34B5B7742AB18DDEEDF1C7D36667E60A9D3405F6E017185E36D2C4ED18EAA7F7870DE6B42A838B722C391D91206EDA03D47515B08C00DDC930AC1E94AE53AD9A2EC10066AAA8C6B95CA59DC4931BDA65C0E5297CDBAD0635C21A3A2F4F688D0C4232BF03C89CEDC9471F18C935FEF9CF37DCED44AB41207678EC139EA5EB4ADADA7F53ED299BCA2FD52013C1 +Ciphertext: 2E5A0523ED9609D1DA49A9B578162048B0204871C4AC082318D69134E134401851F498AA5E00029D3E053AFBADF66F4BB9749FE2FED8172BAF748DCDC1DFFD8E22071C9788A573E60EDB687409AF403DF0F1B69C61C4EBE77A6AEFD3B3FB5A14A45339075494549DADE9150B196881A08D5E6324E2626E7D23609F220CA55E9A2A535DF94802DA8C88C72F5589823316FFB1CB35CCE49EDD1F89EE4114378053B1CF1A0FCA844DBD44E25968E829BF803B47C9DACA259EA2CFB2C15E +MAC: FDF3476C85160B7A891E44DF52210F8B +Test: Encrypt +# +Key: CB032384F3E6460590912A046DAF55E743502E1B4F4FFFBF77F63810C4A8AEA2 +IV: 47967D11A4F26930AA073FFB +Header: 2DEEA0B507C9C1584E +Plaintext: 1A2C5345AF2E5D8B183BBC353ECBE93F6469A5F9BF14DD0F5937A07B29F4A7894731E35B1A76E36F47B0F4FE3A81CA276E39FEBBD0C3DFD12565821D16E9FE131DAB212BC689BE74EBECE89E19A7CB8A34DE6A974FFFBE9647494EA4A7DDB9D8210EA2BDE1CA84F2A9AC925B1A61577B9369F79434DE5BE8D8609779F14587C4148091608CCF8AB89FD2CEFC95EC9A1815E47D646360952E784A390AA0EA3DBB274D5FA7EE6CE6E0E66E29CAE59E01E6BADCE09C3E1162A127E430DE +Ciphertext: 2DD8871FC710461C9277E4FF69378BC90C098F1C19C8417DF23B09A0759943A6B19684A4053693DE7B3B8212308F70C07B4DE6A87EBB70EB8654B09F94D811951E119B62667F8FD425DF256360939FD67754AE80CAA8705B3968F891B3DDB56AC11A92AF9CBBF5ECDF706DB877D4886C3B4B0C9D2939EB80D1110A30CE8003E8803CAF1B57DB4C1D917EA4B3BB3BE35A66AD6163C99E71F75EB114168733860C7431F1C05A284FB6C73A79FFB6DEF3C8412EF7B8B3E799E0CA8C934F +MAC: F31573CA935EC0F9E22563D1169746B5 +Test: Encrypt +# +Key: B68208838940087E89CE29E8492D4D066AC63599876622D20ADC06DAED15B8C6 +IV: 91CA404374DB0CA3019B2AB5 +Header: 0C2AC3251A8A2FCBD609 +Plaintext: 72F85B8BA6A2AD5B2FC5767EA912D48E1A80F0EF5368AA6608043277603C6154E416D54196C999B25CE2E7C471A0B4A6946B5F7C2044C123AED1A537743B8FAF09C0C83211D8133D99B320050565E975044BFD9FD5A5C4E6C2AD787709C709477264BA690098BA339BD5A375BF82E31776457A5AA9C52B79D8C052EAACDBB30B69F1BC5CC14B905F4BE9E775DA5B35726A3994E1C1F42EFBFF5267C7CA0332718D3C22DBE7EB4311B38E0D09C861A7CDC8F150922BA730A03AC67368 +Ciphertext: 5BFC284FC5089457173ECF1340536D658F81849320E37E40253B30FD7D45AB9E96EBCD67B017F51EBFA1EC5569B2FC62E2BDE189D4F69A0E9FC33887984E9C50CEFDBD3918701139562614C09407041387016E3D544858ACF20E7365D0ABDDE10409F006D99DF0F3B9F20E0025B6A2DD5227D7C3F9F40FB0FA73B80F6131DA33A6CD67E18FB7DEA01FFBE959A62ACD2D57B0D66F062FC1FC69FE9E382A9F21A283B34DFC05CCE640A5C2A687AB788051A864C53992253DE30800602F +MAC: E897A9AE98B0005EF7976FA6D915E236 +Test: Encrypt +# +Key: 339F24C172DF3A99AEBB1DA74E491D055263C629FD5F191FDD74566651179AAC +IV: 514AA4A3B1295C90DD20ED72 +Header: 0BD875FD6F2A146EB25BF2 +Plaintext: 6EBB45EE33D5CD25A740C15407762A72C73CB192748D80C3596045CD8BC6606B3C9591BC7D1D1BB7FBEDBAEB87F59C51F68A9D1117FD66BA40F40EFE69C5C43B4CAE27C91E0ABC64056E7286AC9681336320708F0003C497D2C6E37CAAB9E831B5DD0D973A15E5A2C1B8B4102C89CC7F9A501432C960D1A669CB0200356F632EBCACFA816F37EA5A3FEA9A92FE38EDC379F7CF347517ECA592FD74EE4AD27A900F3F463906A7B0908B1A20C295F586E0AD2DDC98C32E150D8ED722BF +Ciphertext: B426A80A2FF25CFE3190B7044CEC13CE4BC58C48271783BBE807F14B0207F340636AC4AB2736B6B269225EC9FECCC0FE97F2C53195DC47102AAE2A8511C54131DF6AF374DB579EE9EC8818B0F45FC826FFE09DFDDD8F2DCCFA2C5DBD16D7D96054FD6C88FE5D640E7FFAB4EF93C72C516D58F46E55E32445E5B1DDBCA6CDCE0F9524A55BD0CD61C4149A172431225CF62254E36B21543E7FAF4B149E23E26384736B45EBA0662902E91B2DD1206F1FEE0A1DBFAE8956FA46DACAB956 +MAC: 290B9709617E059BEAE63D71CDC18223 +Test: Encrypt +# +Key: 5CB73D9C921DEE5E38254FEAA7EAF28FD2070AAF4D1ADBEE580B14B41D27084E +IV: 45D49DFF6BA332D0BBD9D03B +Header: FE94C7767D3DE1B7B5EEC0C9 +Plaintext: FE282C0B9A0BCA906DB793087C872994905A6B897FFA18311BAA5B2D80C823C87CA8D00E8C6E3FD5DF49106E9B47C85C9E4B4B965B17BAD2D38D631279CCFE29197AD47E9D751BBEF6F993EF62EE08F2F0DF54F2CD1B80C7C369CE05D9D8B567692075618E8E4D32B40336F2A34FE195DB1B3888EA9D8B6BCFDAF07824FF2FC1CB1445D0F2F225F16ACC170B4272D90365463216C8CB0299653E23BAFA7BE21850B94A1A98FDE42276480B01812B5C2DE7A4661D03E892C33488A2B8 +Ciphertext: 5E573CA82A45785287ADBE557E32BFD8BA414778DE8080202E9D64817F7E9842BF6D6A1FCA3650EF62C82C7E740891A3C050B11E576A5FB329C05549A37F8D7815979C01D0EC0CAD598F0F9B2083EE6F7F5CD17FDA36E0561966D1E64B48D908A6F7B5709778A1F3A6109ACC074B0B245C98E02245F2C2ACDDA2DCE75D4654B2AC8932B1DF07B7F8FD943A3DF6A1A79EB41D4B32DF18128CB821A8D41F11D82394447AAEE6010EE01E2ACC4E9067C15F513FCC17A69AC84ED9644E15 +MAC: AF30023241CFB2BA9334110A371C2DDA +Test: Encrypt +# +Key: FF8F612A2AAD38ECFCF3ABFD95332228777EBC0D1BB1363F5D7BDF6EE2985EB9 +IV: E54852D06D21DE0220AD6705 +Header: FA537FC0E188B9B6B0793E0E2B +Plaintext: 95D6F936F4BD8F01CC7B1BFDFEDABB6432C0F1FC053FEF5424564831DA0FF849EBD103C11B73E372DC6F61E38334E6E6593B6B9563CE3B762847983D5C512A68848A7A3FEF0306AB2928A66420CA86162E6F7F903483075481187E084C94C83005163A0B56AB2CB655CDCB842F322BD4B79DEFF507791EAB50C628A4A873A927E047D107F8200C263A85C85A3E3175B7115FCAC933BBDD4C0E535139CF4F0CF12E42F5DAB715A468CBA9E20683BF502CDBC33FA4E119A098D8E69A2C +Ciphertext: 9F843E414B9D7236978FB20DC98C9CB7303E41E721B69C5AF0D7F93AD523DB62A2C798A6CA0F1B33745E4C9C9F601ABE2CEBF1E5F658BA06C15D9E9962D954E004CC2850B44C7D993F3A031FF7D40455F5CB3F26B232C85C4A03B861087E067EC905EE2C87FE9A6E475B03B582C43B64ECF9B31ABFFE534F9DCDF904D5BD04CD7E9618A2C64A38B9DD517F3D5E7EF12EF630FA9C74A05A38ECA3D58721084D035704E55B3B11CA7370C3405B8C0BD6D4783EAD720B37EF9954C0D368 +MAC: 68730552EED331AEB815312FD83DF518 +Test: Encrypt +# +Key: 595BCBC2E4B460AE8D7E93847CAF017E46CAEE582E83AF18D6A2F715C9EAC472 +IV: 109A9EEFEDBE95D882EA0169 +Header: 964D0D1150CBB7F80BF8024BE2AD +Plaintext: B5EE5AC469029C283A75B42F19080E4999BD072417F2A61991F03F3378577762B20C15F94A1C7A74374B95AB88B29251D0A25FD405E750557EA5C167A8F8F5F58DC0A15E1EF833E1EBDE67368921B69EE0D34F6F2334CA07E61D209D7C03775673E70493D0B71BE94EA43E8F2DDD9203F83F292B4B97AACCF235E1BE35A9E4DBD1D4754F6B7CA8234B4047D83E33319A8B4BBC64A32615C816B1264D0EEFCFED22C48A500B5955EC81331B5B5D527BF9872FC8413EEDDE63C2EF066E +Ciphertext: 1FD3CC716E0AF910CC6D1FB19994875AA5EA36B9A9D23A85F47F579255FF4CF9914A22A38DFA00C6452F7D0A77C2802B4E0D292E9F73E00E1DBF9D21DEFBEB17788331973AB5099929CC8C614276355205B9D805D2E1E23B521AA71F62311999FFCB81ACEFFCA67ACDD8DE07410E4E076627E1852F6AD1A549C35C87896DEC5686E6E530E2697421892B5DFE79FE55A35DF33FDE1D023DEF213212739F25E1D2713EC84329907B602B4C8CEB54B014A6C5D8C7FBA45C2F2753C5D8F8 +MAC: 226C11EA56530C4E9B55BA5EFA8C7E23 +Test: Encrypt +# +Key: EC03B433EFE08CE15EE41BE7A3E77B174C5834F20AD23CB4F58493AEB3D24204 +IV: 70BBC37FC16D1A11C3838B79 +Header: 3C3BA3929C2E9773B06A703C364C83 +Plaintext: E650B415CDCE67E7BD5C0A2BE507A9F612CCBB0BDA74865D127C50A369762B9CC607C067092DBF21738CBBD20CC67EC4462A5F6BE20C05F9F2E7F4B38BE8A9ADD7DBDCFB52CD5E845FDD295A1CB1E9E98174E0584D4E6AA13E9B92BA4CADA1956EAFEEB5BB09DCB4105B46DF92A58F1699B6ED39D8AC8675701898DC26320FDD5AAF145688259A39DA54B50E3C993F28974E9307F5E87A4D326BCB5CDAD6F76EFB34935DBF964332CC4758A184BCEC2CF8EB2DCBFF330755724CB002 +Ciphertext: 543FE318BB89E3024C116DC0735DA2138B1726B21564CFF0230E764FA2F101C880413A71CA7C3A635B9015782711F51018AD1D4766AF7B9C196A2BD5084E922A290837C839574FA1F47FB264802D97FB7A1C96D54136F6C89DC0F73D4552A5D2C8C2D3017A2FCBA1BC2B8CE0D1AE7AE0062A58BE40E03D781A3FB348BFE6BC9440D05C3783630ADA1C3B5789F2C3DD0ED41C7675C21C10958C1EAC0B3A55809B40A326597137E0396845B90FABA2090A3FA0BD1959809972BBD91106 +MAC: FFE1F275BFAEADA7AD021275F51FEFC3 +Test: Encrypt +# +Key: 8A9107E9564923B5EDDC749D4657CE1084E501256B3CA013B54CD988E7555BE4 +IV: B32EE76661BDF20F5FC02E81 +Header: F86E8FA6D6C69660D394AE0258C33939 +Plaintext: E8720699FF146E48FFCF3876F8E60CB7035D2564291261FD5AB8AE986F416B2D264A3E9BBC81CF3DCCAE20EA4E9F58CE850F7361748989CC11532A861D8044B716C9AA0B2A529D6BBD830FD712B7938F1B183BDF1B2B964608452D3C44CB7D20A1894558986B6280AE7CD3A25E23DEE0098161F27B3F21241069D68B84743900D6D5D2C4347F992C0BB2E215D391CD3AD645BCA926CEC3099D601F594958BB49F27B846854A2AAB341CCF766368CD6E105F8231DB5F2CE6AEF06000C +Ciphertext: 378970661B5CAFF2D20549C9F9D93879CFB58D19BAFFADBE029795D99BC6EEB96DCDF9AEDA50C64787176658387611F4D6F72BECCF04AC989C8B06D1BE1E69049C260F1F179A06AE40FCADA27319A5C02C396D970E3A501CBA01EC033665F14311C3D7EC8E4279066E0151A68CC5ADAF58B04B9475824FA2BAE4D50647764D9FF4BFCC346B28EDAF8382124ED0ADF24121D85E0C1A4F32DFF43478197D19FEE0964AD3A22DBB918122B47E12F52154D5847DF524EDA272C260F56E72 +MAC: 67A946DB8BB3C5EE455B7A1DCBE48CF4 +Test: Encrypt +# +Key: C93620F89DC1081276E3FA0218B8E1945A0A6522FAA51DCFDB8D067AAD3258EB +IV: E9CAA74A26C780668F560524 +Header: 63AB9002BEA36CB4B7AB3E6256AB72C35BB454293DE9632A3332A708AC44E9 +Plaintext: 0358A4F37B65F2728F2C68B941103272D219E2E2803888CF5921CF863A6708BC6BA646F48D35D422E5345ADD54A5FFA77A8F39154EAB9C8FC79EE437F5C85DEB9C7B717EE7A6644D0FA2B5117705CAAB539ABF886350CEBEFB9968839D6E4E1C4F8DF2CD87227D0760879C769A5141D936AB03E48275F1A9A4152711FFED0F22B690D130A3DCC1299DF37BEDFB60FDA01DAB3986CC6A5095106EE3C6D3D26BD66046606A452A7308813393B9FABA18A53DCDA6640EFDE1E292FB0310 +Ciphertext: C220978471FE5748BB924D29DB42BC736B854DF47FA51CCA02C0A354D364966F913DCAEAD33FA0ACF66DAACAB818C1614FA0CF80F1819948CF494C07A4FD6CC8BBC3CA9A411C65A52744B9240203DCB9E2063CD2D0880F4081BDAC3A00A360BB9AC8DD9872666E57E0CAAA7266ED9E2F2970FAA835B596F3BEA9E9273B1C0AA8D806F43DD1E117659A467ACCC97B45C33AAD0E659BDAA66D521B7941658F799FE4BD4F334FAB3582E616AF96F341D30C50C84B2099BD18FC68FB0252 +MAC: B22815F126A8D56CD338DBB15552E69A +Test: Encrypt +# +Key: BFB627B5F73D46BD2AEC520AB795D84F15D2C2908DCD5F6F01812F97990DBAE8 +IV: C2DA234C91F90413BB24DD09 +Header: DA7D7DD43393799270D8D1488777B55BD9A806EC8FA8BB417F3C57DADCAFB7446C610215D158934484C82278A124C11570467F0CC294A2ABA22437AF +Plaintext: 26FDDF75E8DEB43BFB07C4D0EAD35EF53A121284A14997DC2F3D70F965072D42C1EA24760B27293B87D910188DBF1A318D78A81D62E5BC358178F524CC9064CE6CF8A40B2F1214AD67EFEAE7289628DE7F39D0D791A4AD81D3E6D6DECED39A5D0FB8977D0CC7834FD236258CADF2D192EC606DBE80985273DD3D4B6BA932C6794C672E84E1CD3FB1481FA5C4A28A90D0E4F893C9F569E697207B88C581F025D9D9193304F98102078593D8CEBA8AA39F0B687946BFA263A45D9BF800 +Ciphertext: A6E94E8FBB29DA26B73444FF4D43556DA016C2F9D6FFD7A49344D879DE06145561C0F47A87B4C6CE1A6FA8566FC77A608A0CDA950FB24BB72FF07327A17C64943D96F80492F95DC9003FCA1C1C63D8409309509049DEE0C3B776A58AA5624A4BC580173611983D0A29276FFDAFAA4B5A4EDEE1F99C40381552448E1A3B1EB8F47DCC4B1A5AE5F7CDD75AA5B165ADBC44F2126F2342DC30836135D24F5E57E223A0673D09414F2F15E1AA20CAB944CB2926AB0E0C8120D174CBFF1E21 +MAC: 640BCD04A3A8CBF03EC5325E12EA5D1F +Test: Encrypt +# +Key: 2B275913B475AC1482A0EA7C412EDF63DE7BC36B8D83D198032086277D0DC4E8 +IV: B866101C87DCD2E6675B9D54 +Header: 06A61796B33CC980FEAEF7F1F33CE6CDCCACCF63E254B3DDB435038C4417EA58FC6B85820536EB88F48B40E7C48418CD9AE42DF02E8B142A99D38CAA2CA34B52 +Plaintext: 6EDA9CAC44F61AF55F47454AAEBF2DD983A2F2A86DEADFF1BE68C33B96A5A12D797F27CC4A90483F14652E32FD4998F54C8E347A6B160B1824F36766B859A89AAFF90856E7DB787FD45B48A50D7564281C696E70224499D0D6841438904776C4559708D6D02C2912C22098693BAE25D68CD39A174F68175425CE81FB2D78AC4F8C52600C0C056B304EDE47D45F3050F822EDF7E51C30FD908D591620358B9418288752CF7BBFB1E0DA429CBFEFAEDD96012E3996AEC31695FFC47B40 +Ciphertext: 6467CE9D6D7CF41DD91DB0C0E40C522FAA7A3201E6F6B41EB3FAAAA2AA317A94DF9CC8E88E54D570A50238A81CAE692260AE0D6E6C2B633EB875CDCD85AD77107C751DBC158428E490236AD1A68E7C4422688B20CE91AACCE19359E4C6301DB77FF1833BBF19E99403C651856E53505CBFCE08E1E82E1250FEE101CF3F710F95FC0EB64A5FFFED9B9D50F2245ECB16F2E1DFA2D1EAEE5FCA2DF4F8929D130D74E9F99CDA26C68343F8A70B554D497801D738E1B6B0F257E91BF0E3C6 +MAC: A91334CC3789C7A4EAE53308863CA696 +Test: Encrypt +# +Key: CA5B75A8E14E88CD766628E337B0F5EBC2EE73FD26B82DF6B97375A98C2698ED +IV: 1DA9BFBD5AE32C810B8D62AD +Header: 41A75AE71FC9CD2C19F79914CC45C19FB46E5DB6CA0D1E9CA836E0514035276E9BA93B1DB6EDDFF957BD18D3946B911A3711B1F38C675ECE471CA6000631B4075CD577D30F0FA84E2AB002A141F487D1FA43917FDE19B9B579C778B50347 +Plaintext: E4B38B2E5025166E85A10C49962287DB172D2D64ECDCDBBD22ADFAC7378B5D47A159388EA1F40EEB53ED5C80EB87915D36D6CA8113B267238E36BE0FCBDB6EB7375E105DF88B552B783798A1EDB5D883FB15D49454A7AF98740010F6F9FEF3F496909FD7372C9579CFEF7DC47CD0AA607CE17B73B9BA7831167446D2DC50C48878191777464086455D7959EF8321F022EEF8E40C54CAE103561304BFF3730F58A41914E5E5CB549295D98A68A856D5D16DE5BA4BCEC4F49E0E0E9093 +Ciphertext: 01A374DCC84B3ECF3A0A412733E28E26429F5C45F6BC7F52779822597343C23A0D7548E49B1B06EE77DDC3276AD23C623B4ACA9A77B574A9C479F086C95300BF7BCD4ACAD99C83314E69A8AFCADBBF28D4FE167CE4CDACD1C1A6F25989259E8CB8966CF688445551EA079009542558E9814F16B059F06D7779A21241C7D15E0A994C676D10364F3E29965845AC7647610A05F4C3526781263F8168BB6D7728E6370F46C9364F0CC43D60EE2CF147837D6F33E17E1D00D4493B7BCABE +MAC: 58930ADA6D32C890D1D56145D52E7002 +Test: Encrypt +# +Key: 706D456B5D2EE4530BE595BBB10FFB650BB7F4C691840DBE5F3CE648F2E8FC62 +IV: 2F64D9EE7D00EE0A9F621FB2 +Header: 2ED2D2B0C501267BC5D6A095CA14A4C2970C394CBA346D899FDAA546164F3229E299AAA8FD165CC10D81BC7643A058AA63A37FDCD50F9915D51E27269F000F4E618479552E3A8C46851AA4E41D1EE365CF1B276B3EE80D330BC528DF46707922F4A574038E07A429356A570B +Plaintext: 2C4A90C51AC60A445CD90BC15C5A29D1EA024ECBF34043C6EF82521A2F8F158DE39A93F1CA16EA6EBB4D3C93435E7B03519E6D289B40EB6AD85313CB28E7CAD9F2C57F38EEC071BFF0E42B6BDB27A43EB7D8E0A6F44EA6D6FD5D1AEDE7D4023EF4DDF8D7CE5B677E6158B30FA26834C911A6D913F4B4C3544AA634D3472AEED1776DA10655D1E2E50108693A7CFC0C9796F50219079F785126C77B7FF7D71B5B7ADDB3E5C65CC3B013AFD3DFECC8B79310987499BC6F10389C33FAB5 +Ciphertext: 61C11CBB967ECF1A504793F1EC0E1AD8CC697F74C65CE667866B25B607BC4E5EABA557E8DED98A106F9342FC60429F34890128E324F8072F3F0AF1E1EBF9AD1159D8AF80004F651A013FF750D21634E0BA622969528E6AA346F96D0CF29AC4F8C98A5DF208EBB1DF24EE05ADA8967329E354585DEAE0A67B22424071D7FDC5C4C20819F6CD24E33C4C7FF4381002F560926D5362D47EC37D5BCC66CDDF5EC70FB9AEF398D2FAE0459F6BFC8072465C5975A44ECC610565D4E8509A2F +MAC: 475D819E269CA2BA2CE0E82A491ABE8D +Test: Encrypt +# +Key: 330F109F3DA1379F01B380C4444EC5FC2A09DFAC32A56DFEE971864148FFAC88 +IV: 00DE93457796D82BBA096F1B +Header: +Plaintext: B9BD6AF8DA848B11ACDEF05E7C2F6F5183DCECA32DEF4F3278EDB0C9F6558D318B15DE87BBFEA1E1323E3C5383B431091E9360163E69363A846F97AA6236CFC20D07172AC8D7FCD9179516DAF02D3140F5DA80F860B2F2F9D3C5ABB235A20707DD6979B5B2925EF2406A6C3EFE66801B87B5A5DD2356E679417648F080744F11707BE2FA260AA6152FE1DE799C3D026EC224EC2E2DF7D72D7EFFB4CFCEE4F511AC711AB3F53F2EEF0E9053F3BEE14D5D77AE616024F322DC256D5F312ECA75C26D9BDE48F5455486E99A268656AFB86A815EAE05 +Ciphertext: F416E72FF3DA0DC00898ED28742FDE9C1CFC3AFDACFA039142FF9669B78840F17410D8D4EF93FFA420F344BA44218DDA0056685108E9418F180D985F42C872DC798BBCF2201D1C64A7CB176CE0C7E76A97F853C0AF7041A6FF4160E4205B5F647AEBBC22FB7D74FA56C832E9CCE1232B4B87FCB29A1A195F3BF26BA4B017BB14EF55BE0881C77547F61187DC1ADDFBFEA61A2B56F281DE1925DD8B4CD5DDE814DD07BC05A4319E390BAE58F3AFF14EA86BCEFC6474570CE94B4E7F525B3F58246BEF7B499D81A2EC24336E682172A2F1E6B39ECC +MAC: B94B9A25551EEBE41F758B6732429193 +Test: Encrypt +# +Key: 60A8CCBBC4A3A5E3206CDAE5CE749A704CEADF8D350370DADF40151BBF5281BB +IV: 2DA3D4DC45CB8AD31685D11A +Header: 79 +Plaintext: 156001C595043E088EDC8EADB3694441DA8311C324E60B938C8103B00A404617EBDA15707523435DEFDF940642AB478B49C1F10F44BF89F09FBEDBAB5A2A42D40C4E5B95630EFE347836EA950B3A4EDE32A0F6734A07860628CC9F87995F50BA3F575EE28389E8080674040A8AC5FC6CD9E75AC1239B3A2B64240669E03882657B52270F23F9E3FA8D119350B8F80255415EBEE4D2556BA97E2213F5DCD62B3262F74D1CDEE2DA87DBE0F75B78172448AF63156B18FF8D3A74FE3E0E3E7D5ECB70730CB19C03B7C11DA4AEDF6A28C84E5BE6573A +Ciphertext: C1BDA8B3D31A0A66FE0DCDD4D37505DA686C083644C19A62ECDA28469C372AC24C4AC88BBA75DCD67D776BEF38DB1FE4F7D283BF20478EB84E2FF6438733B5A00E7BDE512889F24AE4DAA8A2B10664FD213B0D1F1FC1E59492E5217124D029FF869EAB0D7088400CF722C2CD48CAAF322A72218936BC3DE5F154803CBE4B01AF7CED7E482ADCA5F44E6C1FA38366D3672F257FC1448E6F728608894422742D0C2E9175C512C533BC3E27BB0A0318A7B120C26628EC4372A3225A9B8DEEE1032FD6A0A6EB1EC9309B2EBAE9C30ACEFDAAE3C107CF +MAC: FA1FDEF5E95C4CFB75DEB47A4E8ABC3D +Test: Encrypt +# +Key: 927C505CE003A20C946BA87805D404D72A1690EA8BCFFB3CA5BDE7208C2D2F39 +IV: 76C565B18D4242BD2CA04A00 +Header: 880C +Plaintext: D073500DAA15C155E4780BF4CF2BE00E8F1C414B6C9252856200953603E14D05BC0AA0594B36A99E989CDE875D01DD30B69F623F3BD31A18A0D5D7BB4CEA83B81EAF9DD1D08B4277204188BD4A7C160E3C5B78D0BCDDB9222052A88CCCB814AEA40A18C2E52ADCC867DFD040CF43441C28CAA093A419AFB60CD98C95B96FC0CD5135A1F7D769CB106AE993AEF197304C5F16A6DDD31351E8A8E6545AAE4C5FF58C186C06C7A7D886DAB285C962E6D111AA8B9BD2373774064F80F3BBF7F30044DFEB523EF52DD4E8A6DD82DCC6CE0EF8BCFD6CAF +Ciphertext: BFCD7AF6C72F59C94CD5655B8F34C9F6B655F1876DDE4E8FF5272EA3ABF82A88E0DDBB13B78037AC1F911C0F51E4294190396BD9E9F72CE513B0A17212F6021ADDCA3FA6EE94B83B4578235B5BA777291E600E14EAFDDB206757A6CF979E287A198A4A1D04BD9F424E8B6615FF341436D14B729C870CA64FD3A80AF9646EF64C2273FB5CFD042FDDCC29352F216C39C7DC4C789239F029EB12D7B99089FE81DBE9B7578E8BEA80EC9714E33C0E215827A1199E746B0B2FD4038CAEA88289B6CD42D5C8A0D95BF57D2C13C6D0E5759CF4FA2F2117 +MAC: 43803D3E72C619B1B48E08724318393B +Test: Encrypt +# +Key: D5F386E5BE286B6AEFDD080BA46DC9D7B7FA2FB72FDD464B5B7CDA4568B85AFC +IV: EFA2DC8A3B7D860E4CE68FEF +Header: F7E6FC +Plaintext: 62CEA63E5A592D6325B51CF77D38499F04CFC8E90122BDA6D3E984E5C1226EBEFD14DE271F6458E827FEF1CFB1F45A1F9AE51FD410F7F8F3F4B2AB283940BC0C422C27D763C1738E68050332CA730B32C69B05363E9B45B0E444D3A0AD6D58ED1F00B9A63714D3372A1E0FFE2ECC9059EDAF27F646052E7907489E048596A65E2D96588F15CC35F7F40289775EF14A45F63176C00A20622FFF447FA06DBA862F73F7AE0B2476A17395AF1545116E257F61C2E15E271EA5D71532425736C928B7D7AB33095EC5719E686EAB1A868FA71D3DB8D3D5 +Ciphertext: 5EE1BB40F5F0030AEEDE87D1EAC5ADB978BEB24E50B88B57CF25953022733B48F13D46392FE28966602A4402F9EAA9EDD470D11AAF955E3FA7918CFC6037CD9734C1260026B5351052D27CF7763138B4F0F3F22649C532DE002DFC7F1825DD28D5E225360538D5097C342F7DD89524179754DBC410308D0F5659013E9575117F2289C4A3A9A13B7D156AA16B215B15D763023DAC593A28626AD5C7E9B9CACC01596E44658D8DC77AC7BC1CE1861E785D257D15A996C70020743176B9F98F785634173AA9A7F5B8CBC859B5B5DC6E04EDDFD7BCEE +MAC: 7BEB93EE7C03B15FEFFAFE3AD9047517 +Test: Encrypt +# +Key: 5EBD721F84CE7DC94BF57DC4B4E15A319DF31D4D350FC79EDB8B6E86C73FB7A8 +IV: EAA8EDC557DEDE9665864803 +Header: AD8356E5 +Plaintext: 784B4D696B2061B7C712EE01A25036B4513C2D0E640238CBA0C5E869E41BCCAFB7CB6FEA432E51CDECB6186923A3E4F0FAC24702432DABE167908932B8F86309B5A127628FD47A3A24AC8649C6436FB2B832F08B15F44D2DD13338FD5D36D8B02E0D45BCD8413C417BD8A2877FA70C88FE81AE404EF3C8628E5D265465184CACFBF6EB360E00273E2C67654291882F86A37D883218157D2CB1F45DA0D530628BCD7585B6E840EFFD5F260E0FDAA879574C589F8CE582CE292938CF1D947501280A3407DFB1B58CEB1AC2E9E154CA670A978B3E0D +Ciphertext: 8E9F2C6597FCC92D527DA6E6C01865E413ED24270442BCEC880F723A2BB5CCEB83B92ACBD27003CACEEB794ADA62223B355D6B463833696E582E6702D863D717FB483715CEBC50CCCFB24C5A45B9170E34A5879248FFA045D79B924F794F5F9B915BB703ABB544DCE096256CCF8F2993195F4463A1DCDEB7B1AA811285B66709539220785C02FF904DA337B7B459D4620E415F7A30A31948AD6B6FF9A7ECAB63E11300FAAEF168529F4FCB2A6BD381AA239348E53C90A9D2D791C2D3CC831520969FDB28704DCF14E22D75F04EC49F24CFB357B6 +MAC: 966DA10AC45543C1EE4CDDFBD6BD29D9 +Test: Encrypt +# +Key: 7CD7CAE163482087695F5E38753E18C4A02415B0FD88C8B13522930E53F67F01 +IV: 37391F3F4F694610CBCE8FE7 +Header: 3904863EEC +Plaintext: E42D30804A3E4CBE86AFCF9501CC3C61455C00ADA07BF1298810FA9296D60838133A347A66A43ED26DE6636A656C9D98FA932019AD1DF805A787A7B1202DD8C6B7FC35DF60A1B7188DAD19A79CC4A9BDCB17498EECDFE11FDDF38D511F7CC9B31911E40402CC93703F556F1A2C0406CD376454C1A7CB0775A3B383EFAF040CA9CD590A5FC1D366C8AE27161AB990426D2D82D74EB4E3236ACC137EC28FD8A22EC79F798A0DC0E93FE1366612064CCEA895D727E4EB0DD43E6B9C26D748143CB0378941B01200C7DEE4EE37ED0E58DE5F7D86F77D +Ciphertext: E5BD15B804A7D888E3EC7F163FDF696AE81562228E79339FACF54429408F1293C7982CC224408FEDE8280E507797BB013CA5BC843ADFC726AB1D007A660D7A78E19FB44C70466499E75A591AB319BF1C9C5820305FA2D7ED03B2F4DBE6A1DA94D3DDF32F3A36126493890BBB212E5718DCEB9CAF2B83CDD2248E29310209B67FA1734C7184190FE51FCD6AF807A90A5002519E438AC4E7F084C020E162BA3BF37D2A881E1C6BEE51162CCD0535FED7D077B61A53DDBDEA84DC0C02BA65A2DE51ADBDD5EFB38DEC420659756C96E984F7D6FE156E +MAC: 2769A146219ACA86713E3AED7AA50551 +Test: Encrypt +# +Key: 68981A4B3E922D4919CF7FEFF5227B014EE41904C9FA23259FDA65F65F7C6C88 +IV: 89AA2FB5238EF2AC9730FEF7 +Header: 446C2BB34449 +Plaintext: 1A235DAA2B3EA609851F8888EBA1FE70EAEA545DABD70A5D4E5296DF982F4C17BB1BB2B15C8E445839261F27EB830609836ECA759A9D2E989234E2642990903B3A115729CFD587087B7BC86CFCC2D1A680468FB501F93134C96ABE3E1A20B92B49CA32E2BBE84663E5C687E23216F98B0DD4A5396F29D290E34A75A9E81D7C7C13DE20FF453F8CF20D6140F2BB310C23F5C8E5C10523AD4D43969AB4A73FF294E0EC1A2A69CDC9BD8FDB8EB9835A64DA29D03DBBF4DF3C1D5788BF52C04AF8839B2D11D66F096A2482B80449D5C7776FF8385B7A +Ciphertext: 2E4178DCD1960D2127BD70A5A7478922E7FE8954092341EF7AC9390FBDA614BB73A7EC680488773D377D49A4E13EC706C24BB46D9766A174A4FAE0366C525DC212ACCC840F391CE60C3428759E810707DE204FB5C4EA0019C2918B876A3907AC7631EDA3C7B9ADE2A0DF2D7DFA2AE6F29EDB1799A2EBC2383FC7A3D53C598670A84A68A127AA0F86303691221A9B474805BBB6A4776C295BBFD8A023C5D8C498007B099DA490754FB510CAC6DB4567432E2F78B556DB642016C320336142A847CAFE83D936BFDE3980F500BE8D4F7268CDD282A3 +MAC: 152831748713BC54E2B22D575BB382FF +Test: Encrypt +# +Key: 7E849FF2D366F35F800BA085FAF3062FD7A497A1C25B29D6051CEACD3DD8CD2E +IV: B7FF33E28CD607D14FD7198E +Header: 70ACD74B77BDEA +Plaintext: A450DF784C5C55D90F52BEE310C19C704AF35D209E04FACBA0D0A344C538A0781916030C2F09974014B46EE95FBAFB17E3936CA4C88223B910132F8FEC483466BB55445D2D00A52D7D7398DD9AA3C4EEE8BE4C3C262D953F47B32C4E092253D126A897CEFE04CCF98DFCD84C410028B9EFEE3D988DB0B0E74516DF0FCB6C85EBAD6A5D297BC9B69DC29EEAB844320F62F83952AAFC169009F1FC84C392766FE988B7FF73E65990E1D636A905F9C314FB6A7C925686E2DDCBBA59D98B5EC2CB3B333DF96E69A77C71A911BFCBEDF9FC909D1C46F4 +Ciphertext: BE4AE54DAB07F2F3D1A58262ADB22A33FA1B0C6D8CA77661AC52AF82C8102F21E0943531BB54567498FF053BCB59FFCD05DA031F4222B937442F4EFDDC8F620F9B78BBDA3A6EEC7ED490CF50D4326C87766EAE111A55F7AF2977CF215FEA17E8FDCCFEA09EEACEF229F7F1EBC2EC3D67869FDA9C4F7592555777327B3FB79054B57FE286A4231E97BDCACF9B755FA8EF8E03677BC3B229E3B28E08BA597E8A84D0B23489622C41D268B9CFE8D5F1F48B13C7A1E01F3CB78D2309A2AA82F2754BAACB71A19572FD8883A101B5CD511241B2D2515E +MAC: 6A69041C4B15BE475130CB638A6D83C8 +Test: Encrypt +# +Key: AC72467007E0475831932222B17D1862F9FA09C3BC169F0210CED716944E633F +IV: 49B520AC12BF7294EBFB5103 +Header: A387E22AD24D32B2 +Plaintext: E9896A85489E085079C85A34E415F078E220830226E1F7270C945D94D4A322E1ADE657DAAF8B2C4E4DB61B29613B9B55CA1E1FE61B1352E96478E613A258346166ED7F57CFBE06FFE2095D1575E2CD3644147BF41D8E1CA9C62A57EBA75F62FEE5600EAAB2FE105D7B050784C9A10C2573D00706232F0C6EB6F0BCE1D31F5B9A8AA8CABF0FC786627F6CF31CD05B7FF365B7A4F1DFED77C3A8B5F21A1DF56F8A3466FFF83343A3F8EEC1E850DFCDF6F4327CF0EC0CAA83C799F32D7A92B69EBFC1AC14C8E453D1E1F4A599ED2E6E534F6351D002 +Ciphertext: 695AF8E41AA31F2DF58EA08529BC83253BED55868BDE4C17FA0313B5B93414F4D7D1BAD0276D47C2A7A823490974CC2DA7A5F29B64EA06F400C3C9DBAB617B43E1063FA85FD275C7896F7342BBBD827A2B8E8639D6CD247BB6EE42A08EC1E646C8C7F2A92B6FD2C524943B32A0B02A38FCBEFCD004BA4E6EDD136CD96E8AC2A2D2AC1DC407477E4A242C742FEF6A3AEEE7B64BA1716EEE95D43331C2599D95CA9C08896076EA5515DAE2EDAE9E90036E4375FA3319F367FB1E5E53A9D779D5D96C7C6F7D794EAC0ED1FD7137779C9120E2110176 +MAC: 472D0174D7FDE501AB57A0200140074C +Test: Encrypt +# +Key: C60B65E3CF27C44E41B15B16460A591C91EBE18B049FCC84B7DF9E87666620DC +IV: 68BA93850D8D881D46D9403C +Header: 5665E6A438E5B00BCE +Plaintext: BA2F0E9C920952A64A1C042264B4DF495889476C2E63693C0F1232F0BE0F8DFCB54128C5D6E802C43BC32E1ECE6A22C92A2666B731231CB41B6AF9EBE4EA8424480144B573A0FEC066F2B364330BCFB83C59A8EE404D106F25E001492A7B7443D23F36D771A316C464BE97E9EC3444F110625DD5CF4EECBFCF8EE62FCAC24DB5385D6D7A64D98B36A5CCAA7FE6DBD6A3B3618B4059CC244CBCFD069B2CA1166664D629E52AFF769A6DBF5B19B01C5A2A4A4960A25CCCF576D36445DC5675ECA2ECE7D52EE378A73243D2C5D3422D2C9BFD11E0A9 +Ciphertext: 3B829901DD30FA947DB01F038386634884370B6B3D3657B8EE574F6B434CCE5149C0C45F0A9AADBC1F6376B33B9455B43C55A761CE15D02F8EF10D7E06815EB2E947234EC68DAEEEDE582480B0827F964282EE5B00337F8EC8DE11EB143033CDE360BF4400596EA29221C0A03520078F6EC7ADB103D9D68780DCEF435A0A80A60F16900CA88BB5F162FB26C61693FDB5F46E1FF9CF6E072434A15ABBCE62D5AAFD2D2A4C5D92D1D2516DFAB31DA52B1E7B1E05E3CA20A935351010CE1D92D7337909811ECBE258140812794DF7083E3C49703CC3 +MAC: 19091412DF17FA6D731C7C69CC8A1F5D +Test: Encrypt +# +Key: FE517BD203EBE686CF0FD500F2BC6E710EEED49F1725175D0DB629CD8067F4C1 +IV: 10F295F5C98414839CFD3764 +Header: 39F4A27205D4299ECF7E +Plaintext: A3C5E84A734C231C10313BBD10EC7397A85723F35801BF3CB874314F30DA617CB118398764DF2BA135801EFEABB075D6D111A944BE41E07CAF8EAF4ED2A2F9EC027010AB2DBD5B854E79982011E0572A816E4F050822FCBE541F14777A2B92BC889C8CAE352866CB428FF54CA051F20874096AC92AF3D3E94F99E4EE7C40444A399F147275B0D2751BBE91EEEFB39792CE7EA41F29AAC1C29A3C4DE9594E2D799D4717CA3498AC64B570F8F51657438840C93945DF7219C544B552176DC01EFF843DAF628B3AE9131BA128B7F99379B4ABFF2795 +Ciphertext: 34DA5F668324CE630356165AE941C5327B533E226EE3E28EE9F05983C3C52E3E34DB2A5C366ABB029C9618B6A871C358F246DEFB7665277BEB03152472051B56FAF1F6A7490703BA7CC11F2057CF4432E9288CA2216B9F06C2E6EBD0ACEEA96C12F1328CB01E1A607E7FBDAC3AA38E35FFF6DEC9C88E07258F955C2533C18661A2BC4D8F31616F8684F0AACD645C4322DB2D2B655D3467C75772CCD1908042BE6A4B1C6F03662384CF16AC48A16E23955867E21FD03048D9DBE6C8AC9B2C93A95AB2C482ED1FE9E717E21F98C86BE628513D037F +MAC: 65CEA6A91359D1D39D2E5C4E66D6D010 +Test: Encrypt +# +Key: 37D708C50446B8C5188A2C18D5F28EBE91D79B0AA4FBABF5E90EA71313762BC6 +IV: F948B17C2F6A7D896E741FBE +Header: 7D94D089285BDC767C8D57 +Plaintext: EB673E574992F8FFA7328E8CA63044BB540EDCB8BE8F473E58193E47CCC05C6A905D941DFF3038B2745134C23BA59951DCB7BF206DBB00035D81211DE1EF871D65D88D0B8C6B4998F6BD22164F40DF775792DD1297B4DBA5837EBD2309C6D6AAEBE59BD2E61EF134A27505235A177CD8A8285BF4F4ABB8902467CADD41A31A1A8874C44D71D17C69D6F9D68FB6B6E1BA5E145E8C9E875E702B8E91EF63B6A86C0C905877B29531D553EB9004E577AC9182CC2A9F6EADC529F06DB6F41275CF183C1088BD2FDD41E18D719A1C4A6556951E7B922E +Ciphertext: 6290FB88F606203A9C118301E91F7A20D5A1C4E78E0E501251E4E1FB99D99A5AAE1A4A3BCBDEB23A23A284E58B2EC00655A89DEEB69175C3D89961F4E9703086FC89923A1F5CDD0E95802EA3764405079A769FF4FED4679461185D649B7BA6374201A1B319F9889DC4C50BC3E2AA0115732CF680747402F99E44FEFA64CC04F33290A919BCD14650A1344CB6749F096F71CE40B341FB4BEA0E08427D8BEB57946D9016D63E8A3B1F813EC95B5B03A75E4F08FFE390ADB3D412C209E845DE70D4431D3A9B89F482D65DE71414FFF6B1764C289FC7 +MAC: D8BC969F311A57A0D3E00C2C5DC0283E +Test: Encrypt +# +Key: FAAB8A66A652EE199C5D707561A5B24CF1AD25992468BA586E681986E5774754 +IV: 76ED302B600607539CBC8F10 +Header: 03FB0472575A083E3548864D +Plaintext: EDF1384B0BA4E02D545839864F8034F6C807FB3CC28066CBD8FEE77903ADC0B6900658D360100128DAD88AFB1B0E52E306FC06DFBD0B7DC19D14A02CD955581E1FDC62ED8175EBF4846E29BC2F202BDFEB18A99490981892F18EF4AED6828427617435C970575AF5BDB100E00827CD81B0EEE8A855E7F6A87C25607FD8A8C6A5E2B763658F3B4896B3F7646FF7853BE23D7F4EC04F5E3523557CDCA9B63D9BA1B6E6C045F88FA099CD1BDEA2B31EC6AEA61D6E4F40FB3A5565EC0D7A052DB79C2A36A6451A6D7B4835D876E56D278A5EF2F91791 +Ciphertext: 8654FD4C69EF170511FD2CCBE4F40D4F9CE1B93A820BDC92EA8CE3262DE5B0EA61DA719C64FB681538178B6184EA37B6CDF9669C8E9DAD4AD0EFE3048F2F3F5007E675BB6B6705BA26492ABCCE90BB4719E88F1CF9F7C34C8F94409AF7C4517009932A33D64E1C8C51F7C601CCFE15F274E8B170654CC1CDB534EFC403E1B10BE684832E4D546DFBAA04E9891E0823CB8C357300A9DFE4146FC8B7ABB529276F1200ACFE9FFDCBB439B9D49ADDB284001007A994472029B3CA2A038CFE3A50639A119FF17D54E7CC119E48CC18A1A70BE0332BCE +MAC: F286B76012D493A3B89D9AEF1F0BA84F +Test: Encrypt +# +Key: 856D4B1A6EEE4C27533AB6C003D3501ADEAD5A5356461A50EBDE003A5F2F690D +IV: A71DB60CF73B3A417B0F8D58 +Header: 18566BE5569FD68E38A893C476 +Plaintext: 4341FF9323735AC1F0B35AB789A7044705754CED9255F98B8562ED142FD3DB75A6E12E0E251B862EE3B346A839E67BB56EF1B518C99CA17D8E6B6D0051C750A9177B4E5CCBAFE2F8EF94211507FBC985A8F5A790504A7161B06BD70DC014F698F7E909C3B33F2B4DAB0FE7DA22DD4096F4917C0BF47D0D29C035B874C00B610D780BAB12A975B3A999E29EA36E21F93A50683AA82AA1846CFB6273F6940B4FA26ED45A64659CAF21126F32210BE26E26E0CE9A172FE3292D84C90EC4BEDB21B77CF903F23655D8C9BEC2662F83AE001B1A603018 +Ciphertext: FED273069C4C98696E78271D26F8B56D639AD4A3B73490533F764262E0848C3E949B2D31A5A8EA857BCD0D461F3F208201BEFDAF167E7D237F80096FA237E611303D40B5BD22959BEF473C25A41D56BBE5D8F8243B45281BC9C4152427B9AF956F95148F043E75F8DAF4982040372346E9B331F00085B434E39F3575DD66897625972D13006B086E18CC0A0BF16BA48DA0D0D8F7DD54C2E615747D510242DBB0AE3B3E339CF0D3472C22C03F52CF62132FF7B65DBB5E50362BB8647E9B933500C5553A0A2B342D0485392B8D35375007B05B49DE +MAC: 88C69B353E19EC86FA9DD7759570F471 +Test: Encrypt +# +Key: 3408757ADC23D2F0B60B880F5575CF807441F0BDCBDE2FA93B00AC699C15FD1B +IV: 30732BB6B978D77D82A43A7C +Header: 81023222C0AFDE3D5DA81D099FC9 +Plaintext: 97229E795271E115D29962E67DB9BD6948E8E4D3F744D8992CDDA9FD562C89F4C1A209FF5DA67B0FE257F39C71643CA62FDE09B3942A4316BE95840912EBEDC07189EDB114A6ADFCA89489BF033F28FB4301C6EFE30FEC3BB0B116BAB96F5CFA4EA2D9541EA4BA580150118F07B0E16FC283134070BF1AC6C5FC326563292DD7FB7104329A5C3FBCAC82C9823F09B4EFDC2BBCC8404D55486EBCC3EDC19E180063251CBA89BC5094F111770C20FFFD4D4971CFB91E9A2966882718D8869613E8CA34DAB428DAFD84439FBFD40A78AAF2DFC41C09 +Ciphertext: 81484EF43B35E5E7B47AD57D2F25EA3303F59BF37E24814401847A111129A381F5AC74A092E87119FBA7155E1D9D4EC688FEAFABB8AD4D83CC1DE8E56BCEE3C2E091224970A25B510DD89B49A043942ED2408F4CF72AB512434E59B9BF6825254724874BDA6DAFB75A466D20A2C7CB130A079E36665F3B256A6D7AFCF96206141EE239A795B42ACCC8CDDF0F8F5053EE25680663C7727F3C00E47BB5CC5F892A3002A29CF7FAA33844225BC825C6781330D11CB4F0E65DCC951858520D6C01249CCC3FD3ACCDA99D4E1278A1C1B18FCAF97AAED9 +MAC: B8957A72891D59C6A47E0C9DFCF0B4B4 +Test: Encrypt +# +Key: DAB8D498EEB0EE85C6EF692E9E39643E8A04CA036DC0FAFF0C7289F0B199DD08 +IV: D064AA2452A1987C5C5D9575 +Header: BD7C380049E002171EBDC970AD3517 +Plaintext: 5909361811E398E29AC019ACEF53A5909F826EE27E5BBEE2BB0D47B2C7BFD61AA2F6D6161699EC70A72A3517576A552121DDFC56466D2553FCA07D7BD44127711DAC0CF2223CC339CECA965BD240C7793AD5D3D9047A5DD3F564F7CC3CF2BCEBFF4A4768D14C48BCA3C5B4DD1A4A9A39B974275E00C219C218857C3B02125FF93C1F47856CF0F19A2E409AA3B48CAE0AAF6B7F5D779651FA673CB0E1F4B075A034BA727824B637EE2C94891596E18375ADD707579F76D1EF84C6CD1AF308CD6594A7537CD5DDA61FD5490D3C91492498484326EC +Ciphertext: C4E50C215966A4DA0DEBF8C2521F9F4E6C76698236104F5A29A00960ED4E4903F07C850C0D0C9E1B810DC46608890A2FA8AB00F0E51230FB4540419823154E5EB9B04D4E429E39602921C0AA9F69570BD7110A1E1EED609B14C211775AF0A87FA3B4AD72CBD38CC111D73CC2AF8363BD45B5170175B0D360C68F859D4BA719585A76DE5778DC298BBE5FCFE32445691E5756B2577EFE4836A49465D1BCA118978B462BBD88A2CB71FF494187DF743647E97C2F128321EDF8C3275280BC4F78FE66746D860AE39EAD560503D45465930A4FE65295 +MAC: 2D2E80B92BF4F5D2C7C8570084B71DB7 +Test: Encrypt +# +Key: 20394EDED4FE1704105786303FB26A170CEFC55975FBFFD0C8467EF4410866B3 +IV: DC8EDFD9A5991C1F8D37C532 +Header: 0B25A91853CFF92FFBB6D5C0BDA497C8 +Plaintext: FFFE69C08FBA596970F493EFDB02A2D37C279AFD049C9FB5BDA70F7554A01103F315F0CCD607B8913CCDBC620A8FBE6EF243F9734D6D1FC02B0F5CEEA0E9B18A09E21FE7E91B04EFCB0FF2329632B7C13898E08D74465B2D8F50B8971E0D1AEE95FD909E8E5B4B0C6C6C0B4EF491C315E256D28554C4D19FB4A52C5BE512599EABB6AF65DBC27DF51F1D2E553A57060FCE112AD3E5F4AFA126EA50A93208668DE5C6BA706D4D3930A5F878F927E7C91596BF4541FAC1463651D6E8E7DBF8EE9E8728E65BFB87A81DD761BE6AC44F476B3B086805 +Ciphertext: D26DEAF421F32E45C86FBA7F93E2AF8541B150515AE539376D3ECF6B0BCA3593C47D7E72456F4B0FCB5F7D5E539BE2EC5AF89EBF1F74B14731510B75DE8347304738A55939FD5CC15491A525411E381A1436066F5A109D41109D12CBC8A21DA30E1854F9B03384EEF418AEFB4862E537235B3D3AD479BBE45CAA3C5E2F2C3792DC3767B724D1991E8B6E36124D071A94F3238CEBC5538FDE82BE3556CAEA5289F88A5F7375E22B697EE1F1643278B0D53B683DC183318A94D145056F48BBCF1A7D58770C0E7B59CD44D0B641456DBCD169294217 +MAC: 26ABF4551D2700D7DDD2506174227357 +Test: Encrypt +# +Key: D99DF40DDFCBC672E9A68191941BDD76CC4A23F2986C855F84B8E2CCE143CABC +IV: 695A9F599DC3832F300DECFE +Header: C41228C4CDFEB64CE7CCBF331576DFD95102841A684A1D383DC3509CD01CAF6C65EA +Plaintext: DD19E98BB9F6347DEFD4BA8A4F248D6DA67974587CA0F7D0A6529AEE4C8A39EE8C5003F7EE363C41EA29848DBFD8483033D61FE56CDF5748176C92BB492370F9B05C5DE73E5768A4E0D0AE105DFAA5CA7755FEDA36FABFCC7E6F2CC68FD9616927BA6CCE43A516E7C7FCBD003763ECB3645852805C420663B9A29E75D736DAE02667FCDE0C246C4044EE7E1947ABEF9B03EDC1475677FB1960A59286DF72546115D1937BA9FA552D44C1658AECFE6430063B9B154A0FABA08CD1EF3E4F8749A98C48884CF9C60E89FA6001FF1985F51C2BB50C4F +Ciphertext: F45E6F4735B2207FEAA72594C05E4D9362188953F24EBC1C44465D60D4C5D894A500073A00AD169A50FCF856EFF8973636BE08AC47428A620DE2F4DA2479421F42247691B7B18B9CA48534713FFAA550A35A239A193DF7FEEF4F2A91CE10FACF5658F32056FB5E597F98044168A64CE35DE924846473E6713B4DF4F2D6E5814F2EAB46A0C978E4899522D4B83875C0C428B1916068C2CFF51D04707E02CEE9F78DC3960560DC5A614681B9006F2B3E58F8DCA269D008E0BAA032DC15932A658792056C5BA62D119178933534D09E0F2CCA868451 +MAC: 569669B73CCC4340ADD604DFA6BCAC7D +Test: Encrypt +# +Key: EA68A8A3E4D157409358F5670C2AE752D970AEE3DE74F1263AE0200E3252714B +IV: 29CF5563E98B3D58015242F6 +Header: C3457B7A3040841C29B28120BFBEF6EC1D6D18398EFD30468CE3EB81A6EF137C00B37299CB6CEA18473165A71771185889677E +Plaintext: BE01758B4936C89CA7007D5192553250944773C477E67E4469A3C0320C521BAB17DC9959FC52A66A19A82101E87E5F9D763B804F7411F7164DDAF87B6201943463EB4863C70FBAF286D8CA4E2AFAEE9C2936E578340CEB37C4C1DDAA1BAEDE5ACE4EC7F8AF244D7EA6E310987CC8D094983B017A1A447969B5095D2BD7916C60DCDF8B2ECCC37B23C56697744502B8757E0C372D26F3ACE600EF0D3F1B42FB9DE8D8B0FF2734B76E5EB098B3CAC051F1E1C7FD06032C5B3FA9960E839CD6A8360D54BCE1F74A72AC9D0627B79CFDB1F4F4960526 +Ciphertext: A49E7D688E860796D52FCD1311F059FCBAA8E42427404787DA38D74E4B26EA674FD2976F47108F766DCDF31C3DDCA4F6D4602707A5CC191D79DC6910E81E9F46CD34730A943E96ADFB23906F70F2D659FB6E6FD7008497621645305C7FB32B9E42E6579417C884B3D4F8EF44BE5C052C2A6C68333F6F19DE4D7897B3493993E6A63A5BD21C53BA5A455F2CB478D98F82B1761E19112C2E52E02960E9CD0973B62D844A7BE83FF88D08501C280AC14AD01DAD806D7EEB95D16116948928B7642D3934A46E679A9B1097592B57E2EAA805ECA594B2 +MAC: 62EA6C9E2254EE77C3DE21D3E128D896 +Test: Encrypt +# +Key: F8BA78E0B1CC1DCA9D422246A62E6021B42A8D592F67DA37E27BFA7C87FC4C58 +IV: 7ADCD76322B59142EF9E9225 +Header: 984BD01F484E9ED3E3367DA7A1BB0B4E206379756CF2731D4EC21ECCE4DE973E60814774C110797007DCF62FB1728EC95D73CDACEBD3315E1226BDFCC2E23B67A6CE2DDC1E +Plaintext: D3309CC5C28A8D2AA46CACE907A5357B575E88D397FFC630501605221485D25CA4917CEE8CB40DF4C736D39C2236584E2185B5EE32ED584403B31AB4CD3973A44274B4C57A590AF5E63C383BB93A69A7E2173BCD19C3BEEE0F668E5F05128F8401D93845AFDBF793A8475AAEA0799D62C53DF08A09BF9ACACD335FC3CAEF20E2EFC29F2ACECD6196FDB9D8E211D298D80DE8A39654B7F0A3EF58815110980F9F7F4DAF8FC0BE77E4586F9CD908920DC0C8032259D348692CCFC7EE4014D07E36C19B56AA3FFA28F536F79054431B4CE1EBAA9BBB +Ciphertext: 27ABEAB5521AF23C88D06484F909364EFCDA7E7C5019AD08C11912C0F3107AC6A950F787076B9D9123F8DCD9296B177919C13DA18572993147D570D39CE930CF852FD5EE6C94A833E85BAB4412177A2BAD6C3270E84C5A746D7DFF3C1B4B6A72FBB5AFB3188F8859A6214DEF85AE37DA9DC404F9762EA06C65ED73C66F6A5C93C16A32D4009ED568BF2116EA14CA606BA584BD6AC2549178D9D4D197F411D64F9A219F5C8E15D3B1AF7C1AC97631555F0D68D53781108C2CEFD472F54B02E0F2672380DF477463E2ECE6CABE07E0415B6A159074 +MAC: 3A60917D40A4EB6513EE2F9E13C373C9 +Test: Encrypt +# +Key: 886EA2770E7B244E66F7C712645F84D570DFFD2D12AC2E4E95FC7538E3D75DAD +IV: C8095FF4AC141F7AD91AF50D +Header: 48E4AB2B18BC2B14B69F97D6D080147F8717504854A674D454593C3D53AE1A75776DCF896D3656333D530F8BC2265494DEBEB4DC1BC4370C3B32760B2108E37FBE6486FA1A62EE02 +Plaintext: 66FA561E4537B82AAFAD2386D8F2E3BA334C21C2A90E3CD679F9D53CFFC86C012DF5EE6926EF0A5A5C5755ABAEC624D9A31A591034022A4A0FCB91CE4D26C6C292C8BB2EE95CA554AF2D6F991BA80F01EC6A6824E4D3F1B3557444D5D13953DFA583315F057731CD00F899317E880EA5CBA3D0534C06DF10251FC7A4D149F9C6A166D615C0611DD9FC465EAD05EC2B631D80BC5A22ABE0C97668A0315F7DE9B057561E2B1538EDD3CA2A5F75B48EF8414A3779A5B1D279F158B655B0F35E149D4E8BC5E185EEB885E96FEB44BD3A79706C01D3AF +Ciphertext: D7C1843AC384ECC923978ED667D80D308E01A17AB1A9A5002589398174EFB51016E6838870CD4C9AEC05DCA98A062CBC1EDF6EE947527160BBDB036A6E1A3861F7CE0D97A90A87C7C35406D5D6490930584BA38FC872FF827BB3FA6AEFADD5CEB81F9E221B6BE378C94A6CD57BA53B486A30E71DAEDDD43FF6C34D7BBC15FFBDF4D6DEF8116130AA69078F5ABD95A9F9638A4B305D37B156BA7CEB38153AC4F868167693EA8BF4C5B03DFE57EE3975576CE1C9389AD1B189E0E49441F4E0F86C469DD7DBFAE6661A376039A6C895F0DDF4DFD582 +MAC: AF0E47F3F7795FCC2EE12944756E4433 +Test: Encrypt +# +Key: 82D76989FBA47A296C9E9BB615178FA9A8B644CCFD8B85BB11601276EFB9A0AE +IV: BDC015C427FFEBE8973EDFD2 +Header: 99566B055C370C1ACB0DB732DB437CC2B2022297882C4B4ED83EF76EF4C73E043A6ECB359681D78C356F010E8456517C80A07CB84D29FAC7F14F640DA03509136948DF5ACC2CCDAF5DD48F0FDE8CF9041F568B78FD76BF9B678CA69F21F8B96D1CDE124A +Plaintext: A3BF2463E27BAA0C3FE993B1271BF856331B5BBA673BD7E4076628339D17041B876E4A3EA969F9DF52A5405AF6CC337956D6BBF58BD79DCE70CDCAB658255D9B9D7FE319ECE90E322C2DA896D0A908C8324F81425DE2CFF7494135F04BF09A3E35D7CF731823BF73499A35954CEA8B571F8171F3D1F721FC8F0B4E3DFBC0ECA6C71EFEFB2BFB4940EB9A961B2C5C623A81F4E27F2994DB1357495E7B48079267CF091567455CEDB21AC12003228099EE3E4997E2E237A8427C48AB7F7BD1DE9A2E7ABDE70227AAE9C4A2813A2678276432B77EA2 +Ciphertext: 1034BB6867C756EEA1201E76172F6471F6004A9345687B2A26320A0F1FDB9F5E7ECD11DE78BEE7E81F8B35119DD4D2BCA4B61BD080CED8AD11F172ED83051F3EA8377394D6852D502DB6B5B6577A227A09133051D9F6969460F4E966AC043DBD8A917906A5445DC33BB78964DB300651C79AEE3F02F39A23B1B2D4DBC4DB4A4ECB78ACFFA5DB52AE25EA5B80B59C466600A5B04D0843713A932B62F4B294B586926285B12E24F2267489F88FF6245AE0F46B9CCDD15CB689FE85D1B4FAC441A72407F1BF6533B3B3E3F7F2A864E93E34B5EEB912 +MAC: AB3CFDEC4CF1704C5D86AE5EA1B816EB +Test: Encrypt + +AlgorithmType: AuthenticatedSymmetricCipher +Name: XChaCha20/Poly1305 +Source: draft-arciszewski-xchacha (https://tools.ietf.org/html/draft-arciszewski-xchacha), Appendix A.1 example +Key: 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f \ + 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f +IV: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f \ + 50 51 52 53 54 55 56 57 +Header: 50 51 52 53 c0 c1 c2 c3 c4 c5 c6 c7 +Plaintext: 4c 61 64 69 65 73 20 61 6e 64 20 47 65 6e 74 6c \ + 65 6d 65 6e 20 6f 66 20 74 68 65 20 63 6c 61 73 \ + 73 20 6f 66 20 27 39 39 3a 20 49 66 20 49 20 63 \ + 6f 75 6c 64 20 6f 66 66 65 72 20 79 6f 75 20 6f \ + 6e 6c 79 20 6f 6e 65 20 74 69 70 20 66 6f 72 20 \ + 74 68 65 20 66 75 74 75 72 65 2c 20 73 75 6e 73 \ + 63 72 65 65 6e 20 77 6f 75 6c 64 20 62 65 20 69 \ + 74 2e +Ciphertext: bd 6d 17 9d 3e 83 d4 3b 95 76 57 94 93 c0 e9 39 \ + 57 2a 17 00 25 2b fa cc be d2 90 2c 21 39 6c bb \ + 73 1c 7f 1b 0b 4a a6 44 0b f3 a8 2f 4e da 7e 39 \ + ae 64 c6 70 8c 54 c2 16 cb 96 b7 2e 12 13 b4 52 \ + 2f 8c 9b a4 0d b5 d9 45 b1 1b 69 b9 82 c1 bb 9e \ + 3f 3f ac 2b c3 69 48 8f 76 b2 38 35 65 d3 ff f9 \ + 21 f9 66 4c 97 63 7d a9 76 88 12 f6 15 c6 8b 13 \ + b5 2e +MAC: c0 87 59 24 c1 c7 98 79 47 de af d8 78 0a cf 49 +Test: Encrypt +# +Source: Botan 2.10 library +Key: 2320689B322A539C2DD7FA1AC287C5F6846E2D584D911593D9B3758485C99536 +IV: E46A1BCDE361C065C7CE0844669170375B8C053D1453B285 +Header: +Plaintext: +Ciphertext: +MAC: 2D43FE87BC2D8C8F004393DDD534D8C0 +Test: Encrypt +# +Key: 05C62C7B3A03E2A1231AEAFA9B8CFB0B72ED97F11E8DD233661744213064FB8F +IV: E9F2FDFB1C98D8C578E4DF6CE57278618312797351176735 +Header: EB +Plaintext: +Ciphertext: +MAC: CFB13F49A56100F2464E4D7529503F5E +Test: Encrypt +# +Key: CFB47A41831DA1973560A21580FE835AA9370D607CB0C96902AF3B75D7FB1824 +IV: 2DBDD2E3A398892B401BC2C8A18AD0F7B062365B29448918 +Header: 6A4E +Plaintext: +Ciphertext: +MAC: 72F3CA63E5EB287D3D635167D5B7B93B +Test: Encrypt +# +Key: D1A70E9DC0A5B78448177BEAC99549B605CF4CA3B7EF7B37B689D9C9BA7CFEA0 +IV: 28D6E13AC9D2C4E300A03C313BE685DE65FAA421F19B367D +Header: 964AEC +Plaintext: +Ciphertext: +MAC: 00667DD31D9B0FF6711B180239F9D935 +Test: Encrypt +# +Key: 75844A78322F74EA5F3C1D662D1CCA0BE0A55D7882FED4AC03AA70A7A8E2CF44 +IV: 1179EE6DA69055EFC9E618343177023E763DC0D9A454AFD2 +Header: F61101C6 +Plaintext: +Ciphertext: +MAC: E2FD9F1BE22988406984148E02FBC736 +Test: Encrypt +# +Key: B137BA67CF74CE0F260A9918A25CF0E58AA0CD0C9C4ACDD12A7128A56CAA2A0B +IV: 19C4DE1B055973FFAF566ABFA079A1346F36A9B65995416B +Header: 6D374BA311 +Plaintext: +Ciphertext: +MAC: A37999B38BBC9ED49D5CD851F1407732 +Test: Encrypt +# +Key: 529B9772A48BF50D3E43AF32C174EA5B6EC8C91B779086C9EB08432D548F3438 +IV: F31C13EBE36EFDDC61548F0314FD8F44C1F25BCEF572B81C +Header: F40BA82D563E +Plaintext: +Ciphertext: +MAC: 21550CA6B2FD68C675F003B490B5004B +Test: Encrypt +# +Key: 362C9DF03C2C2C366B21B6DBBA5C38B518285A830AD433EF2879E240CEC19190 +IV: 6221ABB4F803A077667414B7C94153D7DF44EB7E3BFBB28B +Header: 81D86BDAFBAA90 +Plaintext: +Ciphertext: +MAC: 4A96DB75E6B8430CEE890280046D1829 +Test: Encrypt +# +Key: C768F65B36C1E2469F484782589A9A8E681CBA22B2F0B05C0034EF68B08F3E7F +IV: 00FBAD461BF4F547AF6A7C065CFC350BDB61BD2CC09FB00B +Header: 9DFED93141495EC6 +Plaintext: +Ciphertext: +MAC: 97B9C7A4E363FEB4B585063C9E07C55E +Test: Encrypt +# +Key: 96DFA22D6ADEBB121E2D91F4CA7259EBA1FBE0D822AC8E58F40D8FA53F59CA1A +IV: 827483AD10F16E2D8F5AAC5AE5131E65DAEDF16A71C1A48C +Header: 9D2710605EF35FA928 +Plaintext: +Ciphertext: +MAC: DE60BEC6BD730875090AC52E985A9AE0 +Test: Encrypt +# +Key: 950108B70DBA297FD198AA0966513EF77CA17A7AC44398C0DA13A2AB8A4D8058 +IV: 1F522753567EA2D1F563DC94B14B0C1545CFD145DB186ED9 +Header: 183AAD03D84740D53027 +Plaintext: +Ciphertext: +MAC: 2B8B76D056A2D4C9A315A2064B90508D +Test: Encrypt +# +Key: D441A20F52AA68B92922B8823532EADD62B4FDAC3DBB88BB90E9472A46C07134 +IV: A9A504768CD4008187F9B330E3528E2987138D7F72EDB384 +Header: 56A2078885F8B58024E044 +Plaintext: +Ciphertext: +MAC: 7081F63A9556D3F9E2601463C349EA02 +Test: Encrypt +# +Key: 605F5B969B47F2DDE6722CE39F1487CC9C8532A3EB25DD93D803A79607D52BB5 +IV: 69D85AA1ECCAD260C0A816768B1852A044628F1DD45DB237 +Header: DA27EFD2050BF4BCC7537A33 +Plaintext: +Ciphertext: +MAC: 5F02121296F37965D75C02C6CA80C59B +Test: Encrypt +# +Key: A65BA0EBCDB30F45DD6AB77FDB7BC0B55C8C395A8E8E0F68F981B958F29BD84A +IV: 11EB6102DC24E127CAF163726BB0B243F07C8D0C9C9E7A00 +Header: DA14AC3C99DD514A3E5D9F6CAD +Plaintext: +Ciphertext: +MAC: 8169BD436B843A547F263ABC374134EA +Test: Encrypt +# +Key: 629EBF2919D31272618501DF8956997193FA37852A307013AB37C81B92AB2C55 +IV: 1EBF7DCBA4D130C703F91B465488FBB0A5BF12214389A89F +Header: 65870F5F9C97AE936057F62EAF52 +Plaintext: +Ciphertext: +MAC: 0A2302351A5EB939EFC2A9A4F00BD77C +Test: Encrypt +# +Key: 34EC92A69FF25FC515F6DF0522B418887E04F72C6E71B668ADD5F4B6584B4934 +IV: 755D7AF1685069246A0C3235512221701006AD3D67AAB66B +Header: E9718A9DE8518F08E196F0CE73251F +Plaintext: +Ciphertext: +MAC: A551B1D20004E550EE8DC729F4096726 +Test: Encrypt +# +Key: C069E79DE646A0395325E339E165E2E8D9558B86CF9A63DB4F1006D60C31965C +IV: C76358138E1EEF88F534C79F61D20958303AC5C26ABE6CF1 +Header: 75F93211B13C49852B3C1EABC8BFF732 +Plaintext: +Ciphertext: +MAC: CFE5C8EC651A0DA68B4AD985EDFD5126 +Test: Encrypt +# +Key: 8B511DFD8F158EED37B7FF3ED07902D820E76519DF0F67115251F304B42954A5 +IV: 0F38C45D9CC78E4EC7464E16FBE80897A86C1B6AB4874F12 +Header: ABF4F2964FB906837E0E0593386E2589A55045C9B08406246D2309892FE618A9E6EE22115DD7761F +Plaintext: +Ciphertext: +MAC: 6E83AE09250BF39E97F39E9ACBBCBF97 +Test: Encrypt +# +Key: E4E4473EF6FB3392A0C7B71B355C5F8F5A99BFECE1B889B9549E435BEDD59AE0 +IV: 8A0E9EDA64FC0BA731354D1B3F844CCEB134AEB47D7CCC88 +Header: C246A4126CF0585CCB671D5B499EBAFA4D2DA3E372D1C1B1F03BB446E61E6BC919B83A535729162B689F8259F2DA1F720BC71B27 +Plaintext: +Ciphertext: +MAC: 23461D2FF273ADC23FB5E656D818FCFC +Test: Encrypt +# +Key: A7B7DBA57E2B97F374C9A50AE4FE32D54BE8DCDF23E06D5456753B3D82E861D4 +IV: 7D3CB8C70FC2DF89741CF41422940C9100D4D64FDD3404F1 +Header: 142A342C0059F44DF87D3658A3EC2858A44ED806437471033D0B34C60FFE82EC6A8A425061895BDDF4B2AB60378616C9F5808A8EA68355F876395C16368C1CE0F040BE9BFED3 +Plaintext: +Ciphertext: +MAC: E0F9DAAE5B504508821AC41B029317E6 +Test: Encrypt +# +Key: 29FA6592602AC773C0A3B7CBA816194F6AC2009F1AA576055A6ED4BF33CD6FA3 +IV: 61D0A3A93ADC80FB24ACB5332F669A8B624F84829039977F +Header: A40CA8B978422C28FE6FFFCFC12392EDAB7E6B9B7D80A9FFF1CC2C7EA5A1D42F4477E97A2DE5D97EDED16D4944E76EF645A6AD46565D57F77AAC6899A0FBCA1309998DE4ABAF6B4427CBEE7080D8F2DC054344C5832891B6712C19EC1C78DD44F9 +Plaintext: +Ciphertext: +MAC: DED29EBCCE4D1074A25462E77D458813 +Test: Encrypt +# +Key: 25DC3194BFD6BA8F803A21DDABCCCB1D35A245B3E189EC120F23F7CA1B7DAB07 +IV: 0CC3792272C2DD68940A7C70AF6149677B4F2A3467228D82 +Header: 6A7EE3E56239E8C1AC0FF14D7544B241D152DD185BBAEFFCB9FC57BE014D352D25CEF2891FEF87126C90BA8E5554ECF4817B0C60EFB180F54C5DD105CC8B3F4E959915B2FE0ABF69F649175E467F07AEAAC436727780DF7B7152406DD411A6B58F18818500EE88B102C250 +Plaintext: +Ciphertext: +MAC: 992B8DB5C265D45DCFD894DAAA732D52 +Test: Encrypt +# +Key: 1AF1E4265BA49CF67FF6DC45747A615AF4BF73D3DD10FE89AD827BD30EB94D83 +IV: 823C9EE445F3C1CB76F41E0329BEFCE64FDE4B61A8BB487E +Header: 75E5A58B4048B2ECCA139FB374F1A1974F84304E13D898A589B79467DDD607EA9F29A5419E0043418EC47C75571CCEBDEE4E83E9CB50634181FE194B494C3816CD1F5C8D2F5F20F208FD8554AF30CB47419E3E7EE127CF27BC31274D25EA74A5863E178C9EC98709BB1B698FF92B261C2353F82A5E8BA2D539 +Plaintext: +Ciphertext: +MAC: 9198C4EF225E35E41998D99AAA5D1333 +Test: Encrypt +# +Key: 5858E0CAC5C0AC69D0625A6E1EBF750CFAA1D96D4E1B9B1A988EC852655720E1 +IV: 0206471235B4D6D6455568BD2EEC6DD8AA9FF7FF9A9D928C +Header: +Plaintext: 2B +Ciphertext: 86 +MAC: D7F3D5E7DB7D2F0AC88B68E78CC3D9F8 +Test: Encrypt +# +Key: 29BE5B1AAE17D60A86A4B897DF40AF724D3104B9A5E26557C781CFFEC0ECF62E +IV: B290F71501389DE78154559990D18C1A0AB7399E2A31FF3E +Header: F7 +Plaintext: A0 +Ciphertext: C4 +MAC: 6933FB4126932AD7947DD6238FBE47A4 +Test: Encrypt +# +Key: FAC5D73324AC877E9C5B98D8FC7FEFEEC7CCE389B27F17F617E9EA2E47D5B453 +IV: CBAEEDF469417ECCE9B189ABDE15D98785C34B5A32ACA7E3 +Header: 617D +Plaintext: 1F +Ciphertext: 00 +MAC: 3EC7F7F42BD1CF43E079948D6C1E1663 +Test: Encrypt +# +Key: FFC1410C41EC5002A3DDD61322D33251F082F3F6F1E58F693FD3784A147223A9 +IV: CECB558DAAF314A21B652CBE5F26C4B58D4CC486923D8E49 +Header: 765E60 +Plaintext: 1C +Ciphertext: A3 +MAC: 9C72C865A6B5B954262CE5AB7E3EF52F +Test: Encrypt +# +Key: 75B8BD5AD6250281F471FEA9596EAA2695A8E3BF48287E397465E0602D1D8157 +IV: A2AA5E8032653C019F62BED3AA6B1C9A8B1DEF3F92885391 +Header: FD43F437 +Plaintext: 1F +Ciphertext: 31 +MAC: 43C8C21FF3445A3CFFA451696DFCE396 +Test: Encrypt +# +Key: 3929077B724FFF86E4B516B576982F6D7F139E3DD068A1DB3BB5BF6057F793E4 +IV: 9B5ACE9B179CC286A988DDB5AD8CDBED126D59F2C2DBBBBD +Header: 6162C8FE20 +Plaintext: 6F +Ciphertext: 9E +MAC: DAA04DEA337F18E4B47FB2D0D342C74C +Test: Encrypt +# +Key: B95DA519B7E7602107983A1894C72AF2C5341FD395688480C0E8656909557861 +IV: 1B2EF3EAB8328967428A324FE59453DC90D8411ED8AB1C88 +Header: 62EFB226D907 +Plaintext: 1E +Ciphertext: E9 +MAC: D54CD3261C3E307E20CFC408D932B885 +Test: Encrypt +# +Key: 10AF90FEEC9D97E8CDA81F327C865949CF2911FBFC2EC4E7B5F6298C78BE64BC +IV: 0651FA564DB94F6F2C9B443C64339BBDD9F72DC25885FECC +Header: A1BD78A432743C +Plaintext: 02 +Ciphertext: 4D +MAC: A0830EE684145B9DEAC4DFDE31E9204B +Test: Encrypt +# +Key: 89E2BAA1A6EFF891F394A5D0EC5C7F45A3558C55696161B12CE74E057374EB5C +IV: A462918A031CD3936F2C3D305C2BD8AB8F1EBE572A0AEDCC +Header: AFEE6586E0FA258A +Plaintext: A7 +Ciphertext: 13 +MAC: 9F73A94E6C41822C3BFB58A6DF138B1F +Test: Encrypt +# +Key: 3980EE6D7346F060AC0EE0455724C28BCF7A7DE8EE710E643859E83EFFD4B579 +IV: F1308150890D53767CA91E7B468059560B52DE01BC88EDA2 +Header: B42C6216C2FFD0E2E7 +Plaintext: 1D +Ciphertext: 0A +MAC: 96A20EA1E4EB738912E2758CC2D07D2D +Test: Encrypt +# +Key: 81C470554DC98F107D159C5B9B6CF884738BE1B886E0EA6BCE8A524C191F46AE +IV: D1E8E6ED2EE1B98165FC2B3F0F45C0B89A1F73513802B3EF +Header: AC8E418ADD7123083B6A +Plaintext: 26 +Ciphertext: 3A +MAC: 072849589C2B5F2D603FA454E55B38F4 +Test: Encrypt +# +Key: 389155ECF00145FFAEFDEE1B34B4243EBC015D985950A411AA99DEAE883FD0B0 +IV: 1EDBF09BABC4FF2924CD9E1572004AC2E3DB84D6BD0EBFEC +Header: 37EC3C73B284FCD7B9F8BD +Plaintext: E3 +Ciphertext: 87 +MAC: 504B6D5560BCAC3247F9A12DAA57EAFD +Test: Encrypt +# +Key: 701957615AA4743C999BDE9C39F7987D24F7DF1E833B650EE0B22C036EBCAEA6 +IV: CAE5C24C306281198FD50C82848DFF1899C42CBC3F79E066 +Header: AD67CD913A7EEBDEC8C71687 +Plaintext: D2 +Ciphertext: 49 +MAC: 13F2D363B61508A3707C5AE5FB27D1EE +Test: Encrypt +# +Key: E904A381C9D692340EE0FB363BD9D8063B8CDF05AB666D2C0E17EEAE4DB19078 +IV: EE50979901DB36CBBD148118C8F6A76BB2B3ACAADC264403 +Header: D27A6C57221BBF6C6010916931 +Plaintext: A7 +Ciphertext: 81 +MAC: D6CB8F1CDCCD4755B0239018A4724186 +Test: Encrypt +# +Key: F4C1251E5240A86499B4DA07E1FB1F4952E04D2C832AA69E054CC13440D2ACA8 +IV: 791C1E1C8AF89F45289711491A58A6A64D0E5013A69985CF +Header: A6591B415DF6F46C469B631D21E3 +Plaintext: BF +Ciphertext: 41 +MAC: FA9CE329430F22C3A6BFD873C2FA8C6D +Test: Encrypt +# +Key: DDF79F2DF9258ECF3ADEA80315151BF07E0338794DC2CCF604865C4B45F4522A +IV: 03217FFE9B9440772895038971EA0B3BE19B4CCFC47AE8A2 +Header: 6DB92AFA146E9E52E0F49C5FDE86AF +Plaintext: BC +Ciphertext: 88 +MAC: 5265322457ADB888C11E79171043CB68 +Test: Encrypt +# +Key: A3EC6B5446953DCE9A38E9AA2DA1ABC9B9AACFA3B04FBBDE34D8C8C9B0830ABA +IV: 3044D630E3AEA09971DE2260851C6859FA856557EC5710DA +Header: 312908D6163EE6D38BA898C0E2B1FAA5 +Plaintext: 54 +Ciphertext: C3 +MAC: 5374B789124D835E27CC7AE8E652C0BC +Test: Encrypt +# +Key: 8687B87AF20CC7E61C6961909392286D650D8283A5A66E33E33D8620F22ED808 +IV: BD628C3C6C659076A140DE9F6C8D0B4F4F584F8EC26850E2 +Header: 87EA55BA2DF31BB3E99F09A3576CDACB7BE3C0C137AAB3A1 +Plaintext: ED +Ciphertext: DD +MAC: 367739711CC1F2F397124236AE287794 +Test: Encrypt +# +Key: 32EA60419EBB9E6A09BA0427780E534681376EE860D61989EE59560F91F17F97 +IV: 964F010EA91FD706A5B5130E9403850FB580118C593B9074 +Header: E6EF984DCE1C22F2F99D47B207DFACC526DE719BCC88D01BC373352A05310B3AC7C27621267B9B75DC6E5DC385ADC7B1E0FD53E5CEA906 +Plaintext: 59 +Ciphertext: 77 +MAC: 20E5B8C00AD6ADB1B2EADF00C9550FAC +Test: Encrypt +# +Key: EB47FECCA00A381063EAA92B5435E8DE4F1F342629E8BCC96B47F71F1A45727F +IV: 9CEB7E8EDBBE35EB6156D42E59919C85026C8C24221ACBE7 +Header: BD53946EFE8385BB07A2621BC6C9EAFBB639778D3C30C060F1E815679A3453F142F79090EB0C38CFE3D3CEC82D03D5489618A3CD220EE30503CD1395A5A3D4C5 +Plaintext: EC +Ciphertext: 7B +MAC: 6F02730F5DE65A78AA822E5622DE1145 +Test: Encrypt +# +Key: E277BB478407FC2DE50FF497B0DFBA4D63F63487D8C58BA85A7AA32ED825B3E3 +IV: 72F99475A5DDD5249FB7B86120C6CBE73D0F00FFE97136FB +Header: 1DF31D4F820236EF9693B7E1F80099E77003B414410CB1C6993C1DFB82468AEAD2CCEEC49CA4CCE32B1FFE26DC6356539D1B1A25CD53038B9A9F118C9A2AEA529E4B2470EEDC794C12E5FB4BE50312467D6384105D084F1BB0 +Plaintext: 7E +Ciphertext: 9B +MAC: F7C2CE1900CC83E38845F869BC558EDE +Test: Encrypt +# +Key: D9EACB0C833099C5FF4CD6510D9D024D83E62C33463F50BA6A747D43EE005C25 +IV: B3EC53ACDAB010518ABD965E55FFEABC8460FFF13284FE6A +Header: 8AD41CD5AF59C65309A4234E7DA75AE5E14C0D7E6C6C4D651862E0DDAE1FE88F2CCC9A05DFDDC36E15CDB5E075810430E30662A127518D60AD7F47910C065F5DED2A1C5A7ABE3EAFD8916D0ABB9D19052D8835C91EEA169C2A9DF1DF13BC2141838C6D8CADA9156AAA6B7FD30AAC1E583C10672927 +Plaintext: 46 +Ciphertext: 97 +MAC: 30AA167DEFB813D20C617A293DACF329 +Test: Encrypt +# +Key: 2F325F9B8BDB91E4815C031B01F7103AE19989D4C189B8D68FD9865590B57776 +IV: E5990FEB8C4156AA377B6438842CED45E0C4F03FB96AE8D4 +Header: 8393F463B9F29E718D14AAD9FF9C2CDB2474F667E5DC1ED78F1A860E0EA56796EC67AB2969F0CE8629A0F037996973469EDD6292DC8D74C12E187705FDA844BA59848E7B1CA8951A24FC7355A3AC48CB0EFDD0961A9CECBADEEDD34CE36E28CAB96746EA81E0C9201451106F28D840EC8004B797439C586C +Plaintext: 79 +Ciphertext: 61 +MAC: 05BD917CFCD4F2C0808CAA2286E26EA2 +Test: Encrypt +# +Key: 10C34706038D0EA3AF120B24321DE27BEF6EC858832AAD0B22F8BBF0FAB1249F +IV: 5B24A341A229BBE3849ECEA9B344EC04CF81DA3A4D8CC934 +Header: +Plaintext: 1393 +Ciphertext: C64C +MAC: 87E2CDAA74CA5BEB9AB22605870887A7 +Test: Encrypt +# +Key: 37BDB7716918C08D190D0A91A06369E9E776515A06DA3E4745E0D6D57DCE08BA +IV: 7C4127160D8FF468EA474D6B7F8681692AA0D40F60E96E21 +Header: FE +Plaintext: EC10 +Ciphertext: 81AE +MAC: E1B859B8D3CC8E6F0DFCAFAF25EAF8B9 +Test: Encrypt +# +Key: 69A985CEBC9FB915B3BD1E06E0F0D638591A61B3D48E6C1C3DAD56A2BAFB79F8 +IV: D22F6A0648C9B34D3A7FAC78CFF2F0FCA7C2F509D9B2D35C +Header: 745A +Plaintext: 5CCD +Ciphertext: 6825 +MAC: CEC049C1403458F53E1876F73B9B6855 +Test: Encrypt +# +Key: 2B6AFFDB361C3A1C6CAA215EF5C28301329FD385EB2AF1DECDCE979F00DF2032 +IV: BCEDC29B829962092B267DE8BD0BC71462F0144972D2791B +Header: C0253A +Plaintext: 11F2 +Ciphertext: 0643 +MAC: B4266601F63EED6DB95B9DB5D0601360 +Test: Encrypt +# +Key: DB77E1E2E936A52970EB64C4C8F2646227860B68AB1F3A5377EF9CFBB81CA469 +IV: E9BD28EFFAD11F71518F81770D240366CF47ECE374EDA8CB +Header: F5C9FA7F +Plaintext: 8E54 +Ciphertext: 4CE5 +MAC: 2C569B2E7A9563BA914F20AEEAEFD405 +Test: Encrypt +# +Key: F842BAB65BF71551EFE3283E024E73E933CCF3067CFC3544911622ABB1B3E67E +IV: DCEAFF78E098CE59A55500B03B1BB5FB8DCFAFEB992962A1 +Header: 0F886AF327 +Plaintext: B056 +Ciphertext: 1FD5 +MAC: 2BEE1637655AEF5E9237E663E7AA5397 +Test: Encrypt +# +Key: 74ACA8A9DD19573B66E4C54F6C3A7E8BD1482DB8664D346404800C0017E3CF04 +IV: 5496184222FD9A8A73920A20A11C0C6B954F102CE95A0126 +Header: A2D93690C966 +Plaintext: 3D06 +Ciphertext: 0607 +MAC: 85F78AEFC1DE48B1A5DD3C7CE412F98A +Test: Encrypt +# +Key: CB641D68313F9B851B69971B55CAF81C5D6F5523B5CEB9FAD7EA70351F7F9508 +IV: 32691E84E455ED300979631ED39ABF391A8A3D40972D9B7E +Header: 1221B81B3CFCF8 +Plaintext: 4A20 +Ciphertext: B401 +MAC: 988BC221B31B7AD7DF17377DC72B52C6 +Test: Encrypt +# +Key: 2F9809C5BD8A451662532CC10F8E20D7CCE356F4C85F59444B5B3110338E399C +IV: 71465720C69667569B30013108BE10A6151AEFA34271EA98 +Header: 7E0AF70B9FACB93B +Plaintext: DEA5 +Ciphertext: 5A88 +MAC: A32AA680BA5CC4D1333D92D1C32768FC +Test: Encrypt +# +Key: 5205DC493780DB056B1420F6D6D68BBF124C4448EAA69D2E8F0BDE20A4F0FE6D +IV: 4D7B8C401CBEFA16DA535A26B9DA71A0EAD1804378FD7B1C +Header: 81589D7630E0EF8CED +Plaintext: 5F24 +Ciphertext: 0B7A +MAC: 23A7331E5B979484093883821332E138 +Test: Encrypt +# +Key: EBF53745D6F9C00AA93BC06BBEDE989B9397CDE4B7FA302EB6E996E12EB5A0D3 +IV: 09F5829FD1954F3D0928AE609B61FDAECCD90A206F3FFB63 +Header: D86FC6367C60D7A5E699 +Plaintext: 1FE6 +Ciphertext: F6AD +MAC: 5DFB7B01CBD19BEAB057126FAAFC8115 +Test: Encrypt +# +Key: 0978292D307D476A4C4E39FA5F4936305A6B4937B39AAF54EDFE52F981963616 +IV: 3E9702E8B4064A686D620A601948F179BF37C20EE8CF77B3 +Header: 0BAF8665E7DD6E5C5FC783 +Plaintext: 0BDC +Ciphertext: 5581 +MAC: 3AFF3EC735134BC964336A98416E0D65 +Test: Encrypt +# +Key: 77856AF138A2F4BB8325618995A22CA771EA21A471A035397EBF7853A1806093 +IV: B14F1C0D6D8534DA11FF171993EECCDD3F71BD48224A3C17 +Header: D4EF012158C0EF7DE383EB50 +Plaintext: 4967 +Ciphertext: EA1E +MAC: 3DAD38C8D83FD83585C0334887994D1C +Test: Encrypt +# +Key: 1E6CFE72D6F6C224E2FF2A28C019FFFD40BBF3DD282B71E51CE3700A35724F3A +IV: 542A6AB4B85C1D6FE92AF2464B851B6E00D7028AEDE8D830 +Header: E864B79927A0EACC25958C1819 +Plaintext: 2680 +Ciphertext: B1D0 +MAC: 5EFA5746ED231EFABA8BA18DA19DE150 +Test: Encrypt +# +Key: E0C686D36A0D201667A632C3113711F5FF7D118842F222AD8BB90D4E6DC2525E +IV: DDB86F7B430E7E6C626DE3D7BBAC87F80EBBB88A2F921720 +Header: 4DE50A9AABB4AEB661CD66AE367E +Plaintext: 3CDE +Ciphertext: CF74 +MAC: BB988865BAE88275A7876752020FB82F +Test: Encrypt +# +Key: 5F4CD1910149183A5E8AF22643C9B7393BA8B2D2DB662A183F846D9F3D5EB72B +IV: 31B4B6873910F951F0DF2FA846112704DB12E16F92A47CB2 +Header: C956921B41B3CDF2BC0D6239788D95 +Plaintext: AAFA +Ciphertext: C4CD +MAC: 365503385E18354B0F3A7F87D3043B52 +Test: Encrypt +# +Key: 1BAC04863DD12F4EEE539FB68D517D20386B24F197DDC8C8B05E2CADCBF153A4 +IV: 16B0DF5D1EC329793EB0A9E3D19B34E66D4C35C10642CD2C +Header: FCC7D4690DCCF3FFBECC5D4960721737 +Plaintext: D3AE +Ciphertext: 9899 +MAC: 48E3F548AEBFC2AE35B4F773CED1060E +Test: Encrypt +# +Key: D8569AB7716423A9D4B7BB64E49112A91444C3239F4489016B5500539F0C6059 +IV: 0F2A154674713C0539C217770FE83EF38286722862184E34 +Header: 9228A7FA5FD6339F951C72FBCC43D228340C82ADCE43D16A32634B0E +Plaintext: E30D +Ciphertext: 38B8 +MAC: 872FFC40A0980BC1A2FCCCF1B65208A1 +Test: Encrypt +# +Key: AB67E588D6E0DEE34CFAB34958E0D8CF76A37304BB47D66F52A785DB3132A390 +IV: 5EDFA25E248E0F874224EA773A5DB8D300DBF4E1A4913FB9 +Header: 0DDDD84360D01D707C072FA8A09CB7FE9D3F7A6B1D3E251D724D6F53AC7C62 +Plaintext: E4B4 +Ciphertext: 68D6 +MAC: E26DDABCB5A7D1D2FD8C301D208E05F1 +Test: Encrypt +# +Key: FC8F12F85548991CE2FA2990D88B5B8BED199F9EA22D6F4CD31AE149062B1087 +IV: 68856EFC86A58AD2B77BFA05E56975B561496883F0F49B2E +Header: 0F0640CD59BE39AC3F74F01C6BAD9EE1F6288D6639166B1A8895C8FB556CF9ED41DD95BDFAD0B834481F42FF7A7C8FFA +Plaintext: 10DE +Ciphertext: E782 +MAC: 2893CBCA9E65A1AC46E2D91B754EAAEF +Test: Encrypt +# +Key: 3E61620BC6F7D4209CD0D00786BE92E4ED7A849900FA6D7967C63223B7C8A92A +IV: DF9D55A65B2F74B721870666C684D1AB6F0080B5A86B8BF2 +Header: 46B488B3CEA69502D7669AA1129D2F1E1E9752E81F5305320D17B559C4CEE003C11103FE71CC8192E8B2717537F547A07622028E53198530 +Plaintext: 48F7 +Ciphertext: 396F +MAC: 0A43F4043974983DEF60955FCCA9C76D +Test: Encrypt +# +Key: A8675A1B99923B3B46F8DCF2DA3CC04A8A59DDCD5D76FDFB70A3578686C3DEB9 +IV: EF4A0FF7091237CDB5A3E98B459B20D42852A30F82CC7792 +Header: EBBE8D4F61315766ADF82567B76C05959F15E7FD625A65DA069605013F529B0188820C35DDC346C36DA4CB072D1B1B0825DDD7E7272B0F94BBD5E8D9168CF7F42661 +Plaintext: 50F0 +Ciphertext: C405 +MAC: CBA859B344E3F912C6D6ECE3F3EAB1E4 +Test: Encrypt +# +Key: 43FBBAD47C41AED5845C97ADBB3889F0D8EB2CFF42A3E80D32364E9C91EED34C +IV: D51A4517B1A5F3C5563DE32FEA6EFF51BAA09E0AD071AC24 +Header: ADD24033B035B22D25D01D45CAB62497C3EB0F3055408BB5D9446AFBCA8BB1F02E16452904649A37242A39FF66612D21E7DF7F41F66E87AD0EA965BE451DAEA120D443AFD10F41CAB37FCC3143632A2B477245EBA36D93E23D86 +Plaintext: A605 +Ciphertext: E2D1 +MAC: AB0113E8E941B128FE49B0B686D2C8FC +Test: Encrypt +# +Key: 1945422D807E964140726CEDBF3528C0D8F0EF1D28283092883A2C8B5823833B +IV: 79B930F657DC7CFB62959B404F2F5CDE11C2F0BFA7D4AD98 +Header: 3CDEE47BC1E4640A620E8BE90B563DB6ADD8ABD4CC32A9DD7B25FF9A045C0D3EC9775EB5FD775A52D93BDA6870EDBC1D02514FA28FCF5654696A0C6141F3E20356357A3092F6801356004F0EDAE847B508FE7E4D97902281FEE16F8FFAA86C6885A904B1F5537DF07306AD0E0501CEA5 +Plaintext: 7B3D +Ciphertext: 4A9F +MAC: 1F67FF73EC9BB390BECF2E03A423D675 +Test: Encrypt +# +Key: E9E8C4B3EAEFFE0D96161255433CDE148573AEDAA58F886622A94E4D44FBC50A +IV: 999357CA72ADB8BFB309192CB692005909D542A4DEDB84A7 +Header: +Plaintext: 607B9A +Ciphertext: 5DDBA4 +MAC: B8C30744BE117D308AB4CC709A3E6AC8 +Test: Encrypt +# +Key: 50E7B89DA975C8545DD443925A700DBEFF620956EC997E77F8F6DD7B2C1823BF +IV: 1E79A4CCE45C9754187A0137223F48098795D1ED286182BB +Header: D1 +Plaintext: 59294B +Ciphertext: AE8417 +MAC: 6304D71E62311C118B3424CD81C33D8B +Test: Encrypt +# +Key: 03CE902A417523CDEA13571584C88467DB02216DF12E4DD74DED1805332E5859 +IV: 2C0A22F5A91EFFBB5D15D53A63331DE36C6341395EC27FDF +Header: 126B +Plaintext: 256CC3 +Ciphertext: 45CD5F +MAC: 6768F94EC37BAC6A44499FA453E150EC +Test: Encrypt +# +Key: 3F840B1AF93C643AAD29A1FA9E2AB92792BAFEC46ABAFA4D837EFC87D2C7B2F2 +IV: B0FA8115C95FEF6B4B7EA5F40F867E5271BB48D80767F7AF +Header: A32EF9 +Plaintext: 56C866 +Ciphertext: D675B7 +MAC: 872259F1456C63EB8944EC2DB8406EA5 +Test: Encrypt +# +Key: D09681DEDF1E0304522F20EE732A293C65D1AC29F906D9ECCE34A85454CBCB57 +IV: D01FC517ECA70BABE134FB5BBB7AAC9E692CCE167343D067 +Header: 393459A3 +Plaintext: 2A3853 +Ciphertext: 56DE9B +MAC: 27BC849B69D3D13BFF0AB969B00C8EC5 +Test: Encrypt +# +Key: 344A3EB2153317EAFCEDF85368C9B064DC66E51077E43AE4EB94C365E2FFA7A4 +IV: 02236F2CA5362BAA2F5DEAEA6EBCFF75069E109E9809B43C +Header: 91B778EC79 +Plaintext: BEFDD0 +Ciphertext: FC80A5 +MAC: B7C1B35D14DF80F0856D60CC7701F559 +Test: Encrypt +# +Key: 2C1E4F782044E4C05EFE412359417C0E2D7EA1DD5AB0C4DA097921F71061BA97 +IV: 5DAE4C6096B2180C7B42BE50E73E13DBE051587B864F2601 +Header: 1ABC990D8A1B +Plaintext: 180F92 +Ciphertext: 28DD34 +MAC: B5BF4C32AB4E2FF8EAFA4D63567C829F +Test: Encrypt +# +Key: 3C149F06173A1E0E139F3330BB07E0E347F02CB6EEA67B2D05BF63B913A3F8E4 +IV: 32D6B67A8B66AA369FCA2A55538D2E7988EAD7BC11C3EE20 +Header: 23F825E7B8C096 +Plaintext: 17A80A +Ciphertext: 4D4C99 +MAC: 9332BA792C58CB0FB637F4D5F19BABBE +Test: Encrypt +# +Key: 2F75AFFBFBF69D392D85EBE7A30415C632508E792870E5B337A7E275D0B49253 +IV: EDDD7E65F391A9B27091BD1C6B4A897E63FF9D55D246E51B +Header: 884FF5808005BC45 +Plaintext: 231CE4 +Ciphertext: 927135 +MAC: 3A46B33DD19E2B1561FEB2098335C6E3 +Test: Encrypt +# +Key: A4B318522D3DE2D5A2AA124B5EB718C07C54175369FC0B56767F7A98BE39E151 +IV: 18BE4E38ABE2EAC3F92D5A42DC8F472973275B99CCCEE7D7 +Header: 35C4DE0AD91246BC0E +Plaintext: 991349 +Ciphertext: 6F05FA +MAC: 15492FC19C36C0EFE9460C4EBE5C77CB +Test: Encrypt +# +Key: 82D2EA40B954138A29DE1F62A79DEC88F0F1CF4E5787F11D574143075A29BB5E +IV: 15618CEC66956977780FFC75BACE762B4D98855EE6FD489D +Header: 7FF42FCEFF8C0B4D5B04 +Plaintext: 814495 +Ciphertext: BFCA29 +MAC: DAA58F14A9C2E65A4162673E2FC5B313 +Test: Encrypt +# +Key: CFF3AFB182894AB5D7C68B21E0F9D1663223B39F991F635412AD586853FB44C3 +IV: A0701146BBEBCF8DE460751B6CE8955F1E46370A29560413 +Header: 94367AD63669350224C641 +Plaintext: 081271 +Ciphertext: 73BC76 +MAC: FBAE7B2D5C65E15F7AD68963EE071F90 +Test: Encrypt +# +Key: 38E4DC1EE8DDE86154FC0FE9B7E5F8F3516168EC5CC075DA54EC9669B68CCA46 +IV: 7B3E3A575631A0E07BF8E5BA2EB321EC2E64B0BDA88FF4B6 +Header: 9B74BB0CA29105D4AB1407E9 +Plaintext: 763456 +Ciphertext: 14ECA8 +MAC: 6B5DA9F8B5571A88F676805B55054732 +Test: Encrypt +# +Key: 4490A2DD79510F04B1299B684ACD9255AEA3E8B674769225A542753001F4275F +IV: 3BBBAE4286C4512345E5828AFE9D77BAE606DBFF7A14E21C +Header: DBAD69170A182F5C65682B5864 +Plaintext: B44A35 +Ciphertext: 0D9B10 +MAC: F7ED8FF15AA907B89929FF6F83B9E7F0 +Test: Encrypt +# +Key: 817FA9981AFC930F9FD63941F4CF90AAC5D51201ACEFC2EA0E22243A2F2D45DA +IV: 374766EFD4F3FF8B9580C6BC6BC18B835EED4D4BC21940A6 +Header: B2DA26EC452DE82D961FA3D09978 +Plaintext: 1D8D26 +Ciphertext: E2EA0E +MAC: 0E52E29FC4170AFFA96DD077A1802727 +Test: Encrypt +# +Key: F78384E616587F1D2E600B08CEAE2C15588ABF984BB99D7EED98DE28886E64FE +IV: 2C39E3101F3157D03FED978FED54ACFFF615732E678B07EB +Header: 714DDBBB9B77E8F239AA199524AF01 +Plaintext: 18F603 +Ciphertext: F53C23 +MAC: A1BBC2B3A41A4E1FED39C01C9B200DFA +Test: Encrypt +# +Key: 28F1E90F308220FD68B26B995FC453A80FE976769B10510467A059781311DE63 +IV: 588C3F1A85F69243ADDEAF4536D554F02A3A8E7CE648D63F +Header: 454AEB63D4784F87363AAD02E165F60B +Plaintext: 85CCAE +Ciphertext: 4891BE +MAC: 64FB2B0D6254F9E1F3DC30DF44779EEC +Test: Encrypt +# +Key: 20E3C7BAC981C621B8CCDB3B700E067681B1E72C2C79C4F27E5054DE7393E711 +IV: B4DA7E29B8960F2DE40059508CEBB3496C3E29193A34FE37 +Header: C5FD2F06D6A6DA326B028BDC324A7BD0C452D5 +Plaintext: 8677B1 +Ciphertext: 83F8F7 +MAC: C3DE1C1050D63D9518D5D2AB910D534F +Test: Encrypt +# +Key: 5613186CA318BBB750A405CA4B555B03D31973BCC5175535DA905B63C03D20AB +IV: FDF86CB4BD1E9D58F3E8B0D71940D2B6BF6C092A54183874 +Header: 5768340B741CE7EA2FF1C663E689D8DA8820605552DF11D7889FB84FFA02CEA94F2FF67DB623E3AD2040CE19F57B +Plaintext: 83B265 +Ciphertext: C0E61F +MAC: BA103612CBB83233C05146A10ADD66CC +Test: Encrypt +# +Key: 8B5D716D7058AB17437EEE27A726A04A11762AB18AE4968ACE9210E3EC607F47 +IV: 0BF65796654D3D63CF42BEA436CF1B077451F24D221A148E +Header: A39563E9A62DA89C80A51ADDA32FD32CFE4A6088C5EDA40540766115EC3ED86F4C3D1D6B4FC2A2B81523BA0B1BAE53AF152FFCB810B72BD42492F833D3D3B9F2246D +Plaintext: 7C5FDB +Ciphertext: 7ABC13 +MAC: 80842FC17D90E72FBE07CBAFF02D80CE +Test: Encrypt +# +Key: F49BE2B5CFBFB4A7635AD98B8FEFE540036E5345282DF3C8FEE45C8CAEC71C85 +IV: 714CBBC935885FC07D60527F126C491059D92CD7B5E7602F +Header: 2F5BCAE8647CD0E934474761FA519B1F32C86EF61E50E5A2F4351930F50C2A7536BE35E62B7921B779D3873E7D2022A0BC0657753ADD65710256DB03767CE7ACA7971B72F02EAF5BADEAC89DB1ADEC27E8CD577B0F7B9682AD0282 +Plaintext: FD40D0 +Ciphertext: 371035 +MAC: F212EABFFB4B51C9F47971D495A3B5D4 +Test: Encrypt +# +Key: F0A2BB5B343565071FB65B878273972449C4C97B0789B1D01B619E1FA309AE60 +IV: A8E264778701CEFC941AB9E82D863BEE3E84A21CD93699B5 +Header: 9A3D7A19E5BD4C2817EDB37EC4E0824A33F0B5D36D3D9875AD3C69C6BDF046CFAEF0DF941C579731C7FBB3F99862B91C4324BD18C4E353C72507833D36D102C918E9536A2A44D418C2375C2BEECC43F9E07E85FD04003AF49D0C3E5D64C01A773AEEDE +Plaintext: E03D03 +Ciphertext: 463170 +MAC: 7D95D03643C772AED6292B9513F5FD0F +Test: Encrypt +# +Key: 9A0EB3975A6B92EFE8B33A8EF0B89A04A28CB58078492A1C2025CE176731F2CD +IV: 5547670F6791677B514A266D1281EF6897AA527C87D4795D +Header: 58E45A0C099BDD577D82E28AB64E275226E47FDC0F7E4DE8CF307BB30D4175813284D75B87AF54C066CCEEC94BA0480341E3D299828C5A80CD4B434D6B804115C839DAD9F00BE0A0F3A98AFF442FA11EDDBEAAC009B010AD4515794C70E8EA1357B5366B0152FAA8E80594514DE362B30F5B3E7FD1A86C4B +Plaintext: 92CBB7 +Ciphertext: 07AE3A +MAC: 8DD1E959162BB28F2728FCC8E54C7FE7 +Test: Encrypt +# +Key: 632D54D9A18AAC9B2654562721FC3535068EABF548CD72FEC87E0FDBA0345AD1 +IV: 882951282F7708F86F5EE0BC86C129458D796BF5716CDD81 +Header: +Plaintext: F26C41A9 +Ciphertext: F89510C3 +MAC: BEF0066A9372CF9DA2F31828D6BA1181 +Test: Encrypt +# +Key: A1F8941A5746FDE2C125948CA2C5DC1E45E754DB07CEA9FF6236A66388684535 +IV: 720563118850955EC095B8B0A3F869A185AB8F6582960655 +Header: D3 +Plaintext: 3BDA94FA +Ciphertext: 3FBC9C24 +MAC: C620F22223BF97457F4398F979DA9EF1 +Test: Encrypt +# +Key: 355535EF7CAD343973330348B4E76395C2DA0A5DDCE6650247E9ED046D63233E +IV: 124E2142E2F8CE117740CCF3E9FFE98CCCDDE50233E7CF7A +Header: 1FCE +Plaintext: FDE0E1BA +Ciphertext: FC8F5B14 +MAC: 133B97B0773281B5897EF9BBCDAEABAE +Test: Encrypt +# +Key: D8B1FACCD8DF3DA0669DB6737FE191CD856A6F1BD2ADFB6C19B481BC721A2FE8 +IV: 7BA40779BDD825A38947306B2BDE1196D385EFDEC4E8845F +Header: 69F42F +Plaintext: 350821AE +Ciphertext: CAC31ADE +MAC: FCC4BBB0411618F7C868734308A0B627 +Test: Encrypt +# +Key: 4071EA31CE414AF71D7B447473DD6C757401797E430ADCD201AE85E2C5A7DAB3 +IV: 165403F03E21B6A685C3F72451C57CC304A8846D9DF0F851 +Header: CDD8555A +Plaintext: 0D181821 +Ciphertext: D18FE584 +MAC: DFB92A865F05247CA3FDD1207835AB29 +Test: Encrypt +# +Key: 0239D3265B277975971B4D7496F558DF1A2EAD2386C3BF24BB80EA251DA78A5A +IV: A219DFD063B6FECC3EF7B935261B4904735BAF63544D071B +Header: 82E66EA558 +Plaintext: A42A8CBC +Ciphertext: 0725E4ED +MAC: C280B71107AB67A6BCF6AB08716BD906 +Test: Encrypt +# +Key: FA607B23EBB09FF55E013C2D27B062DB9A42FDE1E951D8296CDCEABDC66DB5D4 +IV: A63AE0137E0D6EF5715A14C72ACF9B255397B2B65A90F04B +Header: 45E608CB3CE9 +Plaintext: 816A1F93 +Ciphertext: A0B80889 +MAC: EDDD72F387FCF08850AA7453FCDED694 +Test: Encrypt +# +Key: 79F7C7D3C51F8F269A279853684B1BF2768481E1AA07FEE67A6D861B11A813A8 +IV: A7F9A435697E106EC167CAE4303E6F8B86010EB0B88ACD5D +Header: 4AC4793E4D59CE +Plaintext: 929504C3 +Ciphertext: 3042384E +MAC: 59A099D498EC654BED6A6D94FB130C69 +Test: Encrypt +# +Key: 626A2984FD5DA68CDE500726279FCEF83FD185EEC51F2D03807F0BB2B1530C2C +IV: E8BF618F82D6BAB4845CDB39D5443B70511C128A1B2D7945 +Header: E223FDBE074D6A4C +Plaintext: 78747F9A +Ciphertext: E8D9A224 +MAC: F57526CDED6E7585D346810705C5870C +Test: Encrypt +# +Key: F01831791C82335FECA2071D98C9F38EA6324D72E3D7604879A0ED6B3D6591E6 +IV: 3BF8EDBFE1A8CC4DAA4E510EA9D028C6D13650741FDBB98E +Header: 62EA422BD6B1A98188 +Plaintext: 2EF0A7E0 +Ciphertext: 74ACC9F4 +MAC: B5EC532498991A3C7C9F281E8D8FB992 +Test: Encrypt +# +Key: 94F91005AA0E766CF8CFA5C702C7B3353FAF49230CAD60C66633AD803701A76C +IV: 3B494020EA265AEB0296EEAD9A4270599C5121764BBAA604 +Header: EC6246FD2C0065B98875 +Plaintext: 29C15378 +Ciphertext: 5D8FD693 +MAC: F3DAC9EF2D6E0A178FB7916B8FA994EA +Test: Encrypt +# +Key: FF85D38D34EB734482BE9D82939507D752BFE00C0914972F7F0014B03705B114 +IV: D068EBA5A915B1C7E837F678792B254C62276C1D60424A40 +Header: A54AD719774289B5F9B252 +Plaintext: ED3AA2F2 +Ciphertext: 48EE4A72 +MAC: BA992E07DE9F2FE30B2C64E726090D12 +Test: Encrypt +# +Key: DED7F0D0E67CB4B4DCCA04BB83743F5D69C8983AD35AA62F54846F5A8401C3E7 +IV: FA2A596BF4D9613B9F85919E2F38F73502C7388F11A929E4 +Header: 93CE6DE2A290C43EA30AA53C +Plaintext: 1BE46B6C +Ciphertext: ED606DCD +MAC: 5051076D3D564C870891EC9CECD86A87 +Test: Encrypt +# +Key: 177005B5DA34807ECE01D567303944C0FB070C253DB2FC0D3D44EAAEB9CC8B23 +IV: 1F683A84C1F3F4226282B58351DDBC074DA81355853CA4B2 +Header: FFCA2BEC1C8C977EF70EA0EA27 +Plaintext: F0E86C9B +Ciphertext: 332C16D2 +MAC: 44C14EA5C5D28C843D85DBF41C378F06 +Test: Encrypt +# +Key: 4D704760CA744A8C10B0D9E2BA5C10B5536DC987D5BCDD5F8D32085D11AB6D23 +IV: 3823BB9034A5985BB5DF821AB467C307F14B4198FA9AD2D7 +Header: 5F02055E5965501B9C89B7D991F7 +Plaintext: 34FC1D13 +Ciphertext: B7E7FDF9 +MAC: 39463ACF512B853BDFE48DC06807BC6C +Test: Encrypt +# +Key: 7E4772A17277C3F41F38C80A9CEE472DCD863FB86575071DE5599F05CF45B5E9 +IV: A5C7D1C4F76F04CC2D64701BE41546ED3996F1827C3F4499 +Header: 3DE5AC93F26CC2160DEA95E0554FC0 +Plaintext: 46C1969E +Ciphertext: 425FBC69 +MAC: 9833AD3539AB8BA0FD5945413B457329 +Test: Encrypt +# +Key: EC85E7B28F6E440651F54AF767F0B6E2D833F2783E033FABDAEE99101563C8AD +IV: 5A33BF41A76514A2E2421BB84C411C6BC7A76C9DD817FE7C +Header: A2E7B5230023612415373B0874CDF5B2 +Plaintext: 1B6989FD +Ciphertext: 0157F20A +MAC: 06DAFA85D5AF18D3F9AE370ABFC60A43 +Test: Encrypt +# +Key: 00CA8B692008736BA0218F7575A16AA2EA58855B058D3EB2067E6E67F9245898 +IV: BE21D181841E559D088269D74FBEA38178EE7F6787654765 +Header: 08C93D9027F3711178AC721841DDBC745338 +Plaintext: 41579093 +Ciphertext: 3A70FBDC +MAC: 41DCD1EE6CFB12ABD0DC85599B6F2CE9 +Test: Encrypt +# +Key: 45D6798FC284E185BFE810EFBAD16809EA35F03D9C5A4F928C6754422A070A33 +IV: BFA629E0E16842BC9239F6717D460022502FA76C37CA97BA +Header: C82E516660274E9F31B0D0B2D5F60C7CB13433543617049BE827599861D8F3A357F702C14268B803A313BFF0 +Plaintext: 04D51A38 +Ciphertext: FA7177EE +MAC: 69F88DAE36105E748DCA3C0E8FEB0B93 +Test: Encrypt +# +Key: F41678CD932611317780725D52D8BE794D0EA2E05F93AF729FFE135A63663FE5 +IV: 41292E66B09C029751D5EB25FAF15CEDDDB1D56A2A6146A3 +Header: 2C5E26648C4C9F40BD9098991B0A4FD22644B31C7ED3583FF1D7CC8153D07BF0FCECA5EFA8690C4F8431E22214 +Plaintext: AC05477C +Ciphertext: 7C349B66 +MAC: 34672E0898B7BA495212E2B395BF4E11 +Test: Encrypt +# +Key: 1D37C9D2272E74780DB6C7679CE93CC0E9E95EAC5A02C44A7CA98E7EE768E352 +IV: 555908B67AC9F6A3C725A56F537061BFB30D616A59FE74D8 +Header: F4DDA05FB9216C2BB45C73B192E2A642274F70D9F27AB44691F452D9F69097AAD869B73013F2EDC179A037339521F58BA32B8CCB5F9E8950BD2AFA4576 +Plaintext: 241FE4FA +Ciphertext: A43A480A +MAC: E5272244FE40F25F5B824F422D05914D +Test: Encrypt +# +Key: 534DFC23FC99318550489F10E865E26A05E09C7A2731646B03F1E02D132CEF98 +IV: 6271CA1BD6E1D64CE1DFBF2064F6B40A4F99CFDAEA23FD87 +Header: BFD6AD7B241ACD32397F878FDEC978CFFD91FBB30CC9DE551E365A5D5AFFC9AA652F09167A1ED1BBE173433E0F83958A7FC911845BD70924A10F282278D8B266218F5E82D20FE57404A35E +Plaintext: 0B9F9F97 +Ciphertext: D36F368C +MAC: 308DD818D95D9C0CF14A65E59C1ED878 +Test: Encrypt +# +Key: 5EFD52601E209DA6DA93218E2887AB29915FCD414C24F8BB3920A60222015DEC +IV: 3F8868C70485C6B754FF267ABDD2D7DAC185A4C3BA483A5E +Header: 22B022BE881BB17BDF5D1926FDE71E3C45EA466BAF7D2F0A119AADD3C720C306194E4B22CD45CD49CEA81A91882723F9D383EBC621BC81884CBFC309D272CCE45451BB0329333721A9256A6A1603B774D17DCE0166B3AB8821D6C5BE532B3FD0AF4B1DF8160019F4269B +Plaintext: F3583C5F +Ciphertext: 2DD70186 +MAC: A98B9BD93D1606815DA4AA40EB30EA01 +Test: Encrypt +# +Key: 91EE2D6E8858D98A85249853D93482F439C1ADDA6B461ADFB51015FB81B6D388 +IV: D16FCC4BAEC42F2628AB707D26FBAE85C0E1EDFDFB5479A4 +Header: +Plaintext: 64CD6CA9C6 +Ciphertext: D6305BFC03 +MAC: FF500B95C1BC6372EEB638B86B632763 +Test: Encrypt +# +Key: EDD44F19073A59C95D42167CAFD6A133376C5590692B98473CAFC37E58759424 +IV: B138808DC8BB20EA879D69DD9B24B9498ECF9F4BF7EF79FC +Header: 22 +Plaintext: E15F6BFE3A +Ciphertext: A5082463B6 +MAC: FE188F77AE09E6DBE58058BFE2E84F31 +Test: Encrypt +# +Key: 0E11E0811D505E24AD43E1E4B0662A45F132A9F831FCA429BE009EE07D63F8BE +IV: 794520E100F7801EAEBE7CBD4F597AD141919E1C2B2CEA47 +Header: 2782 +Plaintext: 3D2304C541 +Ciphertext: 1B9020DA91 +MAC: A9BBCFB97F2BC97C358CBF6E3BA1504C +Test: Encrypt +# +Key: FED082498C61F2F431ADCB319A3DEC9FB1627F8E8F9AB6BA938293CB045DB14E +IV: FF8B247FC83FFE59308EE1822A57291046997F7B7B830A56 +Header: 737D49 +Plaintext: FFF74C3DBC +Ciphertext: 95ADBF359B +MAC: A0F13611CF7B1175B2C3275851AAFC28 +Test: Encrypt +# +Key: 77C1BA5D9443EACD6A307016310E03A6C58442420B29B2F280F00D5D035A7205 +IV: 06A762E4CD8D978C176033B6289B8AFF9F7BD82B0C5C25CB +Header: 23399534 +Plaintext: 0BA62BA6DE +Ciphertext: A880AE4449 +MAC: D2793EF94E05455CEA3FAADC0DECD6F8 +Test: Encrypt +# +Key: 7FC6A51F3154AD86BE7516327092380019AEFCEEE93C6C66DB56E526DB35908B +IV: C8B27770A476AEF0C6B7812E565860F213565E34EDC2F136 +Header: 57EFAADD6F +Plaintext: 303EB28251 +Ciphertext: 22D28635CF +MAC: CB7642604F79FC75CD580A8F6203BBF8 +Test: Encrypt +# +Key: 21DF0236CB92EB4C867F3ABB73905CCACE8DB7255EC4E997C658A723E3CC1A44 +IV: 30C47A3E0E40F8A5F836725D4B8C0E4649D35F28C8E58585 +Header: 19D05170F0AF +Plaintext: 22A81711E9 +Ciphertext: D1D3CEF90C +MAC: 5C5B307A00B89BA8C6836B5CB078152E +Test: Encrypt +# +Key: 1D9CEA9955D343C7E0439D39AAA6F06C42A5A28AF7337AD0077C3685DE526287 +IV: 213DE5C4073631CADF9F8612DE6DA59A60EF8EB615CE94E2 +Header: A31A070D569EB8 +Plaintext: 598001055A +Ciphertext: 17A9528785 +MAC: 9E04111F00E366307112A480F84E7544 +Test: Encrypt +# +Key: 08771051CECD5CBD6CA9D26A0E976411AB35A1AABD6450B496AEB2C87CD7ACD2 +IV: 7407583A356A8F734A6894FF4C30A97CA473C9C5D6EC53F6 +Header: 454DF3B35408813C +Plaintext: 4F67A4C7AC +Ciphertext: 42B17F18A2 +MAC: 4423C2F894C09DE4A9CB45C6E17615F8 +Test: Encrypt +# +Key: CEF15CBB48202492408A6BC8D806AAB3F7766065775DE53A974470C20AA93D83 +IV: E7AA4620A45BEE99C22B4F2C1BBD1117DF307E1E40BB5C13 +Header: 85800C5CDC00993320 +Plaintext: 55E1A547BC +Ciphertext: 85CBC4C5E7 +MAC: 6DC9E06107F4E73290D2B02D746EE5D9 +Test: Encrypt +# +Key: B6165C9F0AAB65F072AD89C7AEF7D6A04AE0DAB8CAC5F4BC3B2BC96D14286F86 +IV: A21B6AF24FB1EFD776132AC6CB2F04CBF65C9D3792B3A325 +Header: 6334B99350710FBB24C9 +Plaintext: F78C1CB175 +Ciphertext: A5B76433F5 +MAC: 79832D2D6C2FE31C45A2FA2C2E15175F +Test: Encrypt +# +Key: A8C98DEA2DF97371F25A9C5C183E222FB5203E219EF947F7A13EF4D65CC9BA48 +IV: 86831D44AB5E49738C17469BAD44B7686D93113C4A4A6145 +Header: E434B9ACE7D78D1884F363 +Plaintext: 89B9F31926 +Ciphertext: A511195329 +MAC: B27E9D92A46B09EE55234F1FC7370324 +Test: Encrypt +# +Key: 18496A79547950DC1A549C7CE96D8FB395D3803EE68EB5D879C62648C4F0909F +IV: 6AEFFB446535FA055CA43C855A7AD18C1AB8B9141EF63657 +Header: 061D672B8494C402BB3F1F7E +Plaintext: 4933106B77 +Ciphertext: 8A3ED9743E +MAC: 636350949D1B5FF5DD06DDADCC11D4B9 +Test: Encrypt +# +Key: D24C88BA47E0793C9088916974EE13D7AC597ED3EB10052B00525ED86A075C3E +IV: F1CABD5AEDECE1699F49808159C211074963629F510F05DB +Header: 069ABCE2A814D3676462A65780 +Plaintext: 3A1EB9D34E +Ciphertext: 6A131CAF50 +MAC: 51BD7945A0FCA7E9EFE4B0DE33CF0327 +Test: Encrypt +# +Key: B71BEF5355056049DF3A35E44C1053797B5E473169260858B83375B073B82945 +IV: 0BFF6A3E85BD10004790E0AE565844F2FF93CA3AFC7F63D1 +Header: 336C7EF6EDBC01134E79CF646C17 +Plaintext: 5618F9C8BE +Ciphertext: 6FB4808AC0 +MAC: B819E6B5A1E5B65B2D47D08D73052C49 +Test: Encrypt +# +Key: 5074343ABD22EA3D11F1C167C3C84874897E4BFB8A8C48182B5356DA86679FD7 +IV: A93B338FF3C0A3B0360313ADD5606B045B80330B4E6CE424 +Header: A0C66468374D8CC29D6B977E8F1F78 +Plaintext: 568B6E5297 +Ciphertext: 627398A193 +MAC: E483799E062DD96E9EC6D22F6D160AD1 +Test: Encrypt +# +Key: E0777FAA9E3FF1F4315F0F2B0FE82EC2C355C0E10F826F94532D681BF63A7DA5 +IV: 0F11327663703C721A42059F02D6CA0EEB0602FDC80887C4 +Header: EA233A2CFDC4AE6E13B7575E5E375753 +Plaintext: ACE7FE0AD9 +Ciphertext: AF46D31B58 +MAC: 12AAAC11CF545DDCF67CFD275F1F8BB2 +Test: Encrypt +# +Key: 16EADEEE2F14EE19A53F1C588433FC5D1C925A73EDE8AA3F02EE2FBEB4B21B29 +IV: 33CD849A0667FEF9EA311520B062AEBE042BE03D3D208D90 +Header: 7433CACE76E9DFB8F41B9F726A7C7E9D149325375C925E21F31407FD053B +Plaintext: 4F64F4FCBF +Ciphertext: 4A6F8F95B0 +MAC: 14F64D8EAAFA4BE8ED7599C5F3F952E2 +Test: Encrypt +# +Key: 4B3DC9CAA3713CC2440970E1C7EAD1A19A49ED366CB0035A00220903AA325DD1 +IV: C83F928DA492825693490C99948A6567AD495C2A7053C17D +Header: 76C6A03D8D08B0B96FC686E3754D107BEA9B3432EC822CACF52EA8636AC4A86D0E98 +Plaintext: 5D5AA63F44 +Ciphertext: 9A73ABB61D +MAC: 4D6E3C81E15711E047EB2CEB3291BA44 +Test: Encrypt +# +Key: A52497F305DFA08096134B4D61F10352B1A30C37B527703074F6D9FE896465A9 +IV: 91822F1435450FB9C4A20B4F5307342ABABBBE30FC32A778 +Header: 3F5E6EAEE7B95CDE0863A40136DE78281A203E490605041FE7B22402ABDD0F52E64B4CA7719AA1D46056ED0D626E8E8268B13D126BB2FFA71F339ADA8052C59F97 +Plaintext: CFC90457A5 +Ciphertext: F2832C56E6 +MAC: E854891A3D24C95000A39A41DE0FD060 +Test: Encrypt +# +Key: F0744DDD3CCB42A3B63E4616A8999D10C2C965242A621EE9EEEFB2EB08F3F491 +IV: B2847618A18E3212BB0CAE34A9452E3F9F7BE8DABF26CF37 +Header: AE09C50B270680B46E7CDE303A5FFE1BFEE88D6952ED96BF42AFDD9137AB3D6826E27F9B7825C49A2F95752C4EF0359CCA54C9B8BAAE753D28392C3F983EE17E7D4EFC43268949FB718258DA49D63BBAFE210AA3BC155A23D8FD +Plaintext: 297217C901 +Ciphertext: 41D9AF2DFE +MAC: 0D3F243940D972889B9685A82697983D +Test: Encrypt +# +Key: 7AF51EB1A81C8B72322AEBC98D4F13E7F7F7D5FF4328E86E15C7293A6E1021B3 +IV: C04C830D5CEC0A875ADC57FAB5129F5BD2BE71E8CDF94037 +Header: 1C623732A9006459A53067FDC518BBAA3F2EC9DE05A0BB3FF6DA33FEC87398D38AA1508837AE97EA8C59A051A8603D4D1B3A21A83632D221EFB46649F788A36D87C9776BDFC3CF8F77EC3A36E29239557CA95333F2D696C6AE2602B2667B0586AB36EFD3D029A335 +Plaintext: 37473CBB43 +Ciphertext: B1B3B9462C +MAC: 472815ABA747C40EEA57F0F34E61E92C +Test: Encrypt +# +Key: B7667943A713D0272360B48DEDBE6751AB6F2933154FD29D54B941979EAEBEF2 +IV: D81F51CABF71D12106D07FE3DDFB06415F98A2D083A46A6E +Header: 66989E5BEC4D886D8FB32563913A574946C9448EDF47493F388712BA572AB910058CD7D6AB9C33159CF12FC255BC1306DBDC73522C76DDD9489473FCA75C7D458727382E3B518BE7CE5C11B4E0616143A347537DB295541A68BAC09C67464D577CCC0761E58095DD85E0E1211674C81986AC6A64CBB0161195 +Plaintext: 36C5DA9667 +Ciphertext: DC80323DF8 +MAC: 1E483E83D0B1589F6FD4F389723463E3 +Test: Encrypt +# +Key: 00ACEDF2D7F2FD5ABC941560555FF0748AE1D306BFD00902318AD0613DE1A7E6 +IV: 73F6EEA91DA7182A4091726030DDE89AF429487C73BF3F8B +Header: +Plaintext: CDDD70356024 +Ciphertext: 5443E4190A44 +MAC: 5D8EA7DE5F91BBAA369E0D73AE6774C4 +Test: Encrypt +# +Key: EA0C4CD5BE358C1E42F5374EC2C06FECF56B362DDE23A272BD3777D0F486BEF5 +IV: D5C5FFD0B0C431173BE17C2137D83B4B4ADBF826062744BF +Header: D3 +Plaintext: 7902575D016C +Ciphertext: 5019C257BB0D +MAC: 1501FAE41CD321672843C2454D4EB900 +Test: Encrypt +# +Key: B7AF98AEFEFC963D51E5660BD5641177C6A3A1A205E2075BDC96F8203474439D +IV: 79FF328E0FD9252869B6979DEC0DEEDB99102E41BE7B3490 +Header: D946 +Plaintext: 76AE68F01A97 +Ciphertext: 582C5076BB55 +MAC: 7240197C51735E0D0E2804A058F79154 +Test: Encrypt +# +Key: 347BAADFBAEE7FF2D5C4B2938333EB68408F547F85F722B96259ECD6ED137C8C +IV: 1E79DA4FF2DBA4DCA96C098AED303998F88BB8FEBFFD2781 +Header: 328C35 +Plaintext: E3A724C05166 +Ciphertext: E2F4539A44D9 +MAC: A8FB0067A8833EC62ACC69DC232D4514 +Test: Encrypt +# +Key: D6690ABB8DE87EE5084206CD9A3B5FF4074EAF04C42D73D171DF53DDF4E8713D +IV: 68FC489A1F808434CA95662F47D844163C53092C1577ADCA +Header: 9E29148E +Plaintext: D0D3DF6DD223 +Ciphertext: 67CAD1B91ED7 +MAC: 444A1C58F20300A06DB7E7822AD65B4C +Test: Encrypt +# +Key: 406298E2252F195BC80BA64DDDFFB2631319C31FDA36C37DC25B673DB691D581 +IV: 6AE216BB52979B289881BB23DD7AB14C724AF59CE234EB6D +Header: 1D49B022B2 +Plaintext: CF17024936DE +Ciphertext: D9813C14B8EF +MAC: F14616E871A473B7B765C7426D9D4CA4 +Test: Encrypt +# +Key: 11DE21B7D2883F9D3BB2F1117B685FDED6E9BFAB2444E390184D21B8FED6224E +IV: 3A2BB0C42930C048BCCD7E31363DA37981C1DAA34CD0E7D5 +Header: 3696EB38D793 +Plaintext: 75A05B8809D2 +Ciphertext: 4140BF32AF45 +MAC: DC01FC3D2406DCC1E5DE33242AAB38C0 +Test: Encrypt +# +Key: 79647233B612B6FC8AED87F684614F08EEBB4140E7507ED61050A79D14646972 +IV: 53BA13FB5DEF572D6EB29CBFD6224C95915D7407621A77EA +Header: AEB045EDA97137 +Plaintext: D3A63E0E0816 +Ciphertext: 1858B01E5A5A +MAC: E70CA94481C84C03FD33628ABE055F64 +Test: Encrypt +# +Key: BE14E853E675365743B3D705D87AE4C10220FB64A5E29F0F73FA008EAECF5356 +IV: EAF8D077A7ED4A6D98921582971341AC7187C66FD7E2C375 +Header: A9C0BEAF27333C8A +Plaintext: C00C9D27ABE8 +Ciphertext: 8199D32A5F60 +MAC: 5E1B51BF52102E63BCDCF749CFCC9B38 +Test: Encrypt +# +Key: 5898E765BEE661DA9669475470A1F5A035AF6AFABBB42CC5E599D2866063365C +IV: 473DEFC17071235F1E7D4C88BA4771C072D2EAC12B39306C +Header: 8C329077DBB5578FE3 +Plaintext: F74B1A6974C9 +Ciphertext: C72DB4EE3318 +MAC: 1BF385D8D65AB87A2ED29B1B2C687C7E +Test: Encrypt +# +Key: 54A1E7A95204FEC1EB7A2D2222ACC2A8B13C94F1AB862C5B8BD2E9ED0F7045EB +IV: 2B9608078EF2723236C45510AD43334CFBDB54446E95A327 +Header: B831CB8F56F38A11176B +Plaintext: 74C619B2A0F6 +Ciphertext: 3003E3929960 +MAC: F34AB20C77823DC6115600B3D5848BBE +Test: Encrypt +# +Key: 24DDC5A5E6903F26664E3A7D4F8FD12BD33C2612E69B63FAB61B5813C31672CD +IV: 947A2330E465D0712F1FE52E05E12BC3114E86A7D0A44A50 +Header: 0A0ACD1540C9DACC24E937 +Plaintext: 813DDB82EFE5 +Ciphertext: D320199B1DB4 +MAC: 467EFB54E3A1EB3B4AA8DCE1DD2BF3E2 +Test: Encrypt +# +Key: DE3A4274A0508A1EB4FEFFD1041FA83F535D5538C9D8C3204F18BD37B922A9A0 +IV: 075BDD2417768096F8BDBB40C46B356A9D0770B7666F04E0 +Header: B21290CD40950E9E1A648653 +Plaintext: C62D901491BF +Ciphertext: A2E86D4D9CE8 +MAC: F5D379375A747D40F48A7685F133C049 +Test: Encrypt +# +Key: 2B9646D464075B808EB22850F5A859501B5E3DE1C2397B152FC778FDD7016098 +IV: D831ED8AF80FCD43B469608941B2B9C326FCB42517E75A26 +Header: A3743EBF89901EAEDB86604BF1 +Plaintext: C7B727C6CF7C +Ciphertext: C8A37282E43F +MAC: F9266C14134A2C1B31D5030730C4FF52 +Test: Encrypt +# +Key: 6D9E7E22FC63D5A2352810BFAB4D1AB9616155BC97C90F0CA8199A643D99191D +IV: ACCECD003C8892D1758C213788838C2685F951E2B21DB46B +Header: C548A4CB55A0B9AA32F160AD52E1 +Plaintext: D2FBEF620A00 +Ciphertext: 47D3719C5191 +MAC: 2A21C42E97C4ACA572474871B22AEADA +Test: Encrypt +# +Key: 3FC8B953090AED14C8CAE4ECE488D1AADBAB332DEA9481325E27B209386CCAC0 +IV: 8708F08415CD6AA3C48B598D147306E22A753FD24836CF22 +Header: BAC470279478C89AB62C11EB8612C2 +Plaintext: 57E4EF07AF13 +Ciphertext: 0D9E7A35C98B +MAC: 586FC461C288E6806E49D15694344640 +Test: Encrypt +# +Key: 4034B5245E7395B229D71700FAD8E4BF92BD8C72B1D8CB64D7E8A37E5D3B2AF2 +IV: 2C9F323F909A01DCBC0608FE400CF544624716F77C2700AE +Header: 08855854974EB83B99C1CB3F72639527 +Plaintext: 959623A2597B +Ciphertext: 0DD57637746B +MAC: E63872E934954E9756C755221BFC898A +Test: Encrypt +# +Key: 2AA405802B6E79840C9FCF0BC1E776A19011EF316887F61868518A375AAA0648 +IV: 02F0D0693A7FA8FC171C2ECE78E5801A00DD38DFABC14BB2 +Header: E2BE383365D5A65D9E2C669C6EC3CEFAF118593088341AB50175 +Plaintext: FF19D1F3BF62 +Ciphertext: 201D68D9024D +MAC: CD1451260B5D87858B5FCBBEB9D8FB11 +Test: Encrypt +# +Key: 39EC1498548BC4E649F5AF95C7C7D9509CD7A4888BBB842D06593AAA65D4063E +IV: CBB29A9054D4E9212C857AF16A346B5F0205DCF62003E886 +Header: 4E7C209A7165B2797D40DEC33B2F7EB77D9FF6249DD968D9D93D0CAF9B6BAC1DC9E90763ED702FC8F7BDA28DC771AB64E3DA95A20E945F +Plaintext: ADEF34997B55 +Ciphertext: 1159515AF694 +MAC: E2D2D0D84F95B30DF07B7A490A1D81DC +Test: Encrypt +# +Key: CD836B026E3ACF11C363DF26C13497F1F3B71AEB11873E229E79D987D3ABA465 +IV: 73F519BF4872825FDF6CFB9D89ECEE618AE8D259AA5EB370 +Header: 094E7A26DAD08B2C2A92922A0D8E8DED964B0B048A38413F171752100EE997055F7F29AC5384083DB11D0A169FAB8C6C8F95F024FF4C7141CF3EF2DE57E614 +Plaintext: E0856770F8FB +Ciphertext: DD132773BA9B +MAC: E009849B54F5C278CD211ADE1E2A2C62 +Test: Encrypt +# +Key: E77669CE623A5CE30A9E8A016122178FC3F1D6C824F48BF5CD891DF38A78CE98 +IV: 1E7BA541E41073FD0F8D6796E63386BC70D8B94A775FB3DA +Header: 2B90C8A57CF1296001689C883148D60FF6CD8E846F2C7CC152D2573A6693A745C95234D6B76D504F145784E82765A65DDF5441CA4F6C4C8A25ADC42F16575C579C65CC141221D0648F7229A612DD6EDE4510E5341936 +Plaintext: 743D224D1702 +Ciphertext: AF7805B2DD0C +MAC: 941508ADBA657410C717A34848EAC5FD +Test: Encrypt +# +Key: 127C093B9C332CBEE18019FFCB7062FA27B468BFD5FA25009AFF6498BEFD4326 +IV: DF0EA092D5D0CC60A6F70376A0C98AD16DDD6F36FD1A74CE +Header: E1709A122241E49FFBAD7CE298DCFFF71D59804EE8DABCE2AB06CDA08B4AD72B025162355D22F9CC6CC0C746434D78EFE1787CBAD4679B8ACF44B24CED9268F476293D70AE9571642F524411EEC02BC730CED3B7AFFE11FB00012CD30BA5B11C8161F6AA56CC05226D5EAA +Plaintext: FA41E54FBAAB +Ciphertext: 58AF2255D9BB +MAC: 5F4E9A56CDAC8F77817ACC485F2FD93A +Test: Encrypt +# +Key: 6A076084ABD6F57C7100ADC31F99B8408E34A3A5901439A8A690221B51DD377E +IV: 28854E13AACDA0F91CE13817351AFC3D6C36FC7FCB6DC60F +Header: 28391CF9BE9B4154379864E5C19337FB1D708629E9E29F26258329E8B7970B2FA2395E64F792E9AD57D8659DB8320C5B4DA7952C991EA2F88F91DFE56C169008E99EE49C39C97749ECFCCF2AD7921E5543A3CE898DE3615120EAC9B42C210439CD24157A2F82755AAE0D6B66 +Plaintext: 500D201535F7 +Ciphertext: 921C1573E3BF +MAC: E8F77389F6850A397393833AFB90B1B3 +Test: Encrypt +# +Key: 788CB902A0BBD53A4B5BA0AE72B18C2E12BC63F325F00A0D31C97E4C205EDE27 +IV: CF8C5712365E723D0A2D696F3696D6EEBE18A1C2653F089F +Header: D57F8EBC44CB27920180BB35BC65833C196A0790B5C3D3E6B2F14DA94E04F0ACA045520881E487FA0BAAB15CD7339C19E9EE0A260F1F5C1FA0639AC2E8D1C4656498B52A8596C5A1D1540B059786BE95F48BEE5AC34FF63E46B573212451B0D9491603D19F721B7005CF26219AC3B901185B97E9C0FFD3 +Plaintext: E50564A303E4 +Ciphertext: C7AD79016830 +MAC: C75583D04BC7C3C8775F74661B2144D4 +Test: Encrypt +# +Key: 95DDF5A59F55CA804A7859EE3332C810E08C3B46BE07910869DF93F44141BA67 +IV: 077C7F7D6005CAE396E873153887431E87CC2A7A5B12CBB7 +Header: +Plaintext: A4B63F1B7D349F +Ciphertext: 54D93FD4AA0DFC +MAC: 024A828DD268987DA9DEC250A1D6406A +Test: Encrypt +# +Key: 2BE24CDE637D962AA92E9D3E23ACDA5F1B85B8A04C83E0FD21C9524C9DA4EABA +IV: 8D415451E11421B5A86EC0AF3E72D286A65DD6870183E9FC +Header: 1D +Plaintext: C8685463E02F5A +Ciphertext: 2DB5E386EF65B5 +MAC: B54C6F991AF7B5688C6F3BB835406C56 +Test: Encrypt +# +Key: 0D031596C4EB557B5633777368C334E4DA77906B8EAEDEBF2060C0079D3AB6F0 +IV: 446F7881E01CF05D247AA7965E222A2F5A01E0BBDACE492D +Header: B116 +Plaintext: 98833DDDC4AE0B +Ciphertext: 74D4CA9FD1FE07 +MAC: 658B8745A479A93D55784FD8C3FEDD6A +Test: Encrypt +# +Key: 9BF9AD289B53AB1DF342E7203D3983C7F78BBDCEA16FAF39C53C0B96738E2F0B +IV: F04FE538969720DA315ACB7243BE5180F758FC9E32FBA0C0 +Header: 0AD8D9 +Plaintext: DD9A66EBB503FB +Ciphertext: 10D28B5DCAF024 +MAC: 782F2541929184C118BAA4761B8BEEFD +Test: Encrypt +# +Key: 1CAF73A38B764A3706F4794B7B2172B2BE9765A78544EF73C0D7E3DDA569FCAF +IV: 8A591625E113FDEB9278FF27191403AC4C3E723626AB1CF1 +Header: 0BA9A228 +Plaintext: E66D0D0D4F2062 +Ciphertext: 003A796578F867 +MAC: 1E1FE58F35FAC5672F48275279F21D9D +Test: Encrypt +# +Key: 96A839802A8CF0BCE11904CE6AA0493F2AF14CD746DBC6602B16CA781F1E26AD +IV: 4C0E1C48864284D1B2B304E2986FBB97034F9BB3E0B479CE +Header: F437072297 +Plaintext: 2249A623DDC38B +Ciphertext: 0C05068820BF96 +MAC: 7D51CBE301A9894F15D102B08DF811D1 +Test: Encrypt +# +Key: 26953C65A52DA4D8FABBC0A9F9FC41672499CD1B21D8AE899DD3D31A2BF549F8 +IV: 5B826185CBA60776FC415F3E577FA764A4F0463648F69205 +Header: 8F6B30D4A2DA +Plaintext: C6E253106ABDAE +Ciphertext: D8641CFA5A44E5 +MAC: BA6DB761AC9F8E616CD2DC9733F29156 +Test: Encrypt +# +Key: 879E1D7B9F598C86252CDA918BDFFF7C8D77781DB680C7BF8CBEE379B4AB7492 +IV: A655E1335B477EB1CBD9F88B15B3B8E218B7AD8BB6CF8603 +Header: B065F39DED26B8 +Plaintext: 0018DC77A8CBF4 +Ciphertext: 3A1D924C5C8E39 +MAC: 183FF1B956E8D317AE0D75667840FAA2 +Test: Encrypt +# +Key: 0E787BDA6E9C9695EAAF01B92EC175230E2FF1386566B060190D5E223EA51FC6 +IV: 99202E7AC11D33B14ABE088A675E9F089606CA1782A00E8E +Header: D1D96F18A141AFF4 +Plaintext: B7F6525A00A08E +Ciphertext: 90C02D5CB23B67 +MAC: 824452418A5EA6256E59212170568B22 +Test: Encrypt +# +Key: 005A604F96982B7CA4090F0F7AA2EB260E30FDAB633F382C5A9A7D2CB47A46E4 +IV: 6C179E8BDD2E26AA9A5171F10902E3D5C13C3C0EE4C2F8B5 +Header: 88ACFFFACD98448C1B +Plaintext: 0E14F7E1778D0F +Ciphertext: A61EBE68639508 +MAC: AE56C2C14490829895960F749008125A +Test: Encrypt +# +Key: 56A6C77E9EF66C44B911CC72D59B8AAA38F84259FA28721D1C8C734825CE8F2C +IV: 9D4E988B7935A06673DB4222BB882884B204924694F6C313 +Header: 16637EBC8CC03C333DCD +Plaintext: 496D379D6A91BF +Ciphertext: 41EBD2A56195BD +MAC: DF3024FD518BA7D685D3B1A2B0A5205F +Test: Encrypt +# +Key: 72DC13C2EEF848FEAA035F6B8B2BBE09F5E5DB18DD3A108BDE9BAB9724979BAF +IV: 014609E43AD7D254AEE58432EAD1155AC7FC7337042ADDEB +Header: 5134D55ACAB5E0533F80EE +Plaintext: B806574FCA84BE +Ciphertext: BEC0AF50C7D30F +MAC: 74EA2B867021B8FB5B52F4978E774E8C +Test: Encrypt +# +Key: 6617482EA3B7635061F1E67AFE35481CC88F469F1D188C878A15E0E59DFD7820 +IV: DFA705734D40540569FEA594A51B79121CD0EEF9B283269E +Header: 71A9170983142ACE87540416 +Plaintext: 12CD9A00CECF94 +Ciphertext: C254720B90B2C8 +MAC: 4772EE49C0BA88663D433FC892DAB396 +Test: Encrypt +# +Key: 2553F1144DF159AB61482DBE1F5409DC2460D1043B2C4C6ADF7F2D094337F00B +IV: E90F6E400D1EA2499B294EB665D6DD64CCFC61AFCB3A8E20 +Header: 04E9949BED03949E04AB5BDC13 +Plaintext: 22CC745856C200 +Ciphertext: 8910B8F0EBB541 +MAC: 1D24D7ACE82E3E2DB42F26FFFDCB92DD +Test: Encrypt +# +Key: AFFFB61FD642C9DB440E390E6066E50AB1404FC85B4B78EA49002CF5E3B2DCD3 +IV: 0B45F981E7109AB7C26D66A5E6F6C873CCEE973A504C7BEA +Header: 84F0365376A8C23F34F13B6C1B27 +Plaintext: C3BF88CEDA3A53 +Ciphertext: 747693A3E276AE +MAC: 1544299758EA8C7BC8382437564003B5 +Test: Encrypt +# +Key: D47E7B0F38D65266B4205E9DCB0DBF5392F752243FA12775108F723C1609C1E8 +IV: F7AD8AB73D3DDC8AF2F8678B64276F38082368BFDFB0EC52 +Header: E5AF074D7237960B77057773B7569B +Plaintext: 0FBEDBEB6A3D97 +Ciphertext: 017BF9A71C7F32 +MAC: 2D40307A980251784165BD1113508DDE +Test: Encrypt +# +Key: AFF7D8C8A5EB448EFE3E4C1B7E48F8D8D1F0E2643B3634EA76DE127404F7B802 +IV: 14A137D54C5B2120FC137A1CFE242AD29AB1E659E2D04C52 +Header: 96BC7F21E66723C6745B36D9DFC1AC71 +Plaintext: 47992A606A9073 +Ciphertext: 7392FD429512B1 +MAC: 6A716B07439C76BD3C40E1E5770A7E4A +Test: Encrypt +# +Key: FAE1D2EB175F1DDC14926AE19637105E4F07FB6F9DCF9B562A916B640081958E +IV: 55E49CD9FE9AE429A1D451E23C26F9F41111FAB710B0C4B8 +Header: 5EAF47C8D48D32BB5D3813F8175720C3EFE534AF559E45B3E36538C4EF40C5BB8069567A3BA7431C0B1E22 +Plaintext: 310FBDB39EDCCF +Ciphertext: CADF275CE328B4 +MAC: 5E3B7946F138BE3FBB7D15E592DEF5E6 +Test: Encrypt +# +Key: 1ECB0C25730B3306C7C8F6B83405DA08CEE2275D3FCBE8E17F090F1FF52FBA52 +IV: 214503A1A2BFA0AD4B9BF3F184104E0A793C2F4EF005C332 +Header: 9B4C9B9B1C40CEE066A86F33D629B70F712222074672F36517526564E2ED0B69B7251318703B0F4628347F7411B9E55775631D713CA653399189F8452E90B6D8B7 +Plaintext: 20A8A1A4865C57 +Ciphertext: AA375E5E4EBD24 +MAC: B6FB36AB36F17A20886F91FF8B9FD143 +Test: Encrypt +# +Key: B999B8A1BA524EA101E078587FDAA1CECC5C688954ED65DA568FE8F38F47931B +IV: CDB9ADF05C245AC7026F96E7194976C69080ECEAE9C4DED6 +Header: 94F6428BFE1686522755683E56F7CB9EDCE6C03952CE3137007ECE05686E3455CF9FB42C7F97F89948AA09B7C549B8FF7D170EA2468FDDFFBF2834C6CCF0274314785CFE2F0640D1E332EFCDD831FA20D3F082F30EB30F8BF2 +Plaintext: FB759AA4FFF4DA +Ciphertext: 9DEAD367CBF206 +MAC: 21D8ACBF4803F815862251801A092A18 +Test: Encrypt +# +Key: 20C67645209E01224CD5D2EAB957B8ADF999A44AFE870DC25DCE2FA16259C2BA +IV: 437C11D8041DECCF849E806A49F9D37E4DE2AB1640EBED15 +Header: 5387BE1DF3986403B8DA7AC3966703C5E638B3C5759BB4D9AC43990AC2517D9EC2A54DA52C4C92EB823713F20877FB927DFC7230004EE5A92A05C8AF8F2B71F9B02BE3ECE39543706BD8B22416185E6E0C5F9F8B84185FB0BB681931865C633CD2CF8CA428AF6154F74A32 +Plaintext: 8747D132C2C18F +Ciphertext: 9EE339BC40046C +MAC: 33F3A86278A62E88510FBB4C864B3A9C +Test: Encrypt +# +Key: CFB0F4D459FCD72BBA63027B4B8B43AEBBB8BE1099D4BD1BE5D1E81A0DFB9EB0 +IV: 7B111E7912F9BF132930F92EA7CD8536E88386F60AD77A63 +Header: 62754DD5551E91994B78F86955C7B0D13CDBE835EFC62AE19FC277609A65CBEFE14285390F1E7F76017B79713CAA64F08ADC421A07F1552DDB416F8E026B3953B2CFB0A7576B416E157D45C00899923DC63F2108DDCA394B122C1323165E4BF596416147D22987EA292D3B +Plaintext: 5B009F15323A82 +Ciphertext: E6C9991CB1363C +MAC: 05B00995F773056CD141369461F25211 +Test: Encrypt +# +Key: D6E8B74F1338B67412F3A1BBB20A444238E167E8544DF96F465D5F3AE58B702F +IV: 08382C73687D9121FF69C448EC554CE99E6B0CD3C55924A5 +Header: +Plaintext: 4492E28C61E9B5FE +Ciphertext: 69DBA84A7D228BA7 +MAC: AC72CEC81F8DFF432FA93FFD30A948D4 +Test: Encrypt +# +Key: 65EC5DDD40085BB2E4151508718390A19B0F5EE6A3D5BA11EBF880A927DA9CB6 +IV: 55AAF026F080257A64D87A72213447468FB448825676526C +Header: 37 +Plaintext: 4E9E2A1DE6C554B7 +Ciphertext: 96A3E8023EE20BF6 +MAC: CA6BDBB3C15A2DEAE474AABC771E9B36 +Test: Encrypt +# +Key: 5B55BC6211E8A39CB6D86B8A48EA673D669B6E2AF895BFD5E0344936509D3255 +IV: A30F14A229E5ED5FD2EAC4BEC13D008586D04D1EC7DC7E68 +Header: D0F8 +Plaintext: 2617390BB46E89F0 +Ciphertext: 4879EE93C80FE272 +MAC: 5F42FD38C18A148A9A8B0ADF705A2A0F +Test: Encrypt +# +Key: 4BB424ADE009625F044E9D528FC9340D11A3DFB36A34E78D0912C3E3B36025EE +IV: 41DCCD4E112F2648E2F127FC30E079EFD5A3D2785069A501 +Header: 6E94C4 +Plaintext: E43A12338B048B9D +Ciphertext: A39BB6E31362691C +MAC: ACD8BE30DD40003E9110FD9ECB868637 +Test: Encrypt +# +Key: F4BD7AE04C91DF6225BACBECBCAA41586D09E9E87B1DEE43AAF206BCE2E3EF44 +IV: 898A96D922063EE5EB00175B6C2B3FE4303638ACE614EBB0 +Header: B86DD29D +Plaintext: 105028143E91BCE4 +Ciphertext: CB4533F8E2F2B627 +MAC: 6CAE678D4E8D1FB758D6B82CB3367C54 +Test: Encrypt +# +Key: 08DEF6327F653FA5B45D1DED6278D15FC3511075A1B5C573FD012C091B87FFE1 +IV: 1FA479EADC1F72BE3C501F66EBC7A6537EA98A6EE62FD857 +Header: D9288A7DE7 +Plaintext: BE2C307AD6DF91C8 +Ciphertext: BF02C4D9A2717212 +MAC: 0F21029D680A8EFBD329007F830615E4 +Test: Encrypt +# +Key: 33A127836266FB880EDA8FDB753072CB335F7771FA5149E32014CEF628FCE101 +IV: 241BFCC50392279A7D40AD2FCB2947A02350BD52BCD598C4 +Header: 7123CED6E86F +Plaintext: F61E6115FF2CCAE5 +Ciphertext: A3C82769D63C5A08 +MAC: 62DFE9F49181D7E696AF399E9F2625FB +Test: Encrypt +# +Key: 1BB645BB96A985836A79787DE028019AC091C57EAB90EC2A74919AE305D930C5 +IV: D82351A87B74637BEB2707A8C40C2319BB5DC5D24D2A6597 +Header: 0997F2BB97C940 +Plaintext: 34360B599D569DAA +Ciphertext: 68ED6865FC0EEA09 +MAC: 8DC1917AFB7AFE1C3071FE099ADA0D8D +Test: Encrypt +# +Key: 5D0FF7C5B4C760964A41E2D4AE5582954B647CCFAAD2FF7EE23E8B8A129B8AC7 +IV: 6A74567157F53F27CFED491DE859187EC49F69FAA583E494 +Header: 8E99C7E48BDB8539 +Plaintext: 5D4965832CC5AFA2 +Ciphertext: 4ABB180FAE3FAE89 +MAC: 571AB88C2CC700CC4CFC089635BDB096 +Test: Encrypt +# +Key: 27476914C49979AF4A2E7C2532AD77BA3456B61FA2E0C01E3C4F13F69737A403 +IV: 5BDDC7B743C3E41472CC07306C7775BAD23D549F8C4CE588 +Header: 230EF8FC59B8FAC437 +Plaintext: 197CCE11EC7B772E +Ciphertext: 7F8DDD3B10A12FC3 +MAC: 732D125A249EE3909D9DC9D75D556645 +Test: Encrypt +# +Key: 91244D2FDFA6C74E70AE873D1AF97173047922F578AA2EB064C62E6A1815CEA8 +IV: CF4C1E7835233004901D9F1A4E112C5193E5F8F1DE76D0C2 +Header: 46F6707777E0ABB25795 +Plaintext: A563E6A915BA324E +Ciphertext: 8C73B0976AEC2C04 +MAC: 26C0E9871331228D40AB25C587C18820 +Test: Encrypt +# +Key: 3F4DCDB4FFC4345170A246D13662F1506A520A8F547A5F4F2E6C4E1F9A260573 +IV: BF4BDF32542A2A471A9F253AAEC79886D113EAE52F660C04 +Header: 1C4526A39082916A4EB116 +Plaintext: E6FFBE43E6402CA8 +Ciphertext: 9996D914DA91EC56 +MAC: 75B278917670B365C77BC0D3EB389450 +Test: Encrypt +# +Key: C28EC4E8911DE9CFAD5589A2B61CF37C028450829459343FFECAC971E9D4860B +IV: 9E76E3EE43ABAAFB830934EC4DA7841CE9C1FFB44C03C3C4 +Header: 5376D4A5598A76A4B93EF20D +Plaintext: AE130FBE6CA09349 +Ciphertext: C47D13809B820EA5 +MAC: EE1DAB71BB029ED14461FD6F7B5ABDD2 +Test: Encrypt +# +Key: 9706F6DD5E51FCCAC355E38FE9270A669338ACF63EAFD269CFE045240110AE72 +IV: F7AED614C9D23A30D8B45D5F1C16CE30098190ED7A272694 +Header: E8F8A4E835DD66999AC27CA46D +Plaintext: CA2CB1271176AC3E +Ciphertext: F6C8CC25A4055371 +MAC: AFBE22806AAD48F4D18A91F3EC78410E +Test: Encrypt +# +Key: D79CFFC5FAD243B2FC37323B11315E60862793ECC363152DCC9E0F2CA80D1C7E +IV: 301A85DD584A0AE640C7AD5A70FF2DB84F528AD8B1754372 +Header: BA65DB136FDC5D1D9271AD6E5DDC +Plaintext: 8EF6AAD33CB394BA +Ciphertext: 47B0C55A90AB4C94 +MAC: E0AA3DA52595924F1E91D8D069D14E62 +Test: Encrypt +# +Key: C21B063A52186F21F52E71D81A569430CFBB391FFCD07F9D4AC4895013E5D401 +IV: 54C6CE1E720704C296BFD9A1F069FC811D0A4DB9355F1D56 +Header: 705B03631215127C4F083034257F18 +Plaintext: 06028C5F2420453B +Ciphertext: 31574904408C2B10 +MAC: D1F3A2C4B038319CF30DF389A6DF5853 +Test: Encrypt +# +Key: 7D0F8C49748A05AA69050238EDF6DCB040FF14A4C0BA8F2DB5F4BB7FC55DA609 +IV: 58C2ED91FE01A717360FEB08D133937EBA9EC87B0BA5DDDD +Header: 2938669401192C664E67F9D460C684EF +Plaintext: 9A343A739C9BE29A +Ciphertext: BEB0B689FE7A541F +MAC: 3D5E0A3BFC0ED5A89FBB7F69C884FF78 +Test: Encrypt +# +Key: C0B2D81F3734B834074603F001259BFF7ABF2BFE1108EE5182B19954EC46E5E5 +IV: 71FDCE2137639931D41E0BEE27E8E850C50578D42FFC30F6 +Header: 8AF93AA78CA07D37DD0427934934638729B4 +Plaintext: A4DD9AC7F948EE5C +Ciphertext: 4425B3DB9EEC3BF9 +MAC: B80595A45C38F44BBBAF4E51DBF55D1A +Test: Encrypt +# +Key: 3F391369F68C2BCD6974EC0CEDED74F28843BE7FC7EB3BA3C3C2466E089759C9 +IV: D55A5FA3A3BCCFA8198DF22EC1DC32625A411C66A0EFE84C +Header: 1310632D6B64FF307A412D3FF09D846F960184139F445808EEEF0A3B89 +Plaintext: B41A22CDA26515C4 +Ciphertext: 9DDF29437E60DCA3 +MAC: E6D19C988973E92957304F3D7F8599BB +Test: Encrypt +# +Key: D4612A6C0928CD37509116FD368F6369A4384E2DE90DA01BBD9837D925097647 +IV: 14BE8C3BD3B02A388581658A48A20BEC64CEAF27E7542538 +Header: CC3A3D48639E60CC14538827C2E1F1AF962220B85455BF9C1F25F19E7176678B907F0D67F6F37C73846D95129A1162BBEA72D49738 +Plaintext: 48E062EDCCFC3984 +Ciphertext: 184B33D447B31018 +MAC: 71D92E339B72E3718FAC08CA7355C016 +Test: Encrypt +# +Key: AA6307F438EAD53489E7096F28173B0E48E49065D2ABA8F37F05F5F6088B4315 +IV: 94D85089B6FB9E5B8E83A0289AC1655C28A7FF11CDC250B0 +Header: 4950483EF8ADFDF7F8C3DE380B7E10A659381E7FF052EF940C3EDCD3A5CD77DCA6B146B9447BD39A5EFF4CF1B5D49596C7E8E2376D036D3576FD79F59EDEB7F899F7CAA3B0 +Plaintext: 1E6C51B15665AA74 +Ciphertext: 4784EAE213C9C9B3 +MAC: 152B6AA18F9E7862550CA61F0E9EE00F +Test: Encrypt +# +Key: DE7CA6700E792CACB745F9A04835FE05F95C32BF4A3750F17C23D238A0867499 +IV: 96DE09D483CC498A169E150F3AEFF21F9ACE3AF0E476D859 +Header: 862D54010DC501B09D4B29A70603C595C5C70C51D34CF5D0811A6F27BD59721D1C6E57566F6F579AF93A63E3FFB4E9FFC8BA38763B154021199B9A2518D750E23DB99380708F39F17D404B912E2E00B915CA7B0D7A4A1D13A930 +Plaintext: 8E60E54207330338 +Ciphertext: 6A4FCD8497140A02 +MAC: 4F45818E6FD77ECEB9051B5D04FFC385 +Test: Encrypt +# +Key: EBB324CBC2AAD7D60F3BF055E027BC5E0F0201A6922CE8D3D24B1E8364D2F51E +IV: EE90E4E1A8E5E76D873B7D4F4719177D00233D24B8F5169D +Header: 0B2D4CAE3F225285E121F4F22CDAF9EF51130A88212FC9CABF3147C468A02D68E92033303B389DB17F3BDF5133F087F99AAF11FCDBC4405203C9B80143719A6D8C9D1321C6A6C1676B51DE7A175A161DB6A44EFD04864E13005FA5F8C40C71B9420A496549ADA49C4B9D306A0672 +Plaintext: 5D4C8B697523D8E1 +Ciphertext: 446C8AF78BB01E12 +MAC: ADE4FFD547DC0FDAFBBDB5F15B4E4335 +Test: Encrypt +# +Key: BD7E6B6EB44F9CFDF3E95677AF99FDC0FA2A72614F273041E1B8AFDC9EFAA887 +IV: D24836A04CBCBEEDEC313DA46FA4A9DCB93D3E27D652917D +Header: A4A400C3B23949BD03DB06B44AB5D8E8C162C4C057FFA1B97D86508053B2B529C2998FF5AF3B441D93D7EA65C9D071155B66B69D89C62E0B1E0B77B838DBF1FC047EB6133AE59895F9C05210FD7853DF84311EDDF9BE8104A3AD3B81C6746F2B2B03A2FB9548DEC85FAFC71D1B6BB0F87C3FE8F17A859886CA8A17DFD3B2 +Plaintext: 03566E25E5C6A3CD +Ciphertext: 61350CBCE088DE9D +MAC: 00587DE0A87A94660F6374478E4BB736 +Test: Encrypt +# +Key: 949300CDBFD46CC7D5F91BD2E33AA80E4397BC813A5B28DA5D803B30F5EF0D92 +IV: AE061F255D3F506A93A4E019432983ED6DEB6EB5F6B18CDC +Header: +Plaintext: 670185EADB9E722C04 +Ciphertext: 4B40054FF4A2C58254 +MAC: 44CA97C80820821BBBED4520708B3ABA +Test: Encrypt +# +Key: 1663C6138CED34678B3BFE7BE41AF6C256763BEC606FD97FC42D2F322C5F3D12 +IV: 33F3D066C04C051F18DC4B1F9F619B1F651BD70C2AFBE8FD +Header: 3C +Plaintext: 28B28868B33BF6C033 +Ciphertext: 02CD9DA44406485882 +MAC: E8762936C485368C3EF008CE33C38CFB +Test: Encrypt +# +Key: C71A0EADDE8B02D53AC6967F506A7E608E14177A608C57D37837A7FCF8EAE04B +IV: 9D03049EB88B0D58A2159BE83C14EA0B0F0825DE4A855866 +Header: D78B +Plaintext: DF08C4287C69D84220 +Ciphertext: AD22ECBD534A0D1409 +MAC: B159BE6FC81CE53FB66A59A3E99DAA84 +Test: Encrypt +# +Key: EF70497FA9F113B0243D6DEA703AFC4C03DA3C6EAB7CF354C4FC3F75D00AC46E +IV: D7C16032F170E94D748A1A7F57FB3440F5209C15FF3C1D2C +Header: 1592D0 +Plaintext: 1CB3AB950FADFE4646 +Ciphertext: DFB7547A2C9653DEAE +MAC: A211D3969F8DDB120D70547C1C1C7C21 +Test: Encrypt +# +Key: 38C44525DDCDBCC2D42FC6563693036498BB4FA927EAAB0EBC6833879E5F4C3E +IV: 86482C6E1121272549178B9D52043D26FB54082BF14A2292 +Header: 90C4926F +Plaintext: 6E873D1FEA22BAAFB2 +Ciphertext: 46147E1533FF7A2EF6 +MAC: D050A768E660B2FEE641F5BDD634D34E +Test: Encrypt +# +Key: 46257CF6DED4490A0683DC832F69B4CA424794D7558159638C8424BFBCB41CA2 +IV: 9DA73CD194247B73C358331BC9E801FC7B3D42D6FC7D518F +Header: E8023030D6 +Plaintext: 12CEDF76C266B12FA4 +Ciphertext: A147F0EDBD1D00D75C +MAC: E8DF80EF09EB7722C1BF6A71B5DDA444 +Test: Encrypt +# +Key: 01D3081AC761216FDEC1EB14585E89668C8AB0427803FE2891FD20898AD98087 +IV: B8E4D695720795A7BF5CC435EE96C78814ABD7391C3AB8EB +Header: E625B908C07A +Plaintext: AE7E198C0F08952DDF +Ciphertext: 5C73ED05C970F68DA7 +MAC: 42C1D0ED786B3F54AFE312EE5757E938 +Test: Encrypt +# +Key: CAEFCE3903EBEB1C8A0211402BEB9C6773E3DAAFBDC33FA318C3FABF6182452B +IV: 9C6B6647B43C688B44DE82B1C845A069F077D820FAC39DDA +Header: 2129C15F6D6F03 +Plaintext: F278527B30130B2882 +Ciphertext: 02FFFC4A215452414D +MAC: 198326F993CCFC4F1E53C79CA13D278E +Test: Encrypt +# +Key: 22B4FB8F9275B9B6675CA53698753130AB3319C2734B369791BD91A170A4E350 +IV: 0DDF990832A79DCA0A7EE35574D0BC21ACBB5D1CCDC9BFFD +Header: E48FDA83C07D51A5 +Plaintext: DF3CCEAE55C028AAC5 +Ciphertext: E8B415AE390320B553 +MAC: 17BF67A315E1F79B785DBB9F5AB6671B +Test: Encrypt +# +Key: 88BEC974A8F0F3D02E332F9B93AD9EB204FB16167F89E41FB411D35447484CE3 +IV: 140EFA52FF0B2D5A59CFF53655FBBEB5784A38A036998F92 +Header: 4136A1D3F4A57263D0 +Plaintext: 35FC2ED2CD3642B071 +Ciphertext: AC0EC1F9FF9810484E +MAC: 9FE6432FD3387AB70056E583633D5AA8 +Test: Encrypt +# +Key: 0CC01AC3B10B60CCABF12D18BDE53A09A4DC3AE08C23F060456014BFF2AB32A4 +IV: 574CEE62EB0928DF8F54A8C2D946DBCB33DDF28374AF8B75 +Header: 21CC54B478372BE532B0 +Plaintext: E8446D828D203F14CD +Ciphertext: 1B723638C7EF5F35FD +MAC: D22341B82A282464E7F1A8C1BDCEF1A8 +Test: Encrypt +# +Key: 8610BFD174EBDEEEBE99689A361CB348E6865CF10D01E19257B5708B03EAAB1D +IV: 7C13F5B362C0CF6B20624E036B809B93DB112BF2074601A1 +Header: E22A26D171B7697DAEBB40 +Plaintext: 5EA2F037246CD63C49 +Ciphertext: 00559B261492384BBA +MAC: 3F14DDF4876B831E64656732604A5D7F +Test: Encrypt +# +Key: EC2726AD7E0A81F83E0014DB978F0A11469A7E3D115059239ADF67A7B5B7B203 +IV: D43ED45184455999B7734BBD087A9709F25690233A05B856 +Header: B049303C5D8C10C8FFF833B1 +Plaintext: 220ADCFCC4A82615CB +Ciphertext: 9CC0B7F42F1CCE90C6 +MAC: 7170676EC9545F9AC091D3C6C467CD97 +Test: Encrypt +# +Key: C47D898019C24F79D90512C4CF7D6877CB7B0D7E1C2D0570900363FE3CB5ED50 +IV: 623DA51DD76A79CD691A55CC5AF84602B8E0F37FEE4DDA2B +Header: 3187A5CFE6227B3D437D9F78CC +Plaintext: 7EF2E368456B5780EB +Ciphertext: E9CCAC5CF371D22F1B +MAC: 217F0BDD7F951CBF909E51DF562D7521 +Test: Encrypt +# +Key: 676CED76BED7C49D4C09DF081F939B711BA0D108B5D625632851497EA08EDCAE +IV: 4A257892FB539DC3B748E48495C4A293108CFB134350CCD9 +Header: DFC3E2DC634F3208A0107655091D +Plaintext: 4B2B0500002F61C821 +Ciphertext: 8E3581F7D53CA8B625 +MAC: 07585E6B7C976F9255E7E4DA3E332F7B +Test: Encrypt +# +Key: D979C608A5E965DECA2084E151785A313666AA1E058E76341CAABDEDE2F32330 +IV: B9E01C462D1AE984D4270B087BF15B99D8892BBE854630A2 +Header: F852F5AACA7CF8482A7129CD9514E7 +Plaintext: 2EDB95A095F9D80686 +Ciphertext: E11BC6B47967F5682B +MAC: 13633FE3091665CEF796206749DA3EDB +Test: Encrypt +# +Key: BDD150475E2FDA026828AD75284EE9B1BF91EA06A66B74D4928CA6DFC0260EA8 +IV: 25D3430B99366B04E3254822FB7BCC98160CE04E1699C187 +Header: 72D7486CDB64B4AE9903E71242E115E1 +Plaintext: B02E41A0951A66E5E0 +Ciphertext: 8FBD8843C14FD715FF +MAC: 41982095ECB2F0B12DF00C70C5625C26 +Test: Encrypt +# +Key: 13F06A42932D97EA2AD39EC86B4D5F2FAA43F1C3B0D8C7878E9D0B27A88A659A +IV: 6D56DCC1EEC5BFBB08927C833D10FC1E1B2235E904B08FEB +Header: 9FF9A69FAC0871907A72172F1CD658AB35D1F947537A01D15574 +Plaintext: 9A8046A61F9F991CDB +Ciphertext: 6B16EC106FB4322B2F +MAC: 75E153510CAD55DCB579C3804B056DAA +Test: Encrypt +# +Key: 6B4677C0304B6B5C20DED8E6838FA23822410DE1C9E0E4C5D07FDE420A9865E7 +IV: DCFB1DEAA7120AEE2F5EC9B5F833C5FE5B318AEBD1ECE3BE +Header: 2AE3F23F0B814D8D3522734A9B62047576433E9647A5A772600A98C8904B814D +Plaintext: 5D1F2949B94B3F8916 +Ciphertext: B34F4EF92A1F14B5DE +MAC: D94A0452B3A2E309C3701F26E1E16EEF +Test: Encrypt +# +Key: 63A4DB330142962A1954DFB226845AE327951975C1C9411ABFC665C47D470E06 +IV: A4DB8739CB1952211960E58B8B5CF3B74B6B58808B9E2B40 +Header: 5321F50DCB628B31EFFBE585F7A7C7B03912191A414A9E649C2C06BA61CF338A119FF79D1F +Plaintext: 2AAB6B1619CCF5D337 +Ciphertext: 1CDFD17B43E0406B60 +MAC: CD13F58A99ED1BD518AE5FCC6A9DD021 +Test: Encrypt +# +Key: DD398C458C179759DF39F57BBA22EAB6325FA39B27DAF92549CC060E39692B5B +IV: 19D6DD299E01908C97CC87A1CBEF3132629EC9462786679E +Header: B19E48A0D0EE46FDA9273B80E438AC2A90C77D0F2704ED49A64D98CFB0717DC73AE8D52B1CE5ECB4A5CCA55B85C96CB32772B6 +Plaintext: 8AD1655833B28AB889 +Ciphertext: AA5994A50DB755394B +MAC: 9EE894750D3D6E70CA54FB46C2F87870 +Test: Encrypt +# +Key: 2A5C2327FDF923DBF0C74EB6A2B834A887BC45B11BC959205068623F568A2C2F +IV: 412DF1C5514607C26BA314506E75F6B1C33AD643052CD179 +Header: 9A6F4938CC8044CA143EAFAB2353AD591D6074466539C7CFF997FCCE9060E5E88F06217770CD6DA8970D0AC0A31471AC84B8DEDF994DF7F01D1508740935A845F9C2849327B608F96C39AADB5A716B26 +Plaintext: B0B56857DCE7374E80 +Ciphertext: 9FF8F263AD4D8BE2DD +MAC: 2F0204490B389EC118DA876551E817AD +Test: Encrypt +# +Key: AE70A072E3D8F507BA5679E4564F3B12C78FD621098C5AC791BCD236204BB49E +IV: A410B58390B65A4482A2CE005CB8DEEDB9A70DDD8BD15ACE +Header: 988E380D444FD459624BD8B383DD2536FF2EA2D96A44EBC515AF6D809053A8FFB706D59F28329A17391B18B9B132765934F799DC756EEF09D696C25A84FBAB6F33C8A7A603870DD18B54F73AE47CA5C72FCB86 +Plaintext: 6169430B3789122DAF +Ciphertext: 4097939E6E578A997B +MAC: 1FB6A9EB71B716055CBC62946D588C0F +Test: Encrypt +# +Key: B305141F206A6CC677C51C846CBDF05AB7128CFADFFA6FB079E771C58D6B13F8 +IV: F9DAB11DEABE6C8F3895A2AC68B79D0D12480BD4B5F1F77C +Header: 10784AAACCB80D5607F4DC95AE5F0EDCDA1BF613654F726E7CDDCBF0EFA5C40BFF53E77A5952F9282D6369A4CA052EFC05672055A62BC878C961C123D39B3565792C298322FCE071693C7EFF935D4113F5106E4F8C1F3F6564BA8736 +Plaintext: 51BA1E3B7D162C9684 +Ciphertext: 466422E9139218A1C3 +MAC: 9F58CEB89B50318F9B68ED2B36036542 +Test: Encrypt +# +Key: 82BBE67715301F6540DA80852432AE2FC096D779A5BEDF7E719577CD5F2A7F80 +IV: 9810CCC24DDF88A8E469BA8C6F4C0C3C5B76DE85720E42A5 +Header: C3714F471463382CFF8E32B62A85E22ED268C54916128DA46A207FC542F4CADBD3F7866AF8962F1D2807036453EBBEE7F7A615A17303A4A98C13317106C6F6BDB019DB6052658F3B13ED6C35646370A78E6B2994AB35A7EE92A3992B5F8288 +Plaintext: 82B5D5FC5408F8D262 +Ciphertext: 8FC0363B204DDDBABD +MAC: CA85AAC679E48A880551CC10AE436E53 +Test: Encrypt +# +Key: D933FFF3A9976F3037F897377C1A1B7B721295C75DB18FE8C27885961068A42D +IV: D7E4743A89472F66E17E387335ECB6DAC03566F6B5667785 +Header: 781FE7C1327EADAF6EBA1B5BB8D7CC761542DC7EFF44EA952B8394A83A9A09D8AD76D95C5C7A242AD5B5DCB23F2F1E91431AF45442ABAF4E295651D2AC428C3EAE270BCFBCDB66FAECFF20F2F292E9F0BF5B978F7F91CB3149887A4D2927E03B85109EC223C50A176502AB44BFC4F4DBFACFF1 +Plaintext: 1FA8CA91F42EBB1A98 +Ciphertext: 037B25FA7350F1A514 +MAC: 16C307EFCF2CFDC9B5AECC5CA14B0184 +Test: Encrypt +# +Key: B197F467B1EC04EBA7CAA8C2A1A75337C6D555DB237B7CA4ADA7F73F90327E1A +IV: A42E83A3BD74777D940E61672D684FE34B1AF6033DC22E71 +Header: +Plaintext: C867C231086773A4125E +Ciphertext: E531780D2B2DBB5B400F +MAC: F2149ADCE9669C13691CF4077935B771 +Test: Encrypt +# +Key: EC586EE992EED493BBD5CC36EC1A20DB9BFCA7969D9282B7CD36F479CF8F0583 +IV: FFAF48D669E1081D1256466442F10D32683D07E04A654235 +Header: 72 +Plaintext: 9AC92F2193672108B05B +Ciphertext: 03607E72B5168C4FBC9D +MAC: 146D0EF8ABEC45EF7E95C12F90C9406C +Test: Encrypt +# +Key: 3FC87DA0CD6E90989BB997388BB1889F517CCBB7CC341D404EADF30879367EC7 +IV: 3939C0DF29777274FFB7F9D703E88DC69B9BADB650431FE4 +Header: 8E65 +Plaintext: C39CEB34B314C5491BB6 +Ciphertext: 368ABB2C66BEADBE6E75 +MAC: 7D2657B7AD1C8FD4D46476313507698C +Test: Encrypt +# +Key: 556FD692AF4D1C3CA2E3C8168AD3DE3610A5FA2ACD6DEA9CD69B21F9A6E6D02A +IV: 9C362F92E4B4F2B96A2C4F5195DD50B8735D5E35BE2D7C38 +Header: 097BA6 +Plaintext: 0984D7DE59873A830D71 +Ciphertext: 430EE5705D1E7C055810 +MAC: 3C883E7E4FCC7C4CA8BA9FF3A869EE52 +Test: Encrypt +# +Key: E0F37C07AE453C17DD624B403DBCD43BFD1F7B71486A6F21A613E5CBB8642BFE +IV: A9295C7E7C5DC6CE34BD54C07DB6732430E3D7293AB39225 +Header: B8388E51 +Plaintext: 50DF677DE42975823DA6 +Ciphertext: 2CFF8279AFA190FAD7E8 +MAC: 0AEAFB8FF4E5BEFCDEB09C81154CF56A +Test: Encrypt +# +Key: 613158ED1289324CCE5D9ACD83FB511E2BB5E251548689DC7AFD951CCADFF4C1 +IV: 7E4E2A2FF3524ED35F1E171D2677CEEB43EBC78EB7A67223 +Header: 0E73334E57 +Plaintext: BA3180889351E57F4D9B +Ciphertext: 095FF38FE7CEB2546E2C +MAC: 64B107C0ACFD1CEC84420A47B7A20F23 +Test: Encrypt +# +Key: 45934EAC31ED558A2C433FBBCCE3CF5B7CF3DD966CF65CCC6C41BBC5433960F6 +IV: 92DA3291D537640FBDA0AD70ABEBB8EDF597EFB03E0760CB +Header: D588DEC88B90 +Plaintext: 11E9EDEC7153BB7BAFA4 +Ciphertext: 30C1F9EDB759746F80FD +MAC: 52033DF5BCB9296E52C54E033A7CBC8D +Test: Encrypt +# +Key: 93639BEF3CF784A4511DA70B1018EC587605E69E2FD1AFA11D76AC08D7A23C93 +IV: E7FCE6243874F0FD514C6D1980002839AC9DCA2E7DBB9117 +Header: D909185E614D02 +Plaintext: 61BEC0B56BDBF5372B97 +Ciphertext: A17A75F645B34BA2FA37 +MAC: 32177B50DD9760AF11DE8904AC9A3D68 +Test: Encrypt +# +Key: 8064BE6605B5D9F826378F1591813F74569EB8F73ECB9DA47B6D1D4ECA92CAF6 +IV: E4E27A5A2C971E6767A0051AF3935440178FB0A55C6563C4 +Header: A5284484F13ABE26 +Plaintext: 01C8A3F76D7716AFEDFA +Ciphertext: B349A75A111CAAA8446B +MAC: DCAE663ACB0E9182EC265C0098A8DE4A +Test: Encrypt +# +Key: C8421D4B508D2C1B965A7F8C8998A005AFF852ED51C3FD45ED3878F7678FFC7C +IV: 91C54B2017B2ACD327B32FE5AD3123C29523EFE26A166A51 +Header: C65EB9BBBBD88388F0 +Plaintext: 567E416A61D7AA3E5B96 +Ciphertext: 8B779567FBB4AF38B166 +MAC: 92259B61880EBF92D8F532BCDB876F57 +Test: Encrypt +# +Key: 0CF72E4C51F92CA603C08B987F45672D340260B8848451FC14E0EA4DB78BF029 +IV: B964BEE587CB419D97B6F66F0EDBAA20324670905F8F63D0 +Header: 18CD0270999666A17D2A +Plaintext: 2379A6244CFF8266232D +Ciphertext: 0A94BF4DB169C9E65772 +MAC: D680E6399D011D726AF53815C756E4B0 +Test: Encrypt +# +Key: 46CAD133C9F67AC01838554CB8311D231546528FC3B99BFF6EF4747110E08D9F +IV: A52C01016344C99725E67B9CBF5F7EB0A6337E6D33958613 +Header: 107D18ADBF6843B4AEABD4 +Plaintext: 08925D07084ADF82E14E +Ciphertext: 97E745E73189C1C1FDDB +MAC: 96AF2E1D94534343A084466C4A3773FA +Test: Encrypt +# +Key: A62F3D1EEA3BC1A290E4CD4C0C49F8F4448CE00BB6494CEEBC4EFC44F5503668 +IV: AB437DC20EA8F680F5A8514249ACCE8965ACBED11F327507 +Header: B65854F81B5F13BF6E084F2E +Plaintext: 6530ABFA0DABA6188CEB +Ciphertext: 9298A56D7F8B8F99A447 +MAC: 67FA7386B3B7509C9E751E791A87328F +Test: Encrypt +# +Key: 08C9F0BB9C4372D24492EE4B06F44A0DC6030A33B32F0C14F4BCE7790FE3BD8E +IV: 0FAEA07557FD96E06FC68C02BB989B5711442F017BF40871 +Header: 44E4892CC9A38C8E99DC8B7A36 +Plaintext: 122CD390E75538F4FBB9 +Ciphertext: EBEA8A88060ED8116044 +MAC: 242F73E5C42BB850D0C4C448599F3032 +Test: Encrypt +# +Key: 99FF30D9655ED30CDDFB30567814DA745EA008F25790B5EBA3FD382C546B27AB +IV: 59705890C2738CF1B7771298EDDA1FB6A4BF6B1E720B386E +Header: 1B5F36139D100D8CDF66390188F6 +Plaintext: B4EEBC26BAC04228BAAC +Ciphertext: F7B47929435512E575BA +MAC: B78829994B6C6CA226F3A139F4E98C05 +Test: Encrypt +# +Key: 289AAE68A568B13AAFDED493C36D12FF60E96DFA99AEC2E48AAC3F962F8A952F +IV: BFB7F37A3748E36230F1E7B4095DFFE5B7933ABF0DBC07C4 +Header: F0A7F869DDCAEB29D3CC76471D1AFD +Plaintext: 373692E36F28CAB991E9 +Ciphertext: E2CB8BFDB221B229C391 +MAC: 8CD4E964C814BCFF089E70292D74BA79 +Test: Encrypt +# +Key: A903783EE55401601CB9AB2DAA4B4BB009A6E790D0FF7786F34F4F2D97472FD7 +IV: 83A4128CB3A6A48E4118B8E98A0031CBC2FEB3601FD28AA8 +Header: C9939E108298C1676754ACE942AA8979 +Plaintext: 330358101F2888DC62C8 +Ciphertext: 36766C9C192E4C92B822 +MAC: AF093EFDAFE3E7E08040444B59D0F0EF +Test: Encrypt +# +Key: A73DDF11A4E158D0982A262BF71B8D0B9380965A109FECEAE57433DA228B8478 +IV: 6ED98D9785A43262DDAD97636E9DB3C057B574D5CC595A62 +Header: 50450322E011F412C697FA53C8BA03271D26C74A2F +Plaintext: 91C01BDBFB47A9BB0D5A +Ciphertext: 2857D671127E38EFEAD0 +MAC: EE1B5862CB8E402AAF755052FA9C1D13 +Test: Encrypt +# +Key: 95C1C25A4E700ACA62AF060620B7A2C05D51D5F4154F830F366DAFB203D8F196 +IV: B272C6AB6E802F7D11FC7F910EECEBAFEFA9D9BB86209538 +Header: 8D0DBB1489CF726D26DB2051F19D8BBE96B7BC55DFF23104123957E1C8185915B12D6BA37C3B0EB8308B7CA17FC2 +Plaintext: DE646F713B3A4D64A87F +Ciphertext: 64DCFD7BC42E524590FD +MAC: 40BC540560F924A48404D452E897CDBC +Test: Encrypt +# +Key: ACD46605DC8B5656CED27CBA7E828A83BD38EEF4FAB4DE9C02FC7A3729596DA0 +IV: 8F86BC77EC6928345F4DA799D78D10B177C419125805242F +Header: 2EB6D255386A067736B96F04C9AE4D51A9913BB9DC4D25775FDFE9B58B15A9265173F6E86B864F8840DAC541EFB57DE3558982A657662DC11D77C9E3D9BE07C2AD139020 +Plaintext: 345BE7BC64423F2C3865 +Ciphertext: 8A0DA4AD00C8E7EAB1DA +MAC: FC0297636F73C7C3D3BD4D49023AEC71 +Test: Encrypt +# +Key: BD453DB24B3E80C6D4029C4C4F84B0EF6F0CC93FD3B3D1B1485ED801DE89FF90 +IV: 90CD762643D789619EE043A06C81F1BF9F537F209F0C3C8E +Header: 2E94A2422EA06D2F4CE167E36807932E05D87929214E5976173E77060CD4D92B68304B1F6EB03F7055BCEC36F04AC9AA7036D0BA9BFFAC8D61B8FF83C77B84F9729AD3F321AABA3F6E23361541AAAED81B140C29A10DE1056672D3FA67EE72EB83 +Plaintext: E4C098D92F67C7ABDABD +Ciphertext: F459398D9FC7F7C5A9D2 +MAC: FD58E8D2979E7A75562D30E015EB90F2 +Test: Encrypt +# +Key: ACD5011161621388207A36388D8AD24180AE9C092635E9F4A66F9011A2F564D2 +IV: 8F354BA3824D87C34984E5B5E907A20E7E24F60380BD6651 +Header: 4F2E926BD0EC681D0347E55A7318289A755F25B96A60628917428058D7115E151A156533C22DA1698A852EBD1CD38E0B6D9ABD71D589CB26DBE8484648593857F9304A73BB70F801FFAF477B9F2F1FF393FD079A4917672B5C635F7A09995E95A8439E039333933009E519A7BE8BB628C726E1B549D8C6E2EBE5E2E9FB4E9E +Plaintext: E860AF3626C073C9B93B +Ciphertext: EBED1FAE7E3C1FED00C8 +MAC: ABB0F1D68ED0FF62F52D334F20BA1A84 +Test: Encrypt +# +Key: 43A42E993FB518C003487CBC897B1E2AB195CAD8C27D0B4A0DECBFB3CB52169E +IV: CA4346B60F7A53A8CFA40DD7A710DEB2D2F5E2A259BF3B1D +Header: +Plaintext: B4FAE5F94EB621F29A2679 +Ciphertext: D8C35BAA6D21C1F7A11956 +MAC: 11390EC600A4C8004D81D3C6C22CBD65 +Test: Encrypt +# +Key: F249F19FBCD1EE71D1A9D22987BCC167F044252B632491C93C75EDCF54724026 +IV: 4668D87A025A4C68B9543033AD6167ABF9FDD5A77C40D2F7 +Header: 78 +Plaintext: CC5BD25D3D5E87D351C2B7 +Ciphertext: 08A128C3F8D36310C02ED6 +MAC: AE540C5A4E65A5EF782D29C2C2E471E0 +Test: Encrypt +# +Key: D7CE2F56CA05063406CE7C064A47646D0F74F12A41B3E814DDCB891054BB9F25 +IV: 7A8CBBF76FEE3BF63B7571EDC46A106C51C9A26D5B9CADF1 +Header: B3E1 +Plaintext: 6DF760D2F9163F2AAB21B0 +Ciphertext: 50B3224EAC336C350712F6 +MAC: 23E1A556C5EE9F5C2875933EF046C709 +Test: Encrypt +# +Key: 13F65692AC82411961E283F0CF377B5286F5062AA50D99F401E1A3FE5CDD4BED +IV: 5B13FB619A921E998AA8CAA87F5E8477751620DDB0543B30 +Header: B8C466 +Plaintext: B5465C0A5C94A5D406C818 +Ciphertext: 15570A20AA042FABFF9F8E +MAC: 21DE41C4FEE9F9C900696649218D1C66 +Test: Encrypt +# +Key: A968794D7754056E5A9CB44D6EC385E552AD48215A3DA42A388881D609F07ACC +IV: A04246EC90CD7D94C3DEF919FC88C15FF4A7566662ADDD6E +Header: C2000064 +Plaintext: E04FCF68A94F2B869DA658 +Ciphertext: 4152FF5D120EFDC0BE5067 +MAC: 85F1B39FCAF673D949E148EBB6B23D2B +Test: Encrypt +# +Key: 2F793327C5B92F88399A5C6E604AB223550FB201B222056527179238BE9727B5 +IV: 67FF5BF45548848A21D299BD841F630F539016BFF98526BD +Header: 01884B43B8 +Plaintext: CA055597E01354359175E8 +Ciphertext: 1295D324B895C3DCC25880 +MAC: A5E0A0A59089A11290000F53229FE4DA +Test: Encrypt +# +Key: D285498D4B3F84E610CBB590C896569C4C4C3966B5802D90521420569A719FB1 +IV: 1B60923714AFF89F002524A20D35EB86A04A07497A78B5DA +Header: DCB52205E362 +Plaintext: 9793E2D81DD4D20CB649DB +Ciphertext: 8A28B509FDB2D58A9D2983 +MAC: F64CBE80D572DB4EB79127457DD281EC +Test: Encrypt +# +Key: A1D47FE7AD9BEAD8B35634A72CE7A19E414045B313AE021E458C706A66F76B32 +IV: 5D1F7FF656AC7602ABC90A6C73D5C38037CF349DBEE66384 +Header: EAC6663624B501 +Plaintext: 86549B6FB2A550F9B000F4 +Ciphertext: 6A11909D709863D356F74F +MAC: 06671BEB9F25EAB6C268670095106713 +Test: Encrypt +# +Key: D805714C1112A93D7DB07F58458CD2486163A3D757772EA1016E45F2016A26DA +IV: 817084C1927B439057533FFB86B60DA0245106D91170F0E3 +Header: 009E6715C9CFF213 +Plaintext: B9308F3FC84A997EFAE0AB +Ciphertext: 4DB1B32A260E288693F3E1 +MAC: 4D5621B7D0E5747C9A89A03C6DC6D2E9 +Test: Encrypt +# +Key: 3BA65112B21C928A1BFCC0D6793B229D1576078F829C41743373F84F8A6BF384 +IV: 0BFF29FD001AC2E270FCBC07B7297F11356C9E1C53B496D2 +Header: 8CA440564C76DDEF36 +Plaintext: A259B7DBD73787AA7003F2 +Ciphertext: 8975C6E2BB22A60DC1946C +MAC: D827A8889A842A61448B74BECEB51806 +Test: Encrypt +# +Key: C159EBD96EAF42ABB3DE22EEE9DBCF5EF15BCF50A6FDB555FC18FC7F01DA64AF +IV: C50B386168794168227C553C1699E0F73A1EAD93EFA15C35 +Header: 4B2BE8E9119F11493C63 +Plaintext: E0BBDF46E3C127A289FA22 +Ciphertext: 7804515EE3C1325C8B6F69 +MAC: 30084DB8EFC962CD0E6CE63E1F4CA9D2 +Test: Encrypt +# +Key: B0DB1B56BEBD2D3976E6A53B1DB126DE6D61D4550C3C1007DE18BBB4F618428B +IV: 3D91B2D07260917B1101C7448EAC3B23C10470AB64909DFE +Header: 455DD4617930A760C00AA5 +Plaintext: C80D4C1E38073702B6BE5B +Ciphertext: 6B04C3A23240144B6FAFB0 +MAC: 8801A606300926DCCD77BBA6585C985D +Test: Encrypt +# +Key: 0054AF1C0493F47CD27CEAE85CAA6A8A69ED18BBC4F7B7F597EF816D02B3FC8E +IV: 983AFCC5767E88B84E8CC9448A5FFB61C0AF1689D91BD0D4 +Header: FA357087E9B43C8D0E4BD503 +Plaintext: 2595B7B90D52282048FA49 +Ciphertext: 2C73958C4FF9E3BD342E13 +MAC: B2EB6BED2A6480F420B6B6390227C4B3 +Test: Encrypt +# +Key: 3045574C5D0937D752B07578914D2C54EA19C408C3FF6FA74B2CE2CD567D3D7B +IV: D11F92390E4182A9B22BF4B33544DFD400DF7C10C37B0B26 +Header: 208E21A7C1137DAD7EBC6EBA9C +Plaintext: 259DF1377896BE802F148F +Ciphertext: DA13CDE1228EFFC5AA8A58 +MAC: 42EEC823A21B43310D99DF46D6D42D30 +Test: Encrypt +# +Key: F64342C8EA057A3344EC9C0DC568888FB2B197209B1CA1EE815EE76A1054D932 +IV: D933847B8673CCA68923D39602F7A9E898A77B0C3757A99F +Header: F7E87EF223FFD785F2CFD8135B93 +Plaintext: 6D9FF9EC310B7EBC7EE0FD +Ciphertext: 6FB5A6D68260D9F2930FF0 +MAC: F108B727CBA754A87432003ECEAB2C37 +Test: Encrypt +# +Key: 03A67E44B86476B7C72992BBD5634D1B4C40E9D28655F7EAD0BF4D481689F9A1 +IV: C12208F3BC601EB9503D4F47A74B757E3226BD42158C6729 +Header: CEB1E4AB63CD3DC7ECCF6842BF3981 +Plaintext: 9A2D0B5A58AC06FF189197 +Ciphertext: 37AA84FC6791FACE721CFD +MAC: 51DCE960484B2F8B97F4C970C4039F69 +Test: Encrypt +# +Key: 6807E8ED9E1905A1B5BA1CF62BF28BF10C9CF8B85710B5601A1F8F1292990EBB +IV: 7F49664E34F979246CA13E5388255406A7DBAF822BF8D93F +Header: D072ECE9D4850C6EB5F11B442D3B6BF6 +Plaintext: 5B70A1F3B12B49B17DE930 +Ciphertext: 3D7CC2744CA9799F1E4EE9 +MAC: CB46819F3474CBD1551BEE8D637D18C5 +Test: Encrypt +# +Key: 83A817469F64907EEA5BDC04F831A8A993ECE8655CA9D45884623DCB6262E95C +IV: E5F8A26AAED33889E0188D6C3D8EA9A1475948A8E85C62F4 +Header: 1AE89DEA72C591D279BB9746342866B9E1F38A22 +Plaintext: 365DDA443A9D19B399C3C0 +Ciphertext: 216739E2BA45B1C347585B +MAC: 9BBC2E9C7E2B9BB541A075AD8101E94D +Test: Encrypt +# +Key: B2A4AF877976EAD355506FC78BCF019DB544BBA4210FCF752665A6D59A7AB14E +IV: 53632F30E49410542F12592927F30F4CF2E5487387875993 +Header: 120DA8FAFC065DEA955535E3084C2B7CACA27AAE169D83A56F50C399A034629629C2B7F0B3E4503490B240D39331B8 +Plaintext: 49F42A300F7B8A8A31B830 +Ciphertext: 3040BC1235ECB20CC460DA +MAC: 6CDE3A60B7276E50CA985BC8B2C00DC9 +Test: Encrypt +# +Key: 4C6BCBA3C90FD3C7717EC1CEE61469856436A000EE7D36A1027CC2E55AEBC466 +IV: 2E5935EDA13AB1A959223CE19DF278F1A5334D0B5C3A834E +Header: 3B4EF1A04A77543F1E9AA1E287F6EB4CB0952C539A0E6CCFFBBE8F23E0082987BF69805C828905062B7C055759A14B6C4250D16709 +Plaintext: 92C4D6D22323FC89EAD155 +Ciphertext: AA444F73F31A924009A084 +MAC: 7964A6A79A4C2A96DC9EA948CC4286F1 +Test: Encrypt +# +Key: 31139010FAC0871D877AC5F52203B4F8D0BB6CEDD519881865B80665BA30AA55 +IV: 65FA6DDAED1445EE22A759712B09A874F6D362560B1809FE +Header: A9456719573D9EE4C6FD9F163D9622BABAFD6D8E6D86EC9110F3262D140EF08D60626D1ABB847EBAAB650C3E98D89082C5F444EA2690E4B49368E6FF3F54 +Plaintext: 0C464F0E34063538E18223 +Ciphertext: A91E55CECBF66494E862ED +MAC: B63C3A1EC7D51D5BA7A15CC1E495B3F2 +Test: Encrypt +# +Key: A567B1C7BA86ABA3F67754FDAA1F6D9C798E27A6783DB8B7584DC702D59606F1 +IV: B1A6D2ABEAE339F792B348D39DFA8250722D2335E9B5C535 +Header: 575CC772E28B95A039977A8607DF22D9AC513D5F880E0CDA4AA47EE5A6615D42E369AD6436952DD431CE36C8429FF443AFE8ACD3B897D78F034E20ACD6B304B6087B5EE6759411753D07A28E595AF792DF89DD794C +Plaintext: 097898D75EC3F9D2949DD8 +Ciphertext: 6A4C84A14833EC443BC3EB +MAC: 0CAEBB830533B48FF327A0B7E8B73AF7 +Test: Encrypt +# +Key: 9DA6A00C07085563D8652D21EA3738DE9B5C1A0EA29A2B92BE2854E08931A63B +IV: 65FFF1AAE40996E77E1665663083BAEAFC34D6AE152332AF +Header: 1C1876659FB8BEDADCF6A12FC89D66E3FDFB9297634E6C09F55B172970FB51128C51A13D179996EE2752C4C2FDCFADE36D465BD647236065CE65DC930485B36BF06BF22DA38D33C5BCC1FB400F7D1F7C6ACFB1DAA88BA4B7B4B62C10D08747705E +Plaintext: BBB11F8F7F44CD83F23B0C +Ciphertext: ACEC7C60F8EC16C7677E52 +MAC: F8920A473835B5A3B3E1DF7E4C4461FD +Test: Encrypt +# +Key: A81442DFD215645A663F04AC453A4474A52F4ED5AD6FBAA2D063875C311B1DE6 +IV: 94EDC4BCE1787D58D8B5FCD960B9B2247FBC4CDEEA032004 +Header: 95D00C93B85B2DA36CF32CEAE2B35958F3E7182AE9A807FEDC24D6DB2C9FAF95C6A148B7D193F13153CA46B0017154B50BB2BD1CC3AF14C83224191CEEFEA060983A8DA98468DD84D4654E8692C38F13947097FA72EEA704782556415AD9FC38B14025A945035CC1 +Plaintext: 6993CF157B9863AB1C2895 +Ciphertext: 3D425E27F639004949DDB2 +MAC: 541BFA040B7D9A94C999A341F7996731 +Test: Encrypt +# +Key: 8743D942E69CACBDA4C224AE61062431013E4ADE0049EAB0225745DD780E9AC5 +IV: E7178D6FE087B721222658682D936C985EE8A9D47FC0C7CA +Header: A7DE0818CDDA18AEECCA3AB9D5D4240AD25038E5DEB76B06F25172CB3CCFB301066A49EB97FBC3FB03E9FD52631C9CD31F589BEBC08ECB660FF832538F86092164E41336AFED1F5D0F9B812AB949B5EDE6903743B740781D25ED6C1360E81699A527F2492C61215983B999FFEF6AC225D412B40BE9AF7A41F2177B65 +Plaintext: 6F563BB57CE4849B4D0CA9 +Ciphertext: BE844657BF89E7CB689406 +MAC: F44D2336CFAE4C75DAD3AC23C53DEF11 +Test: Encrypt +# +Key: 7AA62C166C1A6A81ACEF4DC377BA5A3D148D84D724D75433C75BF5C6D77C32EB +IV: 3D493553782EF707E840EE956274897C2D343B6B2D2CFFA8 +Header: +Plaintext: BEBF81ACF7AE01B5E1BD02D5 +Ciphertext: 9F9E653051400A7961626ECF +MAC: 0054167E2980F73D11E764EB6FF3E5E3 +Test: Encrypt +# +Key: 8870629C578C78977F621156EB5ED980761C2E7E529B287AAB6E4B20B33BF103 +IV: 0EB572EFEC10D5E208413BF90554C00E566AC400AD6C022A +Header: C4 +Plaintext: 6C6F03B9B61F5BC2A6CA1418 +Ciphertext: F33C59E9E6EB2E87C4DFEE54 +MAC: 054E06DDDD6282A3ADF5A1D06A648F72 +Test: Encrypt +# +Key: E637A469D6ADB67CD37EEBBDD07B261BCD284471C576FBE12D2C36824ABF6198 +IV: 8D0AC4C74B11B8AC7590D40EB2EBF917941A48830977AE56 +Header: 9C39 +Plaintext: 96C3E7C5CAE4998E3FE2F78F +Ciphertext: BA43C6395A4E7A67B69FBA81 +MAC: 8DCA7E7E227ED35E76BA36AA57F4CC67 +Test: Encrypt +# +Key: 7A78DD7DE3ABAB6E2BA2D91A46D45F83F679A4E254F4A9AFD3CD43E20A32143A +IV: B05F9733EA41BCA6721C96708535634598A572A72265FA93 +Header: C44FCF +Plaintext: 35479EEF3EC0C92F0454D2DE +Ciphertext: 371BD324B25CB5F0CB322F98 +MAC: D63DB12F7DCD5F99FFA261EBD204B726 +Test: Encrypt +# +Key: 57C6213C2074E1910DAC681C4E0257A26968E96ED27F526D107AD41786E00847 +IV: 61CC770A4E35672F79B0942C6C95B025CB440DA217CED161 +Header: FAD83C99 +Plaintext: CD2417843A9D620BC8D8DA07 +Ciphertext: E65E8B66B884D95CA771B366 +MAC: 7219F410859ABB53FF747FC0400CEB44 +Test: Encrypt +# +Key: 3C3777E9D756C6B743B639BF7AC58D19E0B0BFAD990A5ECAE7E110A92A793ABA +IV: 7CC16B44408BEDEE8E4E7963619168E511943B634F5A7F65 +Header: 5540DAA0DB +Plaintext: 904EDA9CD00739981212B3C3 +Ciphertext: 1A560CE7A7EA7299C03B5987 +MAC: 685A4B32C6FE047DA9B24878CA26AD5D +Test: Encrypt +# +Key: D72DD3867DBF583185337D00422C76B5C9361B4E86A6C9741AC9E97241588907 +IV: C7D09FE30F947E35DD22F1D4BC648D0CE64831EED0931587 +Header: 6F0BB892CF9B +Plaintext: 2BC99410C5F3009A5A8D7B01 +Ciphertext: FE4D8E55CF7607ACC13CE100 +MAC: 3CA33587F7949E4CD0ACFB3231A63769 +Test: Encrypt +# +Key: 5CCA55E1A5EBDC4DF4B760F625449DF4471FD108C3837A9F5F2AA1555C669AE1 +IV: 7FC89DBAC8294C0143EA27C43A1A72940829F47BBE5661F1 +Header: 51D5C3B5E0458A +Plaintext: 6B0A9B1B501A881835D3318C +Ciphertext: 8FEBA7E0030A4F9F8053DFF1 +MAC: 3F7C779365A0208B19D05365A81569B0 +Test: Encrypt +# +Key: 352B6F4A44C59C28F845DFD680E914881B324032945160F9BF2A5AAA43CEE9A5 +IV: A42A9C5F1D23B298B50948D1AF4E82D174F249EECC5E7451 +Header: 386F59A7BA2695D1 +Plaintext: 57AAFE94D2B991FBCF1C101E +Ciphertext: 3E19D27A284B547054E91800 +MAC: 5C4A841B9EE2A711AC122629A1E1A88D +Test: Encrypt +# +Key: 6C1D559555B5012DD9A9E47033ED08546FA579F14B5AE46E8AE8F868B7C3C1E4 +IV: 5871A80ECEF04348FCA62731FC92525A63FC204DC10517F4 +Header: 5B7822E80ABEEE56C4 +Plaintext: 9E6EDA103052108AEE3DFD90 +Ciphertext: 4F5232EFDCF440A48F6AE3AD +MAC: 82C6E80D3101D2DDBF52F51A12D5207D +Test: Encrypt +# +Key: 88ADDEF164154F4885D099EC4CC71E39FF10ACFE4BA85DED478B34209EB68F13 +IV: F7586EB33248DD6BCCBB9850319D31EBEF229C6A0658AACF +Header: 0CA512025BDD529E2B52 +Plaintext: 511BC830E5329DBFDE245D27 +Ciphertext: 0FC5B011208FC02F44E458EE +MAC: 42973856168C3A3D7D17D28FFB83A78D +Test: Encrypt +# +Key: 83D6B131588F3D4437728F06AAEFACE1EE8BA981F0AF5029BAD419F38AF4B9EE +IV: 3D8B8D819CB00BC07E1FB41A3A5BAE26218D5586DDD2E0D4 +Header: 137A7788B33070D6061570 +Plaintext: A3541494CECC9A7BE48B0355 +Ciphertext: 668C8B5E0E5F04846C5DCC5F +MAC: D137EF8CA3381C7848A7C80F41041A84 +Test: Encrypt +# +Key: B192B27E462230587E4481DA782D2D291A6CCBAC111F3FF35F404FD72F45C677 +IV: 3EF6079419F74FD1C4D662FC7E07B7DC5CF9FA12012FACC9 +Header: 0B5B5BCF5CA87492DD2211B1 +Plaintext: 43F5BD3315AA53D38FB7BF91 +Ciphertext: EE7D8A8950B7E79CC7997C7C +MAC: 5069399BB365184992E5DD930CEAB8DC +Test: Encrypt +# +Key: 78EB7F4460F9E69C8FBA0A9D317DE351962D03BAD176DE2ABFD5C59CF10B3B41 +IV: 8A66D601356ED046E9441130146C61E56F54B0E6881E6228 +Header: 79C4FD53C0C91B2BDDCCBF3937 +Plaintext: 93ECE7C6E7596DA631EDC2C8 +Ciphertext: 5D6A446444022FBDB862FC6B +MAC: D7C9EBD4855042A08460AE5654A8071E +Test: Encrypt +# +Key: EAF6F08690C28DCC3C272EDC9E07A403B7AF186587F586640BDAB904C3B78A67 +IV: E38A889F1192152B214D68B2A0B31F70FF06C55D56E4553A +Header: 468B6E76E143DCC276D53D5E976D +Plaintext: 2490B8C600A799496DD41291 +Ciphertext: 08FDD2B66D72F586E2819F0F +MAC: 1E912073C767950A03D77C1DB11CA693 +Test: Encrypt +# +Key: 51B53325B992D0B1AB04942057BD4702F0EFB8238F59452B406241A3EEECEF27 +IV: B5B39B8085A5F4EE9A7A0F109725FB6014205867E29614DF +Header: 6638035B211B67E2FEC0375A2F7173 +Plaintext: 47601D70592F86F2180BEED5 +Ciphertext: 6F0D3C278A2C2FE28769FBC7 +MAC: 25AF9DC3C792B25A12B8F9AD2CD1964E +Test: Encrypt +# +Key: C3F89DBF1F113FC6719F3380DCFD501CE35E04C599333E2634A989BF9FD12F99 +IV: 64475215AD9E963845C017168BEE96AC2E5910D7CB5002C9 +Header: 1F88463B58E1FF4D6B7FA2B11AF99133 +Plaintext: 6FEE9DA9D9FCEABF5AF6A252 +Ciphertext: 9036CDB25E8790DF3A03A799 +MAC: 69EF4BDCC1CE92D16394FA3D0DBE62D5 +Test: Encrypt +# +Key: 9A3E1766AF030BADAEFB1111961720923C8762F557E057B3AD1FFF7CFF4FFB27 +IV: BD38C87C38687DB6126DB0629D53B08AD627FBA66189232D +Header: B6B7DE8FED1D1D4731417B8E2D9CFB26D3CA1EA8715E59D3EE4D4B3E50AC216BE3311F574A +Plaintext: 79D773383BBCEE3F6C88C9C5 +Ciphertext: EB3EE3FA49A032B90535D224 +MAC: DAB3FB741EC8FE6C5253671C79A5B76D +Test: Encrypt +# +Key: 939C61E827FC60C789CE39AFACD55D1D6C66BB76E6955808ABC6BB753644E309 +IV: 223810C6D4839D031A374805EC85BF9132865D2015131FCA +Header: 4A581842FF85C65A3723764F665106C60E18BB76A06789232386E24BFCAC87D2691DB6C5804980BEB9 +Plaintext: 895A22F81FA35FDC20C84CB9 +Ciphertext: 1DBF688B43290AD7377D4836 +MAC: B95BD47FCD65265EE1AA7F9EC0157952 +Test: Encrypt +# +Key: 65A49E61B94EA9FFB4EB6F23AAB2B5C4FF7DC846B04EF9E159C4493FE384CCDE +IV: 8BC759166700C174DD89B7B13489125D81CCBAFF0070A689 +Header: E3F14BFAFCBE12EB69954DDB8CA684CE092717C76B5BA33D996AC6EAEC88DAE2491D3FE8371B88E128B130BC2D5EC11DC98049C981FFCB784D75 +Plaintext: A034D973F5FE5C21218F089A +Ciphertext: 0726D6D2E7D0B1CADE537CC0 +MAC: 790E3E44C9E54A66A0B2782F863975AD +Test: Encrypt +# +Key: 823AC6E233333B66AA439E3D7D5E3E5BB520F48A669D9A21CC220D15C1292FDE +IV: 51026D776478FFA29FB7F5FF8DE29E7D112CCF00A5B1BBD8 +Header: C7EC856F66770C5CE0B18F97840C6B3797E9799E37186C11A0DE7FFE305E8CDB06ACB3F4557921EDFA100610CCB080682B37B987DA8FA92F9D0CACE5FDB642E9E6A89DB929CBD6843091C2F0A0915624A45A +Plaintext: D67FDBFF96157CB982E5E20B +Ciphertext: E7D781F4C08B44A1DFE5B137 +MAC: 4263749EEEC64931E7E2DA5ABE0AF4A1 +Test: Encrypt +# +Key: A9D663A16CA1B0A8A74AAE2B2B3D9B3A993C7F22D847A5D69E681EC304B95128 +IV: 73BC05B2F8778A628FE22CE188540AF2A713AEB4D286A58E +Header: 5F5C6A4507FCF3C1798A8C18B815A823303E07BFF12047BA4329ABB6EE4F3C3AE839E619FA89277633AE8237BD2732DE057019B5B51A87B35D97C6D65B6B0BBD33D6446B67948EDDD78B3A0FAB2A28708E2485C92CA704 +Plaintext: 5B00526B22FA6AD1904272A8 +Ciphertext: 9C08EE8AC47D51B2FFF5DA63 +MAC: E0E2D19E5CE32943BE5B430DFBE76521 +Test: Encrypt +# +Key: 1AD3220DF6A0518510F89BD7AEAC7067F6D16D4B448B087931202594A10BEF6E +IV: A0C27795FCD9FC6D0CBDFFB0094A2BF6F53E7FEEBC04BEC0 +Header: FFF1F56C6BE8A02782DD9F624D282ED14D2E1C47CF8D5AA6E5E60506FB65320BD68E4616C225B045523F84875B57FDCCC63A97A90E196C69E3B1CB0E9280BDFE9459F056D704A7CA236A144A7671A66BAF176AC53199F820A2B714 +Plaintext: E860A03F421F8830729AE948 +Ciphertext: 899FE1AFAE692C75964E478B +MAC: E2B74027C79022A4A2BBF82B9F980E14 +Test: Encrypt +# +Key: C2B7E7A9A881E6189A8F42563A2E9B1B4432B358E3A698D1ABF7A7F46771B28E +IV: FCACF2059342621E7FA6400852835944F97A990D0EE3F046 +Header: C1E291EE9D796A5B31A0CA54C6FE9AEE26A31EA708DBBF13AA57988F87086CA6D434D2C62AF2E3718BDB7A956B9D7AAC25D9031FD624C07A9C88C6094B16F1CF258830A1D6982FB12CF44A29332FAC3857C30DB2602001F31F37DDBFBF52EE3B8F14 +Plaintext: 0EB3A37654AC45DC698310AB +Ciphertext: ADE81266554C41543EE2AD1F +MAC: 2DE6478CE4B52E4BFE0083B74756BADB +Test: Encrypt +# +Key: C4BC0FD740CA44DEECE3BC893E78DFEE17436E3D02FB4AD5CA12F0566B0F2212 +IV: C6A30F9A85174E69ACB5E50722BF1A2B6F082DBDF7110015 +Header: 31E8EAF883DD2B3AC6A9BDE040C94C33C3F0A5CC79EAC3DC9D4EE9DC14D299E2C5C0B421D171209F3D63846A5DD0E84C5B8897409A4A40DCA0D70D25063C3D83E5F1092F3E6774E131B2E5BFD7F9E57D1BD4C7EF809ADE84B657D63FF23D5F8A53E2413D2A1F24C4D013998CB2F112C075A132E5F9EA79F6AB0E2732 +Plaintext: 14EF55F183953AE0795457FA +Ciphertext: 30AB3C8A1AA9F140CE47FAB9 +MAC: 6C24EFCA0D55B200B8AAF3034F59F6C3 +Test: Encrypt +# +Key: 5DD68248D1BCCBBD40A0BE670520EFDFB0C71475D4CB0E1DA4816A2878735AAD +IV: 3E40FDAEB7A9E0394798244F196CA4F5EEC497D606250F0E +Header: +Plaintext: 795138CBCDF874BEA8F0A141E0 +Ciphertext: 0680F9D91BC502DF7C8A4BD6ED +MAC: 94C8184835D25EC9B21D81C267C85507 +Test: Encrypt +# +Key: 9CD1FEAC741180F6C7CD5AE1D7F879B7BD3C69A2958B727B52B8BDB6A5108F1F +IV: 5257A77E4366C12348636760A999C940DFB6E934939895F3 +Header: C4 +Plaintext: 13A2BC8BA58C1180330778410F +Ciphertext: 58438F502F5C02F1FC16ED0068 +MAC: FC63A02E744A352F922C8F7B3AEE62DE +Test: Encrypt +# +Key: AD6BD9939109DC9C44BFC40A76E720D4999267E84790C54BAEABD99C8CC2DA84 +IV: 27E467D136016B5F89D4658E65595715A0BECB6CFD280B44 +Header: 3A0D +Plaintext: B30FCFA4FFA95CF90126973775 +Ciphertext: 214C718E5C53EB5E421FF0DA79 +MAC: 02C3EACA09FE10A7496681F66AE620D2 +Test: Encrypt +# +Key: 0263A952416E2A1D31EA48E75CB748A290B6E0F5CFA976D1FC3152332AC06A57 +IV: BA522161F31CB948B1E8B42B3F27B62C8AA1A8C4D4C0CA36 +Header: 170D74 +Plaintext: C954FB6A7AB5ECF3873CB1CED1 +Ciphertext: 9AF048ECBC6D3E2F1D94999F23 +MAC: 8CBC78D0153DD2F7553D0C1EF86DF74A +Test: Encrypt +# +Key: F1E95ECC5BF24F3CDE77BDC5A3D7C875C6875E157492A96DC742A55CC0E72984 +IV: 7C9E3866835502AE97E9E38BF94C0145FA63213E21582B6F +Header: A0BFB750 +Plaintext: 746F7171575C7F8F658BC1CA22 +Ciphertext: 34542B51CE458EE2CBCB922F1F +MAC: A60CA28A003DA5C08CAE1453DC655EA1 +Test: Encrypt +# +Key: A54954AC6829DB2A8F1124685CE103EF5F97D86F26E8A34680F656F8EE5CD158 +IV: 4380DFDF8A2B941DE65C74BE563D4DDFCBD2C4F1945D5540 +Header: 1FA64F7A51 +Plaintext: 165941214B81B9DA0D98F811F9 +Ciphertext: B7F8D47C234822110E2ECE936B +MAC: 0C2455D80BA175AAFEA811F3455616AB +Test: Encrypt +# +Key: 22EACA93C4365B2197EFEA084E98C61D919536A007821F6E2342C059B0112591 +IV: 0992510B0EA8109BA6422CDD7516BC3E2C37541F360EB302 +Header: 87EE10F5C04F +Plaintext: 56B2A6DC879528675C97D3C421 +Ciphertext: 501B3F9AF2F4A9E52298E85552 +MAC: 973F17F0F739D5F7446145B985B7ECEA +Test: Encrypt +# +Key: 139D13CE028508EFBCC7EE02913F7B70ADB8E328062FDE18AB9782D92C86572C +IV: A88DF454C156682F7CB01713B4E4DAAE1261D7657A28FD4D +Header: 121680AC3A4682 +Plaintext: 95DACE62A2A1CB4638E287AA3F +Ciphertext: 155DC44C599A9D7051305609C2 +MAC: FA98E68C82201C58D091D07978BEDBA0 +Test: Encrypt +# +Key: B3B7A3FDE9D1D25BB559086919307F808270090F0A6C12680BB973A0D0E6FC25 +IV: A7561B88DF4518E07BAAB840C632BC84C57FAA6E83889A6E +Header: 80857C397491F5F3 +Plaintext: 77BE6955A6FC07DCF5040F6225 +Ciphertext: BE9B928B1D5202172B3FE34956 +MAC: 9A2994EDCC20AAB80E230F4022DFB723 +Test: Encrypt +# +Key: 5B644F6363C4B16EFF7C3D17B606693BD6A31D426C8A86BA5CDD2B884A312311 +IV: AA4F4EB3E57C28291C3934BD3A65F84365C03E5D9D3AFE0D +Header: 15FEADF35F6923CFD2 +Plaintext: 83B1D76E119B5A48853F83CF70 +Ciphertext: 3657B2B57B27D8C491327654FB +MAC: 790A81E2539F4DFE044E60501DB37257 +Test: Encrypt +# +Key: B7CA363DF1EF857AF991C9F91A3F57044573920481DF969C58B92E0D8945EBF1 +IV: 429AC58C61578D4884E34934AD342C81CD19EA4972F5794F +Header: 29DFA548D383B778B4B1 +Plaintext: 17CC97E6982B36CC4E71FE4F07 +Ciphertext: DD79C1E769260AD230D231AAC6 +MAC: 3B732FE00F6A76ABCCEC84673B76A478 +Test: Encrypt +# +Key: 7EF94857E9D12440BD364C4B45DD445B0AF7794BB96D4CF76F466282134BBEB2 +IV: BF7D0E86D064A33B6DFD6F7AE9C9F7E51A60A509280D7DE7 +Header: 2D173CB74F4FB2E25B0374 +Plaintext: ED6F8B747E68515E154E9C9AA1 +Ciphertext: 870C9C20ED83946F44B80D6F1D +MAC: ECB84F62950EEF2A9D6936C21CFCF4E0 +Test: Encrypt +# +Key: 181C21A4601077374348519F734EEDB9A3C9758FEDDE5593081A684EF9CC4189 +IV: C43ADBE9FDE71CC5BDBC08C2895B0BEE275D9DD16C8D6007 +Header: D1796B97F9C31FB63A554DB8 +Plaintext: 866AD026D9CC5F07784F129A7D +Ciphertext: 9FA6C81393CA5694EA7A0CE05B +MAC: C4E3A7FBC64655DC9E4C03DEDF919967 +Test: Encrypt +# +Key: 1BFB5840E8BD050018C54D840B3BF385163BFA52E32603E94BED4FD493B175D2 +IV: 279240BA3B09728335CF575EACC6725D9DFAA38ECF68E47D +Header: 2D6374FE9209D24D8FE0A66441 +Plaintext: 9C2309C51BDE2C712455FC3B73 +Ciphertext: EABE14BA0DAC3197757B4A1179 +MAC: E02D05C3D93D37B1B79606A1ECBB1CE6 +Test: Encrypt +# +Key: 7EDD25A5DDF997CED929015ADC9E64DEE4865416F438067D6869CDC939951D0B +IV: 9373FCF4C8C1223C72EA7CCBBD92FA0E38D39177C8D5CD72 +Header: 61070FFDDA50DC67783AD44E3200 +Plaintext: 68E408FB175E6E22F97134EF1B +Ciphertext: F7E44749775E45AB0DABA8E530 +MAC: DA0BE74407A65C1C72B795D7F9C918C1 +Test: Encrypt +# +Key: 50A721CC5BABE892FAD51B42176C48C4216A350D8E801DF65C1699427AE231C2 +IV: 5E6E364989404065A03218CC66867A2332F9135D116CAD3B +Header: 48B907C233EBD073785DF57599AC98 +Plaintext: 5422F6776A303E3DC4487C3A1F +Ciphertext: 01E9D963E859EC645F2328A6E0 +MAC: 688C4231E69874E69C74008984B05B5B +Test: Encrypt +# +Key: C4B6172843288BFEDD7A13496A6EBD68E30CA763B161228D5CDFF600150345F2 +IV: C751ADC73F5410CAE2BA3C93DB59636821E79B898688679A +Header: AE03813DE73A82011D878D1D72A810DE +Plaintext: 8FA54A6724F9AA94C08B32A0CE +Ciphertext: 2CA298BAF3B6A97EB0FE4A888D +MAC: B114326BE18C65898AE05190F21DE654 +Test: Encrypt +# +Key: 43DF5C4E0BEA35BFAD9DC5D96A5DAD233F2E1B550A1801626FED2356802DEE63 +IV: 5A874AA5BC1AD4A24C4FF74F23CD526E8B07BB208BFFC46B +Header: C532710009E87FF29849184DA3929FA6160813C20A72EA8D4E9A +Plaintext: 1067E7E071F90800BB760EF145 +Ciphertext: 4886B8B07130342A1EB5236DB2 +MAC: 6840E3311A4828E3806EB63BB944A41F +Test: Encrypt +# +Key: E20447276CC5373F934E8C26EEDC3D4D4D0BBBDE77E9616BFFF093020E5ACBA5 +IV: DDFD3680E550D5D6C2BF47799B0647008B85F0BDC7DC1D92 +Header: A691D6C391CA9C0FD46F99D7759AACD74F369ED9CD48EE9E03C8CE86039C54480C +Plaintext: 16D64D0927988CEF00E1336BEB +Ciphertext: E7A4F9A74EFED4FEC71D624E2E +MAC: D22A931343F2A516159CCE4B432D4A4C +Test: Encrypt +# +Key: 6875AD1597A1764A26A5391DD2FBBE9FEC8DDA345955ED0D5F05C72D8A645164 +IV: 69A1F0C9C1E5260F20EA3D40252647B4F9D912FDE742E96A +Header: 01FD5DB6F0EA7DE2B36634BB9EFA688C1400F3BA16A5291677E5213A8F3B990052D38A1CFE7A6ECA33D9CDF0E9ADA24251F65405 +Plaintext: 62C051C06894BA7D220901945D +Ciphertext: AD7097F8F3E63050DA62D20FDF +MAC: F6ED35622A5634D0327BEC388F72D58E +Test: Encrypt +# +Key: 343841AC0664C753284A969B0420E46C76D2CCE19406160A743F98CBFD7D08F4 +IV: 3BB9537DE4C84695E12BD126DB22723BAA8E51989CEAE6DC +Header: B13960D866D4ACB73A102322EEC35B7859D7C66799DFC93EA5E17CC6DE3F63BB48961CB3563E1FCEF2345D0CBC8F75405E29BD1AAA48FF618A299106EEB8F43A5FCE31E6C938A4DCC8B5E206B52A23F549E1FC +Plaintext: 01DDD20942D23A0B457F00C125 +Ciphertext: 3312A02006E22ABB4BD1106887 +MAC: DDE6CA6F19A30E5639ABADB7C5DECE04 +Test: Encrypt +# +Key: 6BBF5489627B45A7F3D899E2795300496B9CA2E17F0D395B67CF69D7541FE0E8 +IV: E65BCDD9906611D5C3AA1F7F46A760D1D69B3D90A9AE8E82 +Header: 270937CA74B9945870B60D39B0F49278E70461AA8F34CD91504BC3F5000867253DD3793DA141A9059EF66382E4A8DB8CDB0340D46D98D5E4C1582332A5E2F1616E70DAE612452A66B2C32DFBA0C98121C96E030927FBD732455FA0327F9A33DBE775FE05 +Plaintext: E0E2BD3A5DC0129F688EE903FF +Ciphertext: 2770193089B03918C799998AD9 +MAC: 2D5F695AC27A5D8CF70085FE35B87ED0 +Test: Encrypt +# +Key: EB4E9DAF3EA8C6002BA4DF9D1E7BB2E41A9CEB6BA3329C27F0EB9E01591340C5 +IV: 386B70903DE4E0A56DDE246B879CBEE284C67DFD2FF284D6 +Header: +Plaintext: A9B8F8C452C81FAD97D2B3C23CC5 +Ciphertext: 5A4B562AB487A6D152097CB97051 +MAC: 1035C5A7FF7D6B485153FDEAB0554CCD +Test: Encrypt +# +Key: 6EE630B2D8F9A67560D0C3E18349666DDE617B68E6D87136C2680501E4D51DB1 +IV: 7D489B6502172DC27E1058C95F7CADEAE5A673136CE0FFF3 +Header: 32 +Plaintext: C5EEDE1EDFC014F4393443E076EE +Ciphertext: 6F2506F0E85E95BF7ADF84CE72B9 +MAC: 851E08CCC74FEB9C1075F8B652D22515 +Test: Encrypt +# +Key: 0B8CA749C2DE4F908D67EF266F649766EF451CB6826FC94FBAAAB47C4DDED57C +IV: 25E41229D242EA255E5E7CE8FDD1D4924FC3E7401DB59E01 +Header: 1B07 +Plaintext: 53078FCB3B1167D0D658FC94E817 +Ciphertext: F0BFA7193F58C2BD0E93C5860158 +MAC: 5730A892AA9600F9EF1FB8759CEC140D +Test: Encrypt +# +Key: FE765026301B7ADA57090CC0EBD21D02350B83E4600FEC7476F03E8A1F97F9F9 +IV: 03A1A761B3520CA05DCF94D0663BDD05DAEE492D12C5EC26 +Header: A0184E +Plaintext: 178BC12655C9BF39C9E6A9980A48 +Ciphertext: B61F969B37C0350EC8A439C85A7B +MAC: AEAB632C4C06730B6A9E3CAA534CB42F +Test: Encrypt +# +Key: 05A0FD9005D7F93F92655A8298617D0B262F665431D72F49222010D46E9570AF +IV: 48E736D837B7E71DEE8062265D328D237769D1C6DCE617F6 +Header: 91179550 +Plaintext: 57E22E5AFA8CD6184810C5969BD8 +Ciphertext: 70F603D7605ECD9C37479C054A72 +MAC: 6D7A1188CCE5D87A01EB12E7D9FE8B42 +Test: Encrypt +# +Key: CE426C22F34FD0F5B209716E5E718EED6E225E0C48ECB53DC0823B56CF86F6AE +IV: 6CDC44E22CA3C21A39D0B430C2B377AAECF3748B42210865 +Header: CDD7D7721B +Plaintext: D850B3A2C5FE190235BFDF834FD0 +Ciphertext: 2725C8C335AB1A0C1A6EE7222708 +MAC: 520D946A84851159EF23AF12E4C627B6 +Test: Encrypt +# +Key: 87AF2563F96D7BE52465FC43704D0E6B87C447629BEF984CEAA1CBBB90D2C464 +IV: 7299A5088F57EF7E8C4353898EA5B87AA0C04D089755C37D +Header: 04B9D574F8C4 +Plaintext: 7A5A6BBB4CD065EE79317E8289C7 +Ciphertext: EAB6679542FEE84E9F94304883A7 +MAC: 94C18E80093120B6DF4CC1A3CDD07231 +Test: Encrypt +# +Key: F764D29605EF2FDC76900CC0F3F6B8FA35EB29E4ADE1B220C9E44F663924614D +IV: 8B3F944FE473A5F823ECCA913595FD140EA6DEE60052166F +Header: 1BE22146463CD0 +Plaintext: E6D47154BBCAEDCD3DBB12D5E7AC +Ciphertext: AC90FEEF8F41ACEF03C9950A530B +MAC: DE9A28004B4B93A169491A454CEC4B43 +Test: Encrypt +# +Key: F4ACCB9F7E2D34159EB0B7B0AB0CEAFB9BCA49DC3C5D240F3600CEEFA5C86956 +IV: 1CE7E507B26C4349BAEEAC956FC27011EFEE4BCDEA7C9CC5 +Header: 142D401C18CE3A46 +Plaintext: A1C6A881CFEAEE9C111AD439F671 +Ciphertext: C765CAFB62444D1ED5835FCA22AF +MAC: AAC399A9D1773D275A0C3B29F233F0CA +Test: Encrypt +# +Key: DB2CE424E219161E3B702D9CC656F278F0657B33C3F392C709E556693E0E0431 +IV: 4F19B7D4B4D437A80EBC977014E3138BF0EF1D1E3F0D7E4E +Header: 25B9405B5464F9007A +Plaintext: F9A8C22BBDC3A837567C910B2111 +Ciphertext: 41C622EA1515C0C8F80C99B22638 +MAC: A9AD1646F418C75B74E4F91627C1A744 +Test: Encrypt +# +Key: 207946EEC9E1F83FC41BAC491F3BBD187FB619760C0156B6163901FFE617775D +IV: 85DAC7EAF8F981880C50A8DA875C23F984F53227E4D55645 +Header: 2E1A301CE5306D90EF52 +Plaintext: 85A9D2385783A51C69E2A0A5FF49 +Ciphertext: 3329B62E9DEA4ADD669070D5A964 +MAC: ABAAB5AE2D90B6DEB649F015AA64897B +Test: Encrypt +# +Key: 4C4BEAA99FCFBBD265647F154B978AC2FD1B3DB848EA9A6AE81649C03E335F90 +IV: BFC24B88F17398586B2331DC72B8DD62721E95807FF311FF +Header: 9BAEA3C5F1B30BA3BC5C87 +Plaintext: B4946249FF48A96137C7CC4B5FF1 +Ciphertext: B34E68CA370A506550B3125A27BD +MAC: A7C51B8DC8E7ECFEC5910EAF4B45F904 +Test: Encrypt +# +Key: 5B273CA0B3E482428525EF71C57C635833C7C1B5A51F46E167AF035DACEB93C7 +IV: 44BF283343A85F5EF80964F1EAF02791B8556405E45293C7 +Header: D3FDB24D1CE8B268F14767D6 +Plaintext: 217FAB984CEB78A046E901B0BE43 +Ciphertext: 0440099BA2496EFB104360AEFBBD +MAC: 1DCD19B336742657E3803ADC6A0AFA7A +Test: Encrypt +# +Key: ED71BA1E1D5685A20F6972947EE374030F6FCBBE7DAFEB3A7214AE151884B87B +IV: 2F317549694BA3B37EDC31FA1930302A11A44D0D6FE459D7 +Header: 1141FFCE6F6DEA791E6A17A3AA +Plaintext: 83EF7CC58297EF0B6E11FAF94CDD +Ciphertext: 294EBC3CE1B4377D42502959DED0 +MAC: 6D3951A270C78DC5DEBCA4A23DD82419 +Test: Encrypt +# +Key: C92006DF767480012E1DAEFA85D12245AB95FAE181612694E5161F45B0093CB7 +IV: 5A58EDE21DEFA5394CBA89F1331C01A18042ACA2D36D93D2 +Header: 9487620CB999436DBB2BC683E62C +Plaintext: 2DA015D2347075C117A97F49B927 +Ciphertext: 97227644E090EE7F56CB3204DE82 +MAC: D9E0111B71DD876E4D8BA468C00816E7 +Test: Encrypt +# +Key: 70994ACD6AF51FE00F3474D6BD507ED4E8107A633B47ECC31F8FAF16F074F2AC +IV: 6149E79E805284E84A7BA65B383BBEA285937A7FFB1ED452 +Header: A8A333B46388CD2C69550FD14CE529 +Plaintext: E304491592A0841FEF982894A44E +Ciphertext: ADE2A0172F53480F05F66A4D2C67 +MAC: 8CBFF684DC3AB18C7B1D6AF200BD8A02 +Test: Encrypt +# +Key: 2FFC1A191D20A0980E9079C93D921537D27F437E549B36DBB836FF84278BFAFF +IV: 16222B280646FB565145097350C08FB0C789809E09EFB961 +Header: 71A6AE20E42BD1678D85D3EC4F283745 +Plaintext: E689AEC151C60AAC77389F67B4C1 +Ciphertext: A6508B9EAEBD378F4052610CF68E +MAC: A7B2C67C1C0F69DAD58CD2F64C619801 +Test: Encrypt +# +Key: ACC0FCA92CAB0E257982C6D761A3230BB2FCD6AD3F96417A64465169A1E0F660 +IV: 6A6F2FCF864D969951AC26E8EB061CA8D002B237257B6681 +Header: 4C917CEFE8996598F89267DD4728CE88567CE9354C1EF1CA92D5DDBDF9F9C80167A7EA85C0F030 +Plaintext: 94BCC036FEF6760593766E85DA17 +Ciphertext: AA0A165A5638CA2585D4986A1FC5 +MAC: 8401BC771D054BD7C6F655A6C6483139 +Test: Encrypt +# +Key: 16D80BADE2789E80D11986D802E64D7F28D38882EFCCA298BEAAFD921CDE39CE +IV: 6202C5C08E45DD1C420D492FD968547D63FD1E4C41FA6293 +Header: B888C1FFB3E6247DFE8D0A0B553713385DA5BE07142D6D23192C66FA92284BDFCC1EC45C532A86657CC20608DA +Plaintext: 81CA29144D5F19821093D39FA463 +Ciphertext: 12E52F24725E14C36D06CCEBC303 +MAC: 9C6B66F2E55FBC2288221C6FAC9F8F98 +Test: Encrypt +# +Key: 9F7A4D293C2DC441AF2C8A080BB2CE789EECF0B9E05025CF21F0E013F1742F56 +IV: D3D3E2910E7598B37026AA5FDA2022ACCB7271D13DD97D89 +Header: 75AA100E60F60BEDFEB6B174C4F60FF6662472E61F5417FD13B669F49476099C775C6D5011B54CAE3F6C03E58BBD3C80E8FD4DFF32EB0DA0805C3E2D611A23E47F92EDAA5AF4B6EB5D696D45 +Plaintext: 790C913C6E94A68F83ECBB6E1CF4 +Ciphertext: 7197D1CE02493DC40C1AF7B2751B +MAC: BECCF65082ED6E9069E1DB21D67BA424 +Test: Encrypt +# +Key: D0ABB073C7E1E2CEE0EAA30B82F9F8E8BC6CAD1F3A9A33A51659E439F43AC6A9 +IV: 5988F74F0ED4DD236E5CA0D47053B931DEB8AED0A868A231 +Header: 9001E529545BE0A360256471F2C35DEF1349359215CABBA395C42E1D36CC44188EF350D2D2BB7A9AAC8EE447EAA5E6980D102773B1BB222978BCBE3392A414A3EC776E2A65858BFC25B95D4047A2EF448CFA6A27371D37AF337B3454EF471262 +Plaintext: 7B7AFD69D901A667D4C55482E128 +Ciphertext: 064B4C416239D32F16B95A18BD72 +MAC: 6D182CF37D42FDAB41542EC9CB28ACDB +Test: Encrypt +# +Key: DA5BDD477EE220782FCC978B2F74FFFD70337D30E2A0E448954DEE51A3384277 +IV: C6E85169D864E8E6C4F3BF20497E6D4CE9AA35615766543D +Header: F38D2B682B7E99BD2632367A389CD3AD38B340058FA13686BE903D5DDAD534A75EAFDC8B9491F743F9E8F55D47D9BDA1F6ABBAB61E4263D6D7F44B80C5A584917BFBD2A41A7D0E372347D62873ED0B02857D6B6B2E9000748BE77DA9942D0D5C38430F0A +Plaintext: 90B514909A696B7078184EF7A2AD +Ciphertext: EFF5CFFC1F1F2C5EC627AAB246E2 +MAC: C4285B217D1632E228608DCCE827AE61 +Test: Encrypt +# +Key: 7C391858C2898F9D8F53874D494C5123B7285A09B9ABEB0CD448856AC301549E +IV: B8DEC40A4C79557792AC5B153967FA6F4D5C66B3883EB006 +Header: 1B1444C3ABC7806DF946E2654A10486193DFF2A2B13D6484CEC545568F9B218D16965487179E4135B358E796A03EB6D206A837926DA0635E7278248AE7AEE629FDFB293F8131AA632DB9032A10B2AEE93957E68FAB9F47E7C971DD8E0D9579C0A82E03717ACFD03CB7DA098C9F +Plaintext: 3DF68D8730AFBD60DA8334C939CB +Ciphertext: CB7984A0CB9823221BD64AF9477E +MAC: 84DCFD3B5BA8823A4E87EE1940F62D3F +Test: Encrypt +# +Key: 7D7116CB05540A24D82685D35966E75815A0B1BA6F84236F1C46C82C2D09276E +IV: 51406B81ADF0AA2B4C4112D377F184E819EACB61C86C508A +Header: B4B4A8D949584E5D5D9ED0410A6733300E492DBBE48B3C2910DB350D41F4EBAE1B89ED748C64CD86D05CA5C132AC642B3342F062DEC198F218397E220EC4C50404A00196D602B888215BD9342B15D7D8345ACEE81C4EBED9342AD7A3F6F85BB07A0C897376E710DE1C65704E814E8F8BB704E7D180D2BE +Plaintext: 768C007A630E7B692D0F0ED22BE0 +Ciphertext: 608C63EBC7ACFE1323A18B89D44C +MAC: 8C4C4B91E0D243CE3689542EE1BC15CB +Test: Encrypt +# +Key: 76A8E60D3D606A4E9165053B23047407CD462D5FC704CA19FDC336C96C699EE1 +IV: 201313B509C4CDABFF86CEF2E5270DDB6F16A5271BBF9025 +Header: 552C0B38F47B88C53E125163E00089BB5971CDBD71194D06169BBF5AA5588DE9274E9D57842AE6DEC6EE4D6C6A56200E4447E5DFA9455214F0D74960F73C570DA2C6178544B6512824F2D8EDD74ACCB757D9AB3B1C0AF1651AD8B17CE8ED3E6E5E47DBD463FA9C8FB279EA1E4BD8F4D506C422D6481248C4 +Plaintext: 71912791DAD83B3DE6AB242ED178 +Ciphertext: B404B7AF573A04CBDAEF92CDC6F2 +MAC: DE3C56CEA237E0679842824EF0AA70BC +Test: Encrypt +# +Key: AB050A151624F1EE0FFF4975003957576A7EC3DD04A38AB59BEDA18411B4654F +IV: 888A4952F9FB3CCB157F4405B758555DF0373F998AC801F1 +Header: +Plaintext: 41A00FAD1BB1E2BE3DA803D7804A61 +Ciphertext: 5A8B71EF54216021B4EBDCE97BB42C +MAC: C1275C1AC28D90A67174EF546C480259 +Test: Encrypt +# +Key: 9C62DB0AEF025CAEC79E4FAC87E3E5542B88FE3DD509B6F00E468CC6F82D0FDA +IV: 3DC7EC93E0106E88240544F666E06527190955E297CF05E2 +Header: 67 +Plaintext: 7189E86EE82C53A10BCF91D0BB106B +Ciphertext: A341C307580B653269332CB7FE5764 +MAC: 408ACF2198F4F82827ABF28B14BB2324 +Test: Encrypt +# +Key: F8C6FE5B36DD26086C47494E793AED7DD55C8DA4D94DCE095CAB149E05700ED2 +IV: 4EA07DE2C4114BA4E92C4E0974963F36F384AD64DE272B96 +Header: FEE5 +Plaintext: D115903EC12109281C30897EEE7180 +Ciphertext: 1744D98DCC8E9920FE146BF3EF34F8 +MAC: A6F081E45D3B476BA886DF143A096CC2 +Test: Encrypt +# +Key: 94912ECD829C7A625F2304A4177AED15A52E9292966E57B086BA44200FE99C87 +IV: 3483250FBBC8E3BCB5E275D0AB6A801988D4D55AA47F9493 +Header: C4645C +Plaintext: 26D0FF11AA348C7988EA9F8B76C654 +Ciphertext: E012A923BAFAD15F7E6230FFC5CF7A +MAC: CE74B50028B4E05DAD2DE6DA249CEE3A +Test: Encrypt +# +Key: 704ACD61E8B5258DF010A85D41A5D67BEC5DEF31C126D07E1F21CAE908094D9D +IV: 9D653D05F8873D29294628D340DFD03673B70DB18A4EE371 +Header: 74A23975 +Plaintext: E28EBD0B3FF2A92B39DC9E0ED35ABC +Ciphertext: 13F0FFD1E41161FB062ED7B11FE426 +MAC: DCAC86B6B5E1D86E173063D6801F306A +Test: Encrypt +# +Key: BA39BCFB7B1A134264030DE264A0F7C498CB6F6894D7B9703F879CB0106C84B2 +IV: 3B5F4B7C73D3E2180A8F0D209A51FB6E04F0D5D92A17DFDB +Header: 3EC65A87C9 +Plaintext: 65D389C084624D6EB1752FB20B87BF +Ciphertext: 39B02284BA3754F67F0A1A6330C1B9 +MAC: 139AEE88710A6EE752390ECBBABF49D5 +Test: Encrypt +# +Key: 499D3A9CAED341B2472C82798CA50CCD49FD0E438D039F715CD3DF3E2ADBFDE0 +IV: 40AC709C8FE646B0F934679E65A0067F20C03A47B1A9717E +Header: 08DA955DAADE +Plaintext: 025F67834C5CF1595249E139EE1DFA +Ciphertext: AFF7E1E85492AB88F2BBC0A2D091EE +MAC: D64E1A9CC23EB9C99A3B117F549FE12E +Test: Encrypt +# +Key: 1E3622BF06ADC515485A52A4F4F1C5603971CE93B117586EB243A424A6C68DEE +IV: 5E56A6241F8DFD38A43C0194A906544535FA4276C55C66C2 +Header: F2AA028186823D +Plaintext: 48345C91FEFD3F9936077F0C7CDE9A +Ciphertext: 13FBA3B9E4299AB523DDACE0D2A060 +MAC: 5DB0B51C5BCB227510E515C28A53BB5F +Test: Encrypt +# +Key: 8B706F2EC3FF601D491B9DEE7B7A23C665BFD62876B0F1BA7B95FA46865F4DB5 +IV: 2485FFC8D899CF747AA7D0E968B17ACE207A7F0D5C813856 +Header: AD8631C68A2FBBA9 +Plaintext: C4A396B4DEC9F78A1A6A3624AAE632 +Ciphertext: 9941BA0058700204BAF4B0F6A49BF7 +MAC: 0ED02DCAE315380F9CCA90EB529C682A +Test: Encrypt +# +Key: FCB4206DAB30C5F447A8230121C29790310F21EC51E10C9D1C09E397367DF68E +IV: CD0EABD4B2EFEA96E1CCE6B39CCA37198D527819D42C874D +Header: 1582906637F59D0BC0 +Plaintext: 48CA1B8595B9E91D1B7C2264926C1E +Ciphertext: 46A251AA711B2BD59800ACFFF440DC +MAC: 54B03600F910CAA8AC630C93949E3DB2 +Test: Encrypt +# +Key: 5F882BC965C9AA215951FDC85CBFC1C174636518DA77DD39123924850E6FC8F1 +IV: 3F2D127029FFB890210FA22B7FD96029697278EC805BBCF3 +Header: 2BF41B63E641F7586015 +Plaintext: 1C7E0BB7FFBEC7DAA1AC5E76727112 +Ciphertext: 47EC9BD6C31EFFB82EE74A51BF705A +MAC: B07B37B588AB3FF716ACB7DD73A05419 +Test: Encrypt +# +Key: 2C854F16613F3C58D080355EF0D5BED5035ABFA538157A8878D42D7814BC1006 +IV: FED47C0E4E7A27D1AA20879DCD439BD646C6978D70B5C7BB +Header: 9E5ECE2E0576EBB488A366 +Plaintext: 55CB3F14D127E27926E2741B024030 +Ciphertext: 7A4BCFC3941FC3B2B619659D497213 +MAC: 16B319F5417E57771BA1F02CB8A9A2BF +Test: Encrypt +# +Key: 61A7EE9A15431B57469E9CBF986F7F3225E9630ECE8F94481C0474AFA79BE40A +IV: 2B11E80BDC96081B594C063B063FC431BE11BFE4B68CF205 +Header: C843328153C80C5BA196391C +Plaintext: 39A6962E601857EAC5028F53E20CD6 +Ciphertext: 050B67C36837544CE95E9134A6EF56 +MAC: D641D4811A2A6D8017CF75F3C356F08D +Test: Encrypt +# +Key: A2D59C55831A853A0EFE223450654430A139E49DB0CF98CD07FB917F09702CDF +IV: C4216851EB4354FE2D9B658DB8074066D7B2D8C247F29395 +Header: 0C8AF01AA356852A3E4CBDAE4E +Plaintext: E2A5C50512CA0F4C2F0DDE5AC4E6E0 +Ciphertext: B852893BD5E9C2A62DADC55E6FD805 +MAC: 6B01C71205E4913D2F370E63DE3E3EAB +Test: Encrypt +# +Key: D5B0EE750439D0718CD3978A46D119F93DA8BDC0E4F8FA4BB3406C16D36368F9 +IV: 0449F4A721F095486CB48AF0A6BB9BD255165F5C5B0BBEAC +Header: 4B1A85CF0E6B9AFC27EE247327FE +Plaintext: B4B3344EA14946B5E925E3D19E84D2 +Ciphertext: 38D4A3EF530C0275E451668022DFB9 +MAC: 9203849E6D732260CB7CD4A917032DDC +Test: Encrypt +# +Key: C6E82E3A31C8D2FA3FEF7D814F38997E5F971C56BCF83D7E9B18E8FD18B4A851 +IV: 6B942D506B95371610EB717D6A58827FC37C727D2F260D4A +Header: 5993CE19BA46AF4E5432D11A789E61 +Plaintext: 95E15B39D99982936B1E9182D86C44 +Ciphertext: 22C337283C62CFC6A6077E1BDC110F +MAC: E8BD97C2249704315FCDE10EA0F2A3DF +Test: Encrypt +# +Key: 0F8BF9F543B9F2B5383C2BF6AF53AFC9D8A86FE6825A15CA086A58771404DA5B +IV: B6A88A91D57998270ADAD5F7D3E63DC887CA260666EC58B1 +Header: B726FC899443243B2637CE1CA778927C +Plaintext: EFB9F352F8A8136D09B05546F9CBE9 +Ciphertext: 4E38BC6CAA2ADF079C409DE5B259E0 +MAC: AEB8E38FE3EC231EA1503E1C6FC8F63D +Test: Encrypt +# +Key: D94BF3C9BBF2CA52F7C6C1D9B9D393A054C3D50F498115EDFAC1318993E56021 +IV: E13BA8D24726EB13D7EF5ED2454766F13DFC34682AB9BD34 +Header: 7A5F3700EE2E0303E0DFBBF0BC6DE8A8E32B403FB42EA352D41855D5BC3CAE54CC35 +Plaintext: 00BC69C61573D9DABAD3894C9F7433 +Ciphertext: A75789E100585552EB84F00C47D39F +MAC: 23E3AF2FC65DB9E768C71D221CA3CD8F +Test: Encrypt +# +Key: 10C222011472085A1AEB89143E3EEBE0CC9432B81B4FC9A90BE483CC599BB13F +IV: DA7E4F2193FD452BE8149EEF6236D5C93FF82B50E4FD223F +Header: 6BCB7F2A73DDAB61CC068EDADD0C51FD70DF951766E568974B4581B038E35B7684352B41D8EB5ECE6346760F8BA95F667E763F1B697CE78A51C60671B2B96496B3 +Plaintext: 96B0E3A7917F795E479878C5323C46 +Ciphertext: 8757E4F30DA76F2742CA6EFF0CF09A +MAC: 5B1BB95B9A42925520C1994E9AC2C986 +Test: Encrypt +# +Key: B20A828CF0D4468828C11C1B2F72C27490D454DD26BE7498245D1377583BF595 +IV: 194E4788F9AAFE2141380720C05DF6F4D276ED6F4FBF0F64 +Header: 9DF54730D948EEEDAF7B6AF8BAFEA4BE4BC2904430335A872C5BC5A962DB95BE98D07653A9FB073C4DD6F5153867D4D2825DAD5F5C20991C4D238376F6954EEADB496C921248CE +Plaintext: AC72A30FE110EB0DABA2A523CBC559 +Ciphertext: 23A64F2C53F29E595C2E1624F481F0 +MAC: F27601DEF5BD9C4AD90BFC251AFE42D3 +Test: Encrypt +# +Key: 4FEAD657464FD8470D11B8C6B53C5BD375863754DB791269B6DCBF5E00072FC4 +IV: 710B8D8E19CA9292A27EB3669CD7D29774436CB5C5E0EFDC +Header: E90FB6F1B81BF1B833D910BA25A8E6E3D395872908AB2389101BBAA331497962C080F8734A76C3CD5EA7F39ED643E485517185C8C61BF87622BA6CAEEA22BB53F6F8CFA886F31151D92E75B9CC43 +Plaintext: 56D9061E21839EE5235289E40D1F99 +Ciphertext: 03C17FB6D140CD2A41155AB0D87AEC +MAC: F541AAA7C8DCB6A3D1612971D6E443E8 +Test: Encrypt +# +Key: 631B49BBD8440C7C8751C6C203697AAF15114F8A41112027B650B28D86B5C9CD +IV: B061E77F72B9C546E0F7892AF0D3DEAC7D23F24E6A57D2B2 +Header: C2B27F7509C6249439A380D8EF3DF93407C6470783F5D641AD6A82B53EEE52A520ABF219D88D48F933B419B994415577271D56AB6ADD04F61BF7295C1C85D740E9C97E038731F01A1520697421FA2841 +Plaintext: 956F30510AA7237ABF451B7D9380ED +Ciphertext: 76FA33CA5389804261B05ACDC57CB2 +MAC: DD011E41D55842432C758A0D59D931D4 +Test: Encrypt +# +Key: FE8C46EACAEE5263BE3FFCF39D0FE2939504931F5342444703C3AA33F50337E1 +IV: E25B1536A544192CACC637A1C5E9793AC31C81888ED79DB6 +Header: A7C68B18451B574797BDE85C927DC4E4038059FBB422AA5BAB02B49460543899E9F6C559D739D52DB7D5F9DEC95B26F66F47BC20EDC7DE0BF430CD32A8531ADFDA268A06E3B530549D74950BE3C15B123E7158330F28701B62BF15CF30797B621A8A7075015E1231 +Plaintext: CAF9C5CB78E26A71F9C8819D3A89B5 +Ciphertext: 98E06998B8F49D5686BEA65879EAA7 +MAC: F54EC130FEBC71D948E011F095B9E1D4 +Test: Encrypt +# +Key: 831EB6442E8D1E05A05D28D8D5B12AAAAF27B5E75D70729D7F2A54C5783A5D86 +IV: 637C9CCBDFFFE611FF47B481DFC4B58AC397184F48FEEBF9 +Header: 148AEA764E35B2F90CE6CDA6D85C3DBD2BA218237D3363D6A814F9BE6EC7527A5AC836595B65D3C86BBEF95D46763A9C3748317FACF77CD85D37404FE1644AC0787289C41948AC089782CDECE71C294774E1331D4C66D56C9F93DFED904C9806824C7BC2360747211D +Plaintext: 7B83930CF43D35B0E72FC42150D4A8 +Ciphertext: 0731EF7A88FE9A646BEB3AADACED09 +MAC: F1A595F794B46DBBB51C3040644A1B9F +Test: Encrypt +# +Key: BD0B99063E6D4AC233057EF1A918D4F351FA915B171A0C529BBA61144FBECD43 +IV: 40D5521091F09DE9C5CE65968DBC60FC24229117FC22D2D7 +Header: +Plaintext: EF7E9C50A07F5764BF597150711DBF19 +Ciphertext: 52806A1CA92E878EDCEFB38F38817E73 +MAC: 5520D33401016F87F275E9FE73FFBCBB +Test: Encrypt +# +Key: 55AF86CC1A3E6C4DC0575F2F4FF8ED38221D22BD06CA297D0077D23E42CD9F75 +IV: DF26ADEFB5BDE2F5D0009CD438265156DDC82BC48F59C57C +Header: BB +Plaintext: 95F132403106362E88BB3856E1638BBA +Ciphertext: 40181CD116E8CBB228B977D06C86D19F +MAC: 6E2F9CD57D455BCE0869E556D846DBCD +Test: Encrypt +# +Key: B371B15EA9034942823E2302AB38697431F3443B4B2A1E24947BF18ADE31C2D8 +IV: BF0A888777C6574FCCECFB019605CA08618C6BD8EBF2A212 +Header: 93BE +Plaintext: 042F81C1E39507812B5269751B51F4D5 +Ciphertext: 2BEC18DDF2C1EFEC7700E1D9696C2CBD +MAC: 480E0EA68F66628492994602195D6FBF +Test: Encrypt +# +Key: BBFC8D9E44FA20D9010A99E84081BB92F49D7D0B82F93E7E1991DDD416883289 +IV: 38BB4FEEBF6BD1A4164074E4A97E950EEDFF9F9A548FCEB2 +Header: 271687 +Plaintext: D5B10E2D4390419C1428D39AE849F75D +Ciphertext: 5361BEE8CC1D552BA3773AB38EAB2A2E +MAC: BD5C72212BECAFCD30C97546EDE54C3E +Test: Encrypt +# +Key: CBE25AD88F1FECC47D092A3E1D7C75F40D6BA4B2DD1438DBC161A4950CB58B71 +IV: 022731C8D0F9F2591242267304B573B765AA63315D87AC43 +Header: 9D1C2A85 +Plaintext: 92798FFD050E98FAC6C0FEEAAEB3BDC8 +Ciphertext: B9F914B7E68CEF2C7897F54FF738E581 +MAC: E22B0C513D708115507FF71B029C3103 +Test: Encrypt +# +Key: 1104BCF40C784E82D4DF8E23994C160EBB77339BB76D8E9A62EE37109119BA4C +IV: 1D7CC08B49A000FE1F489827FA01FFB801E85EAC92F895AD +Header: DF78B3C2CC +Plaintext: 4CD674C6296F5265823881EA45066286 +Ciphertext: 249443CD03CB73F99B8E964F610FBBD5 +MAC: 2FEE697AF78E0EA121A35564798FD0EC +Test: Encrypt +# +Key: 85BECAB6533900D7A21D4E4F15BC1C5CB500C974445DAACBBE756C1F8F7F2499 +IV: BC457A186893DE31CAE80552F8BF3782ABA5E09EE92257A3 +Header: 2B9B2624E552 +Plaintext: F8FFD342437A91A0640B98436640CCC6 +Ciphertext: D3474552B10F28D7B1E3A83DE4A717DC +MAC: 09365C4F3E3B3A7332D0791764A86E08 +Test: Encrypt +# +Key: D1319BB97B9B78890FC60AD548FDEDD206D55FDD3B179DFBDE35DD078B3DB1DF +IV: BDA1D5C0950163ED849E5F4F72B7386813EBE408C02FDF07 +Header: A4E10432DAB136 +Plaintext: 856A572ACBE3B9A8AA8454088E5BA19A +Ciphertext: FC0B9DA330F76E39C5E29862C611AB93 +MAC: 93D7A337AE324A4F1184949FAE1F10B0 +Test: Encrypt +# +Key: 90BE147FC1958B40E250FCDE61A9D2C5535B722D7E25157274BCAF8BA8896D68 +IV: 693EC9C805EE17841788DF846737B2EC178CDF95039EBBF4 +Header: EC26CA815842B686 +Plaintext: F85A84FC4538EA197B323DFB2D32EAF7 +Ciphertext: 6B41D378DA979BBD16B26BCB2EA215E0 +MAC: 2A1CC343E25904F72B9ED48B1AB788F9 +Test: Encrypt +# +Key: C965632072145EB51167EE8101BE5FA33B4D5042111FF680A8E4FC9729413C77 +IV: B36821AE905F5A3A0C2518895488ED60144F6E5E38EB974A +Header: B438E9CB1DD1A2D0DF +Plaintext: 56F7F969AD470205F284A79E53967C71 +Ciphertext: CE860DEE729F2685CF93B8ACEAE7978F +MAC: 238279227E85A6ADFF06E3C7D952A2D6 +Test: Encrypt +# +Key: 7FB14FF4E69E3D119ED70FA04B4F090EAC8B3E4E76B749832CD829CB54A3DB79 +IV: 6B5673B9C65E34F0ABE90B9F51CA3BD46F212E26FC060CDA +Header: 4C0F8125C2EFE18B45D8 +Plaintext: 6808F7D2E7204A235B2D23B60D1216A6 +Ciphertext: 40936C6A2F1B38E98B3C23081897CB67 +MAC: 264735A0CD8DCD2CF6FFB5035DA78FEA +Test: Encrypt +# +Key: 22DDF3FA70B1C9BD0DE8CCF831B71E0D28E5B6D051A52D54010C77269179BBBC +IV: 12C9AD151FC59C3C1F9A1A5C1FE0C37DBD6261146230A3AD +Header: F26136D6E2ACE7713C5ED3 +Plaintext: 54BAB8EA1D2A61F01A51010923B52348 +Ciphertext: 38652AA2D5A92494B0A5BF6F54114C7B +MAC: 6A009913A1FF034B54ABCC67AF3817EF +Test: Encrypt +# +Key: 76CC1765AD66164DC32720296FC4823B59D9E577575FD9866A8CF59C7BF3119E +IV: 8AEC291019C2178F8BF9A0721A0C03A3FF817C4455CFF8E7 +Header: 692D43CE556D831D25EAD1FD +Plaintext: 2E342DEF05254D23C4B41BF86EE72260 +Ciphertext: 72245E0FD95FA1E8FE0CDF1B8D655580 +MAC: 95810CAABCABC848465180C1C765F82B +Test: Encrypt +# +Key: 2D8425B054F7E85D794FB6C45726C4D93768CE2EE94A099187514D93EECBD231 +IV: D5BFDC59A9C8549ED92325CCF04C1B7A4A8B609913C8A957 +Header: F3BFA18B986C2899E4B07CFCDC +Plaintext: 2A077CEE3FA630F6C02D1D80ACBC0F84 +Ciphertext: 69CC67EB272DBE2056A5ABBEA837453A +MAC: CFBBF9707AC4AB8701B203F8D3C10B0E +Test: Encrypt +# +Key: 0746B8495C41B61991572DE409AEDC5B6E99B211D57D6EB60A99311C72A18034 +IV: 31CE233176E171B84462F5CA3549AE74F2856161955E7190 +Header: 8A483C18719C61CACE1F023EB75D +Plaintext: E216A9A31E711FCB2889A11616D8EAF9 +Ciphertext: 5E9D7C01678E7153147847508C132BD0 +MAC: C6EF79D85615D964229F814D2369DF8D +Test: Encrypt +# +Key: 2A4B9DC1AA5699AE0656F5631741819C4050040AED713659A24590183CB5C740 +IV: EBCB79CB64C6A6967270D028951C05303DD8E364255120F5 +Header: 8DADDC1F4D1E0E9EEF824E6F6A6B0C +Plaintext: FCCB2D2A81583C882B52F5CB6F1F01BB +Ciphertext: 26666B892D4A03892AB30F086F17141C +MAC: A2AA8D160744A40B7FC515E99F9A1545 +Test: Encrypt +# +Key: 9CE399FE7D6A0C26064FA68CA5DAB30FE1AA3726AC991412A29611B811ED32B6 +IV: ECE456022A32E1C5B5CA28E42DA220C2AC9AD9F8F2FBADC2 +Header: A1A22C511357F9388EA99886DA275E88 +Plaintext: 8F3D9076E03423DE5866BCEAD55E646E +Ciphertext: A8919520F850396644D0F526E0FEEC50 +MAC: 9591BE917D60133480341A0F927223F4 +Test: Encrypt +# +Key: 62E81BE29AB4A1B9811518C3F926FD3C95C2C7BFF4AFA11A0C54FAC7163247B0 +IV: 7260607CCB81129078133A921EBA53BE643178137227E4A6 +Header: B6F8DBA0EDC76172F9590854BF8508CF301303661E511CB684B9A6EC873AA4FF +Plaintext: B792399973B16ED7ABDCAF40A2103779 +Ciphertext: 8C1575C40A7D23B846B91BE740309E77 +MAC: E7D06FC5A56B63A18A82FDD4C339B83E +Test: Encrypt +# +Key: CA7E0A677279AA37851998826E8D25C7810B8B1404D5635AF69B7C7F342FB72F +IV: 76A4942C096E6A705369E0BCF373FA3D8116851A305E650A +Header: F47857CCCA265A7FDD08502FE270E4A19696363824C2F71CB770B2A949132F062C1AE9D5 +Plaintext: 8DDE1323469875EC9E3FE8A9179F8638 +Ciphertext: D887C39EADF7225A7939727BFED74018 +MAC: 6A686F4DF8505F327EF88B0C42BA1C99 +Test: Encrypt +# +Key: E7AADAE357C7AB58B263B94FC5011593FA5217F807FE71AD76CD8CB7FDC0C96D +IV: B935DB72E89DE3F31E7C75DF6DEF7E5AE636A6A4B9955C23 +Header: CC34D55373A07A8DF64B915167CCE08D37B7B844E4C2694BE0F39D55EEC6717FA328F449D3F1679B98B941900C2C3F3C0F94A8C175B98572 +Plaintext: 1BD909EBD82C4349C4A56D4D4ABB61D9 +Ciphertext: C9FB3E8B0A1543549171A2180A7C38DB +MAC: 227CC0FB4DD3CEB63A757575EBD2188B +Test: Encrypt +# +Key: 0D28B44350B43E9AF0AD70E3F3114CBC162991A0806362FB8C51038A18370D02 +IV: C0F14188721AD541ECFE854EC5A26FE96D5B2E2361CB7677 +Header: B3BE5CA471253E09C57921C8AA2342373A8457ECBB13AC9D194060F04E09471CB34B19146742A550E1500DF335D3D4E4DB33A1492C177E4F89D649C54763C8CCA16C4B16 +Plaintext: 4AA57B19734C07B8BCAA26EF9FEC2283 +Ciphertext: 553982E00C7E072E93B3FB37E54F5BC0 +MAC: 88C86BD90B95D0FFFA13F86BF061CAB3 +Test: Encrypt +# +Key: 2C2D7011AC0107C8BF40C7FA0D0F2AAD3A18CA1D0A9CFE4DDB3406B483F716C4 +IV: 2093898C3D3AD7BF32A52C1B64022B1AA75AD7877BAB3C62 +Header: B497FC67D45EE4D8F22D36C9E5B435FB353B818523734050D85D0B6636C8C3FB2BBC5481E437218CE264DB6EBC5BB84AD0B66EA945668524B2E15FE003A97611350F2607FAE60B +Plaintext: D15784830FC732A4CB88E22D9B93AD17 +Ciphertext: 8CD33F1E86FE118F43C8836DB713D9A4 +MAC: FD99AD0DB1A36CAE8FD9B0CFCEDD266C +Test: Encrypt +# +Key: 7E3B8F80C38FB9A2CA003CAD85525350E881D8570B8C7963CE1C46AF4EDB3038 +IV: D4E1E4E9283AD44C0501AC1394E4712114C527616A95AE05 +Header: F0D0D29A7DB4E22DF7B461D1169BAA57D1144F92ABD3517F6A4A464786237A66CE76F9F4A390E0829AA2A93FD1BBE0FE585788560CA5C74A840A8E0DC5A44F896056F9E720B6493C3922F9703F9B4F6EA92A42EBA0A7F97CDE5C909CDF343B +Plaintext: B43DA0CDB73BF238E53E39228D2D4CBA +Ciphertext: 53F6D73879F2162F2EBEE050D0B2AAB5 +MAC: D6C607EFEA17DA03B132A51FAFE600A7 +Test: Encrypt +# +Key: 0EBED7899DE00AA8816A2B4932E156A5552A97CDAE19AEACDC0E800E7F09A118 +IV: 664A1218576975C377640DC62068AA0925643AFD8B45C767 +Header: 748E0DA3EBE81D2C889D0C7CC30680C5844D4B1A515891410EB3DF000E7C64A96F32EE1A1781D2C89BA8B54E25E50E0C39261450AB55DF898EAA257618D828A48EF8826A78437402ED9199E9A776E2B31F7D4C5B232B7C5EDC21A7EF9E6EFA872C36191638AC43C62070C9 +Plaintext: 7458CEF45DA2A953D31758059B749668 +Ciphertext: 021CE88B3F5701B97649C58112C16294 +MAC: 840D0C3CC4DC20A24982F6D7EF8D6DA4 +Test: Encrypt +# +Key: CB625BC358E9AE1CB036F0F83DD149E06CD9FD0EA1D913F9256178A9FDBBF317 +IV: F5C621328091CE191C71E79A96720E61ACBAAC77BAFAA946 +Header: +Plaintext: A9158B2E5597AB9654ECFD3B2F17339591 +Ciphertext: 85742D280D5EAF4C93250A561CB3D3CA57 +MAC: BBF5237D0DD79F1FB5080CA69756959F +Test: Encrypt +# +Key: 502877C417ACE94E1756322D37912844E9143C126C2ECD0BC7388F5E0C48996F +IV: 32144F56249F5303FABBEE0A505CAFA3EDBE3360E949CA1C +Header: CC +Plaintext: 3FEA773E5DA4E5AA120657C9A10A4B730B +Ciphertext: 77B383B974C3167C3ACE14D50C40C9DFB3 +MAC: 9B9365F338B8DF27C375BE51F766DB45 +Test: Encrypt +# +Key: 1E4E9BF004C0A87CB714268E8B55E3A5E1DF89F761BFAB687A49E9D078FFE413 +IV: 0C39D1FCC2EE1192BDF2461DA3CAE8E1B8D987D0515E1C39 +Header: 9D0A +Plaintext: 4A7CDAFC35A4C793539C2331A75AECFD9C +Ciphertext: 230D7EBEBC38F5AB94DCB0C37F1B91ABB8 +MAC: 8F9D7490EE01E652B588CD0F3E437204 +Test: Encrypt +# +Key: F90F34BFA4121590AC2B56D5734C0252E7741BB59A453B90F6546B92E6A66029 +IV: 120C07A897B4B8744BDEA3A600D4598D3CD3A6F67315566C +Header: 102FAF +Plaintext: EEE01D0E4521E2F0B5CC57F4D1DDF5A4C0 +Ciphertext: 3C23F31EA05E87DE34337FE0CF896B8828 +MAC: F9A489E0FB87A760DAB88353B18057B4 +Test: Encrypt +# +Key: 0970C973EB5568C8C6339DA6A13E82253767A54AB87537FBB007E547744997FF +IV: 5475EDC5B83C26C727FC5F7C9992AFAE634AF78C1F603F08 +Header: 0CC2CCC6 +Plaintext: 3E3EB5E0F694877E48A04817C219495E5F +Ciphertext: DBC5D62A00D17A3A0C0084D461D3AD766D +MAC: 1C7D7201929784E43298FC0DF6F5B7D7 +Test: Encrypt +# +Key: 914578C9685FA491D402984D6275074DEB227E9FC6639617AA1C05FD5BC29E51 +IV: 16D6B60903473A1FBC8E8137CAB3AD624F45FF009619F134 +Header: 47B2C3AA9A +Plaintext: 148E3263C1470FAF483EE2C3676C78D5E4 +Ciphertext: D5B1B17A5AA015E82854B1D278B0216C05 +MAC: 86E345B28842529B422B4F340153C558 +Test: Encrypt +# +Key: 0EF902BC002B6DA748682EC3CCC6A59CDD6AB4C33E1D5DF10A3F1565AD766045 +IV: 89CC5F71D57778E67902DC0FBB9D392A6D9C760096023B37 +Header: B41A15F3A6E5 +Plaintext: D72C460DCAC8ABB484867117150BCA2A47 +Ciphertext: 83580D7D6F391DBCD7ADF1B451467C22B0 +MAC: AEFC377636A4D071BC392225A8C194E8 +Test: Encrypt +# +Key: 033D25CC146D3233F9F6037F65C88DEF31BD2A376CE15D9B1859E5D3617ADFDE +IV: BE10E0D4EBA861BA74AEBCB532FF8B8B14F73CFBBA61547E +Header: 0DCCE6AFD05090 +Plaintext: 94B7ABFC5D671F0FA26758129AD55A8CBA +Ciphertext: 65B7C275879A56B9924E7EBCBB4FBE14FF +MAC: E6A7EA99856D13D38B84076E25ECBA09 +Test: Encrypt +# +Key: 2E699F03AC80E3372A6E3ADE795312540F6B5CB6F1245A9B6F1EA2B156199EDF +IV: 1A2D766E65E4FD2B8B437948A5ED1BA4E6C602A35DC382D2 +Header: D865221D6E7F8288 +Plaintext: 921AE0378BAE14F13C18F9C2DB1ABE0459 +Ciphertext: A978BB178E554B72079E0C117A438BF2FC +MAC: D37ECCB113C6CA223DB2DC5C14EB609F +Test: Encrypt +# +Key: 803F8F6606FDAB49CB48FB348E6B70B61748020E57F99DA3C5C196FAA2CAFF79 +IV: D44A3FB49061A5A11E9408F13252F72FFB984E2532C88877 +Header: 49A7DDE84FDB887117 +Plaintext: EB9787F29FA40F3CDC0FD794B10F076669 +Ciphertext: DD974E0B332A5A5BE431E138C7C732DFCB +MAC: 1EC2883CA9E28958392ADB7D208FEFD5 +Test: Encrypt +# +Key: 80E5FE84AC7BCD6CAA2FE89CDFA71ED6A7C08381DD8885C6AC31167C404949A3 +IV: D5FDBAFE22550EB69C6B647687812AEC0EB20A46747B3E3F +Header: F62E218CC5FF05B1E110 +Plaintext: 4553DA35FAD75A36A800D875A94519E5BD +Ciphertext: 64C41C0E9C1BC98A167948F73FFA5B04FA +MAC: 92DE02BE548A7829B47C355FA4E5F3C6 +Test: Encrypt +# +Key: 1799FFFF14758570190338772FBDADE929F24E9B0091A900C6D2067E6F14F5E0 +IV: 88D5DBB8C283CA3A8C94ABD825600C197695FB3B412730FA +Header: E6B6ADA3F4668D897D07D9 +Plaintext: 933E6872F0D51266D98D1CE34DC645BFA3 +Ciphertext: D11B93AAC0D5AC2BD170FD32E70F4CE7F8 +MAC: C2C5CE35805593AFC65ED7DE984DC14D +Test: Encrypt +# +Key: CB15ACBCAF2EC997278D9EC888404FD1F90A74AC64ED936C67496B3707CDD2E3 +IV: 62A6127D6DA961D76D02FCCE97D91BD61C35C2568821BEFD +Header: 949C8B97DD82A8F2580AE706 +Plaintext: D4E56BF8A4E68B26039CCC2F114806924D +Ciphertext: 52E3CA79B47C7A16124C42F23BF73DB162 +MAC: 693FCA4EB6BF47C4909EC4FE4A19DC22 +Test: Encrypt +# +Key: 84E49F99BB5F0459CA0698982F97622D673820F3F3214713BD9053D3445E7F27 +IV: 9B2897F123F9D12203252C53819CED101C6036F75ABFAED1 +Header: 9262E012746C67D74BFD1FE72D +Plaintext: A921AF5FC3585A7FC834B94883038B6C76 +Ciphertext: 640B0679187E1D272BF5B7CE1854034C58 +MAC: ADC192B4D666231015092729F6533AAF +Test: Encrypt +# +Key: 85CAB4D408F2E143DD220A65A4297E6F6D34F68857EFBDBD6A502C7B4048BE47 +IV: 8D34D99BF640A0E9FF8B4DAC4A9D3B1C017ABD36E789C04B +Header: A7A4A908FCE9A978939452C16BC0 +Plaintext: 05BB6D7E42B4FBEF43AB3FEFCB7E666775 +Ciphertext: 37CEA5CE86836DD7B2FB62DDD47F3BBDB7 +MAC: 8CD3279377B696DD276C1B906033AB8A +Test: Encrypt +# +Key: 469FE02E8C51F4F1DB4BA17E4F55E8694A164FFCC019CBB3164EBEC160D3C027 +IV: 0B2EF3F630E2F5C684A8B2B81656E3D4C82437F4E3A456A6 +Header: F78DCA7F6344495287F324DD1BE8DE +Plaintext: C924F1DFA7572219C5D0EB71370BD5C074 +Ciphertext: 833EAD9DD5AE1C901AAD03F61CE294569F +MAC: DADDB457AD6D4D3D6A62F9C9CD8CF681 +Test: Encrypt +# +Key: B76EBC95129A36957FB9B4838596560CB949E433A2005C3E09CDFF639C442B50 +IV: 8C73B2739996926F1F19034CA625539293A5FC736EE75D89 +Header: 4CBF94BD0997633B952D51D22F9964CD +Plaintext: B526546505E584F165C4C514086A104B2A +Ciphertext: 191B62211493E420D4D0A27D9777DE440C +MAC: 0120A54AFC4CCDE262F9086FDBD3CC2A +Test: Encrypt +# +Key: 55818B5AB56CB693C5B5971C286D1CD7D8F922D090CF4AACF7EBD19BD3D23C1B +IV: CF947221EC1FD53BAAD5AF9E846A80290B6B9878463616E4 +Header: 4514B880E3B32622ABE340BBC9B324F5219C +Plaintext: 32EC951B1210B34C29A1EC465A656CC905 +Ciphertext: 1AF0DE88324A75405C2448C04B890DD984 +MAC: 45CC43744B2DD4094E0B7061BB2F7E7E +Test: Encrypt +# +Key: 21903F443C9632AB1F0DFF82D3376F0F08B9412FE6BE85DEE92130455B13FD6F +IV: 47AC0E8ABEAD73A138C108DCC2278EE515DC70A00C88C73D +Header: C723042B72E4ED8FC1C4D41C77EEF29B17255051D24EDC4CD1A49BBD61E1C0439445 +Plaintext: A75129A4C17626B0BE2655DFF7EF49C013 +Ciphertext: A4864790966EE0FD7B259A44D576B7D1B0 +MAC: C5B65A9188616CA3E10E3DB02B1C2432 +Test: Encrypt +# +Key: 65AE5E813B7E501F8FA31CC5AB7266D3046C7FF6541BC28421A1384BFE0C8DC0 +IV: B0690E193694148A4B8F524CECBBE3C57B9AF6B04FD24206 +Header: 16CEA17CD3362285E8AF9F0C471742C250EB3E0E0D6FCECE3FFED2600C6BF19E0730F8E9A565CB1570613A0C6A2165096ED8AD72F73295185C83DBA964E50C +Plaintext: E2A0382C78CE619C8B6C138644714D2438 +Ciphertext: F1B1C336BCB5A57E6A8891435D4189D501 +MAC: 1464FD24BEB1D64C76695B19C644C3F3 +Test: Encrypt +# +Key: BD3D0DA748CEA282E0B481CA4D8675EC1D8ACE821D463EC0D2DF7C184D37AB34 +IV: A1C727584409212A3AD87FC0DAFA36BD1B67DDF5756570FB +Header: C7C79C30AF994AC8439B075E1733AA52DE44C0209AFD210FE45C18E6256DE81F89559954341F5234B5F9F2B073D4D876F0F2F08D26FC2AB18E5247804C50D377EB92D84EC53B314EC617A9E277734EB3A3 +Plaintext: 7336756C2FD7ECDCD7FDE7A13E8F58D59D +Ciphertext: E0FD5A454158E25BCDBD4C722907710A8E +MAC: C697F50A2E6EED627C77621416FCAEDC +Test: Encrypt +# +Key: C8582A22D49A319AC4D46903607A6A3C2E0FD3C4E23FBD3E32E1A0ECED1E6414 +IV: 613F1CCE5E86E7ACC85790E808DFC5DF3F84BC0688BDCE4D +Header: F2DCB8D8469C23233239ED632815DD2B6D7CC004C2B7EDD6CECD4CF51D8213216C5BD20A7A4EB753B6E63C9D6D2A21F20B29DD032070FEF24AD08ED3C383FBA8D51BFF2EB5B1586FB42D39F77F375938029EFB744BC06B13BA89BED2B576681E0A4C18BDA2F52163670D2D103B +Plaintext: C242DA302CBD8093648166FB3B288A0D3C +Ciphertext: 8FF785EBEDC47871499B42C33B417E8C92 +MAC: DDE08709A390A9B670FDF5C0724CE666 +Test: Encrypt +# +Key: F2351A2CC27DA70E088E9B6F0BBB2D4864E6DEEB00BD496087A3DEFF7F9DCBC7 +IV: CF4219A5137B86A34CF2B9B1FC5C6E695365A0B952BE3EA8 +Header: 6C0BE05E877625B0A2C39C0E2CAF1AD1277C5B6C8727E1DE2584B11647A373294ED4769BED9E5DD9F9DB79850D8E1BABB08E49760E00E99244AC61FEDABD043089249AB3E1CF7FCE6627540FC92063805B61474E947AF48094A3AE5DD3A6699BCFE6A8B7D1C41FE0BF49738BAB216A +Plaintext: 67E765A1B400C4BC1C2E8F202A9C95794F +Ciphertext: EC34363B518329F3336C3D19DFCBAC6891 +MAC: FEE6B5D0E9BB4E3C29C6EFA96068437C +Test: Encrypt +# +Key: 9B8BD869535C43C4A206EF4596E8E75C99103CA2C1E86C90BFB393AC61C487AE +IV: 64F146F76A3B9A4D445D424821C4903701D61F8159B53FE2 +Header: +Plaintext: 991CF2C081EA8B536E037AB6F939CDB9D0 +Ciphertext: 8883BAD8E4D73F5276486149A44C040EFC +MAC: C14B73026B90ECF992A3CD081E4C9C11 +Test: Encrypt +# +Key: CC033C3E4924C0C770701D00F1F2FA2BCA77DFEE7D329A0F53D07125CF7A36C5 +IV: 59B90BF34984454B48FDE1843B1CAE122DF2950C50E9A92F +Header: 20 +Plaintext: E6092700F1652DE329F5643FFD1815C72F +Ciphertext: 1C4A3C13A54BF30AD9BBBD23EF1A4BD994 +MAC: C2014A6B76A6B4D75C1F06E5B38BA9F6 +Test: Encrypt +# +Key: 02830AD7E4EFF32AF902BCD5E3687970D5B31AD4555774C2D9CC23752168809D +IV: 1B4E8B31F982890916E9924505A8399B28252D781C6E4B55 +Header: F4C7 +Plaintext: D30A2C7A89A4792B6A55CE538C5FB04005 +Ciphertext: 2CCFF413ED7A7B7C87EB6CF5DD10D8173A +MAC: A6C0C51E3136F5B5512721E6B9C56175 +Test: Encrypt +# +Key: F4AB01E7CC44103DB91AC439BEA6784E048A9DFAA2A0C4B558E0C33DCEFEC0B9 +IV: AD198DB1B9F71F0770B43E3877A24D6F6333C599FB567787 +Header: 8DAD9B +Plaintext: 38ECD77AEDDF8085FD92E1ECAA3AC5D2EA +Ciphertext: ED3BE22B84C23D48B26569B6CF7F948337 +MAC: F160943D00D15BFDD376879FEB587697 +Test: Encrypt +# +Key: 876EC75508CDCED6EF72F71002EA23AE9430FCF7192858122977F35643181271 +IV: 0345226CA805D127A1B90B83831337BC91FBFD83F4005F69 +Header: E3E15546 +Plaintext: EDFAF1111A23BF088EAEA190BB62CA2AAF +Ciphertext: 54CCD55EF163AEC65692BE5271C69CF681 +MAC: F7080B07000B532BBF7A9D5B5CC678D5 +Test: Encrypt +# +Key: CEA73221B4E9336DE65796AA5A50AEC3E5F46A00895D57A000D5EBA00E3314CA +IV: DA2E75208344527A6B07D58CBE069547127AEC15AC892F09 +Header: 54C8F852FD +Plaintext: CB4FF7A6C005E52CD14DF774662AAE6D16 +Ciphertext: C4E7793F6ECFC782B5821AF79BA7953166 +MAC: C985438284DECDFA3273991C5C71E407 +Test: Encrypt +# +Key: 1473AB0D3E80D92E42C0450A220BEB8A99DD84F6A2EEB7EA167A3F103F22F779 +IV: 0A3B32DBA3147793976FBA2755EA554A8A979337620AD757 +Header: CA4170F72E13 +Plaintext: D31053E30B7B23013FBC2E533D58249AA1 +Ciphertext: 47B0BF6825F7F4CF65CFDB58A39AC5D077 +MAC: A438C8256A2995D0122DF2B349950F8D +Test: Encrypt +# +Key: 35AB9B821270711C13F27E0C20AA722C80F767C57F4742A159174A38C96B88DE +IV: F28865493F4C3F71EFA7EFD3350CF072740CBAE06FB1C642 +Header: 95543DB2F5DA03 +Plaintext: 8F66783DF89B18BF87CC179FAE85314B3A +Ciphertext: B3EFA5F65646483728650361F5D6B2E3F8 +MAC: 6657A4EC0B4E2889786713B41209CC89 +Test: Encrypt +# +Key: 743BA2D25308EEA9E78ACF952DC6F35EC04B4E7AC648E56A6A0D471CE6444DF4 +IV: BD7A2139C0F0AB89395D399A3E657BF9D137CD2176AA0139 +Header: 0A996BE7274F8361 +Plaintext: B39C891147137C0E23822857879738E0B6 +Ciphertext: 0504265D8843697F8F4DA81747B1EEBE3A +MAC: D2D352FD1A6529DC7D1EF9C7AF4F98DC +Test: Encrypt +# +Key: 61DC7C149289A16B5C5E11A77129FAFC790BCB36D84A86B79ACB7CABE8FA5E38 +IV: F2D6737EDC1FA016FE09E350A1601AEB4C181AEB0D4338D3 +Header: 73E0E5D500EA6EFCB6 +Plaintext: 5104042CC4C15B0771408DCDD2C4058B1D +Ciphertext: 0AA4E12435F6D181540676412520E2E2AF +MAC: CF0230546FE6588CD1386DE966BB7DD8 +Test: Encrypt +# +Key: E2BBDBC2CC274F30FF059A8B57EC3CCD7FF2C52A5929E3AC293B7F341DC65D46 +IV: C872445B351EA334CD36F85CA70C67C9C40B78EECA6E7744 +Header: 26579E50F36F75B9471C +Plaintext: 080CBA2BE03E05F8276E687CCA7ADF1130 +Ciphertext: AF7C290829ACF9C6C38762837B37022AEC +MAC: FC849388B9B37278D740D5529BEE96C2 +Test: Encrypt +# +Key: D4B12A1C65722B9B03452E192FC9F1003D836F7B518007BE7017E3974A28DD14 +IV: 8B16BEB0E4E3A9B19CC957550DE0FEB2BC0672874DECB236 +Header: 73D48BCABFBC607830185E +Plaintext: 46845D922EDBCCFDDCBA683F984A1F83DE +Ciphertext: F6BEDC22E2119C72652CDCE90F66A6CF95 +MAC: B7C011CABCE8C87ACEB4B9AA56001BF1 +Test: Encrypt +# +Key: 112F47AF8045CF5B9B506637F515A9AA927EC8B42DD187113A20F8FBE57A5320 +IV: 0C897C547FE29CC3A4ACB71F24E5853AAA7678956988CCA3 +Header: E4E3AA7FEF354DEB7204798E +Plaintext: D10889C349F1B675F227B37A2B075711E5 +Ciphertext: F5598ACCBE5C08801CBA63151D1FFE6965 +MAC: 2DA54DC38920E4288AB4ACC308BE7C77 +Test: Encrypt +# +Key: B11515245220035F79FAD5D02EEB6053392ACAEB69C38CC0BE168E07DF034202 +IV: DFFE30705BF04DD61733213B58F24E752F2BD64CD09721BF +Header: 1330EF1D60467D0D5EE3B13B6F +Plaintext: B08F38C71F0CD4A32FBE0D5F5F593819C3 +Ciphertext: C779DDF01C63261A02245DBDF557E2EBD6 +MAC: 612201BC9179209659609722B42E5E68 +Test: Encrypt +# +Key: B3C478715FA704B8574616F6AEBDD90DEE761093A903CFB4853BA8D173B41013 +IV: 5C5278920B4926C7CD23493423940BD5662F02C4B56B09A8 +Header: 16D928D7B604158BEE3A86370A85 +Plaintext: D57FCA67B9A06449BE7C1B86E2D4EBDD32 +Ciphertext: 5A49B04D2D98A603EA088EDE7AAE085391 +MAC: 43000069E8121F992DCC4DE22E816F89 +Test: Encrypt +# +Key: A1366862A1FE17E6A8D9273BB74E6C9DB6F41BA6992F60242F8F48B6A548AFEC +IV: 40A801E6A9A88308C03F4EABE11728958B9ABD461EE9005F +Header: 3DDD372298A53F76C922A9349F35EB +Plaintext: F0F55B41CE0A030EA612B838760924C8EE +Ciphertext: 659B4D6122274FB6164320C4DA31B2744B +MAC: 515FCDFC34A3665142F27CB84BEAFC49 +Test: Encrypt +# +Key: D06FEB5025601D2B917D37C19F810C43F8A2D51D1CADC3B6D81F7BA0EAAE1C5B +IV: A8A46F14B338BDE481CF062317355AFD30CAB4306EA100E7 +Header: A39AE28344996FE749543951C973029D +Plaintext: 929C36BDE9FF83EE922488861462795A8D +Ciphertext: 9428F819AF5A6DEF2A190104F42F7B0214 +MAC: 818DC4DFDCCE90F5C0F8CA9600F46D0B +Test: Encrypt +# +Key: 3CA697D8E40B1BBEB50DBC3993F635EE726770C6B76BF12FC4331E372A493A2E +IV: 814CF04371371D39B0963EE58E79703BDFAAFC62A639BAA6 +Header: 70665E3E0F52EDFAC1A2B7444A8EA3D91CE7111EE1F50AC3EEC33EB13DFBDD88780974918C6A76F1C7BE66617142A8 +Plaintext: CBF9E4D4CC361A09A928F41D72B90A4D1D +Ciphertext: 675C822ADBDE079905DE0BA25B1847DFB1 +MAC: D23E39C82C0F3A4F4650D8ED173D1073 +Test: Encrypt +# +Key: 9FDCEAF65024DDB230AB47F8B9AD4A034C0150D3FEB556F57508EBFD2B738E71 +IV: 7595B76E38310600BFDE347D4C74BA6DEFD732439F45E908 +Header: C6756A5311C4ADE72966919C36F8E8E93A53598D02E0A6E44B36259E46328853764845342146C462D5C78B5B2219D3F27FEEF4A370F7706BCF2D8F2F9763DB5533 +Plaintext: 85F6D535B1333E5A1131B199981C8C3B5E +Ciphertext: 30A0647F4BB4007F985FF726C2B2BC601A +MAC: 9A6070ECD6311356A61A437012E91219 +Test: Encrypt +# +Key: ABD47BF4559AE28EADD10B2334A47D583A8EDF0D6BC93728A356B7EF0196C74C +IV: 59E0649E4136D726569196A055A38D8859B6C927D9296F39 +Header: 724EF2E11C3908B3803FD6E0772B75ECA1DD480550E48FD986E6E70AD59BDD4EE68A8D8394A1BF3ACF1BE118D1C7C4E9A6D9C64814DF5CE429BD4E7D6DBF0D80D0A098AC663CF111 +Plaintext: 73AEF5B48AF684598767A236D3512214D3 +Ciphertext: 7149237760988BBC000F2A8768EE23351B +MAC: CD10710B0E4B8C994D3606AB9B519A78 +Test: Encrypt +# +Key: 8F6A33945FBEF0BBF54FCF97E76D4B878B310A1C29A39DB3CFD50D7A4EC8B42E +IV: 29B7B56CD97DE9BC130103742BD64F97B010F247C8E4665E +Header: 53002C48A1E47A6D7713A1C635A70F95A346B4697EE3A902AD09D0E1C708CF74AA2229DDA39138BB56D7DBA12A291DCC25D1D3F1A7FCC32BC1B513644706DA5FF5DFDBBA1AF5135B19936099AC981FAAC0C7 +Plaintext: 9117A85443249B2D3F3BF97F7530B93155 +Ciphertext: 38B8DB590768A33721AB853395C252B0BD +MAC: 38D403CB2E1DAA484DA3384E0DF0F4BD +Test: Encrypt +# +Key: A656B044E4711C0D9DFC41D6DCF47BA7B74AE4289D40E64780857FB94B06CE12 +IV: 65DED004E93637980DEE252C0C459D487F46C75B355C9055 +Header: 3D5026BB91A5089DD9D731D611EBA77BF4EF4FC25D0F250009A85DC4F6865E58DA51DB0C7082762746FE0600ED125F6F57717ACCB47B699485EE5F14D74A03FFED727543DA97C20AF1A0D493DEE4D2DFFBAD +Plaintext: 15C9A60B6FB345DD5981A8053E1CDA133C +Ciphertext: 8374E92FA2A498B1D14D6442AED47F577C +MAC: AD8C5705E319EC14B49B691926071AE9 +Test: Encrypt +# +Key: D0142DE9923295FE700FDD6662FBCBDC794442C83BE8F15B516C2C41D60E81F0 +IV: 984562E1FE867EC9EE18A0DA934AF8E4CA3E6F9A309225A2 +Header: 57AE5193367E69DF83E5E528E874B5958D5769B2EB09DC58A31B0E2CA3E1DF7770BA509867500BA4F8F2F3FF01886FEDA37B79DB74057CCAB7ADC4DEE7A64DE1B7A1C62825A2B8E7B00ACE18529EB34538ACE7AC4E312CBCF1D415B4619220AAAEF4E4940F177E8016CF0976A8337495 +Plaintext: DF17DA6D0048BBC746C5D4AB976F00F3CC +Ciphertext: B846E865D90AEBE30179A5BDC12D26BEC8 +MAC: C1928A81D912E7D4BC6B2F41402D3400 +Test: Encrypt +# +Key: 839F2E165604CF2665CEBE2F256BAB8ADF7DE348DDF029BCB04B7F0E87907B86 +IV: 1123C084A62184AE0F1A2FEC236FD5DC5BA736C2E915D298 +Header: +Plaintext: A7DA47E9D5254CF9464047813D746491744B2FAB7C2B656C04B84E18AB5DC908C8F8CA46C3B639C53E28EF8A9CC736FC2AFDF9EDF75F91EC81E313C7BA417886C0 +Ciphertext: EDE5F6B1FB17222D7662203A230C3F2CADD1A8FC79B85E70589B39C1AECADDC3E8CF3749CD9102DCB115EB30B2FF3908BCDF202576CB2BBD172C4EB5C9B812F652 +MAC: D24193D25BA06B6D0F72D11E3B664B26 +Test: Encrypt +# +Key: 749DBA63D928995BDFFF4BCA7D8F4578CA7B1D855B5B3B7ED217D10A7C80FD4E +IV: EDDFECBA807D3A764BF1171E7EC9F32282A1733B9C8D2AD5 +Header: BD +Plaintext: 0B02A68FFA15CBD4BBBA7A7A992547F0E3FE26124A50F16809A63BF85653D79897899DB321F879676B063EB0D7E3CEA3013E11FE3595380FD2C5F2AEE60DFC8BDE +Ciphertext: 5F71BD45D611A9B986E33BCA44B490133439E40709103F2776554EB4AFDA4CC5C2BA0C8A2930B5617C068EB8A4301DD24E695269E68F9908990584FB2601D33301 +MAC: 13E973794B48F32525219D541719C4B0 +Test: Encrypt +# +Key: B1DE343E0C95B5F7CC6EBA6BDF101686710C145698DF1E57CB2FCE46B75B53B4 +IV: 12220787A891C00E18B53E886BCAD02895B297DFAE53BC60 +Header: 1052 +Plaintext: 4C4A686A6C411033E565FA2E8D2D09F21E189F8C13E7AD991C7536030E150F7F0995A821C318816A63B6FCF100797985CBEBAB0CBBE1EBE6E235894D4B4A0FE57A +Ciphertext: CB29D39FAF72ADE6D86D69BD97778BBCAFA5F4046E24D707CD6E04C9030DE8F2AAE83691ED2F07849EC451D2BA43FD859FD86570777711086872B432AA4422E829 +MAC: E804F3CB02FB17336EF9CA0AAFA850FA +Test: Encrypt +# +Key: 00AECDE2D5EB5C87DAD07B552F369D165F0CD0A4137466AA2E2564B7CE4FA8DF +IV: 12282869EF9D05A406BFA4F71BED7160B2739ECCFE00A6E1 +Header: 52FA7A +Plaintext: 02835D6C9C4F4910EED08B71E552835CECD28E2C8B4745D7F03D912D95DBAC35DD2B1AD40D5A2D338B0A3A7C42C252FD51AD0231564944DD31DF3D9FCDC2F88B03 +Ciphertext: AF301D4F52F30E3CAEA046238719E1D8DDD6E93603920B85DC23A215AD33EA5C43DDCD09F249813C3A39CA897B7ECBB5FFB80ACD1FBAED53C42C6B1841DF6EE69B +MAC: 41553D6B7F0A42B40625F15817153AE3 +Test: Encrypt +# +Key: FE2C88FDEB9071EAE9725BC57132477F77E31ECEA60CD4DFED241A2F34049095 +IV: 49E4FBAFFE04BA59974250752DEA56DD3ABDB84BDBA464E3 +Header: 3A7EC340 +Plaintext: C5AE4B0F2C370EC6BB5A9D782CD56D81CBDDDD8EABD6AA9D59488E685FC8FA2EE664DEF1CD403C197272ED00E86B66FDFA9A90DE5209A99B69CA6108787F8555AA +Ciphertext: B87CFFCEEB932F3EF63FB844C1D871B97086DEF182F636D4FB7C070CB3B51A63D1C1BA1AB5160F37DC14F5FE2E31C71387CD09ECC26CB9334CF6EA3F53CFCB50CF +MAC: 2FF7C498107A0B87245FFBE5B40D26B7 +Test: Encrypt +# +Key: 1973B399EAC0119960CB555BD1E4EC7B76D1D56C28A24E8FC258657E64D04CA1 +IV: EF115CD602E6D9E8C88B829F3F72A2C08ADABA6AE4E50B8D +Header: E689D00CEB +Plaintext: 31E052D3735B6A6FF8EFECD92E5C089E9BF0FCBE60766FF78386B338AB1D90E8A7E11B6726D9870BE87DEAF598C2C7D6B6FAA1E0F2AAE351731920D50C176127EE +Ciphertext: A82EAE31910CCD338E842CB76C063C2EDD4AB0D9EF9066C6EB01950FF200F29B11E4041391158A7EA07EACE61F2C23673FD8C3088AACCEE0BE11827B66AA00D6A5 +MAC: FC09A74011E68A72761841B61F3C1B6C +Test: Encrypt +# +Key: 191AC3ACA8CD79FE9C88AB361719AFDD5C0BBDC3AEFAC09C3577A10F8DA8A9A9 +IV: DE65D36BAA3FDE65E3BD80AF54BDBE157E3FE979956402D2 +Header: DB49A286A577 +Plaintext: E2B000361DB0DD9F3A62F0197B6B030D4C00EF1ADB13AC40D4062FC7936F0CDB61D0AD3BE71A596DE18A73F1A45A06DD93246FD3D688A5B1046FCC5C1AC34F295C +Ciphertext: 1A169CF2C1AB66621997958F87C39A6E9503232D52AB9793D79245BBD5A118C672F96AF14CC41900F0C8A29E41FE29F558E8323FFF072766AFA2DED265FA1614C3 +MAC: 6C2D0781598273CE52A200C106916513 +Test: Encrypt +# +Key: D678DC14252B1A44A1002D2A19F6E23F45375E6886E0EF1D206DB6D0D4FFF361 +IV: 82164A6D22AA8F5D01C7FC5097FA2997181FDBABFBD9E808 +Header: 6318A4EBAD7869 +Plaintext: 013DE2F62127EC471F50736021631550051BF60EEF8EABD32B09031EC1CCB45EBDEA8EABAC26DCAD1805CE74BBA56751FCE07ED63477DB2A57BE7BD3B325DBFF71 +Ciphertext: FBAFBAE73A3BF0A3EF6D5CED182E0561594FCCAEA46AE6DC34F44ADAB67CD3A393D0D1107C9A3C72F5F6861514812804D41B060ADC9E7B7455D4BA59713DDDAA4F +MAC: CABDA636A81F98C98F23B62B39974E7A +Test: Encrypt +# +Key: 47D30829BFD94FE19C4E7ED74F28A0182EA9D13C65042D7CDBA6AE2167836445 +IV: 9E156960E56D23B144D95D7607DB133876120087D40FC0FA +Header: 19C53EECEC751C24 +Plaintext: E732AAD4D8CBD766CEA435E346ACE3BE70DECBC8424926ECA3851B512C0E6E5ECD433FC32E9E0DB54B9BB53CA50B6B9F89E17017FD1D31BCA6F88D7FF3CD430E82 +Ciphertext: 3E466A2AB5A7071BB46E9FF058B6C523A3545ED12480E17A92783567C631596AE5B543125D8465580BC3999FA8DCD08AD89CF0A43DBD8C64AD0E732CB74A42C6EB +MAC: B0C772859405B1685BAB8A7298C228CA +Test: Encrypt +# +Key: 74B9B6684F7EC698943302A49E0F6C91911D8F98098113E97C3D9CB7EEAAFB10 +IV: 363D39C7A94D798E663738CA68B869B47CEB1001129D387A +Header: D7151F8D78F8017F98 +Plaintext: F584AA5F6F01E33D05E62BBB50802F22A31261F10EA185217AA91CC74894378FFCC8E05516F72BAEE5D1992F02E797CF75685BD92059B956F2FCF3B855569239E1 +Ciphertext: 821F801439D7FB7F8D71A4D141496401D4B6ED8655F6A6AE9871E4316A7736443EC1B374677A73DDC0A6F67E07C0E2229A47A326DACFF1A7FE4F2293D3776CD81B +MAC: 70DA0C6A4097A3D6D47B9FC67DF83DF2 +Test: Encrypt +# +Key: 2BD323539558E2BC004E48E8C595AECA077F29309388D2AF804DEA68068FA539 +IV: 77F065994A0225AAF64E284800A624983FF7D1FCA7C0AE90 +Header: 56660A6B7EDBA2EF7A88 +Plaintext: 1BE6E7E7ADF33C3389C1AAE0599BB48E10BF501D6DBA4DA2DE0C242962897DFF5B8091C1589132D4E70C5C50A0FA880C817860255DA55A03BCA43D6C7ACA13F1CA +Ciphertext: CB2970BB45D7FACE7AAA3C72C7F43356177E059F792A40B50708A1D5EC249761B1408175FF3632A152FC06A0A877D97DE2E8E1B0172E74936E9238D23BAA8480D1 +MAC: 1311DE2275B6415BD336D707F3B5EBE4 +Test: Encrypt +# +Key: 0895084274A1347AAD34202D4048D76F697BB552DB804DA927BFF83CAE4FC648 +IV: AAE44E11E52CBA3BC69D6EC170DC8072A220AB144444B3C1 +Header: 105268E8D242F8ABB03BC7 +Plaintext: A2179D985E24A7E26ACA71BA255ABD9202026A28E48FCC138EA00FFCB206F43695276F03F30D4AE3CF23AA1EE3C623CD0B581D40ADB693DAD24DDE16F9BEFFBD8F +Ciphertext: D7A7F4DF80598476BE35F56C4AF33D122A215DBB33E81A0C5D9DB8F867AACD97D77DC9C509A0568665833B394D6143890795D923CBBBDC81CAC3F0934A84A5142B +MAC: 7C28E606FD956CD9974829B918F44665 +Test: Encrypt +# +Key: 237E8A18DEA87794BDADE614441A8BB4B3317B33AF5916E7EA7CE6612F346786 +IV: 0734C97107F605C617BEDC5A2E6946EDDC7C8D2AE20539E3 +Header: EBF9A8D94548FAAA5035407F +Plaintext: 29E7605105CA755DD134CB813E41C434C8203FEA30BF74626EA4C6B1E31BF41EA1A325B1B7443CF571DBEF67975DE4E188FBB9FB623A56C0A2A04CB27EF6DEDF7E +Ciphertext: 7E9371E928B248A3860404C32C452BAF88FEC870F38E58C20F819EE2CCFED4C7D3819952CB467FCD031D6B35613946C493C390407E3F7AA38BF0D2C4B050893993 +MAC: D88E08CC1871817EEC2DEE40EC84A351 +Test: Encrypt +# +Key: 9148494C57A4686186185235B45119D7744A2FD481AF927EC938EF12109BFA98 +IV: D43B7BC322465B5A097AD2C06F593169F8EA5EA6F486C816 +Header: 058EBE7AFE467993E2DC234EF4 +Plaintext: B9F29DDD178110F51E0071BA0D49EE04E454D18027BC3C1EB6EABBAED3937E456433B6F165201C6C54C1FBE88689967EBFE9976DB18D753A15D21FAE224279B3CB +Ciphertext: 83FDE4108AAC668C3DB85B7A54C30DA964C3CCDC058EA78E59E9717E96CE79FE37A21369CAA657151043048F361CBBBFB9C786945F94DC322E470C016D997D3A4A +MAC: 8CD7765D4C2DA85590FFB08027FAD514 +Test: Encrypt +# +Key: 77ECBBED3F1BBAAC1B0D167D6D1687C2BEBF3204AE98DCAD3E0EC061FD6DE07E +IV: 63E861177A2D55C61C49E3349E14EF9523764D4E87FC59E3 +Header: 175ADB92AC59878A7F098377FB63 +Plaintext: D9273828D06358CD3FD2DDD143A0C796486624499D12E4152B2EC187DB2580226813B9DC614942E9FB908F00EF0F9F03E3E4C05505E5AA37B2D54A88FE034F078C +Ciphertext: ECF2090EE2BDA6DB68636373D46B128F9690C7F4DAF0B83A5FE3FD950F1D599C35FD7C0745D8262D294624A62455E9B8F0DA34463028D49FA1EA9B6F8F3E56E69D +MAC: DC05B1F16AE49DC084F4F1D5007EAEC2 +Test: Encrypt +# +Key: BC3A434FDB9ECD0792DC2FD3FBE2675B75F71C1BF9ABAC0C56853C392292456F +IV: DE62BD11C288D098442EB15203DE4B3231CD2BD8440BB652 +Header: F35338EDF145B990ADB9B3A72098C2 +Plaintext: 5C124611A3ED739E0429CD94833C93D027D89CA2F8BBC80B568B65869AA934B479FBEFBF2922963A5247F7661F26581A13E8C0E32016E04A18A3FFF40CCBFECE03 +Ciphertext: 4C9D16BC2D0A27593C097761620BC3D07A201C89A7AB5AF21E057105228655C7115949CAEE1CD3A0879DDFF03550024B6CA362CB1552641624619BEEB3684D10D8 +MAC: FAB5B3286AE790CA6F9B59F7D5F5C4F5 +Test: Encrypt +# +Key: DA30C5C95EAE0055DC8F374AE9A12004E486D1DC42E246506724BE740C3925D5 +IV: 3061C76E0211138ABC4B79EF01C5D66B026F90734D7A41E4 +Header: 445197555FD24CB7A1A8AA3BE465D700 +Plaintext: FBA1A1C1CAC2E359B3A2F8068A0670FD998EE8A03BEF18BED019813D128CC889854E576C5910977093EDDCFDDC4BADB8FC7FCCA2A2776BDD1850FB8F282EA9FF28 +Ciphertext: E009F662FD8724BA00101B65EFB9A7EB4732E27D239489480AECD2AD90CDD36F1E5E2CF6CAF9E560C36BF990015FB59457893ED46C5BE2DE7C5DAC678D5D5A9A19 +MAC: DB7D945C4D7372AFFB75958AE125034F +Test: Encrypt +# +Key: 8A31E9FF7CB1DF56B54EDBE269170DDC1528E66F2870C72E1001076362C2F054 +IV: A7025F9662D791FE4365086A91F23B19BDF6F27E274DCA83 +Header: 1F548162C50209B1CB702211D6D9D0654427937239E3952D1BD33CB54AD1A755B9BB2F88566DC0E1881295 +Plaintext: 0F181C7D0E3FA417074ABCDDBFB91295E826E161DBE550BD6170A1F905DF27471B1C494495AC5A22DED08C539E6774EFD474246F7811ADED02F7A226B6B571EF53 +Ciphertext: E54DAE26D2A83C10FF78932AF0FAC5DEE19DECB29C056231575443FA34BFA1C1AEEAA05350FCB864D790E492B77996B381E5F0B679A8B776366FB5CA291DF69256 +MAC: DD6B61811E56EC8FC8DCDBD46BA7AF3A +Test: Encrypt +# +Key: D57E8C459365EB20D8CB0BF60EA72B7C26927766D42D44988F801DD09168AEF6 +IV: 8B8E4AF2FE0D9714D187A77AD669BF310D93FBAB96B9B3DA +Header: 91EFF59FCB2B1A4666D6F9891E6934A46D1E276FE5CFCA042517FFFF5EA5F2DCE7B4EF37DCFCDF7A2CF0E72A1A358EEC5B1382424415E6AC +Plaintext: 535F35B5BA7183FC0F8A7238325709B6D975950924CE402A672C722722395A1F2F6AA5584A23E661EFB440C0D8AA73B007A2D34E097649C78CBD2866B656D057B5 +Ciphertext: 4087CC6A32941836A53BF40C339F50083EDA03F9CB63242E21214B392F466593DCD5014BCCB0DC4A0722D7B877CAEA1DEC6D23C65BB6D7E8031D8EC71175C4703C +MAC: 80B5ACD1E310332D68CF18B729256693 +Test: Encrypt +# +Key: E6B19721BC1F4D0072930729B40DD9B9D68431DC855A64EF036CE8E54D7C9E28 +IV: BF18BA079A22C9C3651431A34ADCBA55D8648A5E7282A105 +Header: F5C254A50979CED3F2E145C5AE92AB8148958363C334058A7DE2BC4AE31CC3298E5A9A760B798422C90C5A75A3B8F3B2165742EE96DAA0D7DAF286AC8C32F9 +Plaintext: C833EE8ADF1541FE30FDDC23A5212453764F92774762082AE6C289280ACA4378D48E9222392D15326DF6464CA6877A701CB8FB7CFA6B22EEEE3E1E229B9E588A63 +Ciphertext: 0B4EABE43F039376BB569999E93619A71DF3FCC2D7F369A5ECF78C9DC9A0E8D91FF8B2435C4BC0FAF89CEDF28A7842269485A0070BF835DB119190D9E24DD15699 +MAC: 14B2EA18F9C885E3026F88E19C0DA860 +Test: Encrypt +# +Key: 56D03B8D520072663259F673B3EC846EC35754E4A8F6FC0602C6644174F97AF5 +IV: 0CE0F9B8F096CE8B1062D13B585BE3D0DAF18E9073DB5B7B +Header: 24D23C18D66D3DF73ECC300DD5ED525AF371CFB831A70F05EFFA688E6D0F54C0F23BFF001F693BB5F657B4E8768F5CF34AB6B68B2FA30061D3A188AD33039DA2C1F61787FE158282253B342FD7 +Plaintext: A781D31605E07F3BB1417CFF556E624A0BC32B02BEFC0E54883D419C4C6ECDF3436EABF75A0DD7ECCACCFF9CD00418B3709284D9FB8D4CB3795A597B97562EA13A +Ciphertext: 06F5A888DB68051827EBF51AF96890DEAC85B2A5CACD74C1F3B5EBE604F131F83A2BF1B4F8DED2B3BCC0F055169B130D608D6AF870489B9E99D89601D000A97FFF +MAC: 4C46E4DDB3599360FB44E1F71AD06462 +Test: Encrypt +# +Key: 80D4AEDE8CBCEBB8EB58462DAA61CA62F160241D773FCB0157BBFF8535A47B30 +IV: 5C0878D2BB5EF29D657D12E7D450B5EAA4D0D558649DCC41 +Header: BEAFA85F09F3406DF344DE2F14ADE9A457C4A752C6088CB22E727656A26EC03D0DCB65DA3F397F685CA3111A6A32B638B3C939D0F86CA73778343F7A264DB3B332E8D24F685FF349A2A897FA782E269E84A3C2DAFC41A546C64D33F18577E1 +Plaintext: BF8B713FB3ABD66E8F5A8B95BEC3F489353E75B5BA668991BB3A60C3C38227CAB29155131166D349EB8558F223ECB2A1C88FAD8D40A7C1679E681A30A8E2627017 +Ciphertext: D4DAA398DFC529E8ED1F5F7A3D237F5D24396319DEC5E5125AF9B6B58641DFFB68E04E73BA61E8F4280A67CDE0721C2D8EF2C96ACDE04A69D985C11D2F5F9FF4AE +MAC: 70A526B2648D06473CCFE16C9021D9E2 +Test: Encrypt +# +Key: D01C1E1D220A3BF55F6FD87C6FC801ECF57E310E2C1DCD9EC69B367B79F603C4 +IV: 1815B80075566A5DA0653AC2B254AADF5300E93AB499EA98 +Header: 586A6A9949AF593A170EF0CD5E5DB357E5DB30234B0BB0014AC93284E2AD7D852589837C5CAC0627B3179F78BF410558566CF396B8A20F53188632CDC002961A5815D68A5CBC43FC54D6E62E9436A6BD69766E0E415F36CD4F9A12376F83A023A2FC344ED71BEFCACE0AEFC831D60906AB8ACCA286B20D +Plaintext: 6C3C5D21A1B4009942B8B861187DFC8AAA2A1DE1ECA1ECA077D8F6731B63C357602502A2E41808A864F3BB94B1C09E87D272C997EE6317AEA4F47727995DDC65C4 +Ciphertext: C594FA73FCFE43C7F7F15F96B55FEA35EF889F8B4A52A0AF44765B388584055FB50941E88F44AADA8736E509ED83DCA7E1D3B9B5C7A53FA036B56A5B6FA0E1D549 +MAC: 686C88DEA22C6348D29E10FB85A67D83 +Test: Encrypt +# +Key: 9FA2494067E53561BF0BE3B9F804ED0A9026B6BAB77C1061C5D7C1BE86622E83 +IV: C7FE8CBE7AC57149080A28282EFCB20E46E41BFCDD3A859A +Header: 16CDACDAD16294E844720D9C0ED73A7CAC1C3EEAFD0CAFF1880A92BFBE6AC2E0587EC6479986FB89295D5E45C25B7A1B51101C7BF56FD7FC218E7C9C2DF86557FD96DB51D1A5463124B9CA4289D1FEE2984B86130FA3B1D15D4B1B129FCDD772947A7242A4EEBB3B7663FF1C3D09498E5B2373C6B8C57E7F42187D12 +Plaintext: 40522F8E3B65F76CCD9E333C57F00E3714EDA82E6065059AA7B83A1EEC50067657D5C83FCD216E77C0661A4C57634955A17676BC736A691902DE987E641371269F +Ciphertext: 67DF60DCC861A716D0DC4B46B048CC8D0CA6DE188C90E00F6FAAEEB31F231ED07A866CDB5DDACE095CFBCCFE7B0837BFD0F442C46749A52CC45B9BBD9EC9484DA1 +MAC: 6E656691478EA8487FAAA1505696F64D +Test: Encrypt +# +Key: E0026C043C4A154A7E171EF73C034167081EE592BDEBD644D0601411BD3DD0A5 +IV: 3913EF76616670209400CFE21C04736DF676EBD9F4010958 +Header: +Plaintext: 42B292B628FA1781BBB4BF2802E15BCD06C4FC7560D44161D08058BEF80D4A552F79DC1D2E9EB8B92E0D7187EE5D161176DD915AE1E27069841CACE1387DDE04BDEB3144A9DAE89FB2780A978F7B2AB1B1BDDC0DFF28478CC95AF36229 +Ciphertext: 2E538F7E37C7A5CB4E43F9BB559D136AD9326BA92E03D3C67D649A58D8892A6BC11E18761D13F9519AA66CDD59B3AF3342A2ACE9D09D8B0F24DEF884AB7FF12951CAE621E8494E0CC35DFDB57A4AA60841AF1E6DC31188E6177BFC0854 +MAC: 0CD77F0986E2AAF2294330F437FEACA4 +Test: Encrypt +# +Key: 9228CC9DC4A6DDE644DA2084B1FCCF53DAF5AB6D620D036421C2FA96FB0168CD +IV: E319071B998AC34B6BC222D75D341D6D810935E0C79846EA +Header: 41 +Plaintext: 8AEED698741DCD921ACD06489C71B48C15552EB0DA9BB2F492435CFC8FD9533E85621ACB19EF7BA8FA82B917B96D24B9AC9A20719788390E83EB3DAD316CAE3C52B454AB380A8EAFADC18794690AE55EBA93F466716C58171B158C863D +Ciphertext: 94F71C3ABEAC724A80C1F2FC84B3594FFFA31D9A2F42CF591521C3B9410FD2247E36FBA0304FABC17A3F83D8C9A8C0939D50562C0724DF96C4078D5285DFC4B8CDBC41F8914864FCE140FD79AB8311AEDC1FE7941A8A4205C1E350B45F +MAC: F7B0F93385D03594406C083DF26F4DD0 +Test: Encrypt +# +Key: F3AB104F51F0E13DB926869A734B13F3AF1FB40E1A6AFF3BB2EBF75963F87CC5 +IV: C568CC8D8B725490353129F586FD854E18C90119CF2A43F7 +Header: 72C4 +Plaintext: 8C60B150379BD5CA70E555DE0668E6365BC2D2699E6BCAFAC57C571C0C221039C15D755519D5AA08B813DE787683BA442546406989702D440C6CC15685F0012BF298BA13D08CAC405812325523CC64202D2E2FE10DBCD1AF196A2A2800 +Ciphertext: 830B194965D13D89569DC85B776F9FA2CDD86B61A5892D429D98C27ACD9EE7E04C5851D1A849BE13B0BA2F5C99EDF57D369D27FC51635A7FAAB346FBD57FD652CB3A9DCEE39EEC73925D9912C9FFFC529CA9C78CA8650CD1461E8506B6 +MAC: 605C764F8201988FDF9974211189BEBC +Test: Encrypt +# +Key: 2EF26E91200671910DF7A2C2BDEF292105F93759EAD93956A4A16B79B9EFCD02 +IV: DC19B2BC59F4CBCAE398992DF96003B85CD918691FC1BF42 +Header: DB1F6B +Plaintext: 5FB822560B93E83D3AB29DBE88B0C63CC66696152EEECD30C2D9F1131B265F14A5D0C5F8A251C2661D9682040E21DFF38BCF4FCB0EEBD7002B064E930285B8283FB130DE1B8DB3E0F2B1E2A7C355BF84CA2F5B6818D8D7025E43919F0F +Ciphertext: A022735EDA41E3903139C2B278C451ECD933262246E7F78193422F390B543744BAEF9C3DBCFA08DC3744D4CC42F9BE7DC8D6AE21E73DDAD089CE64D892FE1A6141A361D6466AAC20D6F5F65362DA22642518B151F3E76902B21378221F +MAC: 484A4FA2659B8A8E3C4D7522448617C6 +Test: Encrypt +# +Key: 316F92436BBFDFEECA46119275BC2D812B65D92E85B7BC0A2D13F2E4F27A058A +IV: FFBE75A47CD6FECAF69AA2268E029BFDF45B77CFCC472F86 +Header: 471BE6D4 +Plaintext: 27475972F0F6CA70CEEEE917E23AF7B6922455AA74B7731DC7C4D2D55C42C974256AFC8FA87FC097A972D73A42EFF3BEF7D6F455EBB253415CCCE285BC0D5B161AFD31D533BE200362C937D07E3B184A5DDC6D06857FB8BD8CDE087BA0 +Ciphertext: 3C16E2E0EC206EDC1EFCD483DC6730B20322BA253A6BAC976A8010263F7B7162D7FF906A23E2970B46327EB2318BFFCC560EF673A12D2AF1EBECCBBE76464093AC0412B70CE87A809F78A45FCFD13D6A0230B5A49A5B54E3FDAE2FA29B +MAC: 60BA358A85D5124BFB6566FAFC136622 +Test: Encrypt +# +Key: 98F7AD688E361DE695118E820C0BCA98776E697BB506AB2AC7AFB11DB13F37A7 +IV: E4C35D436DBBF175CDA8821549CB12B81559E3467C86E00D +Header: 93F912651D +Plaintext: 214FCF81898B9AD5071209EFDF421D95926F11CE454350B25ACECE1CFD0337D92D1FE48F211E9A20B09ADCBC1D64BAFE777675F87ACA0AC19A9938BCB088EF1ABD8D1EA8B21AFA455CD21BB56A107A2168F064889956482B2E4C3A2E6B +Ciphertext: E7061DE52B6F0780FD54D14208C6863AD56AC231FE617C95F77E2EF59F37422609B6F7DE5D4EEFB5E3DEF83DAB8C5C652F473C4BF12C7678AF8132111EBE6FF13087F94DCE1297D814A1B20E0D6FFE1CA56202F362095657CD35E89B76 +MAC: 7380A9249EC74DCC08609C8D14784366 +Test: Encrypt +# +Key: FE046289D5814EA2F6B0B10BB718C19F7B3D576C4C6BAB6C88DDE94E91BD94A2 +IV: 969C822456E845ACB3AE0CA25C482180A9C24CACEE0D43F4 +Header: FBD9CD8337DC +Plaintext: AAB8560ECB4B0E3075655D82D8E19E0D60DF1AF3B3458C302677CF8F753587770AA17BC2F5DF8BDDC884AAECEFA840EE67352D2C97C2D8E39CD29E4BCCF8B5649E0BE9B92B006C3F235889494CE721DBF3B8774FBD55136EBE0F932E27 +Ciphertext: D82AF2320C28A490CAA762C464920C118EE8E4B2A7CDD25EA6B1B8FC76A33386C6CCD5311DB3A41940B4DE7268229D0798679121CD895ECEFBF3AE43B252E535BD32166ACC3BFBC8EAE2CE950784746B80F37957764E76A4418D3F364A +MAC: 5170A66DB6CBED036B493AC48E8105FF +Test: Encrypt +# +Key: 334D29FBF280F152509C1CBE0B9E48224713AAC83CD30EB7EF795519895AA256 +IV: 61B18DDF55FB77888D8A02F60FD903C65A1DA16A9D682A94 +Header: E6FBDD998A79B1 +Plaintext: 10C9B36F99860C00E53FB0FA646143DE73501113D85AE5131DE1EEC01EA83AB62CE6E4C5D805028B9FCECAF842875391D45839CCDBA118870DA720699BD316B114D970579EE6B243051AB36C4FF01DB736B87B0737C5D8205CCA861938 +Ciphertext: 5B9161D1721DA67006BE58E9CC1A307E1CB3332505D1AE0087068CEF8E4327C149C9B36D4D7FF674BA4C62A723271863287E4E28DA8DF8E2DF4DFD45B99D2DE27D30C4DA6512EC71E92F7817325B5C8919B3D76BE0A575BF22265DD1C2 +MAC: D7BD9304E73588B35E3A71988A3CC52C +Test: Encrypt +# +Key: 7BDF2AF64C0F51D07EB2C830C9BBE4DAF3CFEFCA19536A892DDB31920207365F +IV: 39F85C4E28FF02A8B6C0743701FE746781FF98F754123DE6 +Header: 2A974BA575E73C49 +Plaintext: CDD592BC720C9EB6323097E4CB9DF1ABD2AAADE0AA2F985D7C1C68AB57279E5EA9884DD659021F2476A1C58A143EA15518388C43A540688AC1F8002765D0AC27BF46FCCE1C7441D6CC4695CEB90D1B20078D9A3574AFFCF8E34308A27F +Ciphertext: 09E8CD7BF29C1038A4377B7E98446DABF147D9BA5F2CE78773B3283DF1303B76C49B943D89F0DDD1004DE2EBCBA2724DC201002DADABABEBF5A2C424D5624AA21D6CF0473184AB413C11D541D96E4D873C23D8E77A54856E274724FB44 +MAC: 5ACB54A9A3F03D7252079E2DA34203D4 +Test: Encrypt +# +Key: F6714E340288C48D85E1A3B7A540F1AC9CD689278E4AC9ADF272DA4744586370 +IV: 3DFBCD97958460851D77808BE3CEE6B442461D21C5C1EC35 +Header: BA12E73C6A512385B1 +Plaintext: 2BED02ADE05E4892A702E561D74876A7134EF1F85E7E972D7D2065C098A0BDADE8183401B455B5E85103D9766144E744D9709807EB2437B6B3D56A524E981DB00F7392A4FB3CF389EAD80746A66458EE4C0F7A323F706EB496F72A98E7 +Ciphertext: DD7CF70EFFA0A5FE9A4D3437B84C7B7404D4928B92B93FBA8E4DC1A37F4664B247E35C2D183DCDBCB2C737338D4A7B3FF602024F10CECBC87D2C6FA1EE9D835144BADA535A6B4EA03DBDC1FDB0E1FE09EC2695FA281CCBA8ED3134981F +MAC: 7D5FF854D53A96DEA884C485007E6409 +Test: Encrypt +# +Key: 891F3CADD5B3A04F8F3EEE48CAE793B3AEDC7F18AE943771F6034509DF3021A4 +IV: 0114132DF0D4BA98BA347D8324FAFF4CF9B3A5E2D74D0EE6 +Header: 8CBD0FE6AA76E54C4B0F +Plaintext: 3BF0AD5D9305709B58D0A9173E9EA517C6C32CB9F37261405BA9ECCF232D981055F36F59CFAC8A6B1AD83C7DAD3CE3A4F6EA91982A3B9FB07C246A5BDDD4CFC8778D06BA9475DE244BB07F173318F598FA36821A3CABEBD396C8AF131D +Ciphertext: 0E8F6A1A66CD028EE19100A940CE239F7C7ED94649346ACC0B6019B2740F6D537595C2F750C869C3BEF07B8C2A3EF9E390C385FAC2F88568651A17C60FB5C635C6CAFD670DA23D00EBDE502F34C8C30AD3E5A98E7930781E952072865A +MAC: 0223985B3E59DCB268181DCB5FFB15A8 +Test: Encrypt +# +Key: CC222B53CA8A8172C6AAFA7E7D005BCBBF4AB4C93C42CF6DC62C2AE79C66AB87 +IV: E88893751CA7FB538C2541DBA9B7968CF1666C977DA2AB22 +Header: B157BDD4A92B1C9DB7831C +Plaintext: 824FC4BAAC224B2B914B70A8AE3562293EDABC95BB16B6C6AFB516842D22342DB2E62F192AE9B85F6BF89C32B5AD9A30EE36E78671A2A75EED7372F08890F335F266782C88D11B724FD915E51B673AAEED9CC53FFB1B84DF276B9CCF55 +Ciphertext: 70922F4341284A5BCFB4179D809CB73721C9338E2C5B67663502B78671C953E9D7B5ACAE51C97B50C2B13764AEB9865D8DB5A665DDBE80CB0DF3690C7B2D8070DBC75A0A7299F4E60962163FA0BBF58DE09785C7C6419FE6E518C8B35C +MAC: 79AACA0E3124D53EEB37547F4CA20D91 +Test: Encrypt +# +Key: E9B1A7D3C8B51BAB759597A3B2DAE8388E44B3C5F33FE572783D053AD093BA99 +IV: 597F644E4B9CCF9AF3AA0B39B45CAD00C5F28830AF83007D +Header: FBE497309C552CE7411839A6 +Plaintext: EAB8DB7F3A3CBB198D379D17FBFD1D47A2B0B67CA0E60B12B0FE841A4C3ADB61CC2455A9B46412B8A41B3E5F5878DFBE2D5403D7B8D6E9A6AA32A41C0C97690751695913C52EB5D1DD093357F48F2F2149F617DBD7F783123AF1FDCFC5 +Ciphertext: EF92FE80AA53B74F38F89DA7843B44DC69E853831ED6D2236CA8027D1B0534CBB42A5BB0D9D16B1A56825927D704D07C4B9C8A53D5318D25AA7FF3C38CAEA8BBBEFBC65105B4DFD17BC5E7739C72B87443162C4826A70F1823DA9B2F24 +MAC: 0413B2E76A47937201CC51A00E72D854 +Test: Encrypt +# +Key: DEEA45B26D0644DA3F675B783D5112C65EDCB68D2AE839159FB4792C3D54ED17 +IV: 18ED4BCF45EF1883DE6981F83945E2231A81A3160CC95EA0 +Header: C7B00114C1305D0292D3CF4AAE +Plaintext: 3C8F6C8FA1287642F4C294F9127F6838C06D1EB1AA64177273342196335CD91F1288987BE9C1AE9A37FEDCB51C25EF6CDC1C2558EA7C1A07EC74CBD5F8672BCA3FF09EBA33B57098BB1977A31B872AFCFD85E67909611F3D6661A048C8 +Ciphertext: 4E8ED31A453D8BC8E7E877B0D8C825B62D67BDF521E16B2F96DC49AF4F2C60E06D305227D6867E4E05765529F0A7265B267B843907186D20F659ABD12AB957F11E2152CC9183A022E099A070C43BF99D9F40DAA07FCC94626B7E8036B8 +MAC: 3CC0734F18F04CE7B5FA4F356C8C8B10 +Test: Encrypt +# +Key: 2650547097E1AC1CDAB5041DBCE1934321A595BCF2D5D7643E0FD1322F8E238D +IV: 69A3C8405BFB5144C45F3087F6E7700D133741F8066709C5 +Header: C88A43B96B2C07A0854F3B91126E +Plaintext: 40B0513D226D1F5DB0C10235655AA7E919B432531CBB0256C202E9F2FBD1259195585321E7C747F1D48E466B9C58D574E6E5B8E4AF8BE3BDDDAF48A209C52AC2583A73F12E6F0DBB964B7191D2F425B17BA2115F137D25BEA3A7F6CED0 +Ciphertext: E2DCD64158782EC0379BCB319903D4720A6A3301182202D640638C03A68282A00B63C1109496D1293C733EEA1C5B95AB2D75C0B6ADE569B2380C86B1C27AECFCEEAFC0B0C38AFF6973070FBC212FA6DDCCC435E8662657787D49FD2FBF +MAC: FDFC09BDF115ED381A7D03CE3FB47BFB +Test: Encrypt +# +Key: 6A530959883D1856353101F5D93B0255A128B85EDCBB079F9414D9EE6548A2F1 +IV: B29D3D1812590DE2653D55B4458695CA31C21DA389C5FEA7 +Header: 578605802EB6FBEAB330AB300D057E +Plaintext: 51A0E1878954C9AE225E8715A0616817D77B244C91B593C2C679E1A769804206D9503C948071B2B256E9E684DD175F0256B06A42E1B0E4AB35B1B320DB927011932E3A8AACB89CBC624F6594BE3DB120012FA5F25D2CF8A79D58F27E55 +Ciphertext: 0CE6CF078EE4461A57BD83BB781D134A28CFB068B1B7EB7FFD25979324940675A6FB0C422F1DED843197616D7D18905884016672FBB2832986248159ACD602AB34EF6A8293F7A74CCF96072BE3EAD699F758A663F152F6BED263FA49B0 +MAC: 9DB9B5B0757FD3F729822AB78316275B +Test: Encrypt +# +Key: A26AF182E363EA5EAB16BE9B2B98E646CCDC40F308FBBB97527A1BD947525DEB +IV: 9CEA07675AE156BA95826B537BC9D76279E4CF159472A926 +Header: AC654D02CE1BA0F58B012B5CED740875 +Plaintext: F43DD50AFE309278B950CA0D46068512976E4D8DAEF1190A318067DED23AF0AD1E2A486C7D508E8F3704F7197EDCD11F9E321D13695D564A05DDE3B0C6C1475FB068865EE52523B75C4978C6D8D5AF975A5C14F0D641CF03A235F3A384 +Ciphertext: 4F7762AFA45057DFD28759C558EFF1FA45734261A30A9A11BAEB56D37DF7500B86616835AE6357E63DD1175203D6E44FAE84983FB9778B1BB2DDB8741F9DF79E95B6D7F5A81D2063AD6791DA4C89291166EA85B5BD53AA7FC0F37A1D58 +MAC: 48B6C85C90FDC0BAFAB30D8A2B71BFD3 +Test: Encrypt +# +Key: 5C717226C6D3D864B3F2D3A6795AA63766BC5A2C111313C3B267F01EDD6A00C9 +IV: 5ABB1BF9843BD7B757C3AB73D2C8FA6A3678D59A51B82F2E +Header: 99849FF61C56377A0E415DE663C7215B354F8DF59729B0B2C4F2D9EB021302FF474A2A9641 +Plaintext: EBA4AD368A80AFD340ACD8639862219D785467B2F328D9921CED9A596F225836020BC86E9DC683B8DC3B015D7994CD4DBC7B2785D2E4AB00050487DCBFFB9F6819A320E7571527D0348CC736E43183F01676A43C8BCFF8493769362A8E +Ciphertext: 2D32C3126438C1BAC1FEF294D8B6A741C7C4E4A5710DE54F16FF566F6BF8959D554B1D0FA0E184FF8CC611C930B9C712903DC7C5C8C069193871E58F4CA1B6D45839D7A80718052DC9C3E5FCA0A28C2C6171DD6309911D541E5014856C +MAC: 8E5F428531D5C9A6A1DC82CDBA0BB86A +Test: Encrypt +# +Key: FC3906E510D65ECB3B4832B2BE2CEE912225931C98A9692F4C85322F81C0EB8D +IV: 078A883F848F8A96FA27C2F6C862E9562F1248470CF33F91 +Header: E57C18C3C90EEBD9B3C79022ADCF100E5CFF6BE5FA0DED24B0A6BE3EA5CE6E2572D2F22A33CFF0D94C774B974F894E705BD03C +Plaintext: C55D283438847BDAB00A3F8B857E8AF30BBB846A11891351E557824E0A748C89076F2E9FE421A6C602B9E4EB7EEED52E8DA04B8CDFCD457C3C8924B1E9995FF2900A222E587200436B6B4F890853F29B83E0531243D1C2BC06209E3817 +Ciphertext: 1B28827D779E8816BA1ED4D3B239A84F809425AD4C2AAB6C7C2AE6857B9A14F4501926A293E8D55960B4D1D24FBBA78F043CC827A3FED4E76DE4096B4CF7B630781421FF4966D7EC29D6D07B497858CFDE365D140BCDCADC36AE58AFEC +MAC: 72C3F1055FB60BBADE2D11AE87198AB0 +Test: Encrypt +# +Key: 3BD180781BABC21A030774769E264A3B51D384B177D893A1E061E4BCA2826FE7 +IV: 1D6C6F6C01FECB1491A0EBBF909BC62CDDC272C44A021E5A +Header: 71BDEAEF8218098E0820B185F1330CD8C5644F3CA76A0B020C7999C1F96933FF688FC20409723AEE9D948A3541592FF8A501CFA4DB37312F9104AFACD6 +Plaintext: 14FBD148199283E11251C12AF27A27238B03440D1B9FD772E52C32DC4DBCD659F6BBC9D6589D6B994DAEADA32F0A1B28EDBD60B5C169DF1EB7B4CB85BA5446026261C02A71705A12099A0137951C335E9DBAAC985953774C8BEA0C111B +Ciphertext: 8D50EE418799AEFD521199B75BD066ADBAD5C08273AA6267337CB239CB9A84AE35A717BB72634D4EDE9E899DAF202BA05A920100DCC9E3DFC3D9E8B8FBB94799F0C86DDB40F04D5E90595A999B687EAA655045445E8632BD08E537C635 +MAC: F76C14DCF9D25854C6DCE00FDF7C221C +Test: Encrypt +# +Key: 1B12825E4DD8EC630A9B0CA85AED55A5AF731C1986663EF0AD79B1B8B8D89759 +IV: 7D4FCA8760EEDAB4FE78844B3C46F28DD6254C6BFB643808 +Header: 38D8724534D36AE6E13957A728A8840463C09F9B07ECA271D664A967397AD3A42637CB2E39AC9FEB6EEF006E06E8AF2DA4C54CED88AD0866477EF5E87EB72B76AADCEFBB95CA4FED9F86327135F6B500B0B2C74DF5E4 +Plaintext: 02F87101198182551F20275E7349A590521A896F12355177345B234E76161FBAFD09986E4F465E6487E432E80D090CD3768972D73C872B03E202EB85BEA6C15F65D8FA8D0558BF185A10B66642689EAD114BBA6D6F560A7AAAFA6B4179 +Ciphertext: 29E9B7759362D6DF8FE7BF3964105CB682A2FB98C9315EDC2A99E126AB5ED5CADD340276FB9CEE52CD8EC5CAD890A39480A6B8382D749F5A07C96D24F300CD51D30A592FF929B4B63EA99DC8C5CA994D3E30F8CBA5751097E42A2203F3 +MAC: 15A401BE57F385BFF4CF57248B6B2869 +Test: Encrypt +# +Key: B2ADD37C869E2256AC0F02A3A74829FA9BF1B482D36BB8351284CEBBCFCF940C +IV: 2D4AEC04B0224B818242E7383EA3CF954D7612ABE5CE8AAC +Header: 880F35B4F38B6F5D4B0AAB7F6532A1001232E576AC553FD14B22699304502B5F709AFC58D1BB5E441C442BDB209D7BF9A87C9C18968A239A2E86A139E5CD45AB13DEC8C5BF5693C96D6149A6155F48EA923C5B59739FA45743C2698BEAA4C05FA3102ED46E +Plaintext: D496DB4EE2A3B5C71FF0D2CD88CDC94BC200E0595B42F9B0B6D5483FEDD6B8E1F19C998733750C26937A01E980E9DCDA8CF174EEF00375FA3A2DDDA2FBA85104E1DC429BADD387904F2EA4334E34E0701A47C45EC892B464BF77D1DBE4 +Ciphertext: 09EEA66348E5C79A467D81F092B9328C38CB77B792C8CC958E134B13E1DC1E6E18451E06271E23344953C40F3ADCC01CF0534B843EFED5ABC1A877CA44301027F622D46289015173AC9CAD97AAAA224D3CF21E10216EC94706C6E1C15B +MAC: DBA111448F0AC0E094996C82097C419F +Test: Encrypt +# +Key: F80A72FD8AB62908C5DA9F88038EE284A92771AB143A44136614D549F93A2A62 +IV: B249423344D043315B9BCF730F75CE2B3AEB7C550570D039 +Header: DACD74CB899062BE39C8ABA95E8A3C6289346B76422C81457922C3368A5CA0CEF0441964B537FD62BCF3E34FE62F6BB4E964EDD86297121EFED7562F8D8C22BFEDB30A7ACB0B706EAA3850DCDA4E79C73C306345B0805A339BE80B416B97E67F9B1CA963E53A05068F15498F6472B516B78A56F923 +Plaintext: BF858F08297DDA7464F0526ED49B0ED1D610BECE46D7A1462E8F746F9D22757ED96CE52C37E19BD248F647A053BBEE235FBB71A36EA2A4C6B26D41C916D07545651D2A5674FFA1C304F2176D0DE330CF365237DC3199936F01D584C3D0 +Ciphertext: 359FA953D34118D7FEA040BBAE87405E8E8658C45A9847020213997B6757148321A50DE7F9DA0A636B9DB9EFA909D4639356023525FD8E797A5AE1893505BB3C632E0C20DAAE57D1E24B9CE42909CDF54FDAD71D3C1C15DB563ED6EF6F +MAC: 4DB869B2A430F9CE6CF3996E18E8ED3A +Test: Encrypt +# +Key: CC2330D70497FF58BEB97C1A86F9CF38A2E09953216A96AA2CAF355655A4B092 +IV: 96BD5AB2C35EE904BC11E9B31DBCD25C0E44CD81628545B7 +Header: +Plaintext: 22AF9028D06CC585EC7580A7515827404F15912CE698971B1093A37C5FF0211FF7A86179354547E081CD3276BAE4324340ADB57187513668A5C9FF508D3C1C4AC9ECE127AD264DE397CC3821C78B001AA5C2A48669863635350654E36F +Ciphertext: EA2016F7B2E746286B52817299A77C16C9D6951A51DC819806BD8CE221A1F7B7674A346F0E18E6C14657EF779A304BC62CE7A5BFA7E252F06B76C78355C82CC501D5CCE9279ADDDA61A3F6662A74E51F398E8C5A8A92F04E3A65F43FF6 +MAC: 296D7F6ACD8A9B718A7E8F5ED3FFEFB0 +Test: Encrypt +# +Key: C6DB7AF7BAB5ECB737DCD64F7372AA1505EF2C1AD2A997F419EA50AD98733C59 +IV: A52D5B3C17FFA0CC14B6C524A9FE2EEBEDE559B778FD5121 +Header: 04 +Plaintext: CFCB8C47D36C6ADD9DFEA3E32E3C70AF74F6954B71BA8102186715A2B5BAFAD1D74D29F62AA331CBC69E4D022E75174F1BB4AA58E7A363D441F433683B87C153D07614132C53665A5A08D160C54CD72407C81518E273B057FB489EE2C9 +Ciphertext: 1690983AA57E627632B52A9F3FB97D93DD3C2F105414667A523AED5A96E86EC27EE0D90927FFD7BB7D2AC83FF4218B6B86752C40782CF989E6C30089A5B073E51F72E3690D88437E83B217AB69DA578B10A49DADF5902E6941240174AF +MAC: DDF8B8F7E85E58FC9196F08A873BBCF3 +Test: Encrypt +# +Key: C59E2AED9AE0DA6F3600BE50322F67C52EF126FC794ABEA289F7EFB68908F5F3 +IV: 48A59EBD9B542FCE950FBE3CCAA23BCC595998290F060245 +Header: 6C14 +Plaintext: CC0DD5EC95466A80872AA5B1B153C41B22B8C4988F993FFF291BDD1248158CE15C5073CE96BEE47CF8D98A7633F820748B9D1F5848A59DBCF62E1115D211393D006CB522229684094E7E1840082D423DCC131338ACAE1DC33A2299CA85 +Ciphertext: 2ABFFBB2DF38079A4F743BAB7F2DDB2528E109DE2C91F46A61D639F27A47B21E1D0C3D0F2F9EC8B5A60295C4244BD9AEFFF905E242DFB26298F74D6A59376DD29FD0DD7B8AAB3DA1D016146BADAB180286A144C28DEC932E599527BAE8 +MAC: B3949C4FC4A01758274BAEB91555BDA1 +Test: Encrypt +# +Key: 05F7EFBC90DFE641AAACD2802342AB3498D981829289D0F07381F985BA0EA418 +IV: 8176A81839B7F7DDCE41CEF307E45F81E903458F229C0D45 +Header: F8F331 +Plaintext: A209CE5739802809A50A7672793D287FD99F320D74C960AB3359B6F20F72EEFF7023C83485B992E590651F04428EBDF8C95B34208B210E2750BA43EEB51EDE6C1BBC721A149AF379F4BCE5CAF12BAFDA7DCB9F55ADBF7899E38BE20D59 +Ciphertext: 023AAFD87869AA261AA8CD4A8CCC03EBE9C49FEFE1B8429AF0D23091CED6529168EDAD324C1F43E3DA0C2CCF598E1ECD8403C9B8F75855B4A7FFCCACCE8DB77CE61EE0C00EA2669A0F042C46F8468C6665F53B3B5135BB831F2E6E80D7 +MAC: BA0283600ECE4E1846FBAEAE0D226ABF +Test: Encrypt +# +Key: 2542BA8DDB7C6AA5B7A6502C298B39827481D5150F82B6E0EC0C5D1EA7A9C85C +IV: 5DB68579240C2F29EFE5F760DF87A6EAE19B6E9383495CFD +Header: BE4C2B7E +Plaintext: 4DF8D127797FFB776C54409D087AD433F82674E47815AFE151365CB5594850821ABB34F8B17EB478C022D12BCFABCF98DC60DA9EA92C1940BB9ACF0B1DD8E8B885638037CA769B203019976E0E379CAB8BA56F8DBE56CD3ACCBE740990 +Ciphertext: 5994E57F7097B8ECE8AC86CAF71E824C025B4FEDC45768998F227426934E9EAA7EAD7B5EC777BE61D72B97345AB2D28201D2C6E942623A5F65F18B97820406B2EE14B8A95D55F217A227B0474EA0496612BB99932ECECEA2C4A34B6AD9 +MAC: 4C178A6671AF803EEAD3D4F66101E796 +Test: Encrypt +# +Key: 040DBB7A778D73E481E7284B78A90FC5E55B5FE95BB890B54BBA7C025DF1E844 +IV: AE27A10611259FB6E030728E37E7EEF053A5F58C2451C200 +Header: 7A1AA6D009 +Plaintext: 909E977F150241F27D3F1C6601E5C68BA66DB510B4358C592A07EB52AD51F9A9F8F503F8E00E085282BCFD7E900B17C1392B9D74C1D66D67DBEC1C7DCADF772CD48C934461A692C481B472606374F5852C704BC5E932340BCE72377A2A +Ciphertext: CFEB1002665097AE8B6BD174638D105DCEA966A8109F9EC9F3147D6A965A41658D18E0FA84A0C33D95965F88A5413076D68AB6AF3B81D4A61A94BE0A157C27BFB2AE79B8EE69739CBD8492D0E16158ADE2C69F3F95E9D70B146AE0B360 +MAC: 42B1ABC835E0448BAD6E22959FD8301D +Test: Encrypt +# +Key: B3E95CBE329B80AB3DAF9F816A28525DB4540480E9052035624FAB9741648989 +IV: A657DD3C54C890D87E477E48418CD14244FEC86CFAE413E0 +Header: E60EBE27F5EF +Plaintext: 03447AB5D7B49D8B4367FABF06EE70BD6BD83F9B81EBBF3C85A2739940E3160458FB2B99DA7BA84B745B2438C968880AA3690D49AD9F7BE1222BDC9D86B9D65A410BB247A71E9039454C098D6A26DE6C7A2C84D963C5C4E6E54C02FB97 +Ciphertext: C191FC7EAD2885CC33439C556631B5899F03F6B481E9F0F3EB3522BCB86F24439986A069B9AC1790437EE340F85DC40C5324038618D2A930513EB23DB70E2E2EC7C1448A148F5645ECC301CA54C3939C725550B52B905E4D717B73EE84 +MAC: E5E048F4E008D7FA5126B39404A27A5E +Test: Encrypt +# +Key: AA830447CE2743CE3BFEB456BB3D6F12E5C8CE897A9841968F2856DEA4314F7B +IV: 130EEA1F8DD7DB6B7247FFAD92688D94A1EE7B28F8F9CC87 +Header: F75EBE01073E03 +Plaintext: C38E7531476AE5B950279059FC2BD693611571BB16888BAC66FC5D65CF604F53D163384372D13031498A1F731972D794589CA1DC717369B554C5AD6FA7E1603D4FC12ADB8A8C9F15AA8B9EAC966C037A509F88B54ECF6C5FDAF90A6766 +Ciphertext: BEF40F37D9316BFD61381CA0FFE5101465A82E913CC53B4B6A936B3D8AD987E9F9FFB1AA22E59F4167011C03F5346B4E517D5DE5D9E2E17EF882DBE5BBAE74032C89A44640372B2C4DF915020A29281398A868A1C98B2AAAA16F68CBD2 +MAC: 906976A62F0A157F4CB4333FF4ED8C76 +Test: Encrypt +# +Key: D2B790C87619C0B71D351CBCB394A54907BCF7E4F3C5EC911A80E27FA504ABCA +IV: 18CDA53A1CB60E76D7D115054069899FABB286ED0C1CD6E9 +Header: 741B99CDFFB8763D +Plaintext: 9817C82DAA41BF9C732CFC20730F7DEC174E467E8B713B7C85A0F9C0649F0BD09E294C4CB5BB63F65E0D77FF4F22834EEC69DD8A4017AF1A98D21D646F4CAF9553CCAA2B63DCCCEFA5CA8E1F6DC64330A9B351F55562FE93603E1CC737 +Ciphertext: B98D4F5793E577D14BA40389700F518E6D292BA83E8F0CF18E481EB07413009998ACB596DCBE6E4D76926965C521EE689976E7CFA24B5AFF270854E014607AA9874DDA6DA0591B438B4353C9EEBF84FF78B4282E00A3134CE716E64C5B +MAC: 1A33D53D0E0D92347F138362670D59B4 +Test: Encrypt +# +Key: 7E9C272A992C28CFBFE7F150326EB3D1C8EEA2E7FAABB0458D5DA79C5D793F7B +IV: 20A4E12F13F3F3541CAE8A1503DBE1EB04589B284027EC02 +Header: D92A0EDE0531D80F25 +Plaintext: 7FC278034CE93101D8F6890656408810EF74784A9A21FF8BB7D88255B128957451AC42276428E89A9D073581FE48ECAFC4B06FB01C4B4D69CCBB8D935BD9C2C16ECD036B90D46AB6F2CCBCA6D402B3060872C0D7DA049415411CD04328 +Ciphertext: 1C964DABE9476F55771CA45C415E8ED546999F989938E1E608F055A26008B23C7666BA548C5B032394AEEC3D0A8FCE1F9B50D86A9F77082AE35C1126AFDED5EE759BE446FCD503BC0D90E9AE85A3DCD7F2B176871814F4C387057B2F82 +MAC: C9387DA1AD72D1AB95126C8F5CB4BDEA +Test: Encrypt +# +Key: 8E00CCD7C3774F8892B914FDAAA39004106D437CF89FF0399E53227F83F4D5A0 +IV: 5293DBF314DD632A85DF96A884283216AD269D8277B2CF63 +Header: F0BA7195F460B69CD1B5 +Plaintext: F7E98942BC64BDD949F62A13A93845A490FD01DC8D8F4AFEADD525BA3570DB9C37EE38DC741EDAF244511563EB930D3CF195D388B9D9E888F2E68092A5DAA83FEFAE54DC94D0C19A2BB5239C1998CB165A21494065EF67044DEF7F8E98 +Ciphertext: A432CEB279A287B69F896795440CE0F66FD9B1D486BF803C7D231CF6E2D6F7653FA5FFE37DAA8107850D2ACE5319A914927019C069E5E4B062ABE4384A9CDA6DE8E27A694B7BFC3B030B7C1BC82487D1831B9674ECE15F582BFEC48640 +MAC: 932A34C0809AB66545B2D759CD295607 +Test: Encrypt +# +Key: 78B94EBBA88FA1644E96227C28EA5BCE6B7A762BC4127346FB2B6114B6349660 +IV: 992982FFCD02AAEFAB492525512BAAD89DA5EA7B02639D52 +Header: 87678916C4349B0CFCF264 +Plaintext: B4E78A27ACE43DD242C7F688B30518B0A3039D3C90E4A7EA7BFD261424BD8DF98B47B84CBCFA6DA4DF9D319E55E75E7C64B309B19D75F404891297E9887F5CC19D26815C796BDFDB947839537B6EEB7D874250D8C3C3C835261AA72F11 +Ciphertext: DA02E4A9A78C0B5E9041894158ADADA845BFF616DF0B7FB3D48199573854D56722462768F03DCE716845F56797E3645BDEFBFE3875E3DD7EEC04CDB40FA8F0FABE89C1BE26168F2045622DCAB372162E644A3F8BBDA1E0944444D53CA0 +MAC: 21F9D5D60084C8D37F5E7CB4A5BF1A03 +Test: Encrypt +# +Key: 87B399AE7E632A637BC814E3BA7C72CF4B4AB11D5605D5168E6A88D0F601F5B6 +IV: C563BD626B7A26DB26B40AC55C29FDAC0E7C7150C9ECCF3E +Header: 00417B22F3E7B33844F08A81 +Plaintext: CA76978CB1364323A913B711216118F73F66746D87AB1A5C774F6825DE26789705051C06507F771B34EB1E7EA7284B6531F03E5FC77EBDB1F938E72658021B79AF3D23E5795CE34A4D66EAB76B250F52B241413F41BB756CCDB5F8AF92 +Ciphertext: F912CDACE2E52BB833E1A5F8D05B6B6523C4FB0C24815E20213B5395296AEE2152E5C5F1CC6A09A5EC879FE01439183A64BBABD953EE51DD6E270ABCA864898C2BA60CD15940EE8F395AE9B434494C37FD7496E4F22F21ADD41D47E82E +MAC: 6F840EEAFE65DA98F910E39418F6F053 +Test: Encrypt +# +Key: FF39B6817258314DF6E50DCF33178B8E157E48CE81E0854C85E1D35BF39D45E9 +IV: D347E612430E77CDC4B591B1CACB24829977D3A2E19243C3 +Header: D77454257D1528B9282D338A95 +Plaintext: CAA970AD7DFDF049929BA0DF7948E015EB7B283B364ADC9991788981D12498C33DA52F26B17136B23DFA2F8DE3050D834E316BEB4E1B370A36A8547D7D4B1DFBD388A8E99D30F77D1C1DE7DE394EF3F94499C82924BD81154B88F6EB5F +Ciphertext: 3EE4EAAC2E614312F82B7F7CE70D61D0C8841AA311E9B71C0E72B445F75EF4B3CA1A32B4BE048A4B34F579FE48E746933628263D06EF3AC5462CC5E5DDDDA80345AB837FC03B6451A52F10BC7AE0E656C4963311784E4AA2A54A39C6C3 +MAC: 070A174BB34C93C5CCE2290E8CF893A2 +Test: Encrypt +# +Key: 88CF35D7DA2BF9B6E8027FA078F16E1F4C33A6A3F14DB5F2D9757B1A7A2AE2EF +IV: 595532B6D6BDC314DDC42466CF265E3203537AD1D877C8F4 +Header: 9860DCED38DDC040B1B4F431BFA1 +Plaintext: 9B8C07F004DCE2BBAF7F501C922F0DC14C7ACF3415E9326C8CE9B7DFBF2C8F86906054D1709A38F3B2BD6AA90268EDED0E268F62EEB5F384AC6E13E7AB2838B8ACFFF3E04BACB7294E2578356C2002170AA05C847C262C7AA599D4C0F9 +Ciphertext: BED9CE1FDBAC5141D3572173CAE5C5EABD85E01077866C300E3D09F33FC6F1057194544102E9F4BADD077A571D39CA75B69A450EBB24984E57DA8CD5F62C160CF70F7DF75ED5B7D267DE90EEC65731DF495EB704872DCC33807CAE2E67 +MAC: CA69A6341565D403CDCA981A74107E91 +Test: Encrypt +# +Key: E90733A80AFA38A754380A7CC76CC3DAF523853CAF8EB8F0327582A780C953D9 +IV: 4AC6DAAC35F0DCA0288BD2A982A907D2ED9B92CFC285AF98 +Header: 357CD40261EF1C3C7D1685396F9EB9 +Plaintext: 2BAF7D65B67CD0D18A162917120B7DE5CCC354177DBEBA9B848D0A23DBC1A5036DE8D2CFF82D243E2D585761D1B3C8A4B8D32690069EE9E7BDDD50A175B351DB5C07B6FC936DB0C270132C3AB6071A1E62DB8AAD06045A8D7AD06E6182 +Ciphertext: 528EFFF6CC29098AFB4900EB988F034D577FE3E4DCB40BF41B4F4EF896E11130D5AA63246809556AC66B706246ADFF132BD1F99B805979F77AB08386EB26107E75A584C3BBAD7A539025B81281331B5993C7B0B1492567514D627E9F48 +MAC: 08FF46BEE980196580BB71EDCDB34BAF +Test: Encrypt +# +Key: A24E6BBE2A0CD058655F6CA99E85DE6FA6A2BB288EBCF43E63C176D382E1199C +IV: AEDD791C55027F87C55120BFED1C1F9B60BABC43E42C762F +Header: 7EF9482AE832206F8CBCB5FC95E5D601 +Plaintext: 7B0AEA488171DD1B133CE4A7DD5DD00318E20762A311D8B73208996CECDDEB8FD60FA333B544020010715F375A60FB696773044EBBA16AA724361D86140502063BCE3D5EBD2EE7B39C454BC87BE453CF7FB554C71063060C4E88F2088B +Ciphertext: 245BEDBA15D90BA61DFD0516002CC42AAAD7535D039B471727A4E1A660AA6F9C1B38268548CF190B52EFCF9104A78ED670A8160DDAA658E0E2B5C98DF338B4E8144FC6EE000BD26A9EA665CFE805FB2B42B9E00085B3A6CEB87F866CEC +MAC: 47D632874317433AF4350B8C198B2BD4 +Test: Encrypt +# +Key: BDD1CF57C7BE0F955806B76A5DABA7C8ECD0CB5B9EBA3FA28F3DB8B9026ADAD4 +IV: 705F6715EE917E89943C7E6E367B38C22D5E90F229F611E9 +Header: 93269A6155C112B88993F7CFE8B06CACF8E51C6850D3E8655695368B1B4588C6D7F87EE66DE15CCA0CE837 +Plaintext: E4D406A027440BB458E1A412F48BFADC917FFC19260CF340CBF2CA3847F6D1E60E4F8AECC6067A9932C8D0927A709BD42A225844358F5BDA0852656BBEDDAA25DED5A13115A99A9B6EDDDFA8BDAB9BAA37F3DEF2E501FB7F93B35CA194 +Ciphertext: 5E99F557650CAD4A3596BB7BF9FAD00C470CCCA463E1EA8D3E8F44D4F3DB505C1D67C4294D47E3F67B3FEC4A035DCD3ABB3FA42AAAC68A4E60C4322F55EBBF5F797C2FACC282B54403356A17110FE47B7DAD0988989C2A192B5190DE45 +MAC: 4711E9333F278FE374AE1F70B44D5C42 +Test: Encrypt +# +Key: 9B3CFF33B1BBB30A7B365F2DB69E94475B0739B490D13CE909A9F6E8CDD30D71 +IV: 1D3A84DF8466C62CD97642D96843D042CE47DB4B1DCC41CD +Header: 93C62454B086EC46EEC4D639B821D7DF719918A1605D8B4B78B5EB030181F2CF9E51178636EA24419E2C6387D553FED549A85DFCAAAB414275B83180BD4A62502E80B246A4 +Plaintext: 3D3E5EDCE06D3CEDCDB336145B6C39FE6DACD56D5DA591C62ECF6CE803FCD84A5CFB6BF1D8CAF836B535693FEE380AD32B5BB660FED778A77D8E0470BB4A3833668D60E6B70C6AB42CBCA2E7A59B2F4FEC00AB886F145F5E691DB804EA +Ciphertext: 6AC2DA4CC8078868F7582F1CFFFFEF2697D372DFD2130753572C16CA9C26A56F0333B32E93102A02FA6041719A7E60AE4C83FD52230643FDCFECF2E3D474D59C6162FD2FFB5615741DACB737853D66DEC447A14C3FA8317C8BC24184B8 +MAC: 9F1AB9D3599D66F5C6295D3039AAF86E +Test: Encrypt +# +Key: B52C8828DFC311550EB5C52906078E14223A1E5F7488C6E5DF575A542DF673E0 +IV: B1652DDD53752762A9A7EFE05E3E1F702BF50F5D1F21009D +Header: 5909F5B272D6C06D34CBE5081E3328BABF37CCFC030886869B1034F65FF55309CEDFC6C21B5486375B8E12731E2886A4E9B6D02D8C15920F6083273DDE2C5D274B1DA62630FC5A1A127FB03845111DC02EA911 +Plaintext: F622C77F6FFF77FC41E871067BD27C37A732A9C81FB163F1EF02C3C7482E136291CC57810AB583BC249ADED4463E313FAAA7EA9D79F348081E0C499DB579D206F9214A7AA328BD4496F86D2CDC996E01B06FAF9EAC2617B850D4622FEC +Ciphertext: 1D6859A9D3C94273C824AA2CB755E7B4228148B476A8AED6301284D43064413D95DA5C003D0A8602DDA5163C2C4A36DF9B9A6B75C6A5951249DA33E5164D50F0B76D086DCDDE71D0E7DDFB246F83824E0A704A90222B13ED63D0D0F478 +MAC: 300D7E5D49CE1B6C2CBA598B0089548F +Test: Encrypt +# +Key: 4109EF9AE3C5659558580C96EB3F79122E6FC15A2B5A0ED2672474B63CE02605 +IV: E37C90CF9EDFF8DC467578ACC2810ACE56214E67BDDC4DA5 +Header: 96EA23BAAA06A3E07C344C7499092130FF1BFFEE88FC95AB3DC51DED4E8FBDAFCAC71E9C83A99CF25BEC79EF5504EB99E9B0CF8704E0FA41F4A111F243D50A237E52389491BF08314D0B2CF5222D9B500D479B64CD05F5A80B114F80428E554A60 +Plaintext: DB5C4AA654265141A26F80848B210760083D0936CF275B7C1ABEC663D24269521B4FD0ACC3C64E041643E2B044D59B04BA55C75D69F97962E58D9A07B333BDAEC960CB138ED7EF01EA6599BB1AC34A12C26C51F680523F25C53DEE2384 +Ciphertext: BB943DF3A4BBF1D9F0D5691D83152AFC65122228A48AAC149766967DDB34149DB061868FB91A7C21C2A6539AEF20B99373C8139C8ACE7F174F24CE0E4FF54AB9F4EE8E64AB7452895D8CB07FEE76C81ED1B7E92A079490881804E278C5 +MAC: 6112437910F81ECA1F03016E35080467 +Test: Encrypt +# +Key: FE5A602A0CB53340248373292B4E14E69478A92657D6DE749F88E0C19DFC85DC +IV: 32E41FB05F63DED5F0C763E5EA28C5130061BA6773287FB8 +Header: 66373BB4877F63B95C4E76E2001794B98D44150540BDE97E2FC11D13C3B443E5398D7402E48E2EAC10A1F75DD00295E7A97A55D7F7DE14BF6ED62CEAE1C5550765BC3568B1A6584A419C18E92A44CB61B67A97CD5798FD09CE2F4AF972214402A483AA0FE964DBD2B9 +Plaintext: 490027A9D0114B3C879540182DD10A4C667C2D4554FCF875583DF4F52B0420C754F41C6B7DDE504E707B3421C49BBFC0C15E425A791344A3C0F9FB79988E4B6DB5260E11C86A55649EFC4065832E5DCB9EB347BC21B87A4EB362A22188 +Ciphertext: 973F524CC9AA663056743CFE90AC83B577C60EDD1769034E26347BF8D353E7CCE5195D836917F5C254E8AEA096F29C04659FF468BBC8DB10019A56768A1B3F2A7546E1BB7ADB61937635876D737AEB10F3ECECE4B21FC4876ACD72A024 +MAC: 022418B7A90182F1BC64BEC869EE8488 +Test: Encrypt +# +Key: E08C77E7746BFA1D70A9D73F5326F5884D3189C65AAABE4C7A185576DC85AED2 +IV: 82C48D5B2CCDD2F3CA123D2A4391A6CC46B052E24E659CB8 +Header: 4E17A0D35DA67461556BAF51E33AE853BFC14B7AD92199C6EDA1AEF7239EE7DB03CB855D9EA0C869C681E2324D672D3DEE1823880133E100CEB986F4DAD3D4F0926C36C8FCF1D5EBC05175E785D2B868B89999A8F8982AFEE8B29E2F4DFA8250887F7ED3AA5551F6C6A7375FC540981E1881AB00BE +Plaintext: 498AE48EE3056125453308A83DF6D2A47B24FFEF350365CC13C12184AF92326334A7B6685CA6CA53613687DED85460EAF68789B559D92227F6D9C05D28EEFAF2DE24735EC6C6BD67F4049744F184F6B1C583359C666FD08BFD6E174E1F +Ciphertext: 90E8E37BC30624061F451D4EDA66B3F23C31E0319E14E7F6F19F400FADD6CC0AB065297B4E9664159D71C4B1B012D7BCEBE7C09B21DC60A6249105BAEA778221A479AD735E1BB3AFF8AC80C30952C8DE072B30A8CC463860BACC9E5D1C +MAC: 3BF89F9C4293C5391AC04DE3AE78A0BE +Test: Encrypt +# +Key: 0EEB766EAEE583C17B35E8389BF9AD8C51E8EF26C41BCE509C5C4C5A17D9E514 +IV: E629D5F6FC6EA30B91584331D2EBE3C9EA146E16241F73BD +Header: 65B8CE21B0BC6DB3E011FE05682548B85D4BDCCA088C8D6108F1F1FFD89ED63416DC3EE9FA82C64A6417C3DA8231D8FEF5E7C4AB1CEE668E1D4B931D7C2C72A289A4508F0ADD2BD232F05C20974095CC41074B0C75A70F06EE073421060B4887FC9BDF38F22301286A72E98B712B9C66781EA47C6865 +Plaintext: AF4DC7D7E47EC829CCDAA2AA6E7019BA37D0AD390069C92D5575FBAEAEB410E4C305305375F214E9A353231753D5D7CAADD17DFF00B0C777AC1F546C33A264E4357043086CCFEC20D1125795E5BD6B445983CADC75BF3F04A774ACB680 +Ciphertext: B117A87CF94EBA488654E22FABA2F17EB1D4D66139C5004992241055B44A9965E587DD25F98ED01964D85D6B4A35909A82F0EBB55621468838CEA276C9330E3A0E61DB5C043318DBDB3029223358AD2CFD74312EFFB13C44A221E1AB9E +MAC: 8886771180F37A79C160D0BC1022845C +Test: Encrypt +# +Key: AEB2563D0E703F94473CEF0C418D9101070C1200CB96DD583B2188F5F18F3748 +IV: 528BF79061DA111A01C3548D07D97B7E48753B1DFD08B2D5 +Header: 4AFE04D480BB2E43AFC384DA4A39D3A46CD10260DC9952A1E5FE3BA4F8ED3AE8995373A7379F6DEC07C58A9BBF16306A790D01E6282CA1F1A42F01B6AB3168CC2CAE7ECFAA27ABE0B5BB306579D872864B08592342036B84669D71D35DA62743269BA165135911BB0FC4429069D6BE764DCEE9E2263E3802B5F112 +Plaintext: 66A7C7D66F9F8D2D7BE023A58158A0FFCFFB7963C3F483D7C1A05E48F118E02CE73BF247BFDBD7730C55D1225C1888246228FCAF50B85C10D1A576351F268FEDDC4083AED07B3502DEE269D18C3092204BB2D772813656EEF777517D46 +Ciphertext: 4370B10422DAA21870B112CD5C7A91640DD1F6309099A0D64122FF4B4DC47FACEFE04E458378E0100841EEE0C34F6609A71C4BB22401B0F1C7043D6968D6062D3C4CFFE06B6BD3F2EFE4DCE1F1E7E9224E86D9089F584785FB44A06BA9 +MAC: F09A9A44BD2E300B0AE06BFBD5DA61CC +Test: Encrypt +# +Key: 9569B1922FBAE9FD015AFE800B3CE68E9BBD0947CF8725459697A03E014FD327 +IV: 271B77D8D9BFDD9FFEFF9E9B527161F6CB242D3221FD9F3B +Header: 040C71A69882128D1F841F3CB464F05836FC205FCFE8DC9A6DB7A333FED7369C1F09182879F3DBFD7EB7C0EC46AA2AFD091950D39FBAA282528D47686C1D2C7D524A634598046988D5E8ABC6ADD69C0F413A4A1B8C8931B0EC52E8B1135B57507BE9541C7E84F9BAB36188B157C25E6233C6D0EE705A63FC5EF7A86733F0 +Plaintext: 651B6103DD7C830B439D1D97396D902CD5BE9F3BF7061EEDC643AF941701B496D69FE02F7D2F4FE8EB50C52796750098695395581BE963ED55EEE784EB3BF7DAD730358C91743BC755FD04EABE49004924150F939C414C9994D185C79D +Ciphertext: 2D2B8F7AC16C83B462DC310DAE53A3C053289CE11CFEC8837925A66BEABE663DE004D941D1DB61F2B1DA534083C49CEFED1DF792FAD552AF19EA398EDEB17D9A1457BCC6E3DAB7B868F159EFF00B376E77C1CAE35DD52B4B69BCDA0A34 +MAC: 067F3B2013FB749160283006012BBEDD +Test: Encrypt +# +Key: C0503BA35B98E9248AEC09D456948A6976E38D9CEB6C4C0DCBFA5A0DF310FD56 +IV: 249F387698B9DB0109AD0A447F67750B7B5FB87603A4A3D5 +Header: +Plaintext: 39A3425CA9E94D5EEF8AB27C511317777E22505EE1B503CDC904FE31B010B0E6C72F64BC6DE337907D96D304320858CDA040249E7EA507AAD3AB640FB13EA0191CBC66847BF142AFB916FDA76FC8F4F3FA11B8F2F33C7D825195BD22D44E06FBE24652BA1AD5ED9A07CC48A2016239DA43D20BED1E95140E705B7F2954E6DF3C2127FB11E0E96A9795DC4AC70A86CF12D816FF3C723DBF2135CAC1 +Ciphertext: F3ABB21665A1025EB75143F934429DBB9D64A7EA4BDD3E0A34468A52DA64DE7A27E2327A5C0971DA8F47C1345DD2D5E77346A11726C18A06EFDA8B91A3DF959649AFDCA782B6FCE0426EE93789FDFB9E9AD366F8E491755B675F8226B8BA138D05CF61127AA2961ACC721A9D84B162F9A23A549DA0CF0BF57E9ACF7E5F19D99376E484E110B911BB439A0A443E6954E5F84BF5A2D092464E3A0A39 +MAC: F4323337D1511CEC52910C8AD5E6AB7F +Test: Encrypt +# +Key: 46B2657B0586744827160EA52626C57F15475D1550DF6567485F10A1C1500133 +IV: AD796A721ACA7D1F58C560675EFA0C9546323C4631C28261 +Header: 0F +Plaintext: 8EEF76ACD2987BBF7C8F5D1A1552B3D1A96C6220A708C6FF1839AB1CE9BD5CF589ED9317C04799CD1220729129EBD3EF134FBB3C9B449F042CC29B8B9D5A2473DABCF73655BF108DD32F93004F125C208D28C8F883A40C8829E4DBC6A9924BAE49318C59D12F4F2FB0DBD7A56A7367BDD67E8E05BD231F4B1166BCB0ED03F63586B32667A854EBE111A5273603A904787F06B4230BD7FEFB2CDFAA +Ciphertext: B92617554CDF7C95E0CF2C088A5907CF5516918441F7B6B2C99E7E121FC65067B2E408D465E37B5418145F21B1AB84D9F8A8F9705F3E2C0CA290A97CB026855EA58D326B78DC46BFDD2AEA3349C7E9D90A08EBB03F119C26FE6D6DAB1488FB5E2974438DD2841605ED8CD815754970F3B307F716BBEE30B0002522BAFE86E7E323B6CA2C75A077497E5FB3FAF37FC6C1D8BD46EF324F7DCA4FCAEA +MAC: E7ABF99C321E92545E75636D8C56C640 +Test: Encrypt +# +Key: 0ED79E09751FA15F86C9041BB48E3DDA4084E13256CB3F201D9BB5900149CB2B +IV: 7CBA5CCD3CE8CE5BF53F21F71175AA6F095862B260087F60 +Header: 9722 +Plaintext: 77249923BDE4EEB38F4B363CCFEF02ABCBE0FAB298B6EA57BB332CAD8A52A1BB1249C5008E68EAE6216370D1CEDCCBE63E13E10C787D87F531B0C79B0F35F5902166EA97BE8A26FCF0DDB7BF762C770C3346C14DEB8AC86F6A70F0E63D4BEC4049F9C2A19A283B775CD32386B5C8E499710E9FEFDBD5ACAE41BA4C269B4B9EDCEF41B658DC5262A1636CB430C4619D7C0688D408AAFEA17A807120 +Ciphertext: E82FAD3009AB5A93088D1C63D5CD720836CAC8FDE714CBD76D8C373FC13BD84203EEE612D4DA558F592C92510B1AE760BED4F7F081D5F3F1EC074265B86B3B23BC9AA69E01C3155EB5407CD73C059F7691D1F9F824BE29B448313D8250CAF39DDBE0A7B9D025031B9973B9EC4A568CD6E22C3E97DCF7F73BAFC92E305CAD9EC3671ECAE17453DCA416488788ACB81A5D084DE7CB6F88E7476263E4 +MAC: C6308DFF68707828DDEB1F7ED3FEA88C +Test: Encrypt +# +Key: CF6AD5221F79C69EA92C95C9AB592307F1B2315D5D1ED08EEA36533D5221E248 +IV: 445BD6854641A13F2C6798432E992FD24908B1E0079135B7 +Header: F53FAD +Plaintext: C2B3FBA520918FF30EECDD07BD6B411B07150841484BCF9507A21F804164ED0E5AFAD0B96D0F4893449AD534E0D87827B61D3B757ADB26B49A4A7A72FFFD21CB0A7005867CB7FE833AEF5F68E3810888E67EAA2D18B125186A850821D8C48325B73A5D3C618FAF44041D8BD17090CEE5EC388B417A4D4FD45606CB0DD27BA941A525EFD8C14650E4D4BA360E79B4D75FA9EADE16A879BBDC653701 +Ciphertext: 474EADB6538BA958315037E8A811C76449C7F1140D2B9C2975E3CAF7400611AE84E75D81BB99B51EF4FC8F9E5187C13F1977FAB2ACC7760443360E40F4C09FFDE5032C1CE9C105E98918EE784A95A5B36B10D3C2DC64CD73BF7529373CED00DFB76A5E3B2C652EF0E962B77740090F1FB71E3B5395BEBCBCD02AA82E885493EE438B2D67AE284B405BDF768E4A5BFB0D0982526FEE501E0FF693D2 +MAC: F72B3FC95B39C5841B6D8752CF006036 +Test: Encrypt +# +Key: C71E14FA0E52AE4B689B7AF4E8ED0F8CA6474D647ABCDAFF593A7F6FD95556CD +IV: 10FA7B6B688590F51CBE99FE1979306E57FCA3AF6F8FD8E1 +Header: 34CB56D1 +Plaintext: 8F5DB9DE91764FF728137868C646417C2871719849678AF3AA7C34E4197D3CEDF3283C56106B09103EEDE3224BA2308891D8736A74336960DF01740497FB6DBDD23A9B93AF0446A58D18D8FF889F9D183A9D81E6E9FBB5BDF7B1E24AB5D2E3369BA78A1607E932398D2D36FD4850A6DCF4AAF6ADDDFB92D2E1875A07644C8E8B3639AAF6220BEB81FB0397EE9DF7A35BB6912E1872F9FED4EC0CCD +Ciphertext: F0D822ECCCE7F90983C4AEA87392F3A6F849EDEE29C85464B74B3B0DF1873C87E3C260F7889309FCD3006210DC14971BFB4651CE3D86303D304B9D23B5F10879F2E0848A43F77C7BC31D97EF794E3B71E7C89C3F8607362F0562915A1DA450042AD358F0D73B4521DF677925A913B11F5F61D82B91FC5DCB260DB4CE51F07A663A423C53C6A804C39F18C8484547E25AA75AD727B7724CC5025895 +MAC: D9302E938DBE67148D423AC98E148C41 +Test: Encrypt +# +Key: 0507CE83B6C66117AC8091EC6FED81F757015CC526A6B9E1B8E509531EEC0420 +IV: 2D0F3FEB92AC4F4BC516878D3AA6C71E321205EE618608EC +Header: C5523229BE +Plaintext: 0630FBEEFA8D9957669314E3910FA4A2C144704090A7520900C321047FE0CDA86E233DF9AB56B2868111AB6BB740994BD4EA7EB84997D604656C0D772354954D7171E0CBBAA32023C6429ABDAA3198136E92914DBF2EDDE09506A6AB13F8FC5326C9EE9EFED5738605E655FBE0AF2755802B517D2AE1D6469A1A01CA219C80E5752584C1328892AA1511EB176391DBB6B02A6B622039A23DB86553 +Ciphertext: 67584A2CF5EE3DC9FA02B136A8564646077E0EA2494ABFBC6ACEB6494856A1DA985AF589882D64F8EF7B5A7815E7B2B5AD0B2E74B6DDA28FCE38B2E14B21DA9234A11AF94DF32F6BC50E2124320645D9C0A519DD1956756CFB429BBE41C16470F345AFB686B0B013661F39DEE180E7136266EB476C4051EAC84B8505F16D469F0F03EE2D59AB38021F5C892028EC52DA6AA953276F524112E34F0D +MAC: E091A1ABC2EE5C0B1B060948DACDCB91 +Test: Encrypt +# +Key: AEAB510013B72E5FFEBE5E04A36D0B0E29DE7C34A4073BA7472F9F4876A4C455 +IV: 50D2BBCBDD1AC0AC68D55AC810DBDA5C93054B987F45AA90 +Header: 02E825259823 +Plaintext: 42C92E8E48E6A33012536BBEB31500EFF8C90D8741524BBF52E9940AE4FC334D1A131A88DA4A7D8B4D6E6B60C15A99622D8E5A960794D48EB87549D07E9EB620F054225B8A71E8D6EFF07A04BDFBCCAD1BFB40A7ED31E85CEC814F3BB65913DAEF6826565F66DAA180C364CF937E21D29D374046EAD2B048A0BA6641C3749508A8D13C2BC2D37B417EBC9DCBF046AD5666E2E0FC6F8AE461E55072 +Ciphertext: 6CAF8DA9A736A90DF25C8BCAB8F73857143A8B5BF6D5928D19A5DDF6241BE9AB7A16BAF62DE3D07C93249E9058E19CD9D6E1BE8B2CE9110C7451141505455AA63043AE82CF294CD79D60AB6FC22AA5B83A5C91D3260520F166DA0082B143C6ED3E7FDF014BD49FBAC501C0DB0E34B7852D0CE5DA78C548AAAAD3BF7BB2796CD815A519C0259C3E48406225766E30D83F4EFB0FA1DEFD2E1CA31CC6 +MAC: B939EA116030E5DE033F7EE78E59A024 +Test: Encrypt +# +Key: 15764544CEAE02137AAB58F2DC3902F43157DDF35A5275D82453B81367954813 +IV: 8D4D3A71752C394450418678D82542D5CB5661DB06CF034C +Header: EA97308E5E2250 +Plaintext: 8048AF3A372CBE49215ADF85A111097A685855216F32C03385CD1E0BD9F2F2AD28D299F29B9EE905B3DDA0E1E03131137353AE7C205E22FD72A572AF30CB9FAF90758559903CDD4ECE8EB20747BFA1A4D967E98CDEE62ABEFBE841F1BB8BFCABE24AB97ACB8B670870722244A2661012C2D99D777699CDCC86641E5160CAEC13A8808BE9479999F68AEEE0FFB728080460B417B07440CBEEB951F5 +Ciphertext: 53A6569503EABC3F9D754C272758D3779F919E8809D590CDACA8EAE9C71BE2194702E5A53C64308FB0A741EA24A415604390A52910121291B012B3E05932A43409E60FEB361652C6D7E0B42D30B29AF5B4701D133770CD5AE6C09B75886027069754F84DA47E2C0EFEA39473A45344107F41DEFC39A4659416F9E76889551502229E54E49FAC3EA3C34023C7DF99EC1A69ED35BD1A6BEA52164532 +MAC: 2A40FB5B934AEE771501A0DB63511283 +Test: Encrypt +# +Key: C796225C4E57BDDD07B3C1F4CD9EC228FA44AE8FE2D29CA2D294CAAB2C2E5C1A +IV: 7940F929F0672F6ED40CAC487FB04C52E34848E95B807888 +Header: 73FBD72780C53EFF +Plaintext: DD6C79C9CA63175377EA2D63557ECAFD25E764AAE3BF67FB6CF5FA787A13BE96B2F8D6B40430BB4F667A8684E6FF9F992FDD1C6C3971967EB4264A5828B738397B66F6A3641A3279209F6BF0A7C07957B0A122A444363EC2AC1633965CF85D79CC5EAC7920572603583982F6253CB0BCD29E8C507776BE604DC808680B5E87C8BD06544ABAA0B96F2BFBF18D86E78B4F93D7398B1CBECD7128C9A0 +Ciphertext: 295DA570F832B7A8611FA00C9954D8691AF84273F0D0D87B13B773500D3FF9E3F307152826499944BDF83BA044681E13280BF6603E9982DC2A55DF7580B1E344BF1B811F30E6D948CA3BC1293715F931443875945606ACDEE5E09FB180C2526081F9D6F38BD6046A2B517AA11588EB0ABA3229530D1BB9B10C491C5671FBC70FC21A13DC2943DF796AAD34B87C18C4465F6D065524D3641639C7E8 +MAC: F8F11182A445D39E2790E27BAD6D3E4E +Test: Encrypt +# +Key: 27F5A5149B7B7314240645F99A451D0D634DBC0DD486AC7FD1B4967B7E269C4A +IV: E4FAE39F549A7260D7B7481060FB5C709063C55A90A51D53 +Header: 73237451AB23F4B7B1 +Plaintext: 558CA59E1DB8A3E3CF9C4F34517D688EBA638B59EEACBE5264AF70EB2825C8B64324ECCE3B3DA646460DDF84E899B054F877E942287F5446CC06B2C8C642B7067DE5FC30AB3EDDE5B87C6548E29BA3FCDADB81001DD5AF72877821373094563711EF13D1133360DEC866FE75BE9DF741398F96EF6F30A1E9EBBA0B9E54B12CA9774A2AD73C5607ADE0BD0822862DC1AF687DDE310C764F953D831A +Ciphertext: 7F8B30D34D191B4BBBB2F4C9CBEEF34A14FD5FBB429647AD42B02C8FE5DF892BB9CCF000CF6A4291E38835CB4072A1CC9F41F7EC54B7A3231CDE06238C6375409034570C9CE147A2A9105957A4252D9D56674208E7E7B79A0665338E4C1414E874992A29EAF1AA7BC73DDA979B59A91EA61E8B667A912FCCF47B3B244BE34C1B9048F35A18D2F962F908776319182C0E7E749AA154F15D59189DBD +MAC: F8304FC8670D909C53F406200BB07813 +Test: Encrypt +# +Key: 95997EBB9F7B889D09D5398086E7BE088F59EB7288DD94639ECAA6DC1329B76B +IV: B8337B106732A1A0A471FF82065177296A675F3C9CD4DFB0 +Header: BFAB1044617A9D5D2F96 +Plaintext: 56CE0CC8A91212D176198D2C297A247666D2B084A3B2F1230AE791D6029185C529ECE0FD0AF943DD8D055D4F0B410218E7FF6BF542FFF9DBB54D4FF50668A0D5B354F17417EAFC47842AB6A9AFE42965064F36ADBF2CC452CCFA7598E26B170CDF951DD595ACC1095F29BE65AFEEF70DE52C106A01EFD9CBCE157C29251A7C55DC2FD5F2C69AF4463BFFF877AA75836F6932B0C8292338610145A5 +Ciphertext: 512CE60C835F3B6CE1257117F12661CA1B5E5334178312DC6D91D650AE886BF7D025B96BD2F3319AF2022E729141361AF7FF20ADA0D89218B95108DF6204F4B7724A936922B106173DA88B5E3D0C5ED6428C86D1B3FC28DB8560F2E574C3A9A4B1FD78931D1CD89D899359D04B6EDC65FA8C968464AD82822A42831DEE1B2D2D7585834A8E1279FD3EF9159414AD8C55481C190A5FD585A9F949DC +MAC: AAEB4683901E3421700305EF63390B5D +Test: Encrypt +# +Key: A9A8A3F70192759D2FC42F55CBA228DBC0D973BB8571F2D5B63BEB1D97C0457E +IV: F1F38D880A7757A5F182514491BCC365EEF284198841B9F5 +Header: 5796D771E50C58EC344494 +Plaintext: 95B72C3921EEB8D2976F6DAA510EC5E504CB5B7F5B273E63878B1A32C3EBB4D6B4BB0B1A3FF3F2B2D421A77229DFF887AC95A258CCE9455156EC39209BE2E9F8AF27C824DDF914754B358133AA335D4CFB36B0DDEF9F2943C947B8D6ACE1E41102DD5EC39B60E1164BAF0C57D05A22DF8AA55B445CA2F73F4562655A840F780371C8BE04FEC77252829274585D542D9D32388E05057E2DAEC79D77 +Ciphertext: CA5549D52005B40CDDDEAFB156A7D5B42C1A59DD94871A45B74997581CAE9BD7E3467633DACD3A5A4052CEBBED68B0C0A95EFF5C285E133F2B138B4A66C23A64B57C77BAA6496B31EC50E96600E4BE00E38F3A2FDA16AC4985D3CF594EB1B7049B36051FD5B4EF1AF7D07B94339B6B5ADB23E018EE00ABE95AE20581C93DE08854AA4D0628D8BE3C570E12C1456A97827D13A9AC1CFC706BF71376 +MAC: 8CF8A5438C782AD6E8026F5D7D8AA02F +Test: Encrypt +# +Key: 2F3FE9CE5D5B08E6CCA6956BBB5E0D3F86BB98C8BD8DDC5F7719D6AEEFCD7F61 +IV: 943A08575D7BF2472CB02313323A79668542971EB6E32BBB +Header: E7963E293154ABC339411C4F +Plaintext: 2FC2B4A0327EF1C89DD772B9220DCF176C18F47618CD91CE5663BB6DEA0CBFB26B545CA596AB2588C3EEF3F6190543DA953867D5EB352E98592132DB27913E16A9D109B623615D5D70D19C4279425027A7A8FB2DDD8667801B4480EB3E1CD2F28159EF5F3CDABAB23061E975DB5CB00C75AC7C6520A5F31FFBE068CB9ABF661CD480AFA05FCFD65C01D8EBA7462808DF5C2DCE79A056A600FFB32D +Ciphertext: 87D0EE86039B771987DF1F98D920C7BC980137D8EB7C92A590481C08AFBF1E33EFC13CDC967C50BDF3ED1531F121DA6162DC53A8085FF0ABD067A777ACBDBB6772E1924D63A26BDD6CBA697EA28C557154181386D45C1323EE2E4472043736B8BC172F8DDABA79E7F82B4BCD5DFCFEB54111A75B904B2558C4E2FC9DD3FB4E113481EF366972FC87577A3EF387F993A7B881695AAD896CF75F9996 +MAC: D34D343AAF3A7DA347ECC77B1924C5A7 +Test: Encrypt +# +Key: 807B08734CBD4B6C8AE86B70467509724C143A8DE9A1E6AEB388BCF3256C0C37 +IV: 52FF01FC11DB75FC42649A5FEFDD863ED8D1D0D4CFDEBF61 +Header: E864609B49736AA221E38FF729 +Plaintext: 8A522226A418268C48941AFF065C396B635FF4F846F63E250618F9D48E8E60C8EBA0BB00C624EBD2598909C30A4FBB8B99F7D9D569037BF65523DD55AF7386A488379EA49A1A42C5F81398C9EC7613B3B420E63801B4E780D503C0A44B8B8BB5173FCA2B16F8566B591B6CB970D3DE2A8B6A262E6A85D0D2E49EA796B286372FA44E26DEE525D6297A068FE181579E6F5EE620B21B895A05847C6A +Ciphertext: 687B032495D24FF0236CA92BEE13F571CD013B8915880B2535A96BA51D01FD4646CE66AD0DB29D7636778D96B7806E4EF4F0CEC39F72C7E9B2E25BB4C325FD71717261D1B26C91743FB0BFDFC452CF3DBC85DCB297B198D258384F0B82ED7958211A76675EAFE4E3DB299878EC0432B8FAB8899F390ECAD99F7CD9CF0AF2A9B2CC5B19DC1D2CA9AE0545401B6A666155BE5F73B1214FDB3A1AE96A +MAC: F54C97AB5EEF1D50A8B1B318478BB424 +Test: Encrypt +# +Key: 9BC28A6ABBE54D638158B0C8EDC810163F41018AC1D2B6748C48570C2244FD42 +IV: 2DE39890D51A510A14A961CF24EB5DA633AA99F830A7F706 +Header: 37CB39D51C4613F1CA2750C2302A +Plaintext: 960799C0A22BC0DE334E1BB9421A02F433C65CB520A81F90983D7228A53E29A3DEB9FBAF7382C70B9EE6F0BFDB5AC4A282C4F4143AA1645E1A658115D97A1882F89E3FA77FFD18D63E33003E57022D0BCA1FD7B5BFF0E3C670EF96469D07CABD21D17D3B8D5427D78172E64A409517AEEDE8B8A6DF910734A9CEB0765A0FD0DBC1E995704D0D6BE0AACFE157C7DE2399CD4AF1B510F18CEF1AF67E +Ciphertext: 61788E56330EED9D91A046AEB529F731DFAE3A7487358FF217331F2FEE786B503BD14938D0B2E716128673FEB53182D85BC82FCB9C2ED50C96B3653F388079CE4EBFA8D25E85E2C724ABBB823A11ACE2B8FFF3AED1A39D7AA88441AE3923CE1DA76897F95CC1DB15AF38F1FB92C301DB29DCDA83D0B086C874569CFA757DA9B1DBD1172934BDFC3C42376B604EE477E1C179E08F21B5AE699E9582 +MAC: 01D1BAFDF4FE02DA8D2FD5AC550F01EB +Test: Encrypt +# +Key: A7DB40FDEB33D54FE9245FC727157386A600CB3F771A883014DA1BF6F64E7BF7 +IV: 9B9F5AE21E30B2521AFD113F90556D03045DBC114C0C2BE7 +Header: FD1ECB085B4FE4D347B65E472234D0 +Plaintext: C1F0A3B87ECB34355CC3F443EB92C6C3703355722AEDB4C7085FAA010C1D4E5ADB103074A7780045F55FD3F50B40865EB1D9740DCE3C4E288531FE369D1ADBD6DE8689D19731C960C9A2D90CB5B7ABEDC5EC5DC96826634339B94C15463EF6BF8BC221AB06F6C483131117DC7D368D9211E58AB6DCB981C7F4EFC3318E1C31DE6B85F0C1592E973BE23EA42307BDE542C20E00C29AC83AC85B09BD +Ciphertext: DE59B65FF242CABEE8F85276FA6C6113420E28722C897049CC68DE8997B070AC5940A2F37A69F313F213D8251795ED98A950412BEB897ACF63A340F8A95BF56C6F753B43B87EF46867EEF74E4CC1E5E9311EE42BA2472E910C51FC8853B034247E497377F7B1FE07B7BC642E03C487DD5F9BB4110B95C249C1980516C91C6A864098B882445CB9C3D0AE09B909185B5413543E527FF7A24901AEB4 +MAC: FB42D1D73C264063408E5BB92C81C4F8 +Test: Encrypt +# +Key: E82389E2D451A35782D95B476D40B1A38848A6D8420E353042DDC568CF3FA0F0 +IV: 959C2A8AEB77DFA4C7017E280B71657DDBFD71DA8EAD702D +Header: 6BC05A1E218851509696DB795B698A95 +Plaintext: 7C78ABFB757C8ADA2EE30B3724D87BB01863EC975AA5482AFA6A567C109620B1E9E2250E00EC0EBD20E40E282D0DAC415E72D4D31C731B1CD756ECF4EE8BB2D9AFBE6B4778383835EDADE6AE8167B7A8A8DB88DD8BC616661A7261065541B47E1632251FB1882790663DBA0288A667C0CC7E62A4EF8261C4265992B5C81D1DFA66B13BB2A992F87E6055E5CFEA2E9D363090D1330854F2A984BAD9 +Ciphertext: F394CF8705AFBB0D2E5F28625996DE82A7D547B5835D4EDE9ABB5EA240D381A4D5E17161396A994ED69AB921A251ED01C72E9C1535CC969245D5D4C60CBB16DEB7B4B108B93DD498A03AD54CA81B27B82BE43F4A11D7723C226F910ECE31C9C848B96A928C90315569A8C4416DB0BF0CC1728561A6EC822C72E1CF48BE2A4E486EF48BCF8F9F7859898D2642E39A942C2592AECDCBF3A54F76EB17 +MAC: C9F7C331E8B2F50F64D5DF69DBC1B02F +Test: Encrypt +# +Key: 64D633E05A491840C578FDA9F095F35A7D42752BE5B516416CC6245C68AE8E2A +IV: A4C2F1DF07B930877A7FADCA24D420002754C626B4628060 +Header: 24AA1DF2593191AEDC8E731C39C6EEB64118D388E7AF9495B1128CA703 +Plaintext: 8093194F63EBFC4DA41A0FB8327E80B2CA1257D6C42194035A1BBC33EC544E48CCB18D39F498DF578BF434067D5CE2E5B9953FFC0CD1F95DE0857C92B1D01AF5538013091817D4F6F24F4A540DF6CE4386597BD47378BCD97890E38738DE13D5B0C75B6869927E3E22E38DF84BDB7AE1F9E76656B99EDC351D84E69A76252AA79C934A70C548FB16ABCB1F622B22A26F29597125CD38B2011F8528 +Ciphertext: A5B5833FC20420DC1987E4E4A2765039768F2B91485F84D0905AC5C37AADDA82BAD03EF55C49551AA5D5F48C165D44B1013C5541A68AAA5E6C82F2EBF845FB4DE227E8A001F1BC3DF85C34CE1CDDF3BD38F2F04832E3E00F01E58664DF71D5DE0FF82B4B1ABC2BA9FDA487A2EE7642AC20C23DF5F096B5B5D47AB4D51BB1FCF4D8916F99AD374AC1C95F6B6125AC4FF15640335A3BA4A7F2105F3D +MAC: 37D59091C4B7352BA7F86B3128E301E5 +Test: Encrypt +# +Key: A34D6D9A5206FAFD301947412CF7E1CB682FC537319A16C5083C5C845E464621 +IV: C5D077561D33854A9303B052DA6ABE5D038680DD32162462 +Header: 57C40106476E61DB524A99600D8A73ED67BDD1798AA0E2B5646607480A76AD1187FF14AEEBD876C4CD719860E596502D1F +Plaintext: 8D9FD43C6F0111CFB26CDC035CC95CA83647904D8FBDE09381DBB844A728F657770DC8C20F65952C732FFDFE7EF439E6D4CEE68B65305A4B767A709D8D889D151D1F3C458BFFD3F7DA64D663EF17C9BF43B611813C61DD5CDED158CFAF3446AEBE6099C3BA1D6564A250EBA82E91FF03A3395F5E6FDBF64FE8DC6A9220E10FA54DD749069570BEF0148FC1A90467242C60E4B33E11EC9B5E9D75AC +Ciphertext: CBD4F3AE95BBC5995288EB28A5C8C2E8E2739A1E86E444633ECCE4978AA800E1B91366B8F83115CD09E354AB8BCE708523CACBEC8DF0C0E308A6F0B8C7AAB835A4561F117F2B915B37181A8B76451002E018188CE3642FA21AECB749FB792779D97E282970684C338F218BF443BF8DE203D1D18F9F064942CB4939C597F2BDC4BF3048EC76AD8889F5E7340C705934B6AFBB37CF595CD59731C1F2 +MAC: C8FBE9FABE698D02C8782DA85883BD08 +Test: Encrypt +# +Key: 56B24C107436AE90A5E263B9B7B802B400F8B3CD9AD79A90DF98C02BB6DF7761 +IV: 12439A549C7F93900B451CBA782D053550B60887ECCE5D36 +Header: A1BCA5F5595992D9B4E5035DB48E1A86DBA7DBD51B59B63D6FBD9E2D586943A1EAD1FC07550C09DB86A3FAF7026DE94774D86613FB416CF8B942CD1AAFD457DFE0B2 +Plaintext: 7F557EC91E9CCE00BCF3B38C7808B97FFF80A1F8F41B2F243390251F411AB1AA81CF4BD237BAA3B0351E52AEFB9A79BA1954C9391E2F1A6B372DB6A7D7F8FA9C7E3A9715D56566B1A56CE7A439CCC418F20E9CB39BCFD4AE63EBBA588EA694E4151DC05AFFB72B4339EB410BFDF41FC008D9ABB595B7D0B8583BB07F36DE4F1F8FE3A64D53B5F9433A50C3F1EB3BEA85B7E3BE75DE8DD5C45C544C +Ciphertext: ECB0E599F0310D4CB7980DD94701714CA1524F7DC4F0D7AE9715F002E8BF0336125889E839811C8297E99840D12675BC2B78C9161B507598EDD8EFA0EF3D59A77881013B2A552C98F036C0873E5425974EBFB61F9CDFC1F594835310773110BA62545B30674E4E82AA7DF7B2D710B47224334D0C0C7E3EB71068CCFD5A83A1AEE4B0AA8A7F3EB81D9F7059F9230393B7C000F880BAACD4F303CF1E +MAC: 61AC83B8628ED0BC3FEF7369E1BBCEF4 +Test: Encrypt +# +Key: 630FD94FD6AC4BB9CB2E30064F43D3FD5A565804DCD7DF2B6CFC66C48A99BC8A +IV: 20E2A1B2472E842E3698158E0E79546EFFC5B44A26A444E0 +Header: 70E8A97181873BD607BF01CE62769488D10A860360807F8C3EC1D013C8C32A2EC5579A6E839A513A5051E949B2C95B07F6EC85920BE6494F47B10FCBBB688F87BB9626482675197A8473F3AE59729D +Plaintext: 15D8AC6C1F1794A2320A3374AB44BE8472665D7A46B52B25C56C9D29B1BF8125A19069F8F38C7D4A0325391F0A46168D36E6081953BB2BF059F1620187313B45231B6DDB1181A6AE93298F9DE7B4896F3A1C848069D41D503FD9758EA65ECBD8EF1ED52B078FEDB84D22534FC8EA18519F1430CBD015C16DDCCDE2BF6BAC0FA4B1CCE5ED23F54594F75776FE65450189256F55A2A5A7EF657EF22E +Ciphertext: 91EC69264DA75FE615AC4CA0F973BF129299D9A230AC21B90B5D9C107991D587B50A18830AD8087C90CD5B421ACC1CDA01B22670F8427E5E4A8FA425AA7788506019FA08B4494E9DC04A8255D86D6F29D5E5472B22AE9A0778BD8C58CC5308F494B61D130CDA792CBE04C46F792D16C011141B01EA1B2F71D40E08E45293400B7345DB9611E46253BD6AB47317B1C64342F6D891532DD42623DD9A +MAC: B4B445FD5D4DC45433FB63ADEDA519B7 +Test: Encrypt +# +Key: E271B2578DBA7662D11AAF2AA28690B97D47543DE94FDF29206E83B67D0B86B1 +IV: B88620DFB97374B66083D978064A80978E02D7424967626C +Header: ACAAF6CC5B5717DAF0B4F7F6BB0576E98C2057900BDA7BC7719BF37D7ED99EB608ACACC5C5EE5661A28FFA3EE34ED185EF8279250762226F3C96BE8C557915A22B9F6A973CA8F7D5C4E552BB645854295033B7236FEFDC616E1C8D3C9C92958FD2ED +Plaintext: F6A9E5516AC5DBF9AF4A02DCC6D4500CF5592F90B6C7083726152F007A68B1742B052A3C5E1AC8113AC58C844367126153737411DB8C62A4FE8644A28F64E2ECCB6D5CE4952B29FB0644BAAC2F72CAEEE6C6B5C5C57BF31D2FF7811C75614D0BFD1E3CBFEA560035071C6A9FD1703D7339021ED65F6B4E233B64A4ACCED6CE1750837CFF65B5D83329506C82460812D1C519F836AB0652A16B4929 +Ciphertext: 6B43D6BDAAC01936D20D96D4EEC01C9703E2C47BBFA454FC5EA8986A010E63FFB23C479DFA25EA604A08A6EFD17E206771566462CB8EAD25D8EA1CCE81BFF288B024369036E33AD17FD61B277C7C8154D8CCD1E36E9ADC50168A16068A3FD8BA95CE853BD93223BB64574B0C73A743289FE485240BB44AAA83FAF4897453C1DA60635F2A28D298A76F813443E2BEF3FC1D95703A28EB9E5A1C6BB9 +MAC: 79CC763CF1A105251D8CF465EC6B9242 +Test: Encrypt +# +Key: C3AA9F16239A97E0CAAB35F825445DBB16AD72B815B8BB9CFF6E3A3497FA3BF9 +IV: 284270B7D6A8D54C4520D75030F31DA7FA404FF5E6D362B1 +Header: 78D495A96E94C47034E5ADF746012442C4A66D71740A6DA717D3E5875652D5169E798DAE5BF936B998BDBA91D2AE8193B83868BC0BB6EA70B57120AE06E3C02AE345AD5240668612C057E46DC199AE506D001CE0C46E60D7F8A5453889B90902FE0F5CAC6D73DAC4A9D9 +Plaintext: 157C9C96AD6064D8589524D420EF696BF05F29700021E2D1CBD48581764A3A1D3D4F0FF92F175C655044144B9A56B842E99634E03D44F95FF63DF3BCACE85BD88AD5F57217E936A9194C039244B641CF422B9BA6CE54B7E7B9FC14DAD2C5AA1EDEAFEF35C555D733A37FE9A0A9907C39026F6758FD739A004317E50F3322E4192843A8CCC97DF13CB03B3D0D573452FE36A48797C942A2C8747B70 +Ciphertext: 314267A0A7FEEB0D849DFAB2C24AD3941F41CCFDDE7A201C5B9458A31E05F97DC7CC843D47B880F152F88C04A6F95802F9436832902977917C5DA1FFBDA1545EECECE0A5A73F12A08C2F42BE136A5E6A4F643049D478E5786A1DEA4CF27A2807FDA65F9A942EF4F146F957DB4A02DD07B1991EE8642FD46827B32A372D48B8C1D07664AAE8731694CCE4C927584E89F4FD2C7EAA70EDD9B46BB4BB +MAC: F6F6C288B833B28E56B3081AF619E9BC +Test: Encrypt +# +Key: 6DA1B5B7BA6AA23D815991F4011F2EBB1E01A216132CB36FAC324B3C2501E983 +IV: 82681C45EEC44E2385C241882192C65344FB4ADEDF4FEDCF +Header: 1DCB60F925C8D0892CDD8856F4CCC76E82027A8EDBA57FCE5158EB274D42669BC4A64A5BE88553BFDBB27A2672C193C283EE945E38D9DF7F53CC29252B6C00DFF4643FD4836B95B5EDC41749A2C2CB1465E0E91274E611D420D8034AB2E8AD2B9ADCFB7FA55161A225B7DC03F70D776F1C41206E4A3D75DB7D72C43E7B +Plaintext: 19B89B3C00EA1864ABBAE548E97880B48164EB30D524F20E936807608330AD26599964FFCC08432FAF95AB37CDCFE88D3894B40C70FC20AFAC0655A7579617EDDCCB8CFE7062DFDFB4F7634D771E9660CC482BB4ECDBD45CD5C63647F39FFB98172F2A3DD9B297096554AAD1EB8AEEE39BB1EB9FA61C74F912EB56E4F0258CBD81450F5AC42A1A4A63B3A8AC1EB0A80B6E1AB796FFEB69FEF9CBF4 +Ciphertext: 11C2AB4747ACF3B814EB2839C54BB80764C517246DF8D8EB5CF6ECFACE5F9C8B7EF1F5017A6D6BF1FA9E5264EF0FAB7860A9AB6362241962423A80BA2C493478A5057AF2F84385413E9949EBBE474645066D6618176A1868D0F9C2BCC7B60CACE0D0EF00BCDFA0165DD666C063F2C2B6799530DE14B479F3B0F2C687DFCA0C58F6213D76A3856718834A01EE105BB73F8B3B6D5BF62FBD0C0FD695 +MAC: F843B4A56E2FB72AE51E096FB9D3662E +Test: Encrypt +# +Key: 768B19E75589A8D8D60A37E04984A56B0DD58AD17F19CBE4DEEA2BC38218CAB1 +IV: 8BDF3A14FF6300F912BCB4892DDBBAD58FF09CA80606AFEF +Header: +Plaintext: 24F31921BA4E5E02005E3DA3BF6E89E8DF9A77030608139E0F6B4EB920132223639DE048F01C4B99A808D2E1C1B464AAC24A705D5B0A50DC40778103B9B15B83C14CE43FF96BB3364B3E8DB9D438AC61EE45A426B5F8DE6FD5CD105998F4580F1D961FAE5B5CF5BB2BF551D2D2E6E33B9FE8648AEF51E23332B7053ABB9A85A26F2DF75D14B7380CFF458E8D33276E6310B9EAD11C814C7B4323AD9252A9AFD8FF6C34B9C255FA2E66AD9B07BDB8727C8F47FF1FB2F64E07B64A7D965B61CB5A0616F22A063F +Ciphertext: 33DD8063ADB1A0CC2EA78F94AFD1E89EB0011A263288BA23CC26A6C78882E2FB14BD0C87A8E8DD60BEE227B7CE204D367CF1EE802E36E31D80E81200026C7CDB4BB7BDE4D2C09D52AA5BBEA151FF000EA5FC0C3AEA27B4BA14506F9F12D13F41C5ED9ED7B9ECD0FD5D3737C955FEFAB7CA83233A276CB8A7E2DB09C77C7A410BA4334AC40DDC967DA80C7D977EEDDA639CCE13936D83346A4FB689AEEBD672F9116D34C486F8C9382951342355EF2421124AAA1E3813CAFDA83A202BE310328DFFAA6D40028D +MAC: 7AC2DB4976C70D407AF73DEDA6B96198 +Test: Encrypt +# +Key: 3746E7BF2BF09649FD7D7AFB50C8A8C2D67F462A06ABBA5391681A7CF669BF05 +IV: E7A74784803319D3D26D3D81131B3C63C52ACC41C631DA3E +Header: E3 +Plaintext: E721CAC32CC972448FFDEF7597ECC19D0C25B14648E6FF5D9645B36997AAD4E5F5161FD16A4CEA6DE639DE5A120A6F4F5B4E4C6508471C92DDF2834E36FCDB5C57CB2CDBF6BB72913F9830BA68C47F1193DA09168CAF9C881F5E691270B744990675A5817FF883423A0BBC71DBB1C899B548D3376C7E2B11E368CC0C75D76309C0A30208123D5227303C118C360F548B502FC8390C6DA7AC525996F6CC8F1721F83C2FBD3ADBABC478528E58E7C4760644AD40A1F823561DC530FBBE7C2C9AC46C307AA139DA +Ciphertext: 609DEF75784C5F1D1A4C5E27934B7A5F799AFD2FEC9CE8543B41ACF5707ECBAC3FE7E4EA64AA2AD0A35BF98CDF43FE7CF7A6CC41DBEF1B9F24AE97EE6CB555843B2D23D8308B3A3C8527F62FA0DDCC5FFFDF9FF080FDF5E61535FFD8D66DFF118E7535A4B79519D67B98F41B869F083ABEF04B4D728A1C07383BEA1526F586292668301907075F15A3BF31E66EDFBCA786C1DF60423D5B1A4651681FC64F8A44E39A0E1FB808D3EB2050847009C0A5B91D239526BB33F2FFF32B612218F203EAE099545BB969 +MAC: 0CEFEBA27197561EC3FF6B60A572AB59 +Test: Encrypt +# +Key: E3079A3DC346300F9B8069200C1BF9BED575D5B43CF5D66242F51DFE0EFE2473 +IV: 6A8EC576F8FA0B7711A1E15DB76A2AFC3F23E1EE01214F28 +Header: 75C1 +Plaintext: 8FF72FCC2E3C484C2688B9DD3EF0BC3C0AE950BC129A44C032E24EA9EDF94A0FFEFC04602A0171B4092C99945E459EF1BE37FE6ED448C6961CB957633CCC56CBD67A414BB9EAF74A4623D7300C1D56B6189646E3623695EBD63B81BFFA35BE1024C96E599F43B985FE54A3940AFD9E29870DB1DF32FF64923EB1EF4D79B5648C96D95751F6283C49365388475ECF2D65B317F960EAF79648524BA53CB313853367539A6A84D3D471EFD46A30941DF1A7D156D3718E90F160EC903BB59709A48E057DA75CB055 +Ciphertext: F77653C01AEEBFFEB436748F084A18A0BD3A8FA4B086503B93CBD0AB0FB098655F03F09C998825B8E4146EE7858811D9ACD208F4C1A126FF6CF8586FFEE5E4E46EAEA50376D2F844F11A323DC4CBFD2882BAC035E8E87B0C0196ED614113351E0DC36F48F4114FFCC83DBCE34B87F92FC0481E3C9CA0CA088CD39B669033131C7A2BD2617656FD8EEC804EE9AE27E1589C638C1D64F07238F00E30CF118979FB777664CDB1B1AAB3453EE7B8B55CBD04B5476F6821BFDC731799255746EDA1DA7788D466FDD7 +MAC: 14BFFA2E3D8B36F480CF33CDD00436E4 +Test: Encrypt +# +Key: D13A9BCB43BAA6949AEE600E80377875099F285C374AB119A952F44FC56A6DE3 +IV: B645B87A190285BD6E8259DEC41A2CBEA7EC93A614C35902 +Header: B4A6A7 +Plaintext: 508E153E595A84D2DA939FC15E8EB4831E7624B086A464C26FF291481F5B07DE93F65FB0D702D4EF937A5E6027F9D3BA0E9A4835FB7310E916322B761E7D3F62EABF8879CB4EE8A9E7A42E53E63E09C398C65A074B25C3385C6CE6FA17DCE2A546D64F96076D378A12C9B97889DEA3A4284C54C39B4A3143123F5FBBBC2FDFCD069A0010496E4D085FDCE8AD9ED248FF03D0D9AC87780661BBFEE7365ECC805630BD8BA6297BE8836CB47F75B70F2184B9AE5D5F50A08971387952EAF5D6C755A74BF12430B5 +Ciphertext: 5E05206AF675D5726DDB1CAE4A1EA9D540BE465FE53E4FE79B2791402D411D193DCAB18241E591F9EF6952C0B9F3AC04D9973A4BA7B3B3459E2F2438CAE489861A13612E446AF05EBDE89E66A50F04595B5F89E42C606803EDFD85BBB03A81B1857124D748FA3FF63FDA0CBB526972597F13173F7F659F2ABE8865C92CF016D41E78DBF1CFC65B1BEB31A9AE22D7B4BDF21751F29ABEE70EAD3EDA24A0B290B18680C605260ED6971B16EAAF4A8F31096211BB87DF7DE79752B0BC30A1F8CF763693A7BF5582 +MAC: 7429A2EFCB17250AF378F544292381B2 +Test: Encrypt +# +Key: E716C50A817320579F1C488D14C6027FD77A1EE868C560379E913C5972B12C3E +IV: 1D468A2D2873A0B7533710DF9D5DC81C8B9C0C70B85E3352 +Header: 5ED5A0BB +Plaintext: 95A3C3D57E614E1167D14D06F0EB4CB7B988D86AD51175911ACEEABD1F27A71FD971BA14E9AF5CB33C09D38E337BB88B3B18A107CAFE34D48955A97221F5A51E43EA3EB82A369FDA000E9C07889098DE8CD56CAD820228AD583A6EF2E79744DC32BFDC063B7C9F72CA5CB2DA9F2CED4EA5D5833654F99F1F6349A7C1C8B11C44F40A308550E5429F8958EFE9DFDAC49660F061FE2A99E4DA021259C89DC2537A1762EEEC73239CB10400C8706AC3E1A29CFD7E39EFAF13A256DDFEF8F6B15482DEA3BB0977F7 +Ciphertext: 5719274946FA7D4EE11CE248DA26064FFFDC4FF3F515145C6ECF8AE3AA020D14D462478901C06C306F1610AA37BDCA06D3926BA2BFF2A9E47A4E3A1145A43B194FFA91A05F34FC230E0E542595AAE4B51092C11B218546F56DCCD160DDFFF3A3905F171EA9B0EF461539CA3965ED17E195B9E5E00D3E9EEF3C4D025D203B0CA9077D008C3A85EFE756ED378AE60CE356AF856AADA8EA3F80AB5D9F73789A6CBC8716807BAC9E839268F02C6DEA1D563DD73B11B3512A5B0AE2A2E3450A9768FC60451FA90696 +MAC: 2848C533C6B43E61C93665E7240D3477 +Test: Encrypt +# +Key: E017E3BF13379BA1F6302B171737974C27215DE57E0EB3D4009D2AE62A4D6C2B +IV: 4121937C3C58C6650AE951F37581A0CD601684C8490B2F2A +Header: 645774DC2E +Plaintext: 133A6A7DEB826A9D3197D8B7CEFD485739AC1E0F146C41B7999CEF72519A6AE3B8F6288106F4085F8C47485CDA4C20F7E6B73226F3351EAC69D5D3C00975E2D6D726DEF15FA0574E202D9326E7038076FF1B14292235CE0274F8050FBF24BCCE5D81ABCA3897A8F5AE2F19649BE0C04F4DE14E3C239252F19FCE0C7C03F551DE9A884815F6313C93E0FFB06AC8752D814A17BAB2BD883DA24CB2B7648BDB9C571A721C56579E47EDEB82559A2DD3E2C96B5309E64FC3F753895BC00560C08194D99F3D291252 +Ciphertext: 81E5E2A7C5CC4D054090DB29B70E1F038DD020229747563CFA037A6D5C4A829608DD6C42BB95577F345B5C610E5092FB300CF6D1551BD3D66D440A40924980141DD4337A5AD607AE57154053029AAE1CD245A5C362227FE1B48731AE1E2F72538D94BE8F4B81D3297FDB996C76620393B25B1DCD941AEE89DA69DD5265EE7003323BE26B491DBB025288FE9ABB5C62208D734547B4FCBE3BA6DAAB8C7CA51050425D91882777AFFF7EEF5E2280D19E5BE3877E049BA76FC0BE63BB64BD002BE048D82229311C +MAC: 7E880E487872DA7700D080F1A59C250F +Test: Encrypt +# +Key: 38EA7512A72F94BF06E68C633212AEFF469ED05A9C265D7A313E9B7FC078C4FF +IV: 6B7CEA0931660B814538D21F6F4C2A7E3503D2DCCFCC44F9 +Header: 0DCC048868AF +Plaintext: 6F923F26D7D03A4FF7B4541B3690A8EFF9565EF9A21F97A5BBD46561415D7F2EB482389D4A754F475E4CC84E391D7B7A7E9CC017CAB54928CB7D4D79D9CAA3E8C56F7A39A352BED019A7F291D44230B169CD95EB7E410391823A16336F9466252BDFAD75C4F33A67C7716C592E684D297AFE49A2D14211B8050368F2C9BEDB4936667F9175B71A0A81B3F247EE4DEBA36309F6210FAEF85B80B6BCF153ED2C7764FC94A6867F62A6DDAF5A1EF5754EE9E7E9327DD36DF540CBF239B7B24093944BEBE2E7A19D +Ciphertext: 0AEA7D3ACE51C77ED0226A340E9544A7F072C412467587392B2D016C1ADE66D904518C6FE42A3CE86FDE657A32831D8F664F3C4D72BEDC644B1B007733565C56A354798F3DB6EE05C54C2D8B97D4C095B6A16B3A18C6FB9BD942DF5CDB9E5B3A13F4AB9F0FF56E38947AAA2968D30C0B359B2F983E9EDF1DD92278AD7AA9DDFDDA60565FADD01FDEF12C10D318F21E481289BF875011772423DDCCBFA072D2C4DB6B21E5D6158EC1413BB5897C130945CD6FE99E98C57289472A4853397B2BA01014B1C3B99A +MAC: 13763EC8023421CA6804968A8C2A6CEB +Test: Encrypt +# +Key: A5E34B54809476A7EE7E145BA1DA1C144B3DECF5CF6C668C5359D2143793EB5A +IV: 6A16BFA168BED7F1CED779705490C94A1F5A8A870E12D67F +Header: 05EFC8A08F2BE5 +Plaintext: 0DB534B5E9453F76EE41E88D6055644527E5A1D7F449A0AE0F019BC247868BDEA7D6F2753261C5DCCB06D3F747E58CD560154E853846F176B3777CF35718F85A7C205BDE0FFC6FFD58582AA50B0530C458B6DE9F69FBB9BE57E807B5D6DBB51EB98ADD59D08A97CFA733F877DF39FBF8471F48A450ABDF4D2D5B2F65C80564B696FECA2713CDECA29E4B71019BEF48759EB0E1345C74C289DABC7FA396FEFAF867A21B1E9702C951F6590FBFE31CDDB1B80AEDC16827A8ED327D9EF019A77EE228A5B773AFC2 +Ciphertext: 8D250F68CED08B981F992D58C6E91DBFD88E8371681A515CB2B075DDFACEF39F00534FB1735906F31B2BDCB31B1856780680DE6C6BBBC43EDDA761B08B9B3E0BEF8399300D1A961A7F33E01C279F2EF8A825736105BBA41A3F449E42582C57E000E487619D6476EDC69961C418828B4DC3BE1462EFCF696DF2EC77841E2241E959724A58A12718B047568D8D7532DA042B90F52E5697BFF0CDF3E7D3ADB95AB1DF7C999033ABED77593717B3F38FB1C2B4A28A60057B4E87BECF4C4471CD0F0A4280CAB1E40E +MAC: 9F5EBC0166D604BC158FBFACC126FE52 +Test: Encrypt +# +Key: D486C426F888BBB72B563713379C89B46829BF157931C5334AE1B70089008E36 +IV: B071CBCE58FB0A0219B318AA9A1BD384166238702F8080C2 +Header: 2F51AF259D74E021 +Plaintext: E580053F4FF3E5D3AE2398614CF62BB6EC26A7FA851379DA14613621E308D11D49DFCDDB36FAC62F5DF62D9A90AD71158E0933B8E2D165F50177A1914DCA5CC86E07068450C10D0D03FD48AE697DF62AB3D8552547A2BCB70CA66585BF94AC44C691A52FBBF08AA89FCEFC01C55207BF945616C1D94D0D856B0AFF86558392D8BA0751EEAEC48DD110737F7CF625F8CE28AA6E15FA32F0D9C7EC629B6BA5382B27EA4009A8BF7E2EC73EDC6065831190C4A5E806800AFC76B0D0A41185DA5AAA72BC7EAAB3D6 +Ciphertext: A52069C224D07C06F5396A22D4541CF91216684C2BF61942181E97099C5CD1462058821E96A7656A8C147AD740D764F8C33B2E2E33D926AB6933101449C58B65F7E9363347DC93D65E93CE715C8D9D6FF44224A357105528EE13DE45D3FC229D7B73F5D44F5558F852A77E7767FA9E86E461D1BA3EE979DB6A4EB66B954310715C4D5A1984C9B1DF7884B89ECB4E12E89D957C0D3EB4B3724CC2D94BFA52439FC7225D57B9F07C03E55B885D9881DD35223E2DFDD5CD2B9E02F84505F0CED5176CDDB62593D9 +MAC: EE667F62D04C0E30186F1183B161C354 +Test: Encrypt +# +Key: 4168ACF6F66C13092A858C285E47B51BCF12DA35525696AC20A2CB66ECF9575C +IV: FE6F080D4E4C632AE9C16603A38152E5BAE5F66FC9000C01 +Header: C669B85F0C419FF487 +Plaintext: 5430A2E80B4BC9F1CD5735AFEB2AA00F5C96DC7653363B59CEC99545F331E53672193852B846E1EEA545EC24420BC5652C5E336391D7FCA17E2CD7B26C2441F0B5C8A0123032DC794D857116B7C5F2674D3237DD8A52D3409599A16EE99144D251B189596AF84E70172E8364D25F40E1FE703D549D68C130B348B5B8EE7648FAB30F270891C65C7790CFB43E06086F658A5E76811102505939F0137B665950CAAE4970DA927327FD5405BDE9202005B561EDF1167EE510E70E5AD942E702BA0027BF84D661CA +Ciphertext: FCD67BBBA40BC4ED1A9DBF64479F5A74A2522297D3EE7F1754C8BE98AE52CE5A5EEBFD8112FCAF59E85733A163154A0F7E6D9A3123659700920E8491511449014A7A09F26524BDF09D7DFF3FE09853A424BD1667073F9E75CA89AB76A4872855378D762DC1EBBCEB2E1749F8F8CCD46A57A3D0765B80AA5381F4A8A818301480D03D1A9DC818957CFD828D8EF1737138AA5E381585B30570915AF49456F9E1ABCEDDDC684684833B7DA7A0903C2A4ADA5F6C7C45F0F964BD0DFDE91AF8462C808F61EBBDD365 +MAC: ECDD86FC78A5705611DEA8AA92FF1947 +Test: Encrypt +# +Key: 49940095B7E052BCF20F7221CD071D0E9B7A3DAD0366D7E0AF94AB95699B1237 +IV: F1C5B3A3957ED44DA469F560285BD4EED65E2B1E91A54D72 +Header: BD414AD80E510DD9686C +Plaintext: EE9FB77E927D8AD30EFB644BBC771466E4E905AC4C693B838917DE9FD5B1440507AA4494A0B588D5DC55B0C709BBA3C41B2292A64203D2C8FC2D296A8F601DF697BB0F9C4CC01C60916424CC7141092B681FE88B7938D74510B0911726FAC2A031F8C75B5D8073CCEE1112AA9A61C181245FCCBCC79C008B42AE3BBE0C7916763098B434C28522685CA9F50B4529023E03971CB3B3D208FBEFBE99E7C41374BC6BF5165B196B805BBB10837BD189A5CE1FDA773982568BA590DBBF7B6360CFB2FCD2E9029E31 +Ciphertext: 06E50E876CF093F45430A0010598A669FE3AE0BD9F20FF79007AD7CEDF56EE320B62A0FC43A1C98470055B0372D6C30FC6EEF7FF9B5D9D3686413833EDCD006252438455AA24E4662FCFB462DAEA6F8AE00B2D2AF6985325EF4ABBEBE61F580C11531DFB179770E684A1C739E9D6BF602118E291AEFD4DB0397DD67EEF42904C4DECB744FCF6F61261BEB4CACE426B8D591273DE680B792462CB56B301819A9E9FE33E050053BF48F1992C002CA0FAEED779B8D4BFDA27E8C59143C87799359EB37DD06E13CD +MAC: E4DF8D80C1C09730EFE7C5387DA091D3 +Test: Encrypt +# +Key: D7A9598D84FFA7BBA5ADC96614E1E07FA9CE99941F518C67F3F61C42AD77150B +IV: C0FDD32A1E8F2010B5B007E45BD11E17EA96B7EC0C55913C +Header: FC74B5F7173B72DA5992C6 +Plaintext: 30473A80D4185E700C940261F0E567D96EBD2FA84ED1FBC692E5614995F922A7D893B3A95D37E0A145B76588AF0A2FE2096B20C66EFE4C9C2C8CF424F8A0A2836FF9C4195837FAB0AC5B558163047C45CB765E0D2FA7999A9A15C0972B766D5F92F285F80C10F005937B8E6F9FBAB6AFF8308A4264DEBFA3DB7AFDDEDA572D523D975DCCA61F2D14250B01EBE9B9063FC5CC5DD9FE9343BA85379B924A56BE263F7F83EEC120858F6DF31E1DEE936885BDA82C2DCA34F33BAE81EC0204359E565DB25C8BB8D3 +Ciphertext: 0D129807CE91FBD456098892E6E7C82391BAE3BC07113A4322FD591DEF78100C8E9CE2E299500AFFA7F4DD88D1E7B8F1E71B5A78CC4C3D0A3336605C0E7F3FF3927370EF652A90A1F26D87ECE0948B63D18E19E0C25C7B5ECB7BF1F000379C8B0C66816A0BEEE968E843763DF7ACB0BF04122EB438EFBE7A563F4C84D0918B3A53D22A57D6FF7424BF8952D503E6278F44D1D546926DBDDF75493CDF4A7810A874DBAE41D990B2A8C18C04A3A22B9220095890D8EDF56BE58E44A6BBE35176A9F044526C9DBE +MAC: DDB687AE659DBA7C1E1A3ED2A68484F1 +Test: Encrypt +# +Key: 54BB5F8ACA64CD305FC3E8C5DE1DBE8ADCFC001F4A6E6E2B02DF9AA90189F648 +IV: 5CA94831E620BB5A099FD49244D2271EE1F19380E8E2822F +Header: 617451508D8F1D934CF9F254 +Plaintext: 86F6DB813AA2055FBFC3CCCDD27AB7DF396E11A9AC12E53E3C0707978CFF92ABA01DE1C8DBFA33D83B835AF68F48BA7BAA1DB9A9FECF50C0B381CB948976F7B204ECE33CD4FF333D6AB5D5E4274F568316F6A869421DEB76BB93A4810C8612477E11DB068521D4C66C91758E433E1D3CD1BD01F73C2536CCDB813C50629FF612EA86BA81408F19314F7FFAD3C3CBE72DA2E9DE1BC90A08C9488073A1D0D23BF754747DE8B168821D5345994A858C638D4DC961275FBE25B733BFD7A022719818D3E24BD7FAE3 +Ciphertext: 85ED324FEC1CD5C755BC996C0CA97B45971A218A1FF9320B80248C569E45BA86C539385CAA1C7CD4118B1F7B16F87C684F6ACB893BF34E34DA6BC7ED7BD818636621B33442A7CA515A70E0AE1130B0FD3713BAD6F56A694D7EA9E2A07D5C4F8D1EB343F4675039901FFC3AE71ACAA484584FBD948206D564A33D67E9AA2E96D3E6BA1C556423D8039C1AE8092ACD4991D198A9391BD36DF7A35EBD8C9966BA44EFA63CF0F247049A215798397005276DB7746E3CF610316C2E5B723257D8EFA12D207362D126 +MAC: AA6A85CC87747546C78CB182C316B557 +Test: Encrypt +# +Key: 2FF6E15CC4F546C5CEE4A084CDBC2B019F2F116A35B024481D3E223C5C25C487 +IV: 765C1852EE23916A5F576AA83E3B6D2EC6800AEC1BDB9BBE +Header: 8AF2209DB62D3DE43D971197BC +Plaintext: 98332EE7113F6EC4BC0F1A0542E9D02927C30013AD80244B0885215304A5CCAA7A7B185A7C5BC9B623FE867E36D76FB72EB3E17521400EA9AD0A43B5C5BB1DDEC6125D17A0D65D973EA3BBAAC7DCE9112087FB587AD5BC429188C2EB44027A04476850223761E6A372A82FFDD417EFBC5368D9E2AA8F05F1D309E2C6DC706B4D131EC55950D487FDE58787A693D9431BC8D8C9AFE686BD081D87DE1F3685C94AC546870A58F888EE3E871471E88D079A152D9395592E70675B9B6AE743D5A1C163FB9C84C509 +Ciphertext: 2E449583E5A43D073C703CE102C3628CE328BF26BD73283B7210D1F9D4707F9FB3E8EBE536229CF96E3709CBDBFB259DDC2C069804AF2E36D8C46D9C80CDCF3EAB46D7341FB5AF035AF250610EC38EC005BADA3115D25649AAB3262B54122C1555F546719F0A5EBC887978661FA5307AB324836E01F987EC6DEAF37A1913EBCF21A35DDDC21A06734CADF0DDA8C2CA4067E9EAE41FB450BB64EA7560F843D46A3D36B71B3A525973770313671736ABE6FDD13971740B297BD62A4C051094183C1D1F2C678F3F +MAC: F5FA0BCE7AEEF417625EE081041299FD +Test: Encrypt +# +Key: DC317FB433C828B4F97124A4A3A4E7A54636A8A71CEA507BA975D89B613AD8A9 +IV: 11165BA1AC5B112F7D42F878A9FCBF07B1DBEA959F3A16A0 +Header: 2F1520318BD5940C5CF88A146429 +Plaintext: 91C2E99F4039BA6FEE838E1C84E7B73808A2D87D8FFF37355ABF907A9AC7B5B61B5DBDD70B006EFFDEF67E10358888BDF8817237FB4804AEC66AE4C5332F531874502FC434BB08986DACEA6284832202F5E5A91E9E0B4628E3FED6BA67683728AA8DAD21D7FA4081D10375E6958579D5E6FC46EC4169AEE9AFD9C76CB82FB1937565B89124F4550B8423B5C3C5775C47E558E4CBD4FEECBBFA5427E53BAC8E50193C3359E6CC40EAD26F85F53A6BCC05CE4BF782338F3401FB24ACC7BC7358F36AF385636A87 +Ciphertext: 29E47E2EB95E86B2AA23CFF4BFD671A6B41062A229F107D37BA8D3981A54E32EE8BE8CC90F16580EE76AAC14E7DD7224F6A19762D5393060C780353526C642A1EB369A72C20A693EFD606A32D323B85ABF12AC9CC722554467A20DA9D9DAAA000097825E8673812154ED97DDC839E0CF4195B3D25C8817FDE8568950B31C1958109698AB4C1C9F3156DF05FD62286E6555914E002DB63C3FA7991CB5178659CF28139F0527F8FBD38C4882280A51A78CB8CBA332C37BC396AAF0356CA306CD57C5781E461B37 +MAC: 149480E5F7AFC55B5A6CE0BC3DCEC180 +Test: Encrypt +# +Key: 1D82F4B9B508C0A4DCE439A63782FF39EDEC969FE5CBE2EE415FC72FDA036AED +IV: AB3D3A620D804DFF07346B2BF1942568DBA7CC6E3515A8C9 +Header: C92E6B2C542DFFC8C10BCC2B571A19 +Plaintext: FD764EA5B96A7FC09A01B7FC4BF2225692D09DE95835BBBA5605010D347E147D2EED45E831865B19025745F3E286F0FB22BD8CF6601A73E399F0076DD9B6A399DCE407730ADA895F3B37EC3222AF238622BF6838272D855EB919D433E226FAF0AEC82CD103AF3A57DA83BB7AC6FB6C456BD6A76D30B6F2E19A10438D4AC46E41D8CF06A8DCBCE54C0D423FB6B7A2F28AFF17DF3C33628A997CADD56A34C517C144FD4859CEC05C350BFB6E8A38C1D9C96DE9C6095AE1430D93C7C29D2F665DD75E1A8595D3BD +Ciphertext: 0633EF3FFA3F7204E18BC0818619BADE078F3BB5B78A93E460ADC29402AFFD705BD6BB7E8FC393D9F3CDA91E6867F98993B1B72A6FD83DF4384160B7CC8EAD23D3C5A223D377A5726E33BD2F40F539B64C51ECBCA1A98FF9C42F53DA5B231A42B69B02C1F6090491AC62B71D2454BEF4F99BC07B6A070183022853DFA7CD93D1005FFB5666BD76CC6B3B2E9418802080BC87681429C44A0F128693DB901961BAF059200CEB7161E7E7B6ECEC24DBFC86C16544F7DF5589208064D4B9B451E759FB2E2BC254B1 +MAC: 0265CB307D6275DCFC72947A8BD98287 +Test: Encrypt +# +Key: 9B0573DD2E75C2FBEF7BDBFE2D3C0EB3D3179FCD8C7EC6DBEAB9C92D32052CA2 +IV: 37808521585C50C98678AA76E8F1693D7FCC474F670726D2 +Header: 671EDDF8A606374E7018C72DE034E0A8 +Plaintext: C601BB5CFBEC4C9A637F01D0E86279F764293BEADCF5B6EAC167F2F375DDA369927931E87225178D87656481252F25021A6E4AE0DD7F8F00A49ECE4D1BC6F1FF96B5F92AE6849CDCA79B83F551BCD1457A278444325A16FE2CD18EE39251AEC55D9712CB00EFEE88AAEB9722D93A8A3A5A563A0366C4BA82699DDBFA7FAE0D230B261CB6872CBE5AAA9B75B45F35896E7AFA6EAF9C2D2D00077957EBDA67633F2810413B68C29A7F8F90938419CA749D8A492A8D5DB080FC862E5ED74C43A74FE4464E5BDC20 +Ciphertext: D82D3F0855326FCF599393378C1FE26C0B8E8C3CDDA5CA53366E110528D65F939997B119A4D2A6A5F1E37CE96F1AEFD9D13F3D5A0DAE6ADD5D7308AADD2FF0FB96F27863B04F677A1DB77E4766F9A5F07A36FDC06BD9F507871E67D5F08565D80F69F1F149A7903BA6F16850C22E773140B70B0C3270EC157186ACD1E0B94F27BE4E245C5AA7A0879516AC74810C26D4BF662B51AAAE45B73B8DC63122CCF374F262EF95C7C96028473C16DFD8530CFDF50575D94CA0EC07A6F61EBE7BA3846433C3010C0C58 +MAC: BF6F6A1A631A0FA98C9DF4F501C0981E +Test: Encrypt +# +Key: 24FB2BDE7677EF5002B6994C565DEDD6662708A00C949C02219955B1D2BF321B +IV: 446EAA16AB3689439BCD9460C1A7223150FA0C0EBE279A82 +Header: 187BA3D5F3656F7AF81800D7BB1E2FA6DCFC +Plaintext: 53624A3E8F1CC1C022BC0551353DD646CBB1909885F39593B0BED4675589C3C408B2DBA41474770B2558FB1F47AA976F70F25F219382B08523C963B5BCAABE4A38D88668435036EC742D35374E9AA6F6B4C9AC6786AF1375A6AF57DA58F488F5040C8CDF6DE58484F327E2E9DD67A0D2994194ABD7F44E36217F40DCFB3338EF19A470E6AD3E0AFC8166D2369DC9EACEFAC17944B8B9E4ED27EB8B0CFD4B43054B3E91C0CC265C8520BE92D2C9D17C41A9E1292B152C14FABB11643F07895D355C0089A3855F +Ciphertext: 1279D5D5BB902668D087EDA2BD299CB969A114C8F2718EC72AC3F16BC78AA16A6031C30D1B3846BC5406D84E9A951F7CCB3C855D0D320A9A0DE2856122F9D85675FD5531B65F7F4DA75A6D9D65EE8B135432141829C3DD55F9303CF55A67404212935252811D884F2E7151531DF916D9ED5B270F3956277A4B6F62DA77502746DD2E6223F3F92730BBCD2A85CB2CAE750885884B59DE50A66FE61ADDF49533C4D228D3F12DE6E68AC95BED3A87E9E511216BE43A38BCB9DB8E186061252B6D10850AE08933A4 +MAC: 057F225F29FE23EC44F1A066B43DD220 +Test: Encrypt +# +Key: 93B35C8E0E4F0FC82E5AAC460B5EE489DB133757CDD9404AB7B4A6B8B24ED162 +IV: 1733FBC0B415E86B8944C85E06AE0C2B4E46BD38FB56851E +Header: 446B95868C8C0B480FC84D946DBEF63CB51F0F85E1162C5EE158837A8909F314 +Plaintext: 5361311C214C6639937EDE03E19C1587180B68EFF9D099B96A7CB34131D57F61D500476149C7982D0EF676494873B0DB16668AB5F522118BA2BB508100FAD7B77368F29E3C392D33B85FE5996ECF53B1A9B4C57468FDC51415B33596D24BD4431C9305DEFBE93BE4D168C30E7F603159E1503542277DCC28A44F12C3B47AF2B0497C42B4CE9B9B032F3E6F597A877C2D9EE87FBBE7FABE9625EE00CD9F001866C33CC4C09D48C9192E68A1190089B09FFE8026DAA40F57E3CDA57CF03F43A9FBBEDD0E00FADE +Ciphertext: E6C1055FF79EA4CC277A30422B987EB1F0B767DBC73F1D0481D907A322DA5AD96FBFFA4B43042ADD9E26A7AFF9961238B9D317A81E828BAA37247F94520D9A111FF3C732564835032199DF883695355C2EE609A4955F5D81B67E78204A52A4597D5D40D4E067D6733B1F16A43E1E1919ED87BB68BF3383D620F706685259C1089DF2C945BB3EEAFFC8D7033A4A6179D249D4B4C0C5A9F074402E0D81AF832F3CC347BDA29A057D704281314706AD35A9B1015CEF74035CA9C255CF704EC225AB021DF3D7D553 +MAC: 627D4F14B21528AF731130C23EA545C0 +Test: Encrypt +# +Key: 632037180D76E5D87DFBDC46EE44D6AB8108C37E04BC15F8A323AF897C478A77 +IV: 22D5F83EA52C1AFFEC826F026638DF4C1CC07E543832F2BE +Header: D8F543721630E74B6F4E8E30884EACB546A4E1295C163F0DE66039E6AB71689612087E97 +Plaintext: 41CAE98E7CF64B53D18456199F49E91FE9E9C4DBBB838CE4D06A9724A4C5AE3C92BD50C4C1BF65D002DE7D08041FEA4C1570E942A4E90012798CB9DA3F8BAE57D9D6BF288F9EC7486D102395D0506B509F9A5068F91B75842FAF2C6937E0B93331F27D082E84B03D2B0CA3103600C73B03F60C48FF9CED2F34DA09F1020095E8E8BBA51DE9C8CB99C46444B34FF515A60C22EBDA1E727FF5E8F12AADC6D0CC661FB3A8D200CF2068FD8FB6494E05CB3D9B643A37D90663239B638CA98CD5C3F2631DE685318D +Ciphertext: 4510246808A2E80B295AF4C9111EC1532B40FD37C8CCA4507CA6D7913D59D0763769644E0F8365AFDD765EE1D9810BEB781FD4B10EAC31843BD9468D834AE19AA74ACC3F260906888BD41418D49E848F4C1F24622F08D1C1566A7C866D464C046C45704450AE720EA64C1388B09B8835EEA7A12593ABD269C15F1B1C75AE643A005449EDD3D06001029C5A58F638BF3355ADF19D72FAD755486CEC1C48DEFB391A2FC903A31F1E7517A9C82170B43DEAD39F82742A823FBE14CF0D518BEEAF3178FE05F18650 +MAC: 17C7EA18CB449DEF8E0C03E3A2F1969D +Test: Encrypt +# +Key: 3E7C2087DAF08665C52645A15DD7B1A9834BA4194429B60FE1D31AB8769B1C84 +IV: C553AA1B388CA433AA7E984AC8C71664E14F90DA48460A74 +Header: 09C00C2A2C5502316513655DA41BE82E8D3454B2614B6C7F3BDCE01D4D7B43AB7CF0AC32FEBAA64F99D0249527089896 +Plaintext: 800467FF20FF4B955EC914611AC4304EEC9B025471760E75F332FA8D22E80ADDB72B3A688906B12637F04AE6B39B9FB6AB5765D40EBFDE596381BBAA6E5FABCD5EA55C21E9BC5B44D65F8A8D5962B8A7BF322B58D606E8F369866EC006490E4A1E9D1F1458D9C8C7F7DDDF9FFF43F78C40C2DFEA7DAF1ABF8357448FC0E8563F69E39A6FA8E2908204BC208994F4DBBC745B39FD12DF3ACD114AC5D02DE8A3369EA7324814CE19CCAA4C23676BEDCF890E955FB876B632BE708336C4067B66A840963672219E +Ciphertext: 33CFD40C5B62091FDA64A8627D1730E85F4A1DC0880885E6D0F4ED005EC2D69471D2327871CDA969B78C01CB6F4D96F34E98F0ADC89A703EA2C5A0F076CB6A38EDF8A12DB9BB82017EB65D84F73688D779B645614096448436BC7A0BAB243FCF4F69869626AF7AC502C406546B261CC120390FBB386A776D8EE736CB61EF83DEAD88FBDBE2061FDA5CAA25CF58BCA548FD84FE61F274542906107BA4BAC6F6CF52D9DFCE31746FB70D265A58BB1E27A5CB8F9D58A66802CDFE26952DDF82AB111CEC8B89C81E +MAC: C8D93599DDF9598B61421C86D5FEBF20 +Test: Encrypt +# +Key: 670D5E6CC229B515F493683930C0074CB512C486D50F65B95B9B3E70C81C86BD +IV: 505EB66C7012F8D59BD4D5EE87D2E4FD4341793620B0226A +Header: 93A40B8BB7D8F5B20C3C2E6436DA7BC837575728D043FAF7C71BBCFD5E1B241116FACCB592F2B1DEF704CA8D20082289DCB1FDF53EB9563E +Plaintext: E1B5F0221C766E4C4F83869D334AC0CBB20F11385C1A237B9F7F88F21D3BF4B0AC251791F2D69A177D690AFABE5F06AF419E98C95F52A17F487BE6457800E538277F98547B89C0539155658185DBF7C919E4A4B6A25DDF4A1423B343A93910E824751DE7C2728AA3E4E78FB09AA6E686C370CEB6F9CBD758E7846B3CFCDA80DDB57EF11E261E5C286D643250801DBCD27C16BFDD1F713D9519B6A0369D839BABC214F13B8B0F310D0297BCAB25EE81F9EC9BD6C7FD0C05AE978C2ECB6E20E9AC6C7FDC81AAA6 +Ciphertext: 79E68C1B209682ACC06F578E32C4A7F014D04CE8A3879FBF91983CED8DD54C89B94F47AF9B247584C7FEEFC0718061373D51B0F915CA00698D904226AF61E04B9418E738C66B7784DE15267DCAE789414DC593E185CE2C179606D54E5EF39FB0F852806E785306A7071C3BE38266D7E3CACAEE90BF039F208535F81963A04957E1AA8053E79E04C3826AB5803E66411A2971B43694E1C43E08FCD83F7D2144BBEEC5377A4C2F130743D893FCDD576495F5723E6760509A34D61246DBAC048541F659B890A387 +MAC: 9454DEDEF18553AB8062513E5E047D48 +Test: Encrypt +# +Key: F3D2A8A05A18C46FE0C02337E2E3F9C3D4D398DEFA1105F05E8A9EED21FBBA58 +IV: 8ABFE6425BB19D44DF19A16247121FB6D36E61A69257FA02 +Header: 3E7D3590A2A96B0D399C7A497F755D6D882192A73FDB5AC5FE5511C0F8A94AAB7F9B25979164F613515D3D10386E1DA1CF5C17A8BF04D5E9B97923DBD3EFB75168BC51A7047B0564B73C +Plaintext: 9E254B9F3FD11B47D00C49472A3308883E7B92D7377C0D435DD41C2A12523C39EC7A468A754950B974149135E7709CE1D47B112F8A952C0D23E732BCC88DE6E11F83663C242B03EAA489838A1A165BDA553F3F1E171021A686CCEA5CB01342C0397A616861AB8CBC8BE7C6EE160208D3CFC62119FCF060261D3B3BC0227F50BE60BB38F146E00909419F3B1F38827A627E529C9985C540CCC947999159591A344A11D43B5533DFA77AA8EBA9214695BDCFE5D11155A30CC2FD59A4486B01CEB9E996102D8A06 +Ciphertext: B3A9718004CB923221C475119A7844C4DBF4DAED823717410CCA204D442FFBB0C0E846A5028C7CCA46CA97379D70AD0A2B0546D23DDDB5C7166C17F7796A131367A3C8A4644BBCC218C6408B159C1C4158C00FE76E37D110CD675D264A087A53B9294B66A6BBF6668F7313F4A93F5745699C5896D96B32C9C5BD89A26BE45D4750B8EAE87A38335F6CC369C25CA4A6A67EA8BF84E140A8882C8CC9BCFF50772A7B5A1BC3A734B6BF1C9869B0FA630E5D655ED2AB1233F9A74531499D5074BBE34D0B930A3E0F +MAC: 1F3076445FA9CE66EA2B1648409720B7 +Test: Encrypt +# +Key: CC3F6CFC223EF8F5E0C8916E8824FF941FC89CF0071EBAB56D6D1443A31644F4 +IV: F0542B41F8BFF47318255858331DD63359F8CB7B3094D235 +Header: E9E06FB4FFC5245807F24AAC7D50E479E550EEA8EEB682E8CEAC26E86A9DB5DFE8425BDCF76456AE49324C2B0E7BECB45FAC0934ABD94AA9D3D997B04F72731EFB2193F470BF5595C834F360AFF7290FC61188CC2184C0685D155E91DF1D194535F41184B6A6559B +Plaintext: A3D6FC8B6EF1FE560EA6BECC1AD052941992A0CBC5C7523CC8DDC5824A48C6B6650A3BBD8112D5E2C368C71975EECB3EB11F71EF9AF8CB9D94618DF71A6D3E1D120B390233E7A2D5FCAC9C78A32B67A74042E776DA1AE7DB386837D0E51EFB4081A08B6DB51077FE82140674BE0ED766312FEA9FD571E045E656EBD25E395C154D7563E887ACFBA885C77DB74A83C10856EE087EE2F4FBBD0BE00DFF05AACEFE894CB48CDE099676F7D8512DBCACA57DB5DE6365F807081D45AFAFD502BAB48F6E23DCE9B6B5 +Ciphertext: 2E6256F48BC887EFCA8E2C55F7C4A221546F149660D015E62A2354ECD9CB08C993E2CA8EE9E121A53331F5ECF3A556DE45DE02391ED2439DDE9A111EC7BBD87CBD09C9A1C5E044BE2F921B830DD9E63836E6827609D85DAF49CBA39B8170BFFA0608C200EE6D4C3C2B01D41BDC98AC4314528AC8C5B3B1C5D10C1490E994AA9C785BF05722762AF6C00FA2CA286FCF1704784DC3BC2C3588FA0A19AF60A303FEB21776FD70FD67A3ECBB0C2153002FB1D4CAB37E68C8C77A35693186FA4E58D39ADBB120BE84 +MAC: 1593C31E84218928818390BB404BE668 +Test: Encrypt +# +Key: 19AA45F69A69049FD527FE9B759647808D38482866CD8187508150FDDF689872 +IV: FFB909A57EE27B27E531DF81FF5AC51FC64A88E4DE738972 +Header: +Plaintext: 5A8E8FC29C585B118FF037F9E85128295213448D391DC56FEB96BD393606148ACDDBE56F02390FA8EA227C9F2F3D3B2EE50D5AB92FE9F525E9B8A7DC4265ADDF4A9E67115F3BDE890AEEA71C7809C7AF5FDA50847133AE13A6A74C572E38E7F7B00D7B4F90C261EF97A09D3EC559F2B16CBB0D8E7F59586014C70F05E11D61545998C3BBD09F3EB47DD06EDDC48961960EBC4DAE2F3D26FD0C3432C5AA3D3B7246BB99AB792A5214D3F8341A2A528338F22B5880F2C3D63E37DB2285E27E88F37D564718ABC6E8C3F43D9BEDDB23AC86BA8797B1377250390CB4EF6845C725283780A9ABF6D930F2224E02EDBC42BF8BA6721619210F2E +Ciphertext: 505BE005379012C4095F4AF9DB60489072655943A62BF1AB2CB25F7B691927F670E7DEE03FF58887A5DF02B8BD1BFB2F3AA1C41A3C65F2C5A4F27365C60403E2E0B3165A63641EF82890252F2F76C6A52D484F4303DE2E474FD9FFDCC636D3B56A991A698DB8A9E7503BAA32006119BDD580EEE1EE043739A30643273424F40961DC392A849F13E456F4DA759F7FE7B10A115208D6689ACCABD59788F2E8BCC3C69E6DEC49D8FE7268F97AB28D0A5248F7433C84B76E2A6AF824358D6876754C6B8993F3A5BDFBCCE8BAF343A648797F4B071F0E48EC8FADC21CCB28D36E1CD891BFF68B57B87EF9E1BB0585E942C573A05BFC989AF13E +MAC: 29ECC1C24A9006961AACFF87231FCDFB +Test: Encrypt +# +Key: 1F4F3D110E55EC98F7249F52EB3CFDE76E8C1B4E8BD181FE7D40925539AC2CF4 +IV: CBDE7CB0AC9254CCA79CED21141D9A9DAE079FF240BC8D67 +Header: A6 +Plaintext: EFACE4BBDC58EC877549ED799CC7CED76D1AD5CA62196CD9A55B38AF7BE6AF470C23E287E010826493FA1F3A5A981D3D23655838823426D82F1179FB13F0B42CC40FA5BD826B6C6E7636C6E244223BC462B8577765393A5D53A1323DDA2FD8DFFC2692D97FA1ABAB21BE480639FE2C59136A7CBEE57B759BC93B1E9D8C08E4485C8A17A637EF7178226F37EE7FB313342D9EEBD4E57CDE999A03A5F2B013157C2336D82C87E02C9C1E40C7D000C15EDA9090371BBFA3C4AF4C9EEEDF82277A0EB31908C2CA909FDA8B2919A4DEF0B04D2E4318F60493D142448143C535C33CB17B87A5A5F0C4CAB68B6DD4A2322149DB7C918926F9FB44 +Ciphertext: D6238494DC5F1F412D2E987F52A2634D162DA61C699F586651327A04EBE3F807FE84F26F7A748D3A00D6061C425F7F4AF7AF5DBC5F62218F1F629AA1D617DC0DD85B3126E59C7C4E6508094555A3ECDB6DAF4A893DDB849A64899A006C4D0FC6E54F138DA828E81C4B603CAD925DAC7BE2C1A4641BB231F1D480C5DCCBF547962C48F866A3D708A2405CE403F824837BFD3718E27FDACC627A6A8B6ACB1D49320BC76E555D9C9C7E3BF74A8804216BCF5FEDCB99843BDF475E9937FCCB783333F69F5515AC543C2DFB39D0EC3F382CBCC2DB0B1235EE4C01DB6BB085BC50B17ED046B1489600DCD8C8708D22A0AC7D1B121BF80D05D92F +MAC: BB9429D1D6C25AC2FD5452F2177C47D7 +Test: Encrypt +# +Key: B35257FFF6F05C38D648956041C5E9A0A336E57BC6C7DB00EDD8EFB7FEA8E2D0 +IV: 53B486AA8D58EAA50ADA168A05C1A74597421D8A8EDC5446 +Header: C77A +Plaintext: 243070F10A86059833989CC2DE824CA3576B9C3AB59029D0CBE6FCB16CAA798EA5E5D956B6B178680629BE4EE26A4B912E57155EF73CB07CFE363136A9DC2807918E384FD2177575B7AFE8F33EB2B1CB4ADCFBEC00DEBBB51FE81C7539EE7AC05ADCE680655D4155446DABA688E8C63375B6AC6BFD47231EE97CE2DC2DB51A4C3EC79D83807A8C316137DD8B4E231CF46568DBA232C09B3C49F5D6E17A7762AE0D9288C2492DD79D6A2D8A6A7530AF8475FD32C734BDE82F53391DA7ECA57187EA02968857CB448B8B12917DA127138134C5223B9FD5A4DF78C5CAC7976496167E00EAD556905B5A3279A5C7A6F3712C64C650E99CFB71 +Ciphertext: 8ABD320BC26574F2B42198E321D5D0CA164FED7BB24C8DDA2F5BBD474E5964A2B3C89FA1CD2F827365E39039F6E37DCE4425931A918C5BCCE858CFB548CDB95CF557D0EA23B1F2BBC61B8657056ECF854B1EB3FF29E2D5D2FC1AADECFE39DF4294537AEBC667E4E35F68F517514B907455BBAF7EEF3EE81178ED3C3A1111F2B9A13BEFA4A792C470EF1D90FDD8F1CFB97690B4C81FDF1F9C32B6D092056E85C071D1903BE63E35C1539170D47B664AB1DC87C6CFE3252953824165A7AC05762FF35F59E71D66187167278C1FCB91E3F663C3876E6456FD30232C2FFB7873CA74B4BED0C10665473113146377519609691FC4C0B0794B4B +MAC: C31F41C0AB3F25ABC1B65A41029F1C70 +Test: Encrypt +# +Key: 5C71A75D01B7C34F0AAC64EF643B8260D0777E70A775C90A8FF2C411DE19A809 +IV: FB92EE145508B342931DC3A8D38D2A522464F5C37E2AD455 +Header: EA02E4 +Plaintext: 97FE0A7A77A773264300540B3FD90DD89E3555894E54320C7746BA0AC6127E5C0E50A9FF4A5349DC62D431421934C7DCD77FE08B56E22688D60740DAC0FE91357487C39C419692A4E70B4236879C31E90147B14B214DD0F1F248A916655DA00ABD93F421D7E15D906CC0E6C29624299FFD7E39A325B0EDB5A720A12C9A8445401D1A60B13B6569D9FAD55F83AC77484DD8363B0733F42E89E88D12344C21AF140F544CFE05148EC7A1DAB301997D3B01838F8A787535617BDDD0202DD0BCFA2D54AAD895E1D88BD8CA970D5157E2EA5D1033D59C0AE25C7615517C900B76970B7CE0A3035CCF95509D73A09D571FDF1F2397BA86EB65A7 +Ciphertext: 90819B6F127CC16645638A4D6526CDB50742514B8EA9E169EC5238D613B117751CBA839CEC745F8B36DD5D9AF6C6CD85EBC9A3E96F69321636FF056529156AF4E0BB22FF1CB79C9B62D8AD8421737E75175B3C992F3EFC3B8C48A97426E71D6BD20F060CF791C9929CCF2556FF6C3A0AB3CC88075157DB8D003A4D47B03C12E02279C440F250DF9875C4F133CE6DC61D8379E800406427664598104D7859F03F5D94F8A403E14D626CB5D7B6D182EF0DEA340AF36FB58092D774F49DA84C0B538A12101E9865D52A769E5EE4EF843A6EE4DFBE66F45CC0AA6B5D40D701FEB2A75FF7D8DB5BA53917E8295F9D43DC268C9E1806FE58F4E0 +MAC: 0D2DAB957D643D988F5C7D19DF000651 +Test: Encrypt +# +Key: BCD830123234D0275C4840FA6CF9185A2422C0819CF69DADF2B181FA897451DF +IV: C2DB40544846FAA28E8654503D39E54E03A169CB09349578 +Header: BB08C827 +Plaintext: CABBEADC3274A20060F5AB5F6A8FCCF59D0EB219CEB15891096D1D13C716A7A8BD849EFDEDC0309CAEC66FC51F068210A9D804AC8D8412D146BD6F740A55A78F046F8AE1EEACE127C344B13D1FDC8942A76ED5905F5BE18F19D67E7823FE1CE77DFA5E2C03648D0C898C0893A559A766E444F0B8246F92AC401EEEF9D30154B6FF02A31E259C9884DAADD005094BFF00299FF822AF9E09993E234E4FB95E06832156BA5C278F1972A99B3AA7704D7EB764665E90DC2E0167A600C4AAB667957A8993214BC03B215AE9A7F3A862CA1060C0ACC2DED6256121B4061A252A111553DDCCD1C67276612F07906951B031F5247E850D288F98C1 +Ciphertext: 0495E87BB3111A5F6911A6E278ACA6C3B35D3D64CC49BCCBFC2997E547C6996F880C5658B9F76E27D30268D38A6635559D90311DB1F0E26C2AE5F9D186CF9AEC2F39CB4517D7374E32975BA10BAE1C1C4BD2BD251A9E36AC1CF2EEAA624F42612E684A55340071EA27F3C7E95003800BAFB69F1B8C5DE088786F973594BD8EE37D8274FCD6A168F5673929397229DE14A7F1375D0121BA9630B03A12B87E55A74FC4292FBA9F51578AEED80D1B123A76E6E73F4F3A0682669546FF90538B10938DA29D14C35AF333CDCC011EE2144E8F4A57D9E5B5EE69D7F2187DB1942AD4AE8F794A437FDD4972EDC3DC7D610C5325B0599A3AEC6E41 +MAC: DE813BD5D29605251867F5D2DAB84B86 +Test: Encrypt +# +Key: 03E8B4C9B0AB261870C0E9F2483D1EF778EED04415EF95B0CF475640A7B73D81 +IV: 48545526CAF726955B564FCAA4D93BDBB1021028993650EC +Header: C4173AD09B +Plaintext: 44B77F1440786FD3D947D038B5486C6D87BC812EAC56BB01A932D583FDCE57E363E054EABCD4C0196653BEBC23D70973CEDAF204BFEA07E5ABF716A28408F532D1DA9A3BBBD4FDD8C92E7F51920C2403373D68F63289300DF9ADF316C17C676CE32E244A5721D5A3D1FA56FE8E8C703BB8A46CC8692E3893BCBE8C59BB7F05A377614F6EB117F806669E46486826AC0B1615B8FEE280A68164668E072F4DC05B5D68584F6AEFCA293F82AF1F5D120E118BC178E4963EF02CD62BABFE509F2172FD6A5614C24B7C0533ECAAEF3009D8478DEBD11EC683340298AEB21715243BCBCDD4A54051849598D15FBCD4BD8A3B0FEDEB3374DF1B9C +Ciphertext: C91EB75E3CACCEAD2C02BE1CEE453BE066E4EEF8175B2A9DB497DFF9F091F9EBB5BEB7D58DBB6869932DE9690BE5254D3AAA18EB9068C2ECCAFEBE1E0AA889EFA45F950887E27FF0F72DF9EEF3FBB97B94EB0D87F9A7F9419F83C2E98E8FEA28C9755936E55CFA9061725A7F3E59D07B41E9B39A974519C75255F6151EBACAA633A4C8113E1CC96F353B74603235B38C89074CB511D0479C4536881342C7C83166CA6A95134850C5C71D9E3CA6FF81894A4E8C85CB8B05F088498149E00F1B506A7F6DEEB97B17AAD2D933950ADEC29690DDF311DB3B11D1579A9D67FDFCC6DA5A34C97236306C240C38D2A645CE7EF264D53A7C550C01 +MAC: FA44897060B2B5F03CB0FB23947ECD20 +Test: Encrypt +# +Key: E6ABF975ABBB74671415FD2015BC6AF9EF392828A2267372AA007BBFD4C20581 +IV: AA07AB99C65427AE2ED33B856F30A9CF7B2FF0EB9FCE1EF4 +Header: 4A788D5C9CA1 +Plaintext: 4C7717A2F89EF0353EF30F71D1951651BC3DAFEAFFA8A257AAFF501A66F7835F525A2B0C67C3BA37453B23183D5C1BDD7A7205984CC64D2B90590FC4CF7D1890C48CFF13EE74D0F1D163859C19B312567597325D22BC73AAFC7C488A9B3B8092EF6082AA346500F48E1BA958C6575F9850144860A15D84E53FADEB828FB7B1F4534DADBF474C0712040C445C53A7BCD2CADEDFFA105ED2827936458853A25EC152B00075A6576D6726FD12EE19FDA889C4A9321F0BBA772B319014A69EA9905D8DBB1FB1A193D75A5C3438D77E192920ED57908B2823813F2ED639F077705F0E13FCA35D68C62B181910FF1A4DBCE6AC919F635663F552 +Ciphertext: 686F02392E9574A0270FD4B46DED951A4231B8E20DC078D3A0958B0ACE59B4373634879137389DA7D21BE89F06FFE8E7E8AB35B24FBD9796196748C249DA3E5E1D8D1F77986D78745665BD3A3B6FC5FAC54DE49F7D5674B31D59EFE9FE7EA6059D539046D4365648D8CE4E699E2C3B05999A4C7949F4ABD3E4289E79AB0B1A22DBE870BA7A0ACAB8E7304491C9DC98FA50EA1E212A49EBC7CA93E4D391DB65C2BCAF25BE26B359A730BEC89084884722255D49467E425C4F17260C7704DED1E9C771ABFCFE87A13D3130F4C6CCFE1B4E906569B2D7D6878D6C4DEBD9255E754A07CC802365A891FF90CBD0362B2178CDFCA0407A933CCF +MAC: EC2F7D83B0BEB5B5ADE2D325CE7B8C36 +Test: Encrypt +# +Key: 4CBCF87852409320308DA3805880EAADE6283107DEEECCE08D5F88B6277B6BF2 +IV: 1F20A07ABE9B72D5F469574B6B3BD8BD8CB207339DCE5B8F +Header: 1B382392073DA4 +Plaintext: 37CB2B637DAD94C07E0DD877D732E414626A92E6FE7FDAD593E467C9AE2EB242BA4F33E9B9B493A80F13FA1F099F5A44A830CF05845227AC825D09C3085BFBF0DA5A724866DD77281519E4EAB0D2DFFAA8C0D349FF5D3AAC16ECFD9C027DECA427083F39B004B62DE25B563CA7A4389248EB3D6AAFEFDFDAE14B436BC91D710478EB7F3D53FEF1683470836953000D2E46F2EEF09222CD012DE8029F9F75B39CCAED763E8B2437F897BD8B86C2CAA798507C12C83DFA05D61751A9CE160796274CE9B8490E8BE4769630B67D1C7692AD5B1CA0F916CAC199C5B93BCC74CE0099637E25AC51F7678D7F89A200A37051483F693FAB7CBAB7 +Ciphertext: 0AAD3217174D27220A63DE1C8B1DD54B27C768A26A3F459E0D5853EAEE9C8ED2C8B2654027692B4107C367206954A759D135896052D789065C7D09C14A1D5607F50B090B0B01C42288248FDD6B276B0DC48A9E9B79733C937A6BC2E15854226E6C9AF3EE7A6805A590CFE6F4CC962779430F84158BB786DB9BF7984721D227D4BD1D65A21BB9FEAB765EAB52DD9F7EA8C6E45896B06C6D4273E786FE4BC83615640FA2BF01AFD48416FF6D65110D057F9A36804065ADA40C135AE2D3E917D0F4BCC8E28F6DE3573D6FF4597DF20F15E6F81EBD2332A5260CE8E940EA3B8B1F5243F6C35B713E605C72B4E067855012F953050E625EF1A1 +MAC: 12378514259C23B3A9E4B37D10BADF64 +Test: Encrypt +# +Key: E471262E74E529C07D5255ABAA251E36C94EA93FDBB382D1094AFBF0C869D490 +IV: D7B18134230DB22F5FD8B073C0F5ABDDFA6EE0504F05F3D3 +Header: E43C2D060F83E913 +Plaintext: 50AFAFE6EC564DCDEF9BBABCAFC3FEA809650C02BEC88B0DE2188C3D78C7C8D716638322BA82FFA4CF5C94A2297E4F06F37F6D9967642B9663D8A854EBEF6A2A15399AEE73F35D26A5CAE9C95816BAA0C04B54E33E72A728DA976D362763141071E89E52F436F277058B188ECE08E9A4C16BE58E0D3627C6ABC347765A77A22CA8B44AC92FC4A9E31B93EA523AFCDD7EFBD69C38914E6E254AD4F5AD44183658E643460DA01E89220852FDCFA176A605AB3432950AFC16CF9F4B9A1991C1B204CCF3DC9FB85E31E0A4544D9A4706785FADAFCFE3C61C606235740E66EFBA124EAA1FBDA98F3E4209DF4F2881C9668F30509A93743404F6 +Ciphertext: 5135F4495C300D57E7767F8C7B17CB39200B17F395EB8035A56BCEF9EF6362A5E1EC5D66E82DE08F4207963232CA76DC501AFD11CA772CDCBB42CCFC747FCD25D591D80EDB41AD185AD8DAFF2DAE2126475FDC88EEC438CFA7E032E63587FB81389199975B99FD08A019351922B44129BC80AE4BC57D38DF95D6C863A782C03D42BAFF80A559B240934C420DAD8F60D4AB3A545C15945363A593791E922D1330A43672A3416D200D66740FBE68D88EB085A9604B4B974F4871959B43F7BB58EDFA57C66A3AFDF7DD4829F351B68FC63FEC48701819CF14610FA974CB16DB618B79E6861AAF60765EA25B61738CB04126581987D3DF3A3B +MAC: 02F12F5C548C0E14D55689DDE7D05F5F +Test: Encrypt +# +Key: E79E3A7F104A823AC5794E8456926A8DFFB67B151EE82F7803458455C2139B7A +IV: 309A011C50496091AD6ABED71D7C86EB6978EDD3B406B465 +Header: 688D5629C95A215741 +Plaintext: 39CA43943A6B4E8609B487439CB53E95392ACFCEF27398BD80AEB53483F8C2FCD8EC5AD34F768167CD766934635D40CBAA1CC53C69E7042D5E709DFDE3C63BB62E7458EDA06BD06D036C02B03CF6AA6AA1FF9F57BD2879D252ECA150565CC63BD3DFE2CA7384D9A289DDBFF4C15F67FFA20F165322399B12502DCA7B25DCC143EA525F95B4C6F95DE732A14B2C3279508B1166BE11889BCB9B0F0D442D1253FC85991D050126A55C28BA62596EE6F24786E2806642FA58F2D30DE7C550927C7063B8A8075A4B3D7D170843B7805143454B71E729A06AA8B6C3E0CDFA89A6F44203E469D84911419990DF8EA49C13B9268C6A41B32A94BD +Ciphertext: FDD96F1C1BA8460C0DB3FEF5A5CA1B11FDD2CD45C54A77ED862E772D08319709DECCC50A213C11E2F8CBB74EE835B7BA0D8AFE62428ABF88008D7EBDE6BA938D00254163BA280B34DB9732C0FE6C0C5C1BC4993E9F6B6E46428AC1A49E1AEEF5BD7EA21DB4093321995AEB14075EF4ECE3276D71501A6952BBADF97013679C1E143A7ACD92F686468B28663EF5390D4FE445BF282F86262FE2B6029A3C3A22FC9733FF7755BE35A1978407DB9DA9B34D02378A3A3A1793F045ABF51FEB4F79DA90B5CD85DE9D3E89B622E0509BEA3CF946174F1213FC143D5EC11B643B775ADC7CC32C1F52015E022CA2CC9166C710863F2938F02C56A0 +MAC: 0605EEFE4DA2487AAECD35DADD61A5AA +Test: Encrypt +# +Key: E3B91FB52076CEC53E16E5BF0E98C2E20B2AB427C86FF8A16750F3F52D2F7CC4 +IV: 0E739134B53214725A0D2D3A4A0C9729B993932EA05E377D +Header: 9718C5EDEC50D630352D +Plaintext: F86334832A3AF4ACD462C700F883CC6DF0D41A8DA4A319E622A40B8A2BFD1C910CAC9949F90E632CE28E51CBC342BD69A1C55F406546B958A79614CFB1463D385BD5EB7B7CA64546249F94DEC88CB007D66D9A5CD3090A2A34C55FF80C6C2A331FC4E65C3DD0A3120EF6BA9E031D794924F851AEE1610E0586AFF331CF9D0F5D44A24524DB7D9B407570F9707372D28D0D1F142EFE7CEB369ED7A96FF09E1F21C8129F68DE5A9EE911348CE7D442D76DD7357A6AD84749D449CBCE4AEB5B832BA26E8093C6EC480C86F8AD6167298B5CC7ED58B191415479D203E0AC12E2F215A851BC16376503F1B476BB94BEAA8260022B9287058AA3 +Ciphertext: 5926ABE87D1C955ECB611D4E1573B5F30C9243C41696BB2CF7E7DFDCF82B85135490AD073BA56729E7CC1A198246117445AEBDC9082582657FAAF0FD6BBDB2FF4C5F08BDB2B2CFCDC066E488EF01E650FB3CD32A7644DD54CABECBE5AA1F7F688DEB31785A1D70607A618F571DDFC1C59269B679F114518AC13D4116812FBE9BC14D91724E9FB243182B51E6C8666D3FAC5C548474DFFD4C5D7769B506C2F513612F94AC81DB4F8C46F7DBC501BBC1C6A0FB51EF3BA326515D6C126332ABF7A5CBDC385023F82FAEFA850E436BD29F707E153FA03A1BA5F6FDD61AC1EAC92BE456DCBF06710F4827C9808C8AEA97948D66C9589AF065E4 +MAC: F06973C607295FA223185C45E41D66E0 +Test: Encrypt +# +Key: 3C95F0ADAFC4B8942448BC082DA95070B4742ACFF76C0138F179F07393DEBF7F +IV: 3648DAF9A3A0C964C47B6C323CD33719BC6E4B53697F2C7D +Header: 8444E532269050A7B6E60E +Plaintext: D21BF342F3B2B3552AA57915BFDF492C04F2253F990E813E23AB93ADDB0E47A185F60A297E08B0A2AA0604E983FC640C4E05DB3BAACF804767B1886A59073C083E3DBDE56E244A192A8026E161B4831796FFE7FB3E491FC4858FB9BEDB9FAD9921910590259B32F8419CFB6C1E825DA85883B6E83E1A6305B9B427A6BA450D64DA6C20971D822B68265B9BECC48CD6EF1B8A75BC2EAECE51AA2C20431E0589B8B7BF2654A7F583C270ED7B0701248A8B9260EB414E6DC7A191C658D5E8B61D753A72CBA07B9ED68637B040C9D3F5AA629F97100504C467ABCE18AE3FFA34B684F17AC115D0E09E1B3F35D67C392E3D4B253A69CD0BD798 +Ciphertext: B7371226408E2B83F277D0BE053D5C019C3FB22A36A71682781C319858E324728125ED116C2180C8D1AFA03A2C0A156E1D7CF097D7F511673763C32D2F0F8414FF6C874D6B69DB2D818D244BEF66E9B7FEFDB9B42B507ADFE32E7D87F44C41545CD42480D892D9164493042A269D317466FD6584C1AB8FB079C076801CC0C621129D992E9F694BC370C5DCD0F098FFC573944425BD20365259C9269885DB49FC304ABAC8D754ADCE026976E1BF997453BD0BCF891D7D838C468490EB11DA8ECEBC38C4829933FD33DDBA9D83FAE8985FA9A474E92D06428A8059D4A6769E49997E16044B3421CDB9B138143BDD52C1A4CBF5DA5FB79805 +MAC: CDA3EFAC45C3CAAB3B40F3AC555D1A25 +Test: Encrypt +# +Key: 4B26E55B85A51570F861EFCEAC22D62BA6FA96B6D46ED04268858D3A0DD2FB3C +IV: A0BB70C405548E9EF742D5854EAF204497A74FFB02D8D461 +Header: 5ADE20FC3BC38AF9196A41F0 +Plaintext: DAB0F6296A9E2AAD36B1A5933CC228FF3730FF12CD4876762783B4E74B74D0BDEB8E8E49F28C4BEEFAAA4C2405273E01B7935A70C53D942C0B71BEB98F1C04A8413780AFBDF5E6DDDD3E90C0762B015E7D8ACE1B937F06EC2B9AF5775FBAB15E0508EB680A48722441EB03BDC25EECE2BCA022DB844F3D3C904B29E1E60241BC4E3ED4CD5B51F2428891CCAF556DAF2DF8EF1C6B861EC8083FF3F93ABA6ED6C238DD597C3BE1E4A6C3AC1B5FBFF9C811A7E7B2E7B17C9339B8053080CBEF925D1619A57E7E983AAA01FEC80EE11E38B1628D9718D6DD33FCEF1F9C893AD13D00A329A75AED0A767CE069E864E5FDCED90EE6D7D18EF920 +Ciphertext: A91195B88D51C0CEF826986E65C71D7C57CE7FD4CF0E255CD1F636FC1280D9B62F1F9B1FC6EA8AE989519A9B8C11EA440C2F346A382388080435B15B0088F8212038781AF4B18D1E70B8BBC076043DB31FAD19D2FE9364783BE8EC61D8474A0182FA11A78C3F7240635995D97590C11F270774FE6AF31B2B5C42D3D93F5E59C3EAA2CE1D030CB662483403F6BFC64AF1641E57DAD4A8CC4642DB4664058389AFD3900E1A3A09433891D6661227FB6CA921B6DF58C976FA77D3CB6BE3BC9B06C0AC76C0C14C776EA2061E62F6563E60A409A3DB51A93EDD1098A70CC0367525DE2EA9C68E24858EE626DF52281A820690479126546FAAD6 +MAC: 1A40AC4B321DF9B2774AA35381F4AA31 +Test: Encrypt +# +Key: FACB477DA4F181955A18C96BBFE1DBE78349CE9E303105EFC1999E6C53DDCDF8 +IV: 73FFBEA235506717CF90041FDF076AF62668640FE83AB1AC +Header: 6C8C730C195CB8E762433C539F +Plaintext: DD69914E6216E2C3D2CEF05C2C38AD04F9D80BCC6CC3F8C1C2F7E47998B29923A98689039F8A9BFC4021FC20A6F139DCD754FB249FB87FC8EDAF07790060647E627BFE30BCE428F3EEE4BD5D1280B2EA80B4E7C3628F640F715B47D98257D0E8695E3E12261FF43F65BBA133A873ECC5C9E2467873D771C9EB60A28FF651EF3F264CB0CE7135655586F299EF5BCE49A9C92500651B7613F9C6A4413BC7AEDA62A0FC08748004E85D4AA37980169D9497D02D6F6A3A095BA7DF63B1DB825F10001C78BC9222AF5DD37F4C2D4008DAA1A01B3F8FFE70E297F51E15DEE8DCFE017671FA6C4D7CF59FEDA04C3F13DB7696E578278E151A7A8A +Ciphertext: E3F6B81A69D1E94C72B53F25646A08BADB74B88704E54D6035258C9D6FC6AA5BE990787AD10D9F309F30622A5DA10DC34F80D5751B3440229402DDD084DC56AF93186E3239B3AAA4DDE189EF53A5B1BB05B2D268DB8FB5F397D8ADD2C2CAC034EF8C1B0BDE3BC7286DEF171CA805CC890A48F3176C6BAEDD4F2127421A255067B07A80244FC35D31F25B16945549F183DA9A110F22AD9059B71AA38B5E3ED90ACFCA4D51BFF71F6CDED6ADDD7B09CB342B36544A7735E375BC28A296D2B5954EE6B74F417A1C3D46307F6F5BA15CD1FBB0E0363431D5205FEEDEC10F80AF875A3027CA50B6DB7D7DFF33E901E8C914C0BC227EC79B547B +MAC: CE2DB48E3B247C2C625520091523365A +Test: Encrypt +# +Key: 99436F9A35585930CA5EAEF1B38B3C2F651C7D83B502AD09711D2DD0ED351615 +IV: F42A3C55E37E3E3201D794356B487A7E361F71AEF7F3094F +Header: AEE2DE8F2C00CD713F6FF74EAF0C +Plaintext: 412CE1B69DFAC02EACED34D6AE109D6489C294F252A05D8D974CB0BC98A80F277116202CA273543DC3E2B944E31A5ACE182C53ACFDEC66D67F81F833D67C09F9A78CBA19A4972A8AC37C8FD51EA675EC17D664F46229DC406EB5D56A96CBF27D4C08F14A5C4B7EA1A099211282EC65CD09AA783CA739D07030B74CB9CEEAF60566D5A65044D432F228E198044F87304A6B96F1502440CFBF217FB7920A72EC3281480413810755ECFB3EED6D444523A75BDDF4F4202628F4FA8C9EB82FE61FB9B5D1AD15CFA90DFEEACA450CEC3CFF7F3056E9B70618DBEF63BD243AE25035900882EBE9FA930164E2BCF4BD000A641AC2AF3E8E395A23 +Ciphertext: 1835D9DD18F5D013C9C8631D835B1E605476F65FD2BEF120BF8305E6FDE789F96DB9C30AD45F9B56D00301A285B9FE2813F1EBBAAAF157363EBE6AB973CC36F13B293A4A54E481BD3DB035794A005FEE6304DB6D44F13441FC196F4659383D5608DFE2DEDC7B756E323C35382885D2866198C9B4E11B4A86D1B3F4E6C2C686817BE732808155578D03BE22294D96BF95D97D247D32101837E1A7B8CF66A8C56235001960BF3F994310CCBD673D850F87B2974F1197420C97A53F11438C4275F84E924468668BA6A81DEE9083B8D682647D9334DE5A09D36D96E389821E1E46FF6BE27EE296859578750E98F94276F3C0E67D5E46B4EAC0 +MAC: 7D5E1951DDEE1583A2C53052E041EE31 +Test: Encrypt +# +Key: FA2884BCCAB1D423F1679B9342CBF01C30179C42AF4C21242C7A8B88A824BC8D +IV: E9A61DD7B7C787B9E86DDA17606D6EB46E7CE8AE1F769EF6 +Header: E0A4D9AABCA51BA652FD34B8C74E09 +Plaintext: 5BF2F2E15F672F4608A28531AFAF190635F503B24D162E8D4F420B294AEA9DD63197496A2732AC60DBF95C7AA5338CEBF039A1A47AB93386419B5D098CD5C7B7ADFA74119AB525680287FACD65CF2404EC9695E0522BF8E592609D3F03E1F0B793E21648E1EE846756A7880A2FA53EB036736B2F3C10EF99320C5BF82A2D93E04C67D4A01ECA6E781BD14B918B9978C7C1FCFF808DD814868F083FE136B64A22EE661C9D7B8CB5B7EDB765DE89C57F9E6A8031271BE64B15DB577DBA68B858510E6E2762879D24057816E4BD87AEDF9973B5D3219D47FB60980434C6499B1AB6FA461A42B66DB72D0B6524A907CB1E0591B15AF24D6B4E +Ciphertext: 4BEBC0CD7196EE96947B19D80884D68976A0FB7734E976F887A849CAD1A3B7E32C270BC2C71B34EDED6D8050A64E489004BEA26D2ED2EDDE315AD05F4D33EB2836961040E1C83E8923B6F057BBF735FC1FB10396F5A22668D895F9605A304664B9BDFD0C09F4A3520AC7F66958E0B0C9266F249F3D318053B1BFE8E891A39234316799F347863DAB58FBCE6BA543C65608607124E5A60B0E99B4BD3B8FA6688F12B10371AD42938BFFEC577EBAD78C4535835C554A576B2585240E33915CA2397914D1D41446CE8021516033A26DAB52C3B2DF4DEA79071B0992560C90CABE7D1386B0EAFC5068C13A0A4ED90A1024F01384CFC1B8676D +MAC: 33DE4AC6301AEC135044F049513A8C1F +Test: Encrypt +# +Key: DE37E5CFF9082983B7F2ACB65578538817F96EC1452DF3D6EE5B590FD0459629 +IV: 7BF91ECAE9C3E8A35D3CCA7D146717F4F99C6198DEE77435 +Header: 0772EF591995916A2F013F3A5EB7C668 +Plaintext: B52BCAC5C7CE85BC03C5E80951E1DEB5E474FD5CAE210B95B04E14DEB79B7793E0A61EDA06C84BABCB8C86B4F0F8DF74F422B7557E2B9BB5B77F7C011F1EC9371F5EEC5019BCAFD9761FB77CDB5227ECFC766E0918BB21A6173336808E9FADA13FFD16B54313AFFBF5245033D6496A8AFBA6D5F18229ED63C2BEF1415331E8C14A7F422FF2E8047C8CAF0C8631DF370F60C02CCC17E8DC015454D3C0A905AD91D1825B83C0236F6C1B334C25FD8FF8D92B619EBB2B335F28374279AD60AC375F61D874C5D57C3AE923C1EA725723E63EA6D5F7802174CC17B3B4F5B2506A21EA33A1F8A770CCAA45A31CAEDF290E2BB1AD9165A03765F6 +Ciphertext: 0C95E8EA572F2513C9A2556ADEAE60B2C6F3E93A6CAEE790C7A6313427DD19AAA8D2D98261F3C66F48BB75D20C2D11D5A22AE4B7CD55E951A62067CA2C269A6DCDBB49D789C98F41BE809537A303EE26B5E6FD8A2A5EB4CA93609756EEA3F413DF9A555AD315AB6D238ED9F5225A534EA8D2F277A33EBE0EB631208CF036D6D2ECA0D7F5D80B5A708F74179C7B77F6089749A81222A3AE64BE973BB393F75CD597A09B75A44C61E87F2E6D76B6EDD519B3D3CAD06D3429E16574B93CC79164B980D8A3BA4D0D6F78269CCDE73AD2F074B5D445F1E076D8F7A7D1E00501D02573A636058E2E468629987E652DF0F159E2BBB045C2CFBDF6 +MAC: 7D5504F818151A271E6F589963497257 +Test: Encrypt +# +Key: 6AC31F4F34A8FE65F1A864AC49CA427BF38618C4B944F337F9355C2B2A028FC1 +IV: 124F59853BDD45E7085693FE8BAE327F34DC21A9FB9EC2AA +Header: F1AE767D53F324AF1245EFE4D267DBBDCD8B5C71075E84AE2DBF0A +Plaintext: 8AB1256E075C77163F7173024ECA671AD397CFD01C596A1A71F9B1EBD7713C00A2B203EC1B5B6545476FEB499FF5D8F8DFB39CF6E118039CCE96F89765796A8983295550A1F2EB5AEE5E6F31CF1D4EBADA1884B74C2614913BE1798529C4F04BE982F269FB2FFB8A5E26E96441C43F292CDCFBECEA511226E66B27447FDA312BFE00208FA8C1B7EADBBECF16E879D1CB2EE1D0CCCDBA82EFA0CCD54467BE0D8D78F0D8F5B5296EF44EEEF1F5DF7AED0CB83132EFE625DAEF2CA384A3A41A010D4760CC94B68C0E5936138479C478082698908ECB53C034450A3A6C0EE1ECFC7AFB31D215C0952D79DA7985A882EA779E9118C03BA3005D +Ciphertext: 98F0D3FC3E4464E41DA243CB6B09D5632E251B1A0E745E5B56DB85039567DB7E67420A1735691166BDF9D44502CEC5CD48819CDBD7569DDF8D32DE3D0E39559C3815F724F4338B2E6E8CA7F3721450D870499A99CA218C98939ACA606B830ECE4A16A8643E7865752F739FEA00478FD8B4B4C130B85A1136E2CEB8F8F9D654BE98FC71727FBC5D075B02174BEDA211A7F3AA68F568C70FF4BFCFA692B0CD6F317BA75D06FB70B2728EB98E13809E9C09C1A15CE3FDCDD779A6508854FC8A1501A137F2D0784E0A053699DA6A0C2BAE9BC7097EB0946B324C0013BE8AB41C74F6983596AB46478330AC1DE615654B63D49FE69FA4E1DFF7 +MAC: F0C3E19487ACE05846052536FB3F269D +Test: Encrypt +# +Key: 84FBD5CE0DA970F5A6546BC396AEB3DFC729BB57A1AA763EC639467BA84554DD +IV: 6FFB82F23448D1B0B831C9D5E9CE279BF04309CDFCCC4988 +Header: 9D1C64A0681D503F73878F861D54928CDB920EE4878F6BE932E48DF1DB6B40110A862E4F +Plaintext: B5DFA7594FB87A3826A5544C9B6CB19E0CBEDC26D32C937F312E3B18C752BED8656E776AF3BCF275FCFCA00690F4C4B4981475992E263D30169417D5F9B159221B26C04880B0BC4603D436511F34A6E76BC9DEAB936FDA2E62BD218CEBC8C2F8DCCB1A8589E09E02AB9179F1423B826965B1B338666FC3648D471BA44851F16DB061AF866074935C14EEA1BAF2CBAAABF1962941A6E27F76157313B0F9552A27C25C263C3F2671374BAF1D02A5129A9921A6A3D4076FAC43C9DCE5146850E5BC072A87FE97CFE3785529F15A92ED016DCA445432FD93F062F0EE839530BCDDF35242EE0E59D52BB25B09B53F713E6E3A1A16BDFFC0F17A +Ciphertext: D4C828A474C3B9D878CD1468A0A2535698ABA60A29F1684A88E07422CEF2AAEEDA3368B4BE092058E24E2A28A52190A60260D8EBAAD3C4A85EBB9D9AF6884733C64BA2C650E6486D54105EE853AD0195AAB4E843CFF71F0E8A442D5A671B810E7DE82EEF5F311E2873C29159F3DF716887B29019C2DA9932B878738AE4DEDAC39A42D401C03112CD71783C74E0355DB392A5614DDFFEDB9218AFE7D68744587605B3954A7E54F6B4946E2A7C8EC1A6B494433607C18DA6449F1A9D76E4091B978BF949BB0CE8035F3896F5EF9B435AC6C7AF7D825EE5F45F73B6B0AC6229D0E6A5B06C73B3599F1BFB81E21EA4450BCB5ABB8C69AD879C +MAC: 206CA7F1697790222A04D3416F7756AC +Test: Encrypt +# +Key: A3FCB5F05307A0F8EAAF2A51560E81E1DA1C91CCAE50A5097A400B9E07300327 +IV: 371E60D1E3E6B1B11CB45419797D8064D6F4E3622571ED7E +Header: 9CD319458E6C395A6867D72515F81DBE0B20DE7E7646C3EDE617B9DA9CCE9F5F324842D65E3DEC7B0E833D69251AC62F94D6F91FB4AD74555296D92F0182 +Plaintext: E5AFCE97C52575A105DE84646C6D1A59D0475919FD7DBEF6A4D42CFA86BEE9A13B632E9409AF4FB811B6FBA1419119C3C67BD53DAF636B4CC7969D89F8B9728F6778653168BAD42EEB3635ABCE9E31F8C16D6824D0B62C0FEB4901F21651DA57CD92E1B0A10BB175DA1A157ABE3969BFDB5CE9705740ED9A4DFD20EB18E34B7040CE9D5C8A4FC5B00FF80AC95842536C9F396FC01DE2DBAE88BEC43709F7384968B1F727646F67C57F510D7C6A7C7D24064A5941A13B865906AB60AC61F7334B9CC61E764193DD9B1EBE1DE7C621C1F28FDDE903806AF65780D3950514CCBA3D6713D42C56B748CAF3992582D487C8A535ADCA3153CF06 +Ciphertext: 18620C0FD068A3A294443E0932FF18C3CF22DAF804B7776572BAB1D5DCB121EAB76EC6EB0973108119140D41ED29EB3584EB959944AB98D1B317F52A1B5C610633097C7E6272CF3905C961D7E9078431AA6670F086BBF654568610601C30D1E4355E8E89505C1590A4D4D6934CE3107EC917E11929499C612FCE72EB81BACEB66A91A097FC4FE10BCA0EC2EA9306D15C4403556B6A8278FFDFBCD6F825E419EBFCB8F74D227B7FDA40BACDDABAA902CA16868CE71083C7D598BAEE4835CA182C9164BF0E17F245F294BB23CFFE2E3C8F4F37EF96BAC333BCB8E2CC42C6BEF8E371C8AFB2120E68DB2E4530140043CDEEC16A7873BC836E +MAC: 9A26125BBE57B0E2417E4255A72B6BD3 +Test: Encrypt +# +Key: 36D0EB3DDFB9AD90F7001A802C91E81D052ED74872B30344F7F1F2EB8641FF60 +IV: ABE262018C37A61B64B2939EBBAF9BAC9A64D4E16042AC05 +Header: B341DF90B9E4FAA6CE5590899703DFAFCB2D29B3973FC81DECF09F206512A44B95851E0BB9C668D2F5E0E94FBC461149A369B8D37EA2138F5EE8725841C6637563011DBDF9D8701946A30EECF11D39A34C6E57F887C863 +Plaintext: 3EEDA4DF2608909C843411FF6D2BFFFF56BD252CFB11DBFEF758D0270AD4310846D9C057D6E87A9F9461BD61CA13DBC65FB07B1E8B900CBEA98057C6F53FAC653BD1C814A0C6C3ACDBD1947A13E5761606BD9A01CFD0BCA0616E644205D29BB9BAE4C0341B58D0CD9587AE83CD7307D1E52B5CA6C412456999BF5F6FAC0765A301D81B50B23D9755DE4B9717946822C8A2E6BEF762FF9D3BEADDD1FAD418BFDE030F193E9AECAABB524D9849742814754B4BC0CFFD7A933CCE18D30E8DC2B5D8F994D8A990B137D08B4A61F23B358956E96E6FD8C3CC8EF5C44D572BA361DD80822B700638256ACC2FFCE7778D4421672B7812D1086D78 +Ciphertext: 8C2EF7ABD4331A875F2F40F0C8ED3FF73B6C075A4B608BA78583192AD8CA49E5FF301ABDEBC23928441FBDE474B7E1158AD84B5578891F19A9F4CCCDB38A386319E7B6822A51E8D950C78B33F866DB2B9E66027E1BD644C7D874F9E8FDEA9B8063F27CABF2DC95A06F67198B978522AE51FDEBDAA3485A2D65E4E9C874D4BC0D07E14BDB8E90491936B6917F4E0F13260547F44C8CA2B94982CFB6607BF8CA93861574DB8D67B694251B2390D8958BB28976A12F455F6E58B54DE4B040ADDABBA472F53EBBC0E44DC1E96CF6431C15C35FA62D95E90812CD2A48BBED4794D3F17293BD1E77896916CE693C0800CE5107C8D6DAD553C3B1 +MAC: BFA67B56E17E7E19779652C04E320EFC +Test: Encrypt +# +Key: B7E78E5C5D157729D3FCEE28BD36C7EE027292A65BFA68F49FEFA9633DB5B5CA +IV: ABD789BC2DB1BC3110F4D5F18B20566F13F9E93B1BD80319 +Header: CD76540816D5036A98192D2396576367B9ACCE70300716E98B5D74BA4C1C272EC2935B5C81D3FB1111275320ACF4911FF8639C233D9C54129C62C75E8E18B93EA0276D568F69C40F7ABF7B75D24241BE8878A4364DF631 +Plaintext: 7F18AAC65E534C559EEBB54B0593AE69A8D79C8559442D3E44C40609809369E5C03765C6E6C56D082BD955BAF6093298F7BCEDB657C88430ACBDFBF5BFE63CDCBA2204B0D46732841F1A70CD335B5968177A57D0209B6A0E558F77E2B8954812B4F003C8C534BF1727E72D3BCACAAEE77ACB185588902A1E96FFDA4407A3DF768CF01F4C051FE2832E3853CFE3E465853BB197D12885E53407681046AB3CF1FC28B53D0E553BE93D3906871007AD400D9DF6D2C19D9EE13866A0D59272128C2573E372369421ACDDE218807B7E72B3F64A3062F4C9D89CA1929727F9E420A806BEA296EF0C1FE66AA5B9EE1D94120173FD88515C4CB59F +Ciphertext: BCAE41B9E4CDE9103E036D28DB1AB339B695E71489C5D3726D22C069B44EFE1D44394740055F316949A430C83743EABC8C5E4605063DD35A3C174F2696A26D542B2556C19F8ABF8522D9824364560BE7A56E873836C9016401EF62777B5E8D80D38F84BEE621FAC1219CCDF9BABFDC98E034F724CFB14312B904DD4AE65A8A4E43E804826DD7365F735479DB8274F7A8729FF10403655562EDB8F855248ACFBBFB5C6BBFF25F7FF3F4E0D572A95E4D3088CE4399A4C79A0F26D04925DA7BC432E8DB7804FB48BA23514237B96415C3F84EF2CA1E37BFE6587513158642ED3F9CE7811A0F3325F5F0081226DE497FE9ED61F61E5F776B41 +MAC: 7AD4FDD4354830B042A1ECA964528A64 +Test: Encrypt +# +Key: BC884D274A719A3E3A579087C100DB4F658974AFF3FABF0EAEE3554015136751 +IV: 616A66C93362494DF0E8C49167C8250049A7B0F48EB72937 +Header: AA439758C910E1F1D3AEAE0AA4E13C200AC156A76B285B71B8C8E7282888CD8DEE75C3801F32EC0AD3C3E562592645B257E269CB7661403329A99895E5196E5D3852E450F4A869577D478228F56BE80B40DAF8B2AC087AA08C +Plaintext: 5B39C4C0D006EC17D0E5A9F39F48C2A5F941A991D604AD3AEC383A243D0003767076E7E4DBB13FA333DD78977A8B7F8CD0DD507474303017A4E30277633123C621F729308E8710FB606A75B9F4698EF1D94B2060DDECCC939C7E0FE3061840E0B9EF0C0292EC28C5F98AB31E3B48F6D1CCADDC962C6B18245D5A49B01F0F1136143D627B02C097EB1D9A2A777CB026ED329736DCD58C72430B872B280D8A1EF0E096CBF7A35F9B50F8728A550704776CC727F27B666C0F08FB82C81BC4BF0EA5B5026B99DB9EFB883490822991F09C104070351084D0EF94B699AC56E90502BD56931F25887712CF5F7E37A7300A876C3B68B3FC50A55F +Ciphertext: 932D4B22D1E75C35E3B8BF809602F8D98D742BDBA91F3ABBE928D6748CCDB440DB3A880B24DF250AEA878651606F4294A067BAB7AAE7775BC43B61AAF9EE9C32F403DCF7C0DBE080FCE7EC4982CCB6FA8E10466061AF1F0C803C923A5327C4534AEA9610F534E52DF84C4D94832087596255BD68410AA98B68B593E9D0AC492F448FCFFF96202FC817044FC8A669FA24515C3835595EC78C96CEFC1F0DB1DE7C75E3EBAC7C36F5AF1A3020A87A66644649D193B101BF66B6CFB380D9CF11043FE86192D2FE761FB0CA68925F638004BAB4E6F75BB90657EB44628455341EA038890819008A99F3686A6FB0D3C60C4AE499D61C9555B8AA +MAC: A99D19C7266576B858A1889884AE6027 +Test: Encrypt +# +Key: 1541F09D99D49FAFF55B12EC0ED691C89E1A987785035318B9DB1AD9C17E9B56 +IV: 91E30F6AFA2DC2D67DC7361172EAF1AE7128B4AF01BE4880 +Header: CDC2D550433BED08FA67A8FBA29D00DC206A3168F92F7F16E660EE3263983335B8722BC79250E23C9092DAB3A409DFED52877BA3C8745A7ACA76A0EE221C020C230142D0B0D086522DE43B3B8768BECA6FD5B29B6A21EEC17190AE7683C7B4F3B42A448BC84854A044557CFDA5 +Plaintext: 258F191AC24A92BA5C3E1DF673EBC75B778C07A7DE6DB8B81BA0BC3438D88C0849C62C3489B208ED4D66E41B3CE8BA49FD5D702D558922A1C429609599461ADF4147AB44E3DEEDEFC024BCD863F7268EBD75FC7C382476EDE899370DE915E4ED80C4677B4EA2A36D9A8FF3879F24BDE2B18F00D06B67EDA611ECA6C3962DEBBF44ACD452539EAE12DCBE85493B9A7933716270E27F8233A9429695A0DF8311FB2DC65CA7BCEF1B79346B5E85F4A7758A7A5B4568BAD435E4FC628EF0FC1247F211CBC8EB6DA2B60089166B49263C52218E43B1E446FD74B1D9C6F62A6B4FBA228E3346BC0470B8E61AD38265D306F2AE9C7B0A48724C76 +Ciphertext: 310D1C2480D4882A18BE2D52F8F9FCED42C6776404CEA82ED58E5AF4D4AC1E3004E9D559CECB8F02994580A0DB15C8F528C65F22D91499CC6B691D989F39DF72417C377F63301205966854C8B63979609AF99EE5E044922352CAABFCAF3781D8038A51C1900606C6709808D8572EC5C7F577C3CF4D9D9BAA0D5836099E05A7910A1CC156AD0B9B91FE2F1484012032F46066C3E8BC0A604F6141914AD0CAB476332BFCCC6F15C342D1D31248D44F92868FFC5F4C9960DEC26E34D4C6A704953F9658B3979B77749017212B10D0EDA7AB5FEA5317F0D4F498C687758C028AAA15BCEA039ACAF9BC9FA15D76836FDF9E2F2C278FC33D3CA9 +MAC: 8C41750FD046BFBF34579A577B8C56FC +Test: Encrypt diff --git a/vendor/cryptopp/vendor_cryptopp/TestVectors/chacha_tls.txt b/vendor/cryptopp/vendor_cryptopp/TestVectors/chacha_tls.txt index 6e44e39d..94a26328 100644 --- a/vendor/cryptopp/vendor_cryptopp/TestVectors/chacha_tls.txt +++ b/vendor/cryptopp/vendor_cryptopp/TestVectors/chacha_tls.txt @@ -1,37 +1,337 @@ AlgorithmType: SymmetricCipher -Name: ChaCha20 +Name: ChaChaTLS Source: http://tools.ietf.org/html/draft-agl-tls-chacha20poly1305 -Comment: Section 7, Test 1 -Key: 0000000000000000000000000000000000000000000000000000000000000000 -IV: 0000000000000000 -Plaintext: -Ciphertext: 76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669 +# +Comment: Section A.1, ChaCha20 Block Function, Test 1 +Key: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 +IV: 00 00 00 00 00 00 00 00 00 00 00 00 +Plaintext: r64 00 +Ciphertext: 76 b8 e0 ad a0 f1 3d 90 40 5d 6a e5 53 86 bd 28 \ + bd d2 19 b8 a0 8d ed 1a a8 36 ef cc 8b 77 0d c7 \ + da 41 59 7c 51 57 48 8d 77 24 e0 3f b8 d8 4a 37 \ + 6a 43 b8 f4 15 18 a1 1c c3 87 b6 69 b2 ee 65 86 Test: Encrypt -Comment: Section 7, Test 2 -Key: 0000000000000000000000000000000000000000000000000000000000000001 -IV: 0000000000000000 -Plaintext: -Ciphertext: 4540f05a9f1fb296d7736e7b208e3c96eb4fe1834688d2604f450952ed432d41bbe2a0b6ea7566d2a5d1e7e20d42af2c53d792b1c43fea817e9ad275 +# +Comment: Section A.1, ChaCha20 Block Function, Test 2 +Key: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 +IV: 00 00 00 00 00 00 00 00 00 00 00 00 +Plaintext: r64 00 +Ciphertext: 9f 07 e7 be 55 51 38 7a 98 ba 97 7c 73 2d 08 0d \ + cb 0f 29 a0 48 e3 65 69 12 c6 53 3e 32 ee 7a ed \ + 29 b7 21 76 9c e6 4e 43 d5 71 33 b0 74 d8 39 d5 \ + 31 ed 1f 28 51 0a fb 45 ac e1 0a 1f 4b 79 4d 6f +InitialBlock: 1 Test: Encrypt -Comment: Section 7, Test 3 -Key: 0000000000000000000000000000000000000000000000000000000000000000 -IV: 0000000000000001 -Plaintext: -Ciphertext: de9cba7bf3d69ef5e786dc63973f653a0b49e015adbff7134fcb7df137821031e85a050278a7084527214f73efc7fa5b5277062eb7a0433e445f41e3 +# +Comment: Section A.1, ChaCha20 Block Function, Test 3 +Key: 0000000000000000 0000000000000000 0000000000000000 0000000000000001 +IV: 00 00 00 00 00 00 00 00 00 00 00 00 +Plaintext: r64 00 +Ciphertext: 3a eb 52 24 ec f8 49 92 9b 9d 82 8d b1 ce d4 dd \ + 83 20 25 e8 01 8b 81 60 b8 22 84 f3 c9 49 aa 5a \ + 8e ca 00 bb b4 a7 3b da d1 92 b5 c4 2f 73 f2 fd \ + 4e 27 36 44 c8 b3 61 25 a6 4a dd eb 00 6c 13 a0 +InitialBlock: 1 Test: Encrypt -Comment: Section 7, Test 4 -Key: 0000000000000000000000000000000000000000000000000000000000000000 -IV: 0100000000000000 -Plaintext: -Ciphertext: ef3fdfd6c61578fbf5cf35bd3dd33b8009631634d21e42ac33960bd138e50d32111e4caf237ee53ca8ad6426194a88545ddc497a0b466e7d6bbdb004 +# +Comment: Section A.1, ChaCha20 Block Function, Test 4 +Key: 00ff000000000000 0000000000000000 0000000000000000 0000000000000000 +IV: 00 00 00 00 00 00 00 00 00 00 00 00 +Plaintext: r64 00 +Ciphertext: 72 d5 4d fb f1 2e c4 4b 36 26 92 df 94 13 7f 32 \ + 8f ea 8d a7 39 90 26 5e c1 bb be a1 ae 9a f0 ca \ + 13 b2 5a a2 6c b4 a6 48 cb 9b 9d 1b e6 5b 2c 09 \ + 24 a6 6c 54 d5 45 ec 1b 73 74 f4 87 2e 99 f0 96 +InitialBlock: 2 Test: Encrypt -Comment: Section 7, Test 5 -Key: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f -IV: 0001020304050607 -Plaintext: -Ciphertext: f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f1 \ - 5916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e \ - 09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c5 \ - 07b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2 \ - ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb +# +Comment: Section A.1, ChaCha20 Block Function, Test 5 +Key: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 +IV: 00 00 00 00 00 00 00 00 00 00 00 02 +Plaintext: r64 00 +Ciphertext: c2 c6 4d 37 8c d5 36 37 4a e2 04 b9 ef 93 3f cd \ + 1a 8b 22 88 b3 df a4 96 72 ab 76 5b 54 ee 27 c7 \ + 8a 97 0e 0e 95 5c 14 f3 a8 8e 74 1b 97 c2 86 f7 \ + 5f 8f c2 99 e8 14 83 62 fa 19 8a 39 53 1b ed 6d Test: Encrypt +# +Comment: Section A.2, ChaCha20 Encryption, Test 1 +Key: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 +IV: 00 00 00 00 00 00 00 00 00 00 00 00 +Plaintext: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \ + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \ + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \ + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +Ciphertext: 76 b8 e0 ad a0 f1 3d 90 40 5d 6a e5 53 86 bd 28 \ + bd d2 19 b8 a0 8d ed 1a a8 36 ef cc 8b 77 0d c7 \ + da 41 59 7c 51 57 48 8d 77 24 e0 3f b8 d8 4a 37 \ + 6a 43 b8 f4 15 18 a1 1c c3 87 b6 69 b2 ee 65 86 +Test: Encrypt +# +Comment: Section A.2, ChaCha20 Encryption, Test 2 +Key: 0000000000000000 0000000000000000 0000000000000000 0000000000000001 +IV: 00 00 00 00 00 00 00 00 00 00 00 02 +Plaintext: 41 6e 79 20 73 75 62 6d 69 73 73 69 6f 6e 20 74 \ + 6f 20 74 68 65 20 49 45 54 46 20 69 6e 74 65 6e \ + 64 65 64 20 62 79 20 74 68 65 20 43 6f 6e 74 72 \ + 69 62 75 74 6f 72 20 66 6f 72 20 70 75 62 6c 69 \ + 63 61 74 69 6f 6e 20 61 73 20 61 6c 6c 20 6f 72 \ + 20 70 61 72 74 20 6f 66 20 61 6e 20 49 45 54 46 \ + 20 49 6e 74 65 72 6e 65 74 2d 44 72 61 66 74 20 \ + 6f 72 20 52 46 43 20 61 6e 64 20 61 6e 79 20 73 \ + 74 61 74 65 6d 65 6e 74 20 6d 61 64 65 20 77 69 \ + 74 68 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 \ + 20 6f 66 20 61 6e 20 49 45 54 46 20 61 63 74 69 \ + 76 69 74 79 20 69 73 20 63 6f 6e 73 69 64 65 72 \ + 65 64 20 61 6e 20 22 49 45 54 46 20 43 6f 6e 74 \ + 72 69 62 75 74 69 6f 6e 22 2e 20 53 75 63 68 20 \ + 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 63 6c 75 \ + 64 65 20 6f 72 61 6c 20 73 74 61 74 65 6d 65 6e \ + 74 73 20 69 6e 20 49 45 54 46 20 73 65 73 73 69 \ + 6f 6e 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 \ + 77 72 69 74 74 65 6e 20 61 6e 64 20 65 6c 65 63 \ + 74 72 6f 6e 69 63 20 63 6f 6d 6d 75 6e 69 63 61 \ + 74 69 6f 6e 73 20 6d 61 64 65 20 61 74 20 61 6e \ + 79 20 74 69 6d 65 20 6f 72 20 70 6c 61 63 65 2c \ + 20 77 68 69 63 68 20 61 72 65 20 61 64 64 72 65 \ + 73 73 65 64 20 74 6f +Ciphertext: a3 fb f0 7d f3 fa 2f de 4f 37 6c a2 3e 82 73 70 \ + 41 60 5d 9f 4f 4f 57 bd 8c ff 2c 1d 4b 79 55 ec \ + 2a 97 94 8b d3 72 29 15 c8 f3 d3 37 f7 d3 70 05 \ + 0e 9e 96 d6 47 b7 c3 9f 56 e0 31 ca 5e b6 25 0d \ + 40 42 e0 27 85 ec ec fa 4b 4b b5 e8 ea d0 44 0e \ + 20 b6 e8 db 09 d8 81 a7 c6 13 2f 42 0e 52 79 50 \ + 42 bd fa 77 73 d8 a9 05 14 47 b3 29 1c e1 41 1c \ + 68 04 65 55 2a a6 c4 05 b7 76 4d 5e 87 be a8 5a \ + d0 0f 84 49 ed 8f 72 d0 d6 62 ab 05 26 91 ca 66 \ + 42 4b c8 6d 2d f8 0e a4 1f 43 ab f9 37 d3 25 9d \ + c4 b2 d0 df b4 8a 6c 91 39 dd d7 f7 69 66 e9 28 \ + e6 35 55 3b a7 6c 5c 87 9d 7b 35 d4 9e b2 e6 2b \ + 08 71 cd ac 63 89 39 e2 5e 8a 1e 0e f9 d5 28 0f \ + a8 ca 32 8b 35 1c 3c 76 59 89 cb cf 3d aa 8b 6c \ + cc 3a af 9f 39 79 c9 2b 37 20 fc 88 dc 95 ed 84 \ + a1 be 05 9c 64 99 b9 fd a2 36 e7 e8 18 b0 4b 0b \ + c3 9c 1e 87 6b 19 3b fe 55 69 75 3f 88 12 8c c0 \ + 8a aa 9b 63 d1 a1 6f 80 ef 25 54 d7 18 9c 41 1f \ + 58 69 ca 52 c5 b8 3f a3 6f f2 16 b9 c1 d3 00 62 \ + be bc fd 2d c5 bc e0 91 19 34 fd a7 9a 86 f6 e6 \ + 98 ce d7 59 c3 ff 9b 64 77 33 8f 3d a4 f9 cd 85 \ + 14 ea 99 82 cc af b3 41 b2 38 4d d9 02 f3 d1 ab \ + 7a c6 1d d2 9c 6f 21 ba 5b 86 2f 37 30 e3 7c fd \ + c4 fd 80 6c 22 f2 21 +InitialBlock: 1 +Test: Encrypt +# +Comment: Section A.2, ChaCha20 Encryption, Test 3 +Key: 1c 92 40 a5 eb 55 d3 8a f3 33 88 86 04 f6 b5 f0 \ + 47 39 17 c1 40 2b 80 09 9d ca 5c bc 20 70 75 c0 +IV: 00 00 00 00 00 00 00 00 00 00 00 02 +Plaintext: 27 54 77 61 73 20 62 72 69 6c 6c 69 67 2c 20 61 \ + 6e 64 20 74 68 65 20 73 6c 69 74 68 79 20 74 6f \ + 76 65 73 0a 44 69 64 20 67 79 72 65 20 61 6e 64 \ + 20 67 69 6d 62 6c 65 20 69 6e 20 74 68 65 20 77 \ + 61 62 65 3a 0a 41 6c 6c 20 6d 69 6d 73 79 20 77 \ + 65 72 65 20 74 68 65 20 62 6f 72 6f 67 6f 76 65 \ + 73 2c 0a 41 6e 64 20 74 68 65 20 6d 6f 6d 65 20 \ + 72 61 74 68 73 20 6f 75 74 67 72 61 62 65 2e +Ciphertext: 62 e6 34 7f 95 ed 87 a4 5f fa e7 42 6f 27 a1 df \ + 5f b6 91 10 04 4c 0d 73 11 8e ff a9 5b 01 e5 cf \ + 16 6d 3d f2 d7 21 ca f9 b2 1e 5f b1 4c 61 68 71 \ + fd 84 c5 4f 9d 65 b2 83 19 6c 7f e4 f6 05 53 eb \ + f3 9c 64 02 c4 22 34 e3 2a 35 6b 3e 76 43 12 a6 \ + 1a 55 32 05 57 16 ea d6 96 25 68 f8 7d 3f 3f 77 \ + 04 c6 a8 d1 bc d1 bf 4d 50 d6 15 4b 6d a7 31 b1 \ + 87 b5 8d fd 72 8a fa 36 75 7a 79 7a c1 88 d1 +InitialBlock: 42 +Test: Encrypt +# +Source: Modified Bernstein ref impl using chacha-ref.c ver 20080118 +Comment: All 0 key, all 0 iv, 0 counter block, 1024 bytes +Key: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 +IV: 00 00 00 00 00 00 00 00 00 00 00 00 +Plaintext: r1024 00 +Ciphertext: \ + 76B8E0ADA0F13D90405D6AE55386BD28BDD219B8A08DED1AA836EFCC8B770DC7 \ + DA41597C5157488D7724E03FB8D84A376A43B8F41518A11CC387B669B2EE6586 \ + 9F07E7BE5551387A98BA977C732D080DCB0F29A048E3656912C6533E32EE7AED \ + 29B721769CE64E43D57133B074D839D531ED1F28510AFB45ACE10A1F4B794D6F \ + 2D09A0E663266CE1AE7ED1081968A0758E718E997BD362C6B0C34634A9A0B35D \ + 012737681F7B5D0F281E3AFDE458BC1E73D2D313C9CF94C05FF3716240A248F2 \ + 1320A058D7B3566BD520DAAA3ED2BF0AC5B8B120FB852773C3639734B45C91A4 \ + 2DD4CB83F8840D2EEDB158131062AC3F1F2CF8FF6DCD1856E86A1E6C3167167E \ + E5A688742B47C5ADFB59D4DF76FD1DB1E51EE03B1CA9F82ACA173EDB8B729347 \ + 4EBE980F904D10C916442B4783A0E984860CB6C957B39C38ED8F51CFFAA68A4D \ + E01025A39C504546B9DC1406A7EB28151E5150D7B204BAA719D4F091021217DB \ + 5CF1B5C84C4FA71A879610A1A695AC527C5B56774A6B8A21AAE88685868E094C \ + F29EF4090AF7A90CC07E8817AA528763797D3C332B67CA4BC110642C2151EC47 \ + EE84CB8C42D85F10E2A8CB18C3B7335F26E8C39A12B1BCC1707177B76138732E \ + EDAAB74DA1410FC055EA068C99E9260ACBE337CF5D3E00E5B3230FFEDB0B9907 \ + 87D0C70E0BFE4198EA6758DD5A61FB5FEC2DF981F31BEFE153F81D17161784DB \ + 1C8822D53CD1EE7DB532364828BDF404B040A8DCC522F3D3D99AEC4B8057EDB8 \ + 500931A2C42D2F0C570847100B5754DAFC5FBDB894BBEF1A2DE1A07F8BA0C4B9 \ + 19301066EDBC056B7B481E7A0C46297BBB589D9DA5B675A6723E152E5E63A4CE \ + 034E9E83E58A013AF0E7352FB7908514E3B3D1040D0BB963B3954B636B5FD4BF \ + 6D0AADBAF8157D062ACB2418C176A475511B35C3F6218A5668EA5BC6F54B8782 \ + F8B340F00AC1BEBA5E62CD632A7CE7809C725608ACA5EFBF7C41F237643F06C0 \ + 997207171DE867F9D697BF5EA6011ABCCE6C8CDB211394D2C02DD0FB60DB5A2C \ + 17AC3DC85878A90BED3809DBB96EAA5426FC8EAE0D2D65C42A479F088648BE2D \ + C801D82A366FDDC0EF234263C0B6417D5F9DA41817B88D68E5E67195C5C1EE30 \ + 95E821F22524B20BE41CEB590412E41DC648843FA9BFEC7A3DCF61AB05415733 \ + 16D3FA8151629303FE9741562ED065DB4EBC0050EF558364AE81124A28F5C013 \ + 13232FBC496DFD8A2568657B686D7214382A1A00903017DDA969878442BA5AFF \ + F6613F553CBB233CE46D9AEE93A7876CF5E9E82912B18CADF0B34327B2E0427E \ + CF66B7CEB7C0918DC47BDFF12A062ADF07133009CE7A5E5C917E0168306109B7 \ + CB49653A6D2CAEF005DE783A9A9BFE05381ED1348D94EC65886F9C0B619C52C5 \ + 533800B16C836172B95182DBC5EEC042B89E22F11A085B739A3611CD8D836018 +Test: Encrypt +# +Comment: Random key, random iv, 0 counter block, 1024 bytes +Key: 2923BE84E16CD6AE 529049F1F1BBE9EB B3A6DB3C870C3E99 245E0D1C06B747DE +IV: B3 12 4D C8 43 BB 8B A6 1F 03 5A 7D +Plaintext: r1024 00 +Ciphertext: \ + C60E2330687F93D615A03CA1AD4FB4A64F2E0380A65F1277ADE647360F531A6D \ + 7D39AC85F9064B49529B796F8220D44B2573449C0CAB7AD7704BA9E1F370A52B \ + 45561EC56EB1AC85FEDCB4EE72957AA3445E6449373EA3CF82E2F5D2EA63889B \ + 7349441FFF021C19458CB815AC334DB6159180CE3E743E67896F74F4DA12B3A6 \ + 2FB45A2069151A1C0DAE260302905EF520F1838CBE8859400F0B4723F47518D4 \ + 7EA9A557D00788B5796EFC9C4BC0F14484C64C27348BAC9621A18EF805F771A9 \ + BDE4B0288B0F6B06562A3D5B7A9655DA8A89C391F28B5C4B0FBE498B92DD8B30 \ + 2F5B43B58C93C7C5161CAE0413D36E868E2C81D7204AEA96649A67B6439D04C2 \ + 93A97046DEF4D31F49D32BAFBF814808A2E83EF0B212D7287D6AC6714A4A74F1 \ + A2BC057BFBC3023986FAE970A306E214B9400416B876A8F689BE3B9E36FD7AEB \ + 49BA3E8DC1F24900AB41605921CFBBEE005CF5D577849183CB7F6742A908A7AE \ + 1D2077353A42B86659A3676131A497B652BFAED4088BCE32E9B42D7A3BCAFD46 \ + 63E252539D4853D2C482FED427F49CC9683C48B0158A7CA47490D5EAD0447527 \ + 9AD0B47788F65A9E09A38681AC6B65E22A901155B9C66307C8E6854D6F041E5B \ + 348A0D6F20A3C2DCB53E8444C280455EBBF9F34D34B18ABEAAC748093A310289 \ + 0234453454C662718C67379D3D0D1C68EB42009EDC67CF6B3E6DEEAAAD969F53 \ + B0906F8B63351081F02F7BA65370A6E6A71E0EF82E38A910F9B875523376E66D \ + EC1107FA4CC4F66175A8A32F1D0D7FF5FC5241165BEA75B4F73ADB6F5FC0B49A \ + E287B04D67D351E87BA176EAC1E9C1BC0B67FC6C13C35F14BA08466002CC8BB6 \ + A064BBB5A6F1B193AEE1F7458C6954C24DBED0969193D61953AE2B4909A738F7 \ + B0CD0A330EB89323C22AF554A794CFE24B590C079077812B4DFD14CEF87536B8 \ + 844C810DAEDC25CC71338935FB92E260BDB46138666B90536D6CDC500A02EA7A \ + AE3DEF84933BBA3960C1DA76C70AED10CE65C2F4EB91D82CAE36E33B75AE2D88 \ + 0F73CAD4D4C2C2A76523D10FCC60B15CF0793928B43FF7DDD1B3E8F34C2174EF \ + 2666BC91107223CF44D2F61AF44BBE918CCBF5998C315510B14B643996793CE0 \ + EF642967134BC88CC793F735A21F5A01345CE10ABA43DECD4E6AD41A105A3B0E \ + E38E217950A1AA6BEE330075B18331DC5A6DA5D731336F0F2543E1F2396DF25C \ + BF92399907A7325352AB7CEF98D0582EEE3E8130515D214FA0BF37B31AF5D74D \ + 889ADB8D9DA438D1D5ADD7F70A3EDB089501189EA4F61BFFF406E7C961113827 \ + 986B0483E7A8E6F3F81DC31CB2C7C48B92160D3452D717A759D5DDF71671529F \ + B187A0CCE7F5B9EAE3A851B13CAFFD19502D22CBB1073A4E68CB2EB5319D0E02 \ + F1B418A34AA18F15DE0B9667D7925B4651F8E73D4191B2C868915344BDBD18E5 +Test: Encrypt +# +Comment: All 0 key, all 0 iv, 0xfffffffe counter block, 256 bytes +Key: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 +IV: 00 00 00 00 00 00 00 00 00 00 00 00 +Plaintext: r256 00 +Ciphertext: \ + 032CC123482C31711F94C941AF5AB1F4155784332ED5348FE79AEC5EAD4C06C3 \ + F13C280D8CC49925E4A6A5922EC80E13A4CDFA840C70A1427A3CB699166991A5 \ + ACE4CD09E294D1912D4AD205D06F95D9C2F2BFCF453E8753F128765B62215F4D \ + 92C74F2F626C6A640C0B1284D839EC81F1696281DAFC3E684593937023B58B1D \ + 76B8E0ADA0F13D90405D6AE55386BD28BDD219B8A08DED1AA836EFCC8B770DC7 \ + DA41597C5157488D7724E03FB8D84A376A43B8F41518A11CC387B669B2EE6586 \ + 9F07E7BE5551387A98BA977C732D080DCB0F29A048E3656912C6533E32EE7AED \ + 29B721769CE64E43D57133B074D839D531ED1F28510AFB45ACE10A1F4B794D6F +InitialBlock: 0xfffffffe +Test: Encrypt +# +Comment: Random key, random iv, 0xfffffffe counter block, 256 bytes +Key: 26C680F84915A586 E2C569044F083FE2 D26B93B242B8152F 001B547F2D838EB5 +IV: 41 F5 01 94 29 2E C7 32 BF 61 90 F6 +Plaintext: r256 00 +Ciphertext: \ + 0DF0FE21D4FF132A29220F340103B6726820A36CC41D705B062F3F1A3896938A \ + 38478CFE0B19C58D590D5B63226A0A6474D43EBC4179BBD1549022C2A8B8ED01 \ + 01BC1028D34C84AC523D1CE9A831A5B9F07F182DB65F1034FD5C3E13652C75F8 \ + E586719766250643E494CE5FD72AD2C9875812D79949B2719B6FD05C78068CE9 \ + 38203067821A13D2EEA66AC3972D3F86F10584B03F3EC51E9E1767AAFDE7AAA1 \ + 37762D8972070B6F74DDE1F91B3E8A334B6A12B21BBDA74FC6D69B645A3F0ADF \ + 3251856773A27556B06F9DEB8E6B99680258F8EE70C062880794FAAB992DD7E4 \ + 8655FC852FF891DF70788C9AF948A86D33837F1C847CB70121929076904C261E +InitialBlock: 0xfffffffe +Test: Encrypt +# +Comment: All 0 key, all 0 iv, 0xfffffffe counter block, 1024 bytes +Key: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 +IV: 00 00 00 00 00 00 00 00 00 00 00 00 +Plaintext: r1024 00 +Ciphertext: \ + 032CC123482C31711F94C941AF5AB1F4155784332ED5348FE79AEC5EAD4C06C3 \ + F13C280D8CC49925E4A6A5922EC80E13A4CDFA840C70A1427A3CB699166991A5 \ + ACE4CD09E294D1912D4AD205D06F95D9C2F2BFCF453E8753F128765B62215F4D \ + 92C74F2F626C6A640C0B1284D839EC81F1696281DAFC3E684593937023B58B1D \ + 76B8E0ADA0F13D90405D6AE55386BD28BDD219B8A08DED1AA836EFCC8B770DC7 \ + DA41597C5157488D7724E03FB8D84A376A43B8F41518A11CC387B669B2EE6586 \ + 9F07E7BE5551387A98BA977C732D080DCB0F29A048E3656912C6533E32EE7AED \ + 29B721769CE64E43D57133B074D839D531ED1F28510AFB45ACE10A1F4B794D6F \ + 2D09A0E663266CE1AE7ED1081968A0758E718E997BD362C6B0C34634A9A0B35D \ + 012737681F7B5D0F281E3AFDE458BC1E73D2D313C9CF94C05FF3716240A248F2 \ + 1320A058D7B3566BD520DAAA3ED2BF0AC5B8B120FB852773C3639734B45C91A4 \ + 2DD4CB83F8840D2EEDB158131062AC3F1F2CF8FF6DCD1856E86A1E6C3167167E \ + E5A688742B47C5ADFB59D4DF76FD1DB1E51EE03B1CA9F82ACA173EDB8B729347 \ + 4EBE980F904D10C916442B4783A0E984860CB6C957B39C38ED8F51CFFAA68A4D \ + E01025A39C504546B9DC1406A7EB28151E5150D7B204BAA719D4F091021217DB \ + 5CF1B5C84C4FA71A879610A1A695AC527C5B56774A6B8A21AAE88685868E094C \ + F29EF4090AF7A90CC07E8817AA528763797D3C332B67CA4BC110642C2151EC47 \ + EE84CB8C42D85F10E2A8CB18C3B7335F26E8C39A12B1BCC1707177B76138732E \ + EDAAB74DA1410FC055EA068C99E9260ACBE337CF5D3E00E5B3230FFEDB0B9907 \ + 87D0C70E0BFE4198EA6758DD5A61FB5FEC2DF981F31BEFE153F81D17161784DB \ + 1C8822D53CD1EE7DB532364828BDF404B040A8DCC522F3D3D99AEC4B8057EDB8 \ + 500931A2C42D2F0C570847100B5754DAFC5FBDB894BBEF1A2DE1A07F8BA0C4B9 \ + 19301066EDBC056B7B481E7A0C46297BBB589D9DA5B675A6723E152E5E63A4CE \ + 034E9E83E58A013AF0E7352FB7908514E3B3D1040D0BB963B3954B636B5FD4BF \ + 6D0AADBAF8157D062ACB2418C176A475511B35C3F6218A5668EA5BC6F54B8782 \ + F8B340F00AC1BEBA5E62CD632A7CE7809C725608ACA5EFBF7C41F237643F06C0 \ + 997207171DE867F9D697BF5EA6011ABCCE6C8CDB211394D2C02DD0FB60DB5A2C \ + 17AC3DC85878A90BED3809DBB96EAA5426FC8EAE0D2D65C42A479F088648BE2D \ + C801D82A366FDDC0EF234263C0B6417D5F9DA41817B88D68E5E67195C5C1EE30 \ + 95E821F22524B20BE41CEB590412E41DC648843FA9BFEC7A3DCF61AB05415733 \ + 16D3FA8151629303FE9741562ED065DB4EBC0050EF558364AE81124A28F5C013 \ + 13232FBC496DFD8A2568657B686D7214382A1A00903017DDA969878442BA5AFF +InitialBlock: 0xfffffffe +Test: Encrypt +# +Comment: Random key, random iv, 0xfffffffe counter block, 1024 bytes +Key: CF3F6640B3830E2A 8D7013F3E974FE8E 4133B1E81E1EA81B 80477EE48073B357 +IV: 7C 80 D7 1C 23 77 6E 20 F7 99 74 12 +Plaintext: r1024 00 +Ciphertext: \ + F0F4771DA359A1CC0BCC92101E8830A88258ED4134A8B15282CAD3E3B727D8C5 \ + 34F1FE108F8626A5BC4F4F0559AF9AD996F281A77E3195A9B7606FF0DB6351A8 \ + 5E6E00281DFB032AED7478FA2AB65DFFE781680AD4243EC933C6E2040B6FE22D \ + 1EC0DD83F385BF2152BAA00B21F001E64860360D0C25E7B28BCA888C88391EB8 \ + 89D76D3E4E6CC4BC4BFACCB758DE288A7B523CBDD65662D55D464CE393C6A016 \ + 590D09A2C2117084619C6AEE14EF3D54092B2FBD40B86AFC6614237FB4B01AD1 \ + 590F4BB4715114B373A5E170F9FF18F87D5D033DEDB61B72946C755673D3CFDE \ + A960F52F7DAE25C942ECE2CEB0C33B258A5CAEE89BB7FF6711B42FE12C8D9AB1 \ + 78826EECE976C58D05B6EB9F4B770A9715EBF96AE79515972375202782D343EE \ + 564B36037F49432197C1E977462BE17620B786E1DB2EF3CC759E3E3BD9B29373 \ + 367E66EEE529515BAAC37DC2B26BAA3A5587EA35F064CFEDBE5705779A72A53A \ + 2ED02D6F459768521BB1F0EB0D4A4EDCD9B0BB3E1148BDBF6A0918BFEF352FD2 \ + 149F95DE307CC388FF3ED0C72118D1AE27A112B58B2819A0976CF949DAA99AD0 \ + 1237B4BB5963E274F801FE25E62B7DC2D4B17BF85816DA5078EAE4FE676CBCAD \ + C772811C93A4F94C5198F2C542CC71CAF3E3480678B37AF2FA42061F870A3AFA \ + 5146DFE5F4969F223D3909B20CB53344EF72B7C861ADA20D4EBC1AE3DB5431C1 \ + 300DC1CC32C5A2544E8707DC040CE2559293A54D070A48B18F18CB1E6F715D8C \ + FE437BD03F55657CBB3DC95284C6830C7D7FB48249AB9EA08174FF8A04D89206 \ + 3EDDBE22D402C249718899A9E06169D49C6B723283F01EBF2707972CCA039F4A \ + D1D92449E3CA011722E03119FEED32F63F22303C73C75B413FEC2EDA0C069236 \ + 880EAA26E5226233B216D059D664AF7D5737F0F12A1D34DA3CEB83826666F4B8 \ + D7F60D917E033FBFEF756726DCA873E63ABD2A470F8CABBE21C6DDEEE668BCA0 \ + C833AC0DEEE73155C1723BA2E5EC70985F2F239822FBE628EFCC68938630D9FB \ + E88BF757A28BD8925DAD67666091BE7602D36DE65E248964469C44DBFBA76E13 \ + 3978E9DD5088BB4C314AEB56D9D553229110C7C939A129522C5F6B01F96D67ED \ + 97629A5E9DC4923745739A02151F53C8CE2CE48B33A7E359A574D9C8A48542E1 \ + EA20DDFA7E9BA5B01DDC256786026160DA6A113E553F30A4F37A7ED2D3ACA6D4 \ + 3F90516417477C3778A80AB875E90F8D81977F51973184242A4BD2EC002216CA \ + 5631F1740F558E1CDC42A252A15CB954AB2DBB1CAC199313EF657FA2D5F8405A \ + C60AC8BFCD0645CDCD0547D4433A6093C9A24F17902F5B37F2E60390C9EF30A9 \ + 853407FFF342D4787C56B665AFF0F94F1B6A0A213FB7E73F7EC1990C8C7CB1D7 \ + 7E0C233586EB00D9B10020986A31CCECFC26B435FC92E8707B7AC3CB8275FDA4 +InitialBlock: 0xfffffffe +Test: Encrypt \ No newline at end of file diff --git a/vendor/cryptopp/vendor_cryptopp/TestVectors/poly1305_tls.txt b/vendor/cryptopp/vendor_cryptopp/TestVectors/poly1305_tls.txt new file mode 100644 index 00000000..83d85f36 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/TestVectors/poly1305_tls.txt @@ -0,0 +1,1687 @@ +AlgorithmType: MAC +Name: Poly1305TLS +Source: https://cr.yp.to/mac/test.html, poly1305_gmpxx.cpp +# +Comment: Test Case 1 +Key: 6c00560680ef0904 40e60d02a4c2d505 caa6ec6adc3623e2 fac947d7daaa2947 +Message: "" +MAC: caa6ec6adc3623e2 fac947d7daaa2947 +Test: Verify +# +Comment: Test Case 2 (tamper key) +Key: 6c00560680ef0904 40e60d02a4c2d505 60a6ec6adc3623e2 fac947d7daaa2947 +Message: "" +MAC: caa6ec6adc3623e2 fac947d7daaa2947 +Test: NotVerify +# +Comment: Test Case 3 +Key: 9eb94b002440e809 681d270c1c17b70f e5cbcce30640bea3 5dd7477ffb940f6f +Message: 81 +MAC: 9cf2ae552bb6068a d4101bc629566911 +Test: Verify +# +Comment: Test Case 4 (tamper key) +Key: 9eb94b002440e809 681d270c1c17b70f e561cce30640bea3 5dd7477ffb940f6f +Message: 81 +MAC: 9cf2ae552bb6068a d4101bc629566911 +Test: NotVerify +# +Comment: Test Case 5 +Key: f8358407749b0a08 301625027cbe1501 39aa164045cbdbd0 0d0b3853ca94715c +Message: 8f0a +MAC: 298104d3e4304f54 3d58fd0e4ad6838f +Test: Verify +# +Comment: Test Case 6 (tamper key) +Key: f8358407749b0a08 301625027cbe1501 39aabc4045cbdbd0 0d0b3853ca94715c +Message: 8f0a +MAC: 298104d3e4304f54 3d58fd0e4ad6838f +Test: NotVerify +# +Comment: Test Case 7 +Key: 5d0d4602d0b06209 d082f00a4c0d4b02 4880f81277346352 bf1d132266d7c82b +Message: 8fa01d +MAC: f649000111829816 b1a8c83178f9ac29 +Test: Verify +# +Comment: Test Case 8 (tamper key) +Key: 5d0d4602d0b06209 d082f00a4c0d4b02 4880f8b877346352 bf1d132266d7c82b +Message: 8fa01d +MAC: f649000111829816 b1a8c83178f9ac29 +Test: NotVerify +# +Comment: Test Case 9 +Key: d3505b02f4d6f208 78bb6b04c0db7e00 53d667629b5507f0 535afb742f0959c7 +Message: e7b3460f +MAC: ca56abd3f638abe4 d8f5911a74d7a748 +Test: Verify +# +Comment: Test Case 10 (tamper key) +Key: d3505b02f4d6f208 78bb6b04c0db7e00 53d66762315507f0 535afb742f0959c7 +Message: e7b3460f +MAC: ca56abd3f638abe4 d8f5911a74d7a748 +Test: NotVerify +# +Comment: Test Case 11 +Key: 7db7f20fe8a9cb00 84bd2706ecd61008 700b6ff274eb7442 a11c3bdacd605c9a +Message: 097e80f3bc +MAC: 0501e0e3dbb65f6b 4125e410d6978359 +Test: Verify +# +Comment: Test Case 12 (tamper key) +Key: 7db7f20fe8a9cb00 84bd2706ecd61008 700b6ff274417442 a11c3bdacd605c9a +Message: 097e80f3bc +MAC: 0501e0e3dbb65f6b 4125e410d6978359 +Test: NotVerify +# +Comment: Test Case 13 +Key: eed5fd0fa8540e0c d4be6a0af0fc160c ea49669cbadb6dc7 4fe528dd98f9adb0 +Message: 9ad4ecfccff8 +MAC: 9a384bc9e83b410c c7d60125125e850b +Test: Verify +# +Comment: Test Case 14 (tamper key) +Key: eed5fd0fa8540e0c d4be6a0af0fc160c ea49669cbadbc7c7 4fe528dd98f9adb0 +Message: 9ad4ecfccff8 +MAC: 9a384bc9e83b410c c7d60125125e850b +Test: NotVerify +# +Comment: Test Case 15 +Key: 69a76a0d8c4e5601 2892500670882a03 fd4d32897c6e782f c1af9717578dfd85 +Message: 066344ca348a36 +MAC: 5007c2e9ba8fbbe8 f1bc26b37e321662 +Test: Verify +# +Comment: Test Case 16 (tamper key) +Key: 69a76a0d8c4e56ab 2892500670882a03 fd4d32897c6e782f c1af9717578dfd85 +Message: 066344ca348a36 +MAC: 5007c2e9ba8fbbe8 f1bc26b37e321662 +Test: NotVerify +# +Comment: Test Case 17 +Key: c74d1f0da4d9540f 449b3e0354ad610c bea3dab01ce60716 aa07a6f931d43a26 +Message: f6a185ac7a362223 +MAC: 2ccb1cabe7f5d7ef 88a82a7325cffab5 +Test: Verify +# +Comment: Test Case 18 (tamper key) +Key: c74d1f0da4d9540f 449b3e0354ad610c bea3dab01ce60716 0007a6f931d43a26 +Message: f6a185ac7a362223 +MAC: 2ccb1cabe7f5d7ef 88a82a7325cffab5 +Test: NotVerify +# +Comment: Test Case 19 +Key: f3994406bc73da00 7caf790efcc79702 e05f8b1860ab3f82 a2e36b869cc8b237 +Message: 2203215c53bb9655 a2 +MAC: 653d4cee9d320f00 83f48f6245602aac +Test: Verify +# +Comment: Test Case 20 (tamper key) +Key: f3994406bc73da00 7c05790efcc79702 e05f8b1860ab3f82 a2e36b869cc8b237 +Message: 2203215c53bb9655 a2 +MAC: 653d4cee9d320f00 83f48f6245602aac +Test: NotVerify +# +Comment: Test Case 21 +Key: af0237025068f500 a02d8a0954009504 8e64f1ec769402c2 a7aa4d06a8a06f31 +Message: 0b377ab864b44639 d26c +MAC: f7dc1b7c50319083 d4c3802a3f1e77ab +Test: Verify +# +Comment: Test Case 22 (tamper key) +Key: af0237025068f500 a02d200954009504 8e64f1ec769402c2 a7aa4d06a8a06f31 +Message: 0b377ab864b44639 d26c +MAC: f7dc1b7c50319083 d4c3802a3f1e77ab +Test: NotVerify +# +Comment: Test Case 23 +Key: 5b345c0e30f39f08 a817740af4cb7609 189d1bb937e07a37 72eccfd90d0c211f +Message: 82fbe065eaa9a096 bb9192 +MAC: ab43877f9d122f93 bcbe9088ebe9ef5b +Test: Verify +# +Comment: Test Case 24 (tamper key) +Key: 5b345c0e30f39f08 a817740af4cb7609 189d1bb937e07a37 72eccf730d0c211f +Message: 82fbe065eaa9a096 bb9192 +MAC: ab43877f9d122f93 bcbe9088ebe9ef5b +Test: NotVerify +# +Comment: Test Case 25 +Key: 977ce00ef8b9b80e f0fd090f144b730a fd8f80c109dad8b6 7e189c36062d3746 +Message: 7be95987475ce92f eeb313e9 +MAC: e9fd5bd4f3bfbb95 a2ce4d418b43ab59 +Test: Verify +# +Comment: Test Case 26 (tamper key) +Key: 977ce00ef8b9b80e f0fd090fbe4b730a fd8f80c109dad8b6 7e189c36062d3746 +Message: 7be95987475ce92f eeb313e9 +MAC: e9fd5bd4f3bfbb95 a2ce4d418b43ab59 +Test: NotVerify +# +Comment: Test Case 27 +Key: f10d70073459a600 d0181f0d7c386008 8fc51518cfbaf0d2 64ed6545a4db5705 +Message: 8910ee70ca4356b5 daf6318fb1 +MAC: d45a7fb47f3eb7ee fc6cd523400cd250 +Test: Verify +# +Comment: Test Case 28 (tamper key) +Key: f10d70073459a600 d0181f0d7c926008 8fc51518cfbaf0d2 64ed6545a4db5705 +Message: 8910ee70ca4356b5 daf6318fb1 +MAC: d45a7fb47f3eb7ee fc6cd523400cd250 +Test: NotVerify +# +Comment: Test Case 29 +Key: 0962f60104410106 eca05808ec50320a 231f6a898daf2c9b d7f1033458b3a6ec +Message: 0e7b99bf4e2e3ee8 953b44feacee +MAC: ce063142e7450102 9e3108d3afc08a40 +Test: Verify +# +Comment: Test Case 30 (tamper key) +Key: 0962f60104410106 eca05808ec50980a 231f6a898daf2c9b d7f1033458b3a6ec +Message: 0e7b99bf4e2e3ee8 953b44feacee +MAC: ce063142e7450102 9e3108d3afc08a40 +Test: NotVerify +# +Comment: Test Case 31 +Key: c9449c0fa8b83d0a d068ea0610d71906 d8c16ad216f3d782 3b929ee55ecad434 +Message: 3e8a1220219f69a8 f19ce3dc4d0028 +MAC: cbfcd497d2a9e8c0 c98ed6ca749fe361 +Test: Verify +# +Comment: Test Case 32 (tamper key) +Key: c9449c0fa8b83d0a d068ea0610d719ac d8c16ad216f3d782 3b929ee55ecad434 +Message: 3e8a1220219f69a8 f19ce3dc4d0028 +MAC: cbfcd497d2a9e8c0 c98ed6ca749fe361 +Test: NotVerify +# +Comment: Test Case 33 +Key: 4ace1206586fc501 f0f70209701b8e0c 5cb648f132ce06f4 0d5419fdd7db9dab +Message: ca948e548793a84c a86bc048cd67e521 +MAC: c13134bdefb14796 6674eb0ed4db88a6 +Test: Verify +# +Comment: Test Case 34 (tamper key) +Key: 4ace1206586fc501 f0f70209701b8e0c f6b648f132ce06f4 0d5419fdd7db9dab +Message: ca948e548793a84c a86bc048cd67e521 +MAC: c13134bdefb14796 6674eb0ed4db88a6 +Test: NotVerify +# +Comment: Test Case 35 +Key: c359190f74d8f504 5c019906a0690d08 84b3a1b42f104ea6 25ead0aff647cbc2 +Message: f8ffa1d5c7d36fc6 287ea99f8b014b63 9f +MAC: 39d1eb8bd8ae1d41 3c21bf119cad3b24 +Test: Verify +# +Comment: Test Case 36 (tamper key) +Key: c359190f74d8f504 5c019906a0690d08 8419a1b42f104ea6 25ead0aff647cbc2 +Message: f8ffa1d5c7d36fc6 287ea99f8b014b63 9f +MAC: 39d1eb8bd8ae1d41 3c21bf119cad3b24 +Test: NotVerify +# +Comment: Test Case 37 +Key: e1ff050f4852e406 f8a4c607b4485805 1d65a6a9506ced1e b242352988e782dd +Message: 53b6cd8b40d0718c 15372a1b8ccb4b98 729b +MAC: 7e354f379ddf8e2b f55461e6c00bccfb +Test: Verify +# +Comment: Test Case 38 (tamper key) +Key: e1ffaf0f4852e406 f8a4c607b4485805 1d65a6a9506ced1e b242352988e782dd +Message: 53b6cd8b40d0718c 15372a1b8ccb4b98 729b +MAC: 7e354f379ddf8e2b f55461e6c00bccfb +Test: NotVerify +# +Comment: Test Case 39 +Key: 44a9ac03b086b20c 24f171028875ce03 064fb77a3614166f 5664b216966c3765 +Message: 5562a19759ec7f53 be3cba7623a34c32 7491ee +MAC: e7cbb593a39eb458 79629d77fe81514c +Test: Verify +# +Comment: Test Case 40 (tamper key) +Key: 44a9aca9b086b20c 24f171028875ce03 064fb77a3614166f 5664b216966c3765 +Message: 5562a19759ec7f53 be3cba7623a34c32 7491ee +MAC: e7cbb593a39eb458 79629d77fe81514c +Test: NotVerify +# +Comment: Test Case 41 +Key: 6989f80470166d06 78acf60f2c5c8a07 7d1bf975b5dcc2a2 8f8976bbe194aade +Message: 33392af00196f3bd 844d182ec960af42 60aa1807 +MAC: fa3d316cda7cace4 a2ec7a111a81854a +Test: Verify +# +Comment: Test Case 42 (tamper key) +Key: 6989f804da166d06 78acf60f2c5c8a07 7d1bf975b5dcc2a2 8f8976bbe194aade +Message: 33392af00196f3bd 844d182ec960af42 60aa1807 +MAC: fa3d316cda7cace4 a2ec7a111a81854a +Test: NotVerify +# +Comment: Test Case 43 +Key: f1409609d05f640e 402b870e3cb8bb06 c8821c9b30333b6f ff8a7b866e6b3409 +Message: df2b8ec69dbbc2dc 87557434dbfbd7fc 8df003aa1c +MAC: 5ca38bb7a9d4280a 45885baa53d20da9 +Test: Verify +# +Comment: Test Case 44 (tamper key) +Key: f1409609d05f640e 402b870e3cb8bb06 c8821c9b30993b6f ff8a7b866e6b3409 +Message: df2b8ec69dbbc2dc 87557434dbfbd7fc 8df003aa1c +MAC: 5ca38bb7a9d4280a 45885baa53d20da9 +Test: NotVerify +# +Comment: Test Case 45 +Key: df2e700f38173305 e455c9015479bb02 7a2015c6a63602ad 67139e9af18155b5 +Message: 7bba160780c3db5a 4ce9c57e0fa7f798 66649ae28ff2 +MAC: c913c2fd791cecd1 1ac05efb2871ea39 +Test: Verify +# +Comment: Test Case 46 (tamper key) +Key: df2e700f38179905 e455c9015479bb02 7a2015c6a63602ad 67139e9af18155b5 +Message: 7bba160780c3db5a 4ce9c57e0fa7f798 66649ae28ff2 +MAC: c913c2fd791cecd1 1ac05efb2871ea39 +Test: NotVerify +# +Comment: Test Case 47 +Key: 0f9f60012807f505 ac89d90b549c1a02 806c0da093ba89b1 6414899089fd6479 +Message: 2a472b6ce98423cd 0403481f40773d70 830dbc7813b59e +MAC: d070a23d1cfe379c c7c9690990d5d1e9 +Test: Verify +# +Comment: Test Case 48 (tamper key) +Key: 0f9f60012807f5af ac89d90b549c1a02 806c0da093ba89b1 6414899089fd6479 +Message: 2a472b6ce98423cd 0403481f40773d70 830dbc7813b59e +MAC: d070a23d1cfe379c c7c9690990d5d1e9 +Test: NotVerify +# +Comment: Test Case 49 +Key: 8bf0300cbc104203 689c460c945c5c0d cd51d5524c637f4d 1e77ce7ca787a8a4 +Message: 663e30b944011c57 0cff89722f04e6b0 255555a1fa86a42e +MAC: 0e5e822e268785a0 1658dda538e010e9 +Test: Verify +# +Comment: Test Case 50 (tamper key) +Key: 8bf0300cbc104203 c29c460c945c5c0d cd51d5524c637f4d 1e77ce7ca787a8a4 +Message: 663e30b944011c57 0cff89722f04e6b0 255555a1fa86a42e +MAC: 0e5e822e268785a0 1658dda538e010e9 +Test: NotVerify +# +Comment: Test Case 51 +Key: 2fc60e02b4c45908 90a5790df4bcdd02 da3418a3f0127faa ddf52e52c9ff0429 +Message: 4bad6a09e7156b84 41be3784b4b62328 4e63086f4551ad1a ea +MAC: 28768d05961b9450 df7cbbc6d9288b19 +Test: Verify +# +Comment: Test Case 52 (tamper key) +Key: 2fc60e02b4c45908 900f790df4bcdd02 da3418a3f0127faa ddf52e52c9ff0429 +Message: 4bad6a09e7156b84 41be3784b4b62328 4e63086f4551ad1a ea +MAC: 28768d05961b9450 df7cbbc6d9288b19 +Test: NotVerify +# +Comment: Test Case 53 +Key: 77df66080ce73b0b 1c0a8d088411bf09 a35bb9ceecf0a47d eb12ae11a13ef598 +Message: 355cbaa4bc588708 e901a6e10efd9f66 e66bf146f61e1e43 5f96 +MAC: 05d6ed5db3112042 9b405025d432baa9 +Test: Verify +# +Comment: Test Case 54 (tamper key) +Key: 77df66080ce73b0b 1c0a27088411bf09 a35bb9ceecf0a47d eb12ae11a13ef598 +Message: 355cbaa4bc588708 e901a6e10efd9f66 e66bf146f61e1e43 5f96 +MAC: 05d6ed5db3112042 9b405025d432baa9 +Test: NotVerify +# +Comment: Test Case 55 +Key: 76ef0403b8c87502 849db00790cdb708 d3385d038f4bc30a b090b12e2c1c55ca +Message: 00988a1e18b26c5d 5d0457e1f6edc116 a6db9a02adfe1cb2 fc4d66 +MAC: 02b6c692648e79e2 73e85d0b79374c6f +Test: Verify +# +Comment: Test Case 56 (tamper key) +Key: 76ef0403b8c87502 849db0ad90cdb708 d3385d038f4bc30a b090b12e2c1c55ca +Message: 00988a1e18b26c5d 5d0457e1f6edc116 a6db9a02adfe1cb2 fc4d66 +MAC: 02b6c692648e79e2 73e85d0b79374c6f +Test: NotVerify +# +Comment: Test Case 57 +Key: f2c64709f8b86d05 fcf5f00338381e04 a029d6a32b3b419e 415d51ef6502233e +Message: e42763dfe30d8810 18205b2f5435c7db da79221281a2fb5a 86b9ce1c +MAC: 551144a8eda2bf14 d010f1dc21ea13ee +Test: Verify +# +Comment: Test Case 58 (tamper key) +Key: f2c64709f8b86d05 fcf5f00392381e04 a029d6a32b3b419e 415d51ef6502233e +Message: e42763dfe30d8810 18205b2f5435c7db da79221281a2fb5a 86b9ce1c +MAC: 551144a8eda2bf14 d010f1dc21ea13ee +Test: NotVerify +# +Comment: Test Case 59 +Key: 0d2092073cd01e09 e4764b09e0d1e707 c9819dabb1e94b28 3fc0ee5740c9cf6a +Message: f67cdcdd1a4c26bc 4b1cbf537d350ab4 bc3532a8ec72625e a364ccafd4 +MAC: 13c4e52eba92f6a5 287db127c8e5ae6b +Test: Verify +# +Comment: Test Case 60 (tamper key) +Key: 0d2092073cd01e09 e4764b09e07be707 c9819dabb1e94b28 3fc0ee5740c9cf6a +Message: f67cdcdd1a4c26bc 4b1cbf537d350ab4 bc3532a8ec72625e a364ccafd4 +MAC: 13c4e52eba92f6a5 287db127c8e5ae6b +Test: NotVerify +# +Comment: Test Case 61 +Key: a3660f0dec674e05 0c60460d04a93102 fe2678de8c4d1cc7 36684b740687f8ae +Message: 5fd3d04591e7bc88 a69d9237ce3e8675 8de19ddc98c500f4 85628595545c +MAC: a9899643077a347e 127e6368ff12a928 +Test: Verify +# +Comment: Test Case 62 (tamper key) +Key: a3660f0dec674e05 0c60460d04a93102 fe2678de8c4d1cc7 36684b74068752ae +Message: 5fd3d04591e7bc88 a69d9237ce3e8675 8de19ddc98c500f4 85628595545c +MAC: a9899643077a347e 127e6368ff12a928 +Test: NotVerify +# +Comment: Test Case 63 +Key: ee50a10a04a6dc0a c41b5406f48aff0c 030467ac5a15c1e6 94c09815175a2e45 +Message: 2ba591c44f0d5c91 7ce644481b8eb788 fce6e8eb4f860c1b b58f15c896ce35 +MAC: 439058fc79b0e793 66bab10ace80f001 +Test: Verify +# +Comment: Test Case 64 (tamper key) +Key: ee50a10a04a6dc0a c41b5406f48aff0c 030467ac5a15c1e6 94c09815175a2eef +Message: 2ba591c44f0d5c91 7ce644481b8eb788 fce6e8eb4f860c1b b58f15c896ce35 +MAC: 439058fc79b0e793 66bab10ace80f001 +Test: NotVerify +# +Comment: Test Case 65 +Key: 8b5a130ddc6b960b 88bcc0047479cd0b 828b16263294e1c2 8d25df023db16cce +Message: 297bf4cc4c212784 97066c764e3fa1f9 10eb2dd5f6d0de53 76700372cf5b71f8 +MAC: 309869a019de2fc0 0c99c3d0f1cbe98a +Test: Verify +# +Comment: Test Case 66 (tamper key) +Key: 8b5a130ddc6b960b 88bcc0047479cd0b 288b16263294e1c2 8d25df023db16cce +Message: 297bf4cc4c212784 97066c764e3fa1f9 10eb2dd5f6d0de53 76700372cf5b71f8 +MAC: 309869a019de2fc0 0c99c3d0f1cbe98a +Test: NotVerify +# +Comment: Test Case 67 +Key: 22ae9c06b0870f07 48f0940fcc3cd707 d08c54bb7bae3331 2aa689108eb305c3 +Message: \ + bfeb68402beeb14f 4005c52136e71410 c055835aee52d97d 69753343a976d468 \ + 61 +MAC: d17a17251f33db4f 80ff296d69ee0904 +Test: Verify +# +Comment: Test Case 68 +Key: dd5165050c2ac601 d005250a887ad50b d05fec8ce14ab38c d130e3bc80287396 +Message: \ + 9e58ab8da53a45e2 a688497367554b91 3d5dd90961eb604b ff0aa2ccf2041b90 \ + 5cc71d01 +MAC: 19d6f019c462a9c7 90c6849020171b09 +Test: Verify +# +Comment: Test Case 69 +Key: 4bc9ea0c5c88770a 9cce0c07d49b230c 1111ae9c20bb8bf0 ed3a58d4a263909c +Message: \ + b728e3d96a708ec8 f580f933acd2b3a0 4c26224e42160f64 5b921e9392590249 \ + 81e522ec56b0 +MAC: fe907e0dc0e0e0a6 4502757e67513746 +Test: Verify +# +Comment: Test Case 70 +Key: c2707b0510afcb04 e0f7cd06848fe80f 00dfe6d843a8af02 a5402028cbd91ea8 +Message: \ + fb9dc805868a879b 65ce27f64dfb32d4 ab67394fb66e8f44 426f8f10bef5efb9 \ + 92b7be184245b3a7 14 +MAC: 100727aa6d98b8dc ae6192dccdf430f9 +Test: Verify +# +Comment: Test Case 71 +Key: dc9eae00105d050c 1466010e809b870a ff8e964bd432091b b4197e1a365ce647 +Message: \ + dc78593fb2f712ed c08e30d5afc4a2b3 34be93252cf421df f643e71e8caead68 \ + 2607a7d8feb9c5be 47f593 +MAC: 762881a58666f7f4 90a2098b988dfbab +Test: Verify +# +Comment: Test Case 72 +Key: 217d070fa8a0f707 5c0c3c0c6cfd7b00 d795415916552133 bbff0158b3f3715b +Message: \ + 990b172ca693a1ca 82389ff823ce1981 81c147f0ff981d09 057f7c078c9f5b25 \ + ab72515105f21c87 2abb7f4d89 +MAC: f9d2218715ec2042 be9511eb10612e45 +Test: Verify +# +Comment: Test Case 73 +Key: 00a03603ac04ab05 d4bab20644cceb09 1d9247859928af51 c0f6756ac391c199 +Message: \ + 8567e96d59245ba6 f681831314ebe44b 6b758c60e5f443fe 6f72f942258c3eab \ + f427184d4b73f341 f4765408623953 +MAC: cecdbd7cf312b5dd d4176164f240f63c +Test: Verify +# +Comment: Test Case 74 +Key: 232eca048865c409 fcf13b05dc34cc03 4ae5a9cb6a9d7811 402dacde7a2a3549 +Message: \ + fccb42575bccdf0c a9a73603b6a61235 80deed32e3a0871c 650dda8105ded202 \ + aa145905e038118a df488d95ee9fca6f 7e +MAC: 4a88054fcf301354 d79ae487efa4f2a1 +Test: Verify +# +Comment: Test Case 75 +Key: 1c4b7501a4c08006 b0669805089c5e04 e3aeb945d7df07eb d6f64fa8d6a3fe8e +Message: \ + 95bce24595eeb7c2 8cd5664eb275c1b9 7277211b99d22f8e e06d4e70426bc1d7 \ + 27a31dbc92d47f1e aae56c5c5a2d15cc a536e8 +MAC: 91fa3b0013b40bdb 48bde0fbeb67dd3e +Test: Verify +# +Comment: Test Case 76 +Key: 0fa9890df83a5709 0c57120a90fc3a06 472545db9471d177 4c40f5bd69c4d382 +Message: \ + e52cef7130ca4681 02ad94fa49121a61 29244b25f150ffbd b2e282a88a38736f \ + 6562e1952d27162f d4ab291ebd437fe6 67ca0b581b +MAC: 41543518a6bbae1d d85c933f642a5cd2 +Test: Verify +# +Comment: Test Case 77 +Key: ab7a8109d465cb03 00cac50198744c0d 6dd3dfa7670cc263 8f9051b5734aa454 +Message: \ + 0fde2210dc04bd3f 429fe6e8b2b957bd 3beb31589efd1c2c f28628a69a5311a9 \ + 3234b90e38764d7a 153362c7ecb98428 a4b58042b29c6ea5 +MAC: 974d51748d5b3710 7a98edf22398908a +Test: Verify +# +Comment: Test Case 78 +Key: 2b13e0074469bc01 f0cc7b0c8c59ec09 960d2c1dc2c83958 17ae24b97cc33b2a +Message: \ + 3f7bc44d295a2e93 26c04edab2208503 9cc9b5b188b26f5f a912e37fd4f11313 \ + 6cd76195318f2957 4f77310197b60433 7fb9e4076b536714 664a +MAC: 4f00c4ce7827d5c7 70fad723216e0310 +Test: Verify +# +Comment: Test Case 79 +Key: d4d1fb07282a0d00 542d71011415aa0b 7d9de02190f125e3 0d0bf17c1c7eb027 +Message: \ + 1dbd779ad1eb943d ad394ca41e4d1ada 56c96023a1f533f4 a97a80bdc8616ce6 \ + 1ee380efce152d7b 4e791f6cc639461d 03a740a49c739845 ed1902b67a +MAC: 6c09a39376fda312 f3c198402e351aed +Test: Verify +# +Comment: Test Case 80 +Key: fa77320b28d40601 d4e5bd0c4053c107 9c088b13d041b0b4 46914404513e9b85 +Message: \ + 8d6b9aea354a873f 07fea61debf0b3d1 5256a369a45ea395 00205ad539d8e2c6 \ + 437cb178c638b7cd 365eea214e9ef2a0 f4950998f3ac2df4 cc87c9055fabcc +MAC: 60ab5f852b952e30 99e2335e431b3d47 +Test: Verify +# +Comment: Test Case 81 +Key: e560c90b1051a60b 08166b0ec4cf0e0f af6a5f2671614310 55a4cd4410dfb7c0 +Message: \ + 49379a730f74db6b 6379ba01c8c0bde5 2403cef809107bdb fc3fafe2f6f4803f \ + 2b1ab33a8f8ea6f2 0760f3d021b0b545 b3833dbc93b89890 f84772ee3bf32e66 \ + 0d +MAC: a1ac73607a59abea 9d01cdc6516f30d8 +Test: Verify +# +Comment: Test Case 82 +Key: 6ca28904b0e8a408 0c16000daceedf0d 5fad032ae13b6cc7 532f176645c328a2 +Message: \ + e3f439de4d80ff30 f57167d0848488b0 b403e196d3d6b407 90524f9cf11ccad4 \ + 1003b25e84b28e79 23f549a779d1582d d439c4a70f78ae9f cafd3cbb1906902a \ + 0a42888e +MAC: 23fcd1f799308819 90685698043de47f +Test: Verify +# +Comment: Test Case 83 +Key: be0ebe02546eb90c 3c14cb03d874ea08 abb567483c791d4c b19195b07a60609b +Message: \ + 743e66910aa33980 c4b3cc9747fb9518 78eaf700bcd4f840 8a3537ddcb3ba53f \ + 790bd084ae0a0472 bdd00904cc9e1d44 88144444e83c8572 71bc4f3df7f57c71 \ + 004df5af57f921 +MAC: c3c52c61cb9ded67 cdf55a95424b6c39 +Test: Verify +# +Comment: Test Case 84 +Key: eb12200d2c7d6504 50d6bb09e85ce80b c601e32c4de211a8 d44d2c17f10829e9 +Message: \ + 0f747345bf913ab5 0ee50756314f63bd 4738b072cad38932 bf15232dde0f81ed \ + 83f53342866df894 52ffea844e4e4195 86f10750c4918284 a6a5b184b4327137 \ + 27a479ae12714264 702d +MAC: 41e89ec7f4537430 0306072fcbb1018b +Test: Verify +# +Comment: Test Case 85 +Key: 8447b00168468f04 5c31490ff0a47b0c 989b62da6bf1eb89 965c4bac2a3e87be +Message: \ + 0ff08bf671f864bf 61df6d68b0156456 75e8e17714149208 42828931d0821ddf \ + 72a9d5e3a139a302 18106ac925ce1f9b b60012ca15a4d357 265c89f7dea6d651 \ + 4fac34f0e5d7f2fe e75cc70d2b +MAC: 95ee8127f435a416 99993325da147e1c +Test: Verify +# +Comment: Test Case 86 +Key: a539390498f79704 402f2b03e00c250e b460d19c0a1a111a a7d714c733b69663 +Message: \ + 8752b8468f349933 2f4d523c70754751 dd827e25c7746967 2ee2e718d2d4a659 \ + 265ea0b59239e8c2 863bfef6b045488e c7c6b38f3a1cf668 fedd80d1b2262ad8 \ + 85ca8e170376d989 b1d780621dc8f0e4 +MAC: d56f8545a2424124 1e708111bdf26822 +Test: Verify +# +Comment: Test Case 87 +Key: 83bc450fe88c0c0c c84522028094460a 798610e6b0c7c40a 66e2641f9b25df80 +Message: \ + 54b4bcc3e04c3258 d77cddca030e0625 3125ac1fb9303557 1e5271ff9274cfe7 \ + 288baa09d8dd61af 593e7a5c4d80817e a52e9d5e5ed2b57c 24267cb79a4b9ec3 \ + d748ccaf252d5e7e 6cd8dab9585c37fd 8ad5 +MAC: 0dd6c3e7242745b3 9cf8852a536bdd6e +Test: Verify +# +Comment: Test Case 88 +Key: f4db15052c9d6002 90ef2804247ec700 ec22ba8d1010c6d3 054554eee9ddfbfc +Message: \ + ac4ba787aa9924ec e9b5cf481374b849 b282681e4427ab65 16320eb543da52f0 \ + 26fa77d0939bbd7c 508cc464007dadb2 ff16d0433d7ca853 aeb709f2915be2b7 \ + 555988e8f4456444 d129a8d1a65684a5 6c54e8a9d0 +MAC: 3b7b96075c39d676 cc6eb4275fa90065 +Test: Verify +# +Comment: Test Case 89 +Key: 58dc5b0efc725009 48dcad04c4bcb604 95a48d3933730bbb bb2ebe985a05069b +Message: \ + c37604de5c6f8b56 9e62b20b67026011 49954238fe92dba5 7946a18856b47d19 \ + 2a81f786f083dc8f e58f9a4c91fa5eda 8fa0128e32ee33ab 34d4338a88b0a3b3 \ + 329a39221d16b103 a54c4f3646ad10d6 4d23647f11972b45 +MAC: 9d0c7e007ca4fab5 4fdf1f17ff434189 +Test: Verify +# +Comment: Test Case 90 +Key: d17b0c02dc81cb0c d0f02c03b4f42e01 50fd95614dc7a893 549fa20ef0bcbf68 +Message: \ + d89144b29649c6d4 a4296cdbb045df46 062b56b4d47e6012 5842e1ce66a8753f \ + 39baf1d003b7a4a7 e11082915662d85c 8d2e1062ac707404 b356d219fe485838 \ + 0249080501acace2 bd2e7313904b6f1e 797f8026eff42aa2 4afd +MAC: 2e639bedc506ef1a 958e2ca494eb7690 +Test: Verify +# +Comment: Test Case 91 +Key: edda9c017094c00a e0c61f06b058280d d1a3baecf36bd492 733755a195835409 +Message: \ + f3cbca5b8a12bf7c ce408d6943c4eb53 b9e8f8b7961dafcb df0a37f87814b86b \ + e082c66a9586e763 c674cc0938b75cf1 9f54a83571570051 623749da4c01452c \ + 840c9619927d7c58 f249612a00bd1ca0 11c4d5831cd6d47e 0d1d58591e +MAC: 046fc9410c4517e1 1a51aab2ef07dc87 +Test: Verify +# +Comment: Test Case 92 +Key: 7bdd8c0da4342c02 1c5ce60684c6c40d 90e1ce9d222d2d28 584139f30ad8c4e6 +Message: \ + 9fe3c76e7a6dbc81 3e2a0e0330924f7e 15e10183ceefdc7b 34a62c3ec84bcb67 \ + 2e92d5a80091293e bb3841ecca906ae0 726b63405a3fbb8f e5e8cdad33981462 \ + 2bea0a2b7b346937 6cab23363b8d16ad f879ed52b8a9e19d 91af4ac4475f2672 +MAC: f393e130dbec54b3 a0e8f196cf7e9e79 +Test: Verify +# +Comment: Test Case 93 +Key: 86660202cc57050e 6427d204b82f4e03 b99faffb8f841b11 dd42eccb03e6282a +Message: \ + 7a86d760f01773d4 2da3d2863c5f7d91 49918a13d9f06064 d66ba951ec247166 \ + ab49c69b60396f8d dc411418a091a9e9 2233fdfb245d5ffa c8084bb42dbd1ad8 \ + 06e073661ae2f3f6 24070fc499b8aebb ecabb71008160ad0 1f56854c139f2419 \ + 8097 +MAC: 123b536a06cf5c95 459f2b397d23b1d4 +Test: Verify +# +Comment: Test Case 94 +Key: 8779d50ea4d3d70a bc0f7a0e94870c08 7db7cdd351845de8 1458ac1e42456cfc +Message: \ + 6c9bccb11c7898d8 10a918a28cadaedc f45ee64dd9cd03d1 a619c45231ea2c9d \ + 85f84ea270e67a81 8f92231c40d1f834 2fdf8108ac84da52 9e9ea5cf88d16c0e \ + c9bab03aa02abb30 bdde4cfdb04431df 23b3e8d037c222d5 60c7a4e89810f662 \ + caa69c6bd1 +MAC: 831635b0a96e4cbf e04584354818e070 +Test: Verify +# +Comment: Test Case 95 +Key: 1cf4200b4c6b8402 4403ee0b60b97f02 29c370b9dcd9e12e 51b86c1124cdd0d9 +Message: \ + 84cbdd86ae0d1d8c 4cb6c40c4366a147 4b89039b51ea7a92 220bd22cfbd69c80 \ + a179064f8623dbd3 d99fdf1d05806451 0967ec5b5166ed74 71bfa06d953ced36 \ + b5f3853c16600fef ffee0c056e705678 d842d329a9c09d1a 7f3e87147a744a30 \ + 67cf6c7d2f7b6d2e +MAC: 9b6205ec70428736 6ac3cc2683dbe48e +Test: Verify +# +Comment: Test Case 96 +Key: a86f5c09a4d6e80f 1024630ce0639e04 043d1e2cd3814fd5 821f5081811f35c9 +Message: \ + 1394e252457a265e 82a51c502c1e24e7 2087a0afd089ce1d 67a53677ba69c7cd \ + fda91f432445a1a6 ebbdf717db1bfefb a39faa732878918f 1dc706d730cea42e \ + 77c4719b091242f4 cf390cab540aa6f7 a9516bd1c9fc61e7 c367bef3356321ad \ + 27924830a48a2574 c3311f +MAC: f66ec92aafae081d 9cfca198d2cf3766 +Test: Verify +# +Comment: Test Case 97 +Key: 14643d02b4a71100 0813930dcc40ea0e 97b9dd034307720a 0c4e2a54d9cff874 +Message: \ + 004ed86fe260a5ae 56697912177cf1a4 042acdf6b963c6f0 e8a301a1507b4d50 \ + c925bfab86645adc cdd3eee54fe08953 0a564ac3b910b3a1 b3b443032f9054f8 \ + b613a43c78fe1845 d1062a21e6b474f0 0abeb3c4ce666581 1aa8854939d942ef \ + ece62b64e443aab5 49d4d63088 +MAC: e817b9c67fcd70ed 1c614ed8e0f45b11 +Test: Verify +# +Comment: Test Case 98 +Key: ba76150a30180f0d ac684d0a641de10f 5d9e33e8ab943769 7dec8b26c42ba818 +Message: \ + 698af15ee8c1e252 550d059e7e624130 b763e4e7075a1ac1 6c944a10436683ac \ + f0750ad936ec2b8b fa302978936ba84a ce8c31d5e64c9652 e0e0632446e6d037 \ + 5bdb1091c73b1dc1 6b4639feb1e2487f 6e7a5455c6eba7a6 cb0aca12f19b494c \ + 7659de3d94fbffff 4138fef31a467289 +MAC: 25b09247a1f77037 4c96d867adde75d8 +Test: Verify +# +Comment: Test Case 99 +Key: 0e5f370360490908 a05e2b0744030c0f 8cb1bdc9d2a59c27 ba90d55f48a112cf +Message: \ + 4ee155a56f1065e2 dea7a4ec345b14f0 d01ab13e5bb8ad00 4adb914b92654be0 \ + 47a085b6b0ea988f 913c7bc69790b668 aa67a6051f54056a 2f97b5c1fc00a243 \ + a027fa511292e0a3 cf5b6966eb1fce95 87759aa6c9a010f8 37c6b933c65b7767 \ + 8371b895039838d2 f3a239dfc1077448 7c0f +MAC: 18dbc8eca952df78 1f510ead329010c4 +Test: Verify +# +Comment: Test Case 100 +Key: fd21ed0da4a1160d c8bc770844cb4d0c d57178462020fe1f 67b51670422b4a5d +Message: \ + 9cd7265436f26822 3481d1ec069da31e d429f7e0250c1634 9704764feb43d187 \ + 1bf8dc51ea44731e c5450bcbe2aee9b6 d7e196fcedad3084 b1a6d39ceaa52405 \ + 9d00568744c9a509 0eb0d5f05ebea636 9f3d328dea63119b 09e538f38a5cf827 \ + 5c4eaea01853a926 047e17623dbd98dc facb69e42e +MAC: b56b3a9bd4e6a2f9 55309b8852c327df +Test: Verify +# +Comment: Test Case 101 +Key: aea7d4001c210001 1482960b3cd07e02 3de8adc9052a49b0 704455149b3d6aff +Message: \ + ee3164821122584f f2712fea1b56ec50 f7cb5b9404f8bca1 56a9adb4079703f5 \ + c96877da8acf297c 4058665bae52aca5 1e073a2200f6c356 9f700aa6070d9bd0 \ + 7512aa00e1d47c21 2ce37ddb35298053 30ba7530b1388650 a890f7b09e928013 \ + a52b1386ff90a82b 732506a84e87fc7e 4171aff2aa354352 +MAC: a285cfcf4c306f5c 898acc06be4c0598 +Test: Verify +# +Comment: Test Case 102 +Key: a12a2d0504b33006 2ca69b042c29c50f 4fa62438cda2af9b bd8a6d26d8bb8cd6 +Message: \ + e216ae8f304f8638 b592ca3ef53b0ee3 d07c61b61710bbf9 254749df01fe0ee4 \ + 14bc73440bf97dc1 8c47ff81820d6552 8ac608a1d6c39afb 0ae3da0be1e8eff5 \ + a5623ab05cb771e8 fe7169807eced208 94daaa6a9d4466a7 2840b20929a2ffce \ + 04397e60f0f048ee 61b26edf8040e815 1a927fb7d6e55efe 2610 +MAC: 39027735547ab026 d1fb8b26cbf5e49d +Test: Verify +# +Comment: Test Case 103 +Key: 13e3190d5059980d f8c19801f0d64a0b 1f56d6d5804dd54a c34feda5b18ce0e3 +Message: \ + fe049fd206fe1058 f347a5116b57b507 6d506885954eabf5 88257d5d50f2734e \ + f61220fc11305404 77fa15e251cae9bf 1b5144b09ff0a627 1523856516f8b30c \ + 0ad3091b035d1f7a 57355ca9ff45681a 96accb369c715db1 94e216aadac9b7e5 \ + 9cc0009f1d201975 55751e54ba866f51 323a87cfabe4803f c797eaa1 +MAC: d170f3ccf6536d0e 43bb3da0135d8065 +Test: Verify +# +Comment: Test Case 104 +Key: e165e406c8b2a409 84ee860ee8b6280b a392f1dce9508c1d de22dc5a7b5a3bb3 +Message: \ + fd409a981eec7e02 1bd3a1f93e349c13 2491f346d7a09579 4236ab161e7d581b \ + bdf2b3dbde31def9 047ff343b48f56d8 204a1ef7eab4702c ea1b4208989a2455 \ + 8dd7316b090f650d 8e585042e7a71a07 f139fedbed6e07d7 8949df22e4037771 \ + dba8dce4b741f146 99428880e9a387da dc85b5c9f3bca07d 057f9fe98316 +MAC: 0e92a43062cff675 b25d8dce1b0f38d6 +Test: Verify +# +Comment: Test Case 105 +Key: bb17ef05a4223e02 0851560d105ff403 bd4d9e03f0f25734 4e2a72420abba27f +Message: \ + c0c87600e469f138 d977e6fc96027d1f 1a3226e62836c6ba 1679971e9bdc445c \ + a4bb5c89244dc1fd c4a7fa5ba9777ac3 aaa0aad2d7708ced e9240b850050e1a5 \ + 0b3d2e2f8aef2c4e 9626a93f9e240248 c4ac1a9b1ca78806 cb948bcbe46c70ef \ + a99e1e338d4a8123 712b620f4f655713 1171af2e183734e3 cbbfafaf2b1f9ed4 \ + be +MAC: 58376a2e1b4f4d98 6b596e13bf670346 +Test: Verify +# +Comment: Test Case 106 (tamper mac) +Key: bb17ef05a4223e02 0851560d105ff403 bd4d9e03f0f25734 4e2a72420abba27f +Message: \ + c0c87600e469f138 d977e6fc96027d1f 1a3226e62836c6ba 1679971e9bdc445c \ + a4bb5c89244dc1fd c4a7fa5ba9777ac3 aaa0aad2d7708ced e9240b850050e1a5 \ + 0b3d2e2f8aef2c4e 9626a93f9e240248 c4ac1a9b1ca78806 cb948bcbe46c70ef \ + a99e1e338d4a8123 712b620f4f655713 1171af2e183734e3 cbbfafaf2b1f9ed4 \ + be +MAC: 589d6a2e1b4f4d98 6b596e13bf670346 +Test: NotVerify +# +Comment: Test Case 107 +Key: 64ef1404bc1a6b0a 4871de0324c6ff0a 0bc77d921682da42 1b5f322cb33a94f4 +Message: \ + b4050e4bf098dba5 88bab4d7a7efee16 b5877abc1a32a867 3a80ed2a636b2217 \ + 70306260c83d0650 f7ba279faa15b55f 9d2f1bb761c31e9b 430bc6a677e8bee7 \ + 192048e15e4e3255 0859f4b26fa9110c d82dc339f0e2d534 ed9bda6483984c9c \ + b9947e17e2b06cea 09619d780aae84e3 db481ccc2af10017 8cda7c1073c8ac2c \ + 5c2a433edaaf +MAC: 581f86045c623ede ce9af5cb083d7b24 +Test: Verify +# +Comment: Test Case 108 (tamper mac) +Key: 64ef1404bc1a6b0a 4871de0324c6ff0a 0bc77d921682da42 1b5f322cb33a94f4 +Message: \ + b4050e4bf098dba5 88bab4d7a7efee16 b5877abc1a32a867 3a80ed2a636b2217 \ + 70306260c83d0650 f7ba279faa15b55f 9d2f1bb761c31e9b 430bc6a677e8bee7 \ + 192048e15e4e3255 0859f4b26fa9110c d82dc339f0e2d534 ed9bda6483984c9c \ + b9947e17e2b06cea 09619d780aae84e3 db481ccc2af10017 8cda7c1073c8ac2c \ + 5c2a433edaaf +MAC: 581f86045c6294de ce9af5cb083d7b24 +Test: NotVerify +# +Comment: Test Case 109 +Key: fcbb7c0908116905 304b9f05440cda0f a27d8f87e212f955 9dee1be9a17ca3d1 +Message: \ + df14c5dcd2bd861c 59d25a2d999af84b 5dea9649e161711e 66396657c77a28a6 \ + 8eed8260ab087d04 dbd73274712abfcf 145518f5b68a141d c37a748af59c3183 \ + 89b3e434bc613997 386b0baa95ca79a9 1f919fd61bb3f3df 2d676922039aa68c \ + 4e8ac10aebfaa123 65accdfa7646a395 d8426bf3f55ed223 c53c45c8d6eb5524 \ + 75162e6010cf8475 7b51 +MAC: da9afd769d738490 4ad5b790550bd921 +Test: Verify +# +Comment: Test Case 110 (tamper mac) +Key: fcbb7c0908116905 304b9f05440cda0f a27d8f87e212f955 9dee1be9a17ca3d1 +Message: \ + df14c5dcd2bd861c 59d25a2d999af84b 5dea9649e161711e 66396657c77a28a6 \ + 8eed8260ab087d04 dbd73274712abfcf 145518f5b68a141d c37a748af59c3183 \ + 89b3e434bc613997 386b0baa95ca79a9 1f919fd61bb3f3df 2d676922039aa68c \ + 4e8ac10aebfaa123 65accdfa7646a395 d8426bf3f55ed223 c53c45c8d6eb5524 \ + 75162e6010cf8475 7b51 +MAC: da9afd769d738490 4ad51d90550bd921 +Test: NotVerify +# +Comment: Test Case 111 +Key: 724e8d0008a4c703 5058560514aac50c 42d54ceabd57cbe3 596c1dbe2eb78661 +Message: \ + b75a876f437d9956 01c769d641111bda 9183823bea97a478 d616e43ed43c238b \ + 96abfbd928942f29 5b99009caa1b763b 9ef87788901b0166 32e5a50621c891b7 \ + 738c919c21c0c57c 59c51904e08f3f7f 88b60718d2087e04 ed230a0eec9bc65f \ + 2857fb4917c1c571 86de75676eb4e6f6 6bed0e3df68c41e3 b04bf29ce6b8fb0e \ + 0ff75726b81d973e fb0ca569 +MAC: ce103a046cfa78b3 82ea20aaa0ceed60 +Test: Verify +# +Comment: Test Case 112 (tamper mac) +Key: 724e8d0008a4c703 5058560514aac50c 42d54ceabd57cbe3 596c1dbe2eb78661 +Message: \ + b75a876f437d9956 01c769d641111bda 9183823bea97a478 d616e43ed43c238b \ + 96abfbd928942f29 5b99009caa1b763b 9ef87788901b0166 32e5a50621c891b7 \ + 738c919c21c0c57c 59c51904e08f3f7f 88b60718d2087e04 ed230a0eec9bc65f \ + 2857fb4917c1c571 86de75676eb4e6f6 6bed0e3df68c41e3 b04bf29ce6b8fb0e \ + 0ff75726b81d973e fb0ca569 +MAC: ce103a046cfa78b3 82ea20aa0aceed60 +Test: NotVerify +# +Comment: Test Case 113 +Key: 06496108d4167706 147fbf05ec1d9000 12a2ab1739e1e5e0 49154be49da17534 +Message: \ + 42dd14ba19346654 cd182c596b6ca9a6 f548fb60b7b37324 982f6fa80db2974f \ + 8fab09a8df70fcad 882806f394b09989 f894e9af475dd3df 8c428799f41ee983 \ + c9f22ba9622756ea 4f5cdde30c766c04 0a56b351b386313f c9b8d9bdd7c241a0 \ + b46c4917949f01e3 fcdfc70855330d60 89c0b13c47e27c10 9b55cd72170e12cb \ + 7b5ce20ffbe4f2f7 c3b90018ed0d7876 cd +MAC: 203b268e7613797f 1a649a3848daf41c +Test: Verify +# +Comment: Test Case 114 (tamper mac) +Key: 06496108d4167706 147fbf05ec1d9000 12a2ab1739e1e5e0 49154be49da17534 +Message: \ + 42dd14ba19346654 cd182c596b6ca9a6 f548fb60b7b37324 982f6fa80db2974f \ + 8fab09a8df70fcad 882806f394b09989 f894e9af475dd3df 8c428799f41ee983 \ + c9f22ba9622756ea 4f5cdde30c766c04 0a56b351b386313f c9b8d9bdd7c241a0 \ + b46c4917949f01e3 fcdfc70855330d60 89c0b13c47e27c10 9b55cd72170e12cb \ + 7b5ce20ffbe4f2f7 c3b90018ed0d7876 cd +MAC: 2091268e7613797f 1a649a3848daf41c +Test: NotVerify +# +Comment: Test Case 115 +Key: a7728a0130dffd01 58136e0e74ce580d c8de15e067c5f35b 438f3c0a3bf35b4a +Message: \ + 864fb50ac2456ecc 7e97e27c2a2e28d0 2f75c2c8b347ff19 91e871a0ec625672 \ + b20b7c7450ea40cf 81224bab50737b7f e93d489c8447b516 2f26b61c880c8e3a \ + 180bae68f5ee3777 10822260f69ee0df db287b606f30769e 562cbade39491951 \ + 54c7b949b6f1c0c6 73e327698107485c 2fc3bc9ef3323c49 5ff728984041e994 \ + 08a2ddbe939e8507 81ac7002b3b95ee2 7c1b8070 +MAC: d45cff5b6b737437 94eabd3dbf520833 +Test: Verify +# +Comment: Test Case 116 (tamper mac) +Key: a7728a0130dffd01 58136e0e74ce580d c8de15e067c5f35b 438f3c0a3bf35b4a +Message: \ + 864fb50ac2456ecc 7e97e27c2a2e28d0 2f75c2c8b347ff19 91e871a0ec625672 \ + b20b7c7450ea40cf 81224bab50737b7f e93d489c8447b516 2f26b61c880c8e3a \ + 180bae68f5ee3777 10822260f69ee0df db287b606f30769e 562cbade39491951 \ + 54c7b949b6f1c0c6 73e327698107485c 2fc3bc9ef3323c49 5ff728984041e994 \ + 08a2ddbe939e8507 81ac7002b3b95ee2 7c1b8070 +MAC: d45cff5bc1737437 94eabd3dbf520833 +Test: NotVerify +# +Comment: Test Case 117 +Key: c1361a0f046da804 38c3f60e809dbe09 394615d76d405fcd 3ffd4cba0ed63692 +Message: \ + 3304ad00e7812883 d72fa0ea98c39734 11884f637a9c8a5a 55eafbb9a0aa45d3 \ + aff3d39674fb1a4b 2aba35c27dcdf68e 5545f2cfe27c2937 6624f006cf36d97e \ + 29ad149da82ee9d3 e81e9565eb8cf440 d1e60fb36238eac8 5ddbce2c11a7aa3a \ + 54bed7fdedc0d0d5 df653bcaf12f0bc3 151a767753613fb0 3c0ddc4db4868709 \ + 445e06311fd607fe 3b42c82d71d3f086 ee66fd41c73c +MAC: 4608f740f536fa6c a445d7f23e88106f +Test: Verify +# +Comment: Test Case 118 (tamper mac) +Key: c1361a0f046da804 38c3f60e809dbe09 394615d76d405fcd 3ffd4cba0ed63692 +Message: \ + 3304ad00e7812883 d72fa0ea98c39734 11884f637a9c8a5a 55eafbb9a0aa45d3 \ + aff3d39674fb1a4b 2aba35c27dcdf68e 5545f2cfe27c2937 6624f006cf36d97e \ + 29ad149da82ee9d3 e81e9565eb8cf440 d1e60fb36238eac8 5ddbce2c11a7aa3a \ + 54bed7fdedc0d0d5 df653bcaf12f0bc3 151a767753613fb0 3c0ddc4db4868709 \ + 445e06311fd607fe 3b42c82d71d3f086 ee66fd41c73c +MAC: 4608f740f536506c a445d7f23e88106f +Test: NotVerify +# +Comment: Test Case 119 +Key: 28f8bc0c70eefb00 b46b2f03cce44803 117777980f1105d2 2f8f5ac22bea0b30 +Message: \ + 88bd0af075abdb8f 5f28d5fed89ba458 9ce21134fca31638 c1b6946974f41afd \ + b125ed27d0c8b62f f08b2dc826d121c3 b332f7afd50de896 c47cff38701a3522 \ + 3f22490feaff3eda 8a6ba3b03cc473ef f66a9ecb7886613c 036174737baa95ba \ + ccdec9b7dd079167 723418aef88b9dee f63bb96ec21baac5 7c1e38f7c8ceb195 \ + ac7a4c8a81ddf1f3 1209a10a953ef98b 79b2f93bcda30049 c13940 +MAC: 24b5a741b735872f fe298625947a5b1f +Test: Verify +# +Comment: Test Case 120 (tamper mac) +Key: 28f8bc0c70eefb00 b46b2f03cce44803 117777980f1105d2 2f8f5ac22bea0b30 +Message: \ + 88bd0af075abdb8f 5f28d5fed89ba458 9ce21134fca31638 c1b6946974f41afd \ + b125ed27d0c8b62f f08b2dc826d121c3 b332f7afd50de896 c47cff38701a3522 \ + 3f22490feaff3eda 8a6ba3b03cc473ef f66a9ecb7886613c 036174737baa95ba \ + ccdec9b7dd079167 723418aef88b9dee f63bb96ec21baac5 7c1e38f7c8ceb195 \ + ac7a4c8a81ddf1f3 1209a10a953ef98b 79b2f93bcda30049 c13940 +MAC: 24b5a741b735872f fe29868f947a5b1f +Test: NotVerify +# +Comment: Test Case 121 +Key: 127bf80edc293001 80eed60bd8e86a04 fe168cdfcc789d3b 0148bf96caaa0908 +Message: \ + 3c687e1a261fbf01 0f4fbe4c795cb7ab 7250d6df7a808152 505b18b4348d5a71 \ + f5d88b1bf84a1c07 99da5313370abea9 5a9488d415092665 653f1999cc740ac2 \ + 4c96dd44e0fa4b7a d49e8d0ba94bb503 e03dd8f547fe5aac 3d73450ae750cc34 \ + e6a978c6a3c44078 62cd830b19380ff9 76e7eebde5486923 bbae2da3fef9d7e4 \ + a24fab4613ebbe76 b94181d27a90cbf0 77b9ad5d011680bc c4ad5fc3a636 +MAC: 7c7f31fc2b767357 e909ab2d54b81b22 +Test: Verify +# +Comment: Test Case 122 (tamper mac) +Key: 127bf80edc293001 80eed60bd8e86a04 fe168cdfcc789d3b 0148bf96caaa0908 +Message: \ + 3c687e1a261fbf01 0f4fbe4c795cb7ab 7250d6df7a808152 505b18b4348d5a71 \ + f5d88b1bf84a1c07 99da5313370abea9 5a9488d415092665 653f1999cc740ac2 \ + 4c96dd44e0fa4b7a d49e8d0ba94bb503 e03dd8f547fe5aac 3d73450ae750cc34 \ + e6a978c6a3c44078 62cd830b19380ff9 76e7eebde5486923 bbae2da3fef9d7e4 \ + a24fab4613ebbe76 b94181d27a90cbf0 77b9ad5d011680bc c4ad5fc3a636 +MAC: 7c7f31fc2b767357 e909ab2d54b8b122 +Test: NotVerify +# +Comment: Test Case 123 +Key: fe1ee80c68c60e02 8caf2a09942ebd0d d8fbe46346740f1e b6156d42ccc8f277 +Message: \ + 529d51be2853a6fa c59603a0195d4c82 8c647ae8ceef2eb5 7b258eb5861715d8 \ + b56696ddb93dd77f d3db1fec386c6fc4 d0e9ac9ed8da5353 ffe10985f91e5dae \ + 84f48b3e3163bd04 3edcf17648603a18 49e7b621c10975c1 eb7e46e49ca49220 \ + 981d5ec9801bcdbe f8be34401e6f5967 560f891719fed804 7c1fe818c37a385b \ + 97972418b2f1d6aa b00bebce7a4436d0 53bfe76cbdc07039 df5851a2d289fd6a +MAC: 2e7a6852d6e22874 7c5e070cbd2f2a50 +Test: Verify +# +Comment: Test Case 124 (tamper mac) +Key: fe1ee80c68c60e02 8caf2a09942ebd0d d8fbe46346740f1e b6156d42ccc8f277 +Message: \ + 529d51be2853a6fa c59603a0195d4c82 8c647ae8ceef2eb5 7b258eb5861715d8 \ + b56696ddb93dd77f d3db1fec386c6fc4 d0e9ac9ed8da5353 ffe10985f91e5dae \ + 84f48b3e3163bd04 3edcf17648603a18 49e7b621c10975c1 eb7e46e49ca49220 \ + 981d5ec9801bcdbe f8be34401e6f5967 560f891719fed804 7c1fe818c37a385b \ + 97972418b2f1d6aa b00bebce7a4436d0 53bfe76cbdc07039 df5851a2d289fd6a +MAC: 847a6852d6e22874 7c5e070cbd2f2a50 +Test: NotVerify +# +Comment: Test Case 125 +Key: a7c9aa07d412c100 2c36f30c0062550f 87fb80da5bc8703d 59247f942615521c +Message: \ + b8af8646669799f3 2f0035f970ff7347 2875402f58cab580 c090bc1d221c8dda \ + cc132032abb926da ba5bd32a5a467183 bbb2b2137c67943d f7505a196ce7f338 \ + fa146ba5cd917f87 ec53b2479923ca55 d57c6852e3fc8fda 4ce9f3b9d0e6f1ca \ + fa5c70c8edef4fda 420121dc25eb31fa 67994c4a96db24e2 c4179b94fd8d5ff8 \ + e9cfc0d7be0fb101 11d2dd36bd0e3024 a77d6e3d5892201d a9bbb1a648109e32 \ + df5e +MAC: db56ec63b7902dc1 5bb40ea81066d9b2 +Test: Verify +# +Comment: Test Case 126 (tamper mac) +Key: a7c9aa07d412c100 2c36f30c0062550f 87fb80da5bc8703d 59247f942615521c +Message: \ + b8af8646669799f3 2f0035f970ff7347 2875402f58cab580 c090bc1d221c8dda \ + cc132032abb926da ba5bd32a5a467183 bbb2b2137c67943d f7505a196ce7f338 \ + fa146ba5cd917f87 ec53b2479923ca55 d57c6852e3fc8fda 4ce9f3b9d0e6f1ca \ + fa5c70c8edef4fda 420121dc25eb31fa 67994c4a96db24e2 c4179b94fd8d5ff8 \ + e9cfc0d7be0fb101 11d2dd36bd0e3024 a77d6e3d5892201d a9bbb1a648109e32 \ + df5e +MAC: db564663b7902dc1 5bb40ea81066d9b2 +Test: NotVerify +# +Comment: Test Case 127 +Key: 5ab5530fa087080e 10f393011002a30c 0ac8e3015b63a35c 3d014fdd07847911 +Message: \ + 757bae80b7ca5e4e 5ba2aca3d7899ca6 da19a98051789b48 2769e874fe1fdd74 \ + 9b8bf4525552a0b0 f54c54ccd5f072af 091c2f5b94caa3bb 348b2f32ab0ca646 \ + 979a98eced389ce2 84f0ae59e12008ea 3c3745d001e88b35 74ba681fc60e655d \ + a9fd499635e678b9 d62612b7461aa283 51e75352d0df8844 99f06360fec8bda7 \ + c5073dfaedb5b3c3 dbc57b22df1da530 04f882d4d70a1871 fa7bd1f9438ea008 \ + 95de0282 +MAC: 13d248a0bb45413f 2f88f330fc0dd267 +Test: Verify +# +Comment: Test Case 128 (tamper mac) +Key: 5ab5530fa087080e 10f393011002a30c 0ac8e3015b63a35c 3d014fdd07847911 +Message: \ + 757bae80b7ca5e4e 5ba2aca3d7899ca6 da19a98051789b48 2769e874fe1fdd74 \ + 9b8bf4525552a0b0 f54c54ccd5f072af 091c2f5b94caa3bb 348b2f32ab0ca646 \ + 979a98eced389ce2 84f0ae59e12008ea 3c3745d001e88b35 74ba681fc60e655d \ + a9fd499635e678b9 d62612b7461aa283 51e75352d0df8844 99f06360fec8bda7 \ + c5073dfaedb5b3c3 dbc57b22df1da530 04f882d4d70a1871 fa7bd1f9438ea008 \ + 95de0282 +MAC: 13d248a01145413f 2f88f330fc0dd267 +Test: NotVerify +# +Comment: Test Case 129 +Key: b63fb802a4680204 bcd2df07a45d5c0d f38c9c01facd7ea5 a6bdb3b883c0b5c9 +Message: \ + f8759e44875b47fb 67e71e90adaf3d8b d3144b4fbb588699 363e9df82cfaff24 \ + 709d68f7f8aff25f 9610ef44bf2dcf93 411ae2fc726995a9 a732a1d32da0f79d \ + 3e5f94360e8796a5 9785e957b2b8eaf4 d2ccf0453586eedc b88fafe530a6826e \ + 0517a4149e3ab935 c0a28c725a76662c 43577178dd5f5595 ef047b1fabfd8db0 \ + 1431c4b26c7de82c 1f749e79eb05a62e 5c17a63977fbce66 004985ab47125b5b \ + 43200eaf9df6db +MAC: 8e54eb39a15d7e74 57f7613423650a1f +Test: Verify +# +Comment: Test Case 130 (tamper mac) +Key: b63fb802a4680204 bcd2df07a45d5c0d f38c9c01facd7ea5 a6bdb3b883c0b5c9 +Message: \ + f8759e44875b47fb 67e71e90adaf3d8b d3144b4fbb588699 363e9df82cfaff24 \ + 709d68f7f8aff25f 9610ef44bf2dcf93 411ae2fc726995a9 a732a1d32da0f79d \ + 3e5f94360e8796a5 9785e957b2b8eaf4 d2ccf0453586eedc b88fafe530a6826e \ + 0517a4149e3ab935 c0a28c725a76662c 43577178dd5f5595 ef047b1fabfd8db0 \ + 1431c4b26c7de82c 1f749e79eb05a62e 5c17a63977fbce66 004985ab47125b5b \ + 43200eaf9df6db +MAC: 8e54eb39a15d7ede 57f7613423650a1f +Test: NotVerify +# +Comment: Test Case 131 +Key: 706f1f0788489c05 6c81ce0cf8d74e0d 81e877c3b62ebf51 16c4290448548755 +Message: \ + 041aba1fdd42900d 850c015bd7c1abb8 7b1958e6f2587477 33453383eef946f2 \ + 130112f143a2fec8 aeff2386c1ce3e3c e89622daee965121 dc84a5ca7debbd91 \ + eccf822f7180f820 801ba641eae47dd2 7a9fac6835fd8911 812edcfe1a998f06 \ + 681136d9922ef912 499f533383d005fd 6fb165a4aeefb62f 1d922e372bbd3e93 \ + cf746c61a26673eb 05c61f8996248605 d6eca984db5fb4f8 f1e2301c9f6eaf6e \ + e21ccf8482426f87 088e10 +MAC: 0edbed7219b610d1 a19c9cbf7fa18000 +Test: Verify +# +Comment: Test Case 132 (tamper mac) +Key: 706f1f0788489c05 6c81ce0cf8d74e0d 81e877c3b62ebf51 16c4290448548755 +Message: \ + 041aba1fdd42900d 850c015bd7c1abb8 7b1958e6f2587477 33453383eef946f2 \ + 130112f143a2fec8 aeff2386c1ce3e3c e89622daee965121 dc84a5ca7debbd91 \ + eccf822f7180f820 801ba641eae47dd2 7a9fac6835fd8911 812edcfe1a998f06 \ + 681136d9922ef912 499f533383d005fd 6fb165a4aeefb62f 1d922e372bbd3e93 \ + cf746c61a26673eb 05c61f8996248605 d6eca984db5fb4f8 f1e2301c9f6eaf6e \ + e21ccf8482426f87 088e10 +MAC: 0edbed7219b610d1 a19c9c157fa18000 +Test: NotVerify +# +Comment: Test Case 133 +Key: d3fe9e0058c76a03 e0495408bc448105 9053b83e4f101276 1d5a06fb5cb70899 +Message: \ + 893d8dd682d35fac 10f15239bc5e136b cac6342cd55ec1f6 7ee6a429278f49b1 \ + ccd6874fa9e6fbb9 d74ef293ac05ff76 cb33a3a191649710 4a3b3972cb822397 \ + 58aae60190e2ba67 30adfadcb2f9537e 2df61fbe5ab6cea5 f20817bd8a3a54e3 \ + e43be4741d9fdb4d 4cd529fecf7c7cfc 729bbacd52897244 9189011bc355fea7 \ + 90e31bad82f6face cb24cc9aa0499613 e451e036da527a6b db7b869ed1854561 \ + 68600fea5609b821 2d84bccecd52e1 +MAC: 0b6a9ef2ec6c8deb ae16d9da2fee2d88 +Test: Verify +# +Comment: Test Case 134 (tamper mac) +Key: d3fe9e0058c76a03 e0495408bc448105 9053b83e4f101276 1d5a06fb5cb70899 +Message: \ + 893d8dd682d35fac 10f15239bc5e136b cac6342cd55ec1f6 7ee6a429278f49b1 \ + ccd6874fa9e6fbb9 d74ef293ac05ff76 cb33a3a191649710 4a3b3972cb822397 \ + 58aae60190e2ba67 30adfadcb2f9537e 2df61fbe5ab6cea5 f20817bd8a3a54e3 \ + e43be4741d9fdb4d 4cd529fecf7c7cfc 729bbacd52897244 9189011bc355fea7 \ + 90e31bad82f6face cb24cc9aa0499613 e451e036da527a6b db7b869ed1854561 \ + 68600fea5609b821 2d84bccecd52e1 +MAC: 0b6a9ef2ec6c8deb ae16d9da2fee2d22 +Test: NotVerify +# +Comment: Test Case 135 +Key: 0cecf50b786b140c 00b739084461040a cb0e6054b96fa31d b4c404cda2b3763c +Message: \ + dda23e58c01664c2 93133c7106f10f5a 0a7ae84b960f7b0d 311407dcd5d800b2 \ + 7a3f0a3a556ffde8 823959882b68e235 e3cb8179dafc860c 108de8e565e998e0 \ + 28a21a7d11176694 51bf1c7c28ffb10b ca3284a42e0bb03e 989924fe82bcdeaa \ + 5ef82770108d0461 4d20dd751f8e80e9 c1048eef0f3e2ea8 d752a6590e84036c \ + 7c2bdc8cb8e0ed05 01ca7a2059fa0a1a ff98090ed637b6ae 895c0797e00b045d \ + 36e0e9eec1d7f4c2 a16ee2fa69ec1468 841e76 +MAC: df43e8d1c62771a5 2a7717678ae2bf7a +Test: Verify +# +Comment: Test Case 136 (tamper mac) +Key: 0cecf50b786b140c 00b739084461040a cb0e6054b96fa31d b4c404cda2b3763c +Message: \ + dda23e58c01664c2 93133c7106f10f5a 0a7ae84b960f7b0d 311407dcd5d800b2 \ + 7a3f0a3a556ffde8 823959882b68e235 e3cb8179dafc860c 108de8e565e998e0 \ + 28a21a7d11176694 51bf1c7c28ffb10b ca3284a42e0bb03e 989924fe82bcdeaa \ + 5ef82770108d0461 4d20dd751f8e80e9 c1048eef0f3e2ea8 d752a6590e84036c \ + 7c2bdc8cb8e0ed05 01ca7a2059fa0a1a ff98090ed637b6ae 895c0797e00b045d \ + 36e0e9eec1d7f4c2 a16ee2fa69ec1468 841e76 +MAC: df43e87bc62771a5 2a7717678ae2bf7a +Test: NotVerify +# +Comment: Test Case 137 +Key: a8cd970fe873260f b42e5a080c431b00 2d22298ef85e1264 f7067237809adaba +Message: \ + 7bd3f94e20871cdb bd9d53bfe00458a4 705f610bbafc237d 139d499fc1d79e3c \ + ab978bcb1fa7a6dc 45f99b25fdf3ca6d 532b780d289b8a3b 39d3dafaaa783755 \ + 0fc2202e69c60aae bfa5d4bc999e29ec c9a1f9f13d832c76 560670007ea7568e \ + 6976bcd33dc781fc 6c55b905f3e2f1bd 84eaaec16ddb37c3 e1a7c4604f1aeeb8 \ + 90aa8bcd710dcade 6283e35665d513e9 bfc1aa2d9ce1f07e 89b4ded8cecc905f \ + 761c2ce829f6c68b 79a9e1df7ef4c83e b6736b52545bd0 +MAC: 4afd774c466a7076 2c7a094bf0a328c0 +Test: Verify +# +Comment: Test Case 138 (tamper mac) +Key: a8cd970fe873260f b42e5a080c431b00 2d22298ef85e1264 f7067237809adaba +Message: \ + 7bd3f94e20871cdb bd9d53bfe00458a4 705f610bbafc237d 139d499fc1d79e3c \ + ab978bcb1fa7a6dc 45f99b25fdf3ca6d 532b780d289b8a3b 39d3dafaaa783755 \ + 0fc2202e69c60aae bfa5d4bc999e29ec c9a1f9f13d832c76 560670007ea7568e \ + 6976bcd33dc781fc 6c55b905f3e2f1bd 84eaaec16ddb37c3 e1a7c4604f1aeeb8 \ + 90aa8bcd710dcade 6283e35665d513e9 bfc1aa2d9ce1f07e 89b4ded8cecc905f \ + 761c2ce829f6c68b 79a9e1df7ef4c83e b6736b52545bd0 +MAC: 4afd774c466a70dc 2c7a094bf0a328c0 +Test: NotVerify +# +Comment: Test Case 139 +Key: 87bba80554ae3f0f 2466bc0118dbd705 ccf52cb680438be0 2cea0f7cc7193a9b +Message: \ + f524d5d3cde3f483 59761f23484aec8a c91b335b92ddba9a 45a499d96a12e35f \ + 36b933049c2787f5 9ea718e6f10570ba 20a316b281d04dc6 74e69fdff8823e2e \ + 3b7132d799bacd37 61e51d52ea8d0c0a 3022bdb1f30a7767 f01646e8998516d4 \ + f649ac8f0379c664 5ee3b64970c253a1 e51052d81aca3f0a e086f2790b094e01 \ + 52fa91557357b9d1 3b6f1aab316e4c16 7e9fee99692ea349 b496c3bf9f11c0f1 \ + 0b51467ea9ff4fe4 6e6a8f9fd8dcb656 7ba4efe4d2932d86 29 +MAC: edc90b786b874c7d 8301e8e18e5e414d +Test: Verify +# +Comment: Test Case 140 (tamper mac) +Key: 87bba80554ae3f0f 2466bc0118dbd705 ccf52cb680438be0 2cea0f7cc7193a9b +Message: \ + f524d5d3cde3f483 59761f23484aec8a c91b335b92ddba9a 45a499d96a12e35f \ + 36b933049c2787f5 9ea718e6f10570ba 20a316b281d04dc6 74e69fdff8823e2e \ + 3b7132d799bacd37 61e51d52ea8d0c0a 3022bdb1f30a7767 f01646e8998516d4 \ + f649ac8f0379c664 5ee3b64970c253a1 e51052d81aca3f0a e086f2790b094e01 \ + 52fa91557357b9d1 3b6f1aab316e4c16 7e9fee99692ea349 b496c3bf9f11c0f1 \ + 0b51467ea9ff4fe4 6e6a8f9fd8dcb656 7ba4efe4d2932d86 29 +MAC: edc90b786b874c7d 83abe8e18e5e414d +Test: NotVerify +# +Comment: Test Case 141 +Key: d0d5f007701d4f05 fc3d010efccecd08 9e7a843a6f9d86a9 d303380f9a1d8b6c +Message: \ + d3f2d645ceddf4d1 5505220c903b6954 ca85e16c4889a11a 3e0b3d4a02f557d6 \ + e72d1bb50b108660 15a86ca5e3d5f9ad 5bda19a364babda2 c5faedc8ef449ed6 \ + 72b98b7dc911dddf b94a849c1f7e497a 58621dbc1dda5fe2 d54caac490489b02 \ + 02267fcb385daaf1 a72f8ec6add74105 3a5ec2573921390e 6de4d2fd2c6d002e \ + 947ffaccdca4bd83 d34b4a80238b865d e948b42269ed30d6 d103d3fe70d32c04 \ + 5326d02fcb8eb39e d9fd1ffc88a55971 ed0d9456fbc42ccc c7ffca38d3f7 +MAC: 8a1e6f4f92a5ec26 522e24a5b9bcb706 +Test: Verify +# +Comment: Test Case 142 (tamper mac) +Key: d0d5f007701d4f05 fc3d010efccecd08 9e7a843a6f9d86a9 d303380f9a1d8b6c +Message: \ + d3f2d645ceddf4d1 5505220c903b6954 ca85e16c4889a11a 3e0b3d4a02f557d6 \ + e72d1bb50b108660 15a86ca5e3d5f9ad 5bda19a364babda2 c5faedc8ef449ed6 \ + 72b98b7dc911dddf b94a849c1f7e497a 58621dbc1dda5fe2 d54caac490489b02 \ + 02267fcb385daaf1 a72f8ec6add74105 3a5ec2573921390e 6de4d2fd2c6d002e \ + 947ffaccdca4bd83 d34b4a80238b865d e948b42269ed30d6 d103d3fe70d32c04 \ + 5326d02fcb8eb39e d9fd1ffc88a55971 ed0d9456fbc42ccc c7ffca38d3f7 +MAC: 8a1e6f4f92a5ec26 522e24a5b9bc1d06 +Test: NotVerify +# +Comment: Test Case 143 +Key: a86a140eb84d3b06 f076a50a74a73502 fc1f7398b4a407b0 8c9ad286a2cdaaa1 +Message: \ + da77294a4ec26b0c cd2bfe8e30e990a2 bdc9970d17528784 47fba7d95c2feb36 \ + a61480f4d6ec00a3 17fe3147e7c2e9a4 8b81b2a2d339271a 34cef490fddfc6a3 \ + f34797c933976d4a 959e917c607a21ec fbd38ece0cb5e941 83ddd180bc9823af \ + dfba781251e55ce6 84ed63e46784d063 575f3163141aa498 f77618b30e3c62ed \ + f6dbff48c05b2e44 489129af15f9126c 5844d06d5e740556 ea1d09f8596ce550 \ + 47e498073fc64c87 5875376d6e49dac7 8daa34ec1e394209 564b01b0b7e700fe \ + cb +MAC: 9238b8d0dc9a0a7b db9f0ab241a18e19 +Test: Verify +# +Comment: Test Case 144 (tamper mac) +Key: a86a140eb84d3b06 f076a50a74a73502 fc1f7398b4a407b0 8c9ad286a2cdaaa1 +Message: \ + da77294a4ec26b0c cd2bfe8e30e990a2 bdc9970d17528784 47fba7d95c2feb36 \ + a61480f4d6ec00a3 17fe3147e7c2e9a4 8b81b2a2d339271a 34cef490fddfc6a3 \ + f34797c933976d4a 959e917c607a21ec fbd38ece0cb5e941 83ddd180bc9823af \ + dfba781251e55ce6 84ed63e46784d063 575f3163141aa498 f77618b30e3c62ed \ + f6dbff48c05b2e44 489129af15f9126c 5844d06d5e740556 ea1d09f8596ce550 \ + 47e498073fc64c87 5875376d6e49dac7 8daa34ec1e394209 564b01b0b7e700fe \ + cb +MAC: 9292b8d0dc9a0a7b db9f0ab241a18e19 +Test: NotVerify +# +Comment: Test Case 145 +Key: 3a8edf0b109a000d 544c7f0e2049dd05 6f1c3fd0793c3db7 60ced5543f1fc5f1 +Message: \ + a9ff857e907110f9 8a793fbaacaaec14 701af8ced60ddecd 19809d2a1875a0c1 \ + 742640049750fd21 c93cdc75e6c88a57 e38225b9900386a9 8323d49c98745d0c \ + 9a9d1031ed0d53b7 4a2f2c30f7b687da 39ac93c9b0197233 3c46cfd4bb2de055 \ + caf087b8feda6f48 099b78005200db8b ac6e545c88c690c4 0d5f99c88c791d57 \ + 6aa40f687e7eb087 1928886b2863f6d5 d14a315911c11e1e 21b7e6ad3003049a \ + a813022691b2aeab db361603990dd86a 570ac468cbe286ec 996c9ac9709e6418 \ + b2663e43 +MAC: ed780112874fd889 510d621e7c220006 +Test: Verify +# +Comment: Test Case 146 (tamper mac) +Key: 3a8edf0b109a000d 544c7f0e2049dd05 6f1c3fd0793c3db7 60ced5543f1fc5f1 +Message: \ + a9ff857e907110f9 8a793fbaacaaec14 701af8ced60ddecd 19809d2a1875a0c1 \ + 742640049750fd21 c93cdc75e6c88a57 e38225b9900386a9 8323d49c98745d0c \ + 9a9d1031ed0d53b7 4a2f2c30f7b687da 39ac93c9b0197233 3c46cfd4bb2de055 \ + caf087b8feda6f48 099b78005200db8b ac6e545c88c690c4 0d5f99c88c791d57 \ + 6aa40f687e7eb087 1928886b2863f6d5 d14a315911c11e1e 21b7e6ad3003049a \ + a813022691b2aeab db361603990dd86a 570ac468cbe286ec 996c9ac9709e6418 \ + b2663e43 +MAC: ed7801122d4fd889 510d621e7c220006 +Test: NotVerify +# +Comment: Test Case 147 +Key: 2841b106987a4107 ecb08f09d8e3070a e352479e2c446bd6 0e480b189f227188 +Message: \ + 854460db530ea7b6 237b422180eeaa1b f89ea475bd496a92 c46bf1ff24cbe3aa \ + 0f438562512c1974 a85b96284a404442 dee8b79b32212df6 8c1ef6b1e9d95bf9 \ + 1ce05b6d0d74e2b5 d078dd1ab8215c96 0a13313c345e32c1 7d28726601cd5f1d \ + adbb8bba2f6d6fff e54d199d6e753378 8864b4bdc2e77e3f 0ff0a611bd052e6a \ + c0b925f02694ef0b e109a8507edbc807 3f7dc40264424173 32e784efedb359ad \ + 6c7e9d93138d9ef4 96474414220d1b62 8adf64ee21a56153 8de6427a999c2705 \ + 1ac5982d5237 +MAC: 03d12ad17c721af9 4d89c554be7fefca +Test: Verify +# +Comment: Test Case 148 (tamper mac) +Key: 2841b106987a4107 ecb08f09d8e3070a e352479e2c446bd6 0e480b189f227188 +Message: \ + 854460db530ea7b6 237b422180eeaa1b f89ea475bd496a92 c46bf1ff24cbe3aa \ + 0f438562512c1974 a85b96284a404442 dee8b79b32212df6 8c1ef6b1e9d95bf9 \ + 1ce05b6d0d74e2b5 d078dd1ab8215c96 0a13313c345e32c1 7d28726601cd5f1d \ + adbb8bba2f6d6fff e54d199d6e753378 8864b4bdc2e77e3f 0ff0a611bd052e6a \ + c0b925f02694ef0b e109a8507edbc807 3f7dc40264424173 32e784efedb359ad \ + 6c7e9d93138d9ef4 96474414220d1b62 8adf64ee21a56153 8de6427a999c2705 \ + 1ac5982d5237 +MAC: 03d12ad17c72b0f9 4d89c554be7fefca +Test: NotVerify +# +Comment: Test Case 149 +Key: ed00000ce0f4970a b0a82e09ac6d950b 5b3c3d1ad77e433f 08ec4745e8006a5f +Message: \ + 7a9a44b2573c2209 985eaac949daed80 5201ee5bc8f9d715 baaa9e1ddded4b57 \ + 878f09dfcb2ce863 8a922cd36c1953bf 1a421ae33bf2f8f5 9c96127a835dd10b \ + eddbeab807d21c91 644865d162b8907c faaa5f359c572a39 ed3cb3719a847c87 \ + 5f663f66385bf89c a45d6d0615fd8210 a8e2454439707d27 ac309846b514cd14 \ + 7a0d7bb268734e0c d0bc12e5b995f561 773ba6b0ab23d757 546f9e09836b1dfd \ + 7898afe10bfeeddb ba00c17395b6d50c f17bbc9c9e94f4f2 0392fb87fd198476 \ + b13457bd324498ec 44 +MAC: cbba6dda1f1a5166 78f7c61a53fe914e +Test: Verify +# +Comment: Test Case 150 (tamper mac) +Key: ed00000ce0f4970a b0a82e09ac6d950b 5b3c3d1ad77e433f 08ec4745e8006a5f +Message: \ + 7a9a44b2573c2209 985eaac949daed80 5201ee5bc8f9d715 baaa9e1ddded4b57 \ + 878f09dfcb2ce863 8a922cd36c1953bf 1a421ae33bf2f8f5 9c96127a835dd10b \ + eddbeab807d21c91 644865d162b8907c faaa5f359c572a39 ed3cb3719a847c87 \ + 5f663f66385bf89c a45d6d0615fd8210 a8e2454439707d27 ac309846b514cd14 \ + 7a0d7bb268734e0c d0bc12e5b995f561 773ba6b0ab23d757 546f9e09836b1dfd \ + 7898afe10bfeeddb ba00c17395b6d50c f17bbc9c9e94f4f2 0392fb87fd198476 \ + b13457bd324498ec 44 +MAC: cbba6dda1f1a5166 785dc61a53fe914e +Test: NotVerify +# +Comment: Test Case 151 +Key: 7cbfe70cf4f80b03 185b9d0c080e360f b74202582eab6590 ff37ce87a7e8d1af +Message: \ + 1a6f0d3976d514a1 65d470d275da7977 992e61dc6b3692fd a9b5aa1f91e786ab \ + 5794e4cd69f86ecf ccdfa141b91ab952 491a2eb451c1b1fa 765b1a0743a0b39a \ + 3497679e90d66d5c b50e9e6e2957c172 71ef26c2b0d8bd27 33d72e7677e110ac \ + 79784a094eb76503 c50371ee5a3260cc 22878ed25f4bf992 2228099a09194682 \ + 91908bdf47f1e20c f454fb4f865b1ba8 e2a97b41f574d417 9cddb1a6f6f72888 \ + 87b467cea54adb99 9ed6e8243103cd14 ad4855a2bc29b959 066bfffd622785ea \ + dbecb88036931ad4 6902f9 +MAC: 3da439b721b51263 012ea67b3b90b2e7 +Test: Verify +# +Comment: Test Case 152 (tamper mac) +Key: 7cbfe70cf4f80b03 185b9d0c080e360f b74202582eab6590 ff37ce87a7e8d1af +Message: \ + 1a6f0d3976d514a1 65d470d275da7977 992e61dc6b3692fd a9b5aa1f91e786ab \ + 5794e4cd69f86ecf ccdfa141b91ab952 491a2eb451c1b1fa 765b1a0743a0b39a \ + 3497679e90d66d5c b50e9e6e2957c172 71ef26c2b0d8bd27 33d72e7677e110ac \ + 79784a094eb76503 c50371ee5a3260cc 22878ed25f4bf992 2228099a09194682 \ + 91908bdf47f1e20c f454fb4f865b1ba8 e2a97b41f574d417 9cddb1a6f6f72888 \ + 87b467cea54adb99 9ed6e8243103cd14 ad4855a2bc29b959 066bfffd622785ea \ + dbecb88036931ad4 6902f9 +MAC: 3da439b721b51263 012ea6d13b90b2e7 +Test: NotVerify +# +Comment: Test Case 153 +Key: b6d98b0514241b06 9007090698bd9b0d 26dd7e7a36275521 096c4b29c94fee8f +Message: \ + b711314c5e69cd01 d5d2610afd5db57b ee7f0db55150fc1d 42188809ba496072 \ + 5a91beb8fa8cbacf 5e1bda5b788fd666 0ee31b5f33187c75 30047feb4edf5da8 \ + 701b616aa71b3905 361360aea23714b0 1a2f0f4e478bc378 904263de21c08691 \ + dbe7fb8302358838 48e9e6eb20fa9b3a 2aab8871364ce9c6 8e4ca4b00c2b41e8 \ + 123d6b1572f34dba dc34a5fc2e413758 ecbfca220bb3e99a 008d4a0cb88bf4cb \ + c85fe03a532df52f 619a2c90db63e8c7 22b2ea2e66d3c866 601272199d67e466 \ + c6c4a019f1954953 3075e30bd8cbd3fa +MAC: 9685c1cbeda21ed5 9252bbe791818d11 +Test: Verify +# +Comment: Test Case 154 (tamper mac) +Key: b6d98b0514241b06 9007090698bd9b0d 26dd7e7a36275521 096c4b29c94fee8f +Message: \ + b711314c5e69cd01 d5d2610afd5db57b ee7f0db55150fc1d 42188809ba496072 \ + 5a91beb8fa8cbacf 5e1bda5b788fd666 0ee31b5f33187c75 30047feb4edf5da8 \ + 701b616aa71b3905 361360aea23714b0 1a2f0f4e478bc378 904263de21c08691 \ + dbe7fb8302358838 48e9e6eb20fa9b3a 2aab8871364ce9c6 8e4ca4b00c2b41e8 \ + 123d6b1572f34dba dc34a5fc2e413758 ecbfca220bb3e99a 008d4a0cb88bf4cb \ + c85fe03a532df52f 619a2c90db63e8c7 22b2ea2e66d3c866 601272199d67e466 \ + c6c4a019f1954953 3075e30bd8cbd3fa +MAC: 3c85c1cbeda21ed5 9252bbe791818d11 +Test: NotVerify +# +Comment: Test Case 155 +Key: 7ebdfe0f24c69500 ec1483094c6b6703 2a8014cdcb35cd10 ca5253f878b9c636 +Message: \ + c3432e60ad7d4b10 11a41d08509af969 aed8736b67553cfa 729a236c92d4e055 \ + 170fb6c48c01d59d a6f2a5f68c9f603a 77d3a5de28e1d99a 7cfc060ed0e763e8 \ + f619ac821b8120c1 73c5b70064173adc eae0ba12c193ad3d 90b34b609aaf4890 \ + c8f513e37633a4ea f85cea5d7324395e 04f370c6871d0317 d14f776bfec0fcc6 \ + b50faa2b424e153a aaff971e24d07c28 c4ecee4b0af262db 41d9463f9942054e \ + 51af7a93fe8fcea8 8f65c6b33642dbfa 2fca4539bca714fd 805a3c1a9d4168ee \ + f1e282ef72509701 b55eb4eba08fe5cf 592a +MAC: ab61070ee551fbe1 d70402ebb7cdde1a +Test: Verify +# +Comment: Test Case 156 (tamper mac) +Key: 7ebdfe0f24c69500 ec1483094c6b6703 2a8014cdcb35cd10 ca5253f878b9c636 +Message: \ + c3432e60ad7d4b10 11a41d08509af969 aed8736b67553cfa 729a236c92d4e055 \ + 170fb6c48c01d59d a6f2a5f68c9f603a 77d3a5de28e1d99a 7cfc060ed0e763e8 \ + f619ac821b8120c1 73c5b70064173adc eae0ba12c193ad3d 90b34b609aaf4890 \ + c8f513e37633a4ea f85cea5d7324395e 04f370c6871d0317 d14f776bfec0fcc6 \ + b50faa2b424e153a aaff971e24d07c28 c4ecee4b0af262db 41d9463f9942054e \ + 51af7a93fe8fcea8 8f65c6b33642dbfa 2fca4539bca714fd 805a3c1a9d4168ee \ + f1e282ef72509701 b55eb4eba08fe5cf 592a +MAC: ab61ad0ee551fbe1 d70402ebb7cdde1a +Test: NotVerify +# +Comment: Test Case 157 +Key: b995b90f58facd00 d4d0a40148026d0b c0d998aacd2c169e ce65181e07a98d1e +Message: \ + 9efed86f74cc8606 b658f15d4b1eea63 1294b837234cc72f e907d35d1164dcaf \ + 62b41fd680a5dc37 fdce9449ec7eacff 12643635b0fd6499 0438f6159cd3c5ff \ + 87e4d50889b23f86 80d3cf6c517b6b63 dfa1988f9efd29a3 351fb8d1f27dd07a \ + 61a682ea58c171d8 944044e5bcb0489b 51e02bf0dd549312 734be466c9b4e02a \ + 5a6215b223868ab7 c6cf9c827fe41ed0 c449c0a29d53b410 9f9876684d5692a7 \ + b8a75adb2de492f4 b32e7632129403d7 ddc3797a172d8bb6 c6011e1358b0ba10 \ + 5814ec85f97e79ac adf0dfbf84e29662 a50fdcbc3d67 +MAC: 0c5eef52d96f5c98 88e48e09779fa34c +Test: Verify +# +Comment: Test Case 158 (tamper mac) +Key: b995b90f58facd00 d4d0a40148026d0b c0d998aacd2c169e ce65181e07a98d1e +Message: \ + 9efed86f74cc8606 b658f15d4b1eea63 1294b837234cc72f e907d35d1164dcaf \ + 62b41fd680a5dc37 fdce9449ec7eacff 12643635b0fd6499 0438f6159cd3c5ff \ + 87e4d50889b23f86 80d3cf6c517b6b63 dfa1988f9efd29a3 351fb8d1f27dd07a \ + 61a682ea58c171d8 944044e5bcb0489b 51e02bf0dd549312 734be466c9b4e02a \ + 5a6215b223868ab7 c6cf9c827fe41ed0 c449c0a29d53b410 9f9876684d5692a7 \ + b8a75adb2de492f4 b32e7632129403d7 ddc3797a172d8bb6 c6011e1358b0ba10 \ + 5814ec85f97e79ac adf0dfbf84e29662 a50fdcbc3d67 +MAC: 0c5eef52d96ff698 88e48e09779fa34c +Test: NotVerify +# +Comment: Test Case 159 +Key: dec0c20f9c6ad604 f0d4f00b104f5605 5adcf8778eef00e2 fae50f39eb546e05 +Message: \ + 0ad1efdc37160f51 934630ba6745584f 048347a2512a412f 72bc2aa8f31c20fe \ + ed10da2526e976b9 30a67497ebcce6ef 4f2d92a158d3d0ca 8ffa728317938104 \ + a35b29c9449f8374 45f70c30c3f22012 20b2b37885834215 7eb59895481999eb \ + 74c3b4b862372da8 2e39d8f12bf8044b aab7c3303b0645b9 bbdd4e03f6e7ee6a \ + aaa2220dda4fb508 888dfab486feff30 b5c360f0c9a5a984 82f78778df75e289 \ + 170596f1544bfadd d9f4915ff2908fa7 53f0981c9541a018 392790189c73a1b4 \ + 7838a5cc839fa95c 933abb85cb4b2d1e 3bc53bd006dbe83f 03 +MAC: 7f429a4d7773b18b 1cc5926f21d7a62f +Test: Verify +# +Comment: Test Case 160 (tamper mac) +Key: dec0c20f9c6ad604 f0d4f00b104f5605 5adcf8778eef00e2 fae50f39eb546e05 +Message: \ + 0ad1efdc37160f51 934630ba6745584f 048347a2512a412f 72bc2aa8f31c20fe \ + ed10da2526e976b9 30a67497ebcce6ef 4f2d92a158d3d0ca 8ffa728317938104 \ + a35b29c9449f8374 45f70c30c3f22012 20b2b37885834215 7eb59895481999eb \ + 74c3b4b862372da8 2e39d8f12bf8044b aab7c3303b0645b9 bbdd4e03f6e7ee6a \ + aaa2220dda4fb508 888dfab486feff30 b5c360f0c9a5a984 82f78778df75e289 \ + 170596f1544bfadd d9f4915ff2908fa7 53f0981c9541a018 392790189c73a1b4 \ + 7838a5cc839fa95c 933abb85cb4b2d1e 3bc53bd006dbe83f 03 +MAC: 7f429a4d7773b18b 1c6f926f21d7a62f +Test: NotVerify +# +Comment: Test Case 161 +Key: 208b2f0f5c9bea0f 8075af015036060e 06ac66d512851062 3faea2bde106f10b +Message: \ + a58dedd3930b0633 85166a1d247ec210 bdf122c8cd6d24d8 8f0087b3975e183c \ + ec050f7f1116b296 2c1cb4519a766158 68832035f1440d80 449434dcf34c18df \ + 52285e633e11f96a 2dadbbc8241d208c a040c19184ce12c9 6246a55592bd34e4 \ + e5934723a4418ed1 ee49991266b99e07 f95f987e2daa4790 f0ece583a91a678f \ + adafb251f04022de 8abcf1f0758ff76f ef90ed1c3a34ac2b 2092aec9ac155859 \ + c40baab44bcc93d5 8884c6fe13bd6d02 4d5a1f888ecbb3ae 5d61770976d0623b \ + db0cef26d982fc61 06c25f1a7fcc1ccd 263b55b407086264 69da6edfaa +MAC: ddfb200b9e91366f 1fc55b798f69f3ac +Test: Verify +# +Comment: Test Case 162 (tamper mac) +Key: 208b2f0f5c9bea0f 8075af015036060e 06ac66d512851062 3faea2bde106f10b +Message: \ + a58dedd3930b0633 85166a1d247ec210 bdf122c8cd6d24d8 8f0087b3975e183c \ + ec050f7f1116b296 2c1cb4519a766158 68832035f1440d80 449434dcf34c18df \ + 52285e633e11f96a 2dadbbc8241d208c a040c19184ce12c9 6246a55592bd34e4 \ + e5934723a4418ed1 ee49991266b99e07 f95f987e2daa4790 f0ece583a91a678f \ + adafb251f04022de 8abcf1f0758ff76f ef90ed1c3a34ac2b 2092aec9ac155859 \ + c40baab44bcc93d5 8884c6fe13bd6d02 4d5a1f888ecbb3ae 5d61770976d0623b \ + db0cef26d982fc61 06c25f1a7fcc1ccd 263b55b407086264 69da6edfaa +MAC: ddfb200b9e91366f 1fc55b798fc3f3ac +Test: NotVerify +# +Comment: Test Case 163 +Key: 4d6994002868460c e81e2c0398363c01 656fd58cfb45f32a 71f9961244fb1c4a +Message: \ + a6a9fea630a9cceb a83777b65f2cde67 93ec9d340fc00b4d ca3c9440438e99e9 \ + 37978f67415b52e9 92c99ff2f67d5989 69f6bd79b7c9c681 055ac149e85a3220 \ + f2c287331dda1cb0 a3bba29938fb23a1 f2e01aa9a9e02aaf 3aecf823462a4338 \ + ecca6b0aa487ba48 425ce17a57041c49 e536f28e171d3d51 0935744f60b7884c \ + 82f356267b106ebd 6c5038c454540d39 8a00c8a11d05f326 3b67759b1ffde7a1 \ + f13ec76c4e3629bb 86617fdab58c1440 8cdce1a9e1d4cf1c 3c45b75b429ffc33 \ + ddc39f2bf9c9e67f 2a655ae0f26e207e 4a01282bd6f74812 3cff6d7f9e69b27b \ + 2c +MAC: a6fc6154ef5ec8c7 871d0576c2e9752b +Test: Verify +# +Comment: Test Case 164 (tamper mac) +Key: 4d6994002868460c e81e2c0398363c01 656fd58cfb45f32a 71f9961244fb1c4a +Message: \ + a6a9fea630a9cceb a83777b65f2cde67 93ec9d340fc00b4d ca3c9440438e99e9 \ + 37978f67415b52e9 92c99ff2f67d5989 69f6bd79b7c9c681 055ac149e85a3220 \ + f2c287331dda1cb0 a3bba29938fb23a1 f2e01aa9a9e02aaf 3aecf823462a4338 \ + ecca6b0aa487ba48 425ce17a57041c49 e536f28e171d3d51 0935744f60b7884c \ + 82f356267b106ebd 6c5038c454540d39 8a00c8a11d05f326 3b67759b1ffde7a1 \ + f13ec76c4e3629bb 86617fdab58c1440 8cdce1a9e1d4cf1c 3c45b75b429ffc33 \ + ddc39f2bf9c9e67f 2a655ae0f26e207e 4a01282bd6f74812 3cff6d7f9e69b27b \ + 2c +MAC: a6566154ef5ec8c7 871d0576c2e9752b +Test: NotVerify +# +Comment: Test Case 165 +Key: cb91e00ef49d9903 90dec50bbc9d9706 f7f6d715b39aff1d e62289ef2ce0a31d +Message: \ + 5276d724926e09b9 8298c4c9bda59db9 b5dd2a685a6bf53b 7287f7a976a76dc8 \ + 1d44ecafb3f56935 8d2dfe4ad29c0487 792ef0d39ae50e0c 6c06b5e2ad22aaca \ + 67967a1a8be34f18 104d62e2e9666962 9559362f3e443baa 4af08cf71236c279 \ + cc3c93571fe26f2f 30d21119387a7ccd d4b2fc12f637bd41 2749383a80fab34c \ + 3647a45529138459 e595731e10efebe4 a1e8f6971fb3d847 fd11817d0b34c942 \ + 7b6d97a5811cfe66 b17184c16070a501 589c99774f71be4c 823fc98e7493d0ef \ + 006794818393e835 046cf665dc9c6634 38ffac87716ad4f3 aa9d811e30510d31 \ + b9a2b23c35 +MAC: 32792e7bd7473a0c 21d1aaeeff747277 +Test: Verify +# +Comment: Test Case 166 (tamper mac) +Key: cb91e00ef49d9903 90dec50bbc9d9706 f7f6d715b39aff1d e62289ef2ce0a31d +Message: \ + 5276d724926e09b9 8298c4c9bda59db9 b5dd2a685a6bf53b 7287f7a976a76dc8 \ + 1d44ecafb3f56935 8d2dfe4ad29c0487 792ef0d39ae50e0c 6c06b5e2ad22aaca \ + 67967a1a8be34f18 104d62e2e9666962 9559362f3e443baa 4af08cf71236c279 \ + cc3c93571fe26f2f 30d21119387a7ccd d4b2fc12f637bd41 2749383a80fab34c \ + 3647a45529138459 e595731e10efebe4 a1e8f6971fb3d847 fd11817d0b34c942 \ + 7b6d97a5811cfe66 b17184c16070a501 589c99774f71be4c 823fc98e7493d0ef \ + 006794818393e835 046cf665dc9c6634 38ffac87716ad4f3 aa9d811e30510d31 \ + b9a2b23c35 +MAC: 32792e7bd7ed3a0c 21d1aaeeff747277 +Test: NotVerify +# +Comment: Test Case 167 +Key: b24916016094330b 58345e0ae4220b06 a24abc525494afe6 2a7aa34b4a6da504 +Message: \ + 4dfe0ac535a4f9af 58f851d5fdebcc80 a1bc1bc2044ebc71 0d47cdb95834e1a6 \ + 33eb6b68906417e8 5c69bd5a5489daf5 46f5b74a4474bb51 bb890a14bdebbaf0 \ + d725586789704fe5 d90d3f2d961922dc 0fda27534ee2a409 6bae1d299ad71971 \ + fc72d885e2276bbb 34aae8cbc40aa7d3 e4ce2632b1ca3c1c 78594512315f832d \ + d15bb3b3831e6eb7 c856828c602a5f45 f88577a94fb3c6c8 0d0bda3e6a5e6b3b \ + b91eee3c3c5cf405 b2769113a0f15899 76cf42c683088e90 1468ce7ec639ba80 \ + 58a8bc9405b099b7 272bcac71c226092 f2a35875abe605bf 4fd33e150cf89564 \ + a052f9a502925d29 +MAC: aa0460f4bcd60bf2 8c62a209ee90a5ae +Test: Verify +# +Comment: Test Case 168 (tamper mac) +Key: b24916016094330b 58345e0ae4220b06 a24abc525494afe6 2a7aa34b4a6da504 +Message: \ + 4dfe0ac535a4f9af 58f851d5fdebcc80 a1bc1bc2044ebc71 0d47cdb95834e1a6 \ + 33eb6b68906417e8 5c69bd5a5489daf5 46f5b74a4474bb51 bb890a14bdebbaf0 \ + d725586789704fe5 d90d3f2d961922dc 0fda27534ee2a409 6bae1d299ad71971 \ + fc72d885e2276bbb 34aae8cbc40aa7d3 e4ce2632b1ca3c1c 78594512315f832d \ + d15bb3b3831e6eb7 c856828c602a5f45 f88577a94fb3c6c8 0d0bda3e6a5e6b3b \ + b91eee3c3c5cf405 b2769113a0f15899 76cf42c683088e90 1468ce7ec639ba80 \ + 58a8bc9405b099b7 272bcac71c226092 f2a35875abe605bf 4fd33e150cf89564 \ + a052f9a502925d29 +MAC: aa0460f4bcd60bf2 2662a209ee90a5ae +Test: NotVerify +# +Comment: Test Case 169 +Key: d45cb106a83b4106 587ab80940a27204 82e232216d11af05 c73d83c36bcf785e +Message: \ + 21da5b75497339bc a688631e32e86364 dd83c83d993d39e0 5c28a882b60aa9d8 \ + e4044d2e7886ea1e 0f4e3c4136a0a613 236e51bcab8a9c08 b2448a684f334033 \ + 388d61b0144cce23 9a0a64d0aa0ae3cd 79348924be262c70 6ab6d9b9ea19ed22 \ + a74ed2bb9aa0de34 aa4204554de822c6 1caceadbd2174b3c cd24f6b73ee3d9e5 \ + 31aba0cc4b7e00f6 c0054b0ded6dd309 19bee4ebd53028a2 541e5a9201337732 \ + df17fe2a95ff2056 046b63f1d937faf2 f5dfdeca0f066c63 24c6f625fa6d57d9 \ + 8556031a55247059 8fd44a680b445b00 2339ca323f369663 fd8c88f7f9dfd07e \ + 35d3998af709e387 dd2defe8 +MAC: ab3335c86e7c2f15 91ae89a300e0e06c +Test: Verify +# +Comment: Test Case 170 (tamper mac) +Key: d45cb106a83b4106 587ab80940a27204 82e232216d11af05 c73d83c36bcf785e +Message: \ + 21da5b75497339bc a688631e32e86364 dd83c83d993d39e0 5c28a882b60aa9d8 \ + e4044d2e7886ea1e 0f4e3c4136a0a613 236e51bcab8a9c08 b2448a684f334033 \ + 388d61b0144cce23 9a0a64d0aa0ae3cd 79348924be262c70 6ab6d9b9ea19ed22 \ + a74ed2bb9aa0de34 aa4204554de822c6 1caceadbd2174b3c cd24f6b73ee3d9e5 \ + 31aba0cc4b7e00f6 c0054b0ded6dd309 19bee4ebd53028a2 541e5a9201337732 \ + df17fe2a95ff2056 046b63f1d937faf2 f5dfdeca0f066c63 24c6f625fa6d57d9 \ + 8556031a55247059 8fd44a680b445b00 2339ca323f369663 fd8c88f7f9dfd07e \ + 35d3998af709e387 dd2defe8 +MAC: ab3335c86e7c2f15 91ae89a3aae0e06c +Test: NotVerify +# +Comment: Test Case 171 +Key: fee3b70e50587904 10be260bb08bfe0b 7150a4b8b9399be3 9f66ebda877a2131 +Message: \ + 36d4e788646b7984 a7e84f64fd048743 648493765d66747a b8e95b72d409540b \ + dd3b9341a70cc64e f515b2f21939367d bdc9f41a2f6894e7 52ef5926f8ad31d6 \ + e9c41790d1dddec6 f290b80cc9ee8986 b77da0e6e635cd38 24265e1dd490f3bd \ + 540a4d25e82bebda bba4e68492700a4a edaa30d3dffe0b04 246a21f8fa14b54e \ + 1e0274062d5fe1e8 03c76c963776e025 2110f8000e040433 6e252b6839e1b658 \ + e32a5e118a3ff98d 0766233edc0363fd 145cfe22600255ce 2881366162ecb945 \ + 171856a157502e5e b6529d9255009069 5c8e8cbc90e18ab8 62c01ac4add30ac4 \ + eb606543b093a166 e53ef93b3f89 +MAC: 774ee12589d3bb0a 4cc856f547ed44ca +Test: Verify +# +Comment: Test Case 172 (tamper mac) +Key: fee3b70e50587904 10be260bb08bfe0b 7150a4b8b9399be3 9f66ebda877a2131 +Message: \ + 36d4e788646b7984 a7e84f64fd048743 648493765d66747a b8e95b72d409540b \ + dd3b9341a70cc64e f515b2f21939367d bdc9f41a2f6894e7 52ef5926f8ad31d6 \ + e9c41790d1dddec6 f290b80cc9ee8986 b77da0e6e635cd38 24265e1dd490f3bd \ + 540a4d25e82bebda bba4e68492700a4a edaa30d3dffe0b04 246a21f8fa14b54e \ + 1e0274062d5fe1e8 03c76c963776e025 2110f8000e040433 6e252b6839e1b658 \ + e32a5e118a3ff98d 0766233edc0363fd 145cfe22600255ce 2881366162ecb945 \ + 171856a157502e5e b6529d9255009069 5c8e8cbc90e18ab8 62c01ac4add30ac4 \ + eb606543b093a166 e53ef93b3f89 +MAC: 774ee12589d3bb0a 4cc856f547edeeca +Test: NotVerify +# +Comment: Test Case 173 +Key: 105ef702ece7f10b 98565d0328aa250c dce4fab050eac772 f4993650fec4682d +Message: \ + fe9b4a6d7ebad835 6a916dbff5e4c193 e08ea1a31b596955 53649bf3b45518b2 \ + f1621f6f1df7a487 8811467df50711d5 95b279b10ce2065f 46a152faf66aace7 \ + cdcb57eac3fb714b 0db7c902bedad854 8c510598330bf779 ac4974a2b4208a81 \ + ece16bafdcdcfae9 93c3ec519dc4a52a 15aac248b5bac161 033504b7568e3842 \ + 6fa3f14b7feb3512 af21644ce50976fa b4394269f303cbf6 39cfae8f5de6d1cc \ + 8ac21709ad4c1c5c 6d80a952891f4c3d 588ea74b927242cb 41f05a9ed62b6a60 \ + ed816a9ace86f73b 06a08e8fbfdacd18 697463fbe6a5c627 9520c56c4b2fcc38 \ + b036d27ebcc9bac2 69485229221f418b 93a4 +MAC: d93f144fd5a7d8a0 4e17d06503d13e04 +Test: Verify +# +Comment: Test Case 174 (tamper mac) +Key: 105ef702ece7f10b 98565d0328aa250c dce4fab050eac772 f4993650fec4682d +Message: \ + fe9b4a6d7ebad835 6a916dbff5e4c193 e08ea1a31b596955 53649bf3b45518b2 \ + f1621f6f1df7a487 8811467df50711d5 95b279b10ce2065f 46a152faf66aace7 \ + cdcb57eac3fb714b 0db7c902bedad854 8c510598330bf779 ac4974a2b4208a81 \ + ece16bafdcdcfae9 93c3ec519dc4a52a 15aac248b5bac161 033504b7568e3842 \ + 6fa3f14b7feb3512 af21644ce50976fa b4394269f303cbf6 39cfae8f5de6d1cc \ + 8ac21709ad4c1c5c 6d80a952891f4c3d 588ea74b927242cb 41f05a9ed62b6a60 \ + ed816a9ace86f73b 06a08e8fbfdacd18 697463fbe6a5c627 9520c56c4b2fcc38 \ + b036d27ebcc9bac2 69485229221f418b 93a4 +MAC: d93fbe4fd5a7d8a0 4e17d06503d13e04 +Test: NotVerify +# +Comment: Test Case 175 +Key: 66fb910fa8634104 087ebe00ac094805 dd0b50e518a7e747 f225bd21efa71a1d +Message: \ + 733b4184e05b37a2 84373cb8a17239dd 20d6b245eb18ab84 60bf9576d8cdfb4b \ + 083dcfe998068b1d 3ec7d5df390ebc59 e46e9fcf864a53e6 09e85ce1b5582cbd \ + 95fba62d02314a40 f91f1f322ddb8c11 4a2be0d07533b77e 1b1360d06b8c8e00 \ + 88342e8a6678ca5f 98e991c5c41dd70e 48b7dfbdeb963c06 a99cd715286515b0 \ + 99433affbc045e54 edf019b20df0c056 a89f1393354f99df eb70f414d509c46f \ + 4dff6e0903cd5df1 bd76a3ca6763200f 0334a238833b176f ac0b83811547f062 \ + 465f6b4a2cc83be9 3edeb3a541d4b444 08567d8b9294fa3e a07dbfb5c5b0170b \ + 0f82553b4a902488 6ed72eb0abe2f4b3 39713fcb06 +MAC: efef7d9b410373ef d05dd602ca7dc479 +Test: Verify +# +Comment: Test Case 176 (tamper mac) +Key: 66fb910fa8634104 087ebe00ac094805 dd0b50e518a7e747 f225bd21efa71a1d +Message: \ + 733b4184e05b37a2 84373cb8a17239dd 20d6b245eb18ab84 60bf9576d8cdfb4b \ + 083dcfe998068b1d 3ec7d5df390ebc59 e46e9fcf864a53e6 09e85ce1b5582cbd \ + 95fba62d02314a40 f91f1f322ddb8c11 4a2be0d07533b77e 1b1360d06b8c8e00 \ + 88342e8a6678ca5f 98e991c5c41dd70e 48b7dfbdeb963c06 a99cd715286515b0 \ + 99433affbc045e54 edf019b20df0c056 a89f1393354f99df eb70f414d509c46f \ + 4dff6e0903cd5df1 bd76a3ca6763200f 0334a238833b176f ac0b83811547f062 \ + 465f6b4a2cc83be9 3edeb3a541d4b444 08567d8b9294fa3e a07dbfb5c5b0170b \ + 0f82553b4a902488 6ed72eb0abe2f4b3 39713fcb06 +MAC: efef7d9b41a973ef d05dd602ca7dc479 +Test: NotVerify +# +Comment: Test Case 177 +Key: e2d20f0eb8b79305 e0779209e4c8b803 ece6605d0006390e 511b030aac71fff6 +Message: \ + 34ccaaade3ed8a8f 5725ee7781a025c9 52cfd4ce37841f3b 5e57ce706bac6fa0 \ + 78194d5b06d7eb5d fcd9d47d79fa47cb c91b99009fb83cfe 0f0a6e7bb6dd1b2e \ + f6688afc3f75593b 4e2db9c8270093f0 1b2df1bae52db8f5 372670ee038b1cf9 \ + f3a6f5321b4e6d6a 7c2632a326c59441 f285fcd8b2b4cde9 db3dd7dec8f4d8bb \ + 9acdedb61c5a2098 81523ba717cfe90a 54e5e20699aff074 ecc753b4bb2b6f56 \ + f85c0c14b62cac37 7ee8df95b7c89f0c ad8112463002bb1c ca0ed085393fdb31 \ + 9be7465213f28991 da68279230c69edd 48b02478b3df957d ed650226a5de5740 \ + c59d92d9901c6a6a 8491fcb5589a92a0 4bb618fe95ad7b82 137d +MAC: 5c69c2ada5275137 ce21d7af0a9179df +Test: Verify +# +Comment: Test Case 178 (tamper mac) +Key: e2d20f0eb8b79305 e0779209e4c8b803 ece6605d0006390e 511b030aac71fff6 +Message: \ + 34ccaaade3ed8a8f 5725ee7781a025c9 52cfd4ce37841f3b 5e57ce706bac6fa0 \ + 78194d5b06d7eb5d fcd9d47d79fa47cb c91b99009fb83cfe 0f0a6e7bb6dd1b2e \ + f6688afc3f75593b 4e2db9c8270093f0 1b2df1bae52db8f5 372670ee038b1cf9 \ + f3a6f5321b4e6d6a 7c2632a326c59441 f285fcd8b2b4cde9 db3dd7dec8f4d8bb \ + 9acdedb61c5a2098 81523ba717cfe90a 54e5e20699aff074 ecc753b4bb2b6f56 \ + f85c0c14b62cac37 7ee8df95b7c89f0c ad8112463002bb1c ca0ed085393fdb31 \ + 9be7465213f28991 da68279230c69edd 48b02478b3df957d ed650226a5de5740 \ + c59d92d9901c6a6a 8491fcb5589a92a0 4bb618fe95ad7b82 137d +MAC: 5c69c2ada5275137 ce217daf0a9179df +Test: NotVerify +# +Comment: Test Case 179 +Key: d17b7102407e4502 c8537106c0a1370d c1b7290b07e49593 bc1c44d6de84e4d5 +Message: \ + f10847eeec597cd3 a0d7aa5a293ddae6 f7532c2df71e89aa 494c546ed7d2e3c8 \ + da2bb6c684329a24 0a447e3382581979 ab45a7a264304cad 7da01b5472ff1d4c \ + 2ad313ae06add210 f1504373a85ded53 a294f506c442b341 e2cf9655ceb3a1f8 \ + 86b4a68c61789c53 c8e0c6703db3c3df 47b8e60cfa994ddd 68e3323696d32e1d \ + 88d4a9e94c463c14 26038463b64742fe 00280afac257d72a 3b0961d1dd8fee65 \ + 64984eb0de8bc504 8e49674491a94291 d24c8b94a463bedf 6c1fb049af9fae13 \ + 37fdc31588881916 d2805a63299df4fb e97f8f8de24e6c4f 6d1d981cbc472ff3 \ + 44f308cc7b21e24d a13cb0cad9a4c6c3 24555006a3bd5511 daee2d96 +MAC: 937f51b2aeedb64e 6b578c3fd8766374 +Test: Verify +# +Comment: Test Case 180 (tamper mac) +Key: d17b7102407e4502 c8537106c0a1370d c1b7290b07e49593 bc1c44d6de84e4d5 +Message: \ + f10847eeec597cd3 a0d7aa5a293ddae6 f7532c2df71e89aa 494c546ed7d2e3c8 \ + da2bb6c684329a24 0a447e3382581979 ab45a7a264304cad 7da01b5472ff1d4c \ + 2ad313ae06add210 f1504373a85ded53 a294f506c442b341 e2cf9655ceb3a1f8 \ + 86b4a68c61789c53 c8e0c6703db3c3df 47b8e60cfa994ddd 68e3323696d32e1d \ + 88d4a9e94c463c14 26038463b64742fe 00280afac257d72a 3b0961d1dd8fee65 \ + 64984eb0de8bc504 8e49674491a94291 d24c8b94a463bedf 6c1fb049af9fae13 \ + 37fdc31588881916 d2805a63299df4fb e97f8f8de24e6c4f 6d1d981cbc472ff3 \ + 44f308cc7b21e24d a13cb0cad9a4c6c3 24555006a3bd5511 daee2d96 +MAC: 937f51b2aeedb64e 6b578c3f72766374 +Test: NotVerify diff --git a/vendor/cryptopp/vendor_cryptopp/TestVectors/poly1305aes.txt b/vendor/cryptopp/vendor_cryptopp/TestVectors/poly1305aes.txt new file mode 100644 index 00000000..03e1008e --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/TestVectors/poly1305aes.txt @@ -0,0 +1,2229 @@ +AlgorithmType: MAC +Name: Poly1305(AES) +Source: https://cr.yp.to/mac/test.html, poly1305_gmpxx.cpp +# +Comment: Test Case 1 +Key: 363f690fdaf4ba57 54603fc8f336743d 9e3f4d0ee44e5a00 405bf20d5c6f6002 +IV: 73f3878da0b86ccd ae5c69ea922cbe1b +Message: "" +MAC: 97402378282344fd d119481631acb1ec +Test: Verify +# +Comment: Test Case 2 (tamper key) +Key: 373f690fdaf4ba57 54603fc8f336743d 9e3f4d0ee44e5a00 405bf20d5c6f6002 +IV: 73f3878da0b86ccd ae5c69ea922cbe1b +Message: "" +MAC: 97402378282344fd d119481631acb1ec +Test: NotVerify +# +Comment: Test Case 3 +Key: be1132da550c3874 924303fc35155b10 f9c46b05307edf07 b40e2d0500271a00 +IV: 395d9b4561df0c0d 3456347ac57274bb +Message: b7 +MAC: 6279d350ed263a09 04f6e0beb1ea3ef1 +Test: Verify +# +Comment: Test Case 4 (tamper key) +Key: be1032da550c3874 924303fc35155b10 f9c46b05307edf07 b40e2d0500271a00 +IV: 395d9b4561df0c0d 3456347ac57274bb +Message: b7 +MAC: 6279d350ed263a09 04f6e0beb1ea3ef1 +Test: NotVerify +# +Comment: Test Case 5 +Key: 08ad94e8b99182f8 0e10a485c8809d62 33725700c8336c09 80a545020452ea0d +IV: 698ee059d9e1295b 7b93267342e5fa61 +Message: c451 +MAC: b407cda7332c1178 adb79c77adbbae91 +Test: Verify +# +Comment: Test Case 6 (tamper key) +Key: 08ad95e8b99182f8 0e10a485c8809d62 33725700c8336c09 80a545020452ea0d +IV: 698ee059d9e1295b 7b93267342e5fa61 +Message: c451 +MAC: b407cda7332c1178 adb79c77adbbae91 +Test: NotVerify +# +Comment: Test Case 7 +Key: 2745c1bf10242173 005b1ac2a011f07a 3ff30b03c8ff5f0b 80e7b00e08073a03 +IV: 63a9f567982c3bf5 5568512b55b782f1 +Message: 60f167 +MAC: 028f465d72c4cf6d 63dfb0c52b17eb4b +Test: Verify +# +Comment: Test Case 8 (tamper key) +Key: 2745c1be10242173 005b1ac2a011f07a 3ff30b03c8ff5f0b 80e7b00e08073a03 +IV: 63a9f567982c3bf5 5568512b55b782f1 +Message: 60f167 +MAC: 028f465d72c4cf6d 63dfb0c52b17eb4b +Test: NotVerify +# +Comment: Test Case 9 +Key: c9494fc57b576ff7 e350abaa0c1377a1 e02ed80f6c31fc0e 541df80c7c3da607 +IV: 55d6e3fe7513e71f c423f4ac1fe034d1 +Message: ac012660 +MAC: d23c7086ce0eac2f e732bdc15df11f78 +Test: Verify +# +Comment: Test Case 10 (tamper key) +Key: c9494fc57a576ff7 e350abaa0c1377a1 e02ed80f6c31fc0e 541df80c7c3da607 +IV: 55d6e3fe7513e71f c423f4ac1fe034d1 +Message: ac012660 +MAC: d23c7086ce0eac2f e732bdc15df11f78 +Test: NotVerify +# +Comment: Test Case 11 +Key: 5f231a677bb6af64 19d3372b89e2766d d671a60fa8722c07 8045780b2017800f +IV: 29ed0f293c195712 ca977af93ec04737 +Message: 87fffc918a +MAC: 97d05a1d7bd70acf e2d7f71415e79b12 +Test: Verify +# +Comment: Test Case 12 (tamper key) +Key: 5f231a677bb7af64 19d3372b89e2766d d671a60fa8722c07 8045780b2017800f +IV: 29ed0f293c195712 ca977af93ec04737 +Message: 87fffc918a +MAC: 97d05a1d7bd70acf e2d7f71415e79b12 +Test: NotVerify +# +Comment: Test Case 13 +Key: 560cb51ff5f71157 9974a323ff5f2bea d9427f01fc0be70f 2829d909acf5cc04 +IV: 48a3f7274a647778 61846b9a938b4cac +Message: 00e49f35a093 +MAC: a5229163dded55d2 a23aafea9e30352a +Test: Verify +# +Comment: Test Case 14 (tamper key) +Key: 560cb51ff5f71057 9974a323ff5f2bea d9427f01fc0be70f 2829d909acf5cc04 +IV: 48a3f7274a647778 61846b9a938b4cac +Message: 00e49f35a093 +MAC: a5229163dded55d2 a23aafea9e30352a +Test: NotVerify +# +Comment: Test Case 15 +Key: 9935c5ce25b49c70 dadea869c4a616e3 8e75ff0af0a75608 8cf6000c340c740d +IV: bbc3299e1ea35f8a 6dca89fa8e80b7a5 +Message: d2efc4d679b913 +MAC: 452938f64f4278e5 b9e8e1c46c16f597 +Test: Verify +# +Comment: Test Case 16 (tamper key) +Key: 9935c5ce25b49c71 dadea869c4a616e3 8e75ff0af0a75608 8cf6000c340c740d +IV: bbc3299e1ea35f8a 6dca89fa8e80b7a5 +Message: d2efc4d679b913 +MAC: 452938f64f4278e5 b9e8e1c46c16f597 +Test: NotVerify +# +Comment: Test Case 17 +Key: b0bf8679a01cb002 96b3a145dbf5891b 1fea6d0008bf7a0c 8c5e910de8748d08 +IV: cd11480e05582756 a5828e8b5ab03d36 +Message: 9d0fd0dd5af50b79 +MAC: d3faee08b607be2a 91de5ecffb31cff5 +Test: Verify +# +Comment: Test Case 18 (tamper key) +Key: b0bf8679a01cb002 97b3a145dbf5891b 1fea6d0008bf7a0c 8c5e910de8748d08 +IV: cd11480e05582756 a5828e8b5ab03d36 +Message: 9d0fd0dd5af50b79 +MAC: d3faee08b607be2a 91de5ecffb31cff5 +Test: NotVerify +# +Comment: Test Case 19 +Key: 479a2374c6515eb8 ec539d7f1e4ee615 df5d640f8c4f430a 20be710c04e2c60c +IV: d6a1f15ff64f7f4c 11e804e941302f5c +Message: ff1722f7fc1de607 38 +MAC: d1ee7c123354cfcc ea6c454cb8b76cf1 +Test: Verify +# +Comment: Test Case 20 (tamper key) +Key: 479a2374c6515eb8 ec529d7f1e4ee615 df5d640f8c4f430a 20be710c04e2c60c +IV: d6a1f15ff64f7f4c 11e804e941302f5c +Message: ff1722f7fc1de607 38 +MAC: d1ee7c123354cfcc ea6c454cb8b76cf1 +Test: NotVerify +# +Comment: Test Case 21 +Key: 2d33a950d8036c0c f3549a8edd869c27 c7f38306eccc9a07 84b8cc0f144a2e04 +IV: 26b18d17b3797128 4a17d9c62e6e753d +Message: d934ddb6a0648a09 6c40 +MAC: 84c53f53c41deec2 bf088f2c1707e3e5 +Test: Verify +# +Comment: Test Case 22 (tamper key) +Key: 2d33a950d8036c0c f3549b8edd869c27 c7f38306eccc9a07 84b8cc0f144a2e04 +IV: 26b18d17b3797128 4a17d9c62e6e753d +Message: d934ddb6a0648a09 6c40 +MAC: 84c53f53c41deec2 bf088f2c1707e3e5 +Test: NotVerify +# +Comment: Test Case 23 +Key: 097df1821ed9504e cb75fb188aa58b0a a7cfbf0d58a1e70c 8c1ffc0f7071d90b +IV: 570c0efa982d5bd1 a8b276933876a170 +Message: 52d493a2027f5d1b e23d90 +MAC: a60cda050dddea09 0db5ab5a4ea9a07c +Test: Verify +# +Comment: Test Case 24 (tamper key) +Key: 097df1821ed9504e cb75fb198aa58b0a a7cfbf0d58a1e70c 8c1ffc0f7071d90b +IV: 570c0efa982d5bd1 a8b276933876a170 +Message: 52d493a2027f5d1b e23d90 +MAC: a60cda050dddea09 0db5ab5a4ea9a07c +Test: NotVerify +# +Comment: Test Case 25 +Key: 9839ef88dd67949d 96465381991b9fa2 befe520cb8a78a02 24632c00288aee00 +IV: 88fc55433486ceb3 05e7db1118f26a59 +Message: a85409f001672fdc f8728086 +MAC: a94d433e3052a03b 99600db6d93deb3e +Test: Verify +# +Comment: Test Case 26 (tamper key) +Key: 9839ef88dd67949d 96465381981b9fa2 befe520cb8a78a02 24632c00288aee00 +IV: 88fc55433486ceb3 05e7db1118f26a59 +Message: a85409f001672fdc f8728086 +MAC: a94d433e3052a03b 99600db6d93deb3e +Test: NotVerify +# +Comment: Test Case 27 +Key: c21334535704ddea 705a229865f03a19 0712bb0674c1d10c 5434330a2c637901 +IV: 577d67bc7781f63a 87a398226cebf2b4 +Message: 3ce06b4da1bc09d0 b8efe57b54 +MAC: 33036962ab9e7b84 ea643342f29375ea +Test: Verify +# +Comment: Test Case 28 (tamper key) +Key: c21334535704ddea 705a229865f13a19 0712bb0674c1d10c 5434330a2c637901 +IV: 577d67bc7781f63a 87a398226cebf2b4 +Message: 3ce06b4da1bc09d0 b8efe57b54 +MAC: 33036962ab9e7b84 ea643342f29375ea +Test: NotVerify +# +Comment: Test Case 29 +Key: b1ee783266153c57 38fd7ffd676ae9b9 dddf7304dc886702 540688073867b80c +IV: b6b6af9d1b3d3fc5 37d25f9371178241 +Message: b947edce11b79d3a 23eed0e7c135 +MAC: 6347f78458493aba 4e7f82ead0b0b139 +Test: Verify +# +Comment: Test Case 30 (tamper key) +Key: b1ee783266153c57 38fd7ffd676ae8b9 dddf7304dc886702 540688073867b80c +IV: b6b6af9d1b3d3fc5 37d25f9371178241 +Message: b947edce11b79d3a 23eed0e7c135 +MAC: 6347f78458493aba 4e7f82ead0b0b139 +Test: NotVerify +# +Comment: Test Case 31 +Key: b5e200ac6cd36251 bc41d4b137c3ca35 a07c6e09d451ba0f 1405530484481e0b +IV: 6ec7639eee875e13 6f12066bfc2560d4 +Message: 57d299f72c235601 0efe1009cb33ac +MAC: f4ee8b2dffdc602c 9e0f403d7428b473 +Test: Verify +# +Comment: Test Case 32 (tamper key) +Key: b5e200ac6cd36251 bc41d4b137c3ca34 a07c6e09d451ba0f 1405530484481e0b +IV: 6ec7639eee875e13 6f12066bfc2560d4 +Message: 57d299f72c235601 0efe1009cb33ac +MAC: f4ee8b2dffdc602c 9e0f403d7428b473 +Test: NotVerify +# +Comment: Test Case 33 +Key: 6b2226a13580fb68 ceac97eca6cb4f4f cc138e00ec88fc07 1c5d550c788bc004 +IV: ad68861d23e13e45 2cc2773e39a4076a +Message: 41828ef2bd541644 ee359b4374e80e1e +MAC: 2bb1243d5445174b 91df419d88552c16 +Test: Verify +# +Comment: Test Case 34 (tamper key) +Key: 6a2226a13580fb68 ceac97eca6cb4f4f cc138e00ec88fc07 1c5d550c788bc004 +IV: ad68861d23e13e45 2cc2773e39a4076a +Message: 41828ef2bd541644 ee359b4374e80e1e +MAC: 2bb1243d5445174b 91df419d88552c16 +Test: NotVerify +# +Comment: Test Case 35 +Key: 675e1b827f4c86d2 28d8bc4c2de67845 059ee001b841d703 18f85d03688c5701 +IV: d843367e67c4486a 841e9410cb505ad3 +Message: cbde486cd3ae0404 51565eae16364d6b 56 +MAC: a4d29fb8d282953e 4b9b30b3f2321468 +Test: Verify +# +Comment: Test Case 36 (tamper key) +Key: 675f1b827f4c86d2 28d8bc4c2de67845 059ee001b841d703 18f85d03688c5701 +IV: d843367e67c4486a 841e9410cb505ad3 +Message: cbde486cd3ae0404 51565eae16364d6b 56 +MAC: a4d29fb8d282953e 4b9b30b3f2321468 +Test: NotVerify +# +Comment: Test Case 37 +Key: dd36f9508630905b a8f7b861748e4d78 630f7b0e78c7f504 84cdb10b487cf407 +IV: 748b4796e417b868 d82b47ee790805d7 +Message: 13a93d95c5333288 584f99c77b9912f5 9224 +MAC: e683547af7c74b5e bacdedb053ae799e +Test: Verify +# +Comment: Test Case 38 (tamper key) +Key: dd36f8508630905b a8f7b861748e4d78 630f7b0e78c7f504 84cdb10b487cf407 +IV: 748b4796e417b868 d82b47ee790805d7 +Message: 13a93d95c5333288 584f99c77b9912f5 9224 +MAC: e683547af7c74b5e bacdedb053ae799e +Test: NotVerify +# +Comment: Test Case 39 +Key: 2babab4a2979a48b ffa45d224099d2ed a7a32a01f0234405 60a92d0ed8142105 +IV: 59b49269edb8995b adb81d223acb07ed +Message: 9aa3cb3d6fae3ab3 c089c3609b54346c 9fc3ea +MAC: db2bca7a9928b9ee 1354c9f9eed6b43c +Test: Verify +# +Comment: Test Case 40 (tamper key) +Key: 2babab4b2979a48b ffa45d224099d2ed a7a32a01f0234405 60a92d0ed8142105 +IV: 59b49269edb8995b adb81d223acb07ed +Message: 9aa3cb3d6fae3ab3 c089c3609b54346c 9fc3ea +MAC: db2bca7a9928b9ee 1354c9f9eed6b43c +Test: NotVerify +# +Comment: Test Case 41 +Key: 4beee63999808870 2a0d244893e4c440 327b5709d005b50a 4c28d604601a560c +IV: 4893c528690555a5 79ecd8ba4d9436c4 +Message: 9710871675932ead 5198935d970a8169 c278b2b3 +MAC: d93f2a7c7d316a87 9ae5e1420101083e +Test: Verify +# +Comment: Test Case 42 (tamper key) +Key: 4beee63998808870 2a0d244893e4c440 327b5709d005b50a 4c28d604601a560c +IV: 4893c528690555a5 79ecd8ba4d9436c4 +Message: 9710871675932ead 5198935d970a8169 c278b2b3 +MAC: d93f2a7c7d316a87 9ae5e1420101083e +Test: NotVerify +# +Comment: Test Case 43 +Key: 7e77c5bbfc4275ee 978c629ae1d4782b 5c453b05c003b003 c4164501946c5605 +IV: a5ea785819fd5eb1 9a0f905ca2d9d8e0 +Message: 824bf7104d5829fa c4c96731923c1848 683d92498b +MAC: 3eb5874a74a62627 ae92f92ed5464af0 +Test: Verify +# +Comment: Test Case 44 (tamper key) +Key: 7e77c5bbfc4375ee 978c629ae1d4782b 5c453b05c003b003 c4164501946c5605 +IV: a5ea785819fd5eb1 9a0f905ca2d9d8e0 +Message: 824bf7104d5829fa c4c96731923c1848 683d92498b +MAC: 3eb5874a74a62627 ae92f92ed5464af0 +Test: NotVerify +# +Comment: Test Case 45 +Key: ed1271fa7dc2a15e a56716ee18dfce62 db7e59039c06780a 2c68930f48003706 +IV: 5ec246f2b34892ce ee5191c6b9363cfb +Message: d2d05c36788ebd1b 4384b69391ce912a c868e9a3d3e0 +MAC: 6100a127e3d04caf 506b28eb62e4821a +Test: Verify +# +Comment: Test Case 46 (tamper key) +Key: ed1271fa7dc2a05e a56716ee18dfce62 db7e59039c06780a 2c68930f48003706 +IV: 5ec246f2b34892ce ee5191c6b9363cfb +Message: d2d05c36788ebd1b 4384b69391ce912a c868e9a3d3e0 +MAC: 6100a127e3d04caf 506b28eb62e4821a +Test: NotVerify +# +Comment: Test Case 47 +Key: c5878edd2ee25658 f82d78fdb6b535b9 0a80640a387e0300 18b0710c4c89f004 +IV: 9ec28b8fe1e74857 8601b70ab6418cfb +Message: d74010d27ddbb057 7468c750d4af11dd bc51b318c15ca4 +MAC: f33010c57ec21f71 c150dd810c46c01a +Test: Verify +# +Comment: Test Case 48 (tamper key) +Key: c5878edd2ee25659 f82d78fdb6b535b9 0a80640a387e0300 18b0710c4c89f004 +IV: 9ec28b8fe1e74857 8601b70ab6418cfb +Message: d74010d27ddbb057 7468c750d4af11dd bc51b318c15ca4 +MAC: f33010c57ec21f71 c150dd810c46c01a +Test: NotVerify +# +Comment: Test Case 49 +Key: f96bf1bffcfb89b0 7981962ef030b38b cb8dc30aec3ead03 bc6104036c445006 +IV: 7ca4b756bba2f542 45b192943097a023 +Message: c53649166f221d91 55fb40aec3e32cf3 17309bd633c16774 +MAC: 8a1cb2ae92c0e138 0c9c804856274531 +Test: Verify +# +Comment: Test Case 50 (tamper key) +Key: f96bf1bffcfb89b0 7881962ef030b38b cb8dc30aec3ead03 bc6104036c445006 +IV: 7ca4b756bba2f542 45b192943097a023 +Message: c53649166f221d91 55fb40aec3e32cf3 17309bd633c16774 +MAC: 8a1cb2ae92c0e138 0c9c804856274531 +Test: NotVerify +# +Comment: Test Case 51 +Key: cae1c4116db5d8bc a1181e88c7e13f73 3379fc09c805920c 34f1070a6024c50b +IV: cbd90ad349cff798 b5a4f80c4662fe9e +Message: 50c831c17343e069 59571b107a7595d6 9f3e39c16e224aee eb +MAC: 64f97517dc3e210a 9cf97738cb861a19 +Test: Verify +# +Comment: Test Case 52 (tamper key) +Key: cae1c4116db5d8bc a1191e88c7e13f73 3379fc09c805920c 34f1070a6024c50b +IV: cbd90ad349cff798 b5a4f80c4662fe9e +Message: 50c831c17343e069 59571b107a7595d6 9f3e39c16e224aee eb +MAC: 64f97517dc3e210a 9cf97738cb861a19 +Test: NotVerify +# +Comment: Test Case 53 +Key: ed634ef48a446baa f0c624cabe3e8f9d b15ea807488afe09 4caef306682e0e05 +IV: a57255cde4719011 ef4388ec64cc905a +Message: 8f645a4d0315c061 40cb0cf0148c1772 6de88789524b71a0 c31e +MAC: c8b3414747e3e9e3 afce43490b0550d1 +Test: Verify +# +Comment: Test Case 54 (tamper key) +Key: ed634ef48a446baa f0c625cabe3e8f9d b15ea807488afe09 4caef306682e0e05 +IV: a57255cde4719011 ef4388ec64cc905a +Message: 8f645a4d0315c061 40cb0cf0148c1772 6de88789524b71a0 c31e +MAC: c8b3414747e3e9e3 afce43490b0550d1 +Test: NotVerify +# +Comment: Test Case 55 +Key: e7733d718954c307 65aeab2a29611e22 b2460100dc6b0f06 dccd190bcc5cb205 +IV: 0bcb49204e4c1aa9 ad2a9399c7a506a4 +Message: 5f5e965fd49ca62b dd894bb1fce3bbb3 c962d3c0a2219772 81ffee +MAC: b1875916efc9a515 d16879214bfacec8 +Test: Verify +# +Comment: Test Case 56 (tamper key) +Key: e7733d718954c307 65aeab2b29611e22 b2460100dc6b0f06 dccd190bcc5cb205 +IV: 0bcb49204e4c1aa9 ad2a9399c7a506a4 +Message: 5f5e965fd49ca62b dd894bb1fce3bbb3 c962d3c0a2219772 81ffee +MAC: b1875916efc9a515 d16879214bfacec8 +Test: NotVerify +# +Comment: Test Case 57 +Key: 27bc76aab4427b8d 68534b7425a464fa a2ab6d0b7470a20b 304a2902ec8c4006 +IV: 241fbf0f3c4e8937 216ed022feabee34 +Message: 550c5f75cb273e7a 59424db5bf3642f0 f1d6fa7eaae9dfaf 0ec94ffe +MAC: 8e2ba79beddeb46e f084a8dbb02841e8 +Test: Verify +# +Comment: Test Case 58 (tamper key) +Key: 27bc76aab4427b8d 68534b7424a464fa a2ab6d0b7470a20b 304a2902ec8c4006 +IV: 241fbf0f3c4e8937 216ed022feabee34 +Message: 550c5f75cb273e7a 59424db5bf3642f0 f1d6fa7eaae9dfaf 0ec94ffe +MAC: 8e2ba79beddeb46e f084a8dbb02841e8 +Test: NotVerify +# +Comment: Test Case 59 +Key: 0ab36d76e3f5b3e9 7c22bfdd032ed51b d2e32b0cf0b4390d b48e98074088e30c +IV: aca651696de99322 bc3a8f850db1bd91 +Message: 3b15abfd27451c46 4814a81e0a8f1a46 74d1c58595b038e5 06067993b7 +MAC: 041555a977eb1bdc 83901a69f62810c5 +Test: Verify +# +Comment: Test Case 60 (tamper key) +Key: 0ab36d76e3f5b3e9 7c22bfdd032fd51b d2e32b0cf0b4390d b48e98074088e30c +IV: aca651696de99322 bc3a8f850db1bd91 +Message: 3b15abfd27451c46 4814a81e0a8f1a46 74d1c58595b038e5 06067993b7 +MAC: 041555a977eb1bdc 83901a69f62810c5 +Test: NotVerify +# +Comment: Test Case 61 +Key: 8ced379fabba70ff 62f01f86c3b3ba05 fd60e70374617f0f cc2f680dc01fd10e +IV: c256a963bb1abd9b 1817f61cfb2e4867 +Message: fc0295cf9090c569 126a69d43cd8f3c4 6feeb4509ab0856e 95fe837915a3 +MAC: edafac7d8b2cb7c2 2e639dd7a64a5072 +Test: Verify +# +Comment: Test Case 62 (tamper key) +Key: 8ced379fabba70ff 62f01f86c3b3bb05 fd60e70374617f0f cc2f680dc01fd10e +IV: c256a963bb1abd9b 1817f61cfb2e4867 +Message: fc0295cf9090c569 126a69d43cd8f3c4 6feeb4509ab0856e 95fe837915a3 +MAC: edafac7d8b2cb7c2 2e639dd7a64a5072 +Test: NotVerify +# +Comment: Test Case 63 +Key: 2aefdf5288767ee6 3099762f63e98c3b 4698cb01c408e40c 8ce0d804f8be0605 +IV: 608d55a381115964 4b802c9914f49bca +Message: 159b2fb725da2e96 81c2296785c89746 9c7d4a6565ea5231 b12dc536944126 +MAC: adef7d09fc774c7e 85dcd4f83e68739d +Test: Verify +# +Comment: Test Case 64 (tamper key) +Key: 2aefdf5288767ee6 3099762f63e98c3a 4698cb01c408e40c 8ce0d804f8be0605 +IV: 608d55a381115964 4b802c9914f49bca +Message: 159b2fb725da2e96 81c2296785c89746 9c7d4a6565ea5231 b12dc536944126 +MAC: adef7d09fc774c7e 85dcd4f83e68739d +Test: NotVerify +# +Comment: Test Case 65 +Key: 80091948487bc956 f284ca47ed1ef4ff bfdafe08d4600204 0c486b0824ff1205 +IV: d811d183312ccb82 766d347321739094 +Message: d75330e2ca4d1eed 529100482771f572 cc6ace379821b4c4 29cb88a85fcb0036 +MAC: c58f4895e21584b5 2b2e97de884906c1 +Test: Verify +# +Comment: Test Case 66 (tamper key) +Key: 81091948487bc956 f284ca47ed1ef4ff bfdafe08d4600204 0c486b0824ff1205 +IV: d811d183312ccb82 766d347321739094 +Message: d75330e2ca4d1eed 529100482771f572 cc6ace379821b4c4 29cb88a85fcb0036 +MAC: c58f4895e21584b5 2b2e97de884906c1 +Test: NotVerify +# +Comment: Test Case 67 +Key: 149c7ec8e8384378 bf560fe378696908 beaf1e0488a7680b 1810e30200cd0606 +IV: 82befed2b2e86dae 05d85e39cfe7c993 +Message: \ + 74139db7b8a7508a 5fedbb2799de05c1 166f9e060ed3eaee 80475ee8879b6efc \ + ae +MAC: 0ebf21ad816d870a b82ec2f3784dbe55 +Test: Verify +# +Comment: Test Case 68 (tamper nonce) +Key: 149c7ec8e8384378 bf560fe378696908 beaf1e0488a7680b 1810e30200cd0606 +IV: 82bffed2b2e86dae 05d85e39cfe7c993 +Message: \ + 74139db7b8a7508a 5fedbb2799de05c1 166f9e060ed3eaee 80475ee8879b6efc \ + ae +MAC: 0ebf21ad816d870a b82ec2f3784dbe55 +Test: NotVerify +# +Comment: Test Case 69 +Key: 24ad160ece7f1949 72d9a9c184023aef cb745b0e78e38605 70039e053ca82301 +IV: 7a2359a71cffdefc b3bde5f176e11b28 +Message: \ + 6e7e0a54992d3254 59d61c1a2dd0a0aa 20268d02f847b434 58451f7b29150697 \ + 9310eb2c +MAC: ed83fd0203e3b7e9 9f58767b8e6f73bd +Test: Verify +# +Comment: Test Case 70 (tamper nonce) +Key: 24ad160ece7f1949 72d9a9c184023aef cb745b0e78e38605 70039e053ca82301 +IV: 7a2359a71dffdefc b3bde5f176e11b28 +Message: \ + 6e7e0a54992d3254 59d61c1a2dd0a0aa 20268d02f847b434 58451f7b29150697 \ + 9310eb2c +MAC: ed83fd0203e3b7e9 9f58767b8e6f73bd +Test: NotVerify +# +Comment: Test Case 71 +Key: 8e84a181eec185b6 f85adba23cf5e644 a0f9090b3809ea0a 48ea85047c874a0a +IV: 23d3933509eb0a84 f7e178a5a2103285 +Message: \ + 62f4608793941a26 4a4e225489c31eff d455583da8d03f0c 5b8d83e71751ee79 \ + 464e00d9e21aff +MAC: 7bde6aaa46d51365 544a13ca56b9544a +Test: Verify +# +Comment: Test Case 72 (tamper nonce) +Key: 8e84a181eec185b6 f85adba23cf5e644 a0f9090b3809ea0a 48ea85047c874a0a +IV: 23d3933509eb0a85 f7e178a5a2103285 +Message: \ + 62f4608793941a26 4a4e225489c31eff d455583da8d03f0c 5b8d83e71751ee79 \ + 464e00d9e21aff +MAC: 7bde6aaa46d51365 544a13ca56b9544a +Test: NotVerify +# +Comment: Test Case 73 +Key: 4086a4e09fb7adb9 1d63c431a49d064c b277f901384d5000 c011ea00a0b6f301 +IV: 657b8b2c5e1d0844 96335384ebf237b6 +Message: \ + 44dc0894bff39a07 63623b9ae79f9300 2b8bfbb196a1e21b 199286d2c7d1240c \ + ad2ca06c1f3b7483 9d +MAC: 05dd544c7d2085ab 32c324ce53ffac41 +Test: Verify +# +Comment: Test Case 74 (tamper nonce) +Key: 4086a4e09fb7adb9 1d63c431a49d064c b277f901384d5000 c011ea00a0b6f301 +IV: 657b8b2c5e1d0844 96325384ebf237b6 +Message: \ + 44dc0894bff39a07 63623b9ae79f9300 2b8bfbb196a1e21b 199286d2c7d1240c \ + ad2ca06c1f3b7483 9d +MAC: 05dd544c7d2085ab 32c324ce53ffac41 +Test: NotVerify +# +Comment: Test Case 75 +Key: a2049c5f4f53a492 efa26b80f8f89296 93fff5089c039f07 0c6af40c58d5140b +IV: c7907e5a822e14cb b5d9ef570fc2d69f +Message: \ + a00263cd0a2f3246 32732d5ade6ded6d f8af216e3dd76f73 206c01780ff86bb0 \ + fbce7d05fdaf4b2f 22788901 +MAC: d388a8f7c56bc17f 9b293f54fbe03d8c +Test: Verify +# +Comment: Test Case 76 (tamper nonce) +Key: a2049c5f4f53a492 efa26b80f8f89296 93fff5089c039f07 0c6af40c58d5140b +IV: c7907e5a822e14cb b5d9ef570ec2d69f +Message: \ + a00263cd0a2f3246 32732d5ade6ded6d f8af216e3dd76f73 206c01780ff86bb0 \ + fbce7d05fdaf4b2f 22788901 +MAC: d388a8f7c56bc17f 9b293f54fbe03d8c +Test: NotVerify +# +Comment: Test Case 77 +Key: 5b9bad696da0d83a a0092f3d84bc9547 6140cb0cbccc9104 4819950fec19040a +IV: 4608a9b954347f1f e9ca029448077c03 +Message: \ + c284be22d2e74c63 e22fb3c7d1de4d53 b97bdcf44825edd0 3e1d906222c6e6e4 \ + 4aa4061d8c53806e 823435531282a6 +MAC: 3ab30e885dd7a62f 2734e5cd2d8df284 +Test: Verify +# +Comment: Test Case 78 (tamper nonce) +Key: 5b9bad696da0d83a a0092f3d84bc9547 6140cb0cbccc9104 4819950fec19040a +IV: 4608a9b954347f1f e9ca029448077c02 +Message: \ + c284be22d2e74c63 e22fb3c7d1de4d53 b97bdcf44825edd0 3e1d906222c6e6e4 \ + 4aa4061d8c53806e 823435531282a6 +MAC: 3ab30e885dd7a62f 2734e5cd2d8df284 +Test: NotVerify +# +Comment: Test Case 79 +Key: b5989feabe2bc73f 5ec133e300fad195 05595700348ec808 18e784086cdeef02 +IV: 9b2be4d96a30a81b bfff1d052bfa602b +Message: \ + bd125288983c0d41 b148eae795be86ea 13e83b34fea1d30f ced4b05d3d4de2fb \ + 5f3483f870903922 d823096ee28f58f5 78 +MAC: 514d96eab2e0b63c daf454d84b686f56 +Test: Verify +# +Comment: Test Case 80 (tamper nonce) +Key: b5989feabe2bc73f 5ec133e300fad195 05595700348ec808 18e784086cdeef02 +IV: 9b2ae4d96a30a81b bfff1d052bfa602b +Message: \ + bd125288983c0d41 b148eae795be86ea 13e83b34fea1d30f ced4b05d3d4de2fb \ + 5f3483f870903922 d823096ee28f58f5 78 +MAC: 514d96eab2e0b63c daf454d84b686f56 +Test: NotVerify +# +Comment: Test Case 81 +Key: e6bd64fa0dc49fb8 ab01bddc75d63c97 821638028c3a3109 ccae7202fc08f905 +IV: 9c3c25fd34310005 12cf4691d4f4c133 +Message: \ + 9b974b107eb6c83a ce1785f8e4055914 07434e60674c06b6 a85bec7cbfb5f25a \ + 4c3e6acaf43304c2 4a89ba2e8f134296 5791f6be +MAC: c5340492e7daba6d 6fd8af213d9cf7e8 +Test: Verify +# +Comment: Test Case 82 (tamper nonce) +Key: e6bd64fa0dc49fb8 ab01bddc75d63c97 821638028c3a3109 ccae7202fc08f905 +IV: 9c3c25fd35310005 12cf4691d4f4c133 +Message: \ + 9b974b107eb6c83a ce1785f8e4055914 07434e60674c06b6 a85bec7cbfb5f25a \ + 4c3e6acaf43304c2 4a89ba2e8f134296 5791f6be +MAC: c5340492e7daba6d 6fd8af213d9cf7e8 +Test: NotVerify +# +Comment: Test Case 83 +Key: 07b6a5fdde4cc53a f363cb6ed4135e0b 4f1cee0b5886e80a b0c73909187c1302 +IV: d3ef280c9850e411 f24c53033d65cbe7 +Message: \ + 2c2c8c87365ca1d5 5908b94136fb4342 e164f1be807980e2 2834fd85c1f791ed \ + 231d745a79162fd3 1ee81454e35796c5 bb87833b00031d +MAC: 0dcc7f4fadf6db44 e116ed3c5e989b81 +Test: Verify +# +Comment: Test Case 84 (tamper nonce) +Key: 07b6a5fdde4cc53a f363cb6ed4135e0b 4f1cee0b5886e80a b0c73909187c1302 +IV: d3ef280c9850e410 f24c53033d65cbe7 +Message: \ + 2c2c8c87365ca1d5 5908b94136fb4342 e164f1be807980e2 2834fd85c1f791ed \ + 231d745a79162fd3 1ee81454e35796c5 bb87833b00031d +MAC: 0dcc7f4fadf6db44 e116ed3c5e989b81 +Test: NotVerify +# +Comment: Test Case 85 +Key: b35a087cf12fdb0e 8ea2867144bb893a d2446b0bdca09602 0852860cc4021f08 +IV: e84e55359b9c04fb 2c649b52adcde961 +Message: \ + fd406e384997ad92 9ea2b23c04bd4410 4642ef7a08a2e474 7bd8d841e3979ae0 \ + d7091820a0c6b23f 68647b6c22c07d68 026ce20a0fc67f8a 9e57 +MAC: 45532f806b72d56a 5e570b3cbe8c9fb4 +Test: Verify +# +Comment: Test Case 86 (tamper nonce) +Key: b35a087cf12fdb0e 8ea2867144bb893a d2446b0bdca09602 0852860cc4021f08 +IV: e84e55359b9c04fb 2c649a52adcde961 +Message: \ + fd406e384997ad92 9ea2b23c04bd4410 4642ef7a08a2e474 7bd8d841e3979ae0 \ + d7091820a0c6b23f 68647b6c22c07d68 026ce20a0fc67f8a 9e57 +MAC: 45532f806b72d56a 5e570b3cbe8c9fb4 +Test: NotVerify +# +Comment: Test Case 87 +Key: bda0104be0452041 310d7c928c10d2b1 2e252c004c0c2a01 a8280903e8670007 +IV: 24dca1f829a846b4 e17c86619bc62da0 +Message: \ + e725f36d9c806173 d59aa2c9e6a25254 a2d77eaf688d0de3 f8018ebaa7efc28e \ + 15b6fcb1365d240b f7c6d4dd6926310b feb0ba663dc74935 c9d8ef70c7 +MAC: 9aa12b0fde66c4d9 1cfe796bdc402582 +Test: Verify +# +Comment: Test Case 88 (tamper nonce) +Key: bda0104be0452041 310d7c928c10d2b1 2e252c004c0c2a01 a8280903e8670007 +IV: 24dca1f829a846b4 e17c86619bc72da0 +Message: \ + e725f36d9c806173 d59aa2c9e6a25254 a2d77eaf688d0de3 f8018ebaa7efc28e \ + 15b6fcb1365d240b f7c6d4dd6926310b feb0ba663dc74935 c9d8ef70c7 +MAC: 9aa12b0fde66c4d9 1cfe796bdc402582 +Test: NotVerify +# +Comment: Test Case 89 +Key: 004dbe9f0062c619 3940e9d597babd1f 57d6cb0c00200901 b4b5aa0030cdf000 +IV: 5e62e315152ae05e 9f43f4ffeb188a29 +Message: \ + b2799e53927b9dc6 f7db2b7ada8163ff df32eb549d24550f 8345de55fc5d97af \ + d7350269b09f30a7 7a5b2155dc8554bb b73f0f55646464e7 a9423ca6a0d35577 +MAC: 68799e0f8d4921d9 2fbd81c7b3eb3125 +Test: Verify +# +Comment: Test Case 90 (tamper nonce) +Key: 004dbe9f0062c619 3940e9d597babd1f 57d6cb0c00200901 b4b5aa0030cdf000 +IV: 5f62e315152ae05e 9f43f4ffeb188a29 +Message: \ + b2799e53927b9dc6 f7db2b7ada8163ff df32eb549d24550f 8345de55fc5d97af \ + d7350269b09f30a7 7a5b2155dc8554bb b73f0f55646464e7 a9423ca6a0d35577 +MAC: 68799e0f8d4921d9 2fbd81c7b3eb3125 +Test: NotVerify +# +Comment: Test Case 91 +Key: dd7b507f8fc0f5bc 24003fd6f4410d54 8f7ef20b0061bc0e b847330534b52c02 +IV: b34238d5f352bd47 03db0c48f6e6d9e7 +Message: \ + 5b9d08f5da2383b3 893b4d454888aa70 ab3348f66fb6ce56 7d3d9cc4febed459 \ + 5bdc4e35ffd2e988 0d36ce56be78c66a ab0f601ac52f7142 6c0d066acbdac327 \ + b612 +MAC: 5a0334000836a6c9 c89fa539765a5796 +Test: Verify +# +Comment: Test Case 92 (tamper nonce) +Key: dd7b507f8fc0f5bc 24003fd6f4410d54 8f7ef20b0061bc0e b847330534b52c02 +IV: b34239d5f352bd47 03db0c48f6e6d9e7 +Message: \ + 5b9d08f5da2383b3 893b4d454888aa70 ab3348f66fb6ce56 7d3d9cc4febed459 \ + 5bdc4e35ffd2e988 0d36ce56be78c66a ab0f601ac52f7142 6c0d066acbdac327 \ + b612 +MAC: 5a0334000836a6c9 c89fa539765a5796 +Test: NotVerify +# +Comment: Test Case 93 +Key: 92c702f122bd0ed0 4a45850501ab0db8 2bf59109ec82fb00 285ac90630087805 +IV: b29cdafe57c5ab08 21c859888dc11164 +Message: \ + 26388e70d23bf91e 9fa6e84b99d85e0a ab9a56ac6fc73074 ad72b2b464a38d8a \ + db1bfbad57f4ccf6 9ab442338ca03d37 3a94e3a95b131d09 85cfbde9734a744e \ + 656ffcbc63 +MAC: 0cb5513223c51958 d6fde9819e400646 +Test: Verify +# +Comment: Test Case 94 (tamper nonce) +Key: 92c702f122bd0ed0 4a45850501ab0db8 2bf59109ec82fb00 285ac90630087805 +IV: b29cdafe57c4ab08 21c859888dc11164 +Message: \ + 26388e70d23bf91e 9fa6e84b99d85e0a ab9a56ac6fc73074 ad72b2b464a38d8a \ + db1bfbad57f4ccf6 9ab442338ca03d37 3a94e3a95b131d09 85cfbde9734a744e \ + 656ffcbc63 +MAC: 0cb5513223c51958 d6fde9819e400646 +Test: NotVerify +# +Comment: Test Case 95 +Key: 0c68bcb17206cf60 931910a4aef7c7de 338678031471d403 bcbcb9043c7a590a +IV: 332ee48d2ecdd470 4202c1270658dbfd +Message: \ + bdf8af0ede6aa255 5dd9b8871a96d2f1 71392809dcce6a5b d819e1505ae18717 \ + d93625b8a0c80dfd a1c585bb5b57adcd 90d5d66ca341c77c 5aa8ccb48953cc63 \ + 89f11b29b92826 +MAC: 3593c71036d9de3d 3ed8563b1233ac8c +Test: Verify +# +Comment: Test Case 96 (tamper nonce) +Key: 0c68bcb17206cf60 931910a4aef7c7de 338678031471d403 bcbcb9043c7a590a +IV: 332ee48d2ecdd471 4202c1270658dbfd +Message: \ + bdf8af0ede6aa255 5dd9b8871a96d2f1 71392809dcce6a5b d819e1505ae18717 \ + d93625b8a0c80dfd a1c585bb5b57adcd 90d5d66ca341c77c 5aa8ccb48953cc63 \ + 89f11b29b92826 +MAC: 3593c71036d9de3d 3ed8563b1233ac8c +Test: NotVerify +# +Comment: Test Case 97 +Key: 4d3738f9cb595530 6c30ec9a8778da3a aeaccd0848b6aa0a 98c67a07c063670d +IV: 5f8a6460f0b237d1 90fb2494edcbd574 +Message: \ + ae0ed34149cd1113 ef53d60e836d7563 20e4f69ec42454c3 0341daa2ac12a35a \ + 20769b6943ad7c33 00534184c0b7e7e0 9bde7e5f02d22205 14fca7c00e4a1a2e \ + c0b5970462133763 6678 +MAC: 1cef2c155c124d4c 8c4767352330c19d +Test: Verify +# +Comment: Test Case 98 (tamper nonce) +Key: 4d3738f9cb595530 6c30ec9a8778da3a aeaccd0848b6aa0a 98c67a07c063670d +IV: 5f8a6460f0b237d1 90fb2594edcbd574 +Message: \ + ae0ed34149cd1113 ef53d60e836d7563 20e4f69ec42454c3 0341daa2ac12a35a \ + 20769b6943ad7c33 00534184c0b7e7e0 9bde7e5f02d22205 14fca7c00e4a1a2e \ + c0b5970462133763 6678 +MAC: 1cef2c155c124d4c 8c4767352330c19d +Test: NotVerify +# +Comment: Test Case 99 +Key: e73d73662a1a6ac4 e95e6a8b82d9c5cb 0e5ce205703e5705 a45c3c0fa880e202 +IV: 9ec864daf002a07a 7581a643cb30dc35 +Message: \ + 275f2cec5758e919 de2d2eca7619bffd cc50eaf8e6e3554f d897f4f561629989 \ + c1c575181d5e31fc 8b5fc6017985ff45 d5e93dbccc920ba4 2900998b62321423 \ + f7893b14e76d1072 ccd67345 +MAC: 51fa656d435cd35b 84123fe2d113e1a1 +Test: Verify +# +Comment: Test Case 100 (tamper nonce) +Key: e73d73662a1a6ac4 e95e6a8b82d9c5cb 0e5ce205703e5705 a45c3c0fa880e202 +IV: 9ec864daf002a07a 7581a643ca30dc35 +Message: \ + 275f2cec5758e919 de2d2eca7619bffd cc50eaf8e6e3554f d897f4f561629989 \ + c1c575181d5e31fc 8b5fc6017985ff45 d5e93dbccc920ba4 2900998b62321423 \ + f7893b14e76d1072 ccd67345 +MAC: 51fa656d435cd35b 84123fe2d113e1a1 +Test: NotVerify +# +Comment: Test Case 101 +Key: dc271337b72293bb 726469b8c94b4378 fac48b0b14d86502 880a9307c4ef1702 +IV: addff3f2fb71ffa8 de3521be3329bf43 +Message: \ + 6d1b7ffbbfa1989d 8143366ef29dd5e7 c54de3bd060001d4 af263bfdbc20a729 \ + 3c2624fbc8bc9849 ffcfb7f16c8cd831 dabbeee0bbefb46a 16ef68d2100ffb4c \ + 361f47fedcdf47db aeffcd1a8ba54c +MAC: b05587844808d75b 3f9a5d93eecec11f +Test: Verify +# +Comment: Test Case 102 (tamper nonce) +Key: dc271337b72293bb 726469b8c94b4378 fac48b0b14d86502 880a9307c4ef1702 +IV: addff3f2fb71ffa8 de3521be3329bf42 +Message: \ + 6d1b7ffbbfa1989d 8143366ef29dd5e7 c54de3bd060001d4 af263bfdbc20a729 \ + 3c2624fbc8bc9849 ffcfb7f16c8cd831 dabbeee0bbefb46a 16ef68d2100ffb4c \ + 361f47fedcdf47db aeffcd1a8ba54c +MAC: b05587844808d75b 3f9a5d93eecec11f +Test: NotVerify +# +Comment: Test Case 103 +Key: 0c4b7fe15fde2d08 3dcef440f19531f1 5ecb5403a085c10b cc77870048309c05 +IV: 5a613530aaa616db 8ce31ddd24c7ec6a +Message: \ + 846b2dd2fb71681a 0bd7c18670adec41 daa4a07d11d60b03 9fe65b7b899a3a0d \ + 0568df00d9481be4 1fdc6a908956d163 fa72e10c48ec0fe7 d26a625c049d690a \ + 05490ade9125c3b0 022d408b8412ef7e 84d0 +MAC: f8829a5b4379eaee 3c36335088ef1270 +Test: Verify +# +Comment: Test Case 104 (tamper nonce) +Key: 0c4b7fe15fde2d08 3dcef440f19531f1 5ecb5403a085c10b cc77870048309c05 +IV: 5a613430aaa616db 8ce31ddd24c7ec6a +Message: \ + 846b2dd2fb71681a 0bd7c18670adec41 daa4a07d11d60b03 9fe65b7b899a3a0d \ + 0568df00d9481be4 1fdc6a908956d163 fa72e10c48ec0fe7 d26a625c049d690a \ + 05490ade9125c3b0 022d408b8412ef7e 84d0 +MAC: f8829a5b4379eaee 3c36335088ef1270 +Test: NotVerify +# +Comment: Test Case 105 +Key: f97e5f172c4f89d6 2299c38364b851bd a1c22c05648c4900 1896000fc0d89709 +IV: d32c5b10da28b559 a9bd62ac60e8ad61 +Message: \ + 21aa0de3a2d80d21 ba970479c301b7a7 cc4a2c002c06e84f 0ef8a18d00033821 \ + ad4504501d1171d8 a875516c77081343 523f447e452cce54 246fe12472194520 \ + 5e4a707b5be15304 56a570cdad831100 c3557e0881 +MAC: 86175c7c598b651b dd3e71a8ab564d92 +Test: Verify +# +Comment: Test Case 106 (tamper nonce) +Key: f97e5f172c4f89d6 2299c38364b851bd a1c22c05648c4900 1896000fc0d89709 +IV: d32c5b10da29b559 a9bd62ac60e8ad61 +Message: \ + 21aa0de3a2d80d21 ba970479c301b7a7 cc4a2c002c06e84f 0ef8a18d00033821 \ + ad4504501d1171d8 a875516c77081343 523f447e452cce54 246fe12472194520 \ + 5e4a707b5be15304 56a570cdad831100 c3557e0881 +MAC: 86175c7c598b651b dd3e71a8ab564d92 +Test: NotVerify +# +Comment: Test Case 107 +Key: f298f30e0f1aec83 5c435f09c06f4aee e6d56b01288c920d 004bee0a845e6408 +IV: 7947b09578eac0ce 0c55d3abf6976dc1 +Message: \ + de1725ee02d042f1 10467ff9c927c9bc 899d3ed49ff9aaa0 3c0bec36247cca02 \ + 94eff096c03387d0 7907c9422e92ffb8 2f3d8ccf36366f72 415ba865d773686b \ + 625801228b89f205 90bc47be4e46767e 84024dba38bc2d +MAC: 6bf893dbbcc4f3f0 ac321285774cdf81 +Test: Verify +# +Comment: Test Case 108 (tamper nonce) +Key: f298f30e0f1aec83 5c435f09c06f4aee e6d56b01288c920d 004bee0a845e6408 +IV: 7947b09578eac0cf 0c55d3abf6976dc1 +Message: \ + de1725ee02d042f1 10467ff9c927c9bc 899d3ed49ff9aaa0 3c0bec36247cca02 \ + 94eff096c03387d0 7907c9422e92ffb8 2f3d8ccf36366f72 415ba865d773686b \ + 625801228b89f205 90bc47be4e46767e 84024dba38bc2d +MAC: 6bf893dbbcc4f3f0 ac321285774cdf81 +Test: NotVerify +# +Comment: Test Case 109 +Key: 46a9fe320b0db570 f84b952189d798ec 888ffe06706cbd0b 0c798104588f5800 +IV: 39db9bea3cc4a684 73b78f3bca629f18 +Message: \ + deedaf3cd5738ffd 7a8c6724add8d1dc 8aa4c122e975f32e 01e5da1025080304 \ + f6b240cb26cfc8a0 5c2fc5090796e591 3aa7b3241ca7521d 8c2d2db23530b62b \ + e2f6f608c5bea921 ed6e2af40410853f b73963d3e0b5f06c e21d +MAC: 5a9ab859d07abee9 3cb0e17acabc6955 +Test: Verify +# +Comment: Test Case 110 (tamper nonce) +Key: 46a9fe320b0db570 f84b952189d798ec 888ffe06706cbd0b 0c798104588f5800 +IV: 39db9bea3cc4a684 73b78e3bca629f18 +Message: \ + deedaf3cd5738ffd 7a8c6724add8d1dc 8aa4c122e975f32e 01e5da1025080304 \ + f6b240cb26cfc8a0 5c2fc5090796e591 3aa7b3241ca7521d 8c2d2db23530b62b \ + e2f6f608c5bea921 ed6e2af40410853f b73963d3e0b5f06c e21d +MAC: 5a9ab859d07abee9 3cb0e17acabc6955 +Test: NotVerify +# +Comment: Test Case 111 +Key: ef82a80113721d27 cff8fa0b5609401a 53711f03902d6b01 f4e0ed0590a6b401 +IV: 2d7d2540794bc5b1 bad3fb8878b8a285 +Message: \ + 1d7f21bc3a883ece 6064acbc922eaf2e 75f8bdc38ca2b83f 5290143757a86a74 \ + 278b3161136f2f74 d3db306509df937f d7514264f3faa345 8ab87ce260e75687 \ + 7287e986f618fac9 f42a2efd0ac27ce1 13be4506b9e94b43 a1c82501 +MAC: 16ebeed5a8b2b017 9e4414a62f161739 +Test: Verify +# +Comment: Test Case 112 (tamper nonce) +Key: ef82a80113721d27 cff8fa0b5609401a 53711f03902d6b01 f4e0ed0590a6b401 +IV: 2d7d2540794bc5b1 bad3fb8879b8a285 +Message: \ + 1d7f21bc3a883ece 6064acbc922eaf2e 75f8bdc38ca2b83f 5290143757a86a74 \ + 278b3161136f2f74 d3db306509df937f d7514264f3faa345 8ab87ce260e75687 \ + 7287e986f618fac9 f42a2efd0ac27ce1 13be4506b9e94b43 a1c82501 +MAC: 16ebeed5a8b2b017 9e4414a62f161739 +Test: NotVerify +# +Comment: Test Case 113 +Key: 4a9323805fbf98a6 2047590b56e58138 7593cd0f8007cd0d 48ebcc04e4bb9d00 +IV: 3315f8c68746c668 e75668089cdf243e +Message: \ + 8f9f1a54e29c92b5 d5ef440fd0bf4d33 945ceb98dc2c54d2 ac87593a530052e2 \ + 9f6c378109c936de b87bee893a3bbcce 97a76674d4ba4680 419fba94a00d763f \ + 79adc18277f7612f 724fb8ac8a747a22 1ce096f09adc70db 7b2a6f1b37e65b +MAC: 7c574194d7faa23b fb0ed2c1a69fc37d +Test: Verify +# +Comment: Test Case 114 (tamper nonce) +Key: 4a9323805fbf98a6 2047590b56e58138 7593cd0f8007cd0d 48ebcc04e4bb9d00 +IV: 3315f8c68746c668 e75668089cdf243f +Message: \ + 8f9f1a54e29c92b5 d5ef440fd0bf4d33 945ceb98dc2c54d2 ac87593a530052e2 \ + 9f6c378109c936de b87bee893a3bbcce 97a76674d4ba4680 419fba94a00d763f \ + 79adc18277f7612f 724fb8ac8a747a22 1ce096f09adc70db 7b2a6f1b37e65b +MAC: 7c574194d7faa23b fb0ed2c1a69fc37d +Test: NotVerify +# +Comment: Test Case 115 +Key: 3c4a35c4f84edbc0 461859a1aaeda498 d17ddc0fb492b409 8cf123023000d20e +IV: 34cf22140c2067b3 20be6d3c5521d66a +Message: \ + 678c1e19786c9283 d017ab0f9bde8f10 1a5fb8dfe38ee7c5 2e5f7a66fa407061 \ + cc8e7a45fa0dc8ca 2473dabf5169cf6b c8874bab16327044 92eaaa8c2a1aeef7 \ + a8683ca275046d99 774758c9b0273478 af7f23c5b2930944 7db3d0a7cebe9e76 \ + 27 +MAC: 1ee71bddd627d54e 7c8774cf5a13dc80 +Test: Verify +# +Comment: Test Case 116 (tamper nonce) +Key: 3c4a35c4f84edbc0 461859a1aaeda498 d17ddc0fb492b409 8cf123023000d20e +IV: 34ce22140c2067b3 20be6d3c5521d66a +Message: \ + 678c1e19786c9283 d017ab0f9bde8f10 1a5fb8dfe38ee7c5 2e5f7a66fa407061 \ + cc8e7a45fa0dc8ca 2473dabf5169cf6b c8874bab16327044 92eaaa8c2a1aeef7 \ + a8683ca275046d99 774758c9b0273478 af7f23c5b2930944 7db3d0a7cebe9e76 \ + 27 +MAC: 1ee71bddd627d54e 7c8774cf5a13dc80 +Test: NotVerify +# +Comment: Test Case 117 +Key: df47ad1c5781da5e 233d30c7dfebe2be 2276c208b0678c0a 0c9d8600fc0dc20e +IV: c6de1cfac488c5aa 64630e0532fdf387 +Message: \ + a2264b0013bbe262 a2fb7e39532c3c2c 704242a39e5b55c5 23ef98a8d6069e78 \ + 2ce97940a55ba247 572080aa4cbcd6bc fe195f9d74b46298 a3fb407a01dff22d \ + c86b6d6dc70fb41e 2f34c87bf09f38ef b8978c2c4ceec4ef e90569eae45c18ac \ + c7851a +MAC: 55b6922459431298 bdda17477abdbbc6 +Test: Verify +# +Comment: Test Case 118 (tamper nonce) +Key: df47ad1c5781da5e 233d30c7dfebe2be 2276c208b0678c0a 0c9d8600fc0dc20e +IV: c6de1cfbc488c5aa 64630e0532fdf387 +Message: \ + a2264b0013bbe262 a2fb7e39532c3c2c 704242a39e5b55c5 23ef98a8d6069e78 \ + 2ce97940a55ba247 572080aa4cbcd6bc fe195f9d74b46298 a3fb407a01dff22d \ + c86b6d6dc70fb41e 2f34c87bf09f38ef b8978c2c4ceec4ef e90569eae45c18ac \ + c7851a +MAC: 55b6922459431298 bdda17477abdbbc6 +Test: NotVerify +# +Comment: Test Case 119 +Key: f6b4d6003aacf007 806222edfe2b8eda 508c7f0134dcdd02 2ce15c0980a70b0a +IV: a450a32c734596d4 bc9f1b6592985804 +Message: \ + 479ebda797502361 7e8cb967f57b2622 27af763c33a82bc2 766cf026038e2b4a \ + 2de8f1c4381426b6 a0df1d955a43b781 f32dbd26d6e8e84c 54d87257679da194 \ + 869258bea67e7546 5d92dbb7d69338c9 c0f5ef96ded7e232 b0548a17f22bab78 \ + be03366482 +MAC: 735a906e49b07f13 9707addad9f8969b +Test: Verify +# +Comment: Test Case 120 (tamper nonce) +Key: f6b4d6003aacf007 806222edfe2b8eda 508c7f0134dcdd02 2ce15c0980a70b0a +IV: a450a32c734496d4 bc9f1b6592985804 +Message: \ + 479ebda797502361 7e8cb967f57b2622 27af763c33a82bc2 766cf026038e2b4a \ + 2de8f1c4381426b6 a0df1d955a43b781 f32dbd26d6e8e84c 54d87257679da194 \ + 869258bea67e7546 5d92dbb7d69338c9 c0f5ef96ded7e232 b0548a17f22bab78 \ + be03366482 +MAC: 735a906e49b07f13 9707addad9f8969b +Test: NotVerify +# +Comment: Test Case 121 +Key: 83a157811983c031 3a3d03bafc7c7d08 f6ed4e0860017b04 041437018c8a6301 +IV: 800e541dae6b8c21 0038f8d529125957 +Message: \ + 2d3d606880f3f696 36dd2d50edbc8464 45900d7e7b7f053e 72b6c8faf7c48424 \ + 01e58d82d883180e 60455f4d02e3b147 74bfc5ef3ecb2db0 81f6aa78ba2e9cbb \ + 13293decac56fa0d 9b595a9d3d0ce4b1 cbaaa00975ceb9f6 c4636e7e910a39a5 \ + 347791e0cd8bed68 +MAC: 1f34bd6c43f705b3 5319723b1cce3723 +Test: Verify +# +Comment: Test Case 122 (tamper nonce) +Key: 83a157811983c031 3a3d03bafc7c7d08 f6ed4e0860017b04 041437018c8a6301 +IV: 800e541dae6b8c21 0138f8d529125957 +Message: \ + 2d3d606880f3f696 36dd2d50edbc8464 45900d7e7b7f053e 72b6c8faf7c48424 \ + 01e58d82d883180e 60455f4d02e3b147 74bfc5ef3ecb2db0 81f6aa78ba2e9cbb \ + 13293decac56fa0d 9b595a9d3d0ce4b1 cbaaa00975ceb9f6 c4636e7e910a39a5 \ + 347791e0cd8bed68 +MAC: 1f34bd6c43f705b3 5319723b1cce3723 +Test: NotVerify +# +Comment: Test Case 123 +Key: 26cf001dea63e062 3e0d434a7b0290f6 f5e13f07447f3802 fcd1000a94935d0b +IV: ad6dff70a15b3b6c 44e3ee77cd46be5d +Message: \ + eed3d8abe81b1e86 fc0ed6f356339ad4 75065d216100ecd3 38659198b4e1a3a3 \ + b47b4e9c966c2292 7af985d02c1fa5a1 2502c28603ae593b 13ead3c8cb766b80 \ + f1b91c88253f1aa0 38a07064bf1505e5 18c76b1b76c55689 af29517ba0bcfb91 \ + 7517199b56343b8e d4abf2 +MAC: ca8d5cc018efff30 f9c0af6aaf4115bd +Test: Verify +# +Comment: Test Case 124 (tamper nonce) +Key: 26cf001dea63e062 3e0d434a7b0290f6 f5e13f07447f3802 fcd1000a94935d0b +IV: ad6dff70a15b3b6c 44e3ee76cd46be5d +Message: \ + eed3d8abe81b1e86 fc0ed6f356339ad4 75065d216100ecd3 38659198b4e1a3a3 \ + b47b4e9c966c2292 7af985d02c1fa5a1 2502c28603ae593b 13ead3c8cb766b80 \ + f1b91c88253f1aa0 38a07064bf1505e5 18c76b1b76c55689 af29517ba0bcfb91 \ + 7517199b56343b8e d4abf2 +MAC: ca8d5cc018efff30 f9c0af6aaf4115bd +Test: NotVerify +# +Comment: Test Case 125 +Key: 5e0cc8a3c0745a48 6f5112f3008619ba 3aa6bb0f4008af00 349b8800086d1808 +IV: 4ed4250f9bdc1c26 c571c478d7986753 +Message: \ + 6a206a1935eaac2a 9ef8b298c0037610 67797483146334e1 c71287222875f792 \ + 9561abcb4c58f5ea 50a88211abf82112 71959685f8ca66bf dcede20562d997f8 \ + 3a43c3869bb870eb 60f2fc0bea1e1e5b b3b4e0ac7e466b5a 344d5f9626f78e61 \ + 3a51e7d50a58c06a 4abd7635db +MAC: 92ae348646735dd2 6d795836e2ee55c9 +Test: Verify +# +Comment: Test Case 126 (tamper nonce) +Key: 5e0cc8a3c0745a48 6f5112f3008619ba 3aa6bb0f4008af00 349b8800086d1808 +IV: 4ed4250f9bdc1c26 c571c478d7996753 +Message: \ + 6a206a1935eaac2a 9ef8b298c0037610 67797483146334e1 c71287222875f792 \ + 9561abcb4c58f5ea 50a88211abf82112 71959685f8ca66bf dcede20562d997f8 \ + 3a43c3869bb870eb 60f2fc0bea1e1e5b b3b4e0ac7e466b5a 344d5f9626f78e61 \ + 3a51e7d50a58c06a 4abd7635db +MAC: 92ae348646735dd2 6d795836e2ee55c9 +Test: NotVerify +# +Comment: Test Case 127 +Key: 082f62602bcf73af c1115d0154631a4b d146a10e9841f70e 748c490ccca97e07 +IV: 29a9d972b21e682a 5fcd329d66416f80 +Message: \ + 888535740c252662 42c34ab8cbdb8491 a31eb77881ae00ed eee638c95dc127e5 \ + 465c5a538180b5c3 43ff7b0fda00a07e 1e57f69f05f68df4 dcc5bd3986e41fcd \ + 407920c1f9d5853d d5004caf00ec2d1e 4323be491a4b3df6 10fa3096df4f631f \ + c883e1c15966fe2e 664add67360b857a +MAC: bec35d5c5b4c32fc 6a0f5dd06881c21e +Test: Verify +# +Comment: Test Case 128 (tamper nonce) +Key: 082f62602bcf73af c1115d0154631a4b d146a10e9841f70e 748c490ccca97e07 +IV: 28a9d972b21e682a 5fcd329d66416f80 +Message: \ + 888535740c252662 42c34ab8cbdb8491 a31eb77881ae00ed eee638c95dc127e5 \ + 465c5a538180b5c3 43ff7b0fda00a07e 1e57f69f05f68df4 dcc5bd3986e41fcd \ + 407920c1f9d5853d d5004caf00ec2d1e 4323be491a4b3df6 10fa3096df4f631f \ + c883e1c15966fe2e 664add67360b857a +MAC: bec35d5c5b4c32fc 6a0f5dd06881c21e +Test: NotVerify +# +Comment: Test Case 129 +Key: 68c9ba9e0369195a 526bf38c1ba90795 e7b8c50b48aa2d05 f8f83a08b88cfe01 +IV: 441055a1baab2614 b5d8df4eea80aaca +Message: \ + 378f89840eb3c997 5c7d5f4927459b65 5417ba66dfd35c3e 5ac9b866ea660522 \ + f58ea604416f9b9d ecfae6133f817893 9932f9780555b65f 1e6fc509d5cb2bcb \ + 59d1cf9b406a382c 641f3fa3a0b73639 e92fb2ee85684da3 d713acadded77837 \ + a847d2e8b10b1415 2a53b8ca0aee04f3 1db6e1 +MAC: 82d08123f36c0a1e d355733fdc9412ff +Test: Verify +# +Comment: Test Case 130 (tamper nonce) +Key: 68c9ba9e0369195a 526bf38c1ba90795 e7b8c50b48aa2d05 f8f83a08b88cfe01 +IV: 441055a0baab2614 b5d8df4eea80aaca +Message: \ + 378f89840eb3c997 5c7d5f4927459b65 5417ba66dfd35c3e 5ac9b866ea660522 \ + f58ea604416f9b9d ecfae6133f817893 9932f9780555b65f 1e6fc509d5cb2bcb \ + 59d1cf9b406a382c 641f3fa3a0b73639 e92fb2ee85684da3 d713acadded77837 \ + a847d2e8b10b1415 2a53b8ca0aee04f3 1db6e1 +MAC: 82d08123f36c0a1e d355733fdc9412ff +Test: NotVerify +# +Comment: Test Case 131 +Key: 4d66a771a1cae469 2026ad6920169d09 d0eb9904f0a4890c 14d6d0095c3d9d09 +IV: cc6af0199f779387 bc497eb228528ae4 +Message: \ + 5baa5e1e59d527ae 785c9c5f8ef4e1e1 d08fe21d32bea860 6703e5cf754748d0 \ + f2a6ee4b7c15f9f4 719553008935e15a c4c377f6811f56e8 223cb79783006775 \ + a655c0226bb916dc 4f6adcd89fbd3263 80a95902c9afeaeb eba2836fa2eae448 \ + 40a56bab5e8187ad eb64868a21b8eda2 6246a42bf68e +MAC: 00ea4d893c5aecfc 9a181bc51c015e29 +Test: Verify +# +Comment: Test Case 132 (tamper nonce) +Key: 4d66a771a1cae469 2026ad6920169d09 d0eb9904f0a4890c 14d6d0095c3d9d09 +IV: cc6af0199f779287 bc497eb228528ae4 +Message: \ + 5baa5e1e59d527ae 785c9c5f8ef4e1e1 d08fe21d32bea860 6703e5cf754748d0 \ + f2a6ee4b7c15f9f4 719553008935e15a c4c377f6811f56e8 223cb79783006775 \ + a655c0226bb916dc 4f6adcd89fbd3263 80a95902c9afeaeb eba2836fa2eae448 \ + 40a56bab5e8187ad eb64868a21b8eda2 6246a42bf68e +MAC: 00ea4d893c5aecfc 9a181bc51c015e29 +Test: NotVerify +# +Comment: Test Case 133 +Key: adeead121b660605 25989c9da1acf762 776db102388ae908 6c446000f4822203 +IV: f1537021ba778a65 ec06f520738a20a9 +Message: \ + af7304780673a0e0 5d41aa4a1b338767 1cce0595812a3f8f 7e950c0f93ffca43 \ + 73cfbb79425b599f 9c03e9b737701e53 3e23e8bf4d284fcb bd5bdb515ba594ce \ + 744f47b7aaa05646 a440fddbb01b2eef 3e17ae8b3ffd56fc 59314db4d7e1824b \ + 30c902da6959200d 991de84938173876 2ee7016de458693d +MAC: 00230b56b55208b6 362ba7051d9e1c4b +Test: Verify +# +Comment: Test Case 134 (tamper nonce) +Key: adeead121b660605 25989c9da1acf762 776db102388ae908 6c446000f4822203 +IV: f1537021ba778a65 ed06f520738a20a9 +Message: \ + af7304780673a0e0 5d41aa4a1b338767 1cce0595812a3f8f 7e950c0f93ffca43 \ + 73cfbb79425b599f 9c03e9b737701e53 3e23e8bf4d284fcb bd5bdb515ba594ce \ + 744f47b7aaa05646 a440fddbb01b2eef 3e17ae8b3ffd56fc 59314db4d7e1824b \ + 30c902da6959200d 991de84938173876 2ee7016de458693d +MAC: 00230b56b55208b6 362ba7051d9e1c4b +Test: NotVerify +# +Comment: Test Case 135 +Key: 8344097a7dfb9eff 3e6fed7d27cd58ca 8323680274e34a01 a89f070084435f07 +IV: e7b3096efad44942 9601538d734b5f80 +Message: \ + 0b24ae16c9983e7d 584d3a4b837099dc 967cb73ce1c7e457 1b433695a98456b4 \ + a805cb719d09eef5 572840da98d9b62f 566e6b37354f8e50 92c4e53b483cf0f0 \ + 41bb61dec450d41b 7814f511eeac4044 1aab7b4ffb09a08d cd85c915c1b90502 \ + 7466e138b6b5542f c94940b7f580fb0f 2b765f267fffb44c 847d61 +MAC: 3e6bb6b1b26c91d7 395d101e74da2686 +Test: Verify +# +Comment: Test Case 136 (tamper nonce) +Key: 8344097a7dfb9eff 3e6fed7d27cd58ca 8323680274e34a01 a89f070084435f07 +IV: e7b3096efad44942 9601538c734b5f80 +Message: \ + 0b24ae16c9983e7d 584d3a4b837099dc 967cb73ce1c7e457 1b433695a98456b4 \ + a805cb719d09eef5 572840da98d9b62f 566e6b37354f8e50 92c4e53b483cf0f0 \ + 41bb61dec450d41b 7814f511eeac4044 1aab7b4ffb09a08d cd85c915c1b90502 \ + 7466e138b6b5542f c94940b7f580fb0f 2b765f267fffb44c 847d61 +MAC: 3e6bb6b1b26c91d7 395d101e74da2686 +Test: NotVerify +# +Comment: Test Case 137 +Key: 34df7fb4f7322734 d13ac072709d534d defcf70df87d8304 286a7c026450bb0a +IV: acedea7c0d7e4e79 de6cc624909321c0 +Message: \ + ae6a73cb0a388ed6 cb0648491cfc0a5b 715024732ce1b670 5eca3e99e68bec94 \ + f5605fff98edd664 f41ead101bb76b8c 088f003471b6a4cf 80e268666e55fa63 \ + b559634d4739b13b 575f4b7216b6ff1e 45ff52b6b5f68635 d9ee9c474396aaf8 \ + f00d463746f7729e 56bd106d730f8bb8 0ede6fc3d4f5f9ad e395f4272b9f +MAC: 9756d125e47f7cc5 698c47385ade5052 +Test: Verify +# +Comment: Test Case 138 (tamper nonce) +Key: 34df7fb4f7322734 d13ac072709d534d defcf70df87d8304 286a7c026450bb0a +IV: acedea7c0d7e4e79 de6cc624909320c0 +Message: \ + ae6a73cb0a388ed6 cb0648491cfc0a5b 715024732ce1b670 5eca3e99e68bec94 \ + f5605fff98edd664 f41ead101bb76b8c 088f003471b6a4cf 80e268666e55fa63 \ + b559634d4739b13b 575f4b7216b6ff1e 45ff52b6b5f68635 d9ee9c474396aaf8 \ + f00d463746f7729e 56bd106d730f8bb8 0ede6fc3d4f5f9ad e395f4272b9f +MAC: 9756d125e47f7cc5 698c47385ade5052 +Test: NotVerify +# +Comment: Test Case 139 +Key: 4f0f7b9a17799a94 53bc255b43720a7a 37aa8d0fb4517104 647bd409785eb20a +IV: 0998330dd3b28e48 b22e1292f0832eb5 +Message: \ + 9c043a6389f70533 0496a04e9b14e5b1 93cfc6fcee4212e7 9d35cca370b4990c \ + b9d36f42ca7475ce 0b151da6290257bc d11db9bf5fcba6fc 00739f7127387de0 \ + 0ced22d66197a56c acc212d6c4699295 864b54e517fae117 6d808895b90675c5 \ + f3989b542f40c1dc 02d3b2c63d445bc3 90afa9a7aa8abe17 0b47acc44d228940 +MAC: df457a5c3ea8c424 56ab57b29dca0708 +Test: Verify +# +Comment: Test Case 140 (tamper nonce) +Key: 4f0f7b9a17799a94 53bc255b43720a7a 37aa8d0fb4517104 647bd409785eb20a +IV: 0898330dd3b28e48 b22e1292f0832eb5 +Message: \ + 9c043a6389f70533 0496a04e9b14e5b1 93cfc6fcee4212e7 9d35cca370b4990c \ + b9d36f42ca7475ce 0b151da6290257bc d11db9bf5fcba6fc 00739f7127387de0 \ + 0ced22d66197a56c acc212d6c4699295 864b54e517fae117 6d808895b90675c5 \ + f3989b542f40c1dc 02d3b2c63d445bc3 90afa9a7aa8abe17 0b47acc44d228940 +MAC: df457a5c3ea8c424 56ab57b29dca0708 +Test: NotVerify +# +Comment: Test Case 141 +Key: e30ba92b225d3bd3 b4466bc6e02547da 39c3b80004c6bd0a c8f1230ee0816405 +IV: 54ef807540f149cb 8e13367a916f1262 +Message: \ + 13e9f9580feabbf9 144c38133e910140 c9ba7213af2e9da6 63f82b653c24db4f \ + 0ed4a71dbf6217d3 af4fe6ede1e72daa a1a0be50ce5bf731 532296904771df55 \ + 46877205e989d898 d9bf86baa6b36448 532298227e8f53d1 b2ea61f95b414ea1 \ + c8c0a6b14a7f4a23 3ed0dde483412cd7 64c5f9e2544cb306 3615ff92564d331e \ + 0eda +MAC: d55caf91ea0d7e56 f1522e9591641b83 +Test: Verify +# +Comment: Test Case 142 (tamper mac) +Key: e30ba92b225d3bd3 b4466bc6e02547da 39c3b80004c6bd0a c8f1230ee0816405 +IV: 54ef807540f149cb 8e13367a916f1262 +Message: \ + 13e9f9580feabbf9 144c38133e910140 c9ba7213af2e9da6 63f82b653c24db4f \ + 0ed4a71dbf6217d3 af4fe6ede1e72daa a1a0be50ce5bf731 532296904771df55 \ + 46877205e989d898 d9bf86baa6b36448 532298227e8f53d1 b2ea61f95b414ea1 \ + c8c0a6b14a7f4a23 3ed0dde483412cd7 64c5f9e2544cb306 3615ff92564d331e \ + 0eda +MAC: d55cae91ea0d7e56 f1522e9591641b83 +Test: NotVerify +# +Comment: Test Case 143 +Key: 18bca7d60ac6900d 5d971de569914579 4d4b930e7c645c09 889c020da4bf2b0d +IV: 9ae90fd5cb961d03 3215c3b9d1d826e5 +Message: \ + 6815df9eb051934d 3bda1ee9a81673bf 11bb36f7f8a79870 ec32f5b6e8728550 \ + 8765ee37b68184f1 5ba3da04b94ec3ca 09f9c201a15a718d 8c664474d8c9c45f \ + 2eb296e4341bd68f beb09377fe564207 500408f15e7a7eeb e0c25fb98c2418ba \ + d6af9f0aca759a88 252dff2484412bd4 4534c5a4ae438f8e 06ee479212604ce9 \ + 0febf3d960 +MAC: c4e42972423bfa0b 2a4a4b930263654e +Test: Verify +# +Comment: Test Case 144 (tamper mac) +Key: 18bca7d60ac6900d 5d971de569914579 4d4b930e7c645c09 889c020da4bf2b0d +IV: 9ae90fd5cb961d03 3215c3b9d1d826e5 +Message: \ + 6815df9eb051934d 3bda1ee9a81673bf 11bb36f7f8a79870 ec32f5b6e8728550 \ + 8765ee37b68184f1 5ba3da04b94ec3ca 09f9c201a15a718d 8c664474d8c9c45f \ + 2eb296e4341bd68f beb09377fe564207 500408f15e7a7eeb e0c25fb98c2418ba \ + d6af9f0aca759a88 252dff2484412bd4 4534c5a4ae438f8e 06ee479212604ce9 \ + 0febf3d960 +MAC: c4e42972423afa0b 2a4a4b930263654e +Test: NotVerify +# +Comment: Test Case 145 +Key: 48feb8191bef84ed 0db9217ec0acf738 f5c76801f4c3560d 081a020cb8277d03 +IV: 799b2b6f1dabc89d a23bf4191b518cfb +Message: \ + 08f0413526711a0c 1640c5dfc7ae7352 e13c2f05c6696fe9 2cce6f3bf1a8c8f9 \ + 98092fbf7a49cb90 8a916f513fe3a320 1fd326e53c95ce69 633da454e66c4e7e \ + 757d3df0c6098050 9af0a2d9d345faf2 1820d755b5a5be18 e2626cc8cfba4744 \ + 378434fe8db54e27 a5f0017836fb6a4e 1b41a3d0e661e8c8 c45491930fd8d746 \ + 5c0c44eac1931166 +MAC: 4b38798b6900e3a6 f76d14852a2e74ec +Test: Verify +# +Comment: Test Case 146 (tamper mac) +Key: 48feb8191bef84ed 0db9217ec0acf738 f5c76801f4c3560d 081a020cb8277d03 +IV: 799b2b6f1dabc89d a23bf4191b518cfb +Message: \ + 08f0413526711a0c 1640c5dfc7ae7352 e13c2f05c6696fe9 2cce6f3bf1a8c8f9 \ + 98092fbf7a49cb90 8a916f513fe3a320 1fd326e53c95ce69 633da454e66c4e7e \ + 757d3df0c6098050 9af0a2d9d345faf2 1820d755b5a5be18 e2626cc8cfba4744 \ + 378434fe8db54e27 a5f0017836fb6a4e 1b41a3d0e661e8c8 c45491930fd8d746 \ + 5c0c44eac1931166 +MAC: 4b38798b6900e3a6 f66d14852a2e74ec +Test: NotVerify +# +Comment: Test Case 147 +Key: 5c3dcaab1e847909 4f0a8610dfb5a210 77178502e0a90d08 d0701c0a8c5cab0a +IV: c80af1388e12189b 778b69ea0e06191b +Message: \ + bea5ba568c7db99c 0644d5c85216c99c f6e05a6fc36290e3 ba9f40120277a8c1 \ + 1c6217a8dfd044e5 141aae6730770326 585d951bbf26fe79 c53e8bc8b53389d1 \ + 95a0797570be5a84 d808eb0880ee2ed8 4cc3f30be9f185af 301077e54400b7d9 \ + a0304e10eea994c6 b180ce316efc09ba c0fcc6a9ee4b581e 5bcf039fcfba796f \ + ebc77fd97014a022 946e5302 +MAC: 872825041c10cafb 4787e38a95b42976 +Test: Verify +# +Comment: Test Case 148 (tamper mac) +Key: 5c3dcaab1e847909 4f0a8610dfb5a210 77178502e0a90d08 d0701c0a8c5cab0a +IV: c80af1388e12189b 778b69ea0e06191b +Message: \ + bea5ba568c7db99c 0644d5c85216c99c f6e05a6fc36290e3 ba9f40120277a8c1 \ + 1c6217a8dfd044e5 141aae6730770326 585d951bbf26fe79 c53e8bc8b53389d1 \ + 95a0797570be5a84 d808eb0880ee2ed8 4cc3f30be9f185af 301077e54400b7d9 \ + a0304e10eea994c6 b180ce316efc09ba c0fcc6a9ee4b581e 5bcf039fcfba796f \ + ebc77fd97014a022 946e5302 +MAC: 872825041c10cafb 4787e38a94b42976 +Test: NotVerify +# +Comment: Test Case 149 +Key: d897523199902629 49ff5c892ae36b64 e1188d06a4703a06 9c77720f1c778905 +IV: fb0a83f3edab81c4 ae13cb4f7dd3927e +Message: \ + c08d6bcc256d5cb7 6204a1785d894c7e 676e1bedc445e727 60bf845e876df347 \ + fb5e1320cc70d72e 7478a6d201f35068 616b5625b13d4c11 fcd170833e63ca39 \ + c2de5a8e4e31bcc2 aa6394ab56e514b7 506add01a72913a3 fa832639e6f072a8 \ + cecc361cfef3dfa8 567353ac586763a9 d140aa786abd1b64 40419d273210cf00 \ + dc061ddaf9fc824f 6fd6fbc83d5e +MAC: 8ee9a008d8b2595f 499bd49dda05ed61 +Test: Verify +# +Comment: Test Case 150 (tamper mac) +Key: d897523199902629 49ff5c892ae36b64 e1188d06a4703a06 9c77720f1c778905 +IV: fb0a83f3edab81c4 ae13cb4f7dd3927e +Message: \ + c08d6bcc256d5cb7 6204a1785d894c7e 676e1bedc445e727 60bf845e876df347 \ + fb5e1320cc70d72e 7478a6d201f35068 616b5625b13d4c11 fcd170833e63ca39 \ + c2de5a8e4e31bcc2 aa6394ab56e514b7 506add01a72913a3 fa832639e6f072a8 \ + cecc361cfef3dfa8 567353ac586763a9 d140aa786abd1b64 40419d273210cf00 \ + dc061ddaf9fc824f 6fd6fbc83d5e +MAC: 8ee9a008d8b2595f 499bd49dda05ec61 +Test: NotVerify +# +Comment: Test Case 151 +Key: e01bb11a988faeb7 b74ce2f58301c96a a77a530ab8618e00 ec9d2c07688c580a +IV: 917df197ee94b96d 41a805126ff443fa +Message: \ + 20610e14d0fb1cb7 783dffe307f9fc28 3a3c492c17944209 64c8c9fb70060a90 \ + 6718a43714c0ee8c feed6f05e66b2e20 a8774dbf0c8fc870 57916bc7977558ff \ + 8efc36a2bd252ebb 129ec0f909ee19b1 66667072f538e24d c94e1461c36c6051 \ + 6996f326bb22e1ce c0a1c7c990e07bf6 47eb683c244a89ed 989e4e5c0aaead73 \ + 45a19900c37ace83 1c954cac76c7a2bd b30af9 +MAC: 593c9362fcf34a03 26fc32b640c7c98f +Test: Verify +# +Comment: Test Case 152 (tamper mac) +Key: e01bb11a988faeb7 b74ce2f58301c96a a77a530ab8618e00 ec9d2c07688c580a +IV: 917df197ee94b96d 41a805126ff443fa +Message: \ + 20610e14d0fb1cb7 783dffe307f9fc28 3a3c492c17944209 64c8c9fb70060a90 \ + 6718a43714c0ee8c feed6f05e66b2e20 a8774dbf0c8fc870 57916bc7977558ff \ + 8efc36a2bd252ebb 129ec0f909ee19b1 66667072f538e24d c94e1461c36c6051 \ + 6996f326bb22e1ce c0a1c7c990e07bf6 47eb683c244a89ed 989e4e5c0aaead73 \ + 45a19900c37ace83 1c954cac76c7a2bd b30af9 +MAC: 593c9363fcf34a03 26fc32b640c7c98f +Test: NotVerify +# +Comment: Test Case 153 +Key: 97b06db5c5537bcc 6d7a5cb30d24a191 9945e003c029670b 58074601e874bf0f +IV: 27b6a882e3e80f8f 096f06464057747e +Message: \ + 29d6e9c3148a8b52 21eeda8ae103972b c63839d7edd6aaa0 52d04927abb833d5 \ + 8f1c98a3a723f5c8 12d052f3d3e91e99 2157700e2d1aae7f eaf8a696b0d96b3f \ + f603e39d26d86538 a8b72b7ba04914c2 a085d0cd9f7f4c8a 77f22027cc8b67c2 \ + 8e4a5fb422c4edcb 7b18461b625bdd02 e0aed07f2d1c09a4 0f29cbdbb4329d42 \ + 7cfcf79fc0e46a3b fcb0565e0b3461eb e2316b0f4d74 +MAC: b875dc07c158e2e4 b483e3f56bada133 +Test: Verify +# +Comment: Test Case 154 (tamper mac) +Key: 97b06db5c5537bcc 6d7a5cb30d24a191 9945e003c029670b 58074601e874bf0f +IV: 27b6a882e3e80f8f 096f06464057747e +Message: \ + 29d6e9c3148a8b52 21eeda8ae103972b c63839d7edd6aaa0 52d04927abb833d5 \ + 8f1c98a3a723f5c8 12d052f3d3e91e99 2157700e2d1aae7f eaf8a696b0d96b3f \ + f603e39d26d86538 a8b72b7ba04914c2 a085d0cd9f7f4c8a 77f22027cc8b67c2 \ + 8e4a5fb422c4edcb 7b18461b625bdd02 e0aed07f2d1c09a4 0f29cbdbb4329d42 \ + 7cfcf79fc0e46a3b fcb0565e0b3461eb e2316b0f4d74 +MAC: b875dc07c158e3e4 b483e3f56bada133 +Test: NotVerify +# +Comment: Test Case 155 +Key: dcf1497961ca226c 88fc49e5839b99dc 9f732609f02bed06 48b61a0080bbc70d +IV: 6ffa76c9828ff407 b92a4b594b83a3b7 +Message: \ + 0a059d181e4dbad7 04068ea743ca6fb8 8ab1c2dd62f54170 2f44a4cf00cd920a \ + d22f22f07cdcc880 e25627252196deab 47a088aa95ca1ac4 0ebe930f8b25195d \ + 543c4dd0181550fb 6c78208d0efe3856 9ec100338b1af899 d88ba863b1c2c005 \ + fe0dd6162326118f 9e321cad305403cf 150302a01dfa3af5 86e25837a4183ca2 \ + 2512b94839cad7d7 fcf3842d4887fc5d 8afefea7f9389c7f 1af4 +MAC: 6c3edea6c22fbcc7 0863b0171fd29b92 +Test: Verify +# +Comment: Test Case 156 (tamper mac) +Key: dcf1497961ca226c 88fc49e5839b99dc 9f732609f02bed06 48b61a0080bbc70d +IV: 6ffa76c9828ff407 b92a4b594b83a3b7 +Message: \ + 0a059d181e4dbad7 04068ea743ca6fb8 8ab1c2dd62f54170 2f44a4cf00cd920a \ + d22f22f07cdcc880 e25627252196deab 47a088aa95ca1ac4 0ebe930f8b25195d \ + 543c4dd0181550fb 6c78208d0efe3856 9ec100338b1af899 d88ba863b1c2c005 \ + fe0dd6162326118f 9e321cad305403cf 150302a01dfa3af5 86e25837a4183ca2 \ + 2512b94839cad7d7 fcf3842d4887fc5d 8afefea7f9389c7f 1af4 +MAC: 6c3edea6c22fbcc7 0863b1171fd29b92 +Test: NotVerify +# +Comment: Test Case 157 +Key: 61ea479d5f348bcc 9aed30db03b8859a a612620b040a9a03 f83d03048897760a +IV: f267c97d7b4db2ee 8d2dd2bc5c62a959 +Message: \ + 54e74a558388c65c 903b0117b8d6fcb3 6643c602acb51f1a 4481ad1a48f76c9c \ + dfb7f1623fb7bed0 f2bfe7ab95e35efb 2624fdd3da1ded1e 9e9b39e692a58271 \ + 5c73d39c2a916c1d 5053c8e53626e05c 4bde2f25fb1d4399 b87c804a2202bc7e \ + 768f1aa02186bd71 d985570fac376cf7 159b1c10b85faa70 dc2abbfe2c777ca2 \ + 069743271d0099f7 86f006322772293d 0e454dc6a4f73780 21f27e4e +MAC: 16d890bacb9c8dde 410cad9d589cf2a5 +Test: Verify +# +Comment: Test Case 158 (tamper mac) +Key: 61ea479d5f348bcc 9aed30db03b8859a a612620b040a9a03 f83d03048897760a +IV: f267c97d7b4db2ee 8d2dd2bc5c62a959 +Message: \ + 54e74a558388c65c 903b0117b8d6fcb3 6643c602acb51f1a 4481ad1a48f76c9c \ + dfb7f1623fb7bed0 f2bfe7ab95e35efb 2624fdd3da1ded1e 9e9b39e692a58271 \ + 5c73d39c2a916c1d 5053c8e53626e05c 4bde2f25fb1d4399 b87c804a2202bc7e \ + 768f1aa02186bd71 d985570fac376cf7 159b1c10b85faa70 dc2abbfe2c777ca2 \ + 069743271d0099f7 86f006322772293d 0e454dc6a4f73780 21f27e4e +MAC: 16d890bacb9c8dde 410cad9d599cf2a5 +Test: NotVerify +# +Comment: Test Case 159 +Key: 0ec3aea793c43e26 1cb6e1dcec0f897e ac5a8a0040efa50b 18a06f0e24b87e04 +IV: 4822c7e69352f72b 7c0ce67b39038f81 +Message: \ + c1c8c817c1e43e29 a8c48649fea1f857 3fc15644571de4d4 f03ea58e6283e924 \ + 4bb13b0d957a363d 3ebc863c5d7e939d 3fe9e19606c56af7 03108565936e89df \ + 1fc5ecb43f22f17d de78b93bf64cd836 35b9cc3b7e373281 47b8e7da2670b946 \ + 35a5fa74c7ecf1a5 64aae15af6b9902b 735d67f1949973db 515ab578ca6fbe00 \ + 14b874dca4668108 106263071cf3328f 509980e433f3bf84 4d75fc18e4ba18f8 \ + 73 +MAC: a81eee608fee66a7 7bb89d05951ca60f +Test: Verify +# +Comment: Test Case 160 (tamper mac) +Key: 0ec3aea793c43e26 1cb6e1dcec0f897e ac5a8a0040efa50b 18a06f0e24b87e04 +IV: 4822c7e69352f72b 7c0ce67b39038f81 +Message: \ + c1c8c817c1e43e29 a8c48649fea1f857 3fc15644571de4d4 f03ea58e6283e924 \ + 4bb13b0d957a363d 3ebc863c5d7e939d 3fe9e19606c56af7 03108565936e89df \ + 1fc5ecb43f22f17d de78b93bf64cd836 35b9cc3b7e373281 47b8e7da2670b946 \ + 35a5fa74c7ecf1a5 64aae15af6b9902b 735d67f1949973db 515ab578ca6fbe00 \ + 14b874dca4668108 106263071cf3328f 509980e433f3bf84 4d75fc18e4ba18f8 \ + 73 +MAC: a81fee608fee66a7 7bb89d05951ca60f +Test: NotVerify +# +Comment: Test Case 161 +Key: a1a61542187e288d e7a2b67e1d0bf681 5334190060e56b0c 10c4010a2057f904 +IV: fcee2dc084261ee7 de867498a2015513 +Message: \ + ed691851418d9e35 445df1e3d22c0374 d50df5c65920de20 aa21e9722f32261c \ + 9b3f6edccc0c1210 6a03f33c30f7b005 04a5cb5dc5a97d6f ca66e1f998081634 \ + 47841013902223fa 261736560ee65b12 8c276f51d0ecc19b 53a294ebaaaa1ff1 \ + 2e3004bf5228b978 3ff0ce4dd62a5f62 51ceb421ba75bc0d 1751f9c2fb18b32a \ + 48b8e99be0a2131f 92e26c690ccbcb5d 997f7e53f43b610c 8c5ace877281b1bb \ + 399a56 +MAC: be131e2423f7c704 ce4d86d0b8327f5f +Test: Verify +# +Comment: Test Case 162 (tamper mac) +Key: a1a61542187e288d e7a2b67e1d0bf681 5334190060e56b0c 10c4010a2057f904 +IV: fcee2dc084261ee7 de867498a2015513 +Message: \ + ed691851418d9e35 445df1e3d22c0374 d50df5c65920de20 aa21e9722f32261c \ + 9b3f6edccc0c1210 6a03f33c30f7b005 04a5cb5dc5a97d6f ca66e1f998081634 \ + 47841013902223fa 261736560ee65b12 8c276f51d0ecc19b 53a294ebaaaa1ff1 \ + 2e3004bf5228b978 3ff0ce4dd62a5f62 51ceb421ba75bc0d 1751f9c2fb18b32a \ + 48b8e99be0a2131f 92e26c690ccbcb5d 997f7e53f43b610c 8c5ace877281b1bb \ + 399a56 +MAC: be131e2523f7c704 ce4d86d0b8327f5f +Test: NotVerify +# +Comment: Test Case 163 +Key: 6d7aa11768d02801 c04c8f91851c378c 3146cb07cc343209 d481990c9002dd0d +IV: 9e31c442aba6167d 7dcc2b7765c690f4 +Message: \ + f7338c609a6cd2b8 44518a8d682dbc81 ca424f8a3782b671 88a6d8dbd6dc5dcd \ + 0fea2ea95600619a 51eb27ba18e43be2 268a6c5e0c22cf94 c9a7709f83cd6c92 \ + b79a3b0d9a9ca8ec 87cfa69fb3e181da 6bed387710070cd9 ae7c783249e4c401 \ + 7f000e199cb60524 86abc3398c4513f7 324b6f42527b1b01 f793334078f741f7 \ + f75010940616b88c c17bc64ec0d945f3 25b435772f517826 e4ab675ca3a8539a \ + f8642eff7a +MAC: f2055c63aeaf8b66 020de400d7490193 +Test: Verify +# +Comment: Test Case 164 (tamper mac) +Key: 6d7aa11768d02801 c04c8f91851c378c 3146cb07cc343209 d481990c9002dd0d +IV: 9e31c442aba6167d 7dcc2b7765c690f4 +Message: \ + f7338c609a6cd2b8 44518a8d682dbc81 ca424f8a3782b671 88a6d8dbd6dc5dcd \ + 0fea2ea95600619a 51eb27ba18e43be2 268a6c5e0c22cf94 c9a7709f83cd6c92 \ + b79a3b0d9a9ca8ec 87cfa69fb3e181da 6bed387710070cd9 ae7c783249e4c401 \ + 7f000e199cb60524 86abc3398c4513f7 324b6f42527b1b01 f793334078f741f7 \ + f75010940616b88c c17bc64ec0d945f3 25b435772f517826 e4ab675ca3a8539a \ + f8642eff7a +MAC: f2055c63aeae8b66 020de400d7490193 +Test: NotVerify +# +Comment: Test Case 165 +Key: 8896e56a783265ce 29d7f739a33e4835 d1203b072c211c0e e066df023c424104 +IV: 9a9950d6bcee212c be7d5e1bc139d59c +Message: \ + e2bd81afb6043404 5ae88eba3ff3598d f3c9209252c18ca1 6a483e7f5317d935 \ + d55ae48b5e1990b8 011e734112ccce05 95ef98e7b024881a 6dc699c0de72f5b3 \ + ccd93e2af2cee3f4 ed5635ff220304b8 f29c9fa2c128bd2e ee56eeccc9e37f95 \ + bcbec0af8ca3a379 f9d8781bdb7dd3ce 197370da9b2d0889 84f6564dd9d5e296 \ + 93a2452045e8993e c0125a9b8f2d69a8 a0da833b078bc58b 821bd85bf0bbf184 \ + 5d36a4a31e3de1de 4f +MAC: 1af45fc6dfb8b75b a133dc97a2dc8323 +Test: Verify +# +Comment: Test Case 166 (tamper mac) +Key: 8896e56a783265ce 29d7f739a33e4835 d1203b072c211c0e e066df023c424104 +IV: 9a9950d6bcee212c be7d5e1bc139d59c +Message: \ + e2bd81afb6043404 5ae88eba3ff3598d f3c9209252c18ca1 6a483e7f5317d935 \ + d55ae48b5e1990b8 011e734112ccce05 95ef98e7b024881a 6dc699c0de72f5b3 \ + ccd93e2af2cee3f4 ed5635ff220304b8 f29c9fa2c128bd2e ee56eeccc9e37f95 \ + bcbec0af8ca3a379 f9d8781bdb7dd3ce 197370da9b2d0889 84f6564dd9d5e296 \ + 93a2452045e8993e c0125a9b8f2d69a8 a0da833b078bc58b 821bd85bf0bbf184 \ + 5d36a4a31e3de1de 4f +MAC: 1af45fc6dfb8b75b a132dc97a2dc8323 +Test: NotVerify +# +Comment: Test Case 167 +Key: 9bf93727a20dd6d5 3f987e6337b10945 bc45d10ca4646a04 908dd30638cd3c03 +IV: 51d099de05c38ea9 e9f0151ef6b47828 +Message: \ + 54b86de5b3c0a313 66ad4bda1da29ca4 2300a3728779a5ec 2a7dee1e29903a7d \ + 48a762fb68060fce b35aa8d0fc44741f 451792cc9037b9bb b4a7d9dd37135b7f \ + babd7b22c38af076 e49847e0ddbbff22 d391ee63c8a71e7d 4ef75a850ab505c5 \ + 7380e7360ad8adee 70f4ce4dafcd6f82 5f5ee6270504a454 fcffd906b4decb27 \ + 5eb35e688b0b56fb ff2449aef2b83151 1617781c1b1d7017 1c491ed028e9f886 \ + 9c56ef2761452360 6a6c0e5c24 +MAC: 9903e7c10167f3bd 028f7eb3617ab5e4 +Test: Verify +# +Comment: Test Case 168 (tamper mac) +Key: 9bf93727a20dd6d5 3f987e6337b10945 bc45d10ca4646a04 908dd30638cd3c03 +IV: 51d099de05c38ea9 e9f0151ef6b47828 +Message: \ + 54b86de5b3c0a313 66ad4bda1da29ca4 2300a3728779a5ec 2a7dee1e29903a7d \ + 48a762fb68060fce b35aa8d0fc44741f 451792cc9037b9bb b4a7d9dd37135b7f \ + babd7b22c38af076 e49847e0ddbbff22 d391ee63c8a71e7d 4ef75a850ab505c5 \ + 7380e7360ad8adee 70f4ce4dafcd6f82 5f5ee6270504a454 fcffd906b4decb27 \ + 5eb35e688b0b56fb ff2449aef2b83151 1617781c1b1d7017 1c491ed028e9f886 \ + 9c56ef2761452360 6a6c0e5c24 +MAC: 9903e7c10167f3bd 028f7eb3617bb5e4 +Test: NotVerify +# +Comment: Test Case 169 +Key: a77c244245087720 dbf83aed1a1c3bd1 cee5e80378a4750c 749d9904dc9f9d06 +IV: 3a46eed71c028e79 46dd2d708f1dc82a +Message: \ + 7afc4a0b65cf8ef8 c713cddd9d52db3a 4e033dda67d7f3b9 39f2ccf359d132d3 \ + ce7cde334c6c2c13 80f9f01d4bcc5899 cf9574366d67f0a6 59bc9ab28ecc855c \ + 48638f94d0bba850 b5986d0064c59a34 5b0e6ac8755a6ece 170880a5d405011d \ + 6890b1384c598801 f2f60156bb9b8a16 a9f5de1e4f4dec66 556c0b2a710c47da \ + 9df812e9529bea44 91eb9a4c87256330 1a414f698e3bd0e4 a8db0e19e855f385 \ + 4d066e9fa158e332 437e7ecaa3e1fbbd 23 +MAC: 6f637f89e1caac9a f826af88b9d11a69 +Test: Verify +# +Comment: Test Case 170 (tamper mac) +Key: a77c244245087720 dbf83aed1a1c3bd1 cee5e80378a4750c 749d9904dc9f9d06 +IV: 3a46eed71c028e79 46dd2d708f1dc82a +Message: \ + 7afc4a0b65cf8ef8 c713cddd9d52db3a 4e033dda67d7f3b9 39f2ccf359d132d3 \ + ce7cde334c6c2c13 80f9f01d4bcc5899 cf9574366d67f0a6 59bc9ab28ecc855c \ + 48638f94d0bba850 b5986d0064c59a34 5b0e6ac8755a6ece 170880a5d405011d \ + 6890b1384c598801 f2f60156bb9b8a16 a9f5de1e4f4dec66 556c0b2a710c47da \ + 9df812e9529bea44 91eb9a4c87256330 1a414f698e3bd0e4 a8db0e19e855f385 \ + 4d066e9fa158e332 437e7ecaa3e1fbbd 23 +MAC: 6f627f89e1caac9a f826af88b9d11a69 +Test: NotVerify +# +Comment: Test Case 171 +Key: b45f0101c85d2d63 c7cf45a0bf4ca653 35411a0924c4c00e 3cbd6e0ebcbeb300 +IV: 7fefdf4c5ec2bfae 3b14869fbd979571 +Message: \ + 8b0a283ab8fdcfa6 6c60e92315b4c5a3 a4608a95c92e7987 9f38936bfb5d0586 \ + 672dc01f2b8fc597 efafba046380a707 e0319ca95f1631ff 4ec46a49216fcf88 \ + 9d8fa8c81f6d5f0e 1c1a13809aba877a ec24234b3a544a88 19b4d23a24a1c3c1 \ + 316b8950d8e85ef5 0271759c2cfc1618 203a635a8eaee3a7 62b5e28656a54787 \ + 10d0d7e8b936ddbb a75258d34f6eeb6f a84fca37fdadde5f 62c0e6b8652d4075 \ + fe175eb74d3b72f5 8ecac8dd39b44ce1 031618 +MAC: fc64ad2b138cfb72 d700d09eb95c3d94 +Test: Verify +# +Comment: Test Case 172 (tamper mac) +Key: b45f0101c85d2d63 c7cf45a0bf4ca653 35411a0924c4c00e 3cbd6e0ebcbeb300 +IV: 7fefdf4c5ec2bfae 3b14869fbd979571 +Message: \ + 8b0a283ab8fdcfa6 6c60e92315b4c5a3 a4608a95c92e7987 9f38936bfb5d0586 \ + 672dc01f2b8fc597 efafba046380a707 e0319ca95f1631ff 4ec46a49216fcf88 \ + 9d8fa8c81f6d5f0e 1c1a13809aba877a ec24234b3a544a88 19b4d23a24a1c3c1 \ + 316b8950d8e85ef5 0271759c2cfc1618 203a635a8eaee3a7 62b5e28656a54787 \ + 10d0d7e8b936ddbb a75258d34f6eeb6f a84fca37fdadde5f 62c0e6b8652d4075 \ + fe175eb74d3b72f5 8ecac8dd39b44ce1 031618 +MAC: fc64ad2a138cfb72 d700d09eb95c3d94 +Test: NotVerify +# +Comment: Test Case 173 +Key: 262c146f8792a482 3610ca87b7ae09bc 53c6cc037c96800f 1ceb4700ec513203 +IV: 2885c04772a6ec03 4edb2d4309fac03d +Message: \ + 6038c3566cbec556 438a883b8e2792a7 e744c1730e56470c bfdacfb82db8278e \ + f0eae45da9a9b3ec 343b27c262b96949 fd2abc0c8003183f dde7f80aa01f9890 \ + 0a7cedb326a09f5a dbc61c3d7f86867c b042883145a17022 88682d2888c5b992 \ + 42a6456847e4c222 aade602964e6a515 292e466ecfb69157 1fbe80a7833939c5 \ + df7e2d2662ef490c cea935328fda47b8 088d27d744b82f63 76af0af9e843bfc7 \ + c1ecee23dc372faa e064dc6f3e242847 b14f1ef5074d +MAC: 692b5a1a6fbacca8 d91976a6c0ed025c +Test: Verify +# +Comment: Test Case 174 (tamper mac) +Key: 262c146f8792a482 3610ca87b7ae09bc 53c6cc037c96800f 1ceb4700ec513203 +IV: 2885c04772a6ec03 4edb2d4309fac03d +Message: \ + 6038c3566cbec556 438a883b8e2792a7 e744c1730e56470c bfdacfb82db8278e \ + f0eae45da9a9b3ec 343b27c262b96949 fd2abc0c8003183f dde7f80aa01f9890 \ + 0a7cedb326a09f5a dbc61c3d7f86867c b042883145a17022 88682d2888c5b992 \ + 42a6456847e4c222 aade602964e6a515 292e466ecfb69157 1fbe80a7833939c5 \ + df7e2d2662ef490c cea935328fda47b8 088d27d744b82f63 76af0af9e843bfc7 \ + c1ecee23dc372faa e064dc6f3e242847 b14f1ef5074d +MAC: 692b5a1a6fbacda8 d91976a6c0ed025c +Test: NotVerify +# +Comment: Test Case 175 +Key: 80b41190041b1687 7252abbbde626a71 afb2d101582c5400 50adb100206e5a01 +IV: 4058573b4083a883 5d860827b95bad08 +Message: \ + 9cae23c92a837674 36dacc0cdd67dd9c eec8574dd03c2846 41b117dac4295260 \ + d7762901f9a0762f 7a423b57aa18f498 e04be5b0880ef6c9 bf0da38336f6e40d \ + 6c0d0f65ad859428 c7cf7f71e77309c8 bfef7847fd6f10bc 7cb340b3a924c015 \ + 31cf7adf540e071c dd868dc5fa978db9 8605008374103ff1 c37fa46da36482d5 \ + 34fdb4880bbba4e9 4132ae3bc93bf44f 40f4d2b50411a6c8 914a3534aeb709e2 \ + b4bd6bc0780fa9ba 4157f50a92ea59d2 de2b87e33d2dabce 77e002 +MAC: 9521040201606f53 05d2635859ebb148 +Test: Verify +# +Comment: Test Case 176 (tamper mac) +Key: 80b41190041b1687 7252abbbde626a71 afb2d101582c5400 50adb100206e5a01 +IV: 4058573b4083a883 5d860827b95bad08 +Message: \ + 9cae23c92a837674 36dacc0cdd67dd9c eec8574dd03c2846 41b117dac4295260 \ + d7762901f9a0762f 7a423b57aa18f498 e04be5b0880ef6c9 bf0da38336f6e40d \ + 6c0d0f65ad859428 c7cf7f71e77309c8 bfef7847fd6f10bc 7cb340b3a924c015 \ + 31cf7adf540e071c dd868dc5fa978db9 8605008374103ff1 c37fa46da36482d5 \ + 34fdb4880bbba4e9 4132ae3bc93bf44f 40f4d2b50411a6c8 914a3534aeb709e2 \ + b4bd6bc0780fa9ba 4157f50a92ea59d2 de2b87e33d2dabce 77e002 +MAC: 9521040201606f53 05d2635959ebb148 +Test: NotVerify +# +Comment: Test Case 177 +Key: e26c8093ab1dff33 75c6fd5b38a15b7a 109ce8075c29e008 a47b6e08d08d4b05 +IV: 01943e90cb2ab35e 7774f54a1b841852 +Message: \ + fc37417f58356a0e 21bcc0b5b70414bd 2386f91239e9e717 792475175d4cc859 \ + 8309d8db3e43e960 ffaa15b7ae2974d1 af6de4e857cbffd0 f074e74dc0afa743 \ + b87f1ff7c20857c2 b26c796096ed3245 5a162eb1e12d81d1 a2681f6217c6a6d0 \ + 45c5c708cd1eca80 8a43e0203012668a 28943c0ac1bddb63 26fac63dc06c0d06 \ + 31d40efef2d87e7d 1b5f9d4b7103d59a 9711a459cf7fbcf5 7a82323aee40401f \ + 144e1e07269c8441 fb218c6d256207bc 73ab15422ad237a4 546adf43aa +MAC: 2fdfb24552162e5d 4e620fe97f923265 +Test: Verify +# +Comment: Test Case 178 (tamper mac) +Key: e26c8093ab1dff33 75c6fd5b38a15b7a 109ce8075c29e008 a47b6e08d08d4b05 +IV: 01943e90cb2ab35e 7774f54a1b841852 +Message: \ + fc37417f58356a0e 21bcc0b5b70414bd 2386f91239e9e717 792475175d4cc859 \ + 8309d8db3e43e960 ffaa15b7ae2974d1 af6de4e857cbffd0 f074e74dc0afa743 \ + b87f1ff7c20857c2 b26c796096ed3245 5a162eb1e12d81d1 a2681f6217c6a6d0 \ + 45c5c708cd1eca80 8a43e0203012668a 28943c0ac1bddb63 26fac63dc06c0d06 \ + 31d40efef2d87e7d 1b5f9d4b7103d59a 9711a459cf7fbcf5 7a82323aee40401f \ + 144e1e07269c8441 fb218c6d256207bc 73ab15422ad237a4 546adf43aa +MAC: 2fdfb24552162e5d 4e620fe97f933265 +Test: NotVerify +# +Comment: Test Case 179 +Key: 4695e163c8d1fe32 adf3fc74dc063f1c fc15c501acbe0603 18504209bca2a104 +IV: b23dadeb92627849 255974f44d11fb82 +Message: \ + 8987fc6fc26d0b59 698563e3d56e0c83 1ea71cae0999107f e2e0c57b1bb966a4 \ + 41631403d01f5d39 a4c01d792e29fc4c d018fad9b10b5894 eb1d0f06d776ab18 \ + d9bf1ba9de78e382 3800fb6629f8b3f9 10add2c2b82b56a3 4865aa1fdb5537b4 \ + 14535ef2cb417404 416f6a6a671d6378 cb353a83609027a9 f5d1c8d12600853a \ + 53e32c1e24a02265 0f8dcf77aa32ef75 6829f9c8b92071ae f13a7f173a05518d \ + e87dab0d1dce722c 5b42a30574927bdc bb74a57494162385 50a29c8aa7ed1790 +MAC: 80610ef55377e0e5 df5f7b8c49413394 +Test: Verify +# +Comment: Test Case 180 (tamper mac) +Key: 4695e163c8d1fe32 adf3fc74dc063f1c fc15c501acbe0603 18504209bca2a104 +IV: b23dadeb92627849 255974f44d11fb82 +Message: \ + 8987fc6fc26d0b59 698563e3d56e0c83 1ea71cae0999107f e2e0c57b1bb966a4 \ + 41631403d01f5d39 a4c01d792e29fc4c d018fad9b10b5894 eb1d0f06d776ab18 \ + d9bf1ba9de78e382 3800fb6629f8b3f9 10add2c2b82b56a3 4865aa1fdb5537b4 \ + 14535ef2cb417404 416f6a6a671d6378 cb353a83609027a9 f5d1c8d12600853a \ + 53e32c1e24a02265 0f8dcf77aa32ef75 6829f9c8b92071ae f13a7f173a05518d \ + e87dab0d1dce722c 5b42a30574927bdc bb74a57494162385 50a29c8aa7ed1790 +MAC: 81610ef55377e0e5 df5f7b8c49413394 +Test: NotVerify +# +Comment: Test Case 181 +Key: 3db751bcb55412c4 90e9ca9bc7bd0b43 a24b640d3020c205 e0f9f2051059a90f +IV: 90c7c6d01e675667 88f58be8d4525ff7 +Message: \ + 6bc2eeb20b8c832e a049bfe5d502cff8 c1054a52d558b025 642c1da5490ab2b5 \ + cca167d82dea06cd 33c5b308c8820089 874bdc5da38c8207 b89fac01aa5fb676 \ + 001d4e2d0755fa3a 1aad43e22f436cb7 8e481431d496388c 36e58de044445644 \ + 61a57169fa6ba314 19e6f7482a63ffb8 ab13ea7faa220be0 0798c04bdc168f3e \ + bb00a7b56c4aca85 31c1cd5b24cd13cf e0fd4e8a20596a27 f12a73ce41020cfc \ + 03b3b26ffd7cf42e 3dc189618e9d306f 9a7ef9bad764e2c8 8e5596cf57a2cc5a \ + 557e +MAC: f8720ee3f47e10f7 e029bc2bd652d28a +Test: Verify +# +Comment: Test Case 182 (tamper mac) +Key: 3db751bcb55412c4 90e9ca9bc7bd0b43 a24b640d3020c205 e0f9f2051059a90f +IV: 90c7c6d01e675667 88f58be8d4525ff7 +Message: \ + 6bc2eeb20b8c832e a049bfe5d502cff8 c1054a52d558b025 642c1da5490ab2b5 \ + cca167d82dea06cd 33c5b308c8820089 874bdc5da38c8207 b89fac01aa5fb676 \ + 001d4e2d0755fa3a 1aad43e22f436cb7 8e481431d496388c 36e58de044445644 \ + 61a57169fa6ba314 19e6f7482a63ffb8 ab13ea7faa220be0 0798c04bdc168f3e \ + bb00a7b56c4aca85 31c1cd5b24cd13cf e0fd4e8a20596a27 f12a73ce41020cfc \ + 03b3b26ffd7cf42e 3dc189618e9d306f 9a7ef9bad764e2c8 8e5596cf57a2cc5a \ + 557e +MAC: f8720fe3f47e10f7 e029bc2bd652d28a +Test: NotVerify +# +Comment: Test Case 183 +Key: 83bfdebc8724c6e0 175efd4bad92efa4 bda1e70fd87f480e f8444e0498481b0c +IV: 15a97f9cea93f20f 504ec6e1af1a93a8 +Message: \ + ace66c233cb1ef40 bc3116b5651b34b2 a11781e42890db9c c582fbf21e6403ca \ + 4a70ee8621ddc7dd 0fdd9274f8c7269a dea77e073759a3fd db9eeffa03f2c44d \ + 62b2d484909b619f 78f41370bb3a0a99 e188a019e24416bd e205b7e5f77c335a \ + 2e07debea23f5d1a 33718aeeab95888c 1d28a5ff6cbbbd4f c07434b8f067121f \ + 6ef0dd102f3b2a63 acb551574ad9e367 0289676e4424bd05 98f2bd8959cfa8c8 \ + bf85d8eec003516c b8a3c3027ca7697e 30d0ed74f4aa798d 9c3616f605bebec4 \ + 4396b30499 +MAC: 71e86575df53f5e1 df18c3fb3fea59ff +Test: Verify +# +Comment: Test Case 184 (tamper mac) +Key: 83bfdebc8724c6e0 175efd4bad92efa4 bda1e70fd87f480e f8444e0498481b0c +IV: 15a97f9cea93f20f 504ec6e1af1a93a8 +Message: \ + ace66c233cb1ef40 bc3116b5651b34b2 a11781e42890db9c c582fbf21e6403ca \ + 4a70ee8621ddc7dd 0fdd9274f8c7269a dea77e073759a3fd db9eeffa03f2c44d \ + 62b2d484909b619f 78f41370bb3a0a99 e188a019e24416bd e205b7e5f77c335a \ + 2e07debea23f5d1a 33718aeeab95888c 1d28a5ff6cbbbd4f c07434b8f067121f \ + 6ef0dd102f3b2a63 acb551574ad9e367 0289676e4424bd05 98f2bd8959cfa8c8 \ + bf85d8eec003516c b8a3c3027ca7697e 30d0ed74f4aa798d 9c3616f605bebec4 \ + 4396b30499 +MAC: 71e86575df52f5e1 df18c3fb3fea59ff +Test: NotVerify +# +Comment: Test Case 185 +Key: d0e79ff374152d0f 302527d9919f163c 3217d10eb40dbf0b 4cb65c064cc2120d +IV: f392842bbce83d53 6711fb0a499aff1e +Message: \ + adfc26fb0b9f21b9 a19aba941a325b1e fb82000e5a76e32f a2973cd746811cf3 \ + 7e42ee89e10f4382 a9fd17c33072e12b f4e1394e581d7dfa b4b9d1fa3bededb9 \ + 2fdb4210eb859394 83aa58b31c39de10 1b175e7334db6de9 953ee3d02bd1895a \ + accb6a9751fd2cd4 a78487c3bd65d3d8 7c314bb10db89aa2 f67d72214efb7bfb \ + c6e69217e3beeb8b 42724e00d722d854 53240560dc9f02d3 1c74f46b6f706636 \ + 56f84d39b739c4f9 ab13f98335d2d788 f6dce9d27beba597 609a02cf0a680560 \ + 615399188c5e11 +MAC: a777504602329395 a3184fb827c8bc6d +Test: Verify +# +Comment: Test Case 186 (tamper mac) +Key: d0e79ff374152d0f 302527d9919f163c 3217d10eb40dbf0b 4cb65c064cc2120d +IV: f392842bbce83d53 6711fb0a499aff1e +Message: \ + adfc26fb0b9f21b9 a19aba941a325b1e fb82000e5a76e32f a2973cd746811cf3 \ + 7e42ee89e10f4382 a9fd17c33072e12b f4e1394e581d7dfa b4b9d1fa3bededb9 \ + 2fdb4210eb859394 83aa58b31c39de10 1b175e7334db6de9 953ee3d02bd1895a \ + accb6a9751fd2cd4 a78487c3bd65d3d8 7c314bb10db89aa2 f67d72214efb7bfb \ + c6e69217e3beeb8b 42724e00d722d854 53240560dc9f02d3 1c74f46b6f706636 \ + 56f84d39b739c4f9 ab13f98335d2d788 f6dce9d27beba597 609a02cf0a680560 \ + 615399188c5e11 +MAC: a777504602329394 a3184fb827c8bc6d +Test: NotVerify +# +Comment: Test Case 187 +Key: e875a0a2390b8752 5244dd6a979be1f1 722e9c0a3ce69206 680bb704a861a102 +IV: 0c9139105e165190 5fb6aa32bdbb73b2 +Message: \ + 58f459c71e50710f a0ab758a561e2811 278fd7eb4a012ada 6d279053b7d54e0f \ + c9a7d6e8f747f797 f36c22498a4a5ab2 d9319d2433c7fea0 ee8ef3a56441b52d \ + e88b15e0d30c77c6 79990f03e469b5bd 9b53e1ce1ae06e09 6e61aed2a363008b \ + ef156bc222e3889b 7c979e6000541e9b a7ff69c1dfd7ca4e 397920dcdc2067cb \ + 36d38d58b615f332 ac9193ade5b1488c b0b24e908918dec2 91fe9e6e1f063955 \ + d9c7ad8fdca0c189 31543617057ea3b6 30f146ba0a247c9b 221b0941214396fa \ + 0a4389e6e34a6f15 9f +MAC: 7f772ea508074ac6 964e304fc389fd61 +Test: Verify +# +Comment: Test Case 188 (tamper mac) +Key: e875a0a2390b8752 5244dd6a979be1f1 722e9c0a3ce69206 680bb704a861a102 +IV: 0c9139105e165190 5fb6aa32bdbb73b2 +Message: \ + 58f459c71e50710f a0ab758a561e2811 278fd7eb4a012ada 6d279053b7d54e0f \ + c9a7d6e8f747f797 f36c22498a4a5ab2 d9319d2433c7fea0 ee8ef3a56441b52d \ + e88b15e0d30c77c6 79990f03e469b5bd 9b53e1ce1ae06e09 6e61aed2a363008b \ + ef156bc222e3889b 7c979e6000541e9b a7ff69c1dfd7ca4e 397920dcdc2067cb \ + 36d38d58b615f332 ac9193ade5b1488c b0b24e908918dec2 91fe9e6e1f063955 \ + d9c7ad8fdca0c189 31543617057ea3b6 30f146ba0a247c9b 221b0941214396fa \ + 0a4389e6e34a6f15 9f +MAC: 7f772ea508074ac6 964f304fc389fd61 +Test: NotVerify +# +Comment: Test Case 189 +Key: 3ae2a69349cb8718 0e8213be3646b242 9747bd030c3bee06 e027490f00291f0c +IV: b98bfed22b575d07 1154bc0828444fc6 +Message: \ + 4946e201596910bc 0b44b0f294455ccb a2de3594276ed303 db7c4aea492a9d92 \ + 707f94c9e8a485f4 e836e67c7b42471d 207cb248eb854bc6 0296b14bc04ede30 \ + cd72f9b5167fa9fe b58f7a30d1c14df2 3dff3a288585ef87 1ba0d2dbeeb00bbb \ + 22057038841a3639 a9b0697b71b66daf b6a7d73b2cc6c248 66942354452f0f67 \ + 3480a0b89ad6f143 875abef8102ba7c6 d27f01ff45c347ac 586a009d991004cd \ + 90a4852a7b766d02 d02cfae157a2a72a 21a929666c7012c4 da136174236641b3 \ + 0ac7dd853d4a870e 7682efce2496 +MAC: b5a2541ac6f11a9f dc130102d0d3273d +Test: Verify +# +Comment: Test Case 190 (tamper mac) +Key: 3ae2a69349cb8718 0e8213be3646b242 9747bd030c3bee06 e027490f00291f0c +IV: b98bfed22b575d07 1154bc0828444fc6 +Message: \ + 4946e201596910bc 0b44b0f294455ccb a2de3594276ed303 db7c4aea492a9d92 \ + 707f94c9e8a485f4 e836e67c7b42471d 207cb248eb854bc6 0296b14bc04ede30 \ + cd72f9b5167fa9fe b58f7a30d1c14df2 3dff3a288585ef87 1ba0d2dbeeb00bbb \ + 22057038841a3639 a9b0697b71b66daf b6a7d73b2cc6c248 66942354452f0f67 \ + 3480a0b89ad6f143 875abef8102ba7c6 d27f01ff45c347ac 586a009d991004cd \ + 90a4852a7b766d02 d02cfae157a2a72a 21a929666c7012c4 da136174236641b3 \ + 0ac7dd853d4a870e 7682efce2496 +MAC: b5a2541ac6f11a9f dc130102d0d3263d +Test: NotVerify +# +Comment: Test Case 191 +Key: c830bddf4e049173 41d900167b6edf4b dc54290d20c83a06 7c92260d30202409 +IV: 89eb99869bbcc095 993fc9095efb7f2b +Message: \ + 315c5b76ae1a3389 b92b9b17253809d6 c3ef573db45e7a46 d651ebc7ca1fa7fb \ + 7b0271291da4b3d6 d04eedf587f6cb4a e522879a8101e057 53cc1e1debc51866 \ + c88a8fe52e42bbfe 91a8f4189fbf6284 e2ea1e63ebffba3e cbd95bb69e741c66 \ + feab4b2cee062b7f af1f974edef9d2c0 e3f123cff0de0dbb b7697155dd8dbcdb \ + 380707260e32a5bd 513c0b3036ddf019 ce14e8bef2f679a9 5feafe3c77ba17b0 \ + c21ed6d0517c8da2 b898d2ee75c30844 d7f002c9e67c7245 667081de2b988eed \ + b764bd08e04aaa99 e27d8757408f9b17 +MAC: b0a5bf92c57eb8e7 4955aee6486fe123 +Test: Verify +# +Comment: Test Case 192 (tamper mac) +Key: c830bddf4e049173 41d900167b6edf4b dc54290d20c83a06 7c92260d30202409 +IV: 89eb99869bbcc095 993fc9095efb7f2b +Message: \ + 315c5b76ae1a3389 b92b9b17253809d6 c3ef573db45e7a46 d651ebc7ca1fa7fb \ + 7b0271291da4b3d6 d04eedf587f6cb4a e522879a8101e057 53cc1e1debc51866 \ + c88a8fe52e42bbfe 91a8f4189fbf6284 e2ea1e63ebffba3e cbd95bb69e741c66 \ + feab4b2cee062b7f af1f974edef9d2c0 e3f123cff0de0dbb b7697155dd8dbcdb \ + 380707260e32a5bd 513c0b3036ddf019 ce14e8bef2f679a9 5feafe3c77ba17b0 \ + c21ed6d0517c8da2 b898d2ee75c30844 d7f002c9e67c7245 667081de2b988eed \ + b764bd08e04aaa99 e27d8757408f9b17 +MAC: b1a5bf92c57eb8e7 4955aee6486fe123 +Test: NotVerify +# +Comment: Test Case 193 +Key: 0b62f756c47b9cc7 76d0236f0fa5fa33 7e7f0d05d891dd03 74628e097caf2507 +IV: 40db3db233bc9fa9 1e09a6d977939f69 +Message: \ + 94b7df4feba7b758 655cb1564ce97996 6fc3a617dae77294 0a36337d03034297 \ + ba21e7a6c89efe2d faaf834698fcdc07 bf821f9969912d73 c861f0cb6432631f \ + 534ac51be8c348e3 72cb290ac7061186 88301ff2c24d658a ae56551288b831dc \ + 02f6f7ebb940ce2b 0bf735d3fd475986 77797839c6ddc374 331986bcd1b898d4 \ + ae8fbf68cf8d93db 84c9ae8210070887 8080c1465d84ba91 9d414d6ff9e543a7 \ + 74020f448fa31f13 6ccd957cd49d0355 1dc49b7b49560ce6 975955903e9837b2 \ + 9a47f629ea153d56 e2d2d2b770d50c8d 9aa708e3fd +MAC: f8a4b363b31a4a74 cb0fae4cedceb55b +Test: Verify +# +Comment: Test Case 194 (tamper mac) +Key: 0b62f756c47b9cc7 76d0236f0fa5fa33 7e7f0d05d891dd03 74628e097caf2507 +IV: 40db3db233bc9fa9 1e09a6d977939f69 +Message: \ + 94b7df4feba7b758 655cb1564ce97996 6fc3a617dae77294 0a36337d03034297 \ + ba21e7a6c89efe2d faaf834698fcdc07 bf821f9969912d73 c861f0cb6432631f \ + 534ac51be8c348e3 72cb290ac7061186 88301ff2c24d658a ae56551288b831dc \ + 02f6f7ebb940ce2b 0bf735d3fd475986 77797839c6ddc374 331986bcd1b898d4 \ + ae8fbf68cf8d93db 84c9ae8210070887 8080c1465d84ba91 9d414d6ff9e543a7 \ + 74020f448fa31f13 6ccd957cd49d0355 1dc49b7b49560ce6 975955903e9837b2 \ + 9a47f629ea153d56 e2d2d2b770d50c8d 9aa708e3fd +MAC: f8a4b363b31b4a74 cb0fae4cedceb55b +Test: NotVerify +# +Comment: Test Case 195 +Key: 3cef2f819022a833 f2346917d656bc39 cd3a630144642e09 58edee049051c10f +IV: bbcd7e1ca01546fe 1a4931c1ec6f81c5 +Message: \ + 00ea08922b72ab0f 6a1ebc4b483921aa c6d6930b79254755 36852a9a40124d40 \ + fd56d328c87e3732 9cf37ee52c9f8ff2 7522feef4845447e ca6e180b81664b7e \ + bc1ea6849dddb739 d0351efdd4adef4a d0ed3918327d96fd ebaf086c1553ead1 \ + 7290550f6d0c483e 41673b16142a60e4 1899fc4a16934701 424f6e57a3582815 \ + e97d24568a6c94cb d3cfe1e8fa41cc12 dac95cf05ca4f29e f360f596b81daba1 \ + 9acff8243c8cf00f 5cd1f75613c468ed 8dc4dee968d0875c 307cf2e8999e8a33 \ + 6d8258a90e48b96a 19b0c02c74281a01 edf8ea55c871b1 +MAC: 7cecffa461af2c09 9c13a82e6cb6228d +Test: Verify +# +Comment: Test Case 196 (tamper mac) +Key: 3cef2f819022a833 f2346917d656bc39 cd3a630144642e09 58edee049051c10f +IV: bbcd7e1ca01546fe 1a4931c1ec6f81c5 +Message: \ + 00ea08922b72ab0f 6a1ebc4b483921aa c6d6930b79254755 36852a9a40124d40 \ + fd56d328c87e3732 9cf37ee52c9f8ff2 7522feef4845447e ca6e180b81664b7e \ + bc1ea6849dddb739 d0351efdd4adef4a d0ed3918327d96fd ebaf086c1553ead1 \ + 7290550f6d0c483e 41673b16142a60e4 1899fc4a16934701 424f6e57a3582815 \ + e97d24568a6c94cb d3cfe1e8fa41cc12 dac95cf05ca4f29e f360f596b81daba1 \ + 9acff8243c8cf00f 5cd1f75613c468ed 8dc4dee968d0875c 307cf2e8999e8a33 \ + 6d8258a90e48b96a 19b0c02c74281a01 edf8ea55c871b1 +MAC: 7cecffa461af2c08 9c13a82e6cb6228d +Test: NotVerify +# +Comment: Test Case 197 +Key: 53b7217d0d31b482 9ad43c9deaa837ff 4d78600f4839be07 e4a56609d806b30b +IV: 47ceed1a08cd1af4 e7c81ac71cf2d7a6 +Message: \ + bb1ee063882119de 85b9d4f1d958c371 b215c5d95a874e50 a8b31b8569a9a125 \ + c782884fa3a12d29 5b021a345adda50d f36ae64df1349d9a e7b91f5162c07629 \ + 42fe78e6a0a50ffb a7292f0207d40ffa 3ef5472f29e5c911 9ee86200a9d829eb \ + d6a1d17646e071ee 0aa0f01174ff0bb2 f452e21d37ab2ed5 9490d53d68fe283f \ + 9ffab5e6da27d4e4 c7c4f53cc300eeb7 53d0d48a7c036010 93354dfc34753bd3 \ + 6ff0b94a178d2edf 51241b142409cb77 daa00256a3626636 97b332cb286d9f98 \ + 5e58e275e6105437 346f4c597917d053 b7d2a95a340f91cc c2c397ea +MAC: b800004b6f1f2618 7c7b7915709c381f +Test: Verify +# +Comment: Test Case 198 (tamper mac) +Key: 53b7217d0d31b482 9ad43c9deaa837ff 4d78600f4839be07 e4a56609d806b30b +IV: 47ceed1a08cd1af4 e7c81ac71cf2d7a6 +Message: \ + bb1ee063882119de 85b9d4f1d958c371 b215c5d95a874e50 a8b31b8569a9a125 \ + c782884fa3a12d29 5b021a345adda50d f36ae64df1349d9a e7b91f5162c07629 \ + 42fe78e6a0a50ffb a7292f0207d40ffa 3ef5472f29e5c911 9ee86200a9d829eb \ + d6a1d17646e071ee 0aa0f01174ff0bb2 f452e21d37ab2ed5 9490d53d68fe283f \ + 9ffab5e6da27d4e4 c7c4f53cc300eeb7 53d0d48a7c036010 93354dfc34753bd3 \ + 6ff0b94a178d2edf 51241b142409cb77 daa00256a3626636 97b332cb286d9f98 \ + 5e58e275e6105437 346f4c597917d053 b7d2a95a340f91cc c2c397ea +MAC: b800004b6f1f2618 7c7b7915719c381f +Test: NotVerify +# +Comment: Test Case 199 +Key: f1eadd1df2127c2c e28f669d37bc8f1e ae29060d542d3004 e83a2f067027f104 +IV: 6ad9ed1d38e8d796 eb7eb5796bba4bfc +Message: \ + b05538d17dd950c7 ab6b3b66f22074a5 9cbd7737e0440e25 4c85b42e460327f6 \ + 5860c7d639189de4 83d84b76f8bf1b94 7c92cc5dd7da8223 5f3652a539799b92 \ + d96268137a05f7fe dd4274d5028f6a7e 2236dbf9105d1c6f 936e14cde8af5fc1 \ + 11c7d48ccccc8aa9 0efe7e108de88faf 1e6aa82ec8c59d5b 33b1281b6087dd72 \ + 4eb1fe1a7d88c38c 86429c132a2bc349 966b775e3015b964 c6e27f27695c99b8 \ + 0e97d28b1f9617a5 d8b4b802df7b4b75 e7c3d317d88d7b9e 6ffbc5d8575e9065 \ + f563f114f908b9d1 bc72d39ced1f11d4 e2e5ecba726758e1 621eb9ba7c4a1f72 +MAC: 08ab90d99d57050e 4ba2bb5ab7726dbb +Test: Verify +# +Comment: Test Case 200 (tamper mac) +Key: f1eadd1df2127c2c e28f669d37bc8f1e ae29060d542d3004 e83a2f067027f104 +IV: 6ad9ed1d38e8d796 eb7eb5796bba4bfc +Message: \ + b05538d17dd950c7 ab6b3b66f22074a5 9cbd7737e0440e25 4c85b42e460327f6 \ + 5860c7d639189de4 83d84b76f8bf1b94 7c92cc5dd7da8223 5f3652a539799b92 \ + d96268137a05f7fe dd4274d5028f6a7e 2236dbf9105d1c6f 936e14cde8af5fc1 \ + 11c7d48ccccc8aa9 0efe7e108de88faf 1e6aa82ec8c59d5b 33b1281b6087dd72 \ + 4eb1fe1a7d88c38c 86429c132a2bc349 966b775e3015b964 c6e27f27695c99b8 \ + 0e97d28b1f9617a5 d8b4b802df7b4b75 e7c3d317d88d7b9e 6ffbc5d8575e9065 \ + f563f114f908b9d1 bc72d39ced1f11d4 e2e5ecba726758e1 621eb9ba7c4a1f72 +MAC: 09ab90d99d57050e 4ba2bb5ab7726dbb +Test: NotVerify +# +Comment: Test Case 201 +Key: c169d86c30f377f8 80a3134b28d01dca c32dbe0ad459a904 105a250bf865110d +IV: 303ec2b70970f72f 766a10199e547d1a +Message: \ + 0ff494209698c697 45d96cc1b93c3537 320179bf1976ca80 4d76d7d826af2935 \ + a3bd5539551bd09b f53c5cae7991e5ab 935f6aacd5342c22 ab04fbd1b3240656 \ + e15b8f367760d16c 9c2e1a15bf00c052 5f2aff345f2b560a 2f51dbe275e13856 \ + 3cc88db3285e1fc4 8c3ada4c3a9a9e99 c59dcd24c9232ef8 7509dbeaea134126 \ + dbceda032cf9c8b9 33a2056d3ca30601 41d3250af753026c 5cdd5646f1976dcc \ + 6547d09240984b74 3a50e176f3e87834 bb9d3eb2f1411e4d 1e75940f0c01dc72 \ + 48ac0488444ffc7e 9fdef492c66cc781 0a0534fb46524865 c7dc74d4dd504625 \ + fc4aae40 +MAC: 56493ff759ff241b 55e7fc93f51290b2 +Test: Verify +# +Comment: Test Case 202 (tamper mac) +Key: c169d86c30f377f8 80a3134b28d01dca c32dbe0ad459a904 105a250bf865110d +IV: 303ec2b70970f72f 766a10199e547d1a +Message: \ + 0ff494209698c697 45d96cc1b93c3537 320179bf1976ca80 4d76d7d826af2935 \ + a3bd5539551bd09b f53c5cae7991e5ab 935f6aacd5342c22 ab04fbd1b3240656 \ + e15b8f367760d16c 9c2e1a15bf00c052 5f2aff345f2b560a 2f51dbe275e13856 \ + 3cc88db3285e1fc4 8c3ada4c3a9a9e99 c59dcd24c9232ef8 7509dbeaea134126 \ + dbceda032cf9c8b9 33a2056d3ca30601 41d3250af753026c 5cdd5646f1976dcc \ + 6547d09240984b74 3a50e176f3e87834 bb9d3eb2f1411e4d 1e75940f0c01dc72 \ + 48ac0488444ffc7e 9fdef492c66cc781 0a0534fb46524865 c7dc74d4dd504625 \ + fc4aae40 +MAC: 56493ff758ff241b 55e7fc93f51290b2 +Test: NotVerify +# +Comment: Test Case 203 +Key: 56d3940049805670 f45f39cbc2f5dd87 9074f406a436f600 acd7410094be0b0b +IV: 601e133e8bfbf564 6a231fcdb4fde790 +Message: \ + d789b5c781bcd0e9 88e2154a9e092ab0 1572e155d78075f7 a3285cc1db57eab3 \ + e09f7a625c4a4be4 2c602ecb69587b7e ca5dd3a2dd489980 70f5424c4c2cff2d \ + cc798f28c3da0cf0 3b3abba49236235c 93f6fe703f97f1af 8c33fbd95ffa062b \ + 739553376f5f27aa 99e24f2b187288ac 68861ca71e0d57aa 405283a04d89cbc0 \ + 1e1ff78e7e1e3818 00874319f9cbc562 52e10970ef601a2f b39ecf00279bc046 \ + bab8d438d60c50d7 9494f08d5fb5efb1 96f92185593cb50c da840c011fcd47d9 \ + 851b125b286232bc f6224956d739076e 3229f38b65a8983f 2da4404c718826f6 \ + a33852cb9a848791 a7 +MAC: b14467b9a7e70c4e f07a642ef5d9fbe5 +Test: Verify +# +Comment: Test Case 204 (tamper mac) +Key: 56d3940049805670 f45f39cbc2f5dd87 9074f406a436f600 acd7410094be0b0b +IV: 601e133e8bfbf564 6a231fcdb4fde790 +Message: \ + d789b5c781bcd0e9 88e2154a9e092ab0 1572e155d78075f7 a3285cc1db57eab3 \ + e09f7a625c4a4be4 2c602ecb69587b7e ca5dd3a2dd489980 70f5424c4c2cff2d \ + cc798f28c3da0cf0 3b3abba49236235c 93f6fe703f97f1af 8c33fbd95ffa062b \ + 739553376f5f27aa 99e24f2b187288ac 68861ca71e0d57aa 405283a04d89cbc0 \ + 1e1ff78e7e1e3818 00874319f9cbc562 52e10970ef601a2f b39ecf00279bc046 \ + bab8d438d60c50d7 9494f08d5fb5efb1 96f92185593cb50c da840c011fcd47d9 \ + 851b125b286232bc f6224956d739076e 3229f38b65a8983f 2da4404c718826f6 \ + a33852cb9a848791 a7 +MAC: b14467b9a7e70c4e f07b642ef5d9fbe5 +Test: NotVerify +# +Comment: Test Case 205 +Key: e4f764cf61462951 1a079d46819ba124 1b913f0600b7b70c 28e7ec06c8dec10e +IV: afb0acf36180ab2b 2237ac29c7d00fdf +Message: \ + 35b41c723c5c4114 222c96643d7e6dff db7383c4889687d1 cef23a5030cc9765 \ + 80b3d8bc0f19d031 45679682e50381c0 770585ff9b0cd169 fe0bba2ed7519457 \ + 056c131485e446cb 4bdc4d30dfcff156 d476566f8227d980 3293af09e44360e9 \ + af73fe345744ffa2 204dd3ff1cc456f0 3aac5fbcd3383c05 cbeb0eb02e6e99dd \ + e1971239db11dbfb 5eaefb7a72516aac fdca68d002a5d5ce 90e37ebf51179c32 \ + afae6b8ac047861e f5819968d20314cf cd7d9fd022749eb2 571c71a8330edae2 \ + bc466d7c8df39b82 7434ea4637ff1505 7cb4d59e2873507f 8fc227c2d001a58c \ + 471209d405a45779 d841bf +MAC: f0446fb318c6a45d 53987f176f3ef1b7 +Test: Verify +# +Comment: Test Case 206 (tamper mac) +Key: e4f764cf61462951 1a079d46819ba124 1b913f0600b7b70c 28e7ec06c8dec10e +IV: afb0acf36180ab2b 2237ac29c7d00fdf +Message: \ + 35b41c723c5c4114 222c96643d7e6dff db7383c4889687d1 cef23a5030cc9765 \ + 80b3d8bc0f19d031 45679682e50381c0 770585ff9b0cd169 fe0bba2ed7519457 \ + 056c131485e446cb 4bdc4d30dfcff156 d476566f8227d980 3293af09e44360e9 \ + af73fe345744ffa2 204dd3ff1cc456f0 3aac5fbcd3383c05 cbeb0eb02e6e99dd \ + e1971239db11dbfb 5eaefb7a72516aac fdca68d002a5d5ce 90e37ebf51179c32 \ + afae6b8ac047861e f5819968d20314cf cd7d9fd022749eb2 571c71a8330edae2 \ + bc466d7c8df39b82 7434ea4637ff1505 7cb4d59e2873507f 8fc227c2d001a58c \ + 471209d405a45779 d841bf +MAC: f0446fb318c6a45d 53987f166f3ef1b7 +Test: NotVerify +# +Comment: Test Case 207 +Key: 5eeebc9c15886514 636d308f6052a66d fefaf208a89c0d03 ec81cc0d64437a05 +IV: 2ceb1489dbf0b0ac 358d0ed260d16408 +Message: \ + b790b6f1b0f784ee 040f894a47f6c99b 40b28a773cd3b89a 97517f73b80d5870 \ + 9d0e614e06e53c0a f5c5543cbb1ed8fc d062730d352ca7cc 7d2740353498a5d2 \ + a60720acec5cb6e1 220b1edd29f6d9f9 584d068d79ae5af6 d59a2b0932d1dbd8 \ + d8fb85c4583ba67a 46c4576fba316912 7e6f9ff71df9edf2 9318fcc5e9d79ec1 \ + d323862b5e2ca5a5 f0fc14aa2d7dbcab ed5ba20a558ffde8 a8f9ae91d04c53a3 \ + 6fd9cecd057372f5 70879f9d045b49f1 b6ebfc0b7bf9f423 f2a2b4c2ee07665d \ + e0342ae5a89dda18 2479b528d4fe1a8b ea1696650f8a8801 2c3cc31a44297724 \ + 5ea20a063fe41e63 5ed38b32d2a5 +MAC: 6cac88652be18a35 7c9d3f0d6ed507a2 +Test: Verify +# +Comment: Test Case 208 (tamper mac) +Key: 5eeebc9c15886514 636d308f6052a66d fefaf208a89c0d03 ec81cc0d64437a05 +IV: 2ceb1489dbf0b0ac 358d0ed260d16408 +Message: \ + b790b6f1b0f784ee 040f894a47f6c99b 40b28a773cd3b89a 97517f73b80d5870 \ + 9d0e614e06e53c0a f5c5543cbb1ed8fc d062730d352ca7cc 7d2740353498a5d2 \ + a60720acec5cb6e1 220b1edd29f6d9f9 584d068d79ae5af6 d59a2b0932d1dbd8 \ + d8fb85c4583ba67a 46c4576fba316912 7e6f9ff71df9edf2 9318fcc5e9d79ec1 \ + d323862b5e2ca5a5 f0fc14aa2d7dbcab ed5ba20a558ffde8 a8f9ae91d04c53a3 \ + 6fd9cecd057372f5 70879f9d045b49f1 b6ebfc0b7bf9f423 f2a2b4c2ee07665d \ + e0342ae5a89dda18 2479b528d4fe1a8b ea1696650f8a8801 2c3cc31a44297724 \ + 5ea20a063fe41e63 5ed38b32d2a5 +MAC: 6cac88652be18a35 7c9d3f0d6ed506a2 +Test: NotVerify +# +Comment: Test Case 209 +Key: 6b3e2e3df9e4fb0f 532d1fa35744638a 4ca5ad04e074650c 8c84b8023ce4c308 +IV: 90bc8eb26e27f84f f3d13b94d4bd2de4 +Message: \ + 3eaa8116aee77bca d99a46d43db2c985 bf7f08a0746986a2 e1152a8b98bd52d7 \ + 67d4ed15bb68df94 03256840d732c596 b1cd372536bdc818 d2f2a36baff64216 \ + ca2f2b85970a199a 2f82da06b49f9d65 6dd48ba39153bb64 455fcff555110b1f \ + 4037a4d741bd7271 3f4c77f3ec145959 e8e4fc7a37b8de7c 17ad716cbe7d8bfe \ + b42fd5f5ec47662c 94de1f80f278d9db 5cd555938d3310a4 e081109efe9b9cb2 \ + ca71a8b7b90ee34d ec02cddf7ba6bad7 7b0f6b09427bad22 fcbec0fb595cad24 \ + cd55db8664bed350 c0a02f3b46e913c2 f87ecb3af9785cf5 361cf090789eb446 \ + f38fcc574da0a80d 40d74987c15c49b9 da14 +MAC: 7e11e12e19aedffb f9d64c2154834008 +Test: Verify +# +Comment: Test Case 210 (tamper mac) +Key: 6b3e2e3df9e4fb0f 532d1fa35744638a 4ca5ad04e074650c 8c84b8023ce4c308 +IV: 90bc8eb26e27f84f f3d13b94d4bd2de4 +Message: \ + 3eaa8116aee77bca d99a46d43db2c985 bf7f08a0746986a2 e1152a8b98bd52d7 \ + 67d4ed15bb68df94 03256840d732c596 b1cd372536bdc818 d2f2a36baff64216 \ + ca2f2b85970a199a 2f82da06b49f9d65 6dd48ba39153bb64 455fcff555110b1f \ + 4037a4d741bd7271 3f4c77f3ec145959 e8e4fc7a37b8de7c 17ad716cbe7d8bfe \ + b42fd5f5ec47662c 94de1f80f278d9db 5cd555938d3310a4 e081109efe9b9cb2 \ + ca71a8b7b90ee34d ec02cddf7ba6bad7 7b0f6b09427bad22 fcbec0fb595cad24 \ + cd55db8664bed350 c0a02f3b46e913c2 f87ecb3af9785cf5 361cf090789eb446 \ + f38fcc574da0a80d 40d74987c15c49b9 da14 +MAC: 7e11e02e19aedffb f9d64c2154834008 +Test: NotVerify +# +Comment: Test Case 211 +Key: 554a179cd38fca29 6d81eaf69b099c11 81a8c80368ac2202 ecc16a0e28631900 +IV: 573d6ae014775c53 b45526ebada925f1 +Message: \ + 087ba6a81d08a4aa c8040faf926a3e86 93b526ba4d4f7e44 7ba1025a714a8979 \ + c62f21e338c58e00 ca9daf5c08eee29b a30855f158d335d3 74372de682b65f48 \ + e5812b1d46b91e10 57cd6c5fbb4ffa5f 574f50af22858296 bcaf7c3e65dc864b \ + 5db268a36b86b4c2 5420210f6f1b6ec7 6abe768c43f92300 a89f3e0e7bc559d8 \ + 77c17ce24830a59c 50c6abc0e21a874c d8fdd91cf6fc1c9f 9b5aad171f06ef96 \ + c76b790f9b1eabec e457acc671331349 30ec6527e881c683 dc739afb798a9240 \ + f50b509129fb7d0d 5229d4c35ce70d8c d372b3bbf4793ed0 ecd9cb65635da658 \ + 68f6e991f1669f44 8f7307eb5a14782d 872be87b +MAC: 47a446220010b1ac 94d1bb0001400838 +Test: Verify +# +Comment: Test Case 212 (tamper mac) +Key: 554a179cd38fca29 6d81eaf69b099c11 81a8c80368ac2202 ecc16a0e28631900 +IV: 573d6ae014775c53 b45526ebada925f1 +Message: \ + 087ba6a81d08a4aa c8040faf926a3e86 93b526ba4d4f7e44 7ba1025a714a8979 \ + c62f21e338c58e00 ca9daf5c08eee29b a30855f158d335d3 74372de682b65f48 \ + e5812b1d46b91e10 57cd6c5fbb4ffa5f 574f50af22858296 bcaf7c3e65dc864b \ + 5db268a36b86b4c2 5420210f6f1b6ec7 6abe768c43f92300 a89f3e0e7bc559d8 \ + 77c17ce24830a59c 50c6abc0e21a874c d8fdd91cf6fc1c9f 9b5aad171f06ef96 \ + c76b790f9b1eabec e457acc671331349 30ec6527e881c683 dc739afb798a9240 \ + f50b509129fb7d0d 5229d4c35ce70d8c d372b3bbf4793ed0 ecd9cb65635da658 \ + 68f6e991f1669f44 8f7307eb5a14782d 872be87b +MAC: 47a446220110b1ac 94d1bb0001400838 +Test: NotVerify +# +Comment: Test Case 213 +Key: e2be71a7e30aee4a d357013bf542f8d6 745d0303f032fa0c 506d8007c8c41b0e +IV: 020f15e8468a8190 a184b7c2c42c62ac +Message: \ + 77b82451f74724a5 72b09a998a936dca 421b564d6638e278 bfa987c4f93d9e71 \ + f5c3c2ec0ae7927c 972c1521c082ec02 9d4250037a327b3a dc03fed5409c4635 \ + 5f092169f0b3e587 e0faa9a07d95a21a d7f21e5125998b01 9c89d6dc261d1185 \ + 2633ef16e6d49dc6 cf46664cdb0966b2 fb8404201e8f21ba 19f8973f15a8c43b \ + dbb351c288ee8857 35efa310f809c3f3 8ec714ac5635666f 2dfdae42a6737d81 \ + 26ce43aebdcc05f2 bba802b3b2c5a640 8cbaece3f052521d 500160f674dd779a \ + acbb4969874e5b42 f75df5a9239be9af 56d5924627e56377 e6c36d5aa1e5f44d \ + a03db6278c116983 6e5e2c91f915414f ead39511b8f9 +MAC: 94424f84ed62c6b4 46bff6cc09d3bda0 +Test: Verify +# +Comment: Test Case 214 (tamper mac) +Key: e2be71a7e30aee4a d357013bf542f8d6 745d0303f032fa0c 506d8007c8c41b0e +IV: 020f15e8468a8190 a184b7c2c42c62ac +Message: \ + 77b82451f74724a5 72b09a998a936dca 421b564d6638e278 bfa987c4f93d9e71 \ + f5c3c2ec0ae7927c 972c1521c082ec02 9d4250037a327b3a dc03fed5409c4635 \ + 5f092169f0b3e587 e0faa9a07d95a21a d7f21e5125998b01 9c89d6dc261d1185 \ + 2633ef16e6d49dc6 cf46664cdb0966b2 fb8404201e8f21ba 19f8973f15a8c43b \ + dbb351c288ee8857 35efa310f809c3f3 8ec714ac5635666f 2dfdae42a6737d81 \ + 26ce43aebdcc05f2 bba802b3b2c5a640 8cbaece3f052521d 500160f674dd779a \ + acbb4969874e5b42 f75df5a9239be9af 56d5924627e56377 e6c36d5aa1e5f44d \ + a03db6278c116983 6e5e2c91f915414f ead39511b8f9 +MAC: 94424f84ed62c7b4 46bff6cc09d3bda0 +Test: NotVerify +# +Comment: Test Case 215 +Key: db85717ba4756901 1546d3469a910135 8dfb62006821f702 98f4f309383ad106 +IV: ad2502ed5acf3dc7 c5112bbd2cc89199 +Message: \ + c57512dfe85a8a32 4160ff6401df1e61 aa85d29e54bd1f17 21a8b732129434d7 \ + 0946b7f1a14124e2 a12346a2036403ad e9d64c3d936b55b5 140ce726a01bfea9 \ + 61b59b02f6bfe497 e22b3ae58f3d9379 13dfb6a74a0b5c5e 184385b85e8362bf \ + 38fdc22ebca6c59e d1ff84613d17da50 f690f7409c539fb4 96246cf4a7ceb4df \ + cb760d871cd226ee d2aa4f0fc1295fb7 b957f755aa960941 ba76356144e94010 \ + 5f4d977c20bd6af2 67b90128e260df9b b7d7f1626dfaa328 70d889b5c2cac521 \ + 175c9d371a072981 c02aaaa28b893e42 602fa4ce2947f69a 207f4fe249140361 \ + 70a1988aa8c20c69 ecb60b773f49baa0 785e6ea2a6643cc6 e38b +MAC: 0fe26de6e72dd1a6 38cfdef233291ee4 +Test: Verify +# +Comment: Test Case 216 (tamper mac) +Key: db85717ba4756901 1546d3469a910135 8dfb62006821f702 98f4f309383ad106 +IV: ad2502ed5acf3dc7 c5112bbd2cc89199 +Message: \ + c57512dfe85a8a32 4160ff6401df1e61 aa85d29e54bd1f17 21a8b732129434d7 \ + 0946b7f1a14124e2 a12346a2036403ad e9d64c3d936b55b5 140ce726a01bfea9 \ + 61b59b02f6bfe497 e22b3ae58f3d9379 13dfb6a74a0b5c5e 184385b85e8362bf \ + 38fdc22ebca6c59e d1ff84613d17da50 f690f7409c539fb4 96246cf4a7ceb4df \ + cb760d871cd226ee d2aa4f0fc1295fb7 b957f755aa960941 ba76356144e94010 \ + 5f4d977c20bd6af2 67b90128e260df9b b7d7f1626dfaa328 70d889b5c2cac521 \ + 175c9d371a072981 c02aaaa28b893e42 602fa4ce2947f69a 207f4fe249140361 \ + 70a1988aa8c20c69 ecb60b773f49baa0 785e6ea2a6643cc6 e38b +MAC: 0fe26de6e72dd1a6 38cfdff233291ee4 +Test: NotVerify diff --git a/vendor/cryptopp/vendor_cryptopp/TestVectors/shake.txt b/vendor/cryptopp/vendor_cryptopp/TestVectors/shake.txt new file mode 100644 index 00000000..bbb12e69 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/TestVectors/shake.txt @@ -0,0 +1,1206 @@ +AlgorithmType: MessageDigest +Name: SHAKE-128 +Source: Botan 2.10 library +# +Message: +Digest: 7F9C2BA4E88F827D616045507605853ED73B8093F6EFBC88EB1A6EACFA66EF26 +Test: Verify +# +Message: 95 +Digest: 46EEAE5D2FA8DFA47150B512FD2CCAC19B457677D2065AA48EADFD65ED2B8683 +Test: Verify +# +Message: 738B +Digest: C292A144A90A4854336AA5D6EBAD585874DE70D1497EF19A66FFFC9098C8CFFB +Test: Verify +# +Message: 322B83 +Digest: 3E89371486A0A556CF119862509EA8A2350E71D33359502CE31C84BC4E833E5B +Test: Verify +# +Message: 3573D4FF +Digest: 0E1BFADB34853AF01B03054897CB5595139709A8857218FA8A6EF9AA38BE9D36 +Test: Verify +# +Message: D18DEA5BEF +Digest: F41CCE27C6EA4C386D3C52807249439A56F0BCADA97DE3D59542EBF8A174AFDF +Test: Verify +# +Message: 5ED0E4DFF166 +Digest: 04B77AEAA097E27BF2613544BD6902A2CF78659080343C60BB6A8E961221C974 +Test: Verify +# +Message: 1A0915BFDF92F1 +Digest: ACC417F71D35C1F04FE0A20F69587976D340DBE41DBA94455E4FF020A3423531 +Test: Verify +# +Message: 06F0D0BD88C711C6 +Digest: 06F38E4FF62943C50CBADBA11B299314F25BFFE238A14E2762AF87032BA09F80 +Test: Verify +# +Message: 800421F985A57B6657 +Digest: D1F6922311BF595CC1531D2C37945BDA1BB3D5577F605873F131F149547B0593 +Test: Verify +# +Message: A6EA5D0707F57E310538 +Digest: E1AAED430B80C5CA983B61EE919BB34ADC51016AE035AE913D619076F3C40C62 +Test: Verify +# +Message: 7412F4C57073EDAAED4605 +Digest: E45AC8C85F4553B5DE9774137177ABEBC87E55BBF995C8D90E3CBCF3E8E1A8E2 +Test: Verify +# +Message: 74082D68058EA87E08DB192C +Digest: 02B2236A9D09B9A7F70162026FF524BCB3ABC275DA4F8FC740312D1C921A6E4E +Test: Verify +# +Message: 1EA7DEEEC15FAF68ED6EFAB60A +Digest: 08F5C171CBA2E69A4DD97A8A56DCD8B03184E8810DD035DA64D44E1A2C1B33CC +Test: Verify +# +Message: 9079359A7F9750768CAD1C91D41C +Digest: AF576BA8B1B5D672D5D16B44CA1D1FDF913D414A6B217EEEDF720F9983FD1371 +Test: Verify +# +Message: 1130F6ACCA44A747F8A98BEA6014FC +Digest: ECD838638D646714AA7ED6E798D61DEE1F668304A67DA86AE692AEE87F12F34A +Test: Verify +# +Message: 2316E6B3A861951F59527BC1F0908CDA +Digest: 0827CB90202053203D692A188868AE63F5ED675BDB583CD92B62CA009EB2C864 +Test: Verify +# +Message: C6182453B31F1477F9C815E56AD6A4D1D0 +Digest: BF3B8837D3860D98C3735EE0AF12B8905B5E9E447ACF523482531C9186AF3208 +Test: Verify +# +Message: 511B526E7B07844754402FE7AECE1164F748 +Digest: 7C189A07080B785BF23A990FB76A7551ACF609D2792D2C12110260FB49B46349 +Test: Verify +# +Message: FA2A99A00E2E9870C9136B0D658D3CE412367C +Digest: D645E33DA821E3AD3416D1FD3A91BD6DB2EB2439D73BB8B8B8EAB838AFA919E3 +Test: Verify +# +Message: 5918A17FB8C831EEA20805E68936893693CF85E3 +Digest: 63A8530FAC09CB0B31F6125AB37E7545E852383371711BA24344598898255517 +Test: Verify +# +Message: A8A11AE796B07F0D6F42374E88CDE1852F09AF4391 +Digest: 303D1503D0E0ECE81F384D878829E1D0BBF50F69C96A926520C9B317DF7AFEA2 +Test: Verify +# +Message: E2D525B3022952D66B72055BC6FEB9E0E943BFB8EDDE +Digest: 49B69C9824FABEB44AA275D4B34DA126C2A2374B4E3D8B4CEA1AB39068D37302 +Test: Verify +# +Message: D3380C1A3712B04E191084AB13182FF4806E163D2B1F42 +Digest: A206158A0A0D891CA717AFE13E96E5A645B9B6A09A8F0DA4C181A4C5F406F754 +Test: Verify +# +Message: CDD20B834860785A9010299B2FBF9BF2CD2F24B7B678CB7A +Digest: EB1E9AA729F5084C57EBB7A4C8F2F8976C0E07D14BD1B25CBF8B0FB0F2035977 +Test: Verify +# +Message: A79C16A0D1B5DC4DFA0A39147033075CC2455E7F35DC4907B3 +Digest: F15373F9F52A7BAAB88544C614239DA619306C6EE4F705B8EC4FCB5FD7E089FA +Test: Verify +# +Message: 410CC95F7276E129F89104DC7ED25E5D4BEF95FB6CF25F1D1261 +Digest: 66353571B2DE23620514AE0B8DC7B7225AE63F87A932152C116627371EA401CB +Test: Verify +# +Message: DC6D5BDCA0821E4CA26B6E6F88F8F4359297A5D5B24D106A717007 +Digest: FE52945A980CA063321CEB0B6729D8B9BA0FA6C24012A7EDD5C608F4591A789F +Test: Verify +# +Message: 3451C3C2C39BD7770A63506CEA5D3267EC71D5906BE60CA67EF44976 +Digest: C5109D2C871E09D4F884B4F191D3B20EB64A95E64664AEDACE22E0E8E1A58EFF +Test: Verify +# +Message: 32CC9C945368542320009A5128F26082CE39A4A3D48E8D63E515072888 +Digest: 5FF33FBBCA9BF5A7358140A87BA4A0E5B4834F7844EA92999192B8974107CF7D +Test: Verify +# +Message: 688FAA04EBCCC8908D7C6273B0C1D9ED78A5CF3D53A0C574065F7DF5C9BB +Digest: C12F25DE3AFCB57F562C2CAECA8FAA1ACCE71831C96392C807910D5A8E7CA53B +Test: Verify +# +Message: B41B672D57778AFA836D559F0EEF5CFB48BB398BEC89955F57A120958B7740 +Digest: 1B87D655419F970706380C9DAF38C98F425D0C66A853E5FFF1891A3AF4963339 +Test: Verify +# +Message: C1B77061C72FF57EFA61080E0F4554AC1DB1DEB964905475BFE6BDF9E8DAC2EB +Digest: A956B6944F345A5CC0683E85B5503803FBEB350413B182ADA55A99378615318D +Test: Verify +# +Message: DACEAB4C131AD4B8C9421CAA3C7940756F22D8ECAEE7C2579B36ACF9622B329558 +Digest: 3DF80B7AD5E73C09E212E787243A176CFBA8B0952EE64C689A207779747309C6 +Test: Verify +# +Message: D3F4CD1D9823A12C17CB6E49164066F74D184535AE18A3094E514968EC23627ED23DF49AEBAE29C43D83 +Digest: 5FC455D3E3509A12C1A840B488128C34CC2079F3BC060F4587F5D3735EA541F7 +Test: Verify +# +Message: 3E86D010AD851AAD30B72117E468758F21E7755F8FFF312BB4650B7E9D1377D905AE6F7B67F7EB541FD761AFF167316F59ED708B1A05 +Digest: C1F35F126D0BC13FF255140A3580CECDDB8FBEB99C04260CAFA175B134A58254 +Test: Verify +# +Message: 1A14BD7655B32F9B3C9908A2A3FF8E3135585BBEA544967D8A53029AE76E8B150340E21EFBD6B52DA16CDF29F4F3719859A33480FAE4CA6D25B31B174D638EB6C030BD +Digest: 6DB2A8512F6EC06A953A971520B4E571A908295601B93BD237A07B10741A6683 +Test: Verify +# +Message: 9F738F82EABC1C1EE508E330B3DAF4A1D67383226B4ED37172A9B86C4206931015303FF4977097EABE9289CFFE6EC81AB668FB27E69263693BB3FD3C659A25D17668521770A1FFCB2D89F74F45 +Digest: 175014AEE70073EBA7342D0E2767646A562BD890BAB89E776058F354633F5B03 +Test: Verify +# +Message: FA55D5CE8FDCC6B568D9250D63071668C9D9B42BCCAAC436AB215C091EE5C0CF4DCCAE4395C480B4ADA4E193A5D12BB87A2347C21E039F12D1A6AF839E682F399E811A789EA6714BFB06EB19A23E564B +Digest: 7D0F5151DCEF80ABCD9B458D32509FC4EE0DD20AB9940E00BD41BC55E4B520DF +Test: Verify +# +Message: 0E1EEA631E9ADC81CDE0AF2434992A16448D7B537FA58AED85515E5BFBBDAF17F839CA2B11441AE109F2900B03E128AB5BCAB9CC0CEFC93E513B06DAD7449BF719A9858E6727A14FB4057A05C6F314E6220A6D7530A8829727180CC342 +Digest: 6851DA78C0787E2DE71F2BB7E80334DAD969070A3187D9C3CB04EA761D923211 +Test: Verify +# +Message: 104F5F92C91B4ACECADF4A2ADF5A1796D0102345152F34A26125595732C230BC1337CB6BCDD2802A749B73249F1EEBB198AA630C1C82B3A87845A2D828D01B31930B90A793CF4E96CEBFFEFFE380AE2A1EC193DAF253688DE1921982E2021209A2EE6E +Digest: CFC9BE6B98EA2475F061962F81799C6C8CFED6C3E46223F61C82C1B439405E3C +Test: Verify +# +Message: 567524CD18192D4C44F9A8B05C7BC2D7935FF73C211D68D3AC0F780321E8E7D604E183C72CDA4E89D08D258D250CA1DD2D8EE2307B9AC38F55A6EF170AB5CEDA7783298B8E384486DE3BB41F2093ACC63DA4E4676C34BFD87B61BC9977D6BF9DEEA4E21BA3465686DE448D +Digest: 44CDAC0EBC892E6DDFB0C86D9C51C68CF8AA0776860A4D64CB552698E40993CB +Test: Verify +# +Message: 1A2C55BBF3B80F64712728C939410C16A99CDDA587318C162E97795778B12D56488B08E3A024DD739E383BE66DCE9A8F7AA3059FE849BDF64CF6FA4F16267E2F807E85DD6C52714A4248CF01785BD6EAAB4B5C2D9F0D95909FE2439FC44A87450A9599C41BDC28F6603878E3 +Digest: 0C72C5D23FBFB27E7D30E68EBF27D23E23185C9DD39E180ACBC5D819220F8990 +Test: Verify +# +Message: E122EDDC576A59B1EF09B392594C9412610AD08F439B28ED6DFBB7B65480686E493833F1DD02913B5FAF8F10F36FA3F6EFF7AD5A3F90F2A95DC6ED4017D3D7B3A77C53284A5D041AF66F182460937C78CD3BC3BE588B201B0CB1048E3C8341C5516C686E507F13E94EE20E6099 +Digest: 909767551BCC15B3689A46A3EF3DFDA2F6149F0C19F011E3D77114B19251804E +Test: Verify +# +Message: 25A4E9C85C14EAAD416FD677B3D3831B5F6A25A6BA082EF8EF9DA77448EFEEA607A29D98919A182B0F153E13BAC073E7351D51D4679F8797CDE9E64D87A6D1353A4F825332C0E445E04627E04C609CF7BDBE5F892ADAC73A8D0BCD284D0BFB94C09A587D34BC65522F19AE94D8E98698ED86C4FD49E59A40E7 +Digest: 07814E80D36F125EBE46CD960369706CED9C37CA14AD6C9B67EE4C5B334D5440 +Test: Verify +# +Message: A2E805E3B3F5096E4CCA245CEA514BEF861FFF6517B191B1ADE61C52AAEB91AB32A7264CD7A59BC16C4FEC13BBDB13EC9D0AEEF70D1664FE03B8FD4529229CF544287356F766F1301B2AC35C53309BF2316CB42B53CA757C1EA3E41FC3E13B8DC1BBCDC50CEC485AE8949CEF6E7CD84361F19BA4A751C48EC79980D138 +Digest: 144D370A4C9CD53495CFC72C181DD4D51FBCB8F36304603717B37DDE7A55BB78 +Test: Verify +# +Message: 6AA90001CF91B555AE047ED2E230404F103C9EDCD2B1094EEDB1F392C9DA257FEE993CB2E9E89631A4570CD318A6828D46894C216299714860F62D32F270140CEA5F225652F593D2CA23FB98A89EB8E0B10A3ECB28625E9118E324A561C24E160911B87635EA3E992E10355A6B947E097CEDCA127438D29E196D4DE9E552D6B9 +Digest: 47653A2CFD55A528C591ECF9CCF522B20A95F141CBE19E9E1030B090211D2E7C +Test: Verify +# +Message: 99456804BDE6F69219B6355BCBEA0538FB56D659706FFE57F0DC4FE816CEF5B258DCA00E6356CD211D9856B377CBD3C6281695503DF302CD5C83D1074869F16400EF4DA8F17085F7951850A627261D4AEB674B2C0DA09620AB0FF60802DC1445220E2225C5808ED13CF10463D884FB6511C534555F6CDA740F5386AD761B3F0EF7CBD366EE5CECD14B37D358C1AE94E8EFFD2C825E693E7313DD8B3EF854B3F939351AC4D3DCF513FC4A2004FA644ECF +Digest: C3EA17F84BEFE10B1E50F4948A26A94CD3F3B4F796E9DAAC4F0BF46A24A00123 +Test: Verify +# +Message: EFEA6D278842725FBBEA6EFC65B9C4B593D1F831862FD8FEF039303F66DCD623F202B6C8F0B848595C17AF2FFA79866B7E297699B6A291339AF9E6A10A92A20789727724FE5AAEAA1B4E48C22A98233B9073A554BE4D137BDCD0B870BA2B0202D8EE8BB84ADEA5862A3083D6FB34B4A8D3972D42280797821905752751F4F80C47D67EF77493C011769769F7232E69842856C62706B447A2C708A6C80BCD163C17DDF16EC979D9E15C605F3CE09A406FCAE5629BAFFF9389DADD0296E3FBBBFE724D16E69BEC7448265DE5771D6D41F71B +Digest: 91977540FBBA20AA6E0539E77F9186187B300DD020243B9DFA073FD09BDE869A +Test: Verify +# +Message: D7E71E078BDC9EDD7688DB7808C42735C9AA8B14CED45653459FC61098FA92728DB8D69CAFFD0482A80BD0D35486D006FC8A404CB0720086A4364050D3D96BDE7B91892138BACE1305E9C84D17765F9B521BF62FAED9D5CE210DAED23A76178B671E24CE409D4690EDAAEFB0F92124FF5729D163A40B40BBB5D1D7E917A915AD174597794BF4FFC084BE60214A0AA55A4A1C37DB4078CC550DF73FC3F420BBD7AD5204148A3C6AF2D2072868C483914171702E02AF34E4CA95A6F7FF139244A984F3FACD16883809D48ED4514644DD51B049C3F71688B1 +Digest: BC3A543813E4B9775EF478AE04B087D8DF319DC244E98396EBEE9997EEFD77D1 +Test: Verify +# +Message: EB18A12E1565C45E88FCD95FF78719A720C67791DBF0C4D4B915059E7ED6989436151FCFEC64AA639E5DE469C39CAAB79CFB86926D4D38963ADEFABDEEC02E3F94892F7CCCC359DABE8BE09E6AC9F5481979F6E6284434D0E81258168746B53A3642D3689B5E1F580E470659EEEDAF1306887673349F50A438C3025D883D1D28E63A2C42EEA57F93F82F6A64BAC38711A30CE9030F39ECEC998012CAADD3E9E0968D1D0E9376343FA2098089F8ADE56A6489F2BFB22753CE722FC9CECD80A69D1B54C72257113425CAFCC96CFBE00A413767D938EECB5F863A341ACDA39B9C7818BF268AE1C44AFB127753D2D4E84CD373F774 +Digest: 142E7AF4DA14603D7433186BE78CD0A13A133A4D93C1AB0F9523A369C6F3165C +Test: Verify +# +Message: 08C4C53C6F7F99ADC73BC7E4D8495A504D228643565DADE32BBE2825D8286BB56C8BF98F5A979265E9F305C4D67BD57F5D4A44D9CF73D8F05B98693A1567F625EBD601089F6122B6AE86635DCCE23BCF6E2646361BD4D68C209164B9527F9801BC310E30BAA9F0809A577141FE2CDAE70CC878863D20AE77F3AC510581229FBF24AE6C71CB42DCD21AC7E8A966C9DCC0F9DB89A759C662D89F2DCD08429834603F193DE96DFD4B03D16C2E9E087D721D0C3E7A987D3203956431459991D90C745E8DF75F662B145DBFFA8A12891895907629044F496B5F0E46554869A22A6442E8F59758C82C8989DC90F49F3D2CBE5200F8C233E1875CAC6D8E5F1192F3AB841797842A +Digest: CB0FB4187739DE61598F6F605B136E571CE8853336F4CFEFE50EC32ADE09C9B7 +Test: Verify +# +Message: 18B65294B0B79F913FFB9867B339685B24AFB915E9AE33FFD6771CB41F573F038076A0CF66B0A7591412A0838E528723468A6FFA3192D30D978E16D159502D2C8B9AF881BB6C7B15837BCC75C4BBA8F5AD1EB2B64109481124643DF7577C19553B359C01434C2B9D8956B5246B7FB5F0EE0C6FE98447BFA9CFE8FB0BEF108B86F04BC424EFA820AA0F7800E294B2F98970E4795B82D17FED251ED70494A8F0A2813EF940D7BD9EC4AFA0896919D77BB31A630B225A4A2BAE0DE1B864A61F914DCF47A31567CF7EF022AC0DC13BA3ED0AD9772F95C857797D75CF60146F481D5DDC888C34C872AD64ECD2F169863C41D5DE0A9C6CB89584C31649DF6E2AA33179D9A361CB53E2F832384157D7E8B9864A7E2348AB90B03944E9A72B6B34B7AAE478AF6F5DCE35DF408AE61E896648E0BDDA7DDA91874148C8B21D414ED8BA9F4DB8A2B3 +Digest: 8787EDCB5A39FC90673078D18E1925ED2B71E2F1129349409B4EDD6B4FB84D22 +Test: Verify +# +Message: 58C7E921F7B15A6897E85C1E1E954F15BDBF98FF68C025CCCD06393B761FBDA1789FB1B8F1FACFF87B27598D5F6D3F57CACC9529335996ADB2948114259E4668FAF934077CB36D0F8EF2EB86B60DA6064ACD9819D641C91A2AEA4DC5F320AF70530F587C8D54119071A9A32B89DF0A07CD8DEC95BB5B2AD54537DCF575A85DA602BCADDA894ECE08C8D3B43CF5CB52048BFF99FCDB49755B5C69B06E03F11F4234F05DA60C3A5A475A24DC783182FC2823B9C968B2698CACF4BA6AF5733F50CFA8436EAA75AAEAF036C73831DEC06B6AE849F8BA56C23508E913AF58E928C8B88F3C22EC5CE7CDB8C9743A39DA0A3EE2D6B046882A2D98B83FD58B7F44383819002B5DBF108261E59881D6E96BBB748EC3CCB77447EC8D2468542B7737A12B50CCDD7D8213AE2814A7B7DF53A56964A1579C87E5D0816756DCADDC69BA517BECCBBBE3C397608F0DCFA06B42AFEB4AC0748CC0829F5615942DA317C8B5 +Digest: B5DFF43FD1E50DF5826CABBC5840CF6121DF171726F36E413DB9F7D36B828E71 +Test: Verify +# +Message: 5B06E53474925BBC7B76DA7EBA1D236081C68CBE73868EDE8040F1AE6F10422AAD501DBA6EF2A9B16D14AFE623CAA7D1BE19980C65542AE6342E7201E09D93848893F507BC9D6E706578CA2FE54D804011CD2B9D8216FBAAC2834BB1ED0FC2113E49B19F4EA99604631E8B42ECA87B80817B4263C9975BCF42F334E02C91E1421B893EF9D886209F4C29683319906901F03C9BB36371AD5BB34B468F55B396B45234927921B221CD7A9DBCEF7363BBC0C5D6CFC2D1432DF96844068D252B6BDBBF14A554ED68558F88379C25AAF1269C5A7E4E2D7278DBD831A381725350BADA450FBCB5C7F7BB438467689C47DED4295391077C74C484C75E0D34145C3EFD6CD9C4C2C5A215FFA853C381A095294DA33271939B69FFD04DEEF71121C654881284F117A3A5EBFCCD42990FEB0410BEE277E9CA2FB58DD05B1558D9C579ED28D4CE7929D976EAF5E5FB4F284420B778067DEC69C31F43E9D3B062ECCD682DF02250EE5B040FB3BC53D75F6589C231C8D400C839566CA20969C212A5A905AF607EC7BEA739D994 +Digest: B8E2B8B7DA8BD8BB4D8FC432C26976EFF799E26C8DA53420F22D1D7A19104A5A +Test: Verify +# +Message: E7E09334BB1818C2BEC099222B06DCA66EE17CC4DF18064C50B9568D9454BDF63B026C1E323E873DB456D4B1862E49907BDE72D5FB9BA5CFD0FD66350770820A0FFEE63FE984E24EB37EB26E5B65C96B507510C7E20B3ADFE738A31B5DC1AF6DF28234E15B25F009FF001577488A0DF5846DDD754FABE76FC383353ADC2934E01ACAFD8A3B8B3B5180587819B9A188A1A84636B5C4FB01EAA156FDD2146C5AB176F21DE495715779726899919807477ECD834269796B5D0931334B0E0D16ED0B8D6624567D88A201410ECB8FFEF9F33C6440AA7BB49B9F86A0FD861AB0DA3299E615EEAF0AC7549638C0BED49AE8ADEA4B6ACB9B5A7C14D9659794B26BE132263253B953323878011F7229FCD6E18D39741E276747B589DF7DB849C48E80F3AD22FB8EA7E820E5517D7001E8A7D5CB6B77AF87F84A276382BE0556BB4DA800D065E807E810CA8FC763501CB2AA38D2E93C35940EEA79B5F652B0667EEFE93142F6D6295AF5201B8B7432370BB28C8DBFAA89D9D968323BF8D08B6F9D64DA61FEAEFB573B2B4F68A666286FD57C41B6A7117493185F2EB393D431958688332E80A45A156ED475E57305469FD8857D42029303282E44 +Digest: B02DFA84824630BA74B6BDA0D3C6FD6F6C748D97794FA163B8AF10F9F13E89A7 +Test: Verify +# +Message: A7C13D793905DA01B2FA8073AA2BEE4445FEFA12776C232A13485D7D6B8B1A27590E902B06EDCC04C3B2143420B5D7760026C1AED402A1AD269AF23B4372F01894FC060B6C7ED5B81DB399D7D31BA916DA74C0747467384A808FAF5A8C1F93616D3F3E15C4D4F792EE03B185093A6BBE43424131D7418199F3FF10215A255EC9947447ABBA3AADF7F6761C1A9EABF2AD5C70F0301EE3DE61C86F240483742403287A3C03EF6BADC3946CE218A90F6301170CFCD87FBB07C5F35852CB50E88BD35C0DC915CF21F5C39DF15532B1672BB955EDDE672BD3725B1808FCC099DD134304441835B03FDDA5807DF7D783BA695BD3C0FB9D95ED49DC4926AD835535D09DD87C921FD4C292E76BDE7408BDB1D4743B55353576ED3BAD335014070231D8ACD5F8E7CE1493894B1B940B6C35431EB9519BE752FAF52DC33122A1886ED8C615C459DBD5C675E27F6683AC50D2B0259E87247EF6BADDC501457285310AFE46C641392FE6B91C9EEB76E218FEFD422D78259310C53EC83659BF5EF155756DE579DCFE5A98665474D96292258D8F372DBFEDDA9632C3AE4CA603407974A000A2F5B7D94A1774427AFDDB46503A13DFF97139857290E8621879C055F285C227A0D34824D0A37AA69650A07470B5C7E90235472AE4A33A +Digest: 36FFEE71CD34E0EE1AAC78DDB6B0FD16725CF883034F99CACD0B9159227E0280 +Test: Verify +# +Message: 9E0627BEC8F4639E071F990B93BF017AD23979C0E751466025A94921420C04B7FCC022C04147BEB205298D57EDA5113D40079873E5F49755A1FDCC4A284E62BB7D13193932DB7B894414A1486535113EA8E24EA3181EAFA58C91A2E11D77BD00F380BE4FD65A484B0F3199A59B9B11D52CD63FD7214EFB5A0076E5346B44B2CD892520DA8595A4622A9C1E3751622B5A0BC845456EED154C799F8A8C674111C47AFDEFF77C23D54A00AE11474477462050C18FA6893C55B90F376B28C561542F60481DFF4F73C55DDB8E333D437333AFD14684CB18EC68F34AB8966BA6DEE50051C3076B43FC11913D7C51BC68EB17F3F10647D4BEE91133771D4230E6FEC7B7CCB8E051B3402D2A70E575259A5C1B7C44968FE33E362BFE42726E3D94C7457A33822C6390ED7A7879DDA9508F82D86E1CBA90FB29925B79A2F14BAAD2B65666DFA747ED0223D5C5BE824EF98ACA2EBCF50BE25A81D76C27C78AA44AA23D524EF2BE4D5C4408F77CED95BC60F242D450A80B020E3A669080ADBEF39224EEC4EEB5DADCF0A62B26E964AE13EA8AADA6298557D458FE5F919AD1DF65DD8A591B2FB28346D2FD84F0F60AFD4CDDFD5B7418DE5F2DBA917EF59243226049377B5DCBE612BA13AC19E1E5DE178CCDF7C9A15071854C8C9B3B5E26BA0781678299E18A9394BFEEACA6EADC52D7E4D94B25CF919C86A30C1C630260F8692C2ED947531A2F2C4C61D42EEBB8F96B +Digest: 095BC837EE14D3E8FF05DE596DDF8D9FD932B5BA9B8418F14E13361F5D752AB9 +Test: Verify +# +Message: 7CB3AB78B99597B1283E7C05C178646E5030F7AED4B0754C05E33CC1C7A826429C82DCA6EBA288AB854C2151993759E49B6FB099A863BF55858653FBD4BFBABF8DE0C820AA0C3CDF25AB6E6FDB8804FB64A70C87DA66C097D18F105403DF7F9BF39B82FA22F6E24F8234A2CDD9ACD36C0F1BA28D0BA83EFD73C05CBE91A1A0CC242D68D82DEC06AC51227E7E68115228E1CC2E68E06AFF042F49424877EEA7AB5D85864E933AC36614A99B57C3F8258CA8E981FE9A6A4CB616C795A1F134479CDD721433A2B7A3DEF57044BB1783DF786733CC539AA2ACC5D4C01AC4CCCDB716F65526DDBAA2129D66CBA7C6D6EB3CF543772D536ACDAA15A12E2F0099F692CC441895B535E24C247B8FCAE1CFDFBAA36BA7B5CF4E5EBCB4FECD37471A4E374CB2407C9265EEE68CB8B6DFAC1A231BE3823B8338E3FFDCE6F5AF938671A697AEAF33ABB86D6ECBCAF342D090701F5B26A3B309114858B7E50B60A2643303D4DCDE1C362B04982A8BAE6D917B38E26D1067CFB76C51B1AB2A7648B2E247E4D373A7D2D87C20F84ABFA3B8E613A7103F272F92D59C7C782576AAB66C256658E7809E397E5DF5F152841BBCCC578B562D4EC4B0AC1D4598F5A92E0EF32769967A95509FDE763FB86696D57E7B9698A6896D40CF21B84640EC01039DA39894576B0D4C893D317FD0D70C0B990C7ACD15D9DFD8900AC3E9848E48079DE3C7E26335F1BB3767E92989032E1EB69229122D34EAC77ABDEAC5795F037397C0442742C4AE1352A5C50C1295FCD18BFBF9B8CC24BC62A23B1AD19582EC753E +Digest: C4767887D03709EF9D6D4F6AA4BBB872ECEC5EF85E09D3184FE61551EFB280EF +Test: Verify +# +Message: BA3686AC944D883A85FD21D69CF40CAE7658388DBAD468BD3DF5FA7246E08E180EEF3F5D7D402E340B3A4147A08C6E503187D5C357C218F0EBA3CFF3A7698227EEFFA0B6ED975764A73C842133D320606864E9F6209DEA4242AF2A4AE8084EEC5DF49EC49D0D97E8C851EC6DBCF8CC07B89F9B5894AF3C4915CBBD542698245C921C8F9573B5B55BE1DAA317AB0527E4052E595AA9F23D6B6B1B9469E74F771583EB3912707021635A7C8A24AF574C3489D81B6E8858BE9DA810E48FFC0864A4D91359A33232CE53EFB9A3B16FF65704633E94E9A06049B32F80ADED5E05552D7C7A7B9BFF726272970DA7D3C5D094E30E77888F643E21DCDE2F8DB3345C3A141C311D4FE21A62B657AB1EF7FEEBF06B71487EB2E07E71640F622C6EDEC7838A7CD88ADF1F43ADB2733E1B91B8A6C504FC6C23AA1F64D6B6C8546CF218358210A89288704F323321BDD5FF8EF805C39FD83B23CC02254EA7AB9D7EB5FC9FDB74D4C3B3DC7B216D9B4FE43580A76EF35EFBEF0E8B477B76A104A1024BA3010FA77ECC6655313C85184749DB54E0CC8C5D2E791A636B7B7EDB73153DFB2ED42DB8848391A94ABC594824A1EF3F2D0DB22CFD76DCE2BDEDA6868D2730D5CD7C45E7319E060BF00BB49D3D672D8D0493BCA27B5306E5E8A339C712F653B25271BF5960FFD218AC5E38F72E7178A3E3E0B7A2C75D37C7A8AA0C6C1D64D58564673E52CF8B18EDDB51881459E75D2F384569ED282D23517FD533F94B627C424B5D595126D63F8636A7130B8A7FEE172CD4B5F0857A6646CD2F2EF4E27A1A6179FA678AF90CA9B1D4F72E40C673B086C89F9333FF23EE6056BB32FAD1031BCC2DE209BAB86A1DA65E90E8 +Digest: 48CA492E2522724402E32E10A18561B4B2666AC9B83532B57CE23AB9D4E10550 +Test: Verify +# +Message: 1F5786241126C28C151E5F1B4C6F055286137064EC414FD7843F3276A0581AF75C44128EC6CD9A335E7BDB7A185A573DBE94BF5E1962250CA237668D19B3AB91B1230CACCCB8D8E836610708C757AC47F83B63232342BCF9BE620C57D12473FFBA39273C24E81715D657C7694EB5751FADCFCAEC937E42F2FCC6A639ED843EA811602899BB1C379B8B4285FC240689E338ED26ACDFCDFED6EACC94D5F5A3A50063538D13EA5A257E5B89878DF79E947603C70EBAF79F44EDE2575393BFE62EE090AB3A857AE380DDC47B2625B955EB56DC8E3B74F8C563B96C287F5F767E65537960B022D66A7503EA20F2E75266EB9B99D4F0F791DB7398D5C7985064CDC8C302BF06E30BA443DDE6F9498B0FAA860F8D2FAF54ED6491D717D7D383C834A8C47E4CF67F0C424405361875C727D423E99169509006159036E9B0CAAB4CC9723EE8E05A48417C7ACF8620FCB8B8DC387C0EF3311300365DC3A94743779FA72CD07214B79972D73E41C7E4BB1CBCA3BCF4B1FAD2F189265987E611FD871C8BB6FBFDB0C749DF3AE67BF9FB73E471F883CD3FEC9D5847A7329141FBAC14F59E3028B9568E4649F7AEA58F300AC93CD24731457872E8B53D4412FA997C5D106CBB46F62A7A128168572F899710F8298B15BE40C78F907997BC9C088A210CFB9E7067808C7358A2799197519D7B09F3C0C5F5BB49D4C9BBE42FE89BA53F5E1B633B32B97819E2C298CAC9823AC1027C7F1823407E3B6E15C8E1E0750EA4A902FB1A2346B0DD3FE0EBD9CD03A076AA320791038CB23BE9006042970F16CCB9A6AB0F2FC20188736FAC269C396C6029E6BC13B24DDEC4F2888E228283FA2853779F32ED8525053ED016D9E4BCAAD7435EBDBDC9B9EBC5FCC2A13260EA16AC11EBD201AC8CE491A8A12DCA44A1E5A5D06D487387B14C5F1A59 +Digest: 01C8CEBA92E02848B1DD1F74C9572EFE99522AAB3176BCA89A7648825635AEF1 +Test: Verify +# +Message: D8E3EECD25DDB1A678DFD2A58831182B293C5C9680737724107A1AE56C2B67689F484C820F4AF8109D0606A6D6DBCA82FED6F5655F5E7040BA67CE424944D2DDD82CCDAA7BA1909A22694168B3F79EBA31A4938CA95F80897A85296B20CC9EC6D1F2A56DDD47AA72968ADFCCC28219D9F8C1ADC06AEDC0BB7163397FE335B039CA5848A50B17F45A75B45B862789D33316671F50303D16C633946843B377C3683D2210AB603F3521631D518BB171DD1E015A214EAED69A803EAE064E558D142E5AA4E2DB43CF29057E9BF69068FF2A8B0FF18D8D4644D1147E55F82C404416387AC2B691D8328FB7699AF09C995F61D6E7D49C3C2837B783C95BD1481B1D68F6C6508E4A18095FCE4F3F87856A71DFD4DDBF32BF9AFEA2B08019A97165467DE23513BE3FDBEE92060B7BA56DF0B5ADD30F3EB259E7797790754673562F4960148D10BFA4F63966BBFB4FFF930BE2AF93115FD201378301FC4286C6516DDBD6ECF8D4625EC7F9151106959844630CB4A2A07AFFD425439BC073644085AAE4A692374E8E05CBA38828026E5668093CADD6A52176C209BC533E29FB769A46AA327522074E82CE91CA780CE436CD88A3C4783816C4D71945FD15A278422AA9744F57D6E40CBA3EC53DE2B0271EEC2069AF9F53D7604407A5B31ACFB75626D900BEB4185816F5EF6DC1F81272595BE5E366C32CAD27BD549D997BB1E5950F00F2DEBBB1C8EB4B9D100F9C5230ADD56DB108534A9D918FE7E1F1BA0D288B3187E37BC9CADB3E230125E4B6AF0ACD19B849D86A4ACF5CDBFF8B078F13909B58C6EF57F01F1159118ABC221EC93128AA5AD5F3565C56A18224C16722E98D2E00387A1FC2793C2B39336EF986BE2275973482C936B5DD14B5F2EE6307308603D0F982E00BB0BA18982747583300791E5489DCFF9BC5AE85E0350FE7A1CB686DE82D6CE0BAE05B5B2F7DC9AAC44177DC7DCF07EC814825D706AE08C2C9FEA5DD38F65795923A582E0068FEE3B77E +Digest: 8E56062568EC7E3DB069620010E4874F126A627987039CAFBEB97D364E17998C +Test: Verify +# +Message: 8EF04FED4C29262488D842A9C9B398464463A331016EF1E2DD9BD293ECE658D7F6B7B4E11D1037B760ABF2E04EFCFA580ACD554EA220B6251EDE77245193389638DBE67665B4F45D03EFA849EFC2C4C3118C169A564CBD9CA107D9BFBA8E625F5EA1C699842A89534C2C7BDA762F42D2B394F17525737311D0688637C43638A456019C3C2F64EB46A532783EE97C9BDB2012C5792E39D53E1A7DA501AC2D380BA5878C9E574AF4E4B1843493A5B0E7514850B8E9166C413044E7344F223228E924CEDFFBE467509EAEFC5F7E3BF441246C3C88D66413AF42317495BB4E94CB47C20E3FFF84DE35EF502F895F19A84C5DB9B6BF5539422EFF312D73739D4B7509BB76A17F465E113D3F9B8CDC144D7C9D99524EC62BD54BA696F0EA5F6A804FD4C32DA265D51B4B0F91529A6FF5B1ACCEE63B94B0C2A218B6BE6EB78FDDF365A7CDC6232B20D03EA45D40DF9F9A85B18205F833E48BC3F16C547B2B1C38112D064D10F059CC5611E3092860A4E890C3A025BCE17150195ED292D7971675B36190E180B7A7626EEC425F111DCBBAAA24A174F896AC9E019786B2F5219FCD5FD036BC64C707C356E2E9DB21382464FC3FA7592B401A5D3965327671F7DC3D8DF8CE467A2CDC55EA614E73A3F634E27D4E5C5C40F2E5B770F4C43AA926BC0CF80E91BF4E6973660E6A4326374B4DA237FDC44F9F228735A9B80081412FBAEA508F554B5FD70BFC789AA945307B99E459ED7FD291BC4A8109FCAA2E4B1568B92047C322862157E219720CF27700D2CF61DF0C124A0353650DA4CA268BB2419E42127EDDFD0F43E07F58794557D5D6D4A1F0AD0EB8B610F456FA0BAEEEA01FCAB52621765096C2C65B9438F381783DCF48EA48079C5A8BBD07A0414AD7094E5486CF3186FD2739703E819BF8AC828B0C4CDC9684D7F7B8E6151E36218759A783F02DEBF511399BFFB0996EC983A003A981B9858056E4D4F740F39B34D57C86BD30E6DA26D3CF572D01A8D03E8D081D9F04F7 +Digest: 667E1D9C6613685FC6B165E9C116075B52956AB22F05803080084A2950EB9345 +Test: Verify +# +Message: 6D11FD2EA797E0217236603238610D8C4AE21BF5322815D9F668D11349FE87E8AF155C654C3D32B74FFB751A5803F1BAE14768F0AB252C231774A8663B9C03F82D1DACFA0ADD1F86E60C3FD08D3CADE71A5EB883787E469A8D82081D4ABEEAA5BFB84C2B5482DC7E1F7B7C149A0FA7932B175F2E340D2FE30B502B84F1A5E2D742D53C6ED9D3D1F8F16860A2881C030CD74C8B0300B42781B33CDCFE93DC5766FA4F36C68D1C8A23E27147D7A0D9229A0A0045CB50E8EE010BAA5255668DAFA93986D903B55A305179367CB6602440A791EC29CC7506CBBADBDA1984E585D0FDD3699C786522F4D67BFEAD06A3A65C6C61E0974B6F3ECE77B5C08EA26E9AC185F4B34D1D2CC318F46D1BC3E8787EA3C808403F74B919F21EA06EEDBA3A6508F55A6C6CC2AB11CB1DD9A8F91FD981F42C00C7EE9F777CD735AE6E5E1844121889FD5DF94F511F165ABB66D6068286E0A26A314B8DB5A009D22D032C902B2680691DADBB919FB2B90495CEA3E47AC8942986C7569EF0658C9C66F262D70F8D1629CE99A8F3DC2517844FBC2B918DB75FD2171E05D49ACFB2376261A0999E027BD2BC83AB5D636A063012FFFC78E70048B447FB771C5D48A87FF4673096BBBAF4DF60DA8A548BD191F7144779A6C42A800B5207502004EE02B62E614150F4C9E8FB7E946E2262F39E01DB39B1CB9B50D6A03A4ADD9108C0862A1B127B9E9BFAB570DE7E3907BC1BC09EB3740C842B7760029AA6698D3FE1F843DE9A13EF3CDF3FAFBAA0A92A99319D7FE98735472399E5C554E1B5E7364B5CCB1F4B525B5320020B0C8777B1FB4DBE29A5DE86DA86C3941ECB9953456FDC86423C068573BEF763529AAD3EA507E8F5767E2BC30D84AFF81F52C3474563489A8CCADF015FFDD32A0753930849534221A11E2CDC773E8F9E0CEF5DEC5B8082E3B2F3803F07818E89AF5CA2616C088173A76C001111CE7C7F55D1BF728AE485268296264DE5114D9425208CEA2DF5EC932155B9744E5907403F2F1612876E699E9C0EAFD0DE155DA2E862F70186E5337694DDEC2749 +Digest: 66968EA1080CF81945F7F2E38433CF4FF331D60453D557553556957E8595334E +Test: Verify +# +Message: 0DDCC78B903DD52B33A286025664E0C211140839A1231F84A6B11F2F93FFD89A20C2051314CBDB15B06863527A2650FF981DBD6B6F57718AF72E4D4CF4EAA79D44DCFA8E59129268CAC112E8E4DF4D566AA60019EFC6681AD6195B5450A6057DDEA329B5503BB1D53052E2B566D691FFBC1CB08048213D734C0C72FE587F6EC2D90E038AE86C36F5623C02DF48F29E2C68849888405E92C4DF7560F57B6ABE4A672945AFCB1C63D64153002D835085A6B55281EDCB95985EF6FE315CF6F66B05F19F4C816B129B85766EB59EC87C21C28CE090762A6617E86F3B815E9954D217B8D90184C273918A5AF10EA24C32936CF69C78BE737FC091DD364D86F06057A845998B0EA82BA759E37501789327CE3EA4EF2EFAF18C7F894B84427850B2B508BA00E07C434BB2700797DB4EC0B4336FE89709A129E0BE6645A0C1783416E4F3BA84E3A9BAE469B4603AD6255B69560CE181C5FA2FBC5C530BBDC0C5121AF911BEB4F97303E167A246487BE8678CD7766216395EDAC7580624DC7F40D0DCBCF05871D92CA3167004420A095E1DA67B00D1F409DB58DADBD87DF91468907563F25DC85D7EEBE83EC82FB12419B3BB617EC80E3A23079FBFAA7D5A0A6B18CE78DEC296F7A6E1F83CDE0E7F7776212C132C3F352C5969977A3EB1808304DBC8E4B7CE9A07F40902AC71E1D5CCD812BFD74FF4419F6B02E3E0793CC89BA99437D13B216CAF2BDF34CA28AB395729E9A4E9A85A3905577E66F94F2B61C530B00D87A00D137A3FD75F8345D3727ED1B271F0DFD29BB38B052AD52BA00A6710D2C00EF7E21E7E7F409ADC286D9ABF485401ABBB5CE84293BCF0473A22414DA6720D5C9228BA9CFA0B36CC2F47C590C1EBE913F50848C139CA029C6266567B95F5171B3F3264DCA658DC91DF4F56D5B10D418F8EC5A32F30414C3CF7B78FD660D5DC3D2D4A03BF60B1CDD5432A0AE6133CC0EE4816099148D96FDCAE04588D2BEDF0D8B52DAC848D08C7C2EBEE31A63BACEDC11507C9A9E0EC4A154BDE10D34B6118AF5C2FA55ABCA1E727E9CB1C5BCDF281A60C496444 +Digest: FC9B530F657A601919F98D9992019FF2062904B4CB83ACCC60760C450BDD8340 +Test: Verify +# +Message: 5BF233C1AFE517C836E7F4642DE46DBAC92802F208E83973D1DEEE9082593A5736410512081A837716A53ECC564828CC1CF5B460C5131F7D503AB612C581C54F55AD00DD63CA7B863E204AA8DC3FF3E814C742B4CB2909903B01E8E76C6CD4BE12FC3DDAF8F5CB2BFD1BAD84BF55418181AF669417DF921DC84DBCED61E818D05EB440D076BB9D438615ED1FCCECA7FB0608B5D1FF1FAE389D9B288AE63E8C3D0CF1865D4165655EF427CE6D8A3F136528815838E6B6CA4ECA976FD8CB6F2252B12F04512A7A03F848BBB7202587B8E41905656C3039C971A8DF77A3EC7AE132D25AA29D298DEC05D607E0AC4DACF2909FC1F063E9F0CC3AB82BBB17027D170B0CCC97BF95A12ABF49B115ADC24A59DEC42C4C6BFBA7AA606365A032B5AC7F12E97174F37193AAB772398BB6F883E96113215D5E8C7368F11B6BC742ABD121A6493FA9EA56134E477175186A07EE5AFC9FA345B4F73E04BD5D2A90C80E9C0F690D39D53D942CE3C6ECAA313C30B788852F87DD7E953E8FA93193BCB92F24C1F882E526C7A75A4AFD6D9560DB62993DA7E433CC769861D5C1FAFD608D40A06DC4F108ABEAB60A87DE37AF51519174DA65B39B9B46778E5964273AE21A7122B1FF9C9894F2A996153F1B1A02127F5E93D33E5CABFC17718AE7C235B8737D09BF1F49C64E6BAE8218D409CDD2170D7BB967CCD739B5830CE861F442D5AB466792263CD3540925AB9FE3CE5E4E55279ADB3A50E2CC7F48972624B8209220693BE883B2324A4744B6635B078F8521C75C9CA11210F5E6BEE101077E80116EFE1FF87CE80E95B0D94F0C18DA4DE02EFB771BE10124E5FCEDCA9911291E4B5FE88DA2A534D21B6D4B8B4135DD6992A7E6223CEB0D3B459061C363DF638F06F9ABBE9F82C84ED3B7A87546E456F4033BCFCD6485E23B44C01AD16148CFF204DCD590B143A477034AA30D35FDCBE468A6F2A2EE482D391D88AC5406A7DD129C948BED64AC6C7BA75E58D746C494276EF118D108EC57AE489CA3B795B0DBFFC2E8E378A1C2C0904293CA02FD1429F560366A9F08ADB70B2A3CDF775B1440BEB16932140E4D44900D3D5CB804B1F4722C175133A0FF36FB79BF844A725FCD837B0575D995C9E2C2B08368C82C9FDAAF4431F0 +Digest: A74745DC67E160C51B6608F633563BB3DFCDA55B3F702B9331DE30D477DA21C8 +Test: Verify +# +Message: 2A4E63C26D4CAC9F5BCD67689E5C4E7886A205B27F471CCFBA1412EFEBA03F6502E191262BF6B55FA0C246D79C9714450A7BF2F5D45721A0338CB83FCAE10587978301913023E015AFB6B4C1250C2A56800DA24F75D9F07E134C13FE17DC69DEC5CF8E8E87B724BE381B008DEFAC265AE39CFA24B6606E2D6054EBC86B85481D14630B91CD49C7EEFEBC0BFED859262EE0E55DBB09BC2126AD2A7362E04429FDF5E73E1029FF30AA04EE6F6035596B9557C17AB902121F68D1B559A48553A167EC64B06B79FABA218B2C08A5B220FFA450C78FCEBBE481BB5BB932F2B7627D8E7EA21362CF576A5B34FE09048161AA47D8E0F4A37CA609F47299A102D95D13BD7BB2074A20116B0C374339012DABA93D95EE6F43D8F895290DE96B3D0FDAEEF48A1475CECC42E5DFA377DFB75E4A2F9663DA7EB5891D1F40225F924A192203D88125879CFB0623B1274E2F5E06FE0183053B8F5DDC0F2A1E7D22EC04C302D1D92F950BA9B559C2BE10F5C7ABC36D997B38E18BB29128316D267924FDD8239C9A76D818FE0B41193EC2F664577E5816BCFBDE53F596C9F9B1E8F09604ABA568AB65CB98F3DD06DC78C6E996D032E0BA8D63C9CB76DFEFF96292BCBC343494EAB94AB1E72BFE5EB03BE9CB6B7CD49DD99CAFF8C22B40E138CD9C56E024C4C5621D915D209F1B3A8A7AA5150C5F316FFF09FE2C39BEF707CEF9695A3CCB958A5BFC5DD8DA4D000A3149CCF2FBE45790406B668D37566BCDEDD24C8C0802D19A3ACD49C4BADDC83902AE11E2D488CEFDD3E9D260DC8CE60B085D69ABBC53A1B20CA0D3738C7B9AFCBC2A8655DA9FEDB18B1787E9796F1AD5C157B2D0AC0CD6D3140F4B3734A757CDEEA0169CFF2BE60CB1E4947079F206AB34E1A256816BA3061FA1BD9DFED909895A3B6BAF3549DEBA74D38EE11D4FB9549B7170DB63C66AADE3D50E5174257484736ED6DF386A1A9968F9765D54C59C510E4743D40272A670D9820A6DB6B09557F4A02624CE507955E0F6E58CA2F48D2D4FA8AA5458DE9CD7C76C34BCCEE3D8186479C232442D9838867235148A286C2F0136148CC9D6A53CB01DB9C8FCC181664534C840D9BF78C74195219F627E082D539D1AC0DF08A177466C1C493AFBA31240E4F4A9B2365C861F2D28A43A9F9DA91AE96736794E9E452FA4FF5D85363FAB61B70BA3BB83A3 +Digest: 7B267926B09C9A34214CF302C60B0D36493DFB6E923A5544CECFD96602A616FE +Test: Verify +# +Message: FAC3D81DC1A4005E8AA99E8FE0FD0E4FC07434CC8AB30774C0B38D5A784BDE2BC4A915FB0AD00FBBBF9100D2BF0FA8A71435BCD6DE22A2759470A948A8F87C48F9FA1F1406341BB7AE2940C726B8CBBD3C649D28EF5F3921598798603112A636EAF70555176E24CA0071A0FD77CB165AD46CE7E17E6A16382A787E4525752B05626B84E4092DBF0D1466C98B393EB53317F3314F4F92FE334A1552B00D404CDD4B489EA27466A2A82FDC93A8FF55D41A31A2025BD0D57F05FB7E6F24A0C7D6F3905AF17121B674FA83F1F3FA71325FC21E539EA21DEDCAE38AE7C1EE3FBA3793609E89D311B17E4081344CE4A32AA84233AD1FCE49B3EDB73B90EF1014575CA3C8B2ACDD906738CF6575CF1F16B3EAC98574483CEB9D1BE90102479C7A0804D9B0328C2BD9AD40F376107C96663C89239F20BE693DE36BB6AB5FC4AF30B3EF6CF7975B883CBDCD1DEF3507F206BF2BADC1A45EB9BB6DBB155B82A52A96500E532A2B400D3D2C0F9D59E2EDB07283028DF2BE04E03F56D3D36030B606479FDCEA9914C353DC76C9A6CDB73B011A96C57DB85CC0B7ACA9B8AD54C10FF32F4E2CC2A41B67DE6159E967282C903052D8AFB7BE62DA5EDD48E9FD874EDFA4652DEE53FF3D1BF7420D217D2DB69897E20E2C61C5B69EDF8461AF07FC556E4DAA65AD893E4F0388A479CE81257F00CA5FCB8567EFD754F9BF7F90061015CDB9AC65D26CC38EEA89DFEADD7071EAAE74CF96A2D7314C466786D7D9763AB9BC1195EF25245A2821B12381074FEB43596BC70E4DE9B7171F4DAA5295BE5BF037BFEC50D3FF21F4DA5D8A823760ED5D2AE3131ADE94504CF9ABD513D34DD849E111E86E2CE7BF86FC0ED0B91E9DE143386145F6835EB02FD1B6714614C270A625F5DEAD43F22069C9A6D0B97DE7EF7D588885064E637D72A764F72D38B30D9E54F86FC5B27E05DA8BF9CA436CB36A582AFB49589A65460792F54047ED028C8AD32A2169970580483D2CF94E374103BB4DD77CE2871983CF0108B075E5556BADA6044878D484BAA52CAD1E85D355B095E899A203F529B8F1F9BDF4F763D8EA1A5677F4A2AC0852FC8EB340972D7BC76A0AB514C5958F6E361E2266FD2D7EA69612998ED64E8C4F5EA2788740665F368EF3F54F7391990B9AA5069A10FF5C1B8097C9D501C4C776C2588057CF5D8FBCF5EF21440B749AE2D495CAE04532CFD69C54EB86E033FC5FE809663EA03E4FA1E4A9EE4CA9D7CAEA +Digest: D083EC4980AF4BEB3C0774DFE10CFCEE76398A2D16C0E49025E55B9FE54B154F +Test: Verify +# +Message: EEC43D808EA8F8F0C28356A6F928E471A72AB37D7C9737D23C46DC0FCF5C205F89FF0152FB634320DFD85A94F0FF42BAAD6142BBC7A343EF604AEADD6AAC1797C8875B79A2ED02F02179C15F2F478E1896B7EC47882DCDA705F22DE11E9A4CEB35182E1C61DDCD64B770FE91B0CEA4940995F6EB0594FC65F2690C1DBAE1C68D68DD1C90747E58902598CE82466B5E65BAB210861086CD4EA79C8298F60B2F9AA3E2C1FB5700D0987ECFCFC1EE5F56400D5BCCD1E7165205EA84F391A8DF583FCCDAED1CE82D978F5C968664C3C090DAA7E6293C6250E550761CF1C55568F61FC05D8CFBE0C4175F1751532F472ECCF54481556327A70C9428BB757C0B766879054BCA59AE994B2997B1077C223AD1AD8178D9569518AB72A474F8956CE6DFE646E4F1D5613558AC419B59428258EB1EE5C4A466A846D0DE05077DF82D0DE7648394F2B6D4C613F313A8E07C16D0A1E11DFCC8187B59DBA263C43EF87C7E4394928419D79120F5FD63272635DD180B3258366D55591B9A7B608133970FEAAF4AA786E695140E95DF9EE51F965F7DBE5F7120B4DAFCE83C14B76CDA1D41E17E5FD27720F510ED6ECE5CFC2FB2A0445949962723201D84F9A6BBC4E09F5BCFCBC6F0F7A0045E1402E4A28204A443ACF3C1312E887D7BB0B7E21B3DA43CDF740BB498DD270C93B3E8975D359665B4D85518EA01096A522A3F05911164C7EE76B1CF53EA837443FCEAD8B46C6E7A483933663E8BE75700E97A36376DECB88B1B1A2DA73148364F49720EAD72632193FC4E0EB96A4906FD9C126F7EEB70C0E8EA26CA02AA1FF7C39F3C4616673C71549AF9D7AF13F8726844B056E1B36A3884DFEBD83F18A2025C7A07B69C9F7EA5DF02C61BE67DA0C2AAFF3EEC918ECAB45DFD1B35DE7D1C14F23294677F25CB81321028D94DEC0E086F2DCADE44449E179FFD59AA06E12C596BF074A57E730968DDC99BDCA79A8F49599D3793977ECFFCBC936F4A97977C5DCFB5BEC537AAF507D721FAA1D5261A26009423D1910B5305B0FD43841438930D3C67169F90E8ECEA64E0792F425D44C3542E61177E57B9F45F00865A9F0EF0EF602BF606436F5D5537EB52D4DD6B0954C386FDA1F8EEAF11D3BBAED198045AD8FB35B013EABBEFB155C916F8A27F6BC4A37D3B9791AC99A75BB53727C63FBD7C2B33B7182B1A0277845394F07A39828016ECF7F72268A5DAC20FC9E275A33B596B7101D8787DDD6FD99399E74609C3E23BA2078DD139EEFC7F214A8E6DFE8FA4CF991576B8CED752A18C8947247A55A5B9 +Digest: 08E868295753F0C4E5295CE232BE7ABE89E0F0D4B6A1116FB1530EC79DC2DD79 +Test: Verify +# +Message: C34F284AE34A9C84A8DD7832927AE3A0E5D17932D5377D063AB8A23B6B152ADC1C50DD570896BDA1BD5382BEC447EB5816A0651748EF55616ACB64B0E0EDB06A533FE041B4CB89363941BCFD19E70B7EFE54632EFA7CA7784490629B2F776A391B1E5DC9543A1C0F9CDB69D2DDCB8C2E10AB3F8ECC79AD06CC68D21C394E6783EA7C5AA1CA61E852E02CC4BCA226835FB5F861490EA2F5F5ED20B07F089EBBF957DC58AF12B690B735204437DD1E89B38BA82E1A81D7D3430DCA5C572467B2559744E425FAC30CBAA3A89263CF2ED65482E5C8175AE76C072CF18A04240A634C5A71E57C24436BAFAE0315EAB6A48F08B92EB5C315DD15AF8B2B20D358B618C182EE09F6EA67343D5D3E501F02A5DB83AC6428CC8B8ECE6E31C8A593B8141A3AA0F7E0A094D78C81EB7E960548731F608E995ABFDFDC5BC61E3C4FCBA3422D1C478BED0A75B52EB33671127D247A26FD42B905698F1C45431718455F0CB0A7ECF3C1F9F660838A1526954D7C3D4FDAFD7AFDE1B308A6C7A172322FF7D9626666DE8553256DD19DACA11C48773C89AAB59D899BAA4FB09B6D359C7C8779D0281DC21FDD813D1D7A94D0874697892D2BE157420A7BFBD1678AEBEE588FC33B01C54DB9B2830DED518C6253E2C91B8ACCBF504A5500913FF12AD2FA66AEB8FFCA331D24CC71F41F4009436C8618993EEBEFD49772E18FD3D8E5329E229A1B6EE94F5E4CC90B70230B612CE1565887AB1C43D87E12D36F293BCA8DCE78048BD579BB6A8D2C3AB2B1F8DF00F11DD1D9DFC7E8AA374497F5CC01EEB04E3C4C0269479C633C9536601141E1B59B6A23F56E9EA77DCB141FC1F4138DCD564FD17279264653884D64BC98D770662FA14C01EEEB4B94ED0C631BFC305057837415C0701C9F70E85298D5AC4DC88279E88BCFB7BACFC4290799553DFD552BF11C4BB35EF938ACCB879087342ED77315E1A74B97D4B4C290925CA0A61F6C34889FE978ABACEA078EB05BF050133746135FCE3C4877070DC01FC53F6E534E1DD773957698E5C951191469462D7DE83E785E0647C751D05794D0A2405A85F87F4D780F73A8F9C1E3F17723B51FB932BFD6D175940521F6CD3B5A884C8CE7D1BDCBB188B5FDE4BE98EE67D976846C59BF7EE5AE19DAF02C219C3DE722A7E31ACDA8221D22A8C39E09C5198FF4CB671AFDABCD5D3C00583BA99758B9B2D58DABA4D857E64576E6CD6FCDA76F4AA37D1FBED8054E2359DAB6D70ACD0B7350E4CB4083D1DAA2B404E80383836676F1D873C0FC151BB74B1452BDBD860942A36C87523B5FB752248188ECC815D1AEEF8E7FB1E57A1B267F3F3ED6F83566A7B0DB5E66DDBC83F64D65 +Digest: 1EFB7455B8102BC754E5764AD367F97398F8DBC423CA7FB19AC83CD6100916F4 +Test: Verify +# +Message: 4B202C77B66FC98A7EF8BA43C56C0C965F10AE09E8B1F8343FED827B854FB73EC0AF88A9B6192150723E4F2A563FDAA4E89956D565F3BD31D0E6A4F99CF53F7D91EA26E903622CF90994E2ECA8A60DD06589BF5D70683717DD0990EF54683649F284D9774E79B4E2351E400B8BFCAE29E596EBE0ED82153030B3A59F88B5C0A3A173055286CEC1A9D2920802D60DBAE9B41A2A16C6DDBDD0ED5F6014592DCC89800EDF9249015CBC0EC068BB87AD813684159A58136D03F3C196E21F4DCD32037FBDBDF7B67DB5DB633848C2DD3B73F94D739383B69ACFCA5ADE6F6B818B08BEAA2E220033FF39B8FEC4DC19E6C44DBA0439270377B89FA2D19B7FF9936EC2089D87E62B0E161BC14BB91356E63396E0C7AFF680A1D5C1EEEB7B44198A2A59DABB65CB085BFF6706C5123EE04336B770DA8293D12AB04A9DB81C3E5743E63A06FF80031B67A4DFE37BE1E474DEA4BEA9BE0670CAC86B1AFD6B5BB8582C4E0336E250308DEFFBA82A83C8794FD1ACAC089DC05A9A3653DA025ED968A6FC3FBA9485664DB62AC9B8A46E914B2CA596880B559E835A27E1ABBEE4A8FFE46F3BE9C8815EC43DCAC5D62C90F9379BB7C72D87D2AFFD398BFD7112CD142770BBA8DCDA5EF7D223A5188AD8BBA4598759F6C39A84A8AEDFF8605D51061572A5BAA5CF8D8A257870E4A4685F67B80426B5B3005CEBA85320ED014C6E63F571E80FED9B5902B4C2B5385A68289DAE665CAB9EB08510F95865467F17C61D1AE9636CADA102791FF1B02EDEE1D99F969B72A5063C15DAD03E8834E085FFB9E66FE35C7B06C4484970ED5C89F7E8EF430C65A310662C053220C67F45DEAC5F4E2F0EFF2EE7EE2DCFD65F77863B0862346FAB3ABFABA9E064823B89797FD39CD9178B590AD574D07B00DE3B020DC64E57C897737B5479630A7D76E875B690859781610524DC6DF9BA30F348C9B5C90E0A15FBA6E0385AE7ACF1D1D0BCBA1D664A38A34D212F9C22BDA9FBC0DCFCFAA3EB2FE23DBB99D041D5C6066473E68E8E507D6B24624FE5951380E9C3B21EF8E45920BC57702635FE82853659C44EEDE693D21EB0F21C3E233760DB61BC25128D626306A3774B0DC999AA3EB09E0AD2778DEAE4607A00C038E72FF5B37839B9427E860F2EA1C1815D778DE7381A688010C6BC85074BB13C8FF43F0440A999C1B5369DFB45724C562C1E89DE10431D46FAD0BE5A099821E4BC4FE946D1A92A354FB6A6BBD956622F58D7C5DD220E1D4F659A6619F516F030CD36DB2DEAABE6A0ABCB238632ABDF99D7F2D3FBDD4F3CF388EEB2942C1C74A1FC1072DB4E40938B9E962A420F59EAEC7A585999CB22A708D6A114CB21A8D6DCEF4EC0131DD24ABFA847232CCF8524E7F28D07A1A2E822B366A179245C3D9AE4291E006E +Digest: BAD3209CC15AEAD684DE941BEAFE9AEBBC6102F0CAC3192A7A8BE0544D369382 +Test: Verify +# +Message: 00AEC4829820FB01E7C82F8FE892C32DBAC189ACE8A55770E84277378AAC80C768539B96060E1C7FBB8380A9F6F7C476C90427047B488064F52E55D971EE39D043C9715E798060C191006C4C999A17792C263F7DC68B7768D66848D5556C638E3ECAFFF47E8E036900C3C5F8D434F98C114F398599251D84F22B80C4C19FE7A28E6621A0F369C92ABE427BA3FFAF9B9B5968AF7171E8D06F62B875D2501C85CB922155B5A038BD5830E7AB55EA1A70520B6FD4C98792523FB38EC3517FBA31F6DE55667B32A66AB199914C5FC267D435EB5CB197BF9E5CCB01AA3A385EF28A5209910BECAEBAEF5560886277CD01448E62B9B51EC1EEBAE368918C07FEB5873E6BC11B40A9DE09A1FD91A9CF1B42FDD880E0EAF45D9C75C937600DC1EB66A60663F1BF7791E1CD760928FDB7E05F496C359F322084573233D40D749EC318B9B335D6EB079CFE6CA0CCC5EAE51AD876E35A0792AB80B947A5986E9431D4D35D68BCC4319663748F31B55C503DF339C5375BF8C6BD58CE1F2699DD7A6BB47AA36D993A61AB574F710D80E1792D8EE92B08568B829D318087B1D9B4649EFEA73C4597D08E577A3BAF0DEAEFF918EBF0DB25638FFD229B78404CBE8EAA20E0119C6BC8F1A4910E1C646DC637371DD0B38CF103430538B7FEBD0065E5F677DC80CF6CE06EBDB17124627DC1C0D8D8D315D34A438CE92A07548AF7DAC6C3227D9CE8AFDB16EFD1AA18C62BF48F39515FB6DC7FD7373FE017E81898A398426676BE1B261EBDB45021994D5EBC0FE35251F052C711226B2AD0C81E5F438531B62BC758E3D788D8F88A0162E58407B26EDBDC88AC4F26EF5F98F6F1D8665263E1E0F7DE733E9DA5CEE228122FF0387955D2C8704AB1AAA7A712164C7C37EDFFB0F3B1E6C3596AEF2D9C98649105455257C0D553948DAB52E4FB03A73DA6E8BAA553C67F0C66C03AEA9AA401BEFF4D91DF9F0D42DFED81B76ABD688A152D63128E7A8930046091BCC3BAE08130112CB977B61C3A952C5E704F1BE948386B707E7A12D938BCC51ADB84B44B9B7B9ACD35BAEE008E0181E2E809745C2741BD7C9917B5A2B38B6319B0801F913688706EEB7E5ABA27B1CB06313758EB26713D1F46A391F4AC00BC039A6F6E1D66D901D2F3E8349BDA776EF4EA7C43280F023BAF8DCCEB7D97D0E13DCB9C3493BA5857667C05D453420029F229161E906B83978A8F9349F56C7492E658341A8D4CBE1F2FC296C510EAD210437E02272B0CDCC25D393D556A7DD7338F2DAA600D85AB279C4506F613E3603E14185FD70D5D2DA28A14B51223C900D3ECA641E622123BDC30B59AD2CF053E626E161A159C9888EE09F887731E27354553BDE4861308383C7B85000AEED7583D0EBB68ED2D57318C00A8D1AF065B6BB3163991F3CA55FF3E315AA1C61B83D00F0BD894C2A27B19419C824995BF069E5E004BD08A +Digest: C4DE2EAFE1BCA8D624C980F2A9FEEE7088A401909C06DC4427E87B0B21346F1F +Test: Verify +# +Message: 25B0C64B9FC2A87F5C5768C15B08ED23D65159BFF67C73463C166931AD16F8895C759F9B8D17D02DEA67C4861AD114008804BF42AA923E44FF4D9EE535E15FDC37C779B68DF38EA2FDAF22CDFDA55E032A13037988A47B6B0C6C82CDCBD8932B822F3511D6A10D14E4B3A3548954CB5EA83735E540518ABD011518C732895BBA39F168A1D1ECFC48CA18CC45F0C9371CA6B8A114D28DC9035EFB39065CE3AC7633C3CE51A44C6E1E6D060AB72184B848F2D0FC0C74B0701FA7A0B90BEAFE12F15BF73995422B2D8E8F8840A3D125B940B962DB989A64DC0DA019F990B910779489ED928971C340382EA20780D33D36941A815E039EB691EB6A813B966EEDBCE7E376D2958514431EA2304D8967DA6174CF2825CEA3C2C677F63CC03FAEB29E4128477652B650645F032DEC67BEC73815A1313AFABEC6109DA4E490A07A63C3BDC9C8559E8F77B5EA64BAE3E56826A8AC8FAB0CDF33EBDF13265F2F4FFC6985AB494BB7AA9986DAD809C1B276B1BC017DB834BC647EEF4D3817536B7A570C31C81477407D6C48AA1FC21B585D434A77C16F99A61464A3FA7031EBB2855591615B6AE93458B37976ADE5CCE6DE6E6CD3A7A85EE523DF62BD9781AD06896923CF19F92C5D9FD9537AB81AED00663075C1031A30C35A6AF82BE96E0354FE0CB5B75E05AF70A3D1AA8BC1575103DEFADA1F58DCCD1A4E13C1076E515145152EDCC633A503693045776474ABC94A59A89DF79EC7D6BA89C88C7A76C8559A920276100D8C4AA7E466602F4A2DEB8A195639437A07878D8B05D3A91A695150A1DCCCC125CD269E40C40624A81A647B2FC52526C0F9DFCCBD96AE81FC868252F76526A7EBE0C7456E7B91ACDFFA443AD3F5DDF04B93914519926C30B50F6FB699E50E5AD790E5251E9869C148E39ABC948595326169B1071E78D9E704959A5AA1F40E79669E10B2C0C6C73C7678978993B12F5B8E4E8CAFA1682AF75801FD1D4401216D9ED3C8A2DD3257AEA6E524D73E1790CFB54291BE663EF6DC05D759C229CEE5B338D3FB3E416DDBF1E510848B55892D4EEB81B01DF769B3B76AEAB821FFCCBBDAF5C74212F328568137B56E316FBBF4F1079D72FA51CD44A4E21FF3EDC438CAE7E9F579093F354DE4B8A759ADE4D633A00890C8AB356FA23C6E1DE422D0F0C1D21EDC4CE311EEDD6415D6618D557FE9FBB2FC988B15993A92A3EF67921413C910030495E376AE479DC96CDB984934E9214ACB8F0A659E1571444F1745A4C75BBA8CF71390A345F26DAFEC6EBB5473AB13D1E457BCA25381C29801A2E568F93B6CDF866905D97519C459FD7B7BBA63BE245618B0D3A317C61088A8EE03BF485CD5EE5F5180C36EFB18549A9BD88BCCEB2DA051690009D4E5D09B47BDF8EE0E8A41480C9562ED6A66151E6A57E57DB4962A2C01E6147C384BF30EFD7606AE34D9A7C3253E40BAED1F81F3CED67FD7C6D9657BD13CA20D8A5A77B17EBDEA810D41EF2BCD +Digest: B984273042377B773C4ECBF16C14DB2FE09E1FD2E748F969ACB34B562CC0AD1D +Test: Verify +# +Message: 8C79F6D6E4BFC90D93F224EBC03AEC0EE8E56BD28AFCACC5A595815B344D58E406890034714E0E877C23C8D30D6DB98EE370605618FF8667AB0843DD9DD8C2D089733718FD1F596127ED244E1A6AA4DA71484BBED286715CC6268FCEE54FB02D1A1173881263F1D2A713FC56960265504728EB3573A06540B59D755A00B36B0D15C59677888E6B072319A58CC5674734FBC6969AAEA50AC1EECCE02566F0933F1717C4B783DFDAD6D575DDF1849E423D27BC5CE6C3C8FC13E085811A7762E3B089C2DC53A6BCB4C1BF994D6016FF1CAE513E88CF57F13768100EEAFF1D1F96D07DEA0B326514A7EEC639A87E158BFF7E51A04EBF22FF3194498BFB3B2A11009375EC50E537F45303D3EEC5E9743123961D9533F7605B343FB0A2BDB030CA3F32D09CD0DFC36FF5FC51596B8F94F5DC5BAAE54D87F070E38B9AC30E4C9AAEB776484520EAAA2C7D26C2D6A5379D8033D303C99D52D878981AADCCE919E88F3F72C56C28F59EF4E9D37B60C9E2A8FE22F6186A8F1B5A4A03525D849E9AFB4B485CCE841D47A3DE05A791F75C8761EAF6F7CED9EE37A69318150F0DCDF877A6C37A7D12316A55EAEF0362DBC73F7223D1C0D08A612F084E82FDD3A3828A9628F75AF757454E19BBB8778B5CF3920439E95954AB6806E1539FE5361C12718D6ED3AB64651A3D503680D99CCD6AB281CEF8264DE9447AE936FB02A6079D9A53B85A8671EA10420D8CAE9E32983C40C922167E67B4C9DDDE096A4F6E3E3A03A8E7A4E6834D609B2F02DA92104E5444BBD208A7CB18EB277D6E822F44AC234D16683277BECBC08A434B90839DA7AC31E7D6A8C35D2B4E49152E2BA9FC8F5F9F1591DB0BC5B6E86DD30B9E7B9CE35A3F8706FDF8F86AA4DB1EF6E70C0388A963D8B325FB7F1C2F876B6284A8EB967924AA4BCA5283DA951267D342E4E892C31AD6EA78ED417E813E76C8275FB099951F80EDB04C60C06A8D0EF22402B6D984721C0D8701889F04E08160194F5169CE65469B916D4E16741D1D5496E14DF263AB0893799C39197A177EE04F83F2680674B8A30AB17B274B54BE2B03DC54FB05E79FF36FEB4584100A534B67E7AA6E61866A9B79A8F9B96E7D3D72991B0F337E668411B5EA413EE8C2EDC0FF240EC1BD661B872218C5978156A31D70BA48D775E518D10CFCEB00A6CA9F1D6E6B63501DA69A69C5CB785F1248DBE390748AA565F41D6F124CCD1DBE114C2503AFFFBA925D7FD8A57F31885D8733F473EA4257AF149E069BF3D9D200077D9FB43349DE9E3B02912CE8356F24B2EEB3488C0DAB35E4C5F0F1FF740F3C79044E3836CC039A8BCA6E098B8E56C37F13670AD0C2046D701F92720A627AF28DB8136D8AB6A84F74E56F84225D6AAA2C216B6FDADC0E5B1E7FF902973147A77BFB8C3D4B249F40C9EA0EB7F0D66E791ECBB1CB5BE8E60E24665C6FB61242BE59A70D12364415326F7205BED2FFBCBA9E4F41F128E9DD019E258DD0D336D7DBEC8D4E80810B370E553E6AB21F64371B73A3295CD3B63FA4FF7EBE82D3B30D2B6D7BD6F34B7F52F0A0828656A651C59F245C8489AD43E1CD2B +Digest: E4AEF447CA3A3497B17B1FFE3DE1DA3E5908498C4A2EAB43065F0B36B81AEC51 +Test: Verify +# +Message: 18BEEAD26C6770CDCDFF27398838CD1CFA9DCF129235DBEE6D7FED2B259E0CC1EB80627FE2C3D969A3C427B5A35A53C75562991A2ED4E76703ECFEFAAF3B8B46308F410DBD72D9D6E4E1A87C68B3DDA348D8B2CFD4B8FA90B5B125ACB6DB65DCD678AC6364834087B3A3FF62B82C1F59BE67D45BDF78C8294D8BD2583EA69B514CBF09FE181E70E751925C8F7595DF5551C1CD3F0419EA46AC09F3FEFC228DD0284E5F65E2D3B6D82E091980AC6CA8DDDA585DBA5F958225BC36615DE5BF99F889E8188DE5C62A0131A5ECAEA957BC234D189153F31163BC1F877523613760C999682FA67D074FA7D8E3D7849B47A14BCDF275AADDDB3B9147BC55770E252F9C9E6A42F6EBB6C8CD68595FD83F54F9BF669B80009FA4C6553A25E9232D41A0D29ADE77B05CE826C47E0CAC305C42A6F0F77281060A111598CB8994DADCDD9E138CA0399C2BA0D2990C1BDA6C8EECEB991A9848D3F93953334326BEA09D7F9A8142BE7359A77B17D5C2DD44CAF3D106E2A057005BE8DE031A005ED0DD0A7151D0193693D2B874E24D749432E28328A1DEA8B73A003BC1CA0A3E81C71D2B63BEF8EBAE97038072487C91025E6B0C3FA937AFEC6063393A171D2B0B45E8F138D07391DC4279164A486E4CBE2C5C098ABCBEBE3302715A808410CF3BACCDCCECB0DE96E863222962F7BF5B72C46F09D0CC059BADEC899057B028A64834F88B1609433DE7A5F3479E0059E040F7E76402E8FAD0AA5142C516769DC48C12C30C312D63EE625643F6B794FC3289B7C736A93072A208AC4D3D89120FBEF6719D79F1DCB4C9E501F57FEFB2C8D1442DB0C3F792E08F636E3BDDC63C36E1A0A5D3565B5E1FD012F869407729DAEBC63BDFE0C89E8FA7FFE0941CA18EA6C6CA8F8BA63975AE4DD2CBB82FD709161B3FF631654CEA0E175A24E276335510BC594B2C878447163943818EEE7329CE0013B3A5031E2338D0A3DA8F761953441E2F0D4E0492CBC92CEDB1FCE7CB3C1D3B0DF3A5A77AEE991A73FD53DCB7AF9F1C82DC7224D259510B5CCFAE934E1F2D3772E00688E9BE42EB1D70C2B5DDC7C941DF3B289AE52ACAC46C6D4FC1711D6A122AADC4E9E823548F17FC71B65C3AB541DB25EC7A286B904D258AAB24700869EA6C3E64232137F6A1F4C37E28F011F0CF654481A1EB244770ABBBF21685C652CF14C19B86BA6629F11AF0B5FAF85BAF40EAD2F6AA2A35DF61052446036982F244962D5CF08869AB2756A64682346676B6AD76B833E7180319DD812A78CB21AA1495F5309DD32ED3A9E57F9B23E5271280598DCE19AF338F2E5503D13364BA82E9FDE271D9544EDE323D2CE61C1ABCBC315455CF860C45B711158147CB13707C41FDDABAE6F6C3364F713AC85CAFF832ECFBEDBE1EC6B92977B8A3C1F302690AE2A65E9A2E976E892D96B9A1E6976540A8BB7885BEEE03A5516D6F030F7C7FCFA6A8DB0E5EB725B71D1EE1B97E1865C975041DDC994F82E6E54FD15761F2E7818DD788F81958C53C94AA7F10A76D7E6135D4E191ECADEA836AFCB752601D66AE2EBBB1BA10230204EFB31A9070973691EB53EB28A6DEAB864EC4250A77FDE081AF305863A3E3DDA983D6136A2F87BFD5CA8FF57D0BE890A01606E18B3466A4775C0D782BA7 +Digest: 53017A8C221AAD9737F2C748B2E15C9FCA1459D1B4DC8C62AC95667FB522383F +Test: Verify +# +Message: 602AFA718C8A616BA05B29EE82126097602CFEDCADFB0CA903AE3B5A9DC47858F50B13400E2B0F48DD698BE2CFACCB4DF96285739C137FA3C751B887CF5A4BBEA9B6A939B8C1AEE9E5B98459CFD983B1B6E34871624AE4E5A7475F10EDA5CD07D34A2902A7C42DC297687E3557923C0749C850D82554A40180D463BF0F9B223F937B1D0FF2C705518F6A6F1FE538D4ED8F99D0B6C18A43B7EC4B5DCB953DF8EA738BC3320EF860C804567CF6908A194095449F662317DCB984570A703278405C711ABF0154106D3086E0299594FEC1D3F04119E8D5BB6C24DDD419AA27E878DDA49D68D88BD020502DF7DA0C1E683E679DDEA402399BC63DE37F4FBD474A404D5DE87D021838E0DE8AAF61B2438A383C826C15F3F26DF04C2105F1A193757769A009A9B679721B1AA5DB1FDF1CD9A5B384E05D9ACC259B7B8273041108F334F70D47B82C5A79317014AC32243EAB023232618BD4B0B6EAC675AC3202DA7AEB3F1DE5CC1BF9D43D71ECDDC21D3797C1E387452039880314BA1C25E8F6DAD1CE29421C3935A5863561ADE953942DF2C816D195E52223C30DBB58F04627124F16D72E1F3E9AEC2DEB7A22F4F9356CECDFEA48049A1539BF6EA4660463E3E274AAFBF5FB14A5FE8E1A29A01D8B416E1B62DA44560F7E1FA198C847D120C2D7D4C1921CEF972C3D7670CEBEAEB2C1B4EA9684063D3A843B48BF7FBD68D927706A7AE760DD413FEE0B133DE823FD9BECFDD9C5FD62DB9B8D318710B0DD88F09B863D4EEC6554D2F2EA0BFFA8D5233FD978ABB60FE39840A618BB9EE2266681BAAC2C742A1A5A6B88659721C6A4DAED8DE6C6354E5E2FD24501113735001108A59B8F75439441BCCCAA33930D15A47A7BC224C1972BE70ADF640E51CBBD29E0FF3B80D58FA1B85E6BBAB21878EC5B1795FAE37D5B29A7E100C19FA2DFAA5560E7CD0400DF685945F06266BF8FAEC020D40B1FA0AC0953B20213280439CC791AE1E7D43D9135FCC6A87684365668EAF0C53022F6A1B73208B90CBB53D18CA9EF45647AAA307ABF506726A6BA34FDCF2397A6029105C15F9D1B0BE2FF75A172C9A97D1E8F2EB3852E36E9987FAEC79B8BA0790F156F8D89D252D0580ACDDA013B63C89F1FB03E656DE8BF96157DAA67693AE01871DC975D76FBD83CD7D8E8390F6FC06472772F50B30AF8FDB86E8F4C98F5808C9C2FDCEAF1239D04457154DAAF671BF7E5C41377A263B4701498CF0F42E484DC3649D5A5052A828141902322BCA78DAC0D468AC5079F2E44D95EF05CF582FBF6F73A1AFC9B10FBAA3BADD5A6B98ECAFE46D9EB4615EA21A8497056EEE520DBE8A861538301DC1D1BE6AEBE2125CA919265ADC49DCE2012D93B3EBC353E354823789043AAEF0CF1AA76B8A6386E5AE427B7A3E3B8A76FB6CD2F9DC674B86C9380B8B362CCBEEA6B4ACA62148A8FB4372D15688375691DB061B58D9804F0CDCA645292F61B603471833E66C8A9753F131A166243596F34C4E15C9948BB49C5140D585E7B2C95349B74D0BFABF9455D6013EFFBF9CF1960A6486D51148B3AE150849110A56B263268E49204584AFD890FDB0D5988E02023391114E4B264C84E4D1ECD968B630A0A90CD97A8A272275222BF98078FF189F5F30374DFFF44A74C68932595D1E52C7979B6F4A5578975AA919B76636BDB9BF91C3A3EB446B1A3A9038019E2D1AEE5A7F44453FCE4A5CB70606F1C612A7BBCBD74AB1E6E +Digest: 485BB8B76D32A10D907AEF32DECFBA0721CB6EABDB92A24025C5F8A14281FCBB +Test: Verify +# +Message: 21217C347E999255C216D1D5DA2065883FFB99C90FB09EDC937F0AA9BB5FE7D86054777CE707EF8DCC9DB3B1073CD0C964DFCE5479FDC52DFDBDFA1341590D58FD607CB4A2AD3DFDCDDBB96019081999478F72F67DD78A6CBAE21188F47C147600F1C7F11974E579678FAF7D7DE30290549A34B918F6E1204CEDE1CEEFEB031DD945A856E3D2D10D86FBF7E19F92666D3156110FED9F3FC66E6E44031A5638EE30C7B4A1853693C54A6A50640DEF29823A70FA380E41557AF35FFBD9AEA062406730CE74713876766D9F21C32CEC2A9D232B31FAA01641640C8F0ED82C531294AADB742858795673741C8F0F781DBA4F8FA93CA87314FE30BC2090519A94387A25E0E48167205341C29B55145BCD21A502C31FAA220F4C71F2FF8FAAD0CBB3BC45FA3C37E014D163268AFBF90DE9D6A15C3E3C9015952BA50CC5B8CE7F0F412ECBA6857E2393CA57AF3A075D3BAB6185048C29002521DBB906E44BEA91B4B5C3263125F0F0972DC4D18105809D4F7F6B27A46E22AB216322A5F8373F25ECBE022F3C9927D112E3D452DF242BA4A22245616C7B511E021CBB9D37170B2EA7477CAD01296FE10B1A75C77059F7951C9D032220BA516921E49D9B6CB123CE6DDE7ED571F8A885059EF478B6F4CC4D789A77A1E3475ECAA5C6BA831FD5B92E41515AF0BE44B90A316A6B42F4E6B28519C92181B845D522F7044A63A17D0FFAFF931373FCCD34062707FC0682F7A59109754AE9A1E7827BB6BAA8AC7B46EA4741AC2E4DFFB94EC292807870979DDF8F0E3D828FC6C5E859BC51159048BD95AFB6634D7E43C084A2C3C4DE2984DD7E51053573216F0031A200DA41A658054DD6E27B0432CB20736784E59F5A159E3D40035AE3EC6F6972C9A261DA66B15A5E34BBB452482360EE82653392B4261872929AB016237C1A5ABEECE8BB42F6EB12F66334AAB7ED4F29AE20DC54D258C9F93380CBB979F217BF17E0D3D6A3AAE2C7BBDB4BE7C239EE53C6B3D2BAAAC2223704858169D88E7DE67E07E354E3C325824B6AD38498181FFF72959CB8F107AD77986C580EBE65C5AC912AB9C292E471DA69A66A1F860D8F78E497BCF37B8E96F9EC60611F2BCB9589C22DC11ABBB3AB052B5FC9B0B986C90401AA155373BF2A2EF1F09389485AC48D89FB7FB725E83C62E5C95A499A776F80B03A1869F1996030324F86CBF9399F8EC35920D79DBF4868BFD83BFB401B8927D4E0BF543463BB83F394C9E8149DF50145A737D55A3F97F6F51F7E604434F25C336E34FB01F0C1F02354DDFF4268F0B29D1DA977B27F504BEAE74AF09C2F3CFECA30520770A1A7C1DCC95F4AC6F3AC5D56A902AD39DAE9F6E9649AAB3C0A8AD2EA0DD5AF1ACBD66E9267FACEC11F802738274312B6129C5D66907E43A59BBBB112EA6C3B6DE6A6D1B25AA34EDDA94E26DFCDB81519CF670ECC9280322E0AC11E50BA968202B00A86A2CB90D64A53388E5555B89723A855416C5B42AA83B2B7EEECC44E0BF927A78B027D1E17B1A224D8386E9CB3931B5AD9CCC51F48E2C61ADF55870460225D07771F6BD909FFE082B1826C407BB9230DAAE81BBB2028B44987268990DEA6EE60865A14307F5515627F860589A4EFCED39541274ACE2CEDF49B30F1AC87052A8CB0E045BB21DF19B46256EE5BE8CCB9F2E82D32904EF87D8E55DDDE2F19294918D052297FC9B465829FBADE67F8CDFE918EF466620DFA578F180091E6D3E35080A0A715B733CAA31FA0E371953F2A248F504E990BC3847A6D8239CB5701A186AEE1AB994E4F83CEA2778DF25C5182FB795642862335E5AD6923D8D773AE +Digest: AFAAD80EAA27537CC608375AB623BA76192F257AEDB75C00FAE2C6B04C30242D +Test: Verify +# +Message: 7E9621E91C4251A1A96810CA2791C489A2B6A29E9288A12B525CDC010EA85ABA10F204F887BCBD86D66521CEE189DEC4D619A8DDC7876E282B205E71F47DDD08238D5E1D3B87143A995D3B4631F91D4D7D509440DACFA29D6E527AAF82C77F04E48D30025AC96099D8E8619CD2B076B9306A107DFBBDC81CBF483215A78548FA6AB236B305D0C4BBD35EF50BF86009CCD1E7D60A267B532DC028FC884E14ABED426925196B8EF3D8232B8FCE7C8EE1ABD9D1B70B6AD4AA92A361A580719BE970F1E505B047FF829FE7DF6DE66D03068A1C30954158DB606DD4362E70CA860FA6CD147F01E038EA80B88CAA40469A556615F91C6400CC10A3405BF6FBF0FCF2026435CDF9560D39AB73893D86C8F41BD23A88C655BA9170273429015DC60712F61EB4D3389FDF95CBF9C511C554B2D27B0E8A0A80A5B51EC26996123092AB6E9B9199290C163E56805DFD1F6EF628C5A7B8CF6CE2226D7F496B14CE7FDB9357F8FC66D4588359CAC8EE3F25658E9EC0DF4D227F3A27518F7135CD802B65E00E3AA43B18795612AF768BFB7AC67AAF1271183AE41292BE4BF5005EDB95CE80F1D3E93FC59B48ECFCF1BB34612D1E909FC887F7FDA01DB2BB6919943665FBA3F280B313A924D1A799B13739DBCA4CADDE9E457F7E0FF1B8E49968F6A183D7FBC8C2B0E14B6DDD154BA5B2A63D9553D84EB6F4715F4700B270C96974049A196F9C42E6CF6E0E1D54B6B940950CFBC8BE5CE84037FBE00ADDE965391BF651247EB9E06DE598AAACE3D358A016F51DA862F39BD165A848F09801A95F5EC474DC9DD94E36285911E37FCE728E51ABDF85881291D1AB208A3A2AB45BC1D07F8D62C27E51F6957E64F02251D4E69A46AF76BA8531912752E44FD369C823E93555FEE21550FB54B84EEDE19E0A0C800BA25B18E0FAC26D14E550EA512FBB1FCC8774E52E03C19AE9F460F0D75ED8346300D6B0C806455FB43A198D2EAAA1231EEEAFC3DE635F41C037EF3C1F78C3BE8F2C98B6754077538ACA5903E041A44A374D9444C2CD9BDBE4D371D1D55353AB474956948AE9217FC91360DCB63BA25A66AA2D0C0356669D7BC37664064141E9A96B1DF0B720AAB105EB816255221F435B5AEDBE48B73370A43793BD60A76967CB33E74F2972B82EB8A1A79A2465101FF7353C07BFFCDDE5368BF292B52C5EAD1A83AAD9EDA09A8DBC2C0C6D697418162841C86637083AC49932325E7162752FD409757CCF68F4B703CC96AC3E641DC470EE9705263E0FC6872CCB038F4B718DA52F28D51DDF6AA27CD5AAF06A0834CDE9C448A39ABF73848C97A191FEF679ACEDB28F0C23D04CFE6AEF33F7E3D89E19D784C68102B5A3998F75CD0030CD4054374B9A49B3EBC187D69B15F64714AE8555F605E7712618CF34FB3D913EC43512E7EDBED23593545D7229D949B5BD81E5DB1BBFF148B686F2F48DB50F29AC1C76235E4CD2A4B82049B23994A7A13BA5BC43361E7D6476AA2A72B114B94CFA60B682679A0D59D87EA59491961CF4F16680A88AA9BF2F58603AD4412213E244811618F02CFCB49F792E07876B633BD22B5DC1631222ADAEF874018EC4C5CC3337CB20EE54ED8AEE4B273590951DB4F3E37B54318804355BAD0158400AB12189955321D53364C1E3120E585A96DAA486A313AC11BCD4A97A079ED5E5F9F22AE37E12134F60AE66AEFAE91CB90663DD9038E3BD83694DC1A6FFF1101B0C2F01EF030EE5BDA9FEDF7FA9F0B53B47D31B4DE6F0FEDA21368B308C9D29B701306C1B98995C10ED0260916C1E5CC6F708542089B1E1B0EF2E62505734BA7D904B43ABBD98C8CD834E5AB6F931754684843F2D93EDF698B53CAA9A5FBDB09A19A45D9BC3C62191FC766E5B91C67602BE5E63642B1309B838400EF4E4306B +Digest: 7F86B71B5499C02BA184BA5420B47854801B0847683B17BC05DC4E3B75CCC927 +Test: Verify +# +Message: 202AC9DA4A405D583BE68D7D0964D6BF2A6E0AC4720B6026A92AE68907464BA05210FECA55387A4C1B0FC7E8CDEFDA4DE7C6D819E9481F4DFD790603F63C387DA40705D152EE25A87F3A449821546367C21C0416EF8D299A36D55A5B1FEAF052D15CB57F18F7A6F5B410BBE177A202733B4496AB5A344EEF8C95A57B776DC88DF516119653E4E0C9F850282417F51BFF2AF1B70F0B698EF57252984CAA802810D2A1EDAC88452277D3741C597B9BF6C8E636D4F907C4893D2BA03C7974D8A70F5B9989AE818E79B692F2E551A7B533315EE222995CC7E0E57F20040D1456955A2A3756E5F9A79B53F9FC5D2029EA7E70BF40D2AEDD92AECC32FD6A18CA042D5AB7CD50E92C9559593C066CC971BEFDF82BA1D110D076C9860B4BCF7442C3588E186D3873C202E386B7F6B9FF33F4166B87459EAE5DC6E93186E1EB52B2F78387CC797B979EDDEFCB1DB46738186252C8F0064C18B4D1F5BC16416C71E10F0C859801CD177561EB8C2827D8C0BD4C8E6EA8197CF6B1F433CF3205762FEC7329E679A511EC06AB704B2E888127E7FB157166D4432DC51B17EAC24DFD3A0E4DC17BD0C2FCE69B9B12F65FCF034366152111FCD42132FC0B1B787AF33AF8D8EB7FD8B759AF3DCB83EF1432B87D3BF8495614B3A8D1D81DF7D8274B84C696A1454C930BE6FCABFA2FCB47C299D911DF7CC2E31A7411E25595CCEDB6F3ED9F1022BA7DC0E3B2EA749452F32AD022BD87AE601EC0EA295707FCBB2FC5FF9994F71FF709C4E8D77E366C5879FA485AD8D80DB42572B1034DBA70AA84AEFEB0D49A456FD8D7FE45153C33E78F59CB210A146B911F01AD295EBA0C42A1E30D8AB5000710F40838F4FADE63BEA8A677A54AA5FC7A69F1932ADFC7BE4C5A9412D4D60F73DA0E1AC861CB61BC72253BBC881D24E618F04AEE1970C091A6E8552EC78108A9103C15CFEBF97DD1E638C50B7E3351804D7CFEAB703D21C0EB0E607A5AA11DDC0D4E794882BA9A01B69CC6D9924726B9D30B81DEFC63BDDC72B095E22F32FAD6922D32E621FBC14E9CDFFCD8FA2D0A60A27D2F101C160A025FFEEBD9560850A440C8B6853AC7803C364131818CFD21D308F263314761282DAE2777BEBD12664714D06D26118CFA6F90AD2D48D2257C288B46D4158DE5ECD0D32E8136C6F2CE42811BAA72ED79C3AFCA67DF9D72F2099EEC18284856C5B76205E7C9192EE32EA04199C56934C7CB46C4A2CEBF18689FA9B74F6B096A40AECF4FC28DEC1E45D9CAA36C39F0DB99F7B12B248BA3B6F1A55F0911435BE2E2A13666EDB17E4A762223C12E59536788B7FE7636EE2AA757F566F949D1B034C79B920E521E6D26368CD85024C7F7B6DECB009B43E1BDD85117B37D950874CB91D6F25D259EE449A88C1E609792B9D1F6D66DDFC6EC133213AA2CDA56BAEC799B0041FF2EEB2361E321DA215C2E22351E084307A92D3197B4AD63409108A6508C77E6D8456E2B89CEF40734E09F43CE786F01CA56C121374FFABE12455814E8DD0ABE118B68A75DEAFC0453ADC3C786257C91CC93A7FC229B75DEE76906BF22E54A682A74DE238A6168641146AD55E71B72E03A2D596B473C54C9031E0036929990782EB24B31C723F6ACD0189B892831090FB00958A011342F57A742A7BAE7E069FA33FDF35027F7D91AB286ACC861DD14201A17ED859C2F55C112625073845EAA3BCADC5841F50510B8A4A5479D5A52A8423AACC24B9A1CCF004BD42520A20D05DBB04D7419FCE137218CD54EF2D847CF7F52FFA6680D591DB119910A81F3B8B8E4C0D94472EE8DC8FF58CB10403C9D82F23A82A41524CB81F19DFFE33A3141C7A580059CAD7FDECA38547D2A212EFAD7C9BFD201BB4E8FC7984498DA11BE27D3F93D5D12C085CACD68006024E3F4C2D3E3706821841ADE34E7C09DBE023DCB6772FFDE81E1EF3AAF6CC82FBB4873A6CE0898202ABB0ACC0577BABB9173C648E487DB +Digest: E43FDD87847CE8C2E34F4733A35F216A35924A9D1DD1F25A002A12B5A042D66B +Test: Verify +# +Message: 961B305FBD1BFFB9D77D689DDA9B699CA86924875BAF6F91609C8E63CDFB48A65F1873716DD2FAA96FD52DD871405017267E8A375020E9C8FDE55CD4BC73DB0BB472472B46A02F9EEA88110582E0E1843AA9582869F5CD0D5F5FED6659C6A4AFCF84CEB9EF38890DE3316E52D724689CEDA793B2D9E277D3529D95C8E4A0BAC24BF6C9A5F788A0CF04845DB963B16587AB1B39F4644D58864351317E9E36436D1AC9897B3418B9817542235791435CA0D18D69E3DCA8E5C61FFE0E93E4DEEAC08BDF697BAE5330B1ED9C4F36F9E6011B4A0EAE338A78AEE80353BE1D857AC7ABF50FEE56DF17225A45D52145ACF7E242FA5FC508263E885702F61E9D4FA4F38F1BC19725B3BD7E8365039AFDCCC7807327DFA229A878A0A8CE488F4A423A985D7A7A9CE8FB54893780EC75FB362743A66BA78D58CADAC5E94F2679EFFE13148AE700FCB3C83AA1BC9AFE01BA71E9DB5A3424BB1A0CA960192EF10249A574E9AEA833D16D38305DB2224E92BEC445836384F6E80BAD95BEA5713669C1C4B3BFAF991118829396C0CC9F7C5EA131A266451BCF5CAB290BA5872726713EF2C43882775C6B02470A96973A987BCD52D77FB447B80335D068453D477D8C54EAF4A36460C9A1E95E97DF8393FB5B0C12029B3E8D18BBD6515BB88089E6F55924AAE2304A3B5FD94202457F66C2687D2CC37C2653DAE395B79A2FE9B6658403C6CE3DF58C18BDF25D4562B647A5F35D4568428B73B75A19AFE5C535B1E88B11208081906781AFFD2DE4531D5A46DE5674D8805BCCB8C6546D7FD613DE078678B52139D9928F3FEB516CBC702F83EA04B25571BB06159251D299CA7F9E1CEF63A84CA73890EF65AC89E43D97443C6F0996B7EC136CE20E2F932936EA5207A58A789A51221D7B8F0959D7D99726D392B4CEC8519729495DF54B07C25ACA3000B780763B950D2DC0295C24CD54EC5C314E02780EEEFE16126560A2511E08E18E7A15121475F6FE3F16109FE0D80F64E753CA0F1F12157F533B8F5DDE8E9A4E11F1147B10C75C29DF51095CF970E59CBE8F9BE464677F4AAF7D4702AA5FC2195DEF35DAC226AB8DDE4B91D2C5CC54E80128509E25B0C019966841897B1A1DC2A68F54CFBAB9113AD07C183533FC97346A2EDBBB1D9CCFD6C95C62F0F1F77A06A2C8F37B7DA6B21226B1897AD13B8B62CEF13E5F4F43367CC949A2B0C164E0C5DEA9415C4C8BB9047B40ABC2F547D2385D3E468A43D824317B7DB52D5438FF07214905C7147F680E194C6C9CEB10891D8761E5224C51B8FA1143A64C9B304EFC96F215C32B18EB9EEE4F5C22371FDB89C9AD6F4387D54865C01E1883D7D7A0DA865ECACDC282460C39FB68F2C38D4BD18EF6F0B8803139CC4911FD496B0DD22301CA88F1949C28054FBB8992219B3E70A0680D979BC468799499791029CA4866E4AD8B0B240C3246C3E5684B207078E4471B0792A14BF42829E25A06069AB35F17F2D3A91AAF6F828FB92B691B71117C65336B44B163A71A4229672C1737727A485D483DDF72F009D19A0FA61D7E26D5472E13C1ABB8D26749DB01530BEB56F818110AD1FBC8C4DE41CD827B0823BFC2B267C1738DAB61895919DBDA1BB5D1971F860D74915BA285B6E842072F5CC4866AC192B34F7EC69E00E8C66AA8172614A2ABFA6E493FC6D46C7265282B8FD61A3A7AE2A0A50FE8C7E4B8B51FD89398403512604969E72AAEDC9E99AB77AABF1EE92D07DCD1017F5C7C7751F8C6D75C49E29589ACD6B2662E665CE08B4554AFF487C526C2AB7E0F995B9976594B3EB4101081E1CBA15C2A8596563CE0FA7D4755505CFFF45BBC4710E3299D0052996DA8FF5D475AE2AB8380831A490F72DD071B41C073062379506680C8DEA0B84AFB3A22D329E01BFAE9FA63D500376427E6D85B9C025523DC609F1CF1B22521DB6E1FBA4DB93E2B9DD17D81C238A76C83052EA33BC16A5F8350BF2D9DE2653999A609312CB8C9E3E217845BE2A677C3166103F79D162E4DD3981681556C60D2449084EAA38B4E1B975C94CE18633BB847 +Digest: A6E27A26C88ACA025559E6D57235A327225E5F20F8E4ECB06809E373F17CA2E9 +Test: Verify +# +Message: C5E4797735CF6BCCBBBC55FC1C4CEF46AEA11844E664066B8B331D9D4022EB2DE2E538981313FA131F16EB7CD5F609F5F28A3E2892113F06301353BC51E88DE60F02A41ED0AC7E1453D0DAE4D88013F51ED5E946A0E2D371F84C906AE662CD92303E3B5000ADD9459BE6117898469E4009DFC39C5E43E8E0DA3136D7C4292D30068B74DF9C780BDB0D5EF017091A48CCF3938A2460FC9C00AF941BE5C9998AF1164A292B4E8677E16A68F1A5B6DEB74DA440E34E25399D5DA32D8DEEF376CF85D510438E5FD25441D0CB75F22BAC2773CF4A2F6EF6C16D7ED7F3E41319937A8150E3891CF35F57E98A87318FAD5D1A019138374417835DA494955C4674833C4A44AF795BAA7BAE1D4784950CC820B9891B31B75FFCDCE5C6D049665F985F1EB6195735BF108F9A4DBE724DEB4C80067A611E818328171B5DBCAD4A0BA2A3E5A928E7A5500797A7153840C4588775E9DC9D4530E23476C1D7E6A8255A7F3517249FF1A5FA3AD316DD9F344BA31C1851ADD46B44D424740E34747633BBAE50D213A6FF3C1288197171C1A608C82AB95C2D59FEFDE4C5B6CE5949DFE7F1E479E811FE243FFFB79115D6BA51B22AF380128B4549F706B11CBC81DE26B06C6DC7E4C7F7E23A51B51DB1D3A3E1F44F0E85490C84155731C06B47DE1D8A88F2CC32BA516CEB0C92BCF900DF75CF8CCCF37937479DE7E7D9105B0AC0B2BD172C215790D19EF45B0797BFF2B42A71373D38E3A972DDA7FF5713679691307B52D4DCB42EF72604063C4EA4758517FBE649FAA810E994E244CE6CC395ABE80288363BB675666901ADCE28C98C8F068DCE5387BBD0CC3076B9986C054D4D8F8B8AE53551450C05EB3CED0B7C212783706BD1F84BBE4CD3CCE19F9EFAE2158CE7D54025373C1B94B96E692E6112A181A0B5E9207A4DFFF291F5E8EC9F62BC0E3D423C525FFA94A248A4C941F0E7BB2FBE8CE967DF001563312BE0CAF3E74D414F9958536453CC9B8DAAFFF85AFA4E2424E0CC7C31373BCF8FB76C6DEF21A1792716ACF134B691C0CAB10402976C05DDCB60BA1B92381EF14E3EFEDCC7E08DA9B9330D0D9D41D2CFA9BF6C5CBD847AC375EA5F2C33EEF3EC3DCD7BC49C5B3E0F3696E3A13FE97F7F12CF28E62A2D5509756B804E461502E24E197721C629C14879199A0880C9DA47381958DBC2538816CE34D41077958A6A553DB44FFF1AFD966FD8FDE9260AAFCECC4675BFFF6198ECFB1B6DFD9FA15DF4E661AFB4587E34872EC75AA40A33CD9BEEBEF4A1A55D562C9AFEB6B48708CAF60628AAB8A3A339FA50CB0860DD6ABDE73926D2CF8978D136FC35821EF9E1D11A9E8B72811CAF58BB1D01E0E95C27582705A302A14A9889AA0C72AD2F03FDB584470EC7D7A92F24FCC20A8291CA5405D1E46B060CBCF0F9B28B2B7F2726C89E8C061FE2181D588DEB39E92D79578574CB7F591D99F00C3170ED3DD4F1F212DA6D41A9705C55D5CEA49B53AA0CC944E0EF982190079C6E971D836B20274D16F43D9C2804163D445B807439D2513D3038A042A9F2DA2BC859E4BE24F97A2AD17CCF9B61F46863AD0CF6BCDE9CEABF4A816EB993878F538191ECA5C29E3FCE6861C5347E18DC8997C879DA572A218C488777302F5C519C5EA415F3AF29609AF70956E1A804563B0524F5D1910BA8C53E2D0657CC78E35524358F0DD2A285CEEA1E36E7DD13A21C6EF97812ABDCF7C4364341F165DD9E187C923ADF95E00398302FEA4E92A148D0B0CBBB51EC34C924DF70EFED216A2F637AA5253C658814986329A827611240F4D880D7874BCA36A218700CFAFBB7588DD71AB80727332763DA02CFA2D4D0EA588F7F403101AAA72E0579E0642AA36F72F4840FC3DF72802A4F3187338736A478A06FA7A93550DC6E971C2B71D75369F94EB276ECE2CD3D8C9BA9CA525388A9F88789DD21A63080D5582D3C8B617E7635175FED9CCE812338CE2222F32E7ACB48EBCDDFEB31F036D0E26BF39B4153C7A5577DE560A01CFB246B8508644AED0C5E7472D7B904A38238A46D3484A17E4DDF0AB14512 +Digest: 889C3CFF6E25BDF332E1FDE1B40700BB352261917B158BFEC204CEA69F3B57C7 +Test: Verify +# +Message: 2ED63642F11E90309915AA8246976B74EB023286E99C4AD2DF1759926E728FE58B3C3E5D1DD679D38A3448D71B68685CA064EDFEC28352D1FFF1E5B2EFF33A0CF8507A9D575FDAF379B8DDC03207780007CC7961F88140C9C3B082C64B339F7B4254BA8E701807D2C3F333E79B32665CA9A13F573BAF7E882D8DDCEE9C85F16F91A6AD6E51CDEA5761531008AB73A70D34D8CD1A0BC30BBECB1F4B4AF2A4B93F58B5B417D4C49E22F42997E53004F0EECC4ADF5FEF17BA93E3F29C898792385D25FC8B2938611ACDAD6EC45D96AA96C7FD338875BB7A4FEFDF7D64DB2C718BA7D833A7C5B0C1B517A2381F8147AC2BCB832FFA8CB40C3ED97B3D8125F9AA79D0A3F87BFC029B5DA5117DB81BAD44E7240D814F4DD3398B1CD61C7C3FDE38BA9423DCFC85E0C7E0F57103BD734378A9EFF4A6DEBB8B2AB66C65C3B00195965093622629D32A420A8F144A0C3DB0AC0A2872B92AF67FA160B671A06609901A8F534D9C667DAFFA1DA14AF5A469107265E600A7DFECA4FAA2368503E2ECE1E972C6800B3CE9D5A42A6E2AE265A2AC4EF66B807A3F92A1D309552F04785704F67B21A322B0AA70F180C69F3DA524AB3491602EB6A418B18B90AE4E4D0ADBF7F6A23DB94A28A2B5D7767FDE0B82DE6C96B46D7AA551551646932CBCC3EE2878FF63FD652BA18458E7F5B5D530FFBD978ED0B0190966D48FA0DC924F27F3617BC2975BEE21BEB73B7E501D282311C057B77E4A187E9650354B7C4CE1D2F92C68E892FE6BC01E43D0EDF5DED46CEAE19423FF8C97A48A69866F1148AE7A0AA62B22D2BA27DC2751F5282EB4F110F8D2605307BBB1FDB77CC84FCBA1325DF356478B191A1A8255FFF06A11DF62E64C7C8CCCCF5659D6F62C987D649947A0B082CFD5AC3AD53A40C2EDCACDC3B761476CA7F7300271079A4CF7EC138615699DCCBDE71581A2CA9193F28AE017D08853E9E052FAF03A45616BF31E12F8CE72CF0960CAF1295B1DD1C457822089925BADC26ACB8578E30AC82B956C1AFECE1A9955DF4DD41EEA505677D091B0784C92160CB82D7C46E25F482CC0D8390856F0E984D83C8A7014BEBE2293AD99366423B515C17B401EE00516E015CC256E88D16DA5648D05DC3291714E8678AB2BB7CEF2C7304CEB4EBD9CB08026CF9A4D1796C381DB3954DB7A047D4F921044C6980857E15ECBF724997B38F43367AFA237660320D177E4CEF78F6BB982780FCF5C9ACAA33F597A455FD8351680ACE6B2F4F45BAD8A20AF5DCC58A82345FA1AC94D30BAD1F9C18D6D65374F9820E78A268316F0D4E2E75AB10F5CFCC2E91F5358F5D91CAEA29E30703F3BE7DF9D2E8C6C45C83C3AC72C76B9F9D004145E6B8E9D9436BB8650AF4C3223372B5C3D4B57514FDB441F00EC984BD56483424FEC6BDF28D1E3C297A527631EF73EBA4BA230A14629EE8BB790A914DA7CDE7B45E6145F2220C2BBB22BCB0CAEB268A7CF3D89DE9834E91A07BF15D47DF89E4427E51BBA39FCF1F8FF1E8F2B1DD0CBD4999E6A3A4046B8E915729D8D351AA5E852985CB6716485EDEA922DA8D14F9C8D58DCC7C1E468E60791A8152C2B9595C90C37CDE9AA510D024B333516223CDFFECE26DB6835CC2005B3FB825FB1AB361EB0D9F18776E9A3ED9FC3C21683F1C11850EFD148BDDFD60402636DDCA03462CA53D1E2960A9C9137837BBFA60CA4911D6E65FB67BC9D8C5A82B91B3C552F80D3FBB80AEC4E04B7C245A9167BE76F17A0EA94843C8EC14190D1A246A4C3AC5623AF683E1D128D99DDB3807C50015D6D4710B60EF5A7E4761FE833D4FDCE04F8EB169380DF3869A244D5CE2522A63DC13DBEFB3F3343F30E62B0574BA0BD4DAE9952A7B8E5E7D869DE363D1345FBD7C5FC2BEB8BCFA467920855C3971883FDF4F877B092E82B43652ABA48C7DA86B81F3B813576EE5529E49EECB026431D998E111F1CC79EC4EDFD5ED01E9012CEB5041DC94FA1B608E67B9CB0C7B77C6B21B601E2E3859E946E608A269BFE59A2296FB6F1AF0F88B3B7C3CB18DEC538D5E79A31C6BF5B3B7573FB1A4344AC6B2ABF8319D7341A11942A0245C92BD1E6E0004D14E86DBF8D54FAA8E56C1B212615D1 +Digest: 6896B9C8D9E814345512D94892A35F3542EB16B11BEB3EB2478615E7C9CE47C1 +Test: Verify +# +Message: 8F67E84AA1AF000CE65B82AF1DD10DB6E2F5179606188EF3B3802CBFFAF0E81E094630E44940974E26E75CE2877D099B1AD28103372A4295B7973EC4CF693E73B9C28F44E1A2DA942541A7050C450EE5FBCB9EA15F940F88AF25A6245DF1F30165C9D9F93E6911AF4B0F340B458D17CAE2F69CC93587561ABD726C16466EBB1906D6EC87A5DFD2EFD0EF9A08D5EB524671752CFEB4388129FD03B09066A7542EEDD288CC7FDBAD58A9B6144ED991702C272802E920F651D693ADC9C7DB1FBBCEB7EF8CAE49D2E6800A77828EEB61B51048D468EE4859249BA91748CC41279480B892BC17E0E179FD86273F7A549E916AD37FA046849189ABCD85B5FACF38525550C38A62128F91B1CD20DCECCC539893A3DBB4EE3313364300B1E4CC322DDD9E988331FB18C7DAA9D23AFBC232842F15358CB307E717BDC5626DB373D9ECC5CA62268B527E9A31937DF903DA6D2F25DC923E13A31105F74DB2AEBE3D910F8BA830481491CD4EE2127B7759D5F05CB9B3D02B4B15342C1FD749426DEED3E88541AA4057D08B2E4FB31418F1DD5CCF5C8EC910EB5C3FCCA04939E240A06D20C095B9CAB23E58B106952015110BC8997DE8F55D0086F7D2A6F1E1687B3FA144B2B2F7BD1A4D93CBE2A295E40C8C2059BDEE0960221D5480D1BD0EA13DFF7910BB2348A78FB70B31832CFC0932C2B0CC11E98E5A4FD28C697E59AE084F223E35612B47511F60D8172D97896A069F6E3062465419A8EEF186D2DB91C95FD9C845DD94B33738F657CAE9F6473BB6C3B194AEB456BF3AA0CCDE4B7565269EB1E6D9A7B0713E8BDEA9D47935D009424F4CA01B4996FB8CA769FE9D6D3C064CE7897868D7FD581F8BF2642F1D68C7918AD3EBBBDAE37C7F5BC0A3F0712B300190D534014057D9790E5D87C9EDD588E048A448758D422AED5D3A4B82D9B9095583B7B7C7229C1EA60F69C45A7F3E9937237EAA429C233844422C66EB5E21AA2A8AEC54DF40515C668F487ABEE7CDB0671C32089A3A52806A00862C4979E63A4565CBC6118BCF78A0A950F000625FB97EB6D2E7633E31DD4F8CE6D1DAD91CC84F30E047F1A870AE6E4C63CC69E3BD93FA22B0AE3DC64F2587440F96A89D9F2E05DDE0DFE58EDFE9E58605F95E2AE28E2F948CCF7D32B176805627F5F1D7539F6E09C8AA2257E457112787B9AEE612B290A656585D81DAF10FD031CCBDC3714966707F77BF3186C7AD45F97DE6B61CB523A6CEA3BF27D8F3D7D6B6781B87A97725374B7CFA097E77BC12859E9C817813B71E676AF084E12650CF118E6DDA7892E19290CB7B54C8B21B819FACA3DF59F606D35347C17B6B12861FDC08E78F87983AE08BDF746ADED6D827A084CA009C2ECDD56217FBF981F0AE075F7C6C32305722971D38F715AF3F7A8490A558C857FD60B6912BCB3A9BE674DDD63F1B1350C9703799325250C098EB56ECBACF7F599EB7D2635A3733E9003910B3C1B5CC6C9FF9DE4BD2593F7178F1E7955A4C5B9C0096FE5D4A57E29533A794737EE25F13A8FB2714CFFAEFED96AB477AC9B537AFC4F951699E76DD2D2930E1A687436ABCC98C6B5AE5CCE20B5244E140C3EEC638B598181D5A8887FCFDB52D74C0247B623E50E95455F5577C064801275517D08E3140B3BE3B46A2AB2357AE30D3F256EEDD7BFB062F301679A0BD05B325F670987D6FA0967C15C2BA813799AEEDAD067DC49D455BA44C36082EF86D52A812D2C503122FFC4C7E99DDA2E7333973004D6239935960221C837DF97B6BC09BD17A06368A2D4E8B0A5015682B0342835022AA67EEE9D865ECCDA6B2A057378C2CFBB401DB1D3FE1EBD6B3B0D25FFB5F008890CB59C196AA8E60922620A6D7AD70135DBB312204524B1DFBAB3813DBA0334B8B5842505978DBDB037B3664A1703CB8AC886B9895B82ED3CD7F8C9C0A24FE2FE4D23E886AF40E49CED170D507318EFF261D2EF33D01122F802C00F3DD2125D800D3BEABA637DA6D02DDE116D26F82700CAD29E1254491C6AEC3E8AADC58493814EEEC63A0158014C1DFFF79CD8C2D7C2EE0EF4E7D3A2936A25611263D00DD0D2702A15B261C8F28BF2231BBF37C5821B4460B6FC9B7B5FD6DA88B95CCEC45D096A7E1B8AA7458862CA5DCEEB00ED5450375ED995ED5FEA080B6FF +Digest: DF50B70A48227D3C237E5DF3336C6BF87A263365AEB08E824D71DD42947DE27D +Test: Verify +# +Message: 7D94907C04CB55C4FDB86A027B569DF86CA9B4BA3E889D406466BF30C95F19257FC6D23DDACFBB6BD7885375AE1A6EB9A05D54937B875C4D098589C5B2E08DF79CBBB2AE3A7CE648C5A5048570A6E60FFF1BBD55B2376FE680F375CED42A9C3F5FAE4FCE1FEAAD2F610F83782503CF6B69D3AF5E632F213BF6C69E747934C3F77855D713D81573130D74EC18C6AE66B452F913261B4981C589091B6AA1BDA6FB1457EF34B46360D915B5D4A4054556271563632C7669FAC08325F837537473A995B274E8830C6FD03531D51BF9D42B3EA91D59F0C0EB41D098A3869C05F9FC02879364DA10741F5003129B4B7B5DE17761953F5B0091514E729C4C60B49F593A056ADB3C09F00B58F138A9DE02CFC29D87EEC8A7255BE6E51932C7F345A35A8C45B75B08BBBBD2B0313452E55A11788DCF312F57E59EF47E3C9771A3E0B1D3CBAD053A0DCE36FE4BAF3FE9B8DE8DBFCFAA572ACFD3E0E1A81463BCE98D1785D96E2B570C6210A7B98B20A05263A21B0BB4459996DC0D23DBCD2F516127786DA33E875DE46C387F4A88B366F4F1489B57A4103BC2017EE85C5B6CF44051B8D539A9EB3F604806BAC5D4D8415BDEAB893C67DD41EEFED7CBACB912213474B42484A72D0C3F2714824A2AC7FDEB2918EFF162718BEB0E86EDBA0A585600E0CFA7EA0892B9F9DA417F0BF005EBFAE0E010ADE781268BC01A5E307926A4329619ED3843F4AB904A4E8AF3FD687EB8A9A51C2A81FCF4B06C206AAE3DE996FE656C9593C5C1AC11073719F4FCA5B07CE69A50B1510D6694D38CD7A5629886665167B6ECD14BE57957B86AAF7A1863D01267E8EF3D0CA027065649A2319A2949E063ACDE488822393D8E7AD33D48BD57830340BDA3F5EF12E80E210AAF8C5C97E695577B7B4DCB00D3F0554B51A301FD1B968EA5B0F60F91D08941511FE97A0DC9AC9EB9C27C44AFF5FF95EC18DEFF4DC57180F29509DECB06C014D54FDA2AD84A940B7E47D5E4B67DA6A11FE2CA4FACE8E061EB23CF7D84C2C576D18C2844B087D5359FA114C4767A1167172A946C4EDD33BBCC64D011098F914A91EF1F888641461A6CE0910E63A39F5DF3BE9DB6B0B4F9401773DA0D26DF3ABDF88062D2C9153E2E4733648133C1BF7D6F8BDDFBBB9845970F3E2DBBBAE3F6E7FE3BAC6AA69D0372190972E0C0BBD52C26E1CCC1A0CA2CBC3429607282B4BA6EDA714227BC918E6A64E694B92E959BC245F5986E4AFC89686A0B227FAC0BCEE9A07B3EACECEA531C073437024741242ABB360F65F0C0DACBF4D940171A7711176B5C335DE72591FCEED8286C9AD2D5BA279DFB7E274E5363DAFB455A767F075B209BDA45D2400B9311F49B392BE01C2BB2F2181CA98CD324FEF2737709B75B1775E6B54436535B1E5DF8EC2629247655E5C741840FD620CA137AD2B9BB059840B879CC4A6D52A9BD43A6BC267F9AEEA4D9E2DA37DF308E1A2416416237292FD1EC12B6F60E73609CAFD343A075B8AA5CB306DB6CFAB527A2F511E595054CFBBA81518D83C160297C6FCCC4BA092C1C5329FF2006CACEA9146020CFA78B62742B11ACD7619A5C7BB498547C8B34D60341D8CFF06B4B87C806001F0B0550E95AF83AC1E14455860DF0E1896E00BB387D5132091F37A292BC1D704C91481F1FBEB0FE6DC678D5061A68788169338336150B17E71962C420DA742E6AFCAE32B206FB296C8C3A44403A69EA5C293136C508B871724D4929A897DA7504B4A242DDDBE3F704FB763630A59B4333CAC93B067F93CFC3BDBE5F55F4D74EBCD2A3C9F52FD5428C5BD0A1BBEB3FDBB4CBAC58283D39D95CDC9A624C2D9CA8E07B704069035019C836062CFA2567FCF6F8F06A4088C26C631C4CBC1463118F43E8BBA3B1483BAE87F5A4414C4F947E9A2504DBC676B9B8C2851D6A0E200E97118559A6677E497B61BB549F5D1B298DCFEE0A85EBABD490B769701C298A5322549A2076374DE597823ABFC877FFEBFFBC1FBE33E443801A7E74AA4019777778E7C14E8EF68E1389ADBDDC8AEFBD775C7144379EAA5F6EAC6E5D05CF37297E0854CC09884ACD569C21FC2EA6DECA75D5E3D796223297DF8DECEBEF4520EAF3001A9500D77C288AF4A811C164B3A78A251EC40883B5694F1F29EA34720A18B5099026FD3E8EE390750849F1616F486A1167651258387CDC928FE70213A2EC0CC789A18FADBAFE9B8ED711755DA4A335B35FBBF0F824F049 +Digest: D2EDDA5E0DF5B41A1BC5104AF5BE6727E4B1617174E8487301D9407E685D92F3 +Test: Verify +# +Message: 2BFC8346A2C28FB72131E56764D36F15FC86F80DE5B29738A7FAD1826ED0172997B4B058C0DD35A02E35A47F943CC8006C1510C4EC70545E725FF087AA969C0D044EC925B8AC16F10E2181C87C0537C86CCEAC5E2E071AB235A1F70E9D049E611BCA9D5869C654192678751E53E89623D78DE719B57B0EA2F4CC8194EC085F0739A9F5C165C117029C3388DC4078253753326F2CADE6E9C4D4594392D89A29B1883A93BF66FD70FFA59328169FC5A38E5D84B0F3959FDBF337281149373D91AC999C014F3D0F8C0B6264B7378ED0168FA131AB7590627778AFA6D73AE74AD9BC4F842BBAFD0345FED126AFA9FAE3130161D10F4D4AF14B2A5861F9A3E6E0A0CE584B972AC352D2A7F86B703B477CFC6927E7263DF7A016D71112ED6CDC7D223031C80BF64F6CDA4BDDA49AA511D452D8974F98B72E7FDFF88116EED9B167ACA29CFFB87366997BD0D2F792789E917CD075AFCE2CB177789FBCC4966F2A00F4AC17F14142527E05C107E8DC8D15F79AB4466810D2A0191EC884BCF049D528762D6DEB3AEB9A1DC4F9083DD698964723E2B9125406E43AC152431212CB48FE213DD30F83943ED9920A1D71B29D5C2DD938860B08A84EE67B2AB0571E53C93C410678A74625A285D52F0DA039C13BC6241087519112067806B272FC4AF0449AD0EA7A1BF6549849CDE68B66A95CB1675C072D47C569ECB9B3D2D625496F0EBD5F281B45DA0196DF85AA6E40A485E24E573BB86D9FCEB2A4C7A2B8B7C091F6C41AFBAE55C2235158AD1AD1FEA41D7CE4DCA544F650B9213ECF21D0A37635C4BDE6919027DFF73E90956E6B6E893311FD96296F7A01AC1F2A9530C58549A540B6EE4EBDF48F6C97FB82523ACD426591440F982709D10154E1BD099BA590D1EFDCAB0E6E47A438E3D20AA082C5BAECFC60AE6238E0EDECB25A14FD517D943D47DE0398F397AC55710FBF579213845F316A09599A6E8F79C1EE2B16E190BFCD8A1B3129A8837673D9DC6BFD974CBEDF55CCFAA8627379AA0A15F69D1AB63785501FC8AD9D4B115385BDA44A236B6AEC23F2D9D3D15B0CB08DADBABEDBD07A55BF7002EB65A4441A3344CA27C846205F56670C96908AE95964F37393165675530796F5C2C0BE79201A3E79E3A3F658C18147BBC202F9ACB90D6A0C34490BBCD12D06AA7F8C1673E956D465FA43E4819CE15ABD7B007D5651AF536C71472BE6C60D4196A6A78975A5390F07F0F5FC288BC70549069026486325AD2863771DFD66AF1BE43B1EB0FD32C066429E84AEF4A5E13252A4DF0FBA1E689AC7DBBAC19D8DE4094FD278E9B837F42EF01BC1ABDCFEB427373B23C85E907EAF163F34A3328EA7B4A8834A3786A6A879CFFD3E5DD29611A41ED0352F39BEEE664791EF8490EB2EBBA22F2BD64E93AA716A8AD55C08E2603DEFD8424082A2B7B063494BA2CBB27F7448DF16D79110D88915ACC79CEF7C0FABEC87F1B4CF362C78060F38BA0EC7B56EF1384037E84874723B40569F16792D7C437F8D2FD79A29C751ACCD4C21D8FDEAB72136E981F81EAACA119D969DA17A96375041AFEB91210EB5F8588BCFFBEF11D53A751897F985AF933540001498A378C03ED0863A6B04403BE64501A1F758515353A4841C5F239FE9FA5D6C672DB9EFA59BF5AFF47FF0F9E57FF470BEB1A22AEF12BC8A88E0DE5D8E1484C65600E545BF6764D7D488F672169923A81BD67EBC862AD55B2BBA90172FA1B92520B8FD556A045E41B0ABCCF3058A867776B6B0E68A9291CAA01CD305DBDB00997B8AF21D9DA07ED63263C8F4A796E98309AEEC8CB77D6992722B43051106257EB41A83312A1AE94766822E0A086C0AEE0361B44A7D9BD0B8A6764A744AB325BCABFC6A1F8F29D69C87CD95102718855BDE87827A6BB637F5ECF36109C177B4BFF16A4D1DBF7FCD417B4B019DFC84A7406A1B76540A5B5F32B93A0AFE0126E7068CB6BCD5E314AF831169549DB878923231DC6200177A5A7BE74609DDC642C595A5B5DF3FFC552178AB6C2478EFF45DD5B88A84D920F977293C3A5486FB133BB700A2EF6DB36B3A2BD474AA90948991F6C3C7460F9CFD1253D9F0BEE631361071221DF9D1557C5001D728B1BEC45DBE85E51C33A5264416366E06AEBBFA366F654004260342EBB149871EEE7A5815B6FCDA710CBE632CDFD01D3C91EB013702214645BC55C0A0201FFF642C25F3820D3D1E408123DC9C50D5889BCFDE9BF17BB778766D4B1E8AC29DE20D28DF074FDED26E2291F38E40AD3DB61B718437B128342C4C60577F532ACDF7A1F377B396B9C283 +Digest: 010DB3D07F89118B89C156585EAF724D1B8127E75F9096A0D063C0DC03B28E6E +Test: Verify +# +Message: 964C07B74E25D416FC9E572254AE8769561AC3D42F31B229993698A20EFA0991FDDC3A170E117518BE8D1F2C243086EE72ECA786BA6017F2474723536F6BE76649D71767E34010944855A1E3D87072BADE3712A633EF856597238094C490D1032E506E192093A0BFCFB99DB08AB0E950A0D407BDF462AB4127BC52CD4BF7A0913A64E11336CD507C85AF9CDAC79F67C006078DABEBCA94D37AB2FDEB91CAE9B92DE88AB8761D4FC3F59D9A77E741EB574C6A1FBE9E01DC3D163AFDD9872DCF4BD5DC44612B05E74F47B740ECB0A07E53975A60E79E7365A2415EB1D41995A5C46B980ECB00E9D0D0C290B78C36ABEA343C9344945C0F0C2956996364A40B652649307197A30D312705DCD50FFCAD5629C23FAAC502D881B547C1FFF693CF03B05C0A272E469613D672F8C7899D03399D4CD6D4A0CD6EB942056341BCA614B98E13639B2DFA07529DB81690A682D99BA36C63F7413651962535E36884174C6C3E59376AE39811E8583FC714EFBBDA2C7720B4FC67FE5F3B1D1AEB532C850615F5CD1444A1C4139958F8DA839D5CB9A63F3B7D72E70DA6BA2967147098CEEC4C9CCCBB2DA78E899688192691FFDA8FBEF46E4417C199489FF7E26A62BDFAB1B196199BB036391A1C4AC3C01836DD07175381C5EAC4D4DF9A08740D1934B34691891430514353A2E9C196980FCF843E7A2486018DF648B559AFEF4CE917A53A94049A243C8CF8D866EBA8A74D437C062907DCEA3BA5D60320B1AEDD79094BCAA636D464D3C46D77AEBF2B09ACE3E6FF96FCEF6E116180E8CEAD2478A278AEA550E9F486DFB6817457983BA0A31EC75260E27C9E0860F3D87F35BDDAE834C133AE360F0511B4761A34FF2D98E4F5BFAD231ECA53415BA3DB6E988779E2D34EAC0229DA84CE6955F45C4EF1D0BF1CFCF2DA5839BE685CE674F90EEFEAA9A0FA126ABB433E0CD92BF7EE623A5AFB08FF1FBF5328F805E656A85DB2ACA7F4B82152BB9A48CA8F9D52E27FA1D0854CC3316A3BF47362484A7B8855B694E7CDBE92EB3B95244C1921CC571B38CEE818C08C3419A23F9C23FF9009A6D357F31223A2F9446519978F2339CD635F7A2B18887D77D8FE73E9BC2F22F2A348E45B3572DE6DB755F5D41546E42E7519AB1324ABEFEA74A0BEF250FA813676DB4005EF9923A10AB0EBA337CC271C27492D282568FDB91E5B750C5B66C035E558B74994388C62CA35894CD30809386CED15699DD402908116AB1BBF57DB42E1511A5E23E4A32A1AA4F9BB08D4D95C5DB2A1C4335671D1FF42BBE051795CA93E57A15DDF95383A745525BAE6AE50AAB7B9E7FB07DB65BCC47D9D8209A0B5E469852CE2942C0E02A130BE80EDBE03DC03FE3FE46788EDE11F8FFFA160190774C74005787DBCF01440FF94AC4FC81D14C94DCD5087D11B58C1E546364F00C554445D1C19828801A188897D26ADD0CDA106318A7E87F8F3E6AB64F27AE189A8BD24FAC481D1832B98AE25E480817ED5E9D325D9E3207E09D536A8906246BA7840223EF1EC6E13A8C3B25E06C6D1D9F6804C64B8FB8FB65513AB92F11842D681D8D57F35953D1A5D25B1549CAC873169F703D4DE114894F9443B644D77667E6CDA74318FF77F71BBEBE2717ECD66B07EB44E6C62185591EA9BFDEADF89C67217821800513F01939EBF5EE155594BD3B631E20E2F3BE59FDE03F6D30CB1E09A14AC9D415334F5D9BF1CF20D98114B546CE0172E1028B1B18A03585BE42788BE62D84F6A4B508BEB4B53F4D834079CCD78889A8F50E151C0B8A10953C3B3C5781579273F425DD7857AE8395FA46C20CE2B44C768802588C3184B62F1020B221C2343B8A892936F6B4E637BE81E55A90D3552C192A0FC3454A1A6847E4197A5CC503A398206A65247139248A795458BCA8898965968B19E8A18C066518D4EE1A80044732EC17FD42E0A5ED90AC7418F1FEFF694C4F409603DE285F84DEDE6E9731D238B612C0C4F345F010A7D4D17B7EE626C59FA08F80CE9A39F284FAAEB7072F35A61F43834401B45A3852891B78E42088FEB2F179222B29AAB13A25AC99D6466B47AFE31BE25E1EFE97615E8F8B701DA22A4D7C92517955F7D5998DE879870F3710A4CB394E495802CF5F0BAC8E8FBE5E1FEF20740FFD662912A1849A9C3D4CFE8765622A31F69AB4E6FFCE4D14E565813D9898D474A6C443EB95D2E7B6E54D41C1000AE6ACD498A9C9FEE5475D4107EE0F6ED8B7EEF51ECCBBC070C58B53E11F7822D3BA18136AF00C98F70FD25E7FD2DB62E8CBF14CCF5CD130AEEE8015529ED86089896E6232F8579BF3649607799EBC9B7BD6D9C7952D9DB6C17FB9B46F202DF75882317E4A02522 +Digest: E2EC74A878EE3B21AAA267432D5C9512E6DC8B89C477BA92BB6BB97BD70AD548 +Test: Verify +# +Message: 602B73F63DD59A247038FE4C614BBCB27C9DEB466B3FBF16D88464023E8A5E9BF1F0929DEA155F37495DF2932621E50097143E5DDF4743EDC57804A748B38C74C53986169E62E4DB8EF46508DDA6CAA57A30F4560EA1EDF8525AD5ECB028AEF823414194E2138796ED537C4F0F9999E7EFF0DB063515743879263D0FA47F4548C60318645426D29710563639D40EA3DBB24035A510C322737FD148D993FB63F3EA4FD318DAA67EC8E824E177D388ECDE3F6622668C95D533F5621C6CEA34FD7C65FFE5BC37DC07EE737E2A66C7877273583A318A57B2D9D87FC39A68365C90987AD47B61AAA8913437FCBD32F46A4AC8ECDCF770AB1B952E8E29D6D2736B091CAEEAB32786156E738DBE8DEA538F5C096027FBB48E81D8F6AF858BC6F3EC1FC06F2FC4D6D0874306AFAC1A783C2EDCFEB326D0C8C25188B5F3153232AA519F6171955FA20DB0992AAB798B68E017603FC8ADDC98EB2488D1872546AD3959A50214A6360A30839D034C2DBA7DE46AAB4B342ABA862DE268D3E098EAC7DAA648D394817393B7D072FE7B9882CA709D305E1A3226A85EB1804A25D101E3EB2A3C50F3F995923323724E9DF78BCBC64CD340B9317AE0932B7222BB76F29E4AFD71564DAE16DE8A937C255E040D161E60CDBB5E626B432546A418C9EAD64ECDBAB12C280141A28534089B17343122C5A7DE5C09D89CCE56753A4ED8E0018FD2195BA6576DDAE9431FD960615A64E5DC35134CA530BB059A18379520B5E0F9EE2BE052D6C2ABE166301D5DEDB2A4F0A0492B2BAB6DB77B069173EAFF0F8012FA5645C40D4430C8B9B51C6B5D4910AE0E7109AB0989BF6EA4D960ACA7B409305D60C19053268AB6CC84B1D4FEFFE3C5B318EE3DC417B0A48A5165072DDA067E6DC82AA49432203D78D54203C230C0D93F4FC983FE810F0552322080101A56D3A150E0A1ABDF669FD0C554916EC1716D158BE85CD5915A03915484479E6D8832DC1F9F41BD898B2D5B724B2597F14DD8D3D6A96E05572655B812D5FE4FA5EAC066A4E45F8A71187EF5B3EC94B6308C59E82038411F4137F864059E08F5C3ACFE154AE1157E20FC30A8B948379C0CA1D695513B08278D0F149098D03EF244F5D87A988A248D354023097CC160123D49A928A0660C2E8B428D883F5739A9F84A92B1A96581D0D436A5DE000456003A0541EF52A60CE3F2B5773D9896AE04CDD6335B3FDBD55B018A7BC3A71F75510C251B2ECBCCD589B1677656222145459CD2E3C997625061AB067BE042886E1DEDD2AF8C5D281100F562B8170D70D283A14B1F88BE28403C45F70E6272D493FDB5ED86253054F07D1864E4F8BF1166473E42F9286604BA6F21FC6B799AA840130CF49AA997A246BF975A11B033727B2701CA97C19B7CFDFA7E89C70C3B2B66E95D4ECFB56F2136C1232F7DB4CD0A27E96F1EC6F11E531F506D1F442A1572333016D0DFBDCEFECCFC42A63E23BF046051AFA3AB65E9E2BBC4C5B8FD7210E82FBA72901A43DAB5D2A88177FF240F21D0D6C1A8C7845ABCF2A68519BB601FCFBD2D38501EA0D30D8B10069973B7DE9803EB3EF146E0563A5C08EA2633D5B66643A81F59B837C8C632C89995E2EE53FFFBAEF8CF8365D347C3B29C3758868C98208100D7AFAEEDE7732FC4632E7FC8517E7EEEDAA0A87CDF680F8794A0651A47B845FE73142A54C8AABC2CF33E940AE4D28B00FB2A157388A9641F5E5232BA8BF69707336518D4F9FE2939D3BC6B124A6CF6B4FF4A5E591DE92E6837CFDDA645A13971527D05FC30962EB1533A4487E7B8402A4BEDE72B19BAF30912570926058580D6B8F26AF3E62A572EC06F72B68BA9D9B3BE82811D473C8ED3ABC6FC556BA47C8F46895DBB5F5BA95E2F60AED5AB5EAFE4BC47B7A9F554FA83AF1DE074E942825255C5258919211AB2E17B2A2102AF1C529AABFDD4CB6052F9D65380537B15AA34B215B3B792A4DEB1BF0375C66C5600F616A099290B6F76AEC057C3C1CB52C12AF10DB5BEE4F20C9B1A33C9BE50460BA8BB6FB633F44AD4C264955A64CEE2B17DCE071128FEF3FCDFF2DBF1588E37EA6F7437830C50318EAFF8C829BC1DBBF4385DF97908ECB9959E7348F19FB17559AC7A94DA237376E0E4EC3A9875EA262616661D96E420D40761920B9E832CF02F21A85916D53E8673EB36CF44BA8B55C6217E6C285F9EF5DF800F9A3BD389D045024983ED3AA9064F20F87DE11C7BD5BA0FD3C4A9EB47196E4E3FC6B1AA38BB57177EC3FBB246B676D3668C6448BEFE3044F6B9B6D157F03870983B323EEDD097EFD4DBD6D9BF32862901DCBFB90FD338AA3EFEEFD10096770893EA84A4F282EA3291AD57A0A7F0F02A4087AB378E53D204DED8109F8004B044ACB6 +Digest: 8F8D1947FACBA17B4D51D4875AED8DFE0B5672BB8D35B80E96515DE84024B5F9 +Test: Verify +# +Message: 2E4F6580A8209D82DE8DD85C3DE5FDC9E6D37555548A78E9F28851C1D5BDDDC17ACD3348AD387CB1722AB16287CF5827244F5489B230DB23D5260E99E4440F2BABDA305C3696D81194C98D6CECBAAAC185FF1915D8446D0A4171B436C38C9F04C225EEBFD02814C650DF22161EFF2DA2755C9E30A52F8486E566C159022B5BE0605A0FECF1D645D95603473B3F0BDFA51C6EF87AC7940CD96C50DEF754DB0B253DDEABD035F447245D6D0D9585FED6C2A8A74E68224CC281D3F9643680B81C04017FA7EF1D0EFF4DB1997EB9AB3BE4E0DEB2A8BD8E27EF399A0D6E9FB1783F6BEA4269166540052DDA6CB253C003E59DB9DAEFDBBBCAF63D90C5A2B16EFDEEE24C9814D1551320B99B94680B18C1947F517B7BA756B3C561EC985CDE96949E00346B263417B1355A1D74E7DBDFE1964F8407AAC8C46CE9C77A6F60B309A05703A220D2DD95FC8A2A366C2034D38D054F6D0356F3DCD69788A36005271455826C7351D8B15483D804AFF33885F77A9869C2F3E08D6C452D73F5244D7D3DC3DB2425234AC537E8BA02B7143C5EDD4A64DF6FDF4ABEE3286EB13022CD773F6DFCFB2DC819F69B2FA264816C4429A153F77F099C4336212941A7AE2B5C6B52D9D30B6330BAB9834105CC4DB0553C1B1A59F2BE6B58684772FE7917B32A0872720FA4387A6777C30964BFD7327D6C110F6F99254F37917248C70369F6F476B5318379042F61F341242417CA1F16A5A394CB005398024673A9808E46391FF7942BF4C939B60961837FD247EF4F03821EACD7EA95E2402426C1B18E24E115DCD4C4E8B80E8CDDFD8D59ED65917E1E97D9E8F5FB454E4F5A735015DEC9B7899BF57EEF4C5570450323EC013D6270BB4510CDDFA14BEAE4866879A7F75E0A41AC4C561669417FB550B91B19F62A4B27354559B3511AC4DF2BCDBFB1E5D38BE20FA381E9C439476102F59BD2CA14695091E2BD3119CCE358227FB0B37108C1C8775423AAF815A1BE6C5D78323A313F99FEEAE070772DA90CC81C1BAD3EE6494847CCCA9F4F1900929BDFBD71FDDD86338745AFDCC174423D0046E8A65CC20FFC5CE28D1AB142902AAB4101ECEA4328F865E409DFA0D12156DD483E1F13C503222FA45DB9666D96E5A0851742BFD68793808F5AD02BA460B7C97BFF2106C2E465D94B0CF927D1CB5064B0B97312CC0198FE01DFFAE5BE480E9E907468507AF2426658F652DEEBFAF866F3C555554006F3C5BD5FE29BBB13B84520DCAE67B3AEE844070687B26D7D809576932EE84A79304727838734711BB13D671EF329E0F82D88FCE49025D82153D4536DDD3B87B548ED3B795D4BBD402555A2CE49F13DAA5481CDE8E1F046B12622F3F193E6072822A6C07A18BB4E2782B2AE36E7D3DE6428244B1F095DAA41816473CEF4A1D3795759921B70565E40DD9D1E354431B796A86443F2FC6324147AB9CF169BEC09F5F5315BDD956A4E2509E89109B0B2FBB3D1AB013B0A9521A1AE4B0600819FB2D702E077AC87FB6F5099826BF14C600E06C7DFDA82E35E254A197547180D782FA1B33DB450F325B75A6DFA31C28843D13982A317DA7E409CD143441BE53E19648634702BEE17F61EE4B38947118B1A8D73B6EB15DE4ED2644B21B82F565B94D621892005EEF84D7A2B200F35FC5C7A99456CCD8D6888D2A9B00351888A9B7DBEAD6E1A1F0F39018DAF94C36BFD559166FD66E8EF1888D45314CCE33CC6141EB1F15DE4A65199CE469B04936E302217038E00E8F8F3CF01889E2A636DC0812473D3704D5A0497121E44830DB159062CB0107B3DB9AAF0CD8F5F1C43D9EB6F1250E63E0454C45DC95DDFC419BF6A81A63463AEDCEF122F431A502BC2EEF59CAD9CD37937DA8A5D7B3A2A09260DF4EB8145393D1CBB93103B09C89E725249F5F850EDF2AFC0786A131E5DADABBEEA015CDD9D7B3C06CA25A4847D029A26E4CEE6C3522EF9E645314C57579FF592AA6C31E8874EE2CEC9EC3C870C011372303AF9505B4BA71A6C33FC5469B772D3DE1C9F7C729921F8FDA55EC651B3E1084A595D51F47C40D700B4568985096FAC15F037AB1B5A8DE7DC0E5BBFD227286A861EA11C41BE37920058E2F52E6E2F37219896C2533C997356DEDFED9112F5462338E6B237444D332785C3C43AE6482FEF05FEA61B684A3D091AFECEDA8F631D2CF3C1FC814729A663C2F7EE28A0AC70B6771C3C476B70B150FB339D83E9D176DEA562830BD19EC8D1BB4B49160C0380965234C5F4129789792248F1CCF32573430805DA3409167511B9F9F58E947D610D3A47104FA6AF0D811DB7E25A3372CDFEE548273CBEE42079BAD68B57BCA25CCBF49BAFE5097625191F7AEBE09F416CCC6149CAA68D06F5A33D839225F7D4B358B4E9F8CDCDB97860FE32428DBBF74BD0827E2D6F54A7 +Digest: 9791485E41CB42058F339F8028A2DBC6FE3F56BC9872251A9CBC84055F504A22 +Test: Verify +# +Message: D33ED4D9E057E25BA15FFADD91FAED2467B8383774ED7B31A73F1F1F28D5A9D4CC421EC076D9CF724537F3796B388663BBA176AD88F9DF8CCB853295CF19EF6C82A3BF01007429C58BF0490D83749427FA7B3D7537B4979422B507B4C6777D0EF85CB44895878CFBA952EADBA30E2AD1D65DCEAA5DCF0157A898229AD053429A2750BF5C99EBC95DD24A7F7A5A989ADD5BA0761854456D35519E7C24571600557059646ABE14BB62EF17E24510D892EBE6744859D1979A4575BE4088B99C6BC316C1C64C844F8EB9F3BB960811FF43ACCB9C02622C7FE8FEA0459A1CA56A38F0993D421DC119DC364FC443903F26A33797818DE10B2E06367F687070299A4A83F059C0C1B714DD985AAED5273C81A7DC803095DD7001F6235BE55EEF8DCA93BF0D0BA9A4FD12CCCA9E698F088FCAB13FEFC7E9E87B8519DC6703B82364AACBD59D44932BD66678DE176B11C8A78951FAA2191EB7924BF6DC53F48B5B59C7F5DC15C2C2BF4DF38017235A9D98523C19DEBDEDE9C90146C6369CFFA78D5EC3ACEBA910E02023D1F3BBC71AE1468826EDEFBBE9EA6200FCBD9B590B5ECEE135FA5652EF71C55167E825A8F0453BFA8DE83012834F3FF09ABD46B4F0EF4505B29B3A85D295461173860EB1FF1F746B4E31BF9C30D9C84904EDFD4BBAD25A35DC888D6CAA006F2E1ED8A7AEC2E1409ACC268F725047D705966D5F4E51729BCC6F9CC251FE7213A151079FF73FD26C68993DD7565DD20D044D29591A15AC302DA61C89E7A2C39CD9649B1B51E5F520BE40F0B73C2FD97A5AAC809137B5A43EA0354F787B1859357A0921144B64279ECF9904A2767C0DE8CF209F7FDF7DFF6EB548114A4B5C6EE599B56E97BFAC68652D0A100C1F50E73D51A60E90CA25E518A756CE86BB4332CC29F3C7A99F6A0D1BD1998EC9D4ACAC7E7FE239EA5834C3B2D352DA90753010C77E8CF6B0641F7410D7ED44773005F84A1CC2C8A3C270F14F18B6AAD4993296A95AC4877256E382D4A6D6F1FABB4FFED1560217ADD608901FB8FDD4333B35FB38BF08E6A9DBBBA4463C295E3C0C8A1C6970223DDE35D767B2CCFE2E0FBC4FB2E9DD90D898A9473FF369D4349004DCD2AD828C1E83B4ACE89BC5A4B5FCADBF11A9FFE3108BC8AA6DCDBF0274A983E0746DB6C605FA1EA2B9BD4944AE5A2FBCCBC03DE8A8C906341E15F65336BC933DF2B02019DFD469FC6C5D19D54BF7CE16699602250F2C93B91030C344732F844E3ACB716971D3931483CCBCE7FF0BB947D7EC16C7A32D7E501D07949418A23321E4599FE06340D0F086B6569DBD388AB97522380858C0770E75A365C722F585A82F524235C986A7D4B3456462BE78B0D5FFFD3C84899DDCF7C81CAC28662D02A168D3A80373F5582CFD9085BBE92D8EA3B74738D895F2798D63E3D59B480E13D0DFB822CF03D07D4FFD456801E158250396E9E39557A03FE17F21C55F82FA32041BD99844A26B65B68499A869613EE6A4A8FEEA39A5E8D87FAF25E30C9A6F56BAC9FEB68E54B6B2D575949474D468B2D58FC517FF152E7C8755B41DB4AD33CD27917646004EA1F5D18365B04F5DCDA5BB603896977239DEE697ED009CA0454DE4AC1DADD315C64EAAC414D10BD4B267538FE627486532F8A26A601F40C8A5786A1FD16C3A1C52471271161D5B2DF012DFC3834C1A7FD94B787E7401A05F831AE7567A5243344812A1638DBAF2E7F5845BCE8EFEDAAFB2D40DE0199E7D112C66C65080BDAA8B1D4078778545EE343D1C3F661BED0267C61A786AFDA42287E0FF9982DC685C468271A3E81B6E12CE995C65FF9066B1492B8EE20E7422027CE00D0DF1A23B237CE8BA549B9CC16C772A61EC250C013976907613A1A2DC252E54110B244BBB96B7F0E9326B5D8C84DA2986B5F5BB9D4176BAEC40547CF5806CE0356E19B876534B18A086FD0A9C5C74E1E9365A65A7E680511DBFF8062336124B40911CC3A762013E0BE9108540FC64E7B052B2BE7CB1301208A868D5DBF00BD6F300F20ED77D1B09A2D52EADB6DE1E5EAE9E35E7D93B35B917521D939BE0BA44FC7D4704AF12EB76B120131FE7CAD3057E76E1BE1B54A77246F1C2865BB4AD6DC4243370C71031BC7124629FCD0F79840F33AAC69094D83D2F3402973CC18F4D560FBD2D9015C33BA4987BAF7D7317F2C7A2694B9A94FA269B421CB961AF8AB9E5274E8D3E7664B048D98DD377A254FCC67D889C5577B7958D79B1C8219B799EC80E3502DE85E5A15CA26EAF6954F0EB37A7DF258F567C262DCAC736D77BBCE18BB096FC158A1C3E2D6D8F8D7CB74DB0712065F3AD81215CEE748A7F45DA20BF6C604FF4CE7BC9AA529C730FED0AC26F4E09F23D0844B6B533469223BB1FDB9B59DAAE825DEBDA423795FCB8100988D2E4EB3F89A1351AEEA0B7EFA1D138E76B6390B50938800A246BDE89A073B9969855169C57BC89C5578864718C109E7EEB0323F4F246DD4D30C99292E7F92E011F2A54E690DB515F7760 +Digest: 64DC32508F6ADA352D99712AA322FD2F97B07759BD1CB07B62964948F45499C8 +Test: Verify +# +Message: 0509C37C70A67D347DCAEA04FB58C2AA458F43ABBEA9C1FCF052FD929FB5B8D8400F8D74017A531F459FF1D7BA12068C61082852004BF261EF7FCC158D519285AF3BC16AB45A1D0AE291BA2285F21471893985BE34F46243C64EE50E0298B260D15E84CC45041AC70E4D4AB36A3DE3EA1F237EEEAFE9679BD8F496CCE698285BA36614CBC3F85FC9455A88CDF449C4C857795186C067A53AB837066F19F50A430135A641535D6FA96F542ED613F06631FA080508F1BF91EA8EE257048CB35256CF5FD0C11599D1F42614DE0952D314997CE5AF2F3F1B7C9C9755EEF90D70125D8EAA2BDDF201ACE7ED86B40A0F443553271E2C9B06E3D18CDE34F16070B8C3827CAC6CDBB802812A6DFC071673BB6A25600C9CEE1D9F240FC9DFEEA0271E2774B21EBA458909EF24239DE61369DFBF2DF366DD512B2CD4DBC4B58B83E11E8BE827B52C6E5A8FC7699CFBED458BB0D1256DFB16ACF0F3C1B45FB98E654790C911F99257A1A316CE2BB3D0E003F18D0572D24DA54F82E42E49C4AADF743369CE98581AB945361243C0DE1A9E7539C01CCEC6106A0324DDDCB87684B1E1D5B7DA31E962378E658C2CC3ADF7C67C3D0C3EF79D010610E4E3368EE1842020CBB7BE3FB203464B361F29A4AD8C7A95A81F104D3851FB05C4DE0977D73893C3DF7DB1727E0F068E03417087634F26D15B5E232E97073DC512E0420B642D934CB976BCB0BA24E37BDAAF5EF46CDE6E644801094A51A25E71AD4F23FAADD3413FEACA0EADE4A23C6D06032D181F955974198BBF95CA02CA05B06BB5AB5ABAEF8C7018E6480DAE327A523DA03C0BF0AC503542569EB3AC38A0C270A0CC777B467EF40A6928D2CCE4C96BB5CBF1C44A745EA73BC734CB071A335673715FD3E54FC91A3BCC2DAD676162C766056F2CC502C26D5619BC8C7E504F138C6031CB31067B3BD6862E546A8A4F2B81686E2F673DD23287D3F9DC3F0464332B6CF5F33DEB33AF55EBDA41FBAF8CAD08169D91A7F52B6007F86D7A6958D8EC03F2943E1FA5F64FC7B7C1DF52346FA211BBD1191F83EDCA6C3954426BCB4AF40F0A0955E97F6152D5CACE2322AA845EEC1C30812A3B3E3139D3BC01E97DF6435F4064A1204AED46501EB987B8410731E93D2197EAE877B566E2E5A50C3A9027FE1A461BAC959BA071C0BD21C2A4CA47FE3D604DDBCC6A557709BB9E3267D4EA0AD6DEE2F3A3616793FCE414D571176743B287EA7892E26ADA57C22072EF97361BF599ECB38D44A656D765CDB73558FCDC2DFADE8FC209C6774622042F2A0572B5B24FDBE66A4DD99F8C531C36969102D1D38FC067C047E3F413A80778C42299B9DFB1126A925ECF2BCFE22860FA3832DA3C7829E4A451A29D03F7172F2E0CEF91DAF8842195C2E61709627DC271C3F470BE36A72020EDDD08C25194613CA4B786096F8A0FB61A4DA37CA18F6ABA9F411334AE71D36AB820869239A861B8162D739A1F286FC1FA9E9D18FEAFAECD10F790FFDDC951F52FB1897C3984D6BBCEC5E4C8220C29C9C4A9471AFE502C229594D02710D0FF60D7ED92D58F45A4B233DA78E41815AE1D29C7D41E715CEB65672BA417F40DA0BA6BE6CDF17732CCCE24C90FF8ADA55AB693DE5A095103A37A1950F041C4650EEE25F926C89462506C06525AE9EFAC32CEE1424B4D67B685A10EA41AFBE99BD6F7E60B150287FE31332445D80CCC4013B796FCC1C849FE4B1E915782B2D21AE5A9498DEF2995D19240B5C095A50FEB4F4182187AE696104A7D925D4F3CC5738CEA30DE21730668473C369429C5C90CE3A2ABFC85B99E94847924B1CFC9383DBD052E2B7F3679771F94D8F36B9D3EA10E44E8A5FCCF9A95E6F169ED1892B59EAC20C755A69FC6A8734594BED33012D6849D863B51C0E7C92C1D3D02837E9F6D6902838962D8C8B5184CCA0039A5F3423DCEAB2FAFD6DB4893EACD7E52B8C97A2AAFBE1E7556E44F5CBA2B17898AFCD29ABA4D95557FDBC75B8237107BB7D6C29CF081CE09D954CA807E84C98C5042F4A7503E020AEBBDD89ED6B42373C760963D7F7F5A45B12D1EDC37D182D480EA0C5075EDD17163EF976AA12916583800D8627E0C707674528149F28E1CC53F8BB2854FE4CFB2051E039CBF5DB1C6CF3CC950BD3534E554C77B4FD46D31A2903986097CCE7EC0C5579DB552A833566DF952C1BC362EAC01D16670FED60947158A786B71E1E6A8F75F4B707CC62501B2831BD76280F71A3B8A0391184E3228AA70D949E5E28470ED26E03EE51BF78B1BD3555C381CFD56577458EC7A4E532626B332299079A352E96A9CB58F3AC8D0413C66854EFE8BF433AF6D9CE766CA7D3DE8FEFD1DBF3AE1B6BE793DEF61B73D827523B0C5AB7FA3EBF009C3E44B9F6C861880B127B2B67FDA4E11E29365CFB82D34C489F67CA57C85544DA1CB643E681FEEFEEA7BA3F265818F625EBF276F143B219A19308DB7BA42E25630E1E00145543964EB7F7AC768F84C296F5F6C07F74347AD0E25AD5308705AB686A2 +Digest: 0D8E47DEEDE8B0E8E9EC30FF13E907D2985AF8E50663555E64509F043440EEAE +Test: Verify +# +Message: 8EF7264E32B1A8B2D438A62CBCBA23A0FE46077FD3E680E543BA7E117F773BB1D48CF3C0D693B0FAD72042B9885FA1BB73EFDDB989A728E0A0C6974880856188F11147E664C410F8FB082663C414321D59D890697224E61A7759EAFC01CC258ACA4FC55153CC3EA6FD8BA47853B41DA089C7A491CFD265FDCBA335E8083AB4986A38397100D2312CEF244F0805E7E8079FB692167CE1B606823D72555EB34A5AF258D4B097CCD4B864633ADAFE4FA44E7882121629C17AD64305102B0E7AA81594EE2AECDE4ABAB31AFC5ECB5DAFF8C3AFE043BEB2AFCEDFD59B587A3D0A92153C09BD842E7A721EB61F21809AFD86E42ED193D115CC680804115151F840529F64CF13C63F27E62EFCD0EF729409A8DEEC281C7A565EF2954A0F90A1B17DA85A488CEBF78674639454ADF6B7E4215207CFD1962073814A2577AF9065A791AD20DB1B343C733B614D860E83B50A30C06A5B1B791257F2037F490E1BBEADE7EA6ECE0A1260134AACCA1D75FDB41CA94CCCE324D3F6FFA206F4E07C0CBE407167186F72F90CD1A74057DD2EAA8A06F34C936746387F09787B1E744C60BAD482F2FF466E71234B5F1D37E90CCBEF1FE840B5C9513E6C7AFB3A9571DC2A88F1190D57D2E98132AE2407F7E8C48BAD279FD419109027A101E0615326667FDC42B62A09DE3180129322DE39C13C27F967B4BECDD9C17AAD1D97016F9778834D6E5BD756AC0394FEB5975025945959B82A0FC9FD653B218A8960C319E7B56D92A38764AAC96F970CE9ADA3A802E30AF88830660DA9E993BD2BA0141C22B3C277DB4C1C36A84104E7C8A797EDF038C19995A7ED7B47D1CE3E67D4DA28D7D623D75E9A8C76AFCBB7497AB856120572D7C297F80A67FD667D2482D7F48D47D7A6917AA42B8E0A1320B0770E1216FEEDCBB7373D437F4B1673049AD9FB1D25A3230BD3C06D7644DCCD0132203A49EA614E61EA178399A1B68934039A44474B5F34C8B0DEF39E8E69277CF60B32A37A7777F8F0AF7D6920726AECEC2D2C4C46D84CAC066C047071FEA5B2C346A544B6A2E8B81B8D33C12701CACD81813B8EBEB725D72A746D00B43747B048B748D7D54E3E7C02FD88858867B3E08E0CEE5C7A43CB9CB2879DC70E9E15B8142967476D1D74DDE09545AA989D9CAC90F0C1CDE781C3A28B11DAD2730FC3C95DBC136E45C1E4AFF87A3E11B6048BD742AC9AE8AC0EB1CDB45BCD256A4C45B07D1E45F7BDC4FF49BEF7E67866D14332D59FA5BD2D4F0A249A38EB0FC42F1A5A448B246005375B3DD5B6326BEA30B2AC44653ACB9D3B6B66C1B165DBC65FB47A47BCF0D49C506139E80ABFD03D744DC2DE267749441A4E79AADDDAAC2267CF0C65A72624E9204EC8E2A65C7862EB8E54E4A55567150CC3273F3A97BBD681C2F74C40F14284E0E20CAF0443801395F01EDB7346EF774B4233FDA8074A0F0D05D7789768DEB4140FFC6F7C4B4CDFA6719D262BA4269B1482A4F88BCED92B9CE0888D7232E49629F82B414C1C9284677D27E2A38C1A3859484BD048EC0F34EACBB8BB3D05E98A03B383F0758782552B5F68443AFF5C2E5EF132C7DFF1291D03D19832CE52272C95C71A6D8F879625C13AE4DF7C0DBD3F3969711F6A477CC87D05CE570C1D26B0A639BC9536FE9E3D3F8EFF02A7A485E45C2CC2338CBB0BD036CC29DC34432D1D0610FA58EFAB6D6CB5F0A41BB179103D9FCEDB3972833E39B127D6F95A10554A55A3125E6296CB7A557C95ABD0F7391E7ED2D5711B0A8E2EC758464752FF8E7D9E57D27CE45F2CC6EF8CA468FE47440A6D671BC08356E10D3BCA62AD0C7A89F274C0E64B287423072460BCC5C26650F379CDF6BBE4D8F012B41AAFFE9D01A12AF2E78BD2E443483797BEA68D62F3C41D0844FCDE1EB317FB7CF32C2963A8D374CC04D7529BE55EFE138D34A83CCA4BD3B6D83E75701F85E01127CD146ECC281113921F66084D7030BBB5899874A696AAA0D3FE559C331A39BC413750D9B797C658058FCAF203E5C79252DC6948504BE12FA1ED11DAD3E239365A9BEAE05BDA8EF89A6597551733B55E25466C7205C61FAED48C17E7042A5BE82487998EAB06A4FDD359B3FE134A7E02DD101C3FD9F9D5A16D2EAEFEE23E7087B1E94DAC569074E7A50A11B2A446DF83A5C8897068E1C6C4667CB1C7EE6C987F05A5D35EFB4CB880923A3ED5476AFBD2CD2CDEBCE304FBAE76A1AC5F3E589D86A709F7878970C9F99D14C435F239514FF122196F2303CF8649443543880686AFDBF9592CD691359F481A41D64F9E80E35B0176221E058E49F5D4A016D0D6C88AF173FBC4BBF7FE514889183657ABCE46A464DCE166874323D16897A40A8D8AD7B99F6D4F69417869F2AB2185F115CB2C10F242C380EE27B526E5F5BCC86DB12461E1D49F5B005178AA3C23992B8F3D5524B413C9F11466BAD14FCEBC8BDED2130261A91F096F09F3F33041014FBAA730CB6BCDBE61B29ED78B6CB75238E11145D2DA053F554670F60041F6496B6274081D389EE29AB307AF91411A32A078E121D791A51761466894053977715CCBC2246C9AFC196847D41D4B +Digest: 493AA1F32A5A4AC3FAB99CC9B95B7F018D3F85799D6C9F77C8DCA553C1903015 +Test: Verify +# +Message: 90193FC3758A0E4783F0C6B9D1DD61A4A4E88B0642024887ABBC8FD7EB7397D3CE6895B7B66E006D602DE4DD8CA31DE8E0A8920996BB87036AD6A2995042D0E2EE72810CA7DA2443B3E8FB56B72FC7D9C887AE74254272AA888471F9494BCCAE1A287447096238D225658A0A172A718BE31011D48842585A922079B3C79695027987BB8645151DF88B33917515035270487DAE92597810E2CCAD11BF3D4FE3BF47ADDF0BCF7AE7C0ACA9FFBB87F45787DD5FC96B9ED55C89B22317FD785D890ABD807A044EE486B86ACE94C618240D6B24028010D437581913786D1A529064EDB4268FF61431A76586936E7559326DACF36C59F2477CE7F4B6E844565DA313726A9FF7E74D6F916207C213291D006034DEF50809AF7F3E0160F941C283B06886F9ED2D43220D2E1D58CE97DA2D5591904BA530ECCA2DBE94AAB1F9B65BBEDF335215B87B46792ECA6D619965AE5CD332E6D3468AD8123CD4671A6D70DFC599A0A2D44E98A1B026EFBACDA0079FFAF7D968DCDF0F12DD4D30CE67F53095A9DB1C42C88CA8612E0A6174D279BDB2862C34AA6F3758C36A516D7D1C0D87BC641A0526868272A2F2D0D94A4611AFAAE3E4342CA018C9C7F5FEAF1C9B3AB95EECF89EB9601181F524F8FEC3F700AA0D5FCEFFFA8469AB5F9FA7F5944E048B55F27BE8826158403083285F05B7FD5C0E34AB7E9FD41AA2A431705C2A376931FB26307C7284B9EBC2C6A394472C8A3CD9731B372F8A3FF992D1C8BC85606F05BE83AA90365CF8018213B73E6BB831002805C5E34D7C3AABA38611899FBF0484A4F536F3DE23BF7CF34662A356802C7AEDB7679A77540F869072D5F388C1397F62FA882ABDA6DE1AA863B88D2A237F31C3AE4EFD202E5AA40358DCD41704BA8B62555972510C8E408C99B24914DFC59C50C1CAE47D83FEA1DE903DAE26227882F889FD248121260E3BAF9D5974590E208AC420A3F15C6D0C38F42E13D2C2C66A886374F269DB89A9C9D759606E1C9559721EBD1062BDD3D95AE3C0005CB98455BE63374DCCDB2AEB7352FF97DE31A07AEF7A1AB26DCC636A18366A037BDE057BB0353AF42F660C7CF0D63E97511BC17CB729B119AEADF81A5F342EDED765F41E306BAD8AA7E0203BFC428204747E3732EEA192A3BA647BC903EB24925DC85AD010A2A41DA8349F7DED1B5EBD5405977BC307C8A02DCDDA44362BB353CD9D7A7CB88284544C68D110A9EFF915B90EED28C54F5177476B09C8249512A72893869063888C0F16A73E2E2FF6C0BA7B1AFD794E3F021EA74E9ED33A2E44F20A169686AF0A4E05F8221D727EB24864FD0FC70C63D9F7472ACAEC708353F47C638702FD80D3C721C9C88DD1E05222B96D65EC444036F9FA85EA93B3E024A299740D14E1D3B4FDBF23081703190B3CA64BE06918CA5A5ED68F45D956E50A32413D593D3E44BF30A16C750C59D4F09F97DC7B2C56F0DF03DD67792B9247DC814F70CE3A2DBC6E47CE45059C5226F2C43EDBFA4106D40062F950490F9FB8BB7FCA89680D1DFA6856B5E425B8A6AD9036D378E2F714B6DD50EFA8117567806465DC7F627D9B2CE4178645EF732D3C6F41BFFAF26F19CF2CFD23F2C8244A1A2915C68CC13D3128169BB2BA62E4847F7B1C197D36A317AB050B70A0BF05075E20E368F6B1C870FDEB26BC3C2F7C2D1F5DD06C80D418F65FA7A83A65F6EE74018F386B0F6C411A3590FF96C2DFBDA6F5C4ADA4FB6AFFB818C54CA0F7473003DCF15FFC7F26B3AE45723E776EEF313442E9E236C60DCD8EA3E085ED7269706243ACE36BC86BD36143B69AAA4E6C52BACA493CA6DA56F0FE079BE5A144677208467F6E58183A5300579ABFBEC029B7C8A17A311E0F6B58129C9713293BA6CB827BCA1934F9A9906BF91A1E1E6394402469DDD3FBB69B6F9BCD9D52703D51769F90C9E17AC91F619ED62099BA2D6728C65FC059FD21C139BF76AAA2B1B9868C9E545C50C80C31C9B42AAA7BF823F9EC135EF35332DC9CA3B55A628792B79C3C30C2894067CD19F0F0FD3FE6436A4D08AF07F96A81996CE0120583329E828A1DD9C82DF17CA08C2825404DEA1B6C779A14E72FDB5B10C0AD2F5E1D4118AD73B4C110936A7DB596FCD67AF9A9B766BFC284C4145698B56BD9BA752A18AC971973257A0F66CF32BDD7BE36F7B124A23FC8A6AB35F7B442202A7DD9720945278550BBE5DA8A94031ECE5F8441B78BB51B807E21ACF2E7383539A073D1CF836C489E67FD973BCC269584663012E02393D0FE49A36D257FE14F9566B9840172E42DD628078BE9F90BD1616156B0BBDB54FC5BF4AEE54177DB19312E03723FEB135946D3019E0960DAC6A77F24E7EC840C7D51235F5A1EDCF9E74011D7C7D706F6D62143487F1A149EFDCCEF9DE7EEB34D294635ED265E24C13A25F3F9CCDCEA99180A2933B9CF3CEAC1A342CEFAA8658BAAB65A19359B14CAF2480F1F174696F2699E4057409506FBE90D63010ECC0F2E62F59C72686317FB763350B023917ED5C25BF2D6BEB7C64C874C758DC4BB5E9A58BFFF06720E0F3741BD21B9EE321674002D5F8640D65EA5873037A022126261E9A3346D74C3FF819895BD7689C8352C993198383A082F +Digest: 392D4C7D4A11DD85930D9B1E1E69492C527D317ED88239785C4A5F02E73405F5 +Test: Verify +# +Message: D0B70E785A6954D3A4869528E2BD052E3827018BE8154F13DD08595282709AC006C58D760A4821DD0087057EA8C8139C8E60338090202066BE0B184C4B1425E731D81E244AA331EA8DF909D94677310C771B07DA3D1CA59E4DF91DB39BB8422532D5ADCD3795E4848DC31CAF9C2EBA1CB70CAF98206D6CF2A2857AE07AE5A7FDBA30657FE9186C3012F9EDB8009F53D3113C259B265195BD447EC8887E0FAA4BCCF8CCFA852DD89D3D70F3B4B7F9AAD61F45A2CA67CD4894D353329D2928FC49FC9A4351519C00A4F73B1B012BBDA5ED3624C917D6E70110949B1508F312EA978AC2164D954413D756AAE0657D2FBC37E266ADED4FF042500CA3F215A959873D97FD064DB084B5EA93C95F6AB31918C9CBED73DF0CE5880FE2F9585FE877B715A4A3EF8A577F2230864DE0275BB3F1011609E4AF5F4E391ED21F037F5E21E023FB19232FF2DF955C4D0851843DB2489E9EF8742610F90E7F5F7107BAD8146DD8A65B8B0720B884F71BFFE45BA0162D9647531BB65A9121785DBF3CCE524FCF2638FD72B1BAC58AC459A4F53581FDD457F6FA3BFDAFE3C3DC5E11BE56AA954B6314586D6973505371060CBC5DCDC7406D3EA19D4E5866911D6F3AE2D7C96552AE06ED294F9FBD22FB2948943E971AE8CECABCA6FA526BBF8A2DCF9C05773B8CE03BB4D4C983C4AEDA1D7802B34294BDF4FAE3E7B03153D70925B6CFE00A363D9B4500314F85060E3FE5605C6FC89A5AB11F8E5B967737A971AC02DF1F86BBC32668F1C21BDB108BFCB9AD0813B7AFDE6EDD7C2C34DAB636C1FA30D32C2783C90FC849367EEE8EB85DAD8FB09BC5C28D62DA87ADB3B587D0B13BB1A22D32D37A190D65C400A9C9384BCC43791C31A4AD2401BE4586C3F2C8C5B8C397060A6311EDCAF8D6E539A96018621E2652D9129172CDB0E1164D86DE87181FDFDAD29E8BDC333629A9E57694EBB97782B79DBEFBD47B844240A02488F0241914B15CD27FE75137BD30F60D19BE376A048D8D3E3D1F21198C1F7E03433EE29D77B171970F6C9D570E9C6ADA22994519016E2E2374A6E1F0F92F42DD54BE67DA7224961E6DAB2E899A62E804B93056234A2A9EB440869F59408F0245DF224A9AC8FE61254CF01441CFCCFED7ED3B9DC8FF19AD7229361D0C5C476738B806FEDC9D4D72B257BB24FDFF5D6C0E64895E8A877F62FF1080ABA520BA1C6BF4EE1F03E2D79ACA540DFDE36958FC0A81836796A5AB013DBEF523BF96788F673923A56FA5A472563671F77EC3C3538B62181F9006BBA7E58A914B610AAB0840438986F837E57D8D1866C28E35E2422C4E9D222E7C4B8ED117D984DECCD39986486C16B7C673797FC6F61166844C9611C5A3C625CDE34C08DDC20008C525B1AE49262BD014CF3A8D0101CE77D6ED35309ADFE2272813E76B183B5E639E3F492CFBA108EB9260540F77EA978A4CBDBE80C3FED1F725390754893ED84734F884414C8C94E67A2B811FC8CE2B63FB6DBDC8F9B1A53D159C2AAC198B73FBF3CDE090D3BDAC678441D110DEC9A529102EA1B19D28A7F6C8D81D0FF575F1799EFA07D3FEA5FED4E54870C2A007EAC1B52A3DB5FBAB6A702F11FD62892E7A29C30BB988BD666BFBB13D9E08713C3FBFEAA0E12594EFC8272B11F48BF9FBBCB419E7526FFEFC35E5612D10F2DAF62716A5A6F06ACAC42AC7AD9092FB571302DDE91922AB8CAF73B6BC844ACA465C5DCF28780541483142C2683BE545DB0E35DC619B968C530C5DF6847411EE5327618DE4C1138AAAFEEDE6B8D4B129D4EBD93874A297064B88426BFB99CCA8B617C29EDFC33F8E681285D9955AAA81695DDC1ED6109BE408A10E877CDB468F6C883900AFCA16FCAB6CBC462552807D37DE37D6BDEF2C173A6FEDDBB5EF820FC17A56C3DD640BEE56FF291C1AE7029A117929D3AF4F73F7842E478D6BBA98758A4FC4CA939E9B89371C9E7E29F98004905BE1F410FAF2E05543747277423686DAB413052D32CFC78AFF4658AF26DF3662A83D3587BE9F4DA2B2F804252372FD5D55E0A96DB88BC0BEEDD20611DBC1B543EC52988528CDB26409CD18B23BDBF24C610173C5E4E01D0A24848A6333C88DC7C84BB1958371199D4B4B4BF5B169E265F9E706F366AEEBFA8902EB6FC632982D4E1C280B7DE2C832FF8F2E9B13C422FC73BA1B747A3E28B9AB4A44874CA854A5E86EA65593225E7ABDBB70106A8B79C1438087DBAB027B59A536A790F0F6FD68E28596AC6706ECADADAF3E944F993A97BEF9D726949E29356786B39B7B6AAE73AFB36A311F023CD61D5BF7E04D5EF80FD2E607C1838354E41AD9F70216FF796CBF577D127CD79E6739EA6E66FDCD3313E052E378074D9DE747817A1EE173E064773E3676E60CC9D84E56B94C1B82A559C6F6AA25694381543E693A6DA6A97F12CFEAC6E34C92046162B5B063FCC6C7D2B0A6C829D48AC0B3FB7CDDCBBFD70094EBDE84B022D2689B171AE2B94DB52E45502B5C668E75496602EA9986B1CFC6B693395E93531DFB99DA176F21CE0E22C9118C73D968C17F77C414BF9715BF160A32A388549F81FF3DD242D74A8478FA4885A3D0B9112AA341691049160234A001091566BCCC0E5F600ECF5F11A531C21C801C8F22FB10A9792B95E4A7340B49F0D25CDF264404954A7CFC180E06C47FACB2FC +Digest: 47D13B5C5E9BBE12AF9E2372A857B000394646CC5631AA936B59100DCE3FF1EE +Test: Verify +# +Message: E116C2226290DD80610D88BC55459B2ADD2ACD9830247C7BA228B2F7F437D179181B1687227B904CA3AEDBD5C9BD255987BA88A7F7D579B40693F0D6AF9A75161FD8C7D5A67BD56B4DBC7F2DB8FE6B413B7C5A05851895186B8D9EAD71FAF941FF8A5A0E98842585C3D4F915EFD6402D69FA9F57A9436E95C589A8747D6E0544E27D773E0C22C13ADCA529ADF540FF7207F8238BBC4242F43823912D003007C2377D5E9FDF03D640D86CBC5E9B9D370485812B61289D5492E20790CEDE613EF59FA2FD97BF3DC0292A1E56765EC24C8B912311DE671F23A6222558113D46C987B6BC3E045AEE7897FD4E9BFE0383FB379A794A4D8A7A18D45EA6CE1DBCF9DE33F23C7CB9FAA10B5C2C6218AB013AC7B7CAF0A5BB92F57E8AE9CE071B65ADF99CCC39768E1E0D85539473D2974E348CF7AACA4FA56D2696FA78DDDD84AAD8091924C5048D466AC2377339C67024FF8123014CB1D3C9E0183D49F499D0DB945F72FB7D6526F201B7DE9E1A4A91B062D0663C632E5A51A5F5E133744D8DA94C54E5E371BFABC67B34F7AFB596D466430E6EB222B17FB82604C35D0FEE7F57B189344658D9E49B41A38FE73AB459D7FE3F08759BEAE7D95FF910717070257EC97AAD17E6557B5CBBD93A08594EDCA1C4D7862AA1FC175CA3D69AABCF5C25305FCE77DA52EE7241AF2802AE715DA654C895C6020DD6B9D425ABDF4C92967171BC813B26979195601DFDC45C644A278B845C425CA99EE704D77FE876324AD55C8373AEA5C451FBB33A136BC942182551A56D2DA0E0D9A9F3DD801C01F2A6B982DF8B25C1C4F7A2CD922631E8828B21689C11E1B71487F383B4439115FFF33E57B27A5FB74D965FAB4807BC7CD424788EE9D05B9DB13823B93FC1AB163F0175AF9A12D3CD10E96B5D3B1B74A8FE429723C14D21BDCF26E0D134114DA6C389BF09010515B58FAEE40F8ACE47266785C8178BBC30B5617FDE1CEA48F08F1746085D06A411BC51EB1577BBD6127FD78C3B0C390B1ADA2517C52E664BD3BE49B285A419D7637FBE3FA1E6B14E6C490A9BCDEE42BA3FA3F45C3520800765493A7099AAB700015984BD8507BBD18E6F04B068D57FF7C941D30A594CAF547E6EC0A855443123B3E1916F4A8E176FBD1FC5D84ACE245DB68154C4370F9BC25B3BC9FAA0CBE6E9D2FA0483847335218C0A6029678B11834F19B2A9690A7960886A683B9E593890751A3A18D0CB7D75346359376C44810005AA11D5D023438803C6D9B520442B22783B0173054065D1119503FF5913F6F3207B8659BC34A167213D521FF11A44BF198DD2E000230F515F62331015D3CCBB6173787EA9FFDFE3E0AF3249A0C7899F78EF0A0CB1AE9CB84DE95C756771061D3BA0AC88B884DA76E1C3248324E43B12EC3BACF7034FBCB2E3081C679893D3009AE8F694C37D30E1AD79F4B535AAD81ABC9ED85BD7014E876AA1B5C3356228BA99E87A2B58A551C679879D47E076C3A0952CD16C873FC3C63CE8F04AE6D223933E08D710174C2B68AAB5A74154924A8033D3723211A6951CB46E636322942716F4BD80DE162B8A641FAE7439D9712DF08A23800A3593956F24AF62FAF822701E36C21E68FC126E73D77B7A101A8DD38018992ABF2EA7AE8D3984A4108561941B3E0618F4AE3F834050B22C7624B2FC6BBFF7E734B8E4208A97105CFD4DA69F862A3A772054FE7952AA6A3A446F04A6719946350A1FEE1EDF001D69DFE014940BB507B41AAA24E84A03E3C3D8842CC4E8FB2A84B50E23DA142BC11F3CC92E3DE2BF1B1F4A9A785A57F1D6608DAEE61CE632EC2DAA13F1142488E4092655D9F6D734B3EDC3312F76BAB52CFFDE528473DE6D451DC2FBB1403E61A855C465ACDAE4917B69ABF72F6278233715A6B95160D73C02D2FBA9FE4F17301B06B2CF520328B7B27D2A4711C5547E89B9A5CEE4C707DE9E2E6DB9EA13D734840D786D19D90C652DE414BBB71F55ABD9286AEA540C138F86E72E54E846B915553B84A755B3D9ADD3831CC37D754F627A4C972E1836AB8EE84620D7756CA9483ADBFF75D3EBB64920FD7D746147073FA4E9ABAFB8015D6CCF07859FFBD29AFA3D94AC5CE9CAED6146F1B697CF4AAB59EB771177EE4DD3A71FFFBE2F90D680B3FE91F5DEDFA3619CFEF4857336F46CF8D533CE08F219FFD59BEF1CCC5EE8DD2DEB56768CB0F7E44823EFE7D5D030028F30FAB99A5992E94BEED88828CA5C4B690539054DE88992FA26380BA85A11D4DDD08872B807ADF5F8DAD7999D32E518135E4211C84F00F9A6F6ABF89886B0C1902E1967F0A77FF9F7B84390E33993252AD9789170F9816973B194D9F34418E1C515D47634F8AA534C63930617C9A76DB2453045B7BFB7078954794FD96DE8A28D1B21B5BB64FC23CA7790C65CE9B851F38A12EEDD5016DA6E70FCD8D12D35356A307409EA3DFBF06D44F258AEA60E9C6044487845AE592EAC1F8C4A0C9FEB7FA7695419EFF154C3EBDDE22560A0298AE6864C9390FC274FF4865357C99CBA9CE8EC7EF3677A8AF82B7532228400D2A95335C8299205D39916F5645C7BE0FD66C004926EC42EA11B8DCB786B52B334BFAA8FC05E4339034F7D408563A27823D46683728D0DCA8510C496B3C2EC2C235E4B23DAFEBB6573C4CAB881A7F39AE1688F4609AE3DDEDE680E5785D9D249C00051D808A0BFBA407CC91729A35ADC1663C9307AFEDAC04B1E091633BBEEFF3D +Digest: 7A6BB4BF152B09B05B486A061C4883BC8D366FAA3B57C0F8CEBC2864B044BA19 +Test: Verify +# +Message: 3E2D0493B489DF9A74D68B82E0CBD550BF1A371DB5CADA9A4065341A1EB5A21E8E8927DDF604EE7E317789F4BEBF53363C47923C40160F2D92C1DEEA541F50CE26F0D9572256EE912D1D60B9459506F2253D67F2294F28B9F8254F3E8E661C9527DE915AE3EEB7C5E7657566E1BD93595D0810A17BEB922CE5643B8AB562FD3BC1FAF224DE076381318B2EFD0425D66E424E5887E10A5CC7FB488C4F7C83352373C1F26608438FC96A76BBA016E1FE57CAC137894AAF58F2E5CFE114A09302B932762B4B3632616FDA2428BD4046F7147B82C27FB1FA884E6721184C43122A0297FA22EA2A066384BF7BF16075AE1E2BF9285A9EEA85A6F2106298BE88AED6079B1678C6B26C70208665036527ED0142F972EEB06C35DB98347FB4B433E56BA523D7D08C476A7F338D19DB9A112915F805EA68A46994C249D1CC3AF5A853439CD44DAE26E6E8DAE039AECAC5D0FF5592BEFB8BD6EB945F97F36A36CFE046929E86CDB34B4F48C5CC61F4685456223B6E543825784722C42C49C9348D81E47CAD825D6839D7F985B8BE3664C3B29B63B3AB3A8F94A0B18EAA00CE288B7396E6A721E5BB10103A14352A9CBB3E7BA12D256E8F4C2E2970466585CC65638CE8501B39926D503AB1C09C26898BD7EDE888CE8931E221021155B803AC5A7B2AD3C6F3C9EC56586F31FF861F9BB4AE082BBF77AE929B5BE8E4B3C1098FA9D59371D60938D5CD28B41ADCC5BF4CAAE04A01A2ECBAF4E7BEA9FF02922F1B6C430916A9D9A2103C9493870AAC8BA1869F1BA51005126FF54CAA965228050554F2A3580B826FEB727509534E3ECFDC4BF1B4390CD3DF16DED20520DB63D046DEED24AEF1A8EF5048FE66179EEDE7812C9978C88A7307B5AD243903266A3EEA2FC533ED5CF1F9298C263D25F5B4A795D32F262218F2D2DD61AC5610A85A33F8F4DDB65C68DCD94E6DC6B10BB02FBB3B6F1ECA27B284A85377E4AAE41B4A1C1CD2CD2F61208266DB78688D44C07DB560EE8E3B97AA47DD0C607A58240BB4C048B2C87A296516D5C431F8D6DC5F28D6C9A1B4EC4A5E8B75659DAF4082C5837F0A79C9BE746C5A83C75E8A375C778F4DC6F102C5993DE5415C34B559F7BFEE800CBBD31CD727E63710BFB457A2FD906A2ADAEE52DCEDFB18F891FD8A38938751EFE64EB3C08CAE7DFF4FAC7119AAD844A426B73C68A433F560A78F82E6B180982020DB19A14AD0255C7B8181D47D9B180829515425A770D64C015BD4961289B74536FBECD3A6625D04BF110F99180BF770913E603543B4D26B4E1726B932B1EB7C23310644E6E30A1F7C8C5821CC26E665C5942962525A3E5B1233ACB9E86EF3245448A5747EF168501D4DCE9C0B461DDBE4CDB0737B0D32418E4E9F6328ED7492162F80FF42E42E632F4F5AC606C563D6E3003341039E75FF649FAE465854BFCF99AEC991F646B4EFECCD06078EBCED87A4A452F98D1AD1E3DBE94BCA74096718C659E394F8BB71C82B705627B0C40BE3B66CDB6222842E4FA39FA3CDA10943D66B9DECDC95BF7A2778C0B39CF773CBC4F8A86222B5201FBFEB4414A4EC3BF82E1707C0DC74E0ABB82B633DEA29B869AA96383D03F1C774EF2DE00A7587CA3FEF0C063CC2D2A69FF4730E73F96AA211B71A4958714350652209ABF89855D480AB452A8F5801AEB8CE6E9EC1E33AD5812580C1F59316468EE8EEF52DF163E2B9CC10544EFCDEF1B473FA28FBA42A0A0A03DBF60E279F3F213DBD9F58B4BEF8EB816408EE2274DF6D6C3F61DC843BB60F52F82613349D349B27436145088C1656BEAE0B770B8DE1D2162D605667AB0BB6A44DCACA58718E1C470438D618ECC0DE0B5EBA4C926C011CF167F1DA1BAFA22B06A3D8D75F0FBDBD1028E10E82A4FBD25593F6EA678A30C2EE6C52C9C50B0F54056F241A8365D0DAC7CFE1586D37E30C37651B110710CE2A6F4C669A39DBBB0D7DABBDA873F146D60D1113A2A6EDD573D7CC2B4E2037C75FD87F5E6561CB4BBF72BF029FF7B6F3A0014AFF6CC4587065A2406C363446645D89B734C08F339934862A7C2389769D1E5401BC681074F694E5474E7A560E859A91FEDE1CF8F0BEC0CCD1AE50966772B6F7DE3BF6BB5D21930571216CDD33D5EB79EF5D043DCF580A607CF8747ED36DBFC363A226C04D92CCF41678F8A5136E16BB89CBC16542AB2CB6013AEFF76A66FA2214279637A30699AFBF3E2EC37711BC24AC7BD5240BAE402153F57307B8C8C0E77A30B5D416FECCC629A033A435ACB2186A6F41EFF62C692B03B543EB8CE9EA5435253D0FE6E63834CD94816D315933DC83823AC86503C186D17FD1578F3E3EAB7615624F805C5064F7869F332F4EFD717C34611C5A70972A7B397FD4A801F1C988BAEF037B54CAEE364352A6CA8E9A87AA9F63194FAAD47D4E4C59C60D35EDE915AE9FB0AF677CD18B13CD505DEB0E1E1BA81EA59690B0BCFAA18C65180F2FE68672E3CB22584973DA0CD24B4358995C85CA0D8DD3396406AA83C04721BEF51301AEFE8ACDC79FA8D5534ACE46687178B891E38315C5246863DD2524A5496A163D229EE8C6BDDE8E6EF8ABACA8DA3BC9DCBE11805D7EE0821617E7CBD0B1DD6047D7356601C2D3592CC673208B514AC775FEB0508D8A28E4A631344686FD5B5DB261F896864B00E40B6F5218F122626E05C76A61F1E2C4495A9AD9120D3839D785BB11889C6476844E1547F2155BFDA76166B5785565942BDF1210CE6200A187E724B87ED02EF23A84BB45677B89352AA0C16F80B9956D77356462DF5608E7F63E884745F74C +Digest: 53CE90AF2C658ED0D6A0E6375E07720DC580D369D21D3FC87564C81DCA69CED2 +Test: Verify +# +Message: 3F1CD7A3D89C7B04FD3EF829DAA41F817AD83E4239746B4CC71DD21B422972CDA7DAD79359AB12BAE0A41154B827816BA0606F777F456E02701FD7567D927DCBB538561F4E63EA6160A6A5F2890F7D365EBEEE94791F68AE30BC2BB300763F8D7F70405D2AAD6EF3CCE48B2793B88CB4426A4A410CDFDE0DEEAA3A67224D039B3F3E0532C660638AB2C0EE9066FA2BD9B9468C4CC45778FAD9F34F4C7E25D56418890887982E628435F25691360F82CB521761AE7CA05BE6B722F89D0909D242B4E05B3E404A560BDBB34C56E1B100BD3A0F9131D140DFF86D1CD84E218FC2C54D791F044AF303E6CC4CC51846A7C878E8DE7918FBB1FD9F59317927F6D0D566602197BC0635AED43EA1579FFA9552331293935812D12C1508AC09A720D2B4C9CC4669FE5493D93B17660A2124004CE047581C3A626B5D67C4649B22C410976CBC9A09D973F3CDB7E4D87C425E3AC438EFDF06E7FA9FD16DDDAE3EBFE876F4C2D05B9131102D7D5C75B6AE469C5259AB25C100E5905ED796EE3FC624BFF219BC6A4E4AAB650DDDFA99B4836915D280E5AFC1DB931D5AB2EFF3B58C193043E3BE072654BE56E9ABECA133A641A9752311858B2EEE278863DEBF79FE7E5F2B27DDA64FAA14A36332D0207ED404A41C47E4BA1829297461200DB57495AFACFC96C7E264C316030DB17AC263A73D204C437404ACD16254979A5DC50C00877525E7925741668463E17CD8153B5A03B67BDE3F422DFDC3E470DDD5E174E1E9997D632AB32D60CE11B747376CA212D17841D7B1544FEBEAD937A90C31EA316A92985305289359B135EAB3C36C6A9C7A245DE9CCC03DB1A676E17D735DE4EE2E82F669F94ED38FFA7816721785FA6A6F605DD2FA4C5894C73EDE1A30C61D0FDC6B6BBDD8FF4726AE418C0577781848006E143083FF160949E54A926D6EB210CEB5BA02BCB7CE0CE5096012AC9560CC3CF38F744EA1F3D8F02C6280BDBD6BC78600E66C2CBE2B6D773CCFA4BD1C7919D93C719150D629859116C3F7457CE5E0763DA180E5F65F3FFD04CF6E5EB6C99CDB947772D18465FB9B08F27632C31C868060EEA12F107053E73BC302663546E6B6E5B2FBF84C517BEE939AF1B5CFB840D872A5BED08F4905866E88A8EDB83EABE81C90FAF39F93E2A82D506A0F7713629248A85741A0E62432ECEB50B916EC5C38B592CB436E34D42BEFA8ADCF44293E6034EC07494A265A3C20623C297EB5169C917C33DF0D58B1CAC7A7281458FBECE7F1EC66684F0B05B1E9D12CC4C83028D2F0921C9A5FD462CD10FB4472DB034C138CF1867E9861C40F73F2D98FD348A2AB334BBD1F647929D5EA12B118056D08679C7439288EDA9CF0996C6BBC00331514B506ECB8DAA9F414B5A8A9D537687AECD5A8231997AB6E2216629DB8D1C0C356D889B5012934BD6DD719405B121B386678C4A04CB2A578BCDA92D21E4E0EFD4A504DACEA234D23C6C2A3CB970A6B4664D730EA0508B147892617BFEF99B3FE3E39DD28666E600C49068C9267A8E343D380ADF279813C38BEA44F1671B109F8B3377AC3195FBD0DD820FF74284AF0D7E1336C524B8CBA62906414475406CAE800E732280ECE2BCAFF6DACF46193EE7A3A04D1F92F1C9A3A49B36BA89067FBCD60418204AD3B94A518CEA63C2ADCA1BEA8358746EABAA624E07B48CBB1AB45FCBF8645E45D9655C188BB0C8200E83FD1E108792F4ACA054EE92E6232678B92C5DFC006B47FF8B30E54DCCB328B181372AB438EE3BF1C602401982A247B3A5879A359C00DDF2AA753A021BE8E2EAEF0B3E56011A3BBBB4C594A0A7116B8AD2BC4125CD87A869734A7B951503BFF9FD3A3363FFAD4E538108AE2683B4C77A67A0AE6B6EA4A2B7F54A166C8070FFE3E5ED6ACDCCE7F08F377831D988E5E2125CB0045C375FDD0D6F4FBDE2847E225AAAFFD1B4D40BBD0C01D0FAEEF882C1D3F2038CC7BF4D3C9017D88D601BE388760CE1634D1D2C94529FFAA5270BF40A329AC4508D943AFD5EF4DA0F7D3D08302C6E339770E3DE181A9066521C2C91DC4FBB473C5A5604AAFA1DF31F96D55BFB92496BE36084794FFFA5D3D5B1F11CD7FF79B0F175A3691F15F60A4F41DF4973C587E6DDC2C41E53E0ABDF1226D852035F84D2411E60379A4106D01069CFA612A319B9F76873AF390BB495D35E31009F0002128F0B0B53171B1860EA609B5253EE3CD77600C3FEB44D47BF3C0242F6502883FA121B2C8E14D17A18EC4B6FB72ADCE47AA63D3B54A7E044F91D117EEC59E6A68B69E4E35EF06333FD149A8572996D1E0038DB677D198269EE1AF4DCD9E06D71BB31509021BFCD52BD0AA855173028C0498A9A2866C1F3800D9CE0C8335755100EAEFFF524F1F89B04058336DBF9342B93CED535C4D118F4B0578DE722D9E9419B57AC82C1797492C4FBDE5D14EA4097D4306B870E16B8F8A90ABBF76BF18E2007A997C43BE5690143A1C766E4457AAEDC6EFAB9D7D673D777079637C0BC87BD32B04B0769B8D5913AB99AD950079FBF076721CB8F1BAC6C59836932D0DD0A8AB4652AB467101BE68602BA42EFE95D09708BCC1DAB76918C27C50926191AFC26EF2254D67B0D57341F25A723F95E3E463CB4E75B136F730BB6B024D9003B9D5CA15250952E163918AA97929DE3BF3F5A075A98C9AB21EF98C90C019A55977181FB957F6B7072BF675BC114749BAC1E3154A1593968FEBE43E4C393EF8D5814BB2949D3BD529DADE99E2C36FB966BBFAF40BAABAB5BCE5B5E3614340DA6EA81548085AC9F1EC42BE1AA0FB5B0DA5575F7A428E7442401F09BB71CA8555F93D9E7E9068185F91724780CCDF39361CD68AD3C326947B3A9112FC468EF9FAEA27FE00F9E2 +Digest: 1B772380C500A1D019BE6FA3F5E9A2A4C47075BC93DC24DBC58D4A6205D28384 +Test: Verify +# +Message: B3A90A6771F2522CA46D56608A7F03193AA8BF1912DA9E813CB92E1C46B83C6D4E3BDB3297FF72EB432670978627EA025BCDC35BBBD70656027C9B8CB345B9371D6E57B26D862AE9DD5A9806B142F947C093000A7A6EA2B10A376FA4FECFE6D19510792DC39951C5A7237C3DD98ECFED1DA006E08FA41898E924E8F7B41E438EAD829A7B9CCEAEF8C9FC7F0F717BC2B401AAA35BAF4F8F7CDE500E32CBFDE1E12D02A2638E0BAD289F18C8F32733EFA2808AF898D3AE4E627364EE7D9500E8197387D9EDF3239BB6743590252B98C0E2A7AF6F9A43522B7D4C7AE9A125B96221C8DFAF979CA4C40AFC589C15C9E572D4EDE0F1EB63E16F0ABCA428C2E082D9109040DB2603E6F9F5262C1D0B5F693CBDD16F2B45C5D1C0658EA9D7730D53123F2929C29DFA884A3D4BBC0AD7789791FCAF60C3B933E4FE316957B8097BA060E28B776D532433A94E6524E5E7D8F8D89F212EDC81EF00E4F58987251E89F3CF8889AD86B60EB43E9E72EF2E7F3FA966F07DD8A027BF54DE9675C098FEE15779EE78AEE0E904DEA49A96DB2C4721BA2FEB561CAE94D22AEB8A90E826BBA129EFB4DBCAAB2AF6763EDAF4589743F91FC25BC0F01A6EFC6719031BE54E6C50CEE4C63F97C04050776FE3CD4D02342D8E23A300BAFD5773A41B138EF7B14D45A992FE0E3FC39A31F7153B79EBC212F420478F2CDEFDB58EA82B986DD2E64FAD74BAC17F6D721BB9A041F6ABEB0575E9E1C8D77EC6F56FEDFAB95BF10C9C88990BAF1385EF85169D639AED8C727115EDA453EDBDC0C6999E9931C0494CEFEBED27DF9B8AB16C9E2059EAF93E5F5E4CE9810B4DE85855ACF370530E68EE723A093C6816F79FDC341B489AAFF5866A0ED10C8677F352E9980E251ECE26CA302C9566420F9BCB8648C0EFD1BBBECAEE9698564A5734D22550EB3E301C1276544E2805A64D5AB18F74A22A783343F6A3611CA07C9DB643851FBB52146F3C07324DD6EEE658615889686E3D407AD3E04892C1E2E77F47F658A2E0E35ECF7C6F5A052725E66E9E8C00049F6029363FEF9C0B9F7593D3AEC70D553816E8BCBDC55B954C02E43CBD8C0CB03BDAAB82E2F623F6711FB0B661EAA0EA8A41570944D0363F42D107982415164360377148B0200F8906D070336E67D61E6A3D142756277FE99BAAEF6E8001EBEBCAEC457DFDE0C92094E7A640D79B1D5459D538E96FE04C99BE8CAA8A73FE9F8A6F3882C6D250BA4257470EFE8C46FFBDDAE244AD6C0BE638BA7AF6FB37FC640D45ECB46E56948B144936C9468696EADF79D77C9EAFC707349AD8AE643C8C68F8FE1027F592A8D13C51604EEBC7FEE6BCDDD4D57B80B6D096791FED87555271A785D39F3B3A76FF389173663B63CE13D67DCEA9B53B08E13F4717C277E9F530E40A9B70105405C9C4048F76A4AFC16B9C7782B8A80B1483B0A39024D50C91CAE65B6FB553D801A8E57523B6AB8A69837667741DA1D2DDEFA70AFA387D806F2DAB57F04DDDBA21B8534C605776F4A21A899D282827871F9C35EBE86F30B8DBEA5F8F40229DFD0A668624789E6DE7CFDC4B872A55D6EDBB4E2A955A8C9980AB06711588DEDE2A288F62D00DB5F4E8F815E6A932A68FBBD196BE118939E518BAA7408AEBB286F1EC6C1D685338344EC0A68A387FF098E7CF0A505827048BE586A83DB5DE2C8F13D79C44E6C76BB328AB0C1B62741D14ECC599FBADA1141832947E1FC016C08F277C4EF3C40549D15429AC9CA6E0A6E3B3B4EFE749E87E8961671F4B932AA1B5D2055758C2D8082F8BD80FA2BB97367BED044C0E6BC41C36B5FDAA889383469DF82334491A2C0310D8FDAED09D3A549AC8201D9693ECD960897C6A50FC8082E999D072E7C42EA5CF98048E0E59DBB3EAC9DC1224DDAB72575895372E9106ADBD97E9FD4A273DB728C178B9EFFBE5E8DA21A27424DC8B88FEE2FDEE22F5DACAEDAC6E5A41FD4CFA8678D5E7B568F17B8892F5BF52D69AD4014E721EC27E7E32D28C35D6EAD7C9FA249A5131BC21EE8D864142ABE8BE9502B0782EABE7AFD9A62B1F8C33DAFFFB29C4CC6A5E57A68DAA6198BC16CA0BCBCAA4410D16B7CB2B6D56F74EE5F688DEE91F4AD5A99245B6576370C8C61760DA6FA74E099F7FE0EC3B517261912E3F190AEF34E8AECF6D36952868AEBCFB9A15B5FDAC6FB57A4ACDFE1E3B1EF4C3A02E69D1EF823C1786848FE2123D38D69F42DEA3A47C2A7494A9F06CE15FF272933102D13A52BBAB0F8D1FCF924C91798847172EBD6C164C0FE01024A18832D0B82D2C8111A8E2849BF72B1245C801E9531D6B279F6C2CFABE07CBD9FE6E3E62198DFC819239A189860DD427F19DC1B744413B4B19A3F4D1831B166098DBF15CDA331A0AEF1EA89B5E8F38AA728A68EAADF0751DC65A73DF9E1EF5046C558BA4710BBD3366338859AD3C6D46E7A70E188567D4623874CA027C8F096EF47F497DADAE88366D146C2BF27F54C1519944FB9DE2EC03DF93AA4F2FDD85ED6B15ED086F413B1B6D02338065722E29F19D8FC84087C682E551417D8FEE1E92C8E3AE14F093DA5A615E4088A166379B2ABB45CF74C93FAB4A8D8BC51BE9643DED2276078F9C665089EB3AF45745A220408D918C88653FD9E598866C819E4E8E08E5CECD994E62B1F7467410020E3036114CC48EF30A3C9D6540FF672C14610D05CF8585E57A32523E369A81B3B9CB515221B5D0414BD59B168790EE31A3CF10280A262EE4E7A4918704F7C2F519DF2F6E0416DF45C1487550DA01FA2DB88C0F5D203CEDE00DE84B15CF9D125E15F96C47726976803C33826CC6077CD224228CD7D76C976663B3FA46753055A0A7B959DD127D580C4D8A7AA8AE1397E5B4606C735CF7B12A0923CC1BE3707D083AE5D574A3E2A4A8B52D88A2CCE9F3A79948FA49A9EC0DD1E31CFF43DF3684CFFBE3 +Digest: C59C7C4ADFD2EB64F20227D0A3B9AF50BC7F1F743BDBCF1ECEDC9D264BCAAB4B +Test: Verify +# +Message: 79ED6D465BF30D3944F57C23FC2A2363CF0A44D4FD994320418FEC407DFEAB376C5047002C002B7E16B8B6571D2F2D8CF6D821B73055D0A0D0D10F1D66CFD97F0195F596DE010FD701D3A8A548F3C130E3D75A15AEE74C495898DCCC9A76838741664DEC8E8DB73115963DE96F866EB05CE8B248814EAD36852D14918253CEAE83820472C8B623807E3BD08462FAEED76095A2CACCE71D431E0096C4C3AA35E78B316F12B422D12E3C5B1C64769F40CE65AF58F6B1A741BDDA10B8C651924D5F351A9B4ED1525F38868D847EEE929716F9A9181315540DD9989575D5C4417B9F52E2995E39871FC1D2228945CA61098563BB2A8E41C46DD24D0E0137FA50577E5C0F9B250E58B4E99C7E31AD62F93FDC00FA8CE0F5981558B2D27D798F6F80D4C624809400C6498DD018C53477FAF039FCB03448061CB78A329C353BD931CA10ACBBE5EAD6D854491E83B7FAF1E43BD97A68C2360A072C845F6B1ACA492C7F27EBB21B17DB60BD97E53519AE41A2433145813DFC7606EE2C0B7166DF43979F73A9479434CC7BF11317AC388E031247D3CED5BC91CADC9181F5ED7A0C2E3057B433A6B49E65704BDFF01A46DD0257936CB9A2391480D25872F9DE695EF0C89B86B6F3B921813BB45A6430CD4392D1CD5BBD167DD778D4BC27A3B3C79E887B7BFA9C8895ED99C6A1E79E718B0720A82D30B14FE09D6E937930924AD88BFB7BF7726E06B3512BA0FAAF04E13A79206A07CF715072A82081205E9BAA1D3744B22EDA325BA422D284E358CE187843A64286E384BC31454B8DA4091C1080F9AF58DE748E5C81F18F3A061750AFBD62262ED7066D4E1DB4E0EC86B4C4967E93792D90A70F305E68DF1A5DB27B18C55234245FB367DD024BA2F297B28E658E53C5A4AB543A01CBE2430606BA01308E638B88FF334F91C8C002CF6778FD7722FD86361F6E1F2103F061911FB45EFC8CB99448FB8B1B150CD03C1244150AE9DAAC508EB90696FDCBAAE6B3BA3FDE842ADE5D175DB9A3D337F338EBC4F6788CC020392ED8AAAEFAE6EEE94A39B34230A68B70B6FB28BECAF328BF49F44506ADFAC5FA9B8E73AF85F1A8FC3EA0E0ED1838EA15DE10E6A16041B926E5316431C88D37C1DB499E484B91516B8591552078171D9C0D0970F00871B0015CE186CC6A827D70B47EE22F869FA3BF090FA517BCEA6EA6E82AD3A14C9853D4D2AF9B940DA3ABC509209F1E26E39D52F237904DB6A46064AAE92211FFFF890F2873D6F6947F50AA36668FBADBD1A6028C9806D045B3D266935767E0B7FC8D448D182D44409BD26ACC9539FB7AEA59124A8A1175B08F4E54830343A1CAE44B37B82D2062BBDB2DA43C3E97C1A8D3A45820E07211AD917581675850DE16B64903E6BD8847888A2EA2213A95AAEE99B956F26777ABCDA756E0EE4428198ADFB850317C8848B560ECB4E52D9D55A15D1E268658BB8A01E09AA721CAEF81B55AF5647444F78CCADB86C7516A1A84C37BC3CC55B26FED4D170FBCCF8DBC64C38CAFAD7ABC0491831EE5237BB48F0DBD0EDD3E2FE710B53F98D59C08E0D43C80B7B34EE1F38E652A01C0CC4CDC9B1DEA554A533EAFAEF65B78D967107E7CB9D31DA14F440A08CF37069A28A40DD1C44E188C6CF64E6BF4EF4CDDEBB89C0B754F695EA9D419219FF5F854D45A61E32A4C1100EAE20FA447AE913DEB6B5F80D7581B3FA9F0E9E971835B0A2EABFAF0724810CDDB131C7910DAFDA187382EF403EEE5464304D49C00F9C99AF2F1F758B26989E36AFA50654EF80D50E7868CE99BFCFB3D2535D19FA4E119BC5895EF75A63EF74AF068C63B29370B8AFA86606E6CEF68FE1E82A52413612EC5BF901595BA27FC83F795E7F74A9E7948444007DCEC023738B264CD8EBBAEBCC18674392D6BAEB0E39023D1B54F5BAB91B541391660CFE3D78DEFC24C1F64861983F2668C1B556F9A1C2B048961CBBAA2C68ECC84DA0C78D4C32E4130AD7B7CD4441C2C81C63BD287812DA37E4E33C94D4BF4A8CD650D9EAD25C58D95D90417CC432F97E09007C2304DC2DBD311DB35BCC1137ECE7BADC1DDA0FF73100DA6CF040335CDE3A028813B47C83824EBAB043E7F93C3F15E84945D5A5D4E456DE4400AA584993E4DDA9461D5F7C549342285EFCAD0CA8B2115F882AC5000A5A85BB356826D7DCBAF1C74D0231789EAC320FCB56E6A808252C11E3E4C95E9F7B6C775B297B3DABC4E564E37CB0C6714B749EA52D2CA578CC2E1999A5CEB585F1E009BBE0036584AD87D05C6450E5E5A4A83B772D5ED51FFDB093C2F695778FAD5598F737C0715BCFDE7E87E3B040936EB92D828E83ADA4C045E1AF5FF0130D5C8E859688BBF6DE248384BF5C06DB46ACDF011FE951F6D5B9059DEA1BF3EC4EC5DA310FC6DF408D11A338651942F9108292C1C9571D0A70ADC7CB802F9E3BFDBE4C8F766A02519537CF9D9580183B747E150E28F7E08DCE7FFEB31533BDAD305FD8D9234425191670CBB278FCAD11459917DCBB3E758ACA3C91AFBBDFD0F872C4211031433024B0D329408B9C0E754F2E1B70629E922C2B7CAA1C85A4D1FE5B3BC2DD118F50821E3FF50E9C16C1A9518E50531D89E34724574F0AD8434F11769ADCC34699E3928ED51ED30C7EB0EF3CC4B7613DDD58B6F1F65863D8E065B1A5D39094FA77A2745A24CC9F67519F3EF6F8E46331061FD53EDB632223322383B34E8E4844D9AD4913C51D6522412EFA62414AE64F47F920342EA6728146359D7929833E4E38CD8DBA87CD8102015100FC0D7D9AEDB4490A2A5DFF742EF4561199133896FE6309967150D4D2E05D0F291FEF3C94FA71DD559C2806C029E2F9D3E86C03BBE48146D9215B62FFDD8698723666D840CEF38ED36FA53B802281EB917A00BBAAE6CD9A15E9628E039163AEB6F0216D759649BF1C459AC55A267F2DB4B8360AE4914AB66C278AC432CC159B06142D7 +Digest: 55AA43BE17C1578DEDF8BF94BD4123271A6A415F8D69D557538026962581C856 +Test: Verify +# +Message: A087C611DDBBB330395DB337290056CA40CE70A86CEE24DE509E9C9B237F67DB2C035710B3932AF7EDAE3482F5BF198191E91D6B20EA978EF9EE974D95B6278680A17EC5F96B83C0E643A7E4FE725E7A0E3E3D20314FABF2DA19D48CFE2D8439E7961818559B8C21E61617A25058416380BF7961F219AA3C3619D1CCC2E5C30CAD7AB9EB64668513CDE0F19F10C9B8ADFDC6C23D9E7DD96CCCEECE9978089862DE38B863B21B20B5652BFD1837447D5EC66D7DDCED8B433E2C24B0B50ED4A7BEF10BC7533AE1FDAC5C7F991B72C8052F8DBF19FDA3E51F9CE40CF0004DC5EBA2E66DEF0A0FB4983179AB3189122C8DFFC75FFA7DA30C08BC02FE1EB0019A4B5894A31FCE62340A460E8322BEE6F35C812A481E9152CBDFBDC41778AC4A6219CB49F54F83AE9AACAAA37CC462F8028EB355B9C3C8A81F74270DD71AA21E42D3EB91369D6F2351E7FC4F765BB65365B248C1C6D7B9B56ED53B8AE4ADE475565D8489B6D9DF5CE728E4DC6980E58A93D618562E7AD4CA9ECD1CD4702AD9BCED6E8371CFEAB94C7A6BBC073282792BAD4841B1139DD22715C66A5278669FEC180FF91B09DFB1E7F56CE05D2C78652E8D1B3B915D822706AF8BAF8BB9EA9BD8BFC2A38621FBB19CB8CED37D3B13D1CB7B799D29E235994B4ED9B537CC8012C0302385B879121777787CEFFF51FAE603F80A44B0B80EF2262A1F7F48455BFA278C7B921F290F0851FC465AAFF69E99F363ED48CA02D656D5FD95F9181591CEFBEF3305B843734FC5EA379454E2F58AD319337576239093D3813F21A6D600768EFB15684090112C5BCAC137DC083F1EDDABF53941CD569C602FCAA828AE572C0AC8EF8F84775D4F32BA04EBE1FF4B7FF84F8EF2F2CA8D39E1444503D999C54206AC2F2F518A790EEF571838FBED64A5113490FB61349B97AAFCA787B2EB5B18958F69C53357CFB02BB711FFDA5F758C872F2D6A823AE3E51840C6EF7500288AB4C930E539A834971DAD0EBFF89F246729CFDC56D6BF8964BE90B92C2307674551A9D05C1CA1E9E8B620157DC32B7AEBC10035C1F8463E3FC40D678D9D7FB9476E5590F3E4E49472C429797151A16573340B84EC2D9397A2F63D1DE78219BC1764E216D1579637AB352A55C20326FC206C43DF947249483BC097A46FAD8DE113BFE4D3BBD512830774FF7569A76EB06B1F402A0793CD3201E48AE7F2CD0143840D47AAE4E9D856B42301329056666D958146D4379FCEED2A6C225F3F63FE3823D574E51BD84FBF8478BB797A040BCDC2F874B0DDAFCDEC746B1000B00F928035A17CDFBA320FE97C7F1B614422EB8F29F4F69250446BC74AE10B3C19BC57488BEBA43FE2BDB181C72EF5932C324A163C00ED318061D84A39C38308463C43C9E46EFA834219AFEF1C5093BC793353A2258A47EC64C7BC0394140472BB8B9794220FA60FF0F21505D2CEBBE6DF775E59A17651DA1172967CF7FFDBBB4C970A8B8A8F1A30B2F6D0C4964AD538A2840A3A65AB1877505B50C6F0A6CF253B12F815880F84E05A81BFCF859AB8ACBDB7385D7B4DE2F33BF48660F120014DCF623E6EA33A0A055D5BBA45C3592ED118D0DEE37A455C344CA5003F30D00B0D4A83EDCF6B62C065C2EB65F0BBC554094069112574DD7BAA9DC28A22340D3E9F217DCA8D77ABF3040B8328AF81503131B454CFDE168BE660FD11175AD57467A1002C710DF53DAE1717DDC6594F4E215EE03635F6D58F37BA0B8110A27D8ED26984B977BCAD610DB17DF39D5E0F222B3655C896FC5EC80DFAFFC2C141596F65ACA3A69A554F4FBB30DFE36A5AE4CCD0D41BAF52A6261A88F088372C75B2FFF095E257523319052DF6654956F3A3C5E926F201F41FB98A1FA5FC81AC99A727AB0AD6FE80BB39B4D8CAE63854A8CCFBB44FA664D750BD3CF478AEA98FE6D7A332D28C7E549F05FC0904881884B72A6FD73682EF49BD75D1EA20B45D3DB752B045067C3CD1ACF882B620D71411DD4D7E3CC0A68C1C9C3B735080080FAE53EA5966D6D72ABED4805D611E4CF82BFB6B1FA2D6D5B67137B912888571B3C36ED722C7A9446F09F1D0E808868BDF1BEF10A08306A0B5BC934F40FF29B1D3F1C5FFCE8D291174BE5ECB784C6B341BE49FD3BBF942FF84B02DC6127A2FA21B5656800530BB5A94A8D014F0301C0CF819F4104ABDE706C51191098045055223F65AF22AF17F559AA89BAEB224B52EA48501E381ED5D62FAD5C04B1BAA1A31E787EA2570A5B933A646983C4691A22609EEA1C91B3A03E3BB60D5005C068517DD237DAD979EA76258D5C7FC9BF39677B1B7C3089703AF91D5466FDBA984963365008184C6090D4F3AA8A94D7C0B9F97B4AE097DA167E351407CDE06A72A4A7F51FC076F58EABFE4C79294E951C83093C468DA276655397C6C35670FF56DFF9E493C6EAE24BADED82AF8AA71DA9B6D02CC958523618FC6D4E37A466BE389269008036627647E6C124210230F5BEE98AAF397D364AAA883679934740BE17865261664A65AEAB71391E9AF2332D849BC7B2B93100941A30A1AFE7F14091AE5D3580712439274E355B58D1E996CC206AE865837C20CBFB12321DF764540524E1F1FDF8DCB557EAA205444316234352302D97B8EFF9F0B9E94A23C2ED479C0307A6FEEE63F116129E35326175595E60B0E1CA036CB17F6C9BC0E96335617E95F9B8F7EA3977036612B39D6825A37EB81D93DEB48F7BA5E98649ED6A5CBF2C9194E34CAED940B6CDEF3452A20C351F83B9135E0F530D07DBA4879AC72B470AD18138ABFA2F43AAAC9EBD54B2CC9CB6F3369E5C8FB7B2FC287E7627E8BD880ED085D0BA6481FD6738978D5E54D05C5EE409437BDA94AE1A81E063630DD8A3B759B182799E27002B6F5B23C6EC851DA5DCF4064E45A8FCEA8CECCA78C054487A45DBECCE64AB9ADCB4FF23F837AC55F62DB783686D52695FADD6871403E4EFF00C7A6 +Digest: 4170B383145128E5953A3C5ADD4F160E25B5CBB6F5D507DEA6444A81F4A24024 +Test: Verify +# +Message: CB57AD8A5C81A2D4E399760AF5A523A8290867B37B75BCB39C3EA5EF63259D05A076A367384ADF3FF1A3DED9819108018185ACC0261B9B02529654E58237BD2782307903F8FA4EBE140CA3E17506D44C887A532D49002933835D9DFC4A5D4B6F25FDFB09F26CA4D24C1843045124A8ADDC8B42B220EAD151BD875B64BE32FF1059EF391098032AE8AA53C962617EA06CCE0F76E75A24499F3FA40FC68E24F56C5011E16E18CEA396EE34E8C811EB6F520826215932D0511E8F08EBC3FAF03F0B3C0F798EC416FAD13D08893C3A228BD2318181A103CC8F40E8965573BBEC7C871D3B3578E369E1851CCDC6FF676F2378BC004C699CCC395DD46E0A46C3E3A4ADBA90DAF7DAB2C4254924054B7FAA8CBEE9AE8C4C93CE8D34AA1FD3B91D1BE426880FCEECC418E3C5B0DC7F83A63561C3F635B5584A6977A93451CCDBE6A1A20E01931C22E9CFFCE5280935E253AE1DC3E07179B51E00853D3B72325217E3F0E4DFECE78DDD9FA602662EDCEBB386C6DBB5687F4D697D11A228F12A830352FEB3ADECF379039A07336D2B95CC4A2785C16CA6C16DC83019FEA29267EE972EC9DEF29649D56868257EEE11666F053AB8604D23099FF074147DED6F1DB9DA294BB31143B50936BB70F569F8CEB73028AFA584BBD26DE96AEADC75846BCAFA8F86CBF28660FD67962207CC7C1093E7DADA6D560228CDBE102EFE648B08022C95D482651A2ED51C6CF6D276EDDDE65B379CAEF1489487CE18D59EC8BF77D864D23300D461CD8B39DEBCAE383E862A04C1FEA5A92399BA2238DB86A87F407B59FDBAD0727390C07D64096C851C286D65D4EFEBD3FCC2637DA80542709C224DBD81A20EC0C1AEBA44137820A12957A3F78D9E78C088729315DC44FBE4FE6E7B14E0D2598A956A8180AE3FB37CE971B7840AAC441A7555E8819148BF7D428CBFCA8B401B8B0D5D1329DA3D5C9B63F05AF2EB76AA3F6682EFECE268A0605B76BA3E0AD5A4A6A4C56F7F174FBB319FEC5F89CA47079C229EC175923380E2DB429CF1480982BBFC47B911C8B31065B0726FB5343AC15C0A1134AC9B9FC55ABC6E6ABDADAA7B88B0A381D67F12855D39DFF695C356965071FAEC9F6AB630B3F7335557D3CE85EAD0588533CCA3C7F4380EFF2167C94E7A5824C804D7F0232231276FD08B70D1CC8A9E33BAF54564A629EC403FE984FF0980EB9E95C6191600BAE498BFD94BACB6F0C8C68753C20FBF47A1739EA31001124C36C2C415D1839C230D0FFFF7C0BE1DE499C914246E4B2E8AE27FC9502C940F981556157617C38FC035175324A80EB213D777702C795C3571EB1F22D2D915471AA12A841C158E82335F7787913FA6805F281D1FBB5F35B4DACAE0F49454536774793DA799F170FCD4642CDCABA8ED30534C0AC27827679EBFF3A65A1E5C74A831115C92C61C5DFD544173CC6704F92ACB2D207CAABBFAC7EDED10F9E5F47EA1F14AB061371FB5E559AB3D85B279FBAF022A779AC3427688CA3A031EB3FB0057425D6A0CAFF6F2F8B0D472CB7F08A3DF6927C490EA7789FDD2CCFC7F7664A9EC929D1DF5C639C5FB614CB1A3E2303977EAED3CEE33AD9E1AAF3EB04C10C4BF27C18DD7E5BB27F4DA69B64B9570ACB54093B495B732378B39FEF7B0FEFD978BF6D34D943BA83F485058E26BA8AD2C1C65A2C73B935C8B8589EBDD45D3944E7B4BA6BB306B95D43732DF4BC7B1A1C845E1DF6A145A3DDAAD1877279472390796D0514A3EA5AACA0973EAF239248218954BD2EA8D85EF36D7502A8925F5D1674348FC73FCFC5EB6C21BC82ACD965359BB7263FD59C07E52A171618427A21228693A220D33CE322ACD48FF32A21D8B15E6A9B2394F79234F6792AC64C7475DA6CE96AE15B3A2939659E89A3E636472B8929356E3DF667BB0412D4BF592F38169D685E6B1816235868BA266B31C4D3C85AF7F70AC897E152D45D7754F66F2718AF39C3494D23145985CE8C3A47736C75277A930B1B7F62B1C95FF4B4E3B28EED951CD9E98BA28434F771E0F5971A5A03B55838BC70F79E56EA79A142968534467AEAC6BB34C4F4326EE6F46D385AA3A6B7F4BA8BD33367640B2AE02F0BF30BBFD5513E39074C5B21DA07A9548EE3AEF5E7BC2D771549CA60FD50F7251C141BD83129ADB816208C4BB7EF373D8514D0987DDE1BFC48E4EFC1A94CF585C773837FD401BC08016125A0EC620806C7E62E236A53F3D702CC27FD5B79E61864B5CC1C14725E987B09EB4F7D0AF0B53F59AA0F3E8E27B68C29B957AA12E7FA50274E10A20813D5378E348DD2E116D10C4267C1EA6D184F5F32A3CB978479EC9207DB67EF45E316C2BB8F4376A40CF823CE352F8D6704C2C0D4DB7055A48092B4056A4645A7549103247192B09BB921F7C236FB7655D394AE67D11C060B8BE13F4144AD6D67C7B3BABB5463E06BE366E0339D983F5381773A0CE2E26788B7DA56535055A6884A1CF2270F22ABCBD10457FF23868FD0B8871E4DD76D4BB144AF85AF2C58F9A706A625AFDEF4AE2A41EFDB68DFB4126014396AB25F70E6CDA7BF4C44923A33B13E81FF192687BDD9796EFAB8A86E235DBE7C167FF39B2D2BA18168BCF02A067D8A676AC7AEDBA2CC78F6782552CD6288913C336D31C5E0542C74277728F35D14143537A93C711DFFE3A2ADAD18CD65E769C1782DCFFF4D709DC01651289B841F71A54421670489FA65D4CBA654AA2D02081ACE1A1A0AD352413A64337FAA46E606C39DBF8CCA4A3C607254E146EA25CB4FAAF5AD6E95DF82715BFFF2EF65758BF7BA02F056C40590339F28EC8A690F1C8D7BA644D7D9F21409E195AD1FF603872BD5497064E3DB0285B26E32B73BA0470030C80703B31B9663D1115CC8424705278B9DC53C27A72F666BB058653B78801E40CEAF4513BDDFE362B4D2F8F049FD50CDB132E14E206823143873293D40F6D618DD023F2128D36EC271124E5D13075C5AF4B9A8ABEC97D67A79C621B2F18C74DD49C809BD5BA30FD8BE8A000D65D398F95FD21D7FB1233B6 +Digest: 9C10D50042613488F0D60C0EAF5E9926F868908D77967281ECD86AAE4510237F +Test: Verify +# +Message: 85CF64CB68112B11EB9B02C75288F1AACCB9B97FD603FDC8574924AD8638DE852CD2E80693A06BFC04399B65688B5A1820B786060EE0EE264258AE2F1736B0DFA3B689BDBD11A1649022DDB457D3BC3EE3E44407D6F912296B2CB94FCCEA527FCF986D044FA6C066193DFA5A2C567E1C6D1E5FCBE831667E8DBC29891C325E86E84457E7C57AEEB1A6816606187481EF663BE3DE804A45D22467E9FAA74E91A2523B6CA395E5954D127EE2A1B6CF3B41CC2747F6F7D015FEF983525B62FC293460B8C0B98E6911BAC09D274FFEE50EDA648245F2C49683DBBF74AE56D8FA25BFD91268A524B987EB822B009027620741EB173F2BB3DEE548F3D91C983E98FDE35977AC310E4F152C5399F470778AD3F7155B5A3D40FB3A0DBD2D06C035BB00CF0BF383572E2682E336230C87DCF1A53D6A3A8A68C2583BC6F49B92F90248A3FA1CE8543D729AAFD57558AB3517C58AFF9DE16C5DFE04C9D49BE9A788B792C5AC3FC3C7A3C5D67566F51789F38361848F69F6C760CC3F6C22D0808DA19F5B031348628FB8BCA5A4F1266EA464CE3FC9F670B9DB27E7F132285AB63E20C7B81616D36136B162164E7CA40E986B84EEE29364AB32F6B8D2F14DF2591F407D02E795D4AAE62FF14F2BCB4B4874A1270449CB92A85750C3A9743A8E9B61219599F823B796507CAEBF0BEB1A2A5DC5198C5C2BFA5D6164F9490EBE124A03D7469407DAD004B701FDD170EAD84814DD2FEBA20954882062CFB5A560C647D186EF82B344CC9F2FBC345D8BFAA19F0C054C657FED642F74698F20CF9DD95583CD24B40968AD34BF946B72C94EAEBD690A003B0572B68C0CADA13750A8A7CE56520FE1E67517D10520B01B12EB2E5C4CDF7134A40F918711CE90E8F5CF0789B4246417E58EDEE92217FE28A4C8854845559591BABE72F22B775A3F4A7B73FB918B98582F7E82E1353FBF0220C76EAF4D12D7D192B8B6C3CCC12B7469F42CD15840BAC7CDD70F35CE389448564CCBDB233926DB4F84A14B73C748451B6EF7B2D3992ABA41B7B7AE7174EF7AF24FD17D1FC6D72990F5F75F4213E3A07E1C4CB81FDEE5B1C4D5EBEEE63B2C213440FF17B09036C5BFFDD3AFE844907A45737D84EDF83E527C4AF0F906668056C6DD8DA6F58BDEAD3EB9BC8533DEFA1A748FD2555F49A96B0766B0D9847F1EA8853CEC72C5869D24134E69CA5A60F100D4C98BBA2153DA22B6C916C808D8D2346960C1723E0E20F47945756A4C39943B733B10300DC9EE7CD15D60018426F8E6C1AAF3A3D61427C42A4393766F1F878A71BA94A7AEF487EB539AB651A1739BF49AEF7C9D11289DE58EB00F4A26D765A6BFBE3CCBB8D57F26953BEFCC076FE3D553A59F99E16545A0AD24DDBBDEDC88FC1D90E6C0E4D91239274A9695A5B7FF74E2320C9596B964FFBF760E7DD1EDEB303AF689339D080334486814506217A31B107C383DDA825CCF824916134244BCF1A2C486A45B5A5341A3CC75CBC71CD172B0D6F5EDD6EE5B922BF1C5996BCED5B30EB59787A4000EC6A47ECC99CF44B2574D537E1DBB8EA3414D688B6125227E605F174D886EEF70D3AF0685617F4A6A34FBBEA31E1B141B53E0E23166FA955886A31C716988DED22764C54F744C57439BAF91EB542A6908EA009B326252616D85831C74AE442E17062F8FB93E1EC8A0A1E5E02CDBE712294CB81A447B6C9B97B8717302BC8D9CC95E102632AC0EE16B072ACD3B57158F8F2F3BC1DAD71CF66A00DA72D785374CA039BC765F3ED83CA6D26180A45F8856946D50CED31948A1B01E646011DFBB61B7CD24D534253755C32B06D95107B6FBC887B3F94F4494D8B90A616513CD3F5379873E0CA70820979C7C3C4E384F91A15EC6E625553109922DC30F92A81F3CFBB67CF828D884426924A052159826E31BE5EC508460223C6F7D3C3C4A6BF2B8823AE9268E08883E88F94D96284A1AC482C1E391D714D4881C8FE0CD950ABD7EF5FBEE5B3DC43F725098E417C43E5045D6A52EBB4BB9807104DF8973BB089CD1E685522CA83C93C775897E4B7E3CAE42B6A4853FB63266C0653B534F838525073394D3C7BFE847B8362B447E0E4A56373C68515D55A6D03CB5E64584D08C9593D99E075DFA560A07FEEE22CDC11F816A9FAAFE69163EBB7833B6530623C70CC0ED1658CD041E845D138DBC791E85DBA892D0C15D871110CE7B1B9C102B2F16422CBA16BFDFC699A20BBA374F59D3037702F5704B6A389E1F52EE28861A924AD76FAB7C55735ADB8C02A3CD6B79F19A68C64E5815DC17AAEA9887B2A5837EAA0FD492A73EAACEC274A73F12E795A42EECE8FA5B761AB88546759D572274E43F4BE66649D87D263CF03418BF6F4730499F36E566A91E28B830A6CB685633347C4D01A38FD368B291BC5636A2E481DD4D81ECE6AF986A578F1C28DFB4E5CA969C6CA6CE0960F890D9A2253BA2CBB556D8FC836C30202FFD7071ED576DFAB335853E59832A6062113B96F5C8BBE23A402C7038C41CCFC130F0FB2D1791DBEEFB6C6C0B2E627BAA9AB6BDA84D7CDC494A0F8FE3C9969884B560EB348A21498B6137BEAA37AB4F5BBF820AC9D05BF56AEA67EADA3BF1C802C59BF2F5B7181475C2F34429873061D9D78EDB5D904824AB73FAF2583BEFFD6B6BC8214B05D5528812869711B9F950971CDF7BFA7D29862DE823C469ED04280F6DDB9005ABDC83EE500DF90F091DD7C9036FF709AE417FC3E2BD33870CABA75480E73E5AE4967CAAEA009BCE42866FA27ABB0DC46C25E6B25FDC78CA95BA68365E73F6E1A00DF717D03BC9A2C29702AA7661030DBAD2D841595E2680062709C2444EE808283437C4F913BECF0821A08FBF89FAEDFECEF89A3EE7C57E7739796E9E85295921183FB1A60BE2706AB4C3DAD5DF36683E87621F7E09B1E002F0E2601992C814998AD3C75E678C9752D641591D51909885F21B7D3414F4EBC1FA3ADBC2BB15EB0CA449ECB1C9D3F7BD85B5B5FD4963D251B587FA5FD170E2887C1B5A12DDA9BB7919693641114B31C8C32DF133671ADA4FF755F59D0888BC9921 +Digest: 02BEE4AED03F59B68EB495120FFD811C109CA74F422F4AD4430AF1231F47100F +Test: Verify +# +Message: 395207901FD2DA98DC93FBC022C0C45C2A924FE08877DD4983B2537962126C955212C548EF7B7B697BF654EC11142C68EA6D76FFEB25B620400B8DC2B7F7E31A4CE656BA6BA17B2152FFC61C36C3316DA0CFB56F1CE7C4B3F7E5FF618A3A7A28F47F5A50CD929D05A6A5C5629CDCF0815A5FA891DAD081762E14F2A23EC69238649A8E947059E569EFA95647529294CD7608C10F943D80A5390C5F2F8234F608BA9ADC6B0E8784C3453E85CB793FF9430C78DED1821B60724C40FC4D58184B11A8BB52F52B06CF0CBFC8CD86EAC6E482D1E30005A3C7C162FC33E476707806D56AF6936D5627AE47110E67D1C545ECC5B55AEBE15BD6E2F0745C51997CDAB226DA73C88F5450F856063901C55A6BDC827DB329AC89275F4BBCD3F9B69CA60250F7BAC6BA1EE88EF5214983DB1CE2687B95667BAC1B5FC797AA8AA75B6FC515C0A11AE5C567F619E65CDA6B7DA4D1D7EBBA9CB4B10C08236787CC8FFBC5044BDEEB53C626C128B868F8F436F506404ACDD00E624893C9BEA90448798C556E6D61CA13E1FC801811BDF0774C4A7F3EEC8059A9DB6C56439E41FD03784E7532CE32711CB1A0252A80ECA3F3B2D53A8E5F26A560ADDA5F3AA3D0DBB511BD537661BEA64D299E5C55D7F70D29D75DC8DCDABD60B281C04211C21BAE32A090DBCD534E1A79A3F00BF8E3DA26AB8664B4D58A39133305E8BCA57D96F7805C03D9988D22D213F22036096AAC33FFD757ED1AC029A0FE8E66D71C1628D991B016BEDDE3E61EDF4C2EFAC9523623BDE90532FB600A9E51820590697278F355895C7B4183254F878FB1B9F7AB93DC6B1F639EF299C11A7FCAFB235259C7A587D2E4E2D1D5289597ECEC1FAE08649751E55012D6E8D0280781A56D9672F2C1E98DC95A61CC3AEB69729E236430CE17E3958E1465C8454BA46E955CADD49746917C1EC0535B2699147122B0ACE7072F27DA0161B554D461BEDC2809CAFEA23A71F0E400A9D7C401C09412DB1F5B15696987070B140192405F3CA5045136D9A1F851412A158581261BE23A53BCBDFB27BDF0C5D8AB8FF2B6E46B69CE464E2B6C788A09BABC2FDA42A4F3E228CBC4BF738310089180FB2BEFE3596980F9D862B336D2FC310478DE18D98A55CF7C82C85505F177908E1591F32857F35BB88CAA7DFDCBDA86437CD1F44E14797B4AC412F75795F94FBC89F6B4EC7E8031CD1F746015C5241DAF439DEBB8A051D18F02E035BA5BE8D0501FC5D1CEE2D3DA0B28849570FD87A9FEE7C7DA7F91737D540712ACF4C0D79DD0CCF3761F4DF27D462308E0DE6AA2078AC9EFA081F4A97251828C763CC56551910DBA75D7F1DDECCF8BD2B361C81A46731580EE161C5E0A511D0AC8C78FFF20D63C9DBC3083A308708CA9995892163E7ED5EB9C77CB0B8E15051876C32F8DA58218E798CFE758635A9F06818602357E33E9C4FAD168EBF818E5A11C1B93A53B3CF4A005414CCBD28699AD75E0D571859BD43EEC8E9A4308141D7D66CC6A2C67CD3E564798D4461413B305BB5DE8F842520448FC200ECD57D191347ED5E0C1CE00FC7558BC1AD5D2352406FFD3523A0D7F24B45DCE247E02BAFDEDB7CCADE937897DDACCD64841D5FA53846A9E42286191EB0BA98C891A24ACCEB80200443CD799EC1F331A51BF144B415E69E9C7DD42E64CCC287904E46D8FB6596A2B6170A92ACC9510490F66A7FD227BE27F925EB6B8C591FE4CC51B236A2E0947BB2F3565485A2AC5F1CA735687E22E1567040D3770459A116B00E062DA8B6F0A8889F388B755AD80E4DF0FB1FB30E154B4C341591318F8E805289D7628D38BFEB5100F9915210521D8D10CF4394848E9DC970DF5C857E30450D6FB3BA7B173050AD28CB9FB6C196DA8FAC2D2A427769F91019689FE06C6F36C7C7D597AA4D58FD6FE4202E3801ED1729006CCA609C5ED74194F22D758A6DE29A7FB874B2E6A8F92D09AE72E796C66F534791CA98BCA47B002F5E057FDA3057E2C72FDD6DBF1D25DAE250DD4C6553070002BEFEE75B78EF131F4B9464D33B1E873124EF128D350CA0B6221D27B5CD7F17B167442C5E6886DFDF134C35AECCA8C6ACD93FE20924B620D318C4BE0C1863050493938C841A6E6B3A570312DA6EF734F2C7FF5D49AF8AB5E0F2CCA933397C89ED743EBB859F28072E3F128DBCC3D2A00E65633C8DCDD5E749872BB732377DD26BA3FC19E1ED820565D7E2EBC35AC5FBB45FC035FED2E9EC1B4F9AAD7F6D308160693B2A84F5E517D78528D93CD65EF6963F519D0513054987AFC991F26D0230E7AC78579D96E2A9D356F15055955A28DB14590E1211476BE90E9B98B7C8672E9BB060A31A7856FA7F16F81B4FB223708449552AD1CFF4561C7B71486CD134627489279D375A1A677C38FCE334C80B4F339A371331E4A367C570392DC98285BAA4F40D5F21E5F8807EC2CEB5AACCDDAA47D8D2B0AC3A5C418651D69CFEE655FC201AFE5BC5DF084F5F65A9592D9358FDC6F6AC7AD602600FEABF202E775CFB3191019BD9EF936DE71DA6A19C0B7168473091961E5D6F3B6487EA27A79CBA86CC7534904823AC385BD5E48DA8F9A31FB20C8621F8A23FA409D98CBE939AF1423ACAEE76CD9E589C5C5A6BF881ED69F2410DE85ED7F09C09A9631ECE677E54A76981230FA1F1B73BB4B98026DF4B936E51593F320B8606EFC8B8AB16F3757B8784B649A15C1B04A3B88F331DF9D4DFC75A2FC46A9B2F8435BDD130C28925D529D60B1855FA2A60CA81A2E85B6A2FAE8481D76C9E63FC3A59F633758D2109DD9D4A46F1B9D0DD05C80E577799438B1E7D6BC261BD3EC526EB35BA49E51204E6C47599F6529135F962D34AB3E1A977B9D9BC077596853DFE101DA5F6845196D30B75D1D52CC33E78D7967E4682F9F050ED4883321CDC82E5A76EC2BB46C10F7E7E17719829256CDF681EBD0E918BA275D34304D632FDC2E8C89BC406B0FDA3597CF2FB8CE8BE9DE58914D0FB728D35C41293EE35F538BBB9E8E1354647797DABA8F5F7E87DB240D28FA1CC778AF7026B9091ABCE7F4C78EBC01FE0BD87BACBF9F3FAA2A625ABCB48C +Digest: D2B7BE250FFF89045A59E6EEC1C83DE3246651D4B2FCEDC0D18782706D42F01F +Test: Verify +# +Message: 6BF7948385DCE89AF0EF94AD153831D5531075D75C95AC315E288C804D2F495DB688507F9FD51E0F841CBFED51C8D3C6B5676F3D18A512FC177CED103B57EFD79F0ADDBFC1F210C084213C6A9605622804BEE982244B8DABF1B4A90DBA93C265A7D5F548D1F99AFC1A670B4980D9C47B3BEA853F66B6DA3B79289C90A60A870C23F8246AB09E9AB7B0AE9BDE4425E57CCB9951C7A4631C17C9774915EE704A5DA18E1DBBE7117722455E5DF3889DAE8718FF89204E18BD985808EA876B93549767B581F35B0803C5E22C14A09CF3DBBBD7DA4CB4CF34140FE45A2197EEE6F62FAFB23922C1925E12B2468D75B796998046304156876DA17D65E4B2D76B40DED15651E83D69D58E24C84BB3DA2BDFB0C31B9BA8765837CE428E030029991E7E7F8ECEC32457369E119E5B86BB2226F942A26036A48E00155098D2013DE03DF908E89B59BE79ACE1696798DB70CAF5034709D46A682FE2BE680B5D40FAA94750A05A3A26D698ECA590F5EBBD6B616825A9F740B6B214094CFBD54FC3DDA0B360ABA64B65E74FA586B63E2F357DB762351149D9CAE5F2DF23B0AE6633CAE92C869B0C1009FB3DFB19B7D7C6430DC38055E1BE82C1355FB70ABD44B0C8AD5559DCBEE13750C5AE04DB9A198D968DE72F4F4F6DE4FF15654EA553D4B382661D199ABC66A207F3C7F9C99F5682D67D44CE32149F14F78A1538912D2393EDC7D67356C1E0E014C19D99EAD7883C3C3EF7BB43EFCF3D63F2C71F90492A20917D92C62476EEF515C2BDD6ED4090B84F25C8908534D842672715DBE2113385C17857A97BA62EF9C088EEE784460BDB7577DAB85CEF8D20392DB5F118C9109EB9B732AF9ADA241E22EACD442D38189886397F70E48CB159A584DEDEF6730F45C94EEC00E5549A55F3576FCDE88464E4F29D2C32B78E22EB0262B37B4B1896BA751A31CE61BDEED738F5D8E86841B0B1CEF6573BE27ABAE1CA8688EA373984F5A1688AD5D197CE08A52E5D45E92061F4D7A9BA649B19F097448D551A3DA00F3BDB2AC8DBDB5C3CC7301B86597BC62EA4B1D02F316A51E6FE4C54F5E892594BB362A7F487B81905DECB9CD539466B1F3902F88FE2371E15DA08146013E09C4B44D8E3EC2CA58373AB5E91134618EEEE335E4B013472F23675562AFDD80784AEB9B338A2AA8F11D4308F245FE35BBF058A067D11155AB617F8D368928D12CCA0D1726B79C184547067FA0697F4EEF4FB06C7AA0FE4768ADF53C30FA9CDFA8B6EB5B4A2A3F65499B9CCC3321E735E7E7C662898DD431A8B0AA512113DDE031F69E4A6BAB55A52E295D41B76CBADC237D78FE4694FB0095519DAF7335C1F1E73E4621053F722C3B7EAE15643CF49B3FE515DFADB4F43D0B32E340FC68182F94273703ACB29EF7FEB7A7D5BB96E723558F68833356A4230BB5E646DD29FEE8E8375B2828785C106851924726C846142663A43DEB5F165141FA75145C8A484749D0D05756097CE66E269AE73779D4D36E52A4E9203683F50F297F412C08A7E941B4307FEF7020CCDE3221E1E8910EFF51DAEE87977AE79AA70A2884FED12BF1FC72CF89B68139416B888424FD8CF35F3511D488A901C94728563CB36FC7B29360373049912ADDD02F85647CE4BC5FC2AAD3887AC50389E443F8904904E1227BB0566FD33D2FC40B5AED771F34006D3DCB6C392D3D4A14F42CD1657ADBCDCC615D2DBF204E50BD71DC43944EAD170AECEA70BC56797432C89CF8679A61E70E738D2070F9164BB33D1C1C178071F5C13759603DA72FF407978AE3DCCABDB048611E19661935E254642B27A659E75E47DC0F35E6D24A2999B416936976BDB38267388231B3B8B47348A27EE58065DCB91C55B60F8753FD7C4E660FD03759A4274E03EBA4924FA0E7D321087DD69B94C2DCB932C723B392CCEBD4664460C35A77E50D37CCAB56A6C72599E8CB88AD3D0138418482B86632F577C33264F1AE0ED8653CFA8CDA18392F8DF55F609A669EB42864145255353B6811E443B90671D46118E95FC8C6721A753B68FD26872616A3D32ECAE54FCBC128A0209E742EAF2EB2A9741CBF6B42907B6562866B524E1AF43787F4753DD646AC87A2018974D9C5D428A1A40849A169DA3CDFD9F699B702392E8CE1A8F76BB13CB4B46F5DFD50F4FD8855EE47D91C851419B05AA0D7DD75F9229E75FE6DC2589482A4D12D2988BAEED4536750C3C542A4BAC817989079F0C787F2990435F4B1BCA45FAAE080786EA3440E2AA03387B79B7313F122275DA254D257FC28E211C0876773D54C3DBE6E0A9493CC436B00A5BC53896986B39BFA5896FFC1D837F0FB3CF261DD00D0CE4FC8AA64C192A9D8247EEE7308A7611A92457BE711A731113E15BA9E526B9F589A7D1109DE7E5F7C54AA1605E570B6DD41B82608E4593016E999D19C25EF43761E6FB6423195F6B8EEDBE9C0DC54A2D850165DF92664DC02C59E48022FB1C4625C56B22859D53D5602BBE22A25681392FEEEF15153A6271D3AE379705016A47D7B45649AC8C87B7B995C82142927927E8BB572ECAB442CF8C583174581739DE8A9D883B6BCD30D23E5EC3D241D3DF16CE91068BAB0A0156A6EE5225B1C5A5538B14DFCA8C6563D25B3A2CAEEC971A108DD1277EDF71061A901CD2D367396C3C9B5D5A18754BBA35092EB705E8BF23367C04126A1984D4C43B718A67E2008AAAF23522D3F5523D5DC4651A324C64546BEE4F3F06A10F0A6A0913129CF07B9AD2F099963408B48B0CF74038CB44D0C55346891C41D85F286C5585083EB924794CFDAEB7AF2C01764C34E0D2ACB4A69A14901490E0588CC10284E6246A9A2F1B104163C11148FC71F706A04FD9CCA3D54AAC069C5D1CB909A8C9DE3DD63590063D2F38CAE63D62695687439D5F2BA2953B011FC3B79F16B13EBE5A81D52411451FD1FF1B1876157F4CF4D197BDE26558F604520E83AF431F9487C2DE19EA2F61AD47C174CFC2ABFAA70D35AA15A37206188D4F310E0556FA1C667B9312B170FB526FE8DD2D03AE2B809562C4B933776C71F944471E9BECE431306090002E13ADA91BE319D73DC44AFB7653CF024E05FCB49966ADE6944A84C865DABF567E95D1ABF1 +Digest: BB2AAD332B92839EA851F6A5AC5949A419C5B765B67EFF475D65FA37304BFC70 +Test: Verify +# +Message: DF044C04171B0CA8B6C7BFC9627116D057E67E5A54DC998E95553617920B45B107BFFCBDF18D501F045315C94E98E4FD9E16973DC9175F02C5619FB0ECC9716E1BE907C5349A35DDED7D0FA54C7A106120049C400137207769D80B9F32309318F68B30180CC74BA9E68C052F17E7C21C6D738407A80FFEB13ACB79989E3017C7A4EFE73D614E4434E6D58A5BD5CB76711BEE2A2761BE27B83F22CD9E81CBEBEFCF170A0CA28DF51EAC2DC37BAD948EF870E5CF089DCC20D7D317F78C3FD784D2F185DEACD4EF5B5B524C7CBB87FA342908BBA3FC8D56B4409E98EE6AB5094B4B758F2610160A78B418E9466D760055DDB483A69B8C3FCF3B142E0123CA37A1F29EECC99C16E85518F7994168E04ACC357F1266EA746E896E7A1C67DEE7D503FB4AD9B7992D7A95A909118F52D260DE31BDD2F9C96FF4B4A7E57BBA35ABD2127BEA62EE2EBC346518075A736E6EB6EDB6767E07015B6226ABEFF4228CB7C891593FB79BA4BD3911A8655F9A4D5166EA69D9D098D45193B2D82DD80C6C4523F4CB2A65A95FCD7AFBBB0508FF9998CC41F8DFC4CFB5003C2DCB46F30805981212ACE84994B5DFE6AADA0D7EF961A02B2ABD50132ABD44D47C8B9095CA3CFA8F51AE8F97F0832CB97A1BB702EC1591A96DBDC36A0B9A88CC1B2881AC71299540834490439AA0F5EA6D19120F3CF4BC345D2C2513E75113DBC6FBA9E157082FAB1E1FE7FD366897331E6B8907D23CC67171775F1C725B6F01C42DA45FB0A01CEEEDBEC89DB5C62B528022DB8DE81481A2B3A71F7FDC767C6249CD34E670B687181A8C48EA060164C548CB65ABDC620041D71CE6B6E576A89D0F946000F0364366BF37AE1773261F6E0D585CD8E286FA51C666739B9D5B6266D8D3F6F244D8F7FB3EBA8D9CD52819C4C258A04192C4672A01A3676ECE0961189CFF7DEE1F426CB0E9FCEB57DCDDD1A769F6E5D81968A86F72090AA2B9975F75C3E2C8398E8A6D4AE05342599DD9A895A566C9C3E5625699E8C5CC4F9120161791A9B664A02CD54D1AFEB589A025389E77091C9CEC6F7373298AFD6E200B9AEDE37623D50588050C4E093C39EEF544376F36B0E09E863C678CA4A8C3C18C45E91BBE1224313426DB837CFDE1847193007B7D5CB633D71639D34D9F7F4A45167D52EDF5BBCBFBF7831D65DD77D77CF1A7CFE92FC717E33E9EF4E1B51A98F136EBF020459D7E73C4B2ED18765C3DC47C212FD6D9894A8ED105341BD9D3CD91BCF51C3FC1123554F5920DC8EF62BE7692E39D1EC7FDAC57B571B938A0C7B3560E3D785EB1FA1A5CD502465406F91D9FE551CD8E21394436423BA62FA9336337043253D7729176BD71945279E406D025A1A6B72FDC5D207A269D0E373D54DB1CE09C803B02EEA135E41FEB4F9E136F63BD51969E4FC593BC998ACCA27F0F4DC925129DD5D5AFB4B7D3B4C0D8165B6C6BB8F6FA212FEBDA8F1E5B929FF00D883BD4384D578AF81A574AB6AFF0B6D0A6C61615C7160EE46066B9B3D5C0A00CE27679326B01205EFAC962202B63307385117E031D9D5F6E2111ABE5AE6C38DC8F57FEBD2DDB69B45A2C6CCC3EAF7A899A9B853A9CD97958BF871BB4939FFC1DF8C82215A7A670BEA8E1760C99B3BDCE65B1456067F3155EBEA8AB6BBEF74C5FCFB500082326BFD99E61C136BE036222D5B7F20D12CD847C8F4A83940323630FF3985AF3FD5FAEB7FB997DB46506C210CA139FA68F29727130BEE9C481B634FE3D60622718371F86CE5C6B6E95285FDA2780D1BAC53E158AB218E07886189D96D9A43D6C9A2FCDD1ADA9E49EFA826B8CF5B0DE22D225A8A48EABDEDFE4B89D97F91BD3255F971FE94BE223C0F60226A2ECA8D3361DD687C1B1EEE478E2418B7B2F343C718B90E7DD4246F4DA2BD521A62E646062102F1F552C0B188166F08FC57EF4F40C712F78C15F146FDBC882046AA12D8839207DE1442775453A063C7E72EF1292AAC0B76424461C86683F2CFB926BAC14859F15EDFABFD71E1899260AFBEA441AC2A7A862DD8A2DAF67427AD41C057A9C723BAAC6516015CF15C2F0F18B19FBE2E260BBE28E2FD4816A56C116FFC69005B06FDCCFE5D46ADE4B01E8E100AC4C1809B7D2494A9C164A55F7EF2348275292908BCBE0E5AFDE86F1A062D187E2D8D6553B9C6534720F0967BE12FC0E0AADFF5DD5A4FD2B84567AAF90A105EF834571D24DF3E494FAF5727F6C4E53B56DFBFC28F2E093AA8BBABB1CEC41BFA291DF7B877207FAC06E035C3E90AFE263A2FEEC810DBC7069DBDFF64B17894512AE09B1E823AA6084B0EBA257083EDCB136858818AA4F92ABA9736491106D034A9EF9471F2C04854BB436742D559C1D5EFA6AE684C4A12FBC2C2C0EC11AC3C58D57EB812D043FD030C7F4BA1978AE3A1901D850A9460630A19DE09C410F8E3793B9E86B171E2560003C6301FE600D53AB7560F537CB4F5899352FACEBBF13D91E4958D58805042C1E004A3241C257A82EAA37C4F73DEB09F55A31C3CE31903BD326956BD8A3F67C89E3FD826D5C1E57EC24ED057C9367B0ADBB6BA8C918C8ED1C527898512EC398D0AB9DB54C5DD1F7BC6F688A0BC5721455589C1F7C9CD3D9BFBDD6E8137878DF0EE3E646FD1BB3A73A6217A63C4ED47DCF1F038E353A5E0C664D54D5BFE96243DDFC61399BC9FA4607F4513B64C84E1EAFDC1C960412974FDBDFF55F52D9E7F0ABF915B67D3357B8F4FD97B04D7053D122CCFB919E0B4B681DB7AC2097B8DEE433E44C9271277D0870707F8255332F3708D3C70D6F746AF31143A47C9E261A23A11CCC52CC38AB390AC41E31A07823C3CA39BF0150DF038E61000052669E80362EB891C2B8689E5A71A2B102D0286E1E2374CD0ADD968624E5E34180AE3EC07ED6E2A395C6657C751FC21F55FA96B41203489CD560316F51E57153CD7A5EE9CA54ED07E235408469276E67565E8A74ABAEA30BE63278253AF282E61D15F28F1C66EF77CC7F34945F6383440F1C9FAA258B9894B1C50ECDE58BD83C2688CE08DAFEB441BF66C84FF26D43A3807AA23BD08F0B083FF12149BB14C45B5AAAB3944626AC9E032E127CFE7C2D0D279C5B148BDA8FCF7F9809FA271568F49055C2A58E8B3419A1FB8E03D5ABF3D1A3114F211F681B2FDCF7719A425402F954B7C41540790C0C85F7641BA1A66F2F026E3BF54910 +Digest: 5AE54928FF25DA9FD37AABF2045A277568463F7371B2E5C7D4A5D0140B79317F +Test: Verify +# +Message: 814EA989AE31D247CB96599BEC62BE0080360AC7B0264B374B1D47D1378C30ADD272E014DC7312D446E7DBE83A58B9D2BBE496B87D4FD65176CEE69B704B2ECAED8AF62460BC4962153850FB0CDC26D608C941895B5974F2AAC3D16216658FC57C1287DA5E9C7C6320CF64B3DD79691A462B243A1C948B208E96B42FFD40AEDA761C9714938157B0D6BAB04F038E4227D7ECAA7FADD986243F792C7E9F7D8B5BCEF32728F38FF66C73969701A8A4B971B2049F32A8A1CB664BDA1C4B8C7D0FAC18B4DA543C4E6580AD0A42E4456BD2F1AF050A81D98ECCF2A920573A2DE4813537621ABDBCFD327B6E3D06C670F4EA69805B0058E5FC67C236FE9DBDCD8FBD5C317806EA91E99D985724DA28E144311483C43D2E8AB1254889E28F2112019FEE3205C473708AEF3896E0AA9A2C1008D33D87DFAAA345C0F78CE161CBB7A579197D1D13BA78BDE3CA032C563F8659871B288076E69E2B14025A78BEEB2EDBF2320AF6B6ABA16F947D1A90EA64ACB7C1C4FA414A985C03B6B19CABDA3BF10D0E8E334A91D3D3B1AECB00D20CCF3815D8FA8FA9950AE211A41C72AAE5AE989730B2A56C302EAF6769416FE5D97DDBCB4B9B9BC4909679FF7BFBEAB15C68F1344EDCA46427A86AB6CAC483B2DB683BA04161792B97F662F60D60742CDFB3155990065746C5B7E033F301BD1D3CE1F06627FD109F717B1AB06534F9EC23C47BF31FCB4C71DDCF868F8041F12B54854B9F71C483A0D2B6CB22A4B137E60C1EA6EA5CE1619DE906226BD998BABA09EB4DB4212DCED304838D65D37D690D9E01AE1D90E2F6E46C23351A8490846A54016F3205263EDF60E330E7133188E40E8CECA4CE8B3DA381AF72664269291D1B553D4456C9BA383F88052C93D5B2D6795F72FB5206607C71882F1FC46A64D354EE22488F9C51C0F8F087156E46F26BA9480F9ACAF7366AC61F0BA2B97957781C8576A244323E7CB49BAEF031C9E63CEEF35B430F30F8D4A448F3FFF8EC2747702850D74EBEAEE3D8263D22FA77558FDC9CA524C8C4F6C7B368F2A1817F7D71C3595912BB1BE53682943F212E22FD9D219597E3EE7DAE4EF0D87EA5A90050A2935D440F2EA1A0B4BCE9BF26D82CF0866586614AE7B1518518708BE2D218FBEC63B6DFCB5180C7835A11BA643F0C950A08328F0E361987D39A1CF0D29B310E9A673CBBE7DE39C4E46F36F51C8EB5DFFEDFE975C6BBA6213F6858A45B4B7BE915FCFF15A8E0F6F80A6B4592BE8B4B513D173F7B24512E9DCB142D480811C7A765FE7C06C85BF45C8E053306C02C4D76F96E8AE3F87B28799755378950AE712351FF46912464FFDFFD1C4D0E6E859671261230950B8B49384D896B09BEA9DD283F6C3B90D562B17475180F5DB82AC7C6680F3E5EC82F1776E9FC2EF6E6B6DF27691F39F3C7218CE3CC7925C2E8998A74DEED769E594E8483F00CACB620FF37B6E4638C77DFB3BF5F59F38D679EEBA3B1BE0EBDCA13CFF20A378EE962FDDA32C94AC0AC1365A14D7673AD76BD788B8BE5CE87BA509FFC85A2480052CF0477EE6EFE1B148D46890EF9E89C492E4E9B3C553E6AB58B7DC82DD78F343F644714A72F837A9DA0DB9C7F9803BD90CB193C156AC4AC66F9D6C55D484E2FBB5D4C562C1BA364CD406C9C04FB80A92851630DEE7A597B4D908C2BFAD93306DB62345409B306A8380599BCA2AE517CD40CA65D5A8E9FD09BCA56B49F05A65D50FEF84B1514E775F739C2C1427B00A389085D8D30E7668FFD643CBE73CC5BBA96B69965E55B01713FEA82B42FA46736714C9F9636DDFA7561C177F51E1F7A2C1037C43141663C1D72F9999B92B5C57E6819B797CA0A08D15C6E702440AB00550E49E20BEFE902691316343EEA83A76ED8F3E270073ED9DF8B78243687EC9EF55F400A343BE6E65E35F2DD690A98A36B6D33A8825D5953B9A0ABDF8605112E277527777A4502F450DE1C2CE87E85893E5F3843B2905299CC279CF22C60C46C9D181AEA821B2A24928979B489533166B4CDBF03EAA7992564EFB1AC8FCDC03EEB03C0EC54FFCA5255F5A1D8F1DB04B214F8D173DE9CBFF8DB4531DD739CBF14DFE57A1FD5EC850A4AD0598FCCD96E68191518A0AFF3838830B434AD3B67BACDDC531A97D957AE33D048325EDD0A62BAD97D36E85D9CC36729AA63B5FA64F559EA69E056AF01F7AE206D0E03545E80992E0ADFDDB7A9FEC8F82D07ECF08DCF8E6EA141DC3F593659AAC2F88A5512E8B0D80241773453E91A1220C62992FF864D11FB7733853AEFE7FECA8BFB2D27C661E2E5A418BA397C51CE65CB60B2BA4FA22D8A65E15FD11559309B7F89290B03F44FFAED432DD35862602538DBE4D2520618BF51ACACE5030D7BDF45E4901D23CA3BBF76E3764B08970F8FA1E6087A40CDFC4BDD66D5481FE7BCB7C4ADC5999EC91D8DC3EB356F7F88FE59F6CE3F88F3405C4C9A2F185F57C78A4DF307874513A12FE69EB48DD8380BBB3BC4776C29F962A1D51838D60CF652C9D3B61F6853D1F66BF7918EE90B44472BDEFF60D3405D73D7B45F84B6C8A5BD5E5701593D0093F4E1F119217FD259EAE6A9E9A1F2CE69F427C8687956B701DF9A10453EDED2F0AD3DD2CF43466DB0F2B665E33A2167345054ADA214B76AB41EC93402150ED9CECC834C2A4C828E8B919E6509FEAE6ED6F2720BE3479B83AD03E7D0BCFF1DF46E5ACC0BD4910D533D818C519ED535894C6786F63089A01DECA0B131299DE0926296FDA859676D78160EC1897129470A032A07174F407E6BDB75D919230EA584D86FF8A48036FEB89F74F211FD9E6E520EFD8158C54F01FF0261E3D61527DC8ECB190D17417BC4FAD246BCD7351FCE5B9340ADDB0B45EBCE68D92F674465A1A404A3CC16585C168A00DD4A5FD0F7DAA9FBE98371A7CF57E2018E4AEC3C8E0541FA84AC7D86404078CA0AA9B23D27AF694771A821EA9A13BBE3BBA7CB1AC15D54940E278B9B93CA068A502895C839CCD276CD0D8B6B3A5A40EAF74223550F8D1F328BF890DD8B2AF0392EF15FA7636B5C876CC39E43DCE7E44E5480D26ACAA87F3D79C04DCC2AC3659AB972C5C92A47C0463134013ECAA5D268D92C7BDBB6A425343CA60ED365D4193D9E9C1FBD28E98251EB19F5B4A19DC83195D18FAA8EA857FE150FE8A7061B85E7692D7F3F62F9530D015B7DD1DDC8423F3C13F571803022F27AA38DF4F3E6F20268543B42A326BF756767436E264FE350B35790229B +Digest: 50CE4D5481FA500AECC8252BF69532F90575D5A1F1F6D6E67A2297C0045D8629 +Test: Verify +# +Message: AFF0241454F7793FA3D427BC38FD884033440B265011AA49F3FE4A2328EC3383A9DA07608B68236EDD9186B3BBC566A27A74A009300783883CB73B8BB06B3C224438A057AAC649EB133906AB7DE48FBA417AF7C5DCC0F134020F375D88F999192D2B97F52FC498358C7FC0BDC46CB322E8DD90B6EAA5573501A026254A0855B9B33652537C08BDE0E71B07096B633B02A2A109C72798C10E2371C196A18CFE2B5390D64B1BCBF0D7ED2208F6D6C1313BA20547B11967BAD7A121D4398C6CC40FED9CF9D4065EA8776718661EACE4C76C14F67539234FF6230DC5028105CF8161493D488D99970D27988FD1A3B722B2FD72D1D7E9CC0AA49B2FBF819CE77F45E682826C325C52C2B3A31737E7E6250D7A226EF96CAED6CABA0203E27EE88D3736C271AB2845CD634FB300CF1ADCBC87FCBD5D4FB54C4E0513157FC2800F0EDF585C06CDDD21CD562FC82E986CB7A9B30B866D8B6B372806BFACE076456A83099E825D1132851D6E8FD3DF68A09183D00DF09919C952363DD35EA3B6B8528C5FAD3DF58285FB88CB4551D17A7854BBCD09598B4FF954F0A2D8977A42AA1CDC80C754055D2299FE81846FA645DD2F4779ED1A59FD695106746C6A6072C5C86E2F08E9919DCCEDE7CB9897BA717EB05BF1FD9E1F6EB45F9FDA4B9FA055C08EF9968D644DB2BDD9941013F4013223D56E2E3618E16C19B74511C639EE775528C980D2D4005ABC353483ADEB8E0B7F95FB2ED27CD509FE2436D340620D3C6482D8B252A3237B89C3C4917619B355624FD19BB916017F8DB99F868187BEE3D4E8095CF3B2BF6980D8CA4EC543D4CBA5000DE5A7B0B45A26CD8608D63A1E99C84FB6431091D7769B2CAD69F9B490C6A49D7319F7F684B186EF71FD8E9A1333E45CBC1A77EA5370AC14FD1F4FB5E676A184230D308D4501AF21C3EB4575569D2BF235CF4977C20D6AC4FCCBCC52879271413489C2EE97F75BD7FFA1640A048D6FC2091A87431FC7631574E5C4F7792B2E8306DF7943FD409C4C8E0BAC5E760C202CB069E0E091B1DF9272C16642681E5A41FB8B51183E9411B7AD857F91FAF2D957648EAE8E5F9FC27235D331972266744FBC33710B7C397752BB6218A53D637AFC3A68E8A16AF201752B06A17EFD091B21D7739E287EC205297AEFBEEEE605D4B1DD63F55D3E16AC2887470CEB706C807C36B14843E80E08761E39ED19E7D80D333FFFBEB500CB9617D7647E08F57C80A228540B6E50312DAB81BC6DDB4CE550E34BE367A9C1D3AF674078B22DBFDC6C8970CAEE0BD5E0C999AC0BFB3BE08299750539CC1E76F760CC97F2E073B18EA117103496D467D2273B45AD50CCC2892F45823176383736E620837CF00BE3EAF73EADAB688B85BD7D5B46D86529A55C3A3861E315742AFCEC5A6CFA478A3874B56955782C5D1884DA483E079DC8374485D00EF14706A067CE6417CE7009E91FE18E3BA29162344B6522A34C9FFED3510077C151FC7597DDAC104000DF647A65EE6F1A6C9E7EC05830EFBB7D798E1620E8FA1F745BFE575B15C7BBD1EC4E61BD5526C94ACCFA82F600E2A0BB82A4B26F09DCC9BA9DCCEBC39760BF5F7519A26035089313EAFC5635BDC0B05037AC2397A1B84DBB36AEF41A2813E66A6B2A0547CBE256951D34C34B06D43A420AFBBE6A0F3D0E6526FF15806FEFC8B5E25C75EFD108D331E29164EEB634232B478B683DDE4035A892F50D7AD9B920932744DEDC34DB587EB327D07E23114150F6F32EADD78E8C818C89DA969FB33D9A43C7DD836D598468426042969C0D8908B9640CEFF2F5466E26557DA40450233394676BCA798C88242E6B9B7DB6BACD2E14CCBCA0A610E1195A08D97836B31C77861A6BC9A4C3899A43A21CD0D914477456FEBEDEE9FD3648582462ADBD370B546A2B50F5B9BA570B8E55F7C4CC469E36BE45ED931D7D58857997CBCA7D541204D32858E5CC9E10633A2E5AE43F13C1F76B2ED8739FBF7474CC1715D4FC2994A36FFCDD823515BFCDBBE1CD489D420A8C31B8782AEFC7B89B1C3F72552DE18F41730A646B9C01F46E1834CBB2F333C92F652BA8CAD2BE4BA00923F7F967D708E2700F15FA3DF7658D80239BABF36E754B9159A32F9198B6E98819185E5447B7479AF566865504BC0D722D69BACEF0A18A77BB2214173A8B74D95CC56E1A857F7742CF6CF157CFC1763131A32B3E4C4DB83757FBA98346589C03B5C565B4EAA036AD938890A4AFF105DFFF9E9A7A5FCFC879450D0E5E3E0B13F5BF4CF64079C5F0E6A8602EBB7B3339F1E00C1FBD8CDE98B598D4203F674D664992D4A6805738207BE1D254B09EEA1B0CB05EDB53EED2E89FC0A5C2012C4323D42E57662320691398726B9D828B54A0F72C1155B95B8644442FA87715F7510B3A86C839E403C464B9BD2B25DE2016EB8615D65D6839619605214462021E4BBB0D56561C02AF73253EEC491D37A59507771A2DD91398CC096769577F3EB3C0CFAF3EEAEEE598A28829E28B73D6E779CC5F8853BF6565A77C5D244679A459DBAE181A35C19353FD3EAA189C954FFA847622AD3EC4B35D573B19787DD643C1C4FBBA95D41BD3B0888EB7EB8FBFF0E69FD32E41EFC1C073B3FE6A9BEFE662E663E62889533493112BFDA8285AE81DCE9B0EBE318E57A0B10331554B6A993AA916D938B77273E9B54B828C5B5C8AD378762E84CBF2F2298100A2E76B6F8E1B836712F18721D57AC05596E815BC5DBB6D039CDC693C792B4DD589995BFA3DE0D181DB75D97053077EDBAD0C3905A4A9282D2F6AF3BF451C8A39F08923879FC6F21D1DEFBF0827BFCA6F595D56FE2CA89FEC20AA27B39225EA9C27F9670E6B2477BAAB9F5C4056E440533D4C63A910AD0419539BC9394B611D6ADC72F944715C759B3CE6405963A21BD599DBC588FBEA0597B68E53E51004B698CB3E1C009C1AA4D07EE56076B4846EF991EE19A9590E440608936A8F96FADD6F0818664DA28EA90612F5CA2B9340CE7D734C5892A1243CB0DA784E28D3BC00886906307157DD58D944B8F357279596A8C90D0EA643EE9B2F7D9082ACF4FB08409C0078486CE66620A99B832C7E5D90CC596333C9823F431EDC40A28E2C9363BE53A7426D9B384A673D3562699171CB40608ED7EF109EB6B7FB45E201F9EA2C06E9888CC82462080274F4396C2525F5647331AE8B9009ED06A90D44EDCACBC226BAEAE2CDE889E6086C04CE0B933FB3C9B6B4B93E451232BC3263278F26AB5C2A0C20E5345058BD9A7F962B59FED69E800AF0A2AC0120EDEC3CDED43D716DACFC318612B6ED4B2028A25CD56C941C7E1E4F00B60657BB +Digest: AAF538B4C61E81BEBAF2B89D877EC6F18708464BE60FC23BC6E69B075AF647ED +Test: Verify +# +Message: 084B68241141F7CA8DD3CC6632F3E4344E5AF35C6562D76FC062636148EE7F4710948E0F217DD18AF5A250A18D845C8D00A618B2A11AADB60058D39DA5BACFBF65DF927CF5643C45B0D0EEEC3786485C34B581D4C3AE9F13D0904561292426A6F860296BB8791D161968115A3D2ADEE8EA2058A5027C7A7FA63466B025C53D4AB7D6DC7E4916F2D07E5A14CA09767EE9D5706248173843CFFF488DFBFDDDF7E26B271642F78B07EC7104807797C581F60D65E2146D504F35C13A181083FE29AEDAB897E5006A8174AE9D03E4BA4DE5E45B1D6BD60AED765A828C576C240082B3417EA42C403B6B22EC1A31483E58DECC7D9DBE1F7E61EB0ECC4A352CAFBF88D22A972782469C5E64104A00D887C0C7093BF77F448AF07667BA9CA849B4025F7B1F920375189F713F83FCC6E67442A373C3DD509F63D3FE499E6B9A58A7C8F31B549583607852FDF2862051C1778923F1217CB76E38A690D8B4BB3D887FFFE681AC887A58B4826535498036D357CDB7F082DCE8F64A66E4ED64DB20D9035FB07F04D02A840F6580FD85D336C379C46CC1C67BBEEAB668B78ACCACDD31BEC6AF57D9BB40160E25C9AD2BF007DF67A551450F8823E032CA1873F22701636C78C696E14940FFAB308E39CD5C88FB9E7730E1ECF3B0650DE6C02FC9EAC7A5B7FBD574EEA668088B8D7B8C91BD6503374167B246868FF20603308DB42A2DB2217190CE7F718F0C86F0565E2100C78D3AE62519F7066928FAECFC9FC526FE2BE335C6A801FF3A75E5566BDED0E6CF254730F4E9A4BA0C2721E30A883E6DFAB288E04F471CED84A9EA946B6B834921BE7E91F16D2D77615D2E9B5F7A71F9DA5222EB42428407CA17425B5C3205E686E0FC857B0B57CB61757444B7253E75A6A00725F55CDE1AD212BC8D00C1FF28AC49295217700EB2A0DB0B50338E6A7F7E74DDA8505270439EDAD1DAE668462A64B67DB83CA27884BA3B79091331CA4428297A528A9CAE59F75A1D66516961C667875C27049612C00DAB0A167547CB936EB95629571224C15ED0790378DF541A23E56754394369247E7FCA5DD8C37C68718EF1B81A9AABC0889B620AE3EC90D38EF98A7E044605382FBB94C6836797AAC34B94DB270E4EADBF6279CF626784F963F73A549A834B5C6A543F7E08A412508A044D3453C5C35F6092699DF8F621E1134B9179D3FFCA3B87B7721ED124CDCE1BEC39227DF60B0099B696390FEEFC5E5C0E2E695E0CD7E8B9AA0AC96E7AE5102AB6E599BA3FEE743415A26CC7D0387E8E15A4B135C7E3F5D5F76DABDC5451FEC3D6012DF8712E935A885B86362A85BD7DF480E1747DB3C4FED60662E3E73B260AD0FA469AD073AFD59175E6B357059DD7F8025595112FC79A723277EF84B729D6F86950E5C3AC1EB41760C94B25F866D5B103B49AD3F19C5D39D344591E3AB6BAD401E033A394884366ECF958B783813D9A0AC0C3261950C080B4DAA75F49C4389B74A7C40A16FCC36C1F58DEF2E894D412C51366222F2785E01ECBA4AABD993EF86EED7DC50836D2A759768AB75F36FD62530A85B3CBF9DBB7C1D3701B4DC318CCB53E845BC36871151BF0C90012577518965D0EB4686D8A766E251590CF2665BC008FBBC2BBD2FF0EF0D5B0DF4A99EEDB98652C671D74B2491CA7444F190269CB284C713894A3627C079044DC27AEB8620AAB56D8FE29791B893654C78E62CE8EFA2E8B8BFA62C790A92D54E958B377C57E844A05ECD82D687BAAECD05FD11B99AEDD8FEAE76CB3F231DC0EA97980E4069C2EED368C05CAB0F91AD49C9EB6DD82F5A5546FC9AAA2CCD8AD2285DC4F84F19CDB572FBE38923A3EF933E0C62E9BDA8DAE7A9F4CC26EDF04E437EF575FAC23BDB4D180D7B156A04FA385596FE86DB96C0D83D5331D3A94BAD4E0C65E549FF021A1F8F13AE4D0A351F591C3714EBF036DB77FBE579993EC750A8B1DBE70DDD1EDB465B1F0EF5C69C8B3020A0287AF5B37FCDC82D95D4A2DA6CD360DC549CDF5C096FED680536A39340374C816E9DB5A63C7F546DA4C7CE2376B521015F1293F05E2EF8A5E488B6DBE7E32BE7B55C5AEA1C7727B24A50AC322D60B3E22A2F7D570EE5738378151C3E2A4E52B5AC5B4209D9E4F060262004D0AD716272BAC79AB886CED540E959813CD560B8838214929143704867FDF840FF18A96BEE3D7D52B2E857B46C53C44087F64BCF8EF80031A91BE72887D4F9EBAA1EDD3CB875AA2DB4BF7DAEAF0CEF482213011172155399B9D8D1F2E8902B5508293552E6FCC858C353752B2A4F7C90144DE9155EE69B161BF31F67DE6BE634E2FA17BFDEF75734D31358597DF7F9A6111DDFB7F6DF0A312DB474995D0E0F9030FE74B61C73CCB88496CE510AD6D466220AC416C399219C1E9B92FAC04645DD9A3ECDCB5753E55ED6D4646E62021729297CC7AB3C5D4C8BE15FC72E02A5EDF38C9F57776C9A633FD92E51DE1A7E5FC010F687459686F55513F7097D2BC476EFB859C45C864ED866205A88541273578AE1B6F904BB32F29C60A48EC50EB81D0E6ACF16ABF54E09659ED53274770D19F9D924C31D42FC7C2A8522BF32C9F66BB09A0B6E210EE548EA41A21A01AA601C7C1A5D5A9973DD534BEA7B93CE5DDFF5B0C394EF87E4A8041AEA4445E574FFE2409F5A8D16E464AC070BF262BB321596A417941DE44647C39B112A3885F00D88D75DE3F5C7D14224DE2FC71D22AC931A20507C72E9251425AD30632A425DC020206806837EF06EA9E69DC411C193F8099740205C005BA332450B612718D015EA310918A16A42234B6BF1C29C9C8F9CF804E65B9534BA078475F3B9AABDCEEDC20FB598A166CC19B2D7DB7A5887B3E38C749F3DB1C2869BFAE0BE8529CAC2C41A57FE069AAA0C3CBF15846EE5D2D94306224B974230AD391E6ACC185CF1AAACF27DAA24348EC4D2D5E704E3E34BC5BA22B53BE3F81820E3497E9C546D5E6239BAD12A189589C1F0525CAA85669251B93C7DEEA6A832436B04FCB097401EB972210EC6439AFD846616DF8C0F111EB9112E7535C0C67DBF05BEDDF995167780C3F158D593CCE83DCF857707EBDAF8148AE514F93F0BDE692362896A093A3CD7141631ADB4DED10B05C5D82F20FAD4EDE164CBF649AC2704B118B726530F0F54687E2E3A61623644B025742B4A079E8052BACD7045460AA0D6C7481FAAF4ADAF06A18166856153F6397247BCDC238C3FF662247F898C16A8B7C280ED5D28AB01ACE3ABCCE13239F6BE03F2E97C43521A8B23FDF5B7B45A94A72CE7638F81B347915394376D4F476329545093716E0A91846F60FEBC3E202AB56E99AC2189F2D7BADDAA15A343F1E0A25537AE412212A52608E0DDB8E0F11925C653E66 +Digest: F46D3CF00F219194AFB1AA9CCCFF3841AE199FFAE0FB58AFA3E8E772BD6F5004 +Test: Verify +# +Message: 82E6E7471FF949BED33F74478CD0781686DE319FA4D7A1E5A30036AC24C508916DE4267F1825AEBEE5060CC06581E3DA7D7FB5B8ED1B5577ADEE83689685771F33B558702C495916B2CA250D5434C294A6B503F49AB1597A4A3C99C85CBCB1E42B3C8E05FB01448A5BA2A995D44015009A0849696934F20D6443C53B54F9AD603427392612E648AC6DE58F12CBD3C185E1C96A96B6A46ADA5BB369C1A5F509597F0390573B0632E83302D2D23A5F6C38D37CA79ED3F35057628C179FB1BA8CF94ABD0CDC09403E6E58014E3CFE1389D3A1B263DF59A15BDB77A5383B121D068B33009CF200050965638AD1133FEEC31818A7504A789295E58CED7D4335598E3286C00B35EB98DBB630BFA9018BE95A1BC29B991A2F4E5A456E33553C56664EBD3A6A7DAD1B0104B8A79F6146781ABC0B24A3EBB947BCFC203159CE0E26EE5AB099B319E883D5DC294629CA2EBFD403C1C40A15B5B269696037457532D643262B2075421654078FAE54A9403C750A1F5C57E0BA52BB3E5E28A4C56D92DD3F1B7C328D8B0EDCDC47BABE7A40BB75D97FBFFFC7AE0E3CBC4B34BCC8E771E1BD014108FDEF45DCECAAA16971B65588AD1102CB069B3E772E3C56CC0ACB4A87828A8E069BEC3F60CBAB85EF00D2C3834D7C9658A3A1816A3A5A66FC6778458CDB249A7D977A13066C7008048D454277F339AF2D67C8F595A2905F7FA9DCFF37A3D57A9A56730FFD46EBF658127F617E334BE7736EE5C35FE885DB0AF9DD81D2E7F1798A3CD63E7094F9C050ACEB7E08D8328F39DFA84F3AFB8BE3E85B74128CDC21812F31E27C705FEEDC80E47CEB35D0F003B334F621B492C4FDB28F1D42129510F53E3CB2DD8CD7C0F2861B03B0DAE7BB0FA91C414E5F81763643D2958F3E4EB2173A5EB79370CA917F150F3EC7FE4EA8B1C671334FD84BEE30C2EAD1A95BBB55E3326DD5FC059D7520A5791839D9BDC2A7566B3F271E6D1B778C44B4556852BA3A9F4321CA90D2F8F7AF8E1A2B4E72B0D1023C457B064D8A403E2483D67EA61FD7175302CB313C224CE65B118B3C2FEA35011B402618510C3A150742A3D6F09A111464708201EF5ADDAF517642D2A59E633C5D2F6F77B22F533A9BA83D0E924D7D6A3E68FCD8E5518CA831931B172E3927AB1202FAC8476F3D43C9ACAC3048188C1E45A19BD7C44B2BB06AAAE38C11DCDEF0F2F60FCCDDA74ECDF6711B4859EA8AC1FCC8C81EF06181BE6D38269B5731BF0F39F1A9A6CFB454A51A086A741BCC039B5A66C20EB2B4BFA0DA959279A7DE6F18AB48C4585D3D61ECCD121B6450A2D51897B0F59715AEDBB53CFD22632738B89FF5A96C616729EE4CFA46C761FFBE1DEE2D90CC0B8BA5B48938AC92E7763C9D8ED1408DDDD522B35404F5DF5EFF9F0FE2BE545AD2491964EB5079432D9E950E48919CC32E19385FDAD2AFCE945B3FA08748AC1DAE4214130E0FE23D878900F7DF73F1E2FB5416D36FFD56D858244EF9F6BBDC52E871B8EE4D09F640C0D10AACAB81113E84089A803B423733EF91A9C5569CAF6B62F5758D8AA1B420ECF7788B611572B196875EF9E375AA557A7075558C23BADF3D9E86E55CFFEFDE77327CD09E84443C1FF678495BA0EF11D2B71D74D83188767D7A22A311E4075D3179B9163BF00D01932D8D27221D3D8371C72BFBCF3C19EA5B6847ED3AB18BB35A09E289BC4BF3544C2D5AA6058CAF14B903D8B9A10A34AE76012771A650765DA1FDA868FF9FD19CDE863708119C5D8C5DAB0D73DCC6CBE41871F422211DEB04FA926E86DBDB50E142E6DA8207A740458E41A4A922A6F7933E160BCC3A29C17E24010A11742987058E79152ADF1B918A4FBF0625CB6C24D6D990709077EB735A37794998857F75AA22B8A1AEC9054A7CEA876744EFB93D69C07B4B825320DB7842CC2DFD9DD1F809FEF0943606558EA1B770B01CA00917815ED81BE1076086345D4C79572DA0DCBF2F073965946A1B3F4A9CC58045CFC453456CA718A42C12C9295D1620D2120A25A449EFB30D324CAABF4012B72EB7484520E7C8F3BC55A36ABE6BCA23C138551AD3438481492A1428EBA2FAD0C6ACF9BDE77DC7E4E4C02CCC1C92729E78C5F2BEF43986C1B36604E35D61322AB2FF9BFF9C7586B75E7D363DA7653C732FFFF5601B88F44B7654C2AA6912C1814148BBE608D7A03131B0DC3AF7D1743BD2ACEEFA20709CF5D2B8E570544388F62CDF7650C975257403C455F4414092C849F2F94AB3D9E64A21B8722AA4085366D6DCFC3E84F683B95863AF3463BD33D651E969D067EBF5B0964300AC4FD02141D7C608EE6475FB1481970ADE350458AF32E26368EF64D4F86167EA272CB3AA1774A7F11928F2CD9392009AB8E31774FA0A934B03AD6A4181654C216608392E5C7208E74B647D440EDA3AAD23002271AD40AEE3F6F5EB24558ADBD4970C55B35CD65E12345F4BD6BEEDC7EF2A7C1741939C1BEEAEF8F8E73DC70076E4CE3460615AA23123452027418DEC95485DB6B937B69BEC421CF183315FBB0C5554FF27DE2FEA800F71C54B90872FF132AF959774971CA8D79719B7FC31FF85882CD5BAEF9ED43B3D05BBF4DF167ABA82DAA317C1EE238A617A4617E96A2D5EE28A0CA270A582B25763231D0D00B00232C1E30A3E22BAF27C7BCA88D547CF6268192AD245C54862E738289CBD4AFB28F32284617EB18E4B0CEAD28067C7C45FA4BFB81976D8E00981E659A358970248A4DEEC35FA7F66E7648D45B430B25C6A86567415587819C3FB49800A7987877BB129B586756F0BAF1A97229E7155F0428B7BF9FB905F3FC7EEED53C098E84E4A0E121CE4FC98BD8D89A9959A6303E52A98FA152E9902D7627926E73D7E49EE7C468C0FA9CCFB99A8725244B72496E55A39DE7F8A6DFF6EDC38A19C34BD2F687798D0ED441F73E3167C8B309E678E40BC8790D87291846ED2848B636099C883AF7E27D08F71E974300A73B43184E0CFB7ED9737F7121CBB106EFB4B3C65E2BF6F2FDB9ED13DCAB900A1D82219DF6A84CE7A7AF0D76EE6F1EBDCB627C724DE92AC4276DF0E1F1131E4AA09E9D8A4A03AA53D5D26165958944E31CED18AF0164053EF87553D02CAA244AC8C025FDA29B537C3483D7676B7247A26F57686DBF98B60279DEEA7D504170BB4204DF50C1B0DE33AEC1FB7891832F65084F14A1C26DA698A2CA932BFADB4D8DC1395CA6EF225B626C1BE0040C124340C97A48F9BE6B29E8BB666ED8FEF7860678D45D5E2E9098FD314E8E8FEC03BF6A2A6868DF8BAD0CB1A3B35F1E95F29A6D755C009B0B413D695343D065B4E26329609EA19AFA7B7FE73CEA588E98F433BB85C9A3DF9CDF9D4936442484903006C5DC57B478A3F39702D5153268C0244EAF888D80481F4A8FE71C8BE21A3667ACBCC23AA48C7C9C6F4F292684CF3BE1F780B16E56C402CCC3D7798E0FC1B072719BE7CA968 +Digest: EEA2031DF0DCB4DEAE4004848A47B7A25A1AFE0E7EF1F1B6CE092417C5F49096 +Test: Verify +# +Message: 77875CA5FBD1FC26F9224620A093739A20213E19F4555D4274DA6DB612A7908F07CBEA9FCB07BF8B33F445D76149F653B60A34B70893F14C07E80B6B2DEBCAAE3045626DDA1C3C14D8F17391EBAFBEA89FE4A73B73306E8C1137D4848D7D32CF86EF9CF5538E203CEFB8BEB95BD960766E70F62595D37BA500D1E0D251256D2F09C9B34B0F748BBC61C61594C10AE295A285F8881084B36B974F7296916AB5033C101A02F6246B8C4D3875A8CAC06D619F224C6C7C0A622A8E038D448BD1349D9A61B18498AFAF0078DDAF4793F59A53FDC6BCAD1DEE955A7BE65C2FF1D9F7F0E4376B879CF35CE92F83494560E23D7BD5F6E561EA96F5CED3B07E6DC6AF840BE0EC6D6088A5AD4724A015FF740BAC54AA53E097E2708B364F1C9AD792EE585DC04D2FBBB820888B67D12DF5945D1AFA8DE17F5436057EA1AB2763F782681C881A4D5E7829170D25B3FE0FC2154D0192B4AA6BAF6E358F169F74F5F0943490D0DD46C7E775CD2AD5FF747420C93467F241B36C35E22ADD265643C3EB4A4C17476398521DC11B73834ECF0B00D5EE22CE1D31BC3CA51DC59F8438DCD643DCA3DD18AC35696A312EF0F233D50BA257215933A5002E8242A04AAAC81BB63630682040FB959C5F6F99D1C0C28EE554B5F82B48F02C2837D0963F443A74357A91A7B24D3E559856D179BBF792417C726ED7F4F8E1581D62D807757D4597D72FFFFD633257C1E9266D4847E4806AA634963D3499D1718FE5BFAB121DD6A8D8369EC5C33C47CDAF8F98A963FEB04CC558C98B6B6D3470BA28A7DBA042B24774DDEDDDF0E97A44D4A547975C1E01632DA20A86AC96E27637D0F591B7E946AB6E5B8A0E085DAE6E1D3873635A0136CDCA302C78B482C56748EFDF06F6646360967C5444586DD7B073DB19B6BF29741B27C2D2EA8C5548E295111D28275B970A436BC42EB2B1D22DAFF17D72A66867CE83A44A4A5C6896E452A7865CDEC190D4674EFFA25F2D26B96C8F6EBB6672D510260E698AA1A0873D0CA56B63144B6379F9ECD857A69C48B84A886F16077D24DE765849E905C14CEF29715FA0E029B2F4EB2D769DC7B0682ED742394CE93D6A4D4ABCC61C09DEE4402FB0C2B827FF63E33935A1454840B2FFD817E214452F7C831B7D0A30F66C27A1134719A39505A8E54F505637822B793777035E127C571C54F2F21D554D2DE5A8FFF18AE725CB0259F4DAA4E0C4D567B26F38434C32DC6CC803FFD70D4CBE10F91F2747F7A4100F7E9EB50A74D59FA13093CE9BF5B46248199FE90E95937559B5ABBB6717F888D7E7DE9090973262DC3A96FC735AC36AAA40800F542ED15A970616253296779C78DD8D6EF2CAA70D3AA6E5F88674E682BC95A48BB0969E0985A0C88729628F4200CD7DDBE1A53F92004DE9FE3393B1889F7333C9409601B04ECF23ED1F1558A4ACA6798276793BA42A7D8F7ADF030E6D4B2043FD89D6AA21B7CF4FACF877D6A0B58FE1493EB04C25417E44A710198AFF6705E98B0CF27335D4B709D175374F4085DF19F71C29F0829AF60F9976098552A4B8375809FA810A23A53C4F4383D419BD4EE695B0764C0D9EDC7E5FC1FEB1BAF63B3C19C99553A0DFDFBFE14E6A6E7DF332D963157E750A859C569492F83049FE02ABE707A559FA98A357AA1D72934A14161183BDDCF5AA282A81BAAAA91107E6CAD294295F468B494F802B077A2471CEEEF0003E62D2B8C27F68320DB917FC0077F76763158F73977E9DD8CF9C228907A2C00799F708C02FA48AEB873452E312AF75A31A834D609786A769596E0013688AEAE83A3FC7D7203EEE55F03A409B86211B27FF1A7329C2F767A8D26A112818A580DEED846B4A51DEC3B179C553A6E90F79F2C6505C32738CD8532102BDC3786DDA531A87653D91466EBC8D08EEA02F1CDBDAEBBC9FC2BBC3A1A9B32F6D79153C788B577D300E93A0E173FB7D244B07B4919BF3F1481D1AEC9B2D99DB2F17131CFDFB91D4FF8697502C932AE1752955B2748E7E37FFDB097E95765B178A0BCE1A817FB39086A46ACBBA559C99E141C7B3978CE407461A0E300FED5914D62E13DEF703365FFF609ED5B1A4A5E61FBED8A68AFB91FD76738CAA58DFB3B63BA8B47B0989C7FF074571B7B9E728CC4ACB92A9E2823755C0C146FB37ECC7E0352FD0BD7F24E4A098196F2628D82B6E802CDD3C9991A36DBD78121C76C27D4FD59E6D465A969754DFA3CAB5ED18AE48C2A5FD24308BEA759EFB9B65A00B01CB3FE616133AA1DED3385F165DD124DFB76B372290D160FBBA4EDBF3E899B9E63063155B0FAAA4A82203DBD7FC20BED16AD2A8FAB6B121DA2B1AA4B09E7EAF0C0B704B6899EA4BEA321C59A3CE6B2B5A9FAF8FF92F07064AEB73713004660C809DE381BDDC49AC5B6D7533F42F0B339B6DEE228ACCD74DD85DB1DC87706A05EB0200062AA1F9B14BA91A34CB1522FFB72CE11C033D50B639CDC335149A2904369E1AC3F7DA78EA90367B068D7D13017F8D9A7834CBBCF90ACE0237811405EE2F951FB61716F607ABBFD94C2E35A7FDF5ABF505D8E9D0ECD980B04CB797B5BD78BA4E94FCED9CD3AEC7994E9484113D601A7D84AD6F4D7957491DD7208BD5F36620D9B7BDE5311234C3EBCEE14554CFBC146919E078A4F413B45DFAEBDC6A84898072660185043EC096E45C15C6F2E2612586C6D5DA6639F046BDBEEB56853F263D60E7159D2C1FF3C7322701C8D71933A567906B5BC6D98A9943C0410D98CE3428D1F42699C38ECB56E8AD7B0512BB8615727F2A1235AA09641149E0A8E1573E3F5EF39BE1D7E2A5CEC461661AB44CD8E6729C77CA1544C6A8F43B6AEF185C1C9EFC428A3D980BF81A02D17B7F8C72D3CB44C12F645ED212D9C97E07402F2A9D9C69F7AD9BFB6F4DB41FB2497119DABB9C2EB7F30813FDB7BB03DA01638618FBF5EDEE5AAB1A3FD9CE35053234CF160786BD1FA8FF01602364B572EE5F09C654B7B1C1247420B50D715580B2CAF350C0DAE9A89E3B3EF77A5DA07A9C704F028E25104EBAACEFA1EF721675E66BFB84017FD626A6CA037FAAAF856ACC3E16F8A147C39C0CEB129CFB245AE6A6D3AAF9BE4F5B0EB506E576A76F3CCD57B6C84B5B62BF4DD29F37DBDCCB54C15AD329305B1E49C6880A885299CDE86B5B4BC48AF58BDB525F39051814A2EE3A5AEE63AD25F76A35A86D6E88DC1F59DC91273C7419710EBC4ED25CC43819D0F843CD6F7D9ADFF54570A9BE1C26E895926A3CFBE3AB537C1D8FA1F291AB8A7BF3CE51B1277D69403A8B7D39379844FDE7A83B4258B1D07D1975F7C2392BCE9715AEC3CD8A07D4D6C4DC6AA4681134A2956F2184C48E3A7B07DE2BD7179FD9B09A1B76643EE1F228FFC4FB85B1BD4965A9B0FA4CC0447D5F8FA5CC15F390CF3CCB850C1DC5B97D5207936D7228B0FEE777526871B442C8E2A6BBA50F8BCDDBC2DBCA595F80E942EAC3DA53149BFE4F845FF04E1F86329E30063FB06F0846 +Digest: A61C3310E03F85FB42AED84FB7D5C3B1C864DB169F4F2AC4C16CE699CA6CD8F1 +Test: Verify +# +Message: CE06DD47CB568A4A093B1514F92BFC51F4CCD0391EE4ACE512237CDC81112D00E84585AC7E82AB61C09AFBDDDC5AFBF3F4C35F6A082E3833E89BC68698582B862A1B76FBB5DFA8587CA1C555505AC7FD8C41948DBF8BD97C790880FFB5096D456E5D65BA18C83994E5B1885DCC8B64AC18337570A304E7A3B2D691546F559CEF19288419613B712DAB27D2AEE6539A8171730DDC02047C33FF3B558ACF9B8A533CCE5B3221E6DEF3F2000B7C86D38E9E67B5344430FC0B9DA23B697D89FFDFBBA8237A4DA395E17BBBBC385FFE633031682244298461881C633374848B9BE2F86208035E67A849E57EA2FE8065F100286068ABC97171CD8F55114D4B3EEFEFD046C69C94673EC5E7162972876A7BD213964CA12DF99944486563378632AE87BFF6663ADA0B1A4591054E16AD31039F4B8A53FB3E07DDDA8DC6C76C3843DF6D1271A59170952DDD83C93AA8FF518C66DD584653197C71888C9D39CACDE84483B6F9BB338E2B44D7443416E0B26824D62DAB3B1FD3277621A465797EA8E73DBA3652CFE2886FFC72A0502E71E3928BF9237AF997AFEBDF9BC2399F8CF04AA19A8AB5E3BA06396314F450C3997F301CD96F34EA3BDE091D122AAC74C0F04B8FF80E8E478042A1787CF6C13463DEB8F36F620E09F084F0AA4C5D6382526A9C6996F0BB61D0F5B7D71AF7A1C6034A47D3E1340ACF15331A98DE1EA910BDF97C466070AF489699129C5990BCA5BC59907CF6A7B6880A8501F0739A30969FE1C5590731CFC7850204639E6367B7701389A3922E6484D6B96BA6098B7DBF14C703A9DCF3F26F481A802B57D4DD6FB8F6383EFCADEFF87EDD4839153C3AD9DE4E98AF3EC81F99AD8AB472668D7580770891DD1C53C0A5E560E347ACF7ACF7B5BA992E6B4B4A56479BCE33415196F2557D9EEC89BDCE2613169564D7E52AB0B13C2A123F9FCBD52964CD85B0DDAB8A5377A27C92A75FF0F95A9CC4C7164CCC6A0DE803DE720088A963EB0202C7B39236B5053AD819D6B4344C4A31556198D4D41AB25D395A6DCCC56B8D78E2136677FDF2F98EA6534C7C3F66DD08132885E3001D03C6CFFF1D5EC5AFF6ACC7824C97352FF527C6B8CEECE184DF9C9B69A6C7B038617B8B995F00383AF509CC46A20377ABFEFA481ED55D9AB120C9F46C02FDCD6A9143F06DDFC1F1B95CA328598F09C188FCBA356974B4BA4E907858F9F505A83CE505758E6FAD582215A72AEFC4EEC58ABE063F6450105E6E4170BD8E10E38FC0B86CC10DA4206357DEDDEE22F943C76753D1615EAC0783B255FBF3636831A8FF1A73A670E11A398CE8C7F2A55403493C227DC307C6FC2DF817B66E3246E32EA266762104C8F625669405D9852A7F62DEB41626C5364A74A528197815D22C55D0499ED8083243EAE1D370B7D36133927DA6C24C61B968DBD794A653B3357A449A7B866DB195CC0E10D19FD349AB65287394328323B856A2F2FADF827CA5EEEC24F80D23E9BFE52C0E63D3033127601488B3234873722C0047AE0D3CBBA42BCC92179430C0CF3F9DBACC47EBEA5A601E69F7D1154F6E0FE1294380F4113C117E8D4FB856A838AC82A0C713B5DE445F2270AC0750C122B2E9D38B6335126C6B742BB1D29440E97186EE38B4C971EE48E8581458206A5BAEBD9F8BD4249493D048A748AE633A0AE85BC8CCF0A72FC1583A009DA31DEC60DB5298DDCBE9A704413727BC531C8F5182C3018B7B08EF52C29D3F6C5CC239E0A3EB303DD265FC21247A00D3C457A1AFEF6C6EEE83AB7F6D3B75A20858D4AEAB76E825845AFDCA0F488F114864F8BC2FD2173E42C2DF9679C1BD0219941D62EF3604921556E7B8AB4B7010A1DDD30FABDC9A0228D12BC6F6D19330F47486D4B356B3D35C5BA74960B4A2629DE405E531F38A4B8144DE3C0A0EE68A73EAAFC335B2B7AABB4819C923BA7E38B57D4EBBE8EB03562FAE8E515187242D36B4DC2173FB97552D9B5F778B60BE53BCA8A9B4C50B0DA50BEAF33F995AEE72DF8D0C651525BC46890D61017C5FADE3C63F3B33D173963F46B28A82421908540D3AF56F5B0769DCBF90085D721D4006ADE26373DE5D11CA37623C3D74D016CD7D8499FD4F6A247892683763210384B6587FDCC030B070A22934100B4A9885DF3D56F0C14EF9A4C3C181C2AD360398B8B6569D18270F189A8B58BB8A78FF6F1A1431C01A4B626678FF1F785B054FFA925E60821E6D7A35B638C6028EAACF94944B16AA68B2B1CB4D951868BB4D1E778CF81A2CDDDAF11539C495B4BEB5FEE16BDF81E0EB52F5661F3C6BC53EE902699EE08D6880E46559BA2C9B71E5D851DED4AC35EEE77A7C5EED23DE721C72C1B00B18EFB6E4D3FF695C7A21F57894E39CC2101C4D415098A641D501D6DD8AE9D2527D031199244E066E035EE632D9D552C370A3932C74DD269CDC93D6E490BA02850B2364883BBCB5C9F714034DD9DD0DC92882B6DE365BDC2ACFFD5A54C1DC5E1BDA5BA16187397EF9DDAE3D7726FFCA1FA7A661A8C4C75BC1745384CA41BBCDCE4E92E503DB78D5CE48013F5575E4D26D909609DB635B4E8BC791BE9D4392194EE91B2EB6F6902FDD4034B052F89053A42F860C280A652AE179FF75257AB2344328E0BDFD97A45AD4C743D711A9DA6BFC59791D2E70C90ABE34DAAF300E5565FD35FC60B46FBBD5EA74FD2F0F41A1E562BC228CCF744E84D5A924E55E27C7E15754C52A518A5E648F2BA7C32D104B92F3F809DBDD7A513E5F3D7EA39A73335C85E9BE5C7B20E5D6528743D8EBD9EF5DACDAB32C43E4FEB01767768EBC83A66AAAC4591B0277745799382B03713B9005EE2515F146A268BC99E05C5BAF23A4A74B9133986A69860B4D8AB0FDD5F68A9E93DB6C18B9056FBB02BD108873CE83E20054B053012C478E41B336BD24E1EFB8838A7C661867CB8FBA275EE3723360AB6331992E47ECC7BF6EFA7DB245126F91356BBECC561B82885C04C0E8F18DB0EF7DB8ED0DB7811ECCA24C5C5257BA9DDD8D6CDD3B66C59D5E204E7EA9F9BF9B14EF0D8CB10C828A6AB2B9CABDD4550D27B1EB35E2C088BA77DDB04F8C05106B17CF90BC8232E22D9D325453885C84B7781C1EB63CE95CAD776D3D5F6BBB94FB7EC554BFAF50C5992109EF170C077B82E1C72F3620E8E1E72BB3CB85351490E60F700061D5BD2C2FC01FA12BEB8728E985113555919CAC42F7AE3C09613FE25BBC3DEF4AC3687E8823603ECC8D76E5E220F5F8101ECACDA64D905100DF34F88DABFF48C5BFEEEBF2139FD298ADB3AEBEE16DB5ECD36295AA0194187FEA9A345B388C90448D31F92D31DE4617622EEC91BF7E43DB8D940C8643E7BD172FBE1B882579CEC0910443BC89A44EBD5E23C1CE48A67274C3E909BE4843DF129C889DAE0595A964C1985B8771709A8B129C9535BA50A09782E9547E5B59F68F1BC690AC0ECBED4A74EDDB9A67A68BB4CE6C7FE0F78A047FFA910B43A0CD40F2937B4ABC07CD0DBCAE60A11562BE1C83788A6EC17F0D8812E8806AA748954327F38BD73A73 +Digest: FE465EF3FE53155C3F51D1DD4D3CF8EFFCE550C262A7FBAC6B4CFF27CBEBB82A +Test: Verify +# +Message: 987C0C9E0E8AFDA3D3C35FFC26F9E7E3BED2362023151E6067D8CF3871D67FA6AE888A64385FDEEC43B4C2A6C3F70CD6D84052BD12F6DAFED12F1BC0E082E8C2B33ABED9626E7550725CE86C6688FF2DFEC2763A53697FA26B089955B4F20AAAEA17079873D2A9C6B4F48FFA8D5C5E767F98E6C36B20AE12DBA85B234B039DF9A76D9D1581C7FF893EE28A081FF5B0A94BE02C2432E8E1F8CAAAA92687EA21D44C631D9376BD4832C5406276C3A8A187AF3FE179A1C3B7B90CD71C1F55E8A0706375DA472ADCCE4B2B4E3C37E104925FA807C1E82C3A50C18BF2EEA42B7C44AC11CD7E10697E311905224862FF928DB9EA98C4024B8F4BF9559261ADC892312DDD4D6E5AA1AFC16A2BD1B5D2C116A1BAD2C498AA29C5055355BD8E1319D5D877F31C94C4430DD7F2D0EA790B9F34E0945A23BC90B4523401241F1FFCF9BEEBDE4FB1B98CE898D1B21A3F14D067FD9A08494E846F782A541B14B5B2A1C2EC0DB4C226BA9710DB0232E22D7275121A32D9939DFE4659551096E6CAE7163A16D641AA6246B5C195D3B056181D11EBB78DBC025C38A52141E11E36955FD8F260F0477C866A5A41F1B17FC038888B343F80FB0DAA6C8BAF088DD00F1E424348AF3C676A3B92441DFD5340A3C7414C0CE3C2AD86B7C1C285E460B0C1623FFF9F66768EB8C773245862B88CEB2048907E27EAC007B506F46F771CEE82FD9D8DE840846DAB74B7137CB3B167634817F04D046D518B2C49F05F0F460BBCFF1AEE9476D9E8A7CE1FF5EC91B5533D5CBF5A0898FCE022ABEC578FA9D7294666136075B95F19BEA194D2FBB53B9DBF243FBDBB3923D92CDC40E45BEC62C0D1710EDB291FC194C734C3297407D38FEF42FC50100547DB74F8E6455B8A09E4F9A1B625BDFB393BD80DC1C56B76A278C237AC05214FDE913D0D2E504E70CFD6CCF2DAC68DDE415819C0A010DD43A738534FD91CDF4B29CDE1B251D035726C232FEC4989D876F538D347E285117A5C77E97DD157D95E65C520FC9326E99AEEEE1D069646F82676320C26848F5F0A2815A5B203405E5ECAA1EE0156C5BBA4945B5851219ACFCC03BBF9D549D0AA312F20C194006705FD0A44FEA8F21476E40E2F629C571E2137F616F9E56A814578AF150B6D86A4649ED2801A875ECFCA5735481A1E032E229B7247E56C7C04B35E370A2D7F7B9CB728607C0A7F2C829D1A45EB904406C8BA7FF23A6E5F36216F0F91223213185B7B022888A2E829E016F6B275B74FA02A752CBB2F29727570A2D25444AED977699FB9B292377ED1A4F812DA37E6A60FED5126998F95AFDA9698EF36C1A02D7842CC2B333CDC8E95B32FB748A441EC4E704A57DCC12CF6A274F01E620874CA31B0C5E61E40AAF08EECA7C30785A5A35BACBF4C9EF9E90F209794E666ED9EFD6729BA03D57C6ABF8FC540B50ED1E0CCDE215F4E0AC084A562B1F35DAAEF38262AABAB2E13ABD18243B0E9EEB514178A66932AB0CC9AFB34F1E443C144EB1356F259EE6383A5DCB3AE067C7407710018F1FFF1E998B173C82299E9926B04A9C1DC388E39854DCEF0314A7E727B375022D72937162F9413D3A9C6E2F31D9E3F588D88F1BB55B19C0D0307C3E1227C413D6AADCF45A97067A5C5D9CAA52CF8667EB2A510F236EB4AACF9B7E670741516A24BAD5E2AB812CE65A798C94E4F5F9D7CF0D7193C01E74E2B8009DEF6D8E041B83DB38F2479FEB1145C1594C52F2E70B0112C0C57E8A4740183CA371238FC272F1A19B50521B1326EAC087707FC6E6DCA7436F0BAC0E27FC2C5C2CF5193011E66D7A64B46EED7A468D2063814626F424EEECBC3D74C26D2B02D2C51037F869A238EF9C2C917D4585E846F58EC58768C7198CC6A2406174BC7CD4D62C02E01E6CCCB82C69CAF8DB0292BA61BBCCAF2F8D13F8EC84D1D86A24E148F1884F70B6A5CD62E6EBD6D4533D8D0511A5566E3F894F599D67950BF0F0445AE11DFE21907C1E65E2385201EBBA7682D9EBCCC93CC105C5402EA180715FDC71390F5BD0DC304CA74A7A2DEACC4BD0215C5D0EF06092F2121900BA1AF73BD08021E2067415B9BF92AB7911E170E3DCBAE37CED1E1688C67CB844FD06A3A88DA61F392A26BDA726CEE8A6EA4834879DD9E0672F47CE1DC091E66C0441BC044438462AAEC1E576ED788BA3EEE2C4B709C99D217FCFF2DA02826518A7F886D8B46848FA94D0725D9C0CDCE676BA4CCE335D538E496CC0FE1F3619D322733B7F8B70CC3FDEE85D69A6CE4DF2102AE6EF7C6B30E76BA5DF8B85CBB65C2647964D0CAAA30B46CDD297BB508CE2DB0390B14A02480411D63625994CEEE9FBC544781F261AA9FEBE5DECD182B2120C157ED544B647CE119764ADAB386C19602F7C278004A75DFC8C3B889AF8E613E2C667DFBBD3074EAF33C2122A70B454A9039D82C6254A23861037B18E5B301A82E708F25EE1378C58E142A85147F679F93C231A004FBF6AAF2759DBCB32A74F8C87145F405650579CDAB557FCC990D4ADC20B6A12A118B92A5000E8D0F7A99F075542CE5CCF4910EF69086DD209CDCF9923423ACD2423CC7D310D037201498B5E8669E9DECC518BF70CFDE71108661B79C927E4173B6178C88E5484A6F52B4FD8DB0ADE6A09329DE56DFB4C8B861A721574D72F7C5951902879E562F4E39ABF816620C18AD9249B0EBE4A41998FDE4446754EDCE35F582A33FAD4E6447894B3862E01FBE7F2476A487E9139933D0D4E56775A078CB58BB73E1FE8C52C20F9BEBB7972F598B40E1125B0CD9B7CE02F984C40988D44BD6379ECA10F1347741C085740579017EDCA7EBC3019BC665E3ED5DC23717638EDB5F7A100B2131ACD2C699779B3BBD0C966B8FDD1B930CE318BAB57002BB7905C1C534109A7E9C6CE5309F2C175E6FFDF4B9BD76C701B5ADEC149986B6D247707951F96B56E5B94C84380C089A6D951D823559108A01B3B96821FE0797166EC469EEFF144DA7CE2F897C4795796C507906BDA4464907EC9FEF073490C09BC9CCF418151F58BC0AB1C13B11B8291F7402C33F56D0AD594DA85AC61345E4CC20986446172C01A4C40E7A791DD116037C8D8B3879BF752285F48D7D5D3C2CD6253B3708FEE768470014A0FD7988DEE2C37892ED23B362AF73F717D2562D9374EDC56B17ABAACA6F602A0894CCC7E1EF0D3C5BC51B4ACC8A2C86DB129C1BF9141B23D5EE452EEE48C76C7162CD5821513FA56C09448EEF3A7D51B56ACFE9D30A61BBAB94B109C671D0A40EAFFD48A45F2E26AA19594D4622EFD3F26340ABF05E15D6024F23F9963F623BFCD754AF99BCF1FD1B8E47312EF0D480A1B0FB309EF39C8D924F8594A6A2B81FE2C720CFA54277320D413DE3BD568137F6876A4D5106045044854EB67B08D40AB66FE9EFDF538BF7E3ADBD7E75F2B63DBE85654E420E8A10833BEBEE1943F10A20954CBCBA739BCC58AD59FD28D822E65B652E412122884AC45AAB07232E9240218E2AAE45B4A596CE0BDE5278F9F0881DE7ECC64D839263F5174BBFFBA8B91D4DBF8EC826E811A4 +Digest: C09CE68E9F2375F42E783E2D9921CE1B667D7D349E00F9D6F5EFA97F7F4DDD52 +Test: Verify +# +Message: 76FEC87CE0B85D5DED5274E384F73C9F207E311478C6DE9BBF196AAF0D948EB5A7028DB1B328B436083F88B68F2676FFC61CBA029FE2CD329B852627F1E0D0EDB47821B9758C88BFF21170CC632F3FB92DE70EC1F744E270CCD9B4D3ED1801D6E9F6EC4067BDA1F131E338069F88B20F16CA6214B97D8EFA229924608859C71D9BBBE855A7BD12DDF7B3331EF05B7E660A41B70CE1A30D287A4BF35BF79C7906EB9D9CF06834FD465D55360FB8959909C32CDAE7D6B7D58F39592A86576ACA19BA81FCC8BFF2DE4588BB5B4F141C46BB44D14A4446B28FA8A4FDE711B12EB2F6138202485D5B1713377556BA26B72F5BAA8A13BC34C432B5F2CF3CBCE70053B596615D66E6686E62E1F162EFA4D1641B2AFD8059AAFB2BB2945E48A8C688499021D47D169E5432C41F37DE996EB34AD49C2F6AEDFA1729A18587A82126EFC0E8B7A77992A3848C15398FD5524D8E56FC7D20E6B52FB20BD1512E13028EA81E95BAB2F7976066CF396CAC77DA21650347958A761AFF239B81FCCC561BA6ACEE22B5548B22AD90C78E1A1CB4ED03A60A353FC072F4E46D8E5F1A6F2395D55D6668970AA5DBD6486ADFD692E2F46183A5861150612EC317B0F1F223E1DF3BE16E342D7341A46A6974080A43A4C7FEDE1A1BB2ACE8E7249D1BFD16F729E52595A53155FE199A1EA70EDAC7F4F3BD117257105699221BDF7F38EAFDA7C36B14D55D61256B5AB50D672E2205EC9558AFDFC45AA0DC0CCA04E030B77C20665815CF25A3EBA36B17E2F5EC5073246D358D69FD56D566FDFB8408EA279B8FFA519DA161B9FFC35E0D54AF94AAFA9917A6301613198A07F0B3E62AF3A6CD3F27EAE192E43F8392A69049DB7D4B1EEA2BC25ACC91EC501CF556648A8C5897EBE719ADBB5A1665E6379336A1C7EE077547B755B8709FCC7AC7E47F048371D481D034808D0E348192F60EBE661176654C65E971534590BC43A0CCCA2C5922738FA72237D01E6BA330B354F66F27D8D71A03B1B084266836AD936119B4DA68A53E69EC35C52D3FF3DA7CA3D1A110A7514DDC442F0831D8FC640106097F4CA5CF8930D026C6D14E146F347F141619295F451936C38A98D8AE1BA4A726E5A66519A92A8EF92E372128C5479A78206EB75D48F752AED6DEBA95D18EE0CE2AFC70DC989BF4A819D1D1704B415FD88DF184038CDBDEC4B49C886223F0F55609C9E82C13E33D52819EF328FF9C924E2522E6D03F81414D0AA4904276CD3621B786BE55F87A471CA76589BE74FAFF46C011B804C493F1DACDD74E774C6B32EF3ACFB0CE35E79ED349F9A3BDB0F0D4582C87925DD79E09210EEA0D96271B066E36D22FC58664ED639F5E3E6F65491B93E08FC3E0CFA8BE9DD29A244F0BC17E7E1E215B78914050535C5C0A9B94510991CBC65FF32811D0D159B2A89B80AA2A7F07514CFE54BF0B7E0851EA2118020640B87E20907601A77D5E4309C211D1B2A18884565D8B9C9AF8211340AC3DD7360E306E207E860B879016F0B082C30A75FD725E1B4CE9E55E05A06E043027C3394225C83C04D882C4A2BFC5E20F2AEF918A8DF424F6950A4978478E94A6BA9EF64BA3059F9B864A4492A33482781479F9C023F2304E16820D44EBB721627EA3776B0B2CFA058811AC0F1A96168BF6E2BD525FDEA164DA7207AF450E6CD8F82FC14269855334A758EF3752517796F1842AE272D313C555CFEE184721DDE631BC6EEDCFB9375A311425B00C42FDC370992D2B7FFE23E16B910F1C44EF01F270F3C8BDA0D147232A99C212C63024DDD9DCE3A6EC7E6C42A9A4EDF70FD3C441E2952FF4694FE43B71023A2E005B28408D5AFAA5FFA880F55E5453681EE2E2E0F65F3B725D4D8F6B1EB428666B993C218C33CFC14AFB0165E004DEB236D21E160CEC7821CC5238D77752963F69B75FCC8B6CEA9F7B4499F3D1FE5AC66CFFAF5A132E5584EC49D16937DA8EE6FECFE418E4827F5506F2B1F264FF326CC5FB041995523BC03943F9A699FE7F38D14E1F556A8EB8146B528C49D886CF78EC7E6F4C111D670BDBB6189A5BBB7524D8D636071108F8EA884CDD6F93DF36179E8EEF8FDE70693F1D8D6891E67481A500B9789231E3B2CE76AF3022BD6455AC7EE2BE7D1F953056EB1B54C13C8C27F8B248227F2CFD6ACE220387A66F2C209242D9C524B5CB46757C6C2A5C89A0982DED3FC0AF374B27E98677ED2BADD65628AAC64CCAB394FE5E894E972AB790A1FF85DCFFD2DC04117D1AA1921A1F6A4F54A69C4057B2A66F9D905293A3720884B47BC96BC061195E84EC8728E5A44823372A1882E4439A5279BFC102D3B13B07E832BD2BC63D3CF049618FB9036B3509B01C1ECC9B713DEF90D15B42E6A5342BB8F991B9EF8BA69880A9ABBDC87A696B57C46647915FE2C201BFDBBF8BD37FCC73080FF8324FEC446555E02D1503453821723D3672782B97BA4AF33E6397EF342E1EA0A3A44AAF97F1CFF4BDCED568B1A62EF69AFC36C6FA878A9CF5DCAACD6A22372527151D7B2DD5C632E5022008ECBAC8F95DAD8FADAB921E6306A4250BD95A8B31D7F5AA04145C6DF42B974A8D808672F4E50BDBF98148C3F4463E71D8ACBC8CB209F9F97CE7DB6AA2DD3CC8195AB4174317E604C9F172DAC9199A9910E80C1BC833E0C3781F403F6931FE94D80E410D1082DE74D21DCBB9A19FF94BCCAED91633B0EEC8C228FA8F4C6CE1D4ADFB20D29F552B03223F2008260A9A705A28C699B2372EE7587BDF1A6F95C4979A2D6F67EFD4A99DE933457572C1394A3BDCC51D4EAA2DC4AB2AE9B3E7D4060D766DC91FCBC0DC1B24AA7AD46C0D28529C8D8E9A7B8EF4BF3B96966916F53A8CB53766FF19AD4CB2717A985E07264D0D554A3CC3914B4BD1A21909BD51A2355C4DEA8610C3562D7BAB55D0230354A5C04217A1B4CC491B1D44CE0307EE0A4668360C32CA6C2F0D683F2BE6D6933B7EBF1A8D6B9735F500E37A790EEB5D1C1C22AB4411597E73CE5A911A1D3F1AC192D608A278F2119C01CC1C5F17E26F6FFC5D6CC97FC0DEC642ADAE3908F02A0B2045EEB370634605C54589BC07944983133C77BE70A91020224541CC6B1CED517B971FDF6F14A7B45E31FA9AF87AE1E30CE687D560913B38122824C2230D183835CE2429AD8F245B9AFB5A29DFF95B21CE6E5C4CCF015587AE078AA6668FB631C9E4F6F0AC19AC9B4637CE3443DD1E6B3CC4E2FA0CE60957CEA119391E93C763EA82275C505D74A49D96EF825CAD35349FF8CA172D7E778471B5F57FF4F3A4B157FF6165B5701FB4C6BA1ED30DB15921A747B58860B96E75B9A4A8FD53A84995BD4034AEE51C2F2C508668E0368318000AB21F40621BD7694BFB304E1F418A787A8D95CE1B9BF836C00C93CB1F0D4329AE8A66705FA1E4C9BD27E9937BBBE635C325010F6DD7955B47B01BE89A671715CC9F0C3DDFDA047D021A6DD74946A531E37F48D0FB008EA83D4EC9C080DA79F72CA403902DF259A1717A0C457EFCC978BEC1F5E72E47E065F01BFEF39263EEC3B74BDE95277CE42DD6CF8056F117C5580E82B89F762459C12E617A8D59692296116B864513AC7A626EF6AA7A3FCD30EF988D7AC1A0F02EA603DC2229BDE81A11D747217DA8432C9AFE29 +Digest: CF4449185216D1FA19B3CA871F88253D3EE53053B90DC857B6B9C958C8024341 +Test: Verify +# +Message: 789CDD5DCDB11ABEDDB2E6A4547D20628DCAE7F49E99A35B9BD2E8AE4FC4F68B68628F0EFCD826253244B2CD1DD404DD331683EDB29A9B35F181401AB6C17DF691EF4AB4AA99DA3FBA0D80EA26EE98EBB60D9D75E1A02B4486801E4C3B039A1CF6F48625BDFFB28EB7CC4D5200B2B45E7885AEA1C3093DC0E5BFB5614D435E9936A2C18A654E907CCEA1985629AC2BB8FD6B8041D8C027AD910E586038D532D65C03239F45414C3A8A1EA4D7E3B1F52FFD9894F054A40CAF53FB04A28433D3C70FE388F518EF1CF54420FAA6561F38D02FBD5B256770D421CF60E471BB4E4B8B5332FDF45E4EA98A53243BC70950BE416FD9BC67713D8E01730541FCA6B9A2DC8D511BAD6D907BD375DFAC2E8B837624C7EBD85C5657046D4A8005E1180B790BF45CD413DDA44CB1FA554143BCAA7092A3A5ADD00E5A09E500131391B88F9F696A7F12E2C11D9952D7EFD48882B7532032A09FBD28C885625240C0280BCC2AE185B077D86298E25732EFBFADBCFA3ABC9526F157F8C1C4B0CEA5FA13A9C03CC3439FB57217394D3652A2DCE78A8977FDB14312F2B60F5A26A87EFDD1B9C6DF8E03997EC86F2C788E518334518D3821B23DF4CB78E57BD712797E28125C7EB1816CD1BE6A30AC907EF551825CA6780BB395C0F04552128EF41CDF3AAE77AC7CD2A3A5EA8B64EF556386C7201DE3C4B1094BE8F3D63AF25683FF320922DDCC4E17A5D5CF664DD98C77160EEEBD1ECC0DC40229517DF2A636D6349A0F87C0D31CD48B79F91486BACCCF8226C514B57EC634DB693A5954BDDB58ADB77CD35382A6F6463C233614D0E28A0FA0DC69882BF48E24472001F57D8CD4F15CC96C436F2D08F787C19F93372EEF89E7FCEE31ED31BD726B3DA61A7A259F671320461F40ACC7FE92DF3DCFC6F127BF736862DD72733FB25150E18C64D557A5F5B199D7FD12E1F9DA8CEB456200844450E8C2A9436DCB81AC9C61EC16C3AE32A73BE8D2932DF5EEDE0BF01CE39862DFEE73C0F85A70D49F4ADFB9980D6BE420C0D30BE294E03F0B122262F4405E64B29FB9F0A1D73A85135342515C1B3F52170064CFC7CEC6861D8B47A51EC5203721B09DD42E9662635E19C1FFFF72895594F4BB15F47E4782DB0582A0C5BD52B7A114BF74AB96B8B7D7E9E21EDE826CB4DC3AC295BAC9F1992C248D4D12E71AB5CE1654FC830424C2BF9ADEC91933F0A55D23B4355A9E78B80EABB659F0520799CD08BE8E281FC0FA1D974EC1546DA001F540123D7D8072B09926E49D14B62F66C690D4001FA09BDFA41376C33CFABC5A152226792F395AE12BCE2E111AEB7EF8A575FAAC59682D62513737CC71471FE3E0BBFFA75DD54E4F8EC1406F8BE9A56BD92BFEC9CB25935BAA86C553C867806EC63681B71C520619179599073CA01DFE6C03F7A3BB706F9D66EB9AF5DAF387A67611DEF479D88DFF9A51225C0FFF3608F282A055974A9A3C729618D59033989B451EE90A6F641E0B243BD92B7E363BBB3DD0B869FFA532868A3BF1520BBD5971BA739307ED5FF160A31AD20953F69813488A72B305E8F43086311591ECB2C069B1BE79C7E3EB8D00D8E86DD8507772432E6C017C673300F4A827F412E4CA08BC9FD28E8970215B8F37948F565DFBC89999A38AEA704F0F3E97F2B8DEC846476FA22FF47AAC90D3FDE294114F922E1D8951B4ACB9F53DCE7E2CA11E97F549A1173DCDC6F739F17E60D2237BCA92473B53444AB8BC48D7776387E415A1F4CD620D40A597FDC0017F21A63A003B4BAB5DEF4D206783812E366A6BF47157EB576105263BF6400A32A91635D3912D211FBC64F6B8A9AF107913F53E79D5E255431196ED09263B59B2A0C4C610C6A44BB51C1E45B2B283D1D9F64B0B23D70B300D1F3C550AF64FB30529B2EB4DFB9AFA7E6E23A872AC358730966F4A7A8CEC21064A3455FE66B3BDC94F1D4B83468AC25F1698AFABA8194E72678F52D684FE63B01633C2EEA226DD02E8B7373D240622A28CD091CAE5887EEADC8D712C575A4DD1E74BF0A5F39E820D70145C9F7C6DD5A69155DEAEA716A8BCE8EF766459899FC1F5AD1331BEF3538662973F048DE919C50FD0B97E0C3D82A8C58434E8616193A482DEA8544F032E1B17E16EC018C693556625587670B052D4CD39F316B463A9772466BB48C7C3E7E63CC10A8FC84A909AC7280D87B65FB0981C359E88826C7EA50CE9B7976794FF774E4C6120BCE60E58AF581C2FC237444C81C4F620CEBC62E0CA9A473C98BD79AE963DB2738902469701FC9B5984975E856F6D9F093E81FECCAA023051D2C5A9D9A25CEB0DF0FFA4DF35BB186B3B75BBB94B30ECA105416DD6591862B4756D68EB331C9CF23EF60E1A01B745693E7864159FD6CA09C112AEE8ABE2EC368CEF8A4EEEB22184C180B0548824829B0D2555A4C862E8B0B04D74A4A77D12F5657D3D438BD83E115713560E647AD1EF95C01CD42512164AF3302506FC8846FEDBF12C50B50279B348DAFCC98A52BEA84611BC10469A9AD1026FE64BC25564B9953161F1C4A29D34870A95FD19A40BD9D5DAA5F4AB5C03BDECF159F222194676D776BB7075433CB02121F40E5F52D088F06FAEA54A678B27CB3CF5DDFE6A2E72AACBA61E69A6E5C8A1D718C4C1ACEEFFAC8AE150007C329D5DF36ED9F44995CA7711DE3C543294F7AFEBFF8A52699E898A32E3DB069C4B473CD49380298132582FDC380D63013589C88CA9BD844B90C8C748BD1ED158BF5B2AC458EE42B620FDA48967BD2E3A3EA3B30D2205822B8D2F97E4A584F70CC3F0F39CFF63E4D8F0491B65A5C9C8009E92DB2A4A5B79CDFE4FF0EE9BC24081F8F965E2E3F9299CB6F90F657837FFDD4D665EAB593F7BB790D1D11D1F3BA527F69E4512850101014018E90654802E68F9F33476B0C70ECA5A9BB6B0AF763722E68F79FA62A1B85908A69970B7DB7A6ECE73272DF3A4BB2C3E952C4B0F196BBE7F01B434871C761659850C718602A0F4796FB7A7CE98459942F0DF0153DA77BF68BA878C34E9F2B4804F66DC69DE1AA4F16D9DF4525FD6A9003B3CE93611C8C4D9821A098B5D06A880B7BCD24CAB8FBB768031214F09DA442299D5EDAA0953BC81DAEABD6F3392FFF224C570806F4F81FC76FFFB996BE377B9886A0FAE45E2C9F3C07753FEB2D863938D130FE5F2131FDB684616804DDE60FF1E0C915BCF5A2C8791E45E91B6C6E8B44F7196417149552B10E4563FFE3F7B19054E28A011FCF26754CFB1F2F6A0D93BA3FEE6C18DD67711592A312B913FF5A050E68BDBB32A4E1FF5DD4ACA946914A137D3A173F3892615EAAF41A30244D6F1C0145B3B47EE6869DE22C43AE849456C5C5A701E07DCA1D6558C86B4D934A3A817682441834FBF55A6C59249E6AED2D95EF989D430345A71B4E660C36516D56A01F07629974A139B066644B31052B03E2E383EB030D5024E6B6837A14EB8A38EF68DD1236CEB5B695E2FD9B3DA9FEFD1FED5D39105D376F5E10E84E383CE1A282E524247276D32B66501C326A0E811174CB252B47CEDEEA4A311F0F5A380281749DFD76EC69D4E066BFEFE397342B19661E023571A7226DE2A9A412E7D43A2F7E34FCC78394C351C4523545B47CF9A57A5A587B991A37951DC4D +Digest: 69B25E399E93000F4A9B8886DEAE714C614155B79AA6F2BD324CA181C14EF3D5 +Test: Verify +# +Message: 221565DADFB0E1E872CA33C50D9B9CB95AB13512EB1D4B9FC81316599BF2068292E50AD1470DE587D0500DE713BB3B6A8AB7D1367227F2801AEACD53EB0E6E48D8001253048F9A1C1EC37F9ED6E6D11B4CA3C770D1AD903B66467BC0907F9644E2D3C8A29660312B024A608F790100034E398E0A752CE05DC30DE14F192A68869482388A1F662075B0203068EE3F323D7DECB6B4A4F26B6A8F2979BB7B3C19E5F3753B9318CF5C0C8F9764F9164D0DD54FD3150E9A238260179609CFEC89D4288336D1C09528954F1D0284C494BB9B3218A19A4D428105A2E576CAB196F573EB1894795FD47BDDDE95753A8F5CB4497C773B2138059E69E5A021375266E85C00811CB92B92168EB143BCBA004F308C76320E9075253871B85453470838E6EB5C12969CD641FEF2EB09E863C995816809D17EB479937C818288CA95ECDB551F7E7278C4D9F148CC6033ED99CFF276755C052928245E125E7E98B7276751A91F1ACC9ED0AAB531BD409DF71295F06F7A131285C62194681F6557371E6A7080CEBE49D9B747B6A1A70E139FC258D1E24DB0681534C5766A553FFA7CD00718CC7FD285FB902449AA3402CA2BABEB424B549B326F2E5C54A813FE10844FB28BF62EEAD1CBF1E2ACA45E2A534A0F51F9E84520EA8F7200A06F3D2EC7268A70CBE0214A402B8C4A45AD2F168ECA37321711715FF02C39C820AC208763A4BB33B5AE54FD0529DC8BC2F5BB5064EAADD41659537389788CC3A251927CF905016B423BBBEF8CE0701FF051ED48BBC1278EE80D4441ACB4B6E969E49B8662614D55A36F9F5B46278FE7ECCDF9F156EAD11975F212EE3FB0187563C174F8D223AFD8D4BA164BC57BCC5A12A291885C85E0739A86102EFD1B43637D31510A5F4FC889556EA071DDD92E1E23CAEC2A4E710A5F71CD38332F62D9508B629AB19172E0659C9E45AE966AA1D7E6DFA1CD426A6205F8E69774878F70C5DE134ED3337AE43DCB1773187C894D269A2D254A5813EF28FC7D4BBE306A8FD159D047D4D308087BE6701DD7B94588C5D55C48CEF447B51AC0955A7896B21218FCE6286DE7D03F6E984FA6F05E3F85635194144052E3350B6E28FD198B966BBA0D914FB0775ACF3B349B2D6C14B7D54C031A77EE5B408E41EC74FDF4800CB1C87ACABCC9C6044FF4F1CD5BF41FC0FC74F8292109693278E21C83BEF045112C13988FAB58404715020C4DA35495E84A2A30462D707AD83784664A2D50451B99A1C662B9CDCD28E2D1001E1E8964DC551CB40C7BB5A4BFEFB7041F523F7FE4804A2BF096321C190C1A6969F9A448777CEA1ADF00C04750567B6EFCC92C37F1C8413A548DC3514A4A557C578B90D58BFB037CAC25962D9990664F0B3B7AA74ED36B0DAA14BADD3FEA9247969DCD1D792E629B06B2A9EADF8045744422A878A55C869D190EE48D0BB9D039396000FF0662F672459B049213371C2662E49CECBA8B336832560F14F47E8EFED1DA478F67DE0391DF56DB3492813151F65473DA5C099B3E4CD6A1D444A134CC5615795979D933BFC07DA09706AB79B59AFF5AC4848F2691C1524D325383BE68D3B28BE94ABA769072AF441EE5ECC38DC3D575790C0BFB67265324D7BF80A5B2FC03F74AA0FADAF423549E3E7559B0797A7AB51BF57447F31AAE4DC758B9987FC8F91B81B9A0F5B9088CE7239395A712A7CC28646D42C360035EF49A5BBB9A0386B1AB3E8D6870CDEC3632F9BC1064EA3BE4579BF9D1D32654BFF3C62FC6214A0CB28969299476BBA55DDBF5C8FC477C75497C261DD8A70330B24C64522E7D1A6600A0BED25C2AB5314E01BE59D9C291724E589B6040F6B97A938B117EE40D67A86AB43C7924E54714CA997069706B74BC9A4D0DF16C9F7B10C150D0155ECD8E90DFF010DF2FA129D1F1F70A359BF6E047093A63C85DF0E6E74574689E6097C2E3A5CC4578FA153D41ADFDB7B92CDCAADD8083AB4A2FD36DC3AC185548ABF777A0F64F74B95CF9577B57CE7B9A0F3DE9CA36AA02A8F186E015A8D11F53968D3BA14123D95A74A9BB5CCCE738CD4755EDD95F87E18417375EDE2AA7C04A4C2501C353171C84E7272CCEB4916B447AED7A5AC2422AB80959A9E2DE7DCD9FE1513CC1C8A6A87C6D0ED9547C58D25B330F50AA56ED5EAB478EA03C65A600BE87C730908DF72AF335F6C9B5C67E2A8A74BC6A17BECCCA493F099A34F9E41BF58319F7EED667FC11DD382037A108FC8147CA7F35B388D7B5C39A7505ABFBE7959AD5A9EF8C4401322C2B69D273AB14F38CB6D8EA240D35BB77DC89C61AEE4E006F4628171AE62C3172191C39A72990D5A60308936370DA0FC93A90623DAA348E156E2C5F130371026417C2A7E34ED726EC2163A86B0A23B9217EEE206E8D5CFDB92287E1B9228763AC27F8DEBB601ADC5540D8FAAB5A489A8DFEFFD1B5AC5FE714D0AA7EF04F6D88192D1EF8F7523C9B922ABF534F361255C2BD7561D4A11CE21DD4DDED8D9549586C4F6D53E6E94C18E64952036A7151D1557091C5DFB0890136AFBF3229EE212272FADB2893BE51D5469C44EE1E55A4A42E2DDDDD4B7ECDEF0E2E32E0B8559BAA29A5D711A2FA597056D5F8C5C220D20B1548AA349D10587E50EC36A27C18F0C3518CD21BB488509C00FA84A00AD4C9EDC05BF77BF69D5D294B36C98B8246E33E039A20B477FA80AEFEF857CBFC0B4D02DEF33BDD75692F2DBA113BF1125821074AAB6F45BBBFDA75FB8FA2C286B4923D92E1742A19F0214358F53558B1DA7D1A8063638FEAEC05ABBEC5FD3FF4FDB6FFBB127B42E827AA204D3C8E547905D4FFEA44AA8B39F23E9E1A360F8D0F9990AD1096A4DE2341489659F67F1EE16453239189EF9CC37922EFC379A29F0EAAF8943AAFCB6E08BFBA6E2AF6CE02874FE16EC80E9B30B8DE30E6DCD87906ECA3CB50880A474ECAD526DD92C7FF7C06CC9C12CEDC927828E4C57B2A24B577730F48CF16F8EEBFDB421C82E55F3B9FE847593C69B982F944E33D81589D3BE44FA3082BD7E4136980C2F8790ED855DDB341712C02444D39372304F393F8D95D45A43E7BD105E8902020CFAECDC9AFDB3608439B2D1F1C1AC851546659292D958B9C6B8D41EC4C49B50C295B2CE5279F82A6E350F492065197A76FDCB01AF3C017A2E78E6E48069191E6018DD851E7845B262C3BFB0A6F849045DA9D46BB237181C3F5BC51A1417DB891EF811CB30A4FA6D31B6400F3D419E66C1EA370BCBBE698E892AB246BAD477204481D4E4699245134EE4548D2B30E1F7B45C6DB6E7D0EDF1F5CEFFC4BA0E47405ECF34A46BB32AB0A409F8177DE8ED066A274B4A7370674CB40FD98A620E04292B1E1B78473BF36FE3FF6D9FDE0D0E8EBBE9BC3C2FFFEDA72D742D64DFE64FD7246DCCD58287C97D941F24B82EA2389E3201884C73E7D0FDF416692F859B6D6C75FE5827B85A0AEFA98E8FE5A90E33FE69F0E1F4DA2B87446857BA975DDC5618160957065F98193218EAA34B0A94EED4163C677C4C299ADE50918654E781594293CECEF1FF3BDAE0C5E9DAF7F655063D7A70262960B5E65EC037FC338065719B719012CF70C2333A1E39C3B2F0396A25CE4908F60B3EC82D0600D51ED4A5BF00459EB822899969AF7666BCCB9F9AF6B0C7456AAF27C +Digest: 3408F4459E46399B15F15D918D75D1BA583D1A02AB656D568A85A90B2DC61967 +Test: Verify +# +Message: B0E04BB7F9F8DE11049E31E31523ECBF716D924B450FE0ECD1416B8D9212C677A7E4640DDDEDE0F5A12B8872659F964394B4FD9A4D14FC04E7C61BBEEE240F44B6493DA3691631BAF306A884DE0060AA9BF7B570E2621DBB537BCE3116CD2FC8E8F3B3DAF7968492AD5184113CDF652FC5928061C9A998C182D9E2B1E25B3F680204CFD5026530AB5D9C461DDFB81354A91EA2CD2FC1DA9715C4DECA3E6CBB0176D1E0297104595E9EB27F2BAC905691BE172D13D6243D7032DB7B72085FC8B7D2724F96F4EAEAF9C8A0225CD91781F2032138EE319B76DA71CCBCFA000506A39BF46E1CDEA1B2B89B500FC9567E88520DF4F304433B79BBDDE6E312A6B53372829689F59FE89EB301EF14E6175521A7D3D6DBFBF01367FA44213A7221D7CFC93BCF9E5A19A5CFE9BF415D90E562C7FF40BBACE13C313C67D80E3481FEB245F0AD57C898447DA1B5527A47D216CA747A472400D49B04F8DF8A17352FA6921DDE7D0B3FC47844C7721F6B5AF4E7810CEA323B12D9A2883C6E908DA749BB168D51871B5A07AB59AA85887364064AC40205FDC23710E31884DD1EAD3443F2C4608877F07095D1DB560DFEB113106A0B6138608022CE4E8335A780691324832E1077D828E2358C8C522FB6883EDA87B0F2FBEB7D716E8C99E4E0290498F9D90D901E4196ECB501B9A22F95B243F7DBB3AC750767D38368978EA54A30AF711C38BE920595D5DFD12B46FA17EE9D011B3C21114E4497BE48BDEAB0DB387782ED45DB6CA6D3750E186E1186C2BE321D9570B045DF4B8539EB9F0B9F6A09FDC59DABBEA9D84451E9439AF3DC2507DB85EE5C93D24069C128F0C951BF19C205D362E4AB48F7CFAAE3EB35B2845F37329DFA6C11FC4C18E2EA91A584D1BF28744493FDF86E73395D5A4C115C69F4AADB1BDE15C090AC127B2D5698C0F3D2D11DDE878B8411F105524C8E1698FB0EB0E9D3E4B91C65709C39FA927BD0C218E8D373ABF78E0788B9EF86E7F5B1F8983984E1151783B0C79BE7D5AAB4BD756F72DB36C700C16F2BA1665A9106C0C349DB26D54C9E3329F0E8477EB01FCC6F07681CCFAC277448413C135874D38238852A59D55479D85C862EDE540F7A8BEB066C6601056103F1D881D46B7E3DA525F57057706B82D4C4DE24A3CAFE1975A8A4008EDC508E7840442712781B2309DDE9E395810286550D09F8610A725D05766ACCBA6116A60278DE00EF413BE1718000485D1CCE96FBC3C84BD8E8C0C9BC41994481BB1A15AF3D59EC7B0FDC3E3C903B7300AC79D291CDC92122C8E1A5140F7995AAA16286BD124DECE34C1C0227617007D4CBC05DA15C112E46DC25D02B16087F15480D793BFA82CA6E31946159DCA87195F50BE908A160480CC0249842C5DE7B5A57101076FA977FC8E2A1A15685B841CD120F5975AB0030AB24352D536BB8AAB38938E6D64E7FA0F235105334BFBAF2988D8CDAE5536808F2425F35DB0941C69B0C927B1C7F7EACF418F00E9E83C9B82E8E51C6931322AEB249992AA327BACE696238409C672288A518A71158D3D1D7BB770824DCE72C35D2FD3CCED679E07E5A8E99269CD9F65E8672CEDF302F18A0A151600E8E323F569A3D056DE7A5CF1866AFA89EB4E42DB850E16E6B87DFB95531F1CC159DB7CF3CAE80520E3A3AB568F9C6B8450DC0E98F316157B9F8AAC3B7F0DB5C88A43AD27BDCDCC64BF116A1C56892357AA816477346E93701C7C35601538B380D1062F18B1F078045D08556158C5265B8FAA5B76A51A6B76D7DC3E1CCAAD0E1C38C76BF02EE9EA440A3228F083BA9E03BAF9A5A5C14FCB7565C8332B12D3FCD5B06024E92737F248CB383CF5D397E9B045F93ED780797E30403206A6FCB3FDC0E9682CB79ED76984CEDF1C23637B239398F6A845C314D4896422949CCFBB85FABF4D5290D12BCAB3ECF4B102C53508CAACDB972D80D0021CA02864F3670F82ADB11EC979BC4BCAFB8A73AC08909A4BF1F5D6D949978DE3175B0C3750CA57C24B7B5ACC358EF4F770DF139AA70E0F36A5872618EF6866E03FAF3A1CF30F3735533A8AFD4C9505E27BB9D0DABFD9843FDF6E696A71FFE19DCF14556A6389BAEBCAEE68F79FC5FBBCF4345F8A5CF9AE0C94C7AB74AF44E6E78351A913433129AB668723FF5F7307A7252B6E335AD6FB8422278DD409A37CE9F6EEA8BFEF8947B2F248A1D8F2DF8827E1EB77183E5281849F3C430318AF226FB23D3D5B19C6B54B5DD02AA4880423AFECB279A70990055597F3AD43033888F7C8102DAE849C05BD8FCD2C2F39543DB516AA21CF1DE94C9EAD8642A641400E73E4EF8EA3CCB46649B68E4F5A634AA815CEA2628429F548F96A138A395376C11DE790666D906720CA4D053015F1914B8689C527BEF8FB04451F6003CB4D269E6AC697008F4C652B08A3C62F36752C926FEF5A5AAD45FA1650F658A399302394964D175A782A0A5891880227247EE5A7A3535B4DE6CE98534ECAC061D8B53F009CD25780B32497C0A8B53766D4D2E0D8C1E75AF626CDA29B0B50FE38EFBB7F2B30BBFC66E37D26D1283E5726C4BB3EE2726A85EC940ED802866EAD60DD14983DF5D3009A1F27485B5E13E00D559A83E6C81E92FF914C5A81127EE3C01285365DFBEA6B0D8A77A0770C92B23D3C445BC5FDE0DB55707A34DBCA792C127BB1A54735742B56B2C809D2BD56D32FD6F05A228B6F1C49ECF45C94913E8E55E9243037778D538BBDD99102E2C49208093B3B42C35C0807C580E010FDCA13505065F415C949FC69C4B3F74E7B1E0397897488D1336606DB29B25E055498C0DF6FE5412A5D88477090D2BA20A717FFF6A18B1D10B2DCEA91270E27B5A13D4C942629A257C20D7A8534F74BE7A1284BD6F1A22ED2553C615012AF458304B268F5590AA7A7E15817E63D4239914F5348D0E170ACBCE81DE28F82B0F9F80AA2281554B5B28F5D61B0EE937C4BA9D5794F7ABB5F19CA3D53F08ED88C9A0A755E4937EB1DFF439FC9E989AD7CE5EFAAADE7D758D8BEFB9A5414B0DACC398F4D8E72BAF608A0BD2142086D435CB9C02570D205EBAACE29CA8897DD02961D74EBEE151BA74B82C98818F955A3FBDD8667527F7CC30E3BFC422A8363A9A98B71414CF8230AA63EF0AF1EECA42CBBEC3DBE959997BEFF5C42CD700A767B99DF95BB40FD9FDB109CEDFB3FFEF5C30044108772DD7BED91EC99B6BA15C561B6E13C8D38DAC8F334ECA44CFF7FF588114674106687832C429C828B9727750764C48609A6DA6F6F25CB4E517B5CB8ACCB66F41D8C993C9FB00C1F36F0317332B43DA2D9BB4220C4402BD9E522DD9E16B97D5674510FCB28A6869932A91AED21E341696151ED4922E76F7B486C0678A3DA5C1B3B2ED7AABAA9ADEEF980F0F380E8B2125220E9FE34EF6042CCE880FAC850D071D89CD1460C0446B59697499C7505DC8D6D3F6D7DA0A57CC09F51305366696ADE1FE4FEB4D6521BEA0F8495BDC9CA2E2CDCBE52059440E1F63CC75C06DCD764CAD8BB4ABEC32BFAB78A1D886B08AF4C1E8A633A6F8E3BC74C4732C638B0DA78FCB6E2D3EC0EF1F354C5590BBA592D824E42BD7CD8CCF38DE1C4BFEE2C6202BF4C6858D3AAB37DD2E1BE1F262DE7B1B2B4531510D4C0111D68B5B944358E0140DED40F1BC5AFB2995991E20948685CB90FD7E5EE8F26B6AB86D2CE0BB2954DF942E7728 +Digest: FF7E04F0BF48A638A4D14B22F3EA53B21A2EAB269D19853D4E4225C8BA37717A +Test: Verify +# +Message: 6C6BCAA5BF1A7BC82047274AE7AD6C4BB196E88EB27173B93C78234A9DEFA3782413F42D4C6D8742F6E5316D725E88981B0582C07C96613611356B6A72F295AED1558AB7371F350D565D01171966156CA82991EDA3F47B527534FCA5276910325CD97F9FD450718BC7039F39958976C9AB0E65C115F4B1972A4B9DDCD46B18777975DEDA832E2BF94FF5B2B30884E18CFCFA5A40C801614E8480AB12F205A7355AF157B04E4EC33CC96E5727E99D3BABDF9B3F8F88F4B7D7429AE4AE834AB714EDB99812FBF8DE29F136B240AA2E69AA049A4D20AA0413F01AFA213FBB17DD5E9401F76B19D1798543DF0FAEF9C6E8D6851AD575E3F1295F82D9E4DBB17CC4715856F747CC50596A67307ED20BBECB16419DA90E68266628FB01D77E28F5B0658B43E77B15FFD47F836410B68E811A8F436219FC8E5B484876F7C7E2440CFCC66939C5FB3795110BFB5B6EBB19E7AA6145706D3F14A87CED0A00E6BAB3E5384EFED53885C1B735F811CADC724E9E52DC1EBEBD996B5A2D7CE44EAA971F124731F74F8543A042CFFCFD873BB24CAAD17A795E2445470ED4B5E82FA3B67B78BE427E5D3D4C4856CB619FFAA5B8D93CE773570E6B2D871887735AF4657A0F55B57F192A82062B8BE88D8D7FE8644A71745B6399025934CD7D7CBC973A2F177A9FD39746087251FEC447754DF9C9AE712EF9EAC1AE780F7F797A4E3CB760128F2C5E4A053275F7553D0273990775478D63FD13328E6896B4EA00284D7095C353D365B778101259F2C5B33B4ECEDE07B81DE197C5F0E79125E5C78A7D3F98C7DEB55C5BC4A1A206EF9A4F9AD4018A674643658A8CCF2035C3E6227E638612447C1728D1D2F72784B22739A0F7021D9B1399CCFDBFB746EC1D58B00BEAD6E0471D8F3C3DC6C91732CFF5510701149DA6881FA0B29BAA3D113A7E51EF29D1A94E8D58CC3186C5C753FABD7613425C6249B978B2E2B1C831D1E0BA6B063B6325980625E8D634DF1ADB4F44B0BD345D942BE54AC5E8E613FEBCFB6C6FA31A7ECCB06AD7FD54862D68555E4678C7AE7A330466CED12E6830E82003123D9A3102524F5EC78FFC212BB940AACE51CD568DCFB8564F0F134F9035EB52C7E0ADD96D53D278110988B4BF5BB0737C7D406977C2F4666788294E36BB9BBB33DCC4375D309FFAF8431C46385F73A1EF8DD045177E183A431E240CC6B0AA77AF0A4B7F43A444E9AA064093B562DD165B1FF42EEBE33564CA9DDC224A602F51C98BB8D4457E2C35CD74DF560B0238137728C5EE0337A2BCC8B337D831E843A9F9A694B8914C009A5E749076F3EE573D5AF1984D4E411657185DC7D11681C4B7CA95FF3E25AAF2874E0A7215E3703AFD3553109B41A251672BEA93D71A18F361D7D9B22B1AB87F0C91C5F6ACEDB846CBFC7CA7C71D0F611117A0F17C4B1C92BB14728C14D9E32F415D7E562479B485806AEC7D27752B517330F09C803F11F70BEA1620A3CBC69F497778455391A58C35E5A8B760333DB4027235DD4354735A3BB2C8624EF75863FEE3A6D359AE1B050F49708A2B4CC8808C3A9C9F68BB9D87680247786968DFEA7D3CB13629513D4E389F06DE3DB4573611FD4AB6DC7E7CA42A6E0724DF7AB4A4A21A8CB98F60EF5C0181159CA15FBE95CD2AC63B6DAE4464A5B5125878038BDE43112814A93B97CF6D2B1F3B4B0BBBA365A2447B37EF6F202F78029D010548374E3A44F944FDF40731751AFFADA485EA73BE13C743319B47D6E62F720F5804D3AC93BEBD4091E6326CA74DD55E93FD61525B85BC9ADD06C13DDDF5D11B0D913A9E359BC519CA04B4AA8145D202109F968445F2F291C9B31DD0BFD4BE4DF9AB9EF0258265CDB4E97CEFBD6E55738A140C41EFD2375DA92B80B2D0D92125117173C4D6ACE8D04C636925A340F40ECF05EFDDD0D9E4F0C775648C682C896A39B6D3E2C381992D02F1E771D8D16C4BC2DD9C4A760AF997424F37AAF61059026DA4E85087F0DD9A17CF51C5AF4DB48A450F2D09C3DD68C6D3A7ED98546EDF293592676A9383436AC1A691B183AE0DEDD7403771F132FBB4442AA4E6473986DC6D24519CC19FBA2D6086942F11C77055B435756C976E3EFC8927EB7CECEDDE2107120561BB057F980FA0A3B163ACD137A4CE97938620C9BD1A52CEFE7FF4F15567063D1D97AE49D829C195B7437E65F5A94AA2CFF496AC944615B663F085F9C805AF942ED89D3E6B8B506527E9A5B4ABD498E7CF05A985C28B26CF2D14B7A5373274A99E24BC801B348593830A93AEAB615BFC9FDE809BB4A09357721F405D2B3770BC043A1337743061E913E7FE8A383EE476D1CFAEC29595664A7EEF7432EB8620EF9C9C1DF1FB1D46DBF731E002882E1FB63CE7E5E6A14B45FBA10241FADFDF62472DCBABDD11509375CCA4047C02695C794DC7EB8265592C0FAC6CD36A7985A3865E1716D5996CAFFABDCA261778B2AFDB76FD7A7336708619571DA1A4D3CCED80376B9BB7F189A518329D9A212BEBA48AF028704C4F1F3492817F852A8C059AB4483526C58202B74F523082B859CE7631C0D784FFDCDD91D3349415781848D46075EE98FF0C6C404DDF6C4882DC07BFB5E8542A43F1DBD0A3CF7A0BBAD40D657B2C69C42C697FE34AF4F02017D6695CB68EF4CCBF16A4C3E5AF2C34051F786D21E9CC457D79ADE3B83E4687DFB732374A599D04A387EF37184725FADD2C2251F6FCF23DC263C8E0AD4971CE1B06913F401696172264143F8103800A1274FFD017178212A8D0D75B57856A67CC90B45B97BAD39E97C2C073039A653AD566A77603DE9093E258A542C2C42FB04D459E8AA21CF112A0006C09CB8D155A66C225383A00F24C21FA2D26C1DDC9FC1AE6C1D75A028A3AC800FD45AC6CD7D5E9DD7436C14A3B282DB8456F5E57EF22DA1164CCC8A9869BAEF7D878ED7575CB2391557F59F7FD58D97015BC608C352BC16365AF3AD61825065C2C6DBC9CAE00AF521BD8E3EB449663B19C20C148748031A581B6E0D6C341CBDFD8B4FB18BE501DB7479434FC7A6CD5510B0EF9126D11B86F96AB6CB21B3027C5849259B1F05C67D0180D20BE42196E476F13E7B3DBC8B319DAD2137B1F6CF8FA110D5F2FBDC8EF64A9A16AAFA19695382B83B69A56C6887B469C91CCC9BFAFCC6578E4B0005B4B0A4E0D99FA8A1612128A5FBF7B0315ADD7024C291061313A181870A3AE1DC0EB2612EE4634398BE53B7C71EFF4894A8E86CE5A5DECABAA91055ABAF82FAF0D6C157082BF972BDF7FA8C34B1BD77676F219A1B1BE36D7ACFA836B0846B69A2DE0E23CD9C87D559F12C1AB6DEC90D3FE6606938BB92F2DBFA800A73B4109BA6F038E7F4F19503EABEB1C15FE092129225CA434D9E56097D583A8F6B4FA0ACF12CCBE309720BFE72C9EAFFFF1AE348C05A4F154C03FCA40C5C297097F0D69587E6E88206E5AA5DEFC463629A40E332BEB3DD52B1A5E78F4D1630467444A17D87D4FF49BFDB8F83CB4EB7D292E66E87963B1F161CBE67D7E50800A869B08D72DB480DF912272D76E8937A7266F355A0A92177A59C7C5569AFBB23FDDD2180DA261DBE2FE738BFCBE20E67D2DCA2578ADE04EA3E91366ACCAAE4E2FA1C3962205E775A37641EEA1CD15479294F6159474CC5B1B95A97221D315B7DB3E11EEE3B4F386C3CDF2435460C1AD9D8429A2512BA9FB7DB9D3E8B3D0BEF69D28EFEA042F8F360ECDC8A59A574233924E81A3508F594F3FD8C2CF2358C2A717A1E37F13002B5FDC620C426211A55C2B6A3019 +Digest: 4D5CFF9ACE136B94EB46A7F96DCBAA49111459C07FDFEF69CFC2347F95666373 +Test: Verify +# +Message: 54A94FCEF6C32EEC77CE68B31FF2C9C36847D26B21C6E8E2B82E5419DD041D0DF2E8EAB888039691293CA46201B9FE5059520FB544672EA523D62B4E0230C1374B0665DBDB555FC6F59690B895E72608A0683A62A0161EEC1BB63CDE934FB33107584562CE88BFDBB3853B404FE1B7A67B55959A02B91ADDFE9BA5AFC5A38D788083BCD40487080FF783A7D28B4FE2E169930C136A2ED7947AA12534AE2A6C1AE438333CA00F658AC6ADCE01DC819286A2CBC5790AE8251E1987487A5AF131A8EA9DAB12CA2DAC7C681CA87B08C0422034B4179489C1D020561C913557C872FB848EAE700C6D8DEA0E2162470451FDC74D49316BA56E9B4FBA429AD950B8B12D6A1EEB91C1FC406C17FAB01EB1D35EE5A2E509282E4E877F91D6C6A4885181DF177457D82C78A42C189651C7BB66950CDE7A7D8566037AF15A1DB2C281A19078CA989868A18CF6E6E5EF412CDEEEBAE6A6B859F4E8D473A322EFD4378A6945CCA62B8339CF8744D3336126ED4A4CC1E98A8267298551252C40422157A345D74833265BC85C223BFEDD5A9B178728A310C75128B4CC5C97E731CC1F9A22960CC55C4B282A41B0149BE86693D7C416C1DCF42CA9B0A4DD18C42FAF39997370A338AB72A740333E9D7C216CEA74ECA5798ADD44D203A7B438BDAAA858729231B892C3AED7F0122926AEAAD944452A787B54A72656090B1F97AFC5B3336A889AAAB15D4BC0C38A9601EE60658CE833B8240E46F6435C1B2E1A00A261891A79EAD6EA9511EF36AA5533EBEEA88C98866F1F670BF2D965598BF0B0EB091C18F7781A0B9E54C5DA45031B47FE9CBBAE317A141158FF015F0F15523ACCB439A14F31A12AAA5CC234261F2C7BF06B6C22880B4DB321C3767F6F1CCEDDA1C3F7AE1898E3D0424535255B7B951F8CA123AB75E2D6BB8093EB80E03C168E757C06297915BA17A6BE99192363573FBD96803E0AC2D0404042200476BBEDEAF2E3261B1DBE91A7EAAE2A98944E1C6E59F7E810ADACAC3B18915E9A12B82282BD7E687807618C29A62A28B4DBFDE98CD9F2C685BB1F390FCDC38DA4852D8767F43E7E1126C8FA76C9544D67CD40E4CEB3100C51605727D35622CBC07BE1E9A47D36D8ED35D26E744D8CDD35EEF1C879DC48A5F7AF51DAF01C0862D4B49C34538997AF687E304683995053B519825DF4C4F96074D2DC61687F8153F3D921F672552B8FB39520E90A5E23C5D8DD3E0B658926A8536B504A805F0B91F9ED872DBD86AC123314F68221A821C3219E7DE02274082DBCCFFD5E8E48F0F983E7191D18DDA9655285F75E0CC6FF9929B4BCD08227121BF23DED5805AB1F4DAF1000217FE6DB84E6E8615491CBFFCE1CD679D5A5611706A3B9DBFE5BC9A01B728039C64C24BA51CCA3B018FB6F406C48418E03B2BD2AD7E6A6C46465779F33795E38DE866EB95B87C65F8861059B6B2BA333F86BB9990891893C27985313F8157AD6B2E9CD22D873B6B734106B85D912EB4FB37A0564D8D0529597AD3FA8ABA7D3090D296AF75254195965F3ACFAE420B395A46CF16527AF8284BEFEBE89AC1320467913CFA166C425AA2A919CDF7DD9DB4187B2168CECA8F62EC9BE381133F85D84804AD8BAF980F85E12AAA55AFBF9A635102BFB8AA95445AD61028EAAC585354F55BAD1B096ABD16BC245817632BD124D71C45736A1060FCFD77B756CF986E22BFB2A4749E4A8526DF88477100CDC3854E402BCC2339B048D91410F81E0FC72959005F4C0D55C833D93D45A8C7ABC31452D0D6E29F9109E0C20DA04E43D34CE397457790B7FA8FBD4924BDB7B99A8CE05ADAD2E1A99FF6A2F660079D98227179FF9AAFF4A93CEA03472E7F04973DA38683E1A821A28803B543633B26A93795A95F208E8E1AE579D28310D7F075147CCB4F943D0882B91F857257420BA3E57D31783202319A9AAFE09ED6B316B8D346F036D282933B64F29CFDE543DE1B3747CA5A6DB8EB85F134698A28ACE2BA9340109F4DC7D026C8B7633CA349520966FF2CD396418D6E8B5E2B448B25985ECB1D09F5D2D2B74CD46C68420C0C3CCDC6CFB3DFEAB9890D6409FD85614ECACB046B350C69EEB46C1CDA239E14C2980F91EF748027C067C0121D0664F28365B34B0F1A4A23D5425E450B03CE2743FCBAA6A88F90ADD20B4A990405A49AE11FCF777C37E8A45919692E2EFF5053A6309A59A8F46082E52C277E48BEDC535A1B74901307398A33D64AA8F325445F3B5E607E375F9209A9F102D233044E0CBBA5EB1DC10E41499559EF5474B1D26A5BFF52659E8EB79BFDC5E2ED648254951F969B553CFC706E42C1E77335540C4662DD217A139B9B39EB89A9DF5158E1DB71FACBAAEF24BC85B7C9915B56AC86C3C53762FD144699135DE27DC2547C679746425CA913E4B602159F28C16041E6723BC8E4E6F1596A7A7505CB34B1BB36161360A4B699B11AAF831579998C651766E434DAC9FA7DB589A5CDD49482CA4602648A9CCC00264CFD30CE84920BF045F9B6C10B6FE9C2C5885C46D4F80413C3391BD5E46C3A33B0BAEB21B0A8366A06C0EF818223B7A82330E9C161B7B5F1261AFA6FDB20CD2D1EE965839651AA0F3C2D23E548C2FBC93EAE1FFCEC8B7702371E1AB5BFEB4A4CCE28D46CB2322E2B059B9E1D929344E9CB888C70CD8D7D21F9B0BB13826FB3ED37A9F466B3EB7D21EE3FA94E050ACD647DFD07E36B33FBF03CDF92B8FFE9D69D77E2E7B8AD98C849FD4480779C8C4D2AE8E8C5E6081FF0D880DF5BC9CD4E04EDCD85AA9024DD5A10C883253FBD5982234A498F008A7107DD36C703C29614B538415139B3263D208C5D93F7EDAD386B8E4D749061A890DC96F7B99A3973ED5FF1CA23BD64DE5DA8169C6FC6521BED803001EB31CF95321FB630176D897F7C8BFF7AED25488DBFD6DD662424E86254C0658562116EF91ED018780D9C8D74F05FBEACDCD262727E0D6FCC0D55A637E741404E88113C2EA3A00539899EF796ED70BCB3EEB035037F6C6CC58B4CDA1215F4EA724FE490B1A121B5CA6FE87593BA4E99E0CB76D7039F800160777768D90B0434E0F1126F5F34066013A733B297303D8422B4BF22E1CF407FF1EF10A4910303D67A413572A09D5E4ECA63CB203C172C24D6366694A2A265D89B2D066C00123A91456FB700828E1F50F3F7CA32AD59D4B3C829168C44EA683FE7F71D72B583C646F2619DE7F791C5715BD47C2BEACF2451099EB5F5FC454DC09D4DB670B17D3B9077B4C66A1196F0970D16FFF240057E1A6E0FA602A5991DF8719EC3C54BF9CD1EA5D1549CF45C1364623839EDEE298BDEB9571C434C15EC9C641CEA4E547A13D8A1D9B7BA2526DEA5B25CCC9092F5E1969EF9CBEC303135E970D439C24F5BD863D7BA11E1594DBFF7B43ADBB11AD813DED0F0075BB2CA2B051092A7BA56CC6CCFCFC3314FF020BC32BB8BE8F101DC6AAE104E1A422FC7B0E2FBCD07FC688FC1AAECC4CB5CD933EC37A9023227BBA2108D8EDA86B29F9E510AA35369717FB2ED71003E8227AB675A819CCD647D055732B0D026D274C2BF310B355368E11466B734AED2CDB7D5F72D255EA3E2F4CAC862926A2FEA81A923F14D3570E8C0223610023D2D17F490F40BECB7E6FE82FAF873D04120D0F6261DF1296EBF9C5F489DCA238D39B0BB6FB827AC9C6ADEF4C0EF2D3BFBB3737C7A84EFFE3F563726C6A1DDBBBEE0655A7FB4D47A3ADA0C5E284CD5049FE17D09AE6C86A90382A110A3E1DB6E104378CC0D8C7DD5FF3D4105699B7C047278D36E2DB17DC93AE096677D53EBCF3CC8F4DE28687B1CA2B6588FADA15653BAA18F71A7E59 +Digest: 3DF5FBB25C8A26DFDC02FB3DD69D5D59AF0910D2B8DE5E99546F6E23C453B1F3 +Test: Verify +# +Message: 9CD70AEA76D4FB7C0DC9B8B5F27581C1A8B8723E32FEBE620E2C3C5D3748FD93A3F342457F1E03C4A8A2B1FC012F5C3CA96A2C9DC0B3DF39362F0F4138C8E67DEF6B194D65865B5044334D021CB33FFD27E4EA572EAC0061AE34A2237636C9D417605972506D67651832D3C093F5B529B299E9AA0B9F1A31344F5C750498F5BCCEC91D2397BC3B1B86460D592492D951E7C7A792B5A023E603B901D2F2A21834B8057D291235E22F914E32AA4DCCFDB9F3FFA42A5D76E25E4CD25EF259384C014E210AA8EDB7C359AD5DC06A024413B4EE2AD7EDFC20AF7BA0A6CBD86DBC6D4E3BD84E2022CE1146F16BD99B82B5CAAB0166079A237F03178CA16F40F090DECB181CE7741400F699B2A5D488C12A05F3D2B146A766FBE5EC6D623675141BDEA7E7E360BC0B0282F5D875AC0B2C3FA4642B0DD3D1AE43004538359465879E58DA2754EF8A597D68573B74E155F2941A397F6323EE22152A2F856A21158461DE754B516B2FC161AD44F3414C61AB3D0F6A963CEA1B88B4924595C60EF8EE45D7ED18A5E7FAE4BA166AFDF12781EFACB6B505B499788B06E84ED6695A17CAC2073CA2EB28E0516ECF8D0E75E9A33980418719EE9598892956BA10F47EA2841A1D3F46204688F29422CEB1EDA0453115068F4650DAEDEF1850364CD07D1639CC677433B9AA3645AA09937CFCA1C9967282CF2C52F72FFEDD644FA7AAF63ECA5D9A7AF3733BCB01B8F1A4E6ADD9AA77DCEC3BDB92A843DAF1F3BAFA10EDF14B24BBB582C0609E6CF354D93D8CCB7A3858576C7BC0521B089E78722D4D949386DD191487E2A472D912CDC00FB883C2E55885624BE47CF5B4316F41A61DA095F96AB89C29B17D83173A5EE83A6A8FCA5D1228D49401C900BA969F51939BEF878124788AA863957C02071F97EF29713893703D3008F6C21C246FD00FD1DFE2B8377CF8D16E664A78B0F7A95AD55FBDA0E53F8D3E6E2A5FB4502CD89AB412DD692414D586610BF2FB6A1E59FF92B012F0F10DDEB49440077AA67338B9A458DEAEB8E0082FA902A017BC68AF13897BEE3F94642D8D7B04108ED80992F2ABC0B6149F5D6BF150BC2AF70A9E811096398F2F3FD8FA786AD419FEE567B8E338F2BB7FB965719F93BFDE2A13D8DB12F0309BBE98C9D0C150DCE2046951CFE833C5626BD040202E38D20896B1064C1EA54C3A82452B2CAAEB9DC772B7352321346D5C57DF446CD6858532C8B8AAB7ED4BDBAEA75BB87CC5EEC0F75328D9B4FD000190071669BBAC21BD211E412E1859AF190E565512A86224F8F3D866F10B3B83460ECF1D3A01B88BD29C4EFE27C5382C0E28CB9B93123E225718C4E089A9F5DABBE509BAF6DDCCA074D9977163A6EAC137652E7607A5C9D5E7869BD39317392082EBF900292FDEC63E789F20242D0E573B54CAC046681093D072C6982B2F99F2E71666E5CB57F3D42F7F97CBE7F1B8A4CD51D341E521407DBBC4B0911AA4D5A731AF21AED19ED4E07088B7B8AA6A1452D75FA4BF1A5D271092622159A5E6377F95B771D241F140A391AB1C9CA9ED7B3E9998746BE36051FCBA4396E6567A7D7DF08ABB8AE20C37B297E30B280066230C3C3A9FE7B38223F52213D23F6F65C268CDD702EA672AAFA47917D73FD3F8432F049284F73F4AF96D0614B5D71825E839ABFE1D88FD3342B1227AC3F1B7371164BAAF5524CFB1DDF574E40FD22EDA15110B57BA7C2D7FCF9D3B2CC81D6CDA36A3D84F07647A06E1816C77C2107147D86DF42E1DAE8687713FBC2A1AF36DAE54D8E578F47BEB1B70337BE5CA604A75B814CFFC458ED58298B71282EBCD8BC4B72402A23BC507D45F86A16EDF0116B488B6EF37E7AF1F06EAA0AA98F9157BA0E5CBA4BB0567ADCC11AABDDBA18814706601995E4E36FA5F608F96E939EFC1CB456F381A323A631179AA3614296A014677D04A1CAFD40B5D1CA9F4E6A0E2C23A102D589030F401FD1DD78BCE637133C0E4AD2D4D1E862B0A3558FABBA7BCF266FCD9BD8320BDF20A82703BEAA2106225FAAA52466D7384E7D6E301FD2101E21CEC0B3E50CA44B7282CF845B4412902BF14A6D3D188B9EB85703A4F135B0FE60E713D79DA5395287358382A512BF854794534536CFF40343D7DB704770DABD832DE3CD51866CD43DEA12A8E40974D9C9DD617341588882D7BA087F4B11517E74F29F75DE001DBDB2A90AA2067E96460B7C6561C9F3E54D862C957205D827C99DD6AC8E27A472405BB9862747022915FEE1C4681A94E98C44D2539026B09A693B9F472D7E47987392D8093B353C1E67E6CA39086B43F1014B7ED443EA7E1D5675E541D606545C4362CAB9B66C965E1BDB1C68895561948ABF7332B2B273D25245D6AB07D56657AB524105A00B5AEBE8E6423F64A01BB362B174D14A3ADD36E5D686A4EFC6E894D2197DB2B8DB9882B80A3F403AC791DC856687765E497CBE6EBD63CE358D25609D57D7C1A4BF0F82FF73EB06AF73A4088BB55958E15544D3772615F9B5A5D17FF47101AFD77985AFBB99830F70F8C20CC1217239E86A034D55D632E6BF567341F5EE63FE51774DA8457DC3E64A9F4BD922E57C6265453D638392B04BFB27EF8BC349569A1F223504D39067E90A1C7EC6321C5E3D14D14431819AB70D8F731DF05B526025FE6790FD09C0F9B9BFC1DA8546E6F4E0DF9CD8F6C7AB7CCFC51869EA1A38359F4E37FC5E679EBEF1DB73CA95780AFE6A5F36DE38AC21C7223A26E2FC93604A1328E4515B5CBCA9639E2997E6476135D04F3AEAE69065C02E8AAF80DF8C904236374631AC7A03BB61F1C99D92FDFEC7FE520BA7B17E781CA076AB24C584142C33695F317FA512D3C50CDBF25ED07AF694863CAF5567C952AB18B2EF0F865925A45CC607DBC555D77EF5B1E672559F67F15E02D83A2F864E3C563EAC84AF0447D79437A78099C0C9AAC81075F2F73F77677DA8BBD5194E5B91954D133A2F4A0F8DBD18D278E2B63EE143A93220263E9A4D0EDFACA833E546B37C329AEC28711044659F7D05CC7E300D84654A76CCE7AB0CF053D83062F16870E24F4CDC3E679168462F9A2877A0A779D2EDEF2C7CEB8B13D70E14130CE35B10FA063CC25BFE5C22C43066A6E6B30DE220DFC53AC4C455DCC21E0F680E748AC64DDAEAA1179FAF19118E6AF220D3E5A2C710D75D2D6DC629A66AC6EFE8BAB39D2A3A72FFC78B798369DBAF68D9EA038B9321C0718229E38CA54460F684F07C281027E8A6E2EBED985454C9FD0609C447BEF80041FBED617399FC3ABDD8D9362ADCF30C404B3636D100ADBF7F484D951CFD9BD1568045959602129DF8A9B634FE98A1D74B265E000984DE66707FDEC1B4FC25A24729CBB9348961F4E60219ECD1CBBD87195E88977D3C0981F6B56F8B440B79A144B50673F51C27A75BB61B614388CEE6E45147739A48AD38DD970A822718FA6FEA6F0F21A899B227A6364F3D63A2C688410F7C8E12F130A648C021D1608DA7F12C01AB3DFE0C7C507C539C1FC0C9A56695B21F6C965BFACE09ADB6D660972A946EAD94E2B8804F9FB35084239D10668E17B21CF45F561F967E80B54F77E5DCCCE96C48DE46E077F37670C63D9FABF07A09A175C19EAA11A8505F565C9F8D2257371EF24F0C280CAEDA00595B564537E643985E3F87C6D08786D78F2B7BEAD0FB7889984B318F49ECA44745906E33874003557988892BE254F94D133FF879C58E32237AB2542AFFA94413F27A3087559F83CA6AEFF31FA39B26A5884BCC0869BA5DE97D26281B65A8862970371E4CA6ED1305ED857BAD01D484F6BCDC2E59F2998A2B865CB552DA0FC878B24863E3E379BD881D30C992D5E905D09768E30ECC2D8EC573088BECC9DB9A4C49040A95AB13F769BAD02A354C8D22D089B1DCBF382DC96A97C72 +Digest: 5F25B962BC83BDFA06B3EB18CBEA0D0512470F2340987B7CAFEA187B694CF3B3 +Test: Verify +# +Message: 51AC85665680F226B5FA41857959A69510BD2D321FBF8BA760EC3AE6A120146D64844EEEC6EAA07E7D3E4460B26B1354CDD7E9D07B58248158AFBB9AB2FAF446CF14C588243B5376D71E4A57C9C75312C601127B9F047153197415E2047BBFCC3FDC06A1A3D5828DD8FE3956737E6163CD82A1C502F380A3D4F008E5BB859BD6D6C7627BCCBC120D66E61B3EAD3940B761F44F787666AD3B5073A46DFF794F4BA4CD7230C6031AC5E536A6D4B1DE6DD8A846C9E74982ED16F40FD009CF835F3A60DB34EA3B35F6F402726089FA559C52553A21AFFA593C18CBA252F5D91070C604A28AF4C83FCF3EF91AC44E17F10D1BDB164EF0567617C5D346F64A9F3C58983B681DB5861F4AE1B3803620F334FB4BBD32E2162A369CAB155900A76E358236DCDEB47C4AE0C1F02A0DAE81A1A667CD73364B0357525FD79ACD63BD3A19BAD6C61F954F562EA85DF3282781D254308A912FB9D9EC0217B4D9D1A12D21C064E26A6C1DAACDA386CC155E87CAF0E4B37422A9E9176272B8BE8E9136D33FC2D52DFDB76A3F124E260D3ADBAD946A937D537ADADFC9961F58DE9772C3EC7A20F9EB552CA1A51D5A5B5A126C6F6CA9DF00D0831D2C9EB1846A8A31747BA0E12537E3DA4D0FE597860690E9A69407CD8E299DF6B26B6E972E45E55565422429A3FB9537E8FED3AEFE312F827C22EF5FC539E3A673AAEE96573937ED8A9223380A1155E111F62DF5653A2CCA9571C072993947FF48CF5B8862D39E1A56DA4C0703078B4288E068A365633BD7A58258C9F4B8D0BD818D985F1B6666344A8A4827F16EFCCDE41800A5E54D654AD681DA761786C2900BA8B55D36AF5B74E9370F3A3DB653D8DC22E82C67F06B745BE5400509E969DDFC218EC549020CFF25A3118750E65E4E7252CE95BA7B5F52CBF06AEB76955911478399F687510999788DF384B0BAB811DB8D5563555A34B1DDBBD7FBF2D5838B11C920967E03A183612FCC7AAE97F550B156B9F86D11333F2A9E123958E81272E0DD9064D7F0FAB48EBD01826523FEE05F8F1D814CEB0F6315D175804A100624E4DBB1931D84999B03F8EFE5EF2C52A6DC89BB83F2A4FC32555834FB30B15699B643F0516C308BCE2C631D95CF497F4DA1B9D35082D151E6858E4D3027586C85052F070D4D58311A6015A1593F1CF0116D7E2EBB7186C234E550DFA43C9D845E164ACDD8937B01DE309B86ABBF687172E1F58D07CE0EB3E1795037ACC27CF3C9EB5F4F289B0BC6E59115A2A800548FB0C13E2BE40DE6833EF68D67A884147CABFC2B3A15D6D6CC05309C94850CAEF68767F828AF414CAEDA060170736F308363F9CC9401A94D80F953E5A4B6C5C17AEFFC2B9C9DEA0022E76BEDCB5789CC07C6BDC9D8E082281415CA4D45E2BEA09905E59F4BA7C070DB1808E28C2B0CDD5189175CCB5B4731ABF183737A7244DBE66D1BA80F5000B43BF59887E4732134E370D466973B8FA237C1A26B0F17719FF78E1EB04D7A1F7B38235FCA1F3E831E2344DC1767A2CADDE85EC3AE1D2DC2ADDD25ADDAF7442592385A3198F5DFED04267939BF1FC10412392BE8E9999C02933D05138ED7C021FE0B620AEA9635A71EACBCC3359232DAF2792356577810D038ADD4F1160806DED266ABC5A09FA0C479D0BFAAF094987BFA637B0FA019120FC5FF5F695C05508AF0615F3A01752E6D0315AE3F8D8565072358F2EE959DBEE5A5C50F072647C8361DC65FAF2BBB1449AD2861FC2F2CD8A152746B9151351481B35C41719158FEB9D8C2A68D998109D9220EF3A7B2ABB745658C4C9021F41AD6BF326539F237443DCF643CB40ECC7F3A5B1775C54379BC9072C81EBCBF189F3594FB7B44FAD9A7C027B20CA5FF1D6DDD8ED55668B63837A930CCA601325774AD9D2530EE36E9C932373BF19CD6B8C04BC4A332BB27D901FAB1DD6439204FC74DE1F808DDFEA231EEACC14B2E88C33549D76BA0DF9621AA01FD4BFEE6FA705ABD879342CA99BD1C12698F9C14372CF5289A0787CBC771415E734D7F2204ED61B2D13212D9CF18DCB6F5883FD4F72AB6E285CFFEB84C8A9FE139ABB812E224DA61B795675E77A347D9608032A5A3AD44F392858B08AF900F694A1F8BD9BFBC6D716BCA31D738A1461664C61B6E8984DFCF4B83286DBCC6710B38AB8355EF8E33818CAC24954317FEEB401072568FA20516A7499FB358AF3A15FB2B3C63BB5485AA7A0F30A77E11A64533EE9F0E4EFB328C634954742C7669AFE8DDCC2916C7955CE0AAD773AFCEB22DBF3EDD5B85BA244147667C62804515F95C3D1F79F537C9884039769A4527C2C4509F8DCEC9F4F7BF34C03E62058012316B446EC613F6D104AE92F8FDC287FC206BA09E3688D50AB4B8BCD7E6D88A512DDE7C4B3FC7A774F49C8633A0AAD151823B239E3D67BB7F2A5AEDEB1D5CFFCC446B5730245564C2152764DFF7A0FC5103B82F66DFF1737E4840296B89C1A329E1F22127956E5BED50323A7C08F7EFB9A03711D5D5ED0B9820538C7C3A876640BE19A38390DC59DAF3243A7D66068AB5FA0464D5D5573B8851D052C2B12119F153F682EC99881632E8038DB79D144879CB1A3F632172EC6730E92D5A09954BE4B35647BBA147035CEA3A2371C0E71E769C3C0935A1A4BA8677941E5EA3294277B76BAA8DFE56C914341349D721C48B3665F9866274B277BC4211EFF0FBEA846B04E148C9D5720674041C153D772507F318DD933BFE7CF1AE1B6D93D830E5132815EFED5723358CB77C01B20D77F0A7EF16FCF436B7234E034103096BA6B44E942C8C5AFFD3AE5CC6AD27ACEF68DFC84215E4159E9CDC3BE9A1246A094DAD76CCAD8537F750A565F6A63CF146CFE59609D373CB49D5CBDA34568C7DAE968CED2EFBB1DB27FA035AB4C3D4FA0A006784371A2DE69C0CA0E658E67592B978C126D4780653F555CD4C6860600FC4AB470A87D2CA8C5F7F2AC7FAFD99E88DB42AB35FEB76E5E8564BB48D6AE00365125F7E5205360A089C501F1EC316DB83F161D99AA3B16865E371FE17E0DDAA0F92CC5A2F4CDCD7BC023D0C81FECF6F31306119F90243860CC5CE1F72087A800DC1C80AC0B891D1672C3E978E6D9E0FEED8E582A27D38FC65DFAD77731FEC62BB92DB22AB53DA89E254BF9098FB839E446CF4D4B1F90158B73C9D057CF535DB5D908F9481FA2E75C0C1FD6BF4068CAF625DE7C02386C503C269F286846A52BECF0A27ABB2A0C27525CFB40E16A85474F4D9AEEC92319775EBCD14517E21865FA53C2BE6FAFEF1416FA2C7967BD31DDD8CE463CA19C5758AEC85AC49946EEE33D9530D26059A185A6DB7E65BB912DF0B6784526CE7F8AD7E97648E5D2583CC3ACA61F43D8A4EF572EF279C171A0FC19000B1DE7181C4D9BE87EDD938CABC082E0D5198B975DD1FBFDA551B197982EBDC515ACB1B2CE5A948DE2C07BCEA8632DCB8883E67D748114BC580409D4020CEDEE30E248919FF48BAC3502C9A0D2808AFC369DD72BA45688459619D3D9A67B23AEBC7E4AF75706CD6B7EB3DF3885D330CE1D4A9A1A1D1ADCCB57E80C71D884BB2A7273F86D66C5404631239A516FA6A896FB8460B30B3C31D575FE564AD919F85CA9AEBEE1202D47C93EF97AFBE0693321C6AF9C676566B81672A1A92C528CE63D55BA59C38DA258D41DD46F9267A4D7F01499A5DAB89B1D4DF6B0DA3F5BFC8F12DCD12928BBA49F3A41E00432EAACC747C0CB4AA6FEFAAC7E171C4BD66CB1CBD1AA60D49863ACE6B8FF2A1FA7C417ED24FB558ED46E09A30031A2E0CEF887E2CAA3BEFEF1B52288E51D3B9BE06E6B1E36F6E54CECBECAC215A5BA2820E8842C66437EE150ED1B643318CCB3B727FFB7F82DB41EDCC40B56E165CD731F4AC133ACC96F5301440B2A151F7AA57B235218DEF779DA36018BC8D21DB1EBFDC4A6597AD1ABD9D8D278415F1571301D699AAEBBDBAD7FBFEDBCDB91D6A7A6F +Digest: D1B76A331084AA8C866B3C7AD1B3DFB9384EF332893147A4E3824DB93FD5E856 +Test: Verify +# +Message: BBAAE8F6865A120959995C2AEEFA389C5451CC716A1B2181CBEFE73B358B1158E332F0DEECEDC720176A83A72B99272DB52FEC4F19BC191F631343877ACE79C5DD1A35A036B4423015A74CF9BED9BB9A3FB9704B053CD40F2C09C437141E3CD34AD49ED317287F00EFF4067C265D11B0A8D61CAC3CCE82B480D28C0BE7988A158A322F4FC2F03672EDECD7419B0AF62E38DFE51D1879042965A3F150D21CC84F39D35F3D29967CDC1EAFC154D71506EB32FA74E5EE780ED2A585E85FA94C999405CF4A36CB1B3A66B5069D4F7CDAFBCF553903209CA72D14B1DEBB199B0919164E23FE8473305A27E6491AA66381986465B9EBC20CF83D16675871F091CF7FAEDEF626F24871528ED448972EF9A7BFE19567E7A55B506BC17E11FF4213449160CFFAB0E60F4760CD2AC13B3AC2A7B54237F0ED946387183C8AAAEBC90F24F77208CB584493F9A74E130ABAC9E4B0A00D46A79D84B2540F08A677506C328AEA0C4642995FF86BBEA50545B56474F7BFAF68D8316B91D78AE28249B2C2141CD2B88B373A609A18923FC2FF26A34BF8276D9116095A387824244268CA10E4591DF4F93FC35B60F7A6F16957F05E7DA0F71FA3BFCF065882381DFA2AFC6EB7378E042F3D99AEF6142FC59F73052995196613E5E4FD7B72D1B4F79CC8F335CFB76B77B1761EC5FA35621FC1CAD2631EB789B5C04EDB6594A310632EB69A118539C453943B02345F69DCA535296AE859A7C95014E6E86B79340DFB51995701D30DFB94ACE5D8371D715910E8F04B0B9776B8DA511A1AB7A412B6023F132D8009F531108C7AD894D565657BC7CA36F948C9D8D297A986882934943FF83E7B6182BA2D04973D8D7454C351097CEFA542E5211484057C9C93E15CA54753C5A52E44C60D836000858E815BF2E6EAA0DEC34411F61E51957D6ED0ADFE1B7B1C05A80EA99643C1E8BBE837E61F6B2F48A5607270B31DC43801CE75A04AB9B44B03DBDC7C1DD3D7E9D369C15611F03789DF7A4C19B53C8C591CFA9FAA1617FDFB29B3E76CABECA5173D1EFFBDA509ABD95BD0F0BBE42B734DF0B6AD7FE3D0473FF68BE5C054B5846C7DEB494C1E9BA93C4020ADB03C596A7F9374E737A9ED7B3939E15F8902CEB81220C23530AF15D37508EF68AC66CB3086C129C38931E0A25839396417A937333951701174F01FBDE70DBACEE7929EAC0D24EC2ADD5FC409746F373F560142986AA7D8116F41B068A80E764FBCD9A55B461A24E58F20FA1835AF217D6AC7858A435CDA75686DFBD4626466E3BE4FFB92575FD832B88FED8E0BC09B9A458CCFF0E2F5EF7FC166C366705076C8341104DA0E474E69802E4E95F74E5BEB85C70A86F3185ABCE74FB82B932AFFE0D2400CD10A77BBFD25C3291DDB740E410B87250269DA7E3B8C7FAF362E76540409C77E7E4252C2E8127E73D1A2168600EF4953267E339C0E89346AB600F644BF96E07028CE2FC954CDDB92084177924D44BC1A8707657DEB88B081D61722E96CFF41699CD0121AA5162E488BDCDBAECE34ADB3864417D8B75F1E071014195CC724423CCB0ACA2D6F869BC9FE8C02B9FA1B3219B2226D325EF40C2B8DEEC4D0FD91D1CCAB4A2899E4A4F74DEB15DFBC4BFB475A05ADD585328B60EFB30C95A0685C0EEA5DEAFD829E63908975168ED129918F05D3EE41FB79CE20275DBF49433D9C04DE89E02F108F67DC6D1543879C9E88189EB7DA232733C155A781422C757186E676866B3A297027A7E3F118C612B06858D9D8B6C52FF007388F5D342924ABAF8A5EEC11883DDA071E9BBC21CE52DFE9D2A99C667DBF5222A53B9F1FC7C12BDD0C6AD9859D2BDFCBDB405266550ABC65CCC241AFE3FFA6D848B510036D3A8A2C880627BF0D606B1516EA302D0447DEEE0B30AF6FA02957B3313734F7B50C56C969DB498BF390FF8FA6D8F27987F11BE482ABD0BD6D1B93569E6759223649FD7F599E0BA03FFC001E4DFB67BBB019769CE8D92E16E61A79BCF279674F835EC430349DBA64BE6F17080F93C214F82AAC62E964FE0118A8363B4E093049AA2951C3C58122C51B33AE4192E13B7C662A1E11507549D6C69CCE27DACB80EB87D9149D41207B996FC50E0461ADC67ABC5623FED08C4970E1F0B1B6165CC51A1C47BA53801D271F79B54023D0B8F02C84DF6E255F7D01D5572E5EF2258049D75A7FB657B3091FB1FF485F72ABA4548C4080062A7605963645E168291D3D7B626485A81C5B4FF059E7F10EB2925C90CB04DF3FD7AD47CB463CF6F893A1A492CCF9CCFDD97C8B33598F21A31CA6922BE401ED5DAC6710CD20DEDE974C6D0F4DA5C77EEF8EDEB50C5CFA45ADABB7D12E831DE432BF537CAD094EFE9EE77BA232FFE4B24B0101B9C8ECB89B9458F42969CA68D86566F6F0BC622720B2088E84BB597CFE0B2CB2A0991EFBBF6CBC625C891ECDF0423CD5502A3E8DC0877F3B2B592A6607846368511EDD5B50DE085AE3334CFAC89C0120F4CB6E336E5439F64BFF63A73BBF57EB993D3BDB375DB13F2AE2DED37C86E9F3505D27E66FB575341BD87B7DC5BA3BBA45507915157DAE0CFA198E2A53E84C003834AA6370D144E2426A2FE825157E9CA1A6F74EE9010E76AD09856EB952E1F752AED7C8B955FACA8909AB731ACD6D11966257F5137D81E3A0DDF787117806ECD21F5156044CB90934D16B73C68C9651A64A7230EE401A0DC0692AD0405382531B009DD31B6F11350ABEE63D14CA8F32F38B955EEBE2DEE3BA7848B6F80F26DE4F909BA9CEA072DC406EB5557BCDF3038B8CE1DC0673E612345A70F484690C4F2157D232610FB642E5020F70FCBF2A16A7D26F994A0EFECCC067CBDB959C5AFF0683BA5E9E5379C72B3E8265BBDFBAC90BB637244A742B2EB7FC2C9459730E9EE0F7F3468E70C49EF7D9DB048055B079192D4B2A9FE7987F97EF873FEAFBBD30FF41ABD461253B739FAECD72CB0309D43D719E2CCDB841B7A98457AAF6F110904543ECB631FB9CC0D72D1A6BB9B179B2B30F0028E4C8963FBDE554869FB3077FE12C3E2649B3C3303F5C56063CB6038BEF91667E111BEDA35D832729741F46C24A95013C5FE58FA4D514325C24BBF095A81E3301FFFCAAD5664871BE1D651FFA36104154A7DA5B2E1252D34E9172DD9066F87CBF0F34FD4BCCBF309E4CD807A7F671DA47A3CC310E77767C38CB5C2A5C09457078305AFE85A6ADDC386FC5A858960D142AFB6E067BB1D503B0883ECBC0ED2FB0F2C25E6C4AEFDB77E9AB4E57D3AF7061E47687EB16EE77D281B1D3027115414CAE0F3B6461520379A2A5C6DE3E8228B9E88460441AAC0744B34D7F94FB41AA22A0223397C7075BF2FFEE21E3119A1AF2147B77D5E6464E4AA5131E91518ECD1DEAF8D855F5D7E92E90BC21BB9D16D5FF79355AC3E4D2249F8BE591BD3C8B747C839D84E2C86F7D9DAD36470C28368A7BE9A5F0FB2DEA82845B273F55287E42E9B8E07EDB79776C01B34E0D2F61DA5D6A0B33500B363BCA09A4B2B0AA69860B8AEF0B46BF624D66596C3105483939C913B2490CEBC2C5E7F1AD31337B8A92A8467B9FB829ADE0F15BFD97F6A5148E28AFB84907397485B8C5FE1A08AB3681401C1E95F4DAC96BC5C2E02FE575D9BA5118CF32C4E864CD28D17D9EB77E13CBB7873A385F2A57315BD678210AD3471FB0EC12C2670E5B1372D641BF5BA6A9668FD7113162319429F94963E0CE5CE7E3080E5F272CF60EB957AD8BBFB20BDBF40B5B7336572928D1E28B133A0DCAEB9F0C262D96CDBC558AB3C61E8790BD888FC7DDDB2F5E1E45DB85ED5FBB952525A610B855CC0820B0861CF3FC094D6326197D738E8FFA964FBFF75454D325A9ACB746CCF90409500DCA130DBADBB06E1AC5DD49C536B341ECB38846AA98EE7FC9EFC0323904E9AE01C249DC9AF28C6286EB82E4F4EC4287606118DAC7FDB34C01010F2547A6B8C52E0E71C45FD9448F9291 +Digest: 0F1791A03A87F9EB183C4B5289A32FAC58DF4DE56B13D9FC8F23045563090462 +Test: Verify +# +Message: 2A1C58BB76D2BB18188C793795A6FDEBDB42473BC0B28E8C016BD5128BC93A3B9F74233709F3C6ED6F61CC4DE2FC28099D5BC230424F72FB716F6216AD207F4EA66B0FDFEF48E041F9A29C4E5D0E91C4ADBC48651D3438A90D306CF2800C9130D537F1A1A0E8E10A28A03C491D43F5581C1588A3A0A131BA077E220BD6EA144ED23977533CE56A3B8B777124D4779AE160003B64FE58D38090BE675CA2EA535CEB112A22538055032898F7978FEF552D69C0AC65C40F6436E651D958F1FDF47E3B97FDAD92455D4206F3E961C0CBAD4F08EE5232ACEE2951D72F07526AB0FB9405832524D8AB5734C9AB9C1806A397E3AC41E698C51FD5A5E86904B5A774A9D43AB3B276CDA4AF59F67AC22F19F9AB9476C02301AA52C93D88402768914DAD021E3A0294BAE078CE97BE07464A6E08C12AA4BC283E5761AF0C4B34C611ED7576E8111753207AE8E1ACF43B54615ADC9334989AA4EF597E222EF156BCC37A096A11BF5C7397FEF9B6AF010E98207F430BD73D981183CB7C40D0F91A8111A1FEE346ACB14303A7140054656AAA94387AE9AAFA2F517387230178FD7AB879024CBD65342B0B6C9A17EC2F156C6272873A51753D4DC0A05E8B4238AD5265E4A6529D67A79EB1168C6626443520029742FF42585DA890A869659DCF1CE94AC6DD8A926897D3CC2D03C29BA83AFD68D99725AE47B1E4DA6312076EDAEE24E55BE3BC1FC899D3B3F05EC65393BCC0B921C09C6117EE393409EA7905248F68D5569C6D4F02194E465A1ABBBDE858B7CAF4DF506FE633087DCD6A10CB87EE0BD09192B631B5316778CF9D0CC7471ADC34130AFE8471E42954B389BB5239643A429A8C145B33B2A676773F3F0428693F2486DF9D3E5802775E841FDCE2E487682E04383A3A50FCE6FA2443C96398089FD8F3615C4170E2F04C35B9936076EBCCC1CBDF47648871FC3B50E5823E882C2EBC8452510FF3833AB0EBE4C5661C39A2A4312FEFD6752EBDD2084CE0843CC52FA506D69A32766184E04CBCCB0D858ADC04492AC54432C01749E56285FEE75ABEBAFA00DC096527EBC319FE8372F86D48056ED39F69589AF18DEAE1DF12B4515912470D27AA68D6844611DF7AD76B5D9EC63AB37C9F2AE6302F134A56E88B52889639AAB5F5581C152BA2C837890C55BF4CE88A4BAAC728729F7C5C576449306544BB8408F4C08D05783DEEA12B6D8616D5BBC77D1A8F9C38B2730D33FD24E967F62D0536829156BB22F3442F98BE45BEC3D8FAD4CD4449F71EEC85D08F569DE219B67A63C795828F227C0F2019C91752EE40AE3C1CB9ACADA9697D4CD89851061679003A35D86B4C5884C9B92178446DA594C689B0734C0AC3EB77FD29A3D322CB1A3F75E2BDCCBE46DA0E6D0D7368B7091B40F0334A171FA9F88766927FAB295E930FF613AAC04B1F404A60CC027999EDE2DE0EB36AFF3AE6C4CC18621D4542EC2F10CD3B82A192DA10805DBC817DE292816B6845A63875F494C5E306BA89A8D3A424007A24AFB68987E5F40CF8D6ABF39939AB27E0A439C9876D7CDDF9BA4B04F345F02F0E6E7BDD53063126F11E40FA378C28E914486AA7AC796DC5CFCE2A828F0182647165987EB67D25B29BC61024C9433765FB089316FCF8A84669D282AEA4E4D7A3CCE7D54B43DC9A83AA56ACB0463DB93DB0E6BB74193738B4BC72DFD5AD1A6BB802237AE2CAD5FAA49FA81C623A19731889EC15FAC5E856DD2E263EFA0EE8B246CC4C96703413CA8B81C6C8040CBE07F0C0395C6FC97DB7CD109ECEC0C0FB863A05573AB56FACE676B45ED04D139C00236B29A9A56AD992E701580D36C886E8E3F18421BB3EDF8D220A2DB6191896B105898478A6D4A319B3B599313B51D70C987104A6B45B354F0B1CC713758D158252F46F6DC36A16A99B27A9852508E6695EE8DB83398E577963391586C0051372F7C51CAC9E2F713F228885ADCADD15A03E791440E9F9F9D750B0C5BF19B2AA45F794BE2367416BEAFA1AD5567631C3DE294BA3E997A9AF5B16A9F8B42DD7A41F6971DE07CC5BB9C86A50D74DD86E4BFC96B75AEAC69E6D2FC38713B366BFD67A973C9DE81626599F2E046A82DB0B5DE270DAC24E08AAA369BE2CDABCFD0F94B7B80CBF80F8364F2E1677E992F78D9CEEA4B14D4D7F04BC24B4FA15BFB5C5FFD96AED9470A85831FB7245E3BBE551204AC4654F9959C97BDE4AFE001C74E7EE50AC51662D41113EE1D55A1BF816221CD31A4532C4111ADB5D4490FDAE1D3944579492AA53B6A56B2CEAD2E8477893BBC267D1337276C8757590756B05D169E4EA21AD61134B8DE23C9296A835EEB952FAAB4BF7C4C9C789D13BDCBDADC4B88EB43303D58A2EFC87049121CB98F402E64FB0462EF292EBED2E9514135E48BD3CF48249CEC4577E3397E864673A05A153352ACB5D4C38186994B61DAA05315E18C19494C49A59866C1743EC10837DA9EFFFDBA1FE7C0DA5096640AD7DBEAB7DEAE9EBA4630DEA9A155D102AA9D6309515A3DAE7D72F12CBAEDE0641360FF873E855243674B239E828B2BF2E9061F6602C1364D01704FD06B54C30B4780E70BD8ECDA791C9449A50B3C620C0CCEE37BF757C78D9C0F000E95468940CD91AC8DBCAFBE631AF221C1B98EBBA31D6692FF925CC56AE8D339FD9445E88A3D9235FABEE8C39DF4ACF9B2AE2162A37416065657F9622F2A60ED649943F2ECB1D64692B0A8668DFD24BDC8253B9F52735D9E5B598C30580847B8211DFFA871E436B5BDA048B984AD4C60A1C26C153C2354317EFD3DD3E0AB628561927EB878DFFEAD897E21627C01756503402103F856DCD4D73E6BD8C5F50A25379CF3CAAA61BB49CDD45269D4E88E450F65D50EEFDE0790F111EF66DBDDC59D4E0E6A399B89DA763E1400CDD95269E87B0FBE209BE94C04468B7E7A89E452A3392228D82C6633A0E15946C63256BB90FA7DD1F20ABEEB4F7BD781D6722E316C5E6D1E8EAF21AF5EE5F045FB47179271CE026B69B5E9DE13945747795D54AF03DCF941B06BFF9E0F7467F1E814551F6BA7334A5DF2F0DF3B94D14FE3822E115DD61C9FF31BACE3A018DEF20A00111AB4F41669D393E6067E7D0B240F3A9D2B383B198B5F156E4448BF5533E020EA26D1B0A02A18AD6FF0980198A7555EF300202771479900BCC8D1F8E5FA22DF78381A0BADB98E709650E3C2B40D64AD598B0C074547463173364D197180F09D1E4EF1A01CD960818CC61618E051A8E1D94691007892D5F998EE7C1AB5C8A93A908A495AB5D198F2F40D57D847CA049099C9A24EDC36600C00D3C92CE851F1FAFE3A0CA10B6878B23993CCCCF4068CB1AD7E42B80E442B660B2D61110C9B5ADB7F7326CBD178EDC494461D2A75A212C4F81A330A1E955E003CB47C0A70A9CBE30E8E6F67DA4D70446339C8646EF666FD58206DC2C6328D9C6733BFC40C4FB14C7A3D2033A97CDAF9DE18DC9A6B9B634D68EBEB1DD4468239E155B46FF930DD93C170D0593528D0218FAFED5DA2D24C6536D6959D7B17BC935061A196CC45A055A42281571D6ADFA8C5F39C71027F3653A45A9D266F69079FD7217ECE83FA6B890E6E7E8CF9DBBD6B36E5CC9E94EF94676697E8C2ED2F86ABAA81F57431ADC98BF2B87D312DA629B03466ED0310887E397DDD8DAC4E2FCBA81DC86E2CF6A5868BA5FB1B7B0478634F4E0764E00CD6C4AD768264DA1CA5A4E150437C799C287671A0DA62A98D1811594BF589148FD2D19446478F2B718ADF6E4ED188C9D2741A36BC6B566401FD3D4BB72B983D346210AF90F76BBD9004D8B7DD03C48B0153C95D638EDE1CAAC6EBB9777E766162DF323FA802036CCD67A218B7DA6D557FD49071CF4BB411B5EEC1A6D25DB0B99D606AAD6373DABC934935C261A4D3F93B3327C321A355791EC425BE0C4ECF727735C8E87442DF282FEF7CF8D354C858DAE6EC58BF4E34E87BCE7DDD93E5E9B50B69987FC65A85E849781CE9F387022F67585BE9FBDEE29 +Digest: 49C9EE914450B37F38D08ABF8C02A737B87359B9DF0B8B7D48A195A0FB6CDA70 +Test: Verify +# +Message: ABD0A8559409E2BA57EE4A0695BFFA76938C0AD626607A0A305764D5CC344F59B71B0CD26D78BAE5C6F936C9B2ACD1635660734696D099B2508A5D3B266B62334FB717A582CBB036D64494B7BE48CB45443B72886AB50291AAF88AAF30CEE07736C452A87B9D0AC719C9296B4C59B847113ACC62AB312A7E1424C9983E5145FB6B40B107C428F6E45725FA75085FD93438BC8318A8DCCC629F608F064BD1A9A0805A84E7D4F739D87921EEBEF2FFA05BEC80D8D5BB922F85B5D59D3E9F347C6CDEAAAE9B501B9FA73DD766234A8850F05A303E022813EAC886C1D79699DDB4C0D79C3BEA01CFEE333DF470CCF1F20DA61C284770B13E7E060461C883052A291E2E48B78CDFABAA5BC43BE52453E0794D5070FE1CA82488BDE000A1FC63CF10BFE9C4DB13599AA002B27681A3D6BCC2A18E974EF861A8BCD8F2DC712C8FC11A144ADB2CD6026FDC169BDDA0B956F151956FACC9596264E24605225E6B6C862E92B48CF457846F1478CC1CD1B088549AB7CC41B25737B01F0F7571F8137B45AC944A79D462392CFAF0BB4A293CE484F376C737DBE4659D6DA414D42E904DBDE2B2A91055DA7577671EE2DFC271E516C3A48EAD24F94D3ACF10C5A4E263235F067C17A11F2839C9FE3EFFCF487B28A3C2BA3AAA7DEBDA52F38E50D131641B34FC545D56119C18373746A893DD0F2A564877F9C8C7E2A1C81DC2739507687CBDB67758ECCF0B999756BFF4D8C8144DA9A7E6810FF2252E16068D87A9800AD72FBC691291687F638C85897470DCEB9BCE3D20C0852BE955068E8C546A6467CF5E26006C27CB46A1B532E2A8C485B1CCC536504C81A49263A0D1AD5052ACE184727BC4DCA477DD81B160DD79886D18264E92C23E0E9E4D2E32B979886EA7D7A625B60F86E00FABFFD6601C656BD0BA1546F21A816A9FF41632F05CB65BB5C9BD0223227B778F5C1E1014F47F5FA4CE534DF811F1DC7E7280AD7A887A9A13F3D2B84C9DC468C578D81419155A3BDB814868E54C6795090CBFA9506DDA062E6567A14E85779A0B81FE11D0039BF600F84EA064DC3A3656DB1018BCE55A747C91106E2C87F559AD72214173B090AA61F491623FFAEBDC5433B506CBA6EAF7F217E6A85616DFBC0F0E24F28615475068B991E2E45395932E18DC81A12C86FC5C93ED984EAA660133731DB8177A0F385884145A2B8297493E8AE36361E7D2B0A22B13AA0CEB323B9538BFEE6EF25A2769A0A1AC769E0E2133B70B185437AF92A86E344E5088764533F9E27853AAB559744C8D3A03CBE805A8B85C559D339905D5FEA7CFECC454B3B5E0CAB3618FD7C6BD320523272E36EE76B8E6D8FF33FB64A00378B89C2F0452AE532C13460E37985D7B9204C89341CB0577A10EFD66D228F52329254BE09B840FD820AC36C7BCC50636D756C9C3E7AC90CD2F34E4039E710640CF5F49CE6D5121C59ADE67DBF678A523BE53DD3CF0DA47E7EDA4ACE2DC729C8F1175CEF8ACE6100A4540290E4C1F1B94BE9525FAE5942AF5C8C81FC6B97038CE731B728459A40D1487892F258230AEA267BF9F3835CA0EDB1061F070A7E3F9CF6396B1BF7E4EF9FFDE32AC04CFB69461C6F43D4DD86A6BDCCE667A71E998C4D63BF9A62AD5E66C9473989C91B40CD34B499A885171B4EABCB9B6CB756DE7770DC612C9039215AEA83A44E2A74399D7C5A9B4F47318C8B5BAE09322BB552670242C82BDF70669E97AA9A72D25C34FADC7D2FD37C1D9C230183BB5F2F4EB8302204DF02F963222005F0F1D36840772A88DA67FCF1C66B76F37CFA415B2AF26660E5161330403D36AF91ED022264141522114287DABC8F89CA0789150FFCE792892007E7E10BFEC2414AF3E45DBB749EE7CAEAB04ED3E236EDA19040A60527E06C74125CB7A07BD0DC1EF24B8CE14ED95EB83DDB44A4C459A8E688DD215901CFD18B05457F90E2F75269740F08019CAF95DB3C32F88D9B0AE5AEC7300D687E0192D47E7318CDB588A8007062DF062D3264B47EEE4D23C98345795844B8521E1C469070545385F2275FDAD8E9F2A89878AD7F32D285C6EEA40CD26EE4996DE5E9EBFD92D9EB3135B3BFBC031EADD48778C0B839D178B70F5A55478B09B8803939EDC51ECEC55494C1CA9F72DA703E586DED95860E42AEF937E4646ED0B1F67D18A9E7B1A2F3588706023B70E18737B73256A144370957B42DE46C87A3828A985835F6C439C966C62D71CB70BF87E0FC232D53F5EA1D45E1739860275B4AEAEB6EA23E8FB0C238E4082F1A1EAAFF3F2F155E4522B715FE3A7B7D016FEBB68FF455BEE08B07F532F8CAB12111F0889E3099A48CB4706C8FF02AECBADDC4B254BE982F9194AF29A665522B7EC4586CF053B5F9F39BBDCB34979408DE78A3629A6A1CB16CE43C77CEE2B127CF548760F1844DB2453B2040F89F26939AAD957F52127EC1FCC0DF4FA8DDD103A6D0A0ED198B3BF43D55EE9B7B9F32F3234C26BAE5A43BA2A8BD10B4F82FA464EC52095F96C2CE513072B1328263E56589E02DD379CFE2695855F7FA55C5C70782FB53F85FA367CDCC42E29705E8169F9B7E96C589A0160D7BE0AE2E11E547F6BCFD0D6C066AC2898F990CF2F8B73B50FF4870DB6C8D189797A9F8D00DB8BA54910EF033EDF6EB4A4BE913CA5A2F6639B2C9D73B2CD4895C876A5779CE00C7517D4235A0AD4899373A5D230BDEAECEA94FC98CEC591B09A4161EECEEA3DB8987BFD6EF45439733B08930D3DA2E1AAD67D234C85C7E294F52BE46D9CDC5D36468BAC862A9174A4F483BAB7F18446514A50FAF6C2B318A35B90E8E439B9BA1F5C6BD1AF0ED2276F2B1B2BF0058D7E8FF5015A4612F7B51C745A2C65ACEE7A402F7DFD199007FB9459E42F7C3781327BAF97DEDE3039E0743F8BE5560462479D49D57E857BD58F70ED64958A4F58E4FA42C92609B40E351EADB1C3716953E9587C156C5EA030DDE6EF8480E4BB477C86F9A75B4695B1ED202DE17553486B532CC9BABF25B4DEF64BA5DD4B1187652657AAD2D48B721BE3E6AA2D6E197A6EFDAE5B77FF3A772818C42DCCAA29083263C427BE6B1AB820BE300252D130CCB68BC6749452C4158C94EA277844BAFA026ADDE598C2AE2E42F34B417330C371BB93557A1249B33257DA3A5ECF6F9C66B3C2949D2D4C651995243CA7B8C92F0D776CD7C68F4872723389E36A6C2690E8F3AD14A2BA7C85E5E580818976C64372125A06C639BA701EE13E5C879BE1BBDAEF57FFC8F0A874EC61303E730F15B8503ED66A51BB865750B761AA7E81730CA33E3968360AC1D42FDBE56395DAB3DA851B1A2FA5A07B0A4054DBCB7CE403B383289AFD2FE4E56B1A8247F862DC71A73FA219612EF6386803DA53FED097E081451E4B236E4D09A3CFFDD1678FC7977BB86ADE76FB699AE7AC7FBC0F1B8BF62D57606ECE3801EE01E41E99DE5B3952AA61663A025A862B85D3352D2B76D30BC552D8EA4F57EF27D9CCB8F3F3EF37D40ED4A161FF3B9FF5251B995A4CCD8E4D197FD647F58639A2E8BE77F5D1CAB4F885C693BE8017336F3F5A2D249B6A8EB094D75D6D6A3F4BA81775DBFCEF519BE500C22B03E304981444379DC304672B30767DC4E847E0D65319C19F81AFAD233E9B3BE8B781167E8CF3BD77870F8FA724605FFF580648AFD3D77C1D8417BB3D39DC3485D705EBE3FBF1EE874F002DC1630C79EFB8D7D3E961AF2C2ABA01339664A2F2EEF8BDDF2ED790145745B1A15F51583DC6CDF2D255B9487D15A0BD0C2BCC41DE936E0C09F8DAA81DCD95A873F98B5B36787363ED59662B6D7ACC1484498ED763802ABA125CDC4A103953DB040ACEB59F3765A0A172FF124DFF2EBD7F0F085E4BC9A8F9C14FD962A34122B10098CF47ABD152ACC2953E48C6833130768C74B00615F4A27415D6539659E2DB7717AFA320422A34176861AEB0457CF973CA732FA5CBAAFC4C5272661E2B30F9D3A0F4076E815F20CB6441E421AEC341A4484AB3D499C4065D5B13913B48AF442B2D425E86 +Digest: E17EE9A4631ED9F1E31DD5A1BF23712AB110B50CE15C17DB86942C5D4AC22314 +Test: Verify +# +Message: 615F5C2962A7DF72EC5F76C12E401E5E68F57CC3DEF1F57EB4ED9456DA2B36F99F3DB71615C0FD6B307401A93D6C18E0C4758727FA58CFC4E9917C565116EE8BDE2590B7966B3B048654561596D5DD7A41604A1727C93A45550B5F67060329098D4051B24420D2DBAAF940C7B58D14B63EE8C8E8B01A3E641C20DBBAB6A8BE9DD40025E38D01F62A83A118F4A569489117E40369790FB51FA1FFEC2D6DA1393C8705C34F7E87BC01012CC688B61B3421C0F1E069DF364404C7731B69D8DBBC3A900D5FB4AAD61BB184058B9575A0E049B80BBB6CBD7300A0D3C29FCA716F97F2B10D81C067CD399AC43BA788BE3DF5E17939666B0933D0DD13C218909197F5BA925D8AD32132F6D716308E8EABE1AD2A29EA24459801B226C8DD05BA08897F7FEF44A65CB3DA024EAA325AB4239895EAA895381A62D24637525B334C8A5F87795EC1D75974B408F31E03A522374FCA1ACC37C01C1EEBE189585FD412C170E47795D1B84E08076F3411E1FE48379744B3F516E7F172BFF1C892289DA1638238576AC3FDDF847CEAD6B1D278E517EB720BAC403FA9CB92DC6973E7DF2C0AE50F740405B4DB1640EDFE915667F9386D8E5ACC9AD2B4AFE37C3EB45ADAB18803E51C8DB39F57A65B06DADF4ADF8E689A0891DB06D2AAAF5E044ACAA461B6D2A20B956C7C1F81C24A24D4CE1625F17A9F403C7F878DC9810396147AFEE3B77D02D1D3782B952905FC44A24A57F2FD23E425055F531C60AA556257814BB37CB16059ABFE30C39A4C22117BE501AEEAF2F972E7E5B2540F6F728D928C5630D3BBE65325B1BC1C30C228A7B887FAE19C2A78E0438134C9A80CED57B013302F2220EA76AF4668F4117AAB0914F3D062AA059EB866A285C624E78F1006FFA373A5153CBADF514960AB987A01C88DF5EEC881381E28639BAB6E492E74AC3BBF467092BAF5D26A9791A77481D4C44F124C8123DC0EA2B6581A12B8EEAF2ED918E75BF0847484585E5C88B1725B9F8BCFA1222750A218A2AC71CE8370B384F11739615D71320E9D998155BD6B122C703E0CB80DE4B4AA12A8AE9F57FA3CCB274552E9D423C61C6F0BE5DAEB320946BE0EEBA4462FDA77643E44FF6561688B22B867A7A0BDD7EDC2B459DDEA7A305ADE4C0FAB4EB142DA9917A93901D362D0ED26C249242560673C586E81F7784A3077FA335DD53781B3DFBD162195E3068C6B5E607B739CC321C32782EC54879018F9162460703608FA00AD08410378FF8CBFB96485962BDCEDFD5A6CC213A9DE812F12BBB4B6F436680962FD932C40FBB7623C172825F847A20D922FF696727D96A8F1E45FFCA5D87468A8A2D050E89C4C0E057E223928DD797B077994CF77A878F3FBEFEC14EAC4FAA6AFDF4FD542A93CC15AA38ABDBAD6C5CE3E760EBEBF23200F4942F663ECB56909538D14063CD54067400531655B318490D7DD0E464A0561E8BDD51581AF52C1E1A19F08F6B274A4353988A3A594CF72DFC2DA9C0EA4CB94BFB7224F633C2911938619EECFB263BB53B17A7D2A5FA1594CB5ABCC65EDE72344BDEE6BAE5A401C87529A9153C92E465EC4DDDFE6D39C0729BEFFE059D8946F96B4C1B7300741514D4D7FAB773488185527509ED8711F9CC464610E8B29946EBDFAAA40BC5592E89D611C0DA6B3C90CEFCB745E57A3270CBA7D0A3C734ED774EDEFB3A2EAFDD6A559D737D0AE715B4BB17E608275440A5AAAE2C43FA55F3C9B6D5A4B871DF514A1C18635FF6FFB0D7D50469C1B7F3773FC709171C393F9CFA4D3FC07864972CF792F2454B1F61DA958BECA583D400614FCF09158328CC079F947E53BEE6DB152F4385DD7718F5D438C51DF96141CA736F46D7AE4A393BF9FC67B706C6D4E1A305ECA8B2CCB60DC72C2C15C32E8E60A27035746F3955F8555E3529A8591133EF47000B0A69EEACFEFA470FD0C67D01AA2365AC5D1F19125866A8229A08E132618E6AE6A290EDEEA8A900AF476379EE5C3105885AB6B0B913CE938F92F5028E8ABE03C27F563D2F178D238D52920313C46C14C63C704B154CD68587EA67C4F1895D4A6F42EF8B4A79C8EA93AC54FAB292DA589AEF1F2F82E030C97763464D256E525ECC9F459470B9C9CBC00217529770627A30F11608AC1F64E5BF285EBA0A1F2CBA2B21165DB340E8FFF16EAB146408D7C33284BE1F1CBA5D687C9C9AE258DA9EEAF37866F31C03E64EDCD30C17E7F7C176A5DC8B590C445E30FD15A558A9ED01511C9A3549EB315E820525AD45BD246A81FECF98DF937E3A4FF2AA84C7845950D2C71F480B7C6CC9A5168662445DB4FE15074B5896070DEE3370477ADE88C23707AAFDE32D96A185BAAD43D5301731A3212710B4F899AF31AFD4121E778B995FBA32178D3CDE5A8AF8428DEB01C49EEB2DD02DA01816AD1FDBAE19A1B9038E867C3E0B667FE9E2149659413EF916A9B0B38071C959A319E637431C9ED1346F454CCB44764F424A88513412631802C15104ABC4C0C6E1A486E4D48ED79E0925CD35F2E5BD91AF2FE91161B983420B59DDBAF957B1FCC5F630DB84F3EC432CCD9DCB3F2781EAFA23A0B9362B7B2E4F5667CBC52E67F8AA1D574098D3291F09F45B70D454ADA22B1B72ED1C87C9319163CAD070EF2AD0F12ABAB335861F00F7FF915D583FE967395F2313D0759299829C0946FBEEFDD8F0EB46704B8DFF91D505AAA9054AFBB3CEC12D755885B7BECE0DC196020A20F7158271CA900156C815A0987791AEE77AFAB9D64B1A093E031720DC911BD76F36A3046225FEB618D86C21C6FA435BDD24C0D2DD22DA1DFD24F2FD62BD561878F47D347E6EC220F9455B50E8AB4748DFEB23B68E3A2B2E44AB0FAD2F3EBB5592746203B92305A11ACDF1E95933DFB575761B05E1513E58F292DB401C765FF25F1CAA7C59B9CBB5F4298E500CC58D388CC2A576585CE1CA82E3C8E164B10094452F14E7F254EB0747AA3E97D84D3204B052E6E065E8AD7A5F9828AC2E4440ADFB82E8C709F52AA8C9AA2B0762F2DD298E11A8A7650FBDC11B61522F34083FADF8A4088824331156D20F6D0E087778C7A074EE351AA5AAA9757D880233B73D78A959B2C0074D3B4D6247A628E79E94918368D31A62EEDD8A5F317410B2006D139D66D3318BA08D40A4D8BBB3FA9298BE9DA6BB3EA504550A1B3FBCF04558FE7B01656E61BEE3870876AF059248E5C0367A4C62DE8DE466B331524F3226CAF921F367DDA5491C3BD8C61C6E98C2A2FFF38A242E999E45AF3BDC784529C83614820DB33CD4E860CB4AF9E63031ED95F9028D4D93FA506A2B3D520D5E72DEB35571C6EAB1EEDB4FD8ECED6CDAF7542E45A6A63DD37C5D88D79EC8F4477B9CBBE86D176E03C66891CDDB56795DB0049473F3C83A47B504B0D55AA80BC671A15851018A2238ED6CE15CA5BBB97B8BFF9DEE6DBD43867ADDCB9C4CDD2D585EAC61D431317C7F1BC5DA7E586C5A9DB578DCF6FCABD7786BF3AC667F7839B271B0D4B38DF71D4F4A11D233FFE03229AEC2F510048422FD2AFB0445158A4CD9FECAC256AB4E4200C624552833BFE0B8EBA7F0B93136176A6223F9D52C4910E104750AE5CC57073F80B085496EE673E14E6E7C15F9ED388F66F20F4590A4865E06BD61ED8266475D10BC968AA6593905A68EA83480A3006ACA7F55A429B042B3C5DAA3A5441F427D9733F89D57A0D216112177A8D1F3F22F8A2D56407124A0F9BBCBFFA597DE1D437A075EC2D36F9BA5505872AF2D3EF8D858C1C82182F02A57FBDC2D78F8F7910D6B9417901A469FE5C0E02553B65B8D4638138AEBB1CA4375C8BB79A02166E7C7E1C02833582B65A1F8CFF730C24C7B496F3DDC3BD9979E43048BE70316BF2C8B86AB18E2778D6E5B137694CBA52EE85BC90EBE039AF4C15788C87C510F1628A9511D8D887A906757995F9941304D178E1947E17FCFD09FEB9E11EFD1C4CE22F9FA81EB62DE89D29881035B6002116D373613631A159E9AA7261D70684718E9350F17D34495474442A033B8D64DAD040E53569A403DEBC4654E2E0C1 +Digest: 202B46564BA3A8F2E31BCB012610CB52A1395880BFC340A0FF0946E139ADA739 +Test: Verify +# +Message: CBB5DC4AF1675E2D2355ACD3FE7B9B8F89198729C7D63520B6A180ABA7DB67734D93258E1199124DBFF925CB468227D1AC16C1790C4F282EE26D6B7FFE9F495523B28F9A8DA282F9852FCBE1542EFC3DEB0A2D0D348CBE9B8EF8EFD5E4AA9A63121A2FEBAFAB6927D8D4B00009EF0AAC713C6CCE15F25D14C83AA17063CF665E8A0DDB8A8537512297D114CFA04E430813B1463EE28EF67D49CEBF4A64B43252ED84606E301B2E57B7CF4ABCD43B42CFC1DF72E897F5F7C33079F91D24F1E6AA0A815577604CA30BC30FB9B526E7C20C9A9FB86D9013A4F98363AA48D51C98942452EB2BF0754961952BD832F35085ED5510EBF07CD86554134BAFCDBC13A81367F3553ADCBCC1D44A44A262DE0EC011E4B0771D2671CEF297A6379AB5FAA98CCCA3262AAF77831DEF9EAE101C4F8ED370022E9BB5F4D488B7BB9E72309947379E36930EF65A1DF0431E922F23F4643460EDFC6F473BEC2B3D641DAE6313E13B48DEC108732185BC5A0AE2D57DBEAED6CCC81AA3509B8706C253823E475A20F7F2DA9F30F8B0929E79E1B6631D82A2E7CC12CBE447397F7B5B07CFF0D475BD3F457ECF9F5FFEE8B4DEF0A1260946B03CDD9EE8FE856288CFB300867BE334BC26D04A440C313FD10405E7E72363EA9B70BA081B75357BCC14632B88FC4C0256A1A4654797CC6DF1E6361E97C5EBD92A985F295DE5F351BC248189AAB7973F93579F47092E411BB696D90CE335F12D6B149843D313B8F73F0945B270C123A407C437ADA155DFB687C1361CDEB022E5762BC39619E5943C7813A35E771FE16FDC599A1D78216394F40BF4971CFC8286A58C682B21432053745EFDA42B241091A178585DAB31856033681B56ABE7BE25DBF40FC0CEADB735362FF62F64BB0505B50445998B266DE08308E4C3CCE39DED0F6D4622CF7D3699602EDAE132BB25EDDDD15B0D23A9BE3F102C923C9AC9C64F0D2E12A93848E11513AC8E074ABB3AE584F813D6B98C84706A7BD73F2C05F721279AC6137C70EDE2DF2B382892E21818D46969BCF2E412A11C96863786A94B4551931FEF687FF0BD8C75AB29FFB364C4B79DE19321FFD6DE20A8BA51AA0FB9389F4390EDEA162E1A90521399879CBAF2771E6D2DE2457BF2CB4B162F1174478749577B1859BF33D6F4B3A008FE4468DBB26C0C9F0EA6FADC88E4A32B3C078E958CC01E532D3F9C0BCC6669BAAAECA224C4AD9D1639B9867DE9A1F80681706E373F6523B07A0C2E259DF5ABD133686AB825AE0EF5119E414551A9896A9F127D452320D299B3B8D1A6CCEF7E842D052386ED3CE707FBF598F72997F70571DA0437327156859EBE3A48EC431B359A06AFBE6CB6291AACB4A1734F2EBC5589B4659D366ECC2BB82FCF9E1A39A662D9299DEE4F58C8EB5410942F914F9B50F9A45AC3C17EAEFF37DB1226731D77A0B835AD0ACB371FD25D194055A777813697523299739D6F2C9BC0DDEB594A4A0025AEB4D9DFF1E87115D717A733ACF156C4598590AE4D033D158074114FB61712B70A05D2E1E09CFEC13214A64F1910333BE721CB7192B62633CDF1162474BBFD9383D3EB5D8ABEE0325F41B7E472BD2254FAEA2FAB31D0C765614580D7B3E77D0E3647863E74CAFA361172ADB5EB00D4BF64F9262EDC8219F02763143321A922D7A2E1C3276418792F5028B3ED2B847DC8C3082F9DBEC28805489CE20AAFD6E6F7BA2B86ADD4B850969D6D8D9481587E7155ED2DB74CBD37B38DC1CBAC94E89BAB73ACA85F8148E0AADA6CC29527A0D9D4C785C4D81252A9A83154F7F240626CD8373C977495C55CE521D3156C0C694885B37E4F15B6AE54A7B7D069C17041282313A4B4E2CF50D7814FD3BAE1935AE0A32966085F27FFF36E50ED761370DD4D280A9519D90915D3A16E95BB3A4A05933B11EEBC7C1EDC9E558B5C4B1E3AB68B02313B11E4D0F0EA5ED491D4D91F8A61290CEA75C2793FF7FCD3A2792DD6BE6C1ABBD45E4D5025A1F0E8F3C77C7D6CB541B86AD9523266C8BADF5279661D77D361FC33136F7F7A8B78A2BEDBD69A07F26BCDA207C3682402E60281949088DDA94AF8AD4E0534393F14B59EA432F19A61A6A1212112D1116F1B22F5869E3B6FEC20D9264105770F8641BDE45918085FFB24709028CB966CAD3B0297B093A1772C919B77972C240A5917714C4F9F2739EA43BE37DEABC9C4AC5BC476AC52BB28D11DD6CC5F24EFE5858E21831F96A107132508962CD60F55E0E01E2A9ED3BFC34D7F12E8ECC48CDEBF0AD05D2EFE1426AA2715AC14B0682E95F555408A3241A46F36C1D618F0FECE57151A347BE48065864077EA5B3B30AACA29CC79E5D840312D68A1DBCBD91F22CE1CF3DCF69999FAB6CA537DC39E0D2E8E1C5BAE96B3AA5C31760004D3E875E0754DAC571EBC45974679624F16F9B38B39B3838642BBFFED583908CE55BEE2CEB429952303BD2A37C000CC907B58474F5D19CFC6CA9A99481D555B4881BA47BA5E21576A2DBD91672376C3BDB95EC0D92B89AFE09F619A8D8CED87D141DA84E44EF2D798B59C3C3A793083704B75D892A4F39D6AF89CE42FFE4965BF710F0B640200FE1DC3A936B0F89DACE595071E25A53ECAB2339E98F921E0CD54FA2BBBBB0566A2DB288F9E3A0B8A413DBE4A11704466CA915462FE15B75B1530F4B193865DCA5A8931C2C5953D8FCCD4A7A3C3E4D3298DBB95B4F3730810DEE7D2AD0085601A7C6967EB5FBD2BFF799C652F05E030EFDEA705AFAB5D9BDCD9A461D583114B1802715FF609E951088A52F102E532987CEAFAD37F788FAEA74049F862737C76F5DF16E9AC02244B3B4176E50ADDB123E3E98E530ABF93658A9068FA95E1E8CDE48143611EA60100DB4071237FC41AC921D0C74937EF34EABA832A33C255DAD2EA77216328F6B42704EEB5D603D75A1DF064173BC1D547D5949A4FB9FED180EBACD49C37F54C12062ABDE41F08B90C3A602911324B5653FF01279F34951451BC73C6831E8345FA8C38C94C424A8F3325D5FF101DE225B3F59AEB3BA3BD83BD460B6675FD06805673C5F8B834A931AB6EA0FDE95D1508AB659FC68A5AF767F32FE49DEAC077096BF01C930794F52957398806BA7213AB9B3D69A8B232720242A2438386D8C15491E645AC675EB0F0830DDAE68E29E62A32599A1986C89AB5EB20745056D72BCED3C9D3F5B4DCDFFEDA88BF2C0C0B7C74D59ECB86F2E08F1C377041D88B66A4E94AE2FE9668ACED318C580FC84B7C0DAC8FC95BDD0BE02BBDD738317239641A62F0C3C5AF9A3530DE04670CB507094C4ACDC7F826B324E10E6551B2C55C268FF0CA4F2810AA5E20CF29B3B96861A9A508928F58ABCDD921B519067983C51AED06BCA005FD26F3EC5BEC18F3D17328DB39E74E52366802644EE28361E3C690E670A4EB4DB778546959B24FD8A71E93D18BCE1137DF1C3D4C8F55CEA53D47100A8CC021065A9E0CE60270FF397F9BC45CF5AE1794472B71E43FD234A6C8DD81A7AD7080A816A3AC1894CDD90E9158E8864EFE871A8B5470D3FE1FAF7F35EC5C05C2A1CB81889498A4450BA7F42EF4B024A8A59D86B6A1B3ECE14D77F466735A334CFDB765844A10EE566DE0894F0EA3550AC96B467F0FF9788E01E54338D8798AEC5CA88BB844083E66233DA86697A5EC4380AA855278E8954B1392971EE2E64E4039D017E3314485B239834B97293DAEB7C025599CEBEE6E0EDEE4979F9D87114607702DDAE6A59DC721A1051643CF0FF173284723E5F6EC108BD234CBF2C29F76A32FA72DF01175143AFA6F6A5DE158117D897357B3966B2336D331EEBFB986F466F47BE7D2C97B5509A87516EA463325D67E7BA5378946C7041A88B2E9510AFA23B6073554328E8C8042226FE01E584F59D3A1F3E046A1A3CC9CB98DD442146E5C4B87D85090B281CFCEAE694364A117CB6E9FD7B4BEE7560A99B38A0B7FAC87CD0A88A1FDFEAD31486B4876F1BD8B7899EE769FBE939864FA0CF46290F23A6CC86F17117F429C3E15194DBB41283BBDDE2F4BA58509AE13C352D29E9D24943B8E67697D02 +Digest: 593AACA9B6CC7A4F844D73F6412519BB3C7AF1B02DE54417316360620723FD5B +Test: Verify +# +Message: 1410F2191911A5D934B86A3104B903933CD71497C6A3C4886BA591E8C5C4004F9E706050F22B29B6B962C4ECD0D71F2BA0C8142C974C696FD051FB78F1C7337A278ADF1DF56B306E1BF175052241E85CBA4FB3F910BF10983CF4876AC32A01924F9FC1011FDC9517C7935953DB23475617DA22B88A0F8F611ECA94DF9FBD3F104B4DE955FEAF39C60220AF8F09590DD29493FF02450E72C0B150CDD79E4F199686690A9F1B41B8C8210FF801F3315DFD35114797E86305F796EE333D50C2FA63502C05407CDD80D9FBC97745A39EC172AC51A6B82A0F22E2E61BFC52C0CEB27FBF6783F88C3CF1E58854183902DAD9C7C08FAE14AAEE716601873E4C0F42E457BC6F3ACC0557FF563942AAD1AE3739D40728888D1E3CBEB5F83E6A14693A3B60CCC15C8DAC672C1819B48A1942F9436D6063F078A41F6B009B77B7ED40E0879357ED889E9A715E85FBD3B458D8CE592DC647FB9A0425C8982EEC1D1ABCCBB7F06CDF8FF498E3AA0E289E53E3A600829FA50605486C3A510E85F17330F52EAF596FA91339F55BEDA5C39DBF143F6D03E29C500E479E0BDD1E96D5FA4CE1CDCA5C921A01189493A3FD489A7FD74A26DA243253A7BE763C9F7C2CA3A33B551EB4BF9BE6CFFA90F95835DCDBC5522F50584CD9B541A4581E3539F39A36507036D577812E3009DE998F2D633E4335CA015F9CEE00FD2B3FAF619EEE1F35A3212C406377F6452C34951FB0E4CAB6ECB0AA48788163292939933DAC45B50E32703379DFE77C33383884D6EA9519508A2EE2BB91F583C440FCD4F1F58459EF45360778810BD4559FF1115070823F1337217F35D63E9BEA069B9E944DCEDF5307DFB69DC32E478BC3288A90135EC0E1AE1C81012D3CF68A09297BAA426165FE3DB10715F90BCC0C6BC37977B07C476BD64A538F1BDB616F63B846D897680955898D89D3A9B94EA57BDC0EBF61B3B1915CB9E4B6DBFF922AA8476D2CE35A986E45ECE93193F974DB4524BDAA67AC8C5670BA5D8320B6C2B742365F9397FDF57089B8DB6946BF392E95F107DAC2ECBD5C4689B81A37EC69116B1571B88EFE98AAF1974D139E26816FEAB4C4577B2FCC0D10A7F4903E199D8D2F5C4A9415ABB9BD029A0F95EDC94EA2B9527D12444B89F8CFC80508C03FE3930DDBBE95E5D9794CDFFB712C6159D568685CC585E712268A78F08A9FBF199F127D63F7C587095CD17805B1CB679714775C9119201A08CFD3F9018CA2A80A9D0E882ABF7EFDAC567F5E71FF70B3AFD2D439810AED0004ADFB0F9AAC65A59ADB106C70D92039CEFCE1087C1EE1EC07216AB3159019C5EC75800589368F9FF6D3FCAD218BFED420FEB30A8D46FBFF9E32F637C73FFC40175BBFDF98CFD0E7A2F8EA9A3BBCC06F51B161BC2D0B5D905823E4E8570036DC5F865F8CE7AE23B6362648E61CAC24D10A140B0D33000B529C6E5E0D7AAECF8E8F13E6F033938780D7AE31C44F3D9C72FCAD22C4EFF64F2F2961E41F8E1AAF725B9DECFC30780F74CBFB7F8B5C90171A65B9476E6E6E7220262A96AE939359DB61282CF1777AB9EB41E19B938949886AF97707CC3CEB11E007A6FB76763732A6C7E257778C936EB367C58FEB16033DF8EE6E24E1C9FD4B6EE7FF936D59D1B92929DA7927F0EE8A6BF46D3681393E5E634243FC4209DED95E3A4DDC7CA98A6F02091A879B5A3088A469EC9EE5C2823322D49C20FFED48FA804874EAFBA84C69474A238CC7AB76486BC6ED8E06D7BF9EBDCABC8C14787E0051F3832E7F0A79C50BAD486E6FCDB76009A42B026FE03D23A8328066B481EB81FAC3BE125F7B73D4CF1329FC4CBAAF124DF72613F8129116EC29C5C5DCB4D019ED0FA3DD497D73AC5526560286A8BB7976DC6C8F37B6C57EF06EDCE4A233EA6A6103B4F5521797564CCFB943BF82B2E2123F214187959614C1ED41731A6546F0FFAF2A30E63C1E228EB603FE2414B9FDC62FC6A797A9EF4BDA2501313A88E665489EE0DF3BB18205A9BE4F8147BE659380BCA72652CB32EF656A3958CE39B3CAF4672E0C5E38F862F6238C84AD6F1B2884BD641808B2DF21B50223A72E258AB6EF5E7CE674D32766E53DD9CA5ADD4B6210BD956615CE18B91ED0FECE6300FD8FD90D0769CEB7308526E81604E43A5156FBEE29D09BA8760DC1A4AA9E257306EDDD884D4E8770BE39D639440A155A6BB0C3AC8EB04B29E25DC3B6020240FB35F512207EB01F6BA0C1C92BEC8AD24F6C2DE8B44AA271C71892872289F0C8D897B3AE5C9223A237E55E50E31B188C728688773350EC4AC22A1CCFA56935DFC0877C474004D472563248D2CAC39CCF7B717652219A72FFFD320EFA2E9EC3DF5E39783D74A10DA5EDE268119882638AE3E7B73D52F2CF8C49A86AA371A3A1E4B1536D9411AD6DA4CDC7982013BF6A4EFC4D42CA97E3D1E9C128DA8E6E64139F223F2534598821411CA688D69ABBC5B324B47DC5A665D8DC45A4E4A650DCC7F81A992AF4E1B29E53F86D604DBBAE5D05EE5D385E4DE1E4B3F43E9C53EF55B70E73706140E073CA1D3F75AAF2D19ECBC574FBA77C35599869C1BD50EC5D4B3574E8D0CECD523AE1A3F0087B4D620E594DF766886BAB73BF83DC3E8AECE846D705BD818FDAAD4106CAE593ED4AF1AA9B0E4AA67967674EE3D255E4B2DCA7771BA32C69E1C41BF54ABF26B8E705E9B4685C11D6FC8077E07F0AC3DA9227DF3ABD7FC8A6B9A96CE172F3C319270AE875BEF027113A249FC4778CBA7A81D17CE853612AA9E8ECDF2150FD388A4DFC16BF407B9FA5BEDFC653FB9C9F5107CD24CCFE1C5376249A7944F355BA377BDA7A1B3DBFEDC6733ADDC098F3394761EFBC9417C93248318120A1065EC0D37BD78F108C13F4C6F9BC66C4885BA5CE3385A4B1245625B4DF3CE572F32AB06D7C5539C798CFF52CCE74BC77AD3729436B1726305C03E5A1EE8B4389E206442DAB767D6F5B50896EF3A6C56BDB428C13762086D726A9C140DC8491632C4AB829B957F332BA9CDE8807593A4C6831B2169272CF2EE206611D473705832ECBD7B2F61247D5894943093E2CCBEF7A22A8D1F3319B2685A2053801EBD72188BE4D6116A112FC809C7D32D1C880F2DD3F26D738AD7E521F6409EC0603D77235C0945F4506AB21C2EE1AA067D1C488D1BF961C9D7C7618700CC20045A12C57F5E151112CE0FD34D7CC4C94DCCDBC745AF2317E98DF0680654AA72E013E911324848C9EF519DE181B70E2CCCC25B8BABF4966DA3D6A7DDB3CBC39B0F49F7B7A951242CF63CF79607B754584AAAE2690440D4C4219E7D5B51E57EB4A5F770D1713C8FB05913F9A1EDF0F39FF94AE9C60155C8AB83774EBF9720FBCA68FB3337CA5CF068EF910B69177B950FC8E6DA854F4592F38C224D061B5A0C45E50A933B90B0F0BD46A66FD8B57F828E029F922B5B64706DD21748FB66D5D06E38702CC93F1C5CC2FBF4955B36AF84A916AE38BEC10BC6137E45DE890400C5C7D5C87E399CFC0EAE81792E46F8D4B9E9972514C593D7F0040FD3E0DDACA03C345ECCB3BD0736495E9488BFA02E48B4405C9AD785979C5BD6A26F62B4AA96121A3E24D58410734119C422495CC5C5763E17070C10D7C3355C330F168617BE5708E92F5F84AF4A42DAD49B478640753606581667BE395C223102E906602CF43F6C0DD96D27BCB2F9FF7E2C5BE378F90B9716998E52AEB04E6B801315C7CD1AEB218B9FC4D8492B2354E467C0E25AA64A3C270D985763734B4929BCB956E61CD340684EA802FA45B896E539488316C1A4A108ED30EDC1D76359E9C23157F918D44C858C55E40A00C040D9990E6A592CE5DBF9982BB13073BE09872908474B0B301DB6798FEAD1D3B6B20E01AAF6D535841FBE22788EAB0E5889FAFEB090301367B84DC6A36AE9D949B59BCEB5163152D9275A546B8F2E131140C8E7E63F687B0246BEFA301426124CB8FE89143336F66481248C86FF791BA359A691C6BE7C5291793BAB9A9182392672A3911DBE1C8B0499527575DCFD745578A875EB3CD22D99B24301ECB52228A4C7ED87CD8B05B8DF937E206836C3227F8A22F8CCFA9 +Digest: DBED916F404DEF8CFA1926B1BB24EF6A61FE33ED46C890EB10439A5EA6C27EF6 +Test: Verify +# +Message: 928911CCE5E1DB9981FAC27405F2DB6832C18A2D09E35B05B77A8342E6CED2A18162064A094291573F51C1E8F6D9F9E544B5A0B98D4C2719D07F422B1CB3A56128F230D3AD6B6E648F72A9E33C1BEF45187FCE1344D09D4395B9FD9AE29ECB33CF06AAA7E8C1ACA3AF854BFC29652E3C6F52EC7561289F4E6ADBF06E0E7433346882AB901E40D336EE7FDFE8688DC2D0538225B8A9EC08B71C4B4F2B2A9A3F5085CE7B20A304B6CFA7F9A602B7CD68956859292946A1917E013318759754032CD04712936581170B6BB4B4FC31C24D422E1305F37DE4FE77BD17D31738A2818C224FA66C9F829C642FCAC641F732C5C871B256DE50FD85AD8D6129C61F6E084E0C175B1C0817E9C5C22A5CC6F2A57DD4E454585D85415897F7B4D4A6B885868C1BBC853A0CF759A52717E39CC7DEC942A1AB29A08169653BDD356144EC30E6C0CDA47A3B2189330227086F1556237EE1FDF3EE82A38082CFF4F83413ECCBBE0E41DA54D9B7A29604B616D042E930CA1898F19AEBC75602127A5AE986C6092FD498EB1B1BA80043E43989A14DA39F938B93E953DC39263D20E108988B5E2F6115CC73C514C5DC93F45C9EC802D499466AC58ADD86A3549558E070D0666DBA05D1FD213AE638C5AA683BC51F8D724BF78FD2EA58C4499DEF0D91729C47967397FEF280C8ED314F944465ED7FA96BE682BEE72EFF5BF5368A518F49A7189C8A7EAD1B7A0AC5F96AFE55A617BD2FA6DF5486C1962B5C932D2892B0D7FDE3D2019D0491661116E2479BCA6487263C6C57162C7F730E60D449D34C422E8626AC4C01525D8601B572DF6FDC5146F3E36F05D9E27746751DA95332DB75AF81A406D09506980A5929D9CA0ED929FF6E84E2BDA08974A8DB45E6BDD8D79A99974E7342B3EBC33C92FEF29EA16FF19D03D333FA368676DDE073ACBD7B0D703DA99EB302954AE1055AB922EC836DFAC8710E8F8BAF51A8537CD1C5BE01A613BDFB19A515E84D3A697DBA5C753CD2BE9CB061D6C5EE1599685F4F626303248D44B4607C965408469CF12841E131A3B6D5DEE0482F0FE3BCA31145D56C82CF4D0DCEBAB9BD1BB0BC82D3191CFEB8652A68A8D99C2BFB9B8CD427903B48D9BD2AAD38273FF07A5C37C006290FDEEAC1814D41A43CD116FA4F9EE2D85AB465001AA5C2A9CF2EC5A39F3F3E254E5D48CE18D123D444C99EA66A075AE817D0A651DFB51788EF7F8C7D332712A8D7C80DE8A84F3C71F5FC4CAD44187F278C3DD2F6D55E65316EF2F29F4F12E5D50E042E1A81BCD5EE391E6B5DFA7BCA21A3910E88D3095DEC9BAA5703DA2F4FA8162EB7AD663A9506A84231D12E72ACF32DA6B4CE017807C49537F3AB14436FBED89CDE66A80D07F8C595B28ED881C9E77667E24D3547A94AC62F22FD2E9F00397494415AB5F0E8397FF5365A5B7CCA7F6733D4C38DDE73E75CB745C9EC34A313D302EF2FEEE4A87CCB45F64CBC19B30076E7794D15050042B0C72B4465DBE57B43384112DAC790AE8F7A9DD4C877AD41221154C687561F07FA2F07F47548E8A6142E5B351AC3ED039B9CA1E80716636986DE4B5D5814FB177EC2BEE98141A503392C02B8889618628ADAA72C8BEBABDF3B1386A6367BB9624D4EFFCB6241257DDF43814F94F7ED1F180640F99EF69BEC2546A02A3ABAC2CBB53715FE8603ECD5F4442D3896F9DB4877DCA9FF9C029B5DB00AAD4B099BEA75888A6E8A6CE851241EEF8F9A13F0788F807FFC576488CB51BE4541485D5B2D6B4FA3A2B763FF02981545A5F1CA77E44608F12F29A5ABA09ABF0D42C66AA11964FE88E2FBFF033D9D6B0B45B53663C554578A04A5FF2A6235AE90455EE300B426D1BF38D5B4CDCA439F915C70F9372A19094D2E6A3F2D469C85AA33EDE066A428706065E9FB22E41E56F89AE4C8884F041C6732D7230661F7C6408BB86937EB3DC69C2A7DCACA1F1201AC8902A4DBA67433E43AD10106815393107459B96C135A1F51BE0A84F35AD9245E26DF7217BE1DDE7840D99386CCD9985ECE6549C4D6B62F930D765F6CDFFB97C545CEECCD91C12227FC1F5F78A168DA1362C2657F454C5228FA0BF70DDCAAE2DA49C31762C63578208A6D7DA73E133340F429C857535F821708D47D34A90EB72D4222CE11AD6D86C118CB4B9EE9F1D5AEAFA05D85286465B5B2ACE173671EAC794E9C1AC53D8E2E349E09FF1A17A9A6B0E540410D2A2D59B00BF0F8DE3D707605D257409D3ECF54F3A641204AC07DE9BB4B6AE333A317DB56F4B1AA787FCB1ED31737EF0B473B0D4020BECC28325222788CB91D7151FC6C83DDD325C74EBC37A218E98178F2770C0C5948CF155FAE505322E632F82796DB25EF3688690585C4E66B24ADB2C4BA8A4FB87AE8447E729C694B27E4A497BD10AAC8C31043C3A09EA9667BAF288201236B523D1A3DC6727B4578912A90513CC1481655C632C9C5D722D61F6396FD8EE0D0749CDF1540B6A41399E8E8C7D4C29B0016D257AF264E0E99770C6EAED997F336F53107FF964CE9F830E971D4969CB6BDFAB657E0B7A68521618659D76E75DC4C795857EB6053B86305AFD12C4D7611C1DAF50C488F5C2CB7C1BC47CE3EE95F14EDED99E8EE8DC4E60FFDAC7098C388F2D8D5ACC739A70A4AA3742276DEEB0E9970A1E8C137628F34DDAC9E2B8EC2511E4D9559266E3C559F99F32234704D96D6CFA0A15A836760489A43C203A700FF20CFED9A65CFE90D6D9734E71CB82743493839EF02C74F15A4D1C121FF5784E323F58FD82881F407A92B4D32C1FEE3FF9D1ECC2B9684FA2B50FFF06BD8F9D4C7CA58279DD42358D0B0D6E9986783B8B76B25F7212165FAB4C8D835127FEC16761A8746EB8B7CFD46D96B2345D412EC6FE71DDA3EE47FC8B284CC433E825F6B52A446F437749903306D2FABEA89A7D80E4D0C3C6C413E7662BE6213DFBF5FADD2AB561B25979DB6663D6358B99515CEEF8633947FF3F4D89791F733EA69623E17C294EF65AE771BD4500278952EA1A078520BC14A8D63F704481FAA2E52D876EE1933E616F3A142AEFD67ECA9BCD367E72EF1497300B2916377991C976C6F96D7DD454916546773F9CB9FBE54AC1945F2723A1ECB547FD7D68B2B39BAD8AAFE7C5AB8FD518464BE0BA1EE4760E23F4DD61806B05B7282ADB230A45D216A013F9CE2EDC43A324A12CC2B262AD89FCC86AF2F794E88D0F924012255560227B81AB29B0A3D5C8E4EEDB64C2975C3C8BDD2B69A93A4B6A26B4A928AD78F721E24749ED5C56D2FF77FFED7A91E00A6D4B8DCA3A6160188FC6AD994AAC5B34DF3A065881A86BF423FA0C39B4B9EBFEDAC5342B097FC9EEF5A1D703DDB2B85CDA9F9BC3EC06B4C6B91FB76E05FFD32F4727FDA9D2215AE6BA5CC365BC8E4A7D87C59220BF7DFF40584740BADD096D9681FE58D658008735AFC9AA1E222EFC478D59F33A39896D92DCC13CB5F0C4C06878D71181DB37F19FAD5CAEDB225BC4AA15193F0107DDF89CDAD3E6FA388D40505FC42534D72CD4802F0D6C84256215BE711345B9B3F56AAED5D0E8D793B49FCC0861243E409EA430D9406B31D33C26276E717BBC0A44B9FCD063C0A9213ABABEE45E75493C7A1EEC087391720511EE198894DE269A7D18D23912B58127B97ACB504ED2AC41A0E73511A69BCBC3C80E8943E4B7CE740B9C54A3AD3C4E3A46AE520F17992502AFE6087E332F7A5DA30AF78E6042427A6600E07A8766FD9F406064929B21B90677341821FA8417F310791D77CA10451A9C1C4C302CE32C86891418ED7CB0B47747FEB4E4BE2A202F21B8F55CB4A4933B071F8C83C1C47C25C44A4449018EB86D53EDF033522641FFA5373977BECFA9E1279AEFDD850C67AE63F00291B08233D06DC9B280F95C8D648740C6934F6A2246FD353DC9D8932172112B5B4A711FACBD6BBDAA4E5D7BA9CE2A360BF4E1D6FE5864B0A91163224EEC68F64619539C96A0D599C2EF9F7F5CE94E58396F08A61580738DC7D9CF593A555C17E6A34922EED79C6308E3DE2E5CD35DC300D5C8083242592C05AB21D4BD76DE4DDF371799FEB668D1E77C8B866F2A9E518C5A23E1058932AE69FA4F463D09955AAD0194812456FD1D4B8290EE3B77A58C877524E49 +Digest: EBC1A0A46F85D197E021D56B533810A9F1D7FE59E83B20D6F8CE041B4A764F01 +Test: Verify +# +Message: 2131FE4F8178F61AE203639E7C519C47F84631A007BC331F0A7E29FB2DF20A3D606F5DC1DE6CDABD0D23AF9252A4004EF7EF8F02D1064AA21F2EFD588A5FB500A884145261C6DD9D473C69916651151C263A0615F244DFD3C61734C0B5BA7A3380257658B7ACC6B6D8174BB1B67779347E9DE751DF24E7BF21889B4D75CD6F76D5B54176169FFC284C113B0631F598547978EA604B28417D1C10AE9BC5E8E51A2D96DAE0E5E4F7F89F1F5A9E46B57E6780D42932B02A57029D743ED00B8F21DBF78B3D567071C2160340DEAEED174F4692309424BBBF543952AF341236AB671D4348F2FBDAAB643B4A8D72C1EFB3A0EBCFEAEDE7F2B39D30EB7AAE71D322C7FABB71B0F9E2F507A0E14CA845EE03B1FB596C6F6A75AD9EC317AC7667DD1831AA95A74E67AC5291BF565B8DE9DE92AD50F1D443A2696E84CF64DE9DD410374BFD8BFC2734D03DDD8BD60B93BAD420C4CDD8532BB9EA733D7D4AF7E4AF07DE768102143A224DBC1387258037E833E0E3E988D84E2D50B247B6BE56BF0ACAA1D6332BCF8DF9736A3E96BD2066BBF605F7A55EB50C16DFEBE487615B27309ED885B25CF63DD9222035279EF48ED649EAD8E04320405A0AAA75B2DC85196FD4E230AEA496FAF440CE0319C8D7BBD300352185BCFCBAC6E6FEF3D64C874A6DCFBAC9A1BEB2231E31FDE571F46B2202C5D159FB8F0634BE23AB603ED7DDA3F4D890C4232988CFB01B724DDFAF473CA75F472253A7817965DFC1B422610C0D17438444D4C8389DE2F0227653FEF764BCD4B37296640FA5549DFCEF497A261B884E7CBF7195929AA294E3BAE3AF5D68FA37081720542687E68F0F0F71F8BC4E9BD77696EBB05A8DADFAE1329FDBAB53804AB98F0DBBAB2B2B9939A6559F6C96FCA4F4896DBE2A7F7AC421C334C741933E49247A7AF139114C2848D2C028FEFA31A7873734F026D5751864D7F0597EFFAB2CD11447B8B31112F5CE57C8E33E12CCC56621BA30DD5963CCC511EF3D271BEDED47312802AE4AC842CEF0CCD84F0FCFA45157EFEB9C365A66FF3589A10FB8E2A16A4C978781541413A939831046F90BE936B034A13E2CCDC2050C230EE8AA36D456299769E67DC378CCDCFF3340D01EDE9E3248DA46BC3A2A51147ABA478B6A67F9A8D42C2846EF35ABEAFCF077BF933C0C9070B29D36EDF008B419167B01464F71B5753DAB953052E541F51DB48E4EA5115790386BB4508A400BE00989B8E06AB3B4F1516493EBCC3C5090CF418FE90FA8EF9786A0658D3F41F68B287CC6ACA7F83B1475BBA9A5A3A08500E94C42C52F9E0DF5C1EF65214CAD5687B2F1DCAE707EAE485948E601AF4F2243E48D6E7EE961C2F2BB548B090A1F96D2276DFF8CD90CFFF3A6C63FFAA4D54B914DA97AD341277A575CA27A95B31F11FD82F5A77241FD3BC66B655D9BA2F80DA720C395A57EC875944BDA84A8A887EB9181A9CB671B1F38F0CA626C8BA0F6408E3F3A884DC4D27EE52AEE4F9E62AF6B7F54B27FFAC3A2846E42CFBC3988A4FA10FB0685542B23018771AD96E1AB721129CA99CF42125AE736CBE2B8BDCD7FB982D895F43D154F037CB2C0D722842533F8712B76F0327EE44F1C8E8F378136AF74DC4B1AD127DAFFE9DB40EAFC92F14F1ED9C6950ED190864D5D19C9B54870E1FEE32E5A1541BCBA9494B735361A1F7AE962B106D743443C183627CB6DABCFB423B262986B6E86BCF25A49AAE72F27B94FAB6860A93351C81DDC88622500CA24CEABD3BBF5001E3922CFB489BB3D81D69BC75CB203E3948BC9CD2E6CB5EB2D214C31A75AD628BA298894A33F80DFA251346F120C7FB23566B37BCAA78B659814DA4046E8E9268CFFBF16A427A1C0A71C2EA38093203840B3600D4425A4F19189D425FEC9282C4A95C59D70B74FDC4FDC15139F5BE6E0A2CFC328FE265A1B87381CE97779F7103323053C9CAD593DC4E897C142B097A0782A89F459839801BB886F533F7546EF612BDEDA694427C1D5EEB14DB57BEEAD851280B3FBAF9A03B1A4200AE441165FFB54D126F4A6458CB03E507A9BA7E3C74C4B4234BAFE384BB03D46241723180E3A96FCBC76F35A86A5B60EF8F49E65D047009804B33A564366AF9BF0B9303E6CE0B9C049784916701FB848500567E0317406DA0417573CF9B5765773B2303CFF894623F4D7B07D743299AD4180FB4B0D6DF835597E4C3CB8ABFAA92D492D67E5025ECB84C01B402FC27BC4B70EBFAA7F6FB869FC4991940690770C81EF0F8C6F2B10F986F1F006EA631AB7E5CC2312C39223C17A9E7FF047432CF9E49196CF3BD90D9FA892D3B2BB857C970E5F75137F69760F907AA6F4E60325926A38CE8E601C3C54F87EC3ECC3E1469B9BD66B175245638852822E27EA121D819CBAE131D4DB0C4ECC80C40A843D31EA39D1E45CCA424480CF14D0B2B6E2D3942256F8B7ABF3493B7E9ADA2E3A0263FCCF97762157EABB674D16FA8F67ABD166A6CE8C95580404DF990C4DF9B3CA63B4E4681547DFBCD57C9CE98B61DEAEBAE4AB52DB2C1BA46771C5CA3F9D3BB61362EB01FC7909D419DD2E19A47C54B9811C44AE5E990521318DEEBC7CB823240F6818661727DCC311A7B20D9EE466A1A2FD57230006E066E1DF84467856B8976D0D63F71940835A8F9FF6C13C6B643B95FFB6F0356E66F5CEB545FB1519909FD357D6C56CD8E9A430EBE0EFF1BE5E6A4EA3F9C6850E7B3A8AB8C9C0975D1A5BB5F190311E58588375C02844B5E3C78C22C0F3E56A91350D5D0EADB014820AD31335FF69A4567FC351812D5E27AB6C3D02F10AE6EFABFEB0F4BAE366A0ED1EAEF1BD7779C66D0D070102EA1AB6735301C1EB433B6E8CFCE535A072F8D50EC95707DCC593E724A06FF71E5A4AF8D0DEDC42996854424377E82E8ECFABD853275EC609B242ACF8559F735FC88D2C61AB47103D098B4275E6BC3EB2FE295E948E8A0F3A3C5C8C705DA701F750924DCD043C5AA23436FB7925ACFFB2BCC32BFD0C140730133816CC7401A60D72788CDC6D6C7C9F65521EA1E258DCF8C37D720CCBAD1E10F9A52A03CFE91917EFFD5790C9D444A461052EB33F0E675392A5963AD4A2EA38D66CE92D1D64AE698A4F76D169F11E1F43527FBFC1E89BEBA608BA7A2D060CF269EC1A9E732335EDF30CDD0693DB181CB0BB55E94364715B698953047FF834746EA9CF2838035F718C2F428F151F9DDAB2A4FB9E24804C378659CAEE2644C875ECA6B93053D574D49019997FB27CFB9CCA2C7CE3D8AFCE340309622FED1C76DF9D5D9BB0517C2A0C707F8DFE0DCD409833D446C09612C8F947AB66C7EECD3A9103944D75C002CCD2636DD39B3C7E55DB155488B0DC0B1F4B5F355D8C9844163CBBC33AE9E9A7C514708B8F5C6CCF2D45D52067C5D61C244F8F0742B838EDDC36DAD77C734379E2836DAB3ED9087D166E2EBE03D4C8AB06C2803B9973983FFFBA623EBC8DD93F27F5EC0B90EDD708A0377DB16FE5AFFFA8B1EDCB0C94ACFB42D7E92772E00E0CA0EC81F4CB7D27A7645B04FA74C4F0F1B70B1848A207275E54FE4598200BC33B0BB6A8B4C3A163311F889D6C6AB7C72CDF9564ED8A44124E1342A70C61E29D5E7BAD448B5B993E9E175BCCA8DA54D4067F5C9086A8611A78D53CDE5D8874247C45221450BE45E3F365B8DB4BED5510AB424A21D795589BD8D81A6AD180ACAFE24371ECE0FEC5B73519DDC8DD36D5E14B584C6A0E333E3708506C32D95D8944F42208EBE50DE67CB2DE08AA140BE421E8C5F36E9BA8A2A51E1AB553BE361E72C083B16FA2B1C2F9EF3476888C36E0F7B985CA0698CD6470192EFBF10883C3DB531015747CF3E53FA2AD9655E23337F2B4A960BB0185321AA51830510E9F7B983EAC6C3D9AF156EFF5C539376ADE50887F34737AA279E1B6E44806C42C1D88B14EF2C973CADF6EEADDC0AC99FF5FEEF260FEE4D5468D5356494419B32C22C75539E47A48AD61AED3B3810FB849A1B487B22FAB84ADCD9563239933596B89270C9D9A9CEF2E4A740CD38375F97F42E863D80BCA9B27A04936CF1A1C5D23F77D8ED52A83986949F544A1D2C2BE70DE362CBF4E363A28F6DD76A9A4219EF33D3061777D4E9F064D419DCF44C3AF516B0BF9F8D1F86E24BB6536B8D92DAA311785A03784B3661F57B20FD30F2B4779A95533F2B45542E5A2512FC40005D65643C555F4 +Digest: 3F888EFDA75C02CFBF18A81C34079C03048D8D99B18E7224872369774DE214DB +Test: Verify +# +Message: C5565A46ABA675C7020C6C5351F3FC5313E2F7E7E86DE21F08A33D0C3912CF80D7A3F2EF7EBB499209E864F4462F3D7FA1833FC70CF46BAE13EBA7A91CEE73A62B8CB9D644454F60A60DB560ACAC7A92A04707446075CCB10D87C031D767A3B8D3608D976140440FEC1FF278C23F05AE34C97FC28E10AA5171E7F14C285671D56CCA587AA6BB19A4E96F164CD00348057A2C64B4514B5546BCEC929B168C395481589E42C860BDBF6BA5B927F11EB17E927568F7B1926F7F64D541FC85CA1F608C971A38FA3782E9ABDD6F3D654B3E6FAECB99B8EA6050820BB3816055714B284AA04B5AB44A98CD934EB0ED7E9371CD46D68A84A191943FCDB465D4240B76C0F3B176D2F0D6DAFFEBA163CA33169712AC997A822F9CDC595E370510F1DCDF20A0444AD1600A45EE1D6F1DE4EC0B78567D19476264203A0F238AD6E5E06D50E8D24C961F7BBE58C4157800C2EFF2FC10D22F74A71EC61A31EF3E702B3E6EC3A502FF54C623CC497E1557F75FB26D58A954015D2A645D8A05F343B3FB12BBF5D59E618B65022509639464093C1335A1BA73E84A59A6567FA66199890EA0563A5CBE24B6F3713BA20BAFC911B56D16A574EDEE6C9D4780C0D1DDF77B2A64F2F9096B6E7B379CA2079C45C4556EC94ACC6F94537CE9E3ADEA745989D7463EE2318D3F0D897D2BB0729EF7C6FD0F57EDA7B3C7C06F2E581A9C3EC86457750206E942A6E83055D94C21E7B28A69AB0767C1765572B1FFB87A087655E1D438230C3D9B844F6A0A33F844BE2EA550CB5805E2311CC1A05D6042ECCD7AB9601445E7437E6D39FC0B6A8913CA44CAE45C1B98D1005DF543AA0A3AF1DBABABACA7830ACE187C7889A9A307D6A79B1A61FB971BDD8778978E3D338CA93CD810C5C4BCFC011FA977C2EA24997E087F05EA5445D4A3497A67CFD3D3C3C0B2BBF12B6CD3BB6DA1209CAAD41616F3BB2A915BA39BBC4D3BBC73564AF962B309F560598F1F56EE407C8D3706DA67E4C049BD51A129D9C011D3AA680E012C1A84478FC681F6384E52E6D43595269546566DF4939546B741ABCD8ECFB2F599A6078B58D22D5958795C111B1F2C3384551CD790A2C085155DC2F232A58D5BF2E7AF00BE80776DA0AC71FE34C6C6B9544E4D0A84E497AADBAA438AAFE5BBBDD52F2DF099B8ED084E27BAD46036AE5EF401523935130F80FE17767B9E9DE9258AED826796544D1200F4B69A8850E432316849A261695264E90996AF17D9E62C6065EC40E314AA19BC49551266DE87F0361B895AACA58ACB510BBD53EC9D8CBFEF8E258ECA5EBEB8E31B14A95067EA388139113C489A68F0DC5CAD4D5C3FEAA68591090F6A253D30671B04623E51DB2EE2CB030D876C5375E2B85BAD0164D88368894655C6D78F59FDF6B6089CC6A50916D7640095E2D29E16E9EA61580120D92BE2B0A45372C3DDCDB158089EDA16283D752AD4B8683C6D4B58A1AAE45CD4BFAC2FF43C9505B0450A5AD1EC9ED6240686065D7B59682C6BDA01D9D76738A1A85F4BA9B8EAFF3B513493FBFAEB4CDA1559FCC8DD49CDF7580D3405E1848A15A02A257D273D8F97D8523CA96E5074838D7A2EB93FE58E45F1847312AA96A3886920DA55086C1966990EF4976B9FA8061C8F1CA78DEF8F3EAEAE269F6679DE1F95BEC487B3AF9C3C828DD8E0839447AF0575333FEE5F74983C368AD3D12F702BF70AA6781575366CDAEBE3C2D63C92BE7198D5DFDC03D0A5F15832591AD320FA9672252958D04E13AD1794BC46855035E210645C53F829046FE2489C89F9EBB5BB9757140CC4F04C860784838ADC8E89B2CE214ACC0A7F97A8F82236225DF58568676A0EF48CF3F8C2682022E1199376D8DDDB1AB1C6CAA79AA5D4332F0D42E1F1A507DC46E3361A1D7EDEA945CEDD3E4D66234A6F81DF262A5798A5BFD4041F88EB1D1256BA0D6B402AA6706A9EF0B20DB1EF8E1F825BEFA78FE175A496671C7EA0FB2876180CABEE4198FC34E5118F0B0750B2B2011A989BC28E5046DC10E0D90929CBD3C3CA24FB2DED096CD583C68838AF00A473829ECEE003761819BE54FDFF9CEA47FAEF0E3EF0ED13A6144A682463890C1874AE2ADF0E9B12F08E7F1CCFD36A6D9A91360A34D67CE924FE2CB613C863F9E8E4C6F2FBC3980598F95C2B4AD997DAC5A18C03E5FE2625563E1FA65C3D61988431E9D4CA9BA0B72510EA11BF472CEBB62746BBE4BC0718D122FAF9044E1821A014D91DCD92F9B815BCF69E30D2D2352F37DA0DDBD4657E0FFA55F04343170A7850FD6CC3BD3BD8F37B999C0324C0276BA0EA0177AED4FFC3BA2A140CB51D2D7B00399D7CB28A8EB89046757F6191167ACF57152CB770D988C7878BFD2123630BB88B4F5454A65199A769F1D0CFA507FA3DE851EC76415EF92B7E750EF8C171C05748AEDECC8EA83FE0AE3F44E28BDB598E07914A9E81B94A1FDCB046A4DD194FC626CD957E03947DF36DB44CD1C90C4933FEBF0B82C017C15208FA8005C831992F344D5D74953F03BDBCF7F35AB34B2BE6ED340B47875C77FAD1B8B3E7C1E423EF0C72B1E74C51ADAAB81AD6D1EEC9111764D857F41136AB1EAFAB8F06B37B5EB17DF7DAC89A5ADE11985954F5FD2C04F2506AFD12808E618D01BCD892EB8248AF45518ED80DAF805F7C5D969A33E50156184A4DB1623CB5CC7CD0AA5D5D672E63CC9C95FC2F146BC09FFC6348CEA285395E2BE6945BE84B062E07AA3ADA997ADDE04A2A264D958395FD9F41AB1E0BC1A039437F94F8BBAC16AF33CB6C09FA3303ACA73495C9CF57888A744747703610B4478577E545BB14970F6202D1F324429AD52D2CCF9202F1AF1AFD71A5C8BC96D6C1E7C564203836B9E9684F6E54B0D109FFDC22DD6CFAC8ED283809261F00693AC086EB027900E5B1597B7F1017A3426D8BD04659870998453D7EB07A4EFE73C39B9CB07C91B6E6A782107EF1D80B5FAD957C452DFB180DD4FDA9A691E99BC48E4E1396205CEE7059BA28337683048284FAC31C78D96F14B3A03DE0DEF2678D8F61AC011B14597C2996C5152142AC57E1AA5D5F4EA7AA62659FFD4F441B0D8828894866449A865E667AE7FEF6A8FBE70F9C2FAAB404DF9A6B1D72AE6343B8A5A3386F49F09446CE1B470408CAD3AFBB375AA5E4B0ABC54CBDF803192343FAB92AAB8F1568310F1169B04B97400D3BDB9FCC56FD0255931789B3EF5677502C2730E20ACD9D1A287705AA2FF31A7CF51E4EA3635275AB54F8C11C5EEC27EDF3450438DFAF469F34BF8C07F50EE48DEA693C5B1C94127D3E6B7D0ED29EB7B05404D40F92727FF1D94252B0E8D5348C6301E290203BC55F1B9566F95EAB8767D98C440E5B271EE5ACF821730DAE22D8E7BC8C69E7D38883099E5D306D538CD577EBE02EA90AEF56FCFE2B8603B398328F160D48AEC319239EFA40C79B9B0CEFB15D761BB832081B332E6FF153D2DD3CDB93AC869296096EAF479107A8F5DD197A3FE5747CA67647A2EE9F77C742F38C8F0646519358E45E51273D89EA70E0A09CCB665A0DF9141D5B543841BB00156E7FD0522878EC78ECDAA775703A1981823D5C91AD634EFB611B68FBB1A5647645193F02833EBBBB7A7A76D217E02B4A2E852313135C9DECDD9C28C1B7245A98D3CD800172427725659FAFAF903A0DA07F35994F178530A5ADA4514E6B18933417887FB28285B16BCC11035C6888B1178FF0913E7A7B37E7BF87F86F80CD70EB735CC34A688B757CE1318D99935600CA68E178C76221A9CF090382FB3E180709A5209E057E38441643C3688153FE5024062674621ABB43F16C2FF75BFB477C50DDA05D3EE243813601526BFA17A5916E3A3CDEF0930A10265418492BFA6435906CFA07B37B0C53E1A4E9166A076A52861738909C1D203091D04F910BACA8B743D4C36BDAA27DDFA864A20F88D2E304D940AA39C10A079C7AA47745BE1CAD4DBAF86419FCDCD1D8B49A3DEF17ACCCDFFD5E0CB3164409731EC8B61C82F0459A48122525E0A7A64FE46FDFF4B551CF4736171CE2399DE8C658627D28029DEC53AD4F89C56AE177C4438230C2AE03EB53EEAD83E7027416B54004F95C00EA7DE3E3269BA5394E912953C3F0C4D104611DE91230B4D6895807AD634EE34539C035F2E83BE83EE10AE4BB5508F596D42E8FA7124FDE827CE64D31A9AA676EC81CF1EB976BE63F5ED59B67088E54ED725EA24294AB957A0AB4BB47F7BADA4A6AB4B1C57B590C1269836865485F58FA3E8918E9F3171BEE0765C374D87C9AF5F1568BD4436A5A +Digest: C726A1CD5642B5E7016A2125E0113EB13E6D72462FB115788636A0F094BBEFD6 +Test: Verify +# +Message: A918E8CA6DA3D995FC933A5ADD79D0995FC3DFF309D46B44923D3FFAE355EAE2BF7331832B2F87FEB556306D067B84EFB4D60AFFBB1E7E54DFBF7E8E23BC5CD9F3860187DC0837BBA4555FE5B4478CE7A4280A1C7BFB0D0ABF5A30FC16969C86656EAA73A863FF521D30113874B4E5A7E86917B41E4BDFD460C7824D670E0358B986126C5E6EF35EA034FFB757A0C01D5F50B667C6D5A977E43DA8EB9DE8B3698E4C8C68B3A48D287490F2207F7B6C3145CF4422CA6DE8C04EBA3D4DCF55B9246EAF27D598F45A9B0D2CC2CF6B551CC95333A8AD5BFBC374F15FB2F7611F6678A285F84D04A47767430A3A4320618A14F73CC1EAADEC5F73B1B558F022BBD02496CCBC556F46E11BC7CE11308AF1BB8982AC3AC04A4085FC5584AE83C86718C5597D284A5E151E82281DC6BBEB14BBD30A07384D12320357D19B57DC55A271D95FC368A52886EF738E98CEC96052B7C7B8AC0C81594E2A62356009279122B6916B7B477891733DC8DED95BFE1FA4D558C2090DF6F54FBC09E514D74295C50A9A57FC332281FB388455933DB15F3D32F3EB1FB360E2C7AE408C458258FA71D05857280D9BED4729BAE805C60E2ED066E2CC512A10E42C495671BC0B9A857358DE25F6429B0857CD488C8E7DD7002D79CCAC267DA52985BC2B8B3E7538BD935555397CCFF7A9CCBA62B21138305F004470ACFAECC02C33C96AB5F40697332CEAD085D95464A6594E4233A90BCF89D575A58E4BEB32162F8D8027D9C0F895CEB15623D0144DC6C9F70F70E85EDF71E561C3F5485DFDD2B6E5F0313CE55435D21E63C859D6551F56F771763DFB26DE2CF396BB807034D0ACD11A284C2EBB0CE786FB3D8B39451A4464947672B081711FE215C562B082317E2BBE4E1EF2997BF21EB90D71FDE4999D083A9C777EB65C5FF8D908AD5432C266F356FE8AFC92F3EC8FC4382238A163D06C1218F8F9FAEAF5E79EE0B57B738EFAC8FE3D2AE26E94F8C998D4B8388F460A8007341631C461B352B74238651F64C711637F8405960C7CDD459DA7E30115C2DE158B10842040E6C21FFF81D2947059849142F8AA696FB845D780D7276E157681E2DE0C997D41A6EE862F642AA0494C872842E2C161C6CB3D2428377677932111AD7548D1FD5764DD6AE4FCEB78B8D42982153A08AAE7EB79AEFA88158774ECC73DB5FD543DD977A382A9406EC82ABBCD49054EB2C6AD80F21B0DC1B835D285602E7A66B1E073198822E60429C89D80AE49BA5F6EAFFEF7FC75070F56405BF7A8E2DBDAEF87CFA4789C771EC81BB5023A70960447618A7870185FB07DC1B8F418FF29DC5510E45B80AC0A2429548890A464572C03B7189783996FDB83A89D63FD19EB445136A46FC59C694031F89F4BC93B0335CDCA02C6DCE9C4A0997F7C158876A8BC5DA6186904AA6E26771A3BDCEC1CA9DF17DF8F90731B786D8E2445408E117D1C7FDF33A9036779B8C0433DDFBDB8D158B571BB9B58AB70EA82E1A3F2A9DB0CD102B67096A2306FC539BB4DEE6C4D06ECC99DA51EE5472EAF53349688DF28264C62273CE1397D89C6DECEFD11405F21F888FFD0C1FC5226D401CA3F64A3CD3C710F56EE53A44E2BF4AA929DF6E0C9FF93B704561B541561EA96DDFACF6A21386A0A86525F8D3FCBB178073E4241AB35E5DE1CA71ECD5EC56D5822A32C4B2E38775EDBB649FED10B917C4339219815BED0C1EDAA4564428D7585F509198656C8EEF7739AC9602EDF07DA1F50C1F1069F095171036C2AA85C087667074F177709721AA5FFF49E54BA4AB2A0BA1CBFE40D64AFD4AC707429A9779DEDAE596AA1AAD6090A58DC56424CF48566500CA10D0B7E06A20F6EED7C342A641D8E9C1CFAB1BB850A3942755168CC4E07E076BD41F6D8BDB175809935CF91F7C0F810FADB3152D880B4E9182FC870D371291A98D580732451E0CB145A79C0DBE915D2EE12D93DD4CE377ABA66A6404639C82603FC1CF39BCF10EF314CC4F5D65852C1FB5C50F85C743C08462064D490B4916D43D7F43F9694085D3A661FB4A9B7483CAE13AE9F5A0269B88A5A6C52B08ADE889AEE89D3F612952152283EE55E4624A652523827C5FCB43EB23B65915F5FD636CB73E2640EFEEF78476E7F6265CA6DC1724D77D4E3D4BB4B40FC205FAFB10DB7821672E80AF7D73B23EA857E9C9B7B36309ABE81AAA6FCD6492ADECC07B33361724DD958095F8BB52B3DE5D74B15AF888E4B7EB535D59D0E2400804E769B8EAA19C3FC6651ADF4CD86F80202F42EEA3AE7AE59BB3E5EEB34F3AACE39C9D56E97E0D0ECCF415706A2B152B8CC61C6E23481214F74717635552EA5E7260FB76A34BF70EAA76BE17A8B9458A0D3F3B5F1332DF5D62558E5B23E14EDFFD402BE761BB02034860DC617C608F8B5FA6E59FDF552C3E1897889A3606FB184CAE4CE90662942F2628748FB0F04F5CD5DF5F100065559A160C5C9E8746E12796ADDCC6F7472D7A931941E9A746C4DCD2C50C30BDE339C603532DAA543F4D55B4BB134B045D247357DA718BCC2061BE7F018D85787A72B869A80E7EFEBBBE0723D11E4702F32FD51ECD63464920037384F070CF31B5EAB0F45B50323C4C7D164F28FF55FCDADAA1C526B5ABA426758B3F8A1ABA5346BF3F628318D03AEC8129F313A6AC1C1B3891B4ACB61A96DE27C4A1625F1739E2777A0755FD5C03226F8FEFD65C7DAFAFFA4FD5C9544E4151FF16DA579C77FAEAA61A404816C0F85A6C2BE49D213B2E36C88A442241BD692561C0EE638B83F3478D0CC9008689D6AD50509CC878980C408B10E09D2B22A1C8B9CDC67C8C5E1F6A0082618E31B2F1D32C2A91271B43B27CD7421D44D649A40A8BB2DDA9496C2495CFD7FF00D8A12D3AB32CED5BC73BA8C2E31687CEF01209EB15AFE0B669786CCCD7EF7A355BD86B58C6480C68521EA24CEBE36D00AB20A19D9AFC7AFFB9ACC5C3B4FA8E25CDC08BB299DCEAE6A5208EF7147CA5D6F19B62BAB2C704C387171D2C9335817FBB4C1921CA163C611544CBCD14995EAC21C417B755F47BFBED4505EA509A9A4AB3835BC08731324800D4A81C4E1DA5DCBF5C7F28A1BAB0F9B5EEFA8C8B4E095DADE993A76DC9DB3DE0B3C75E58C6584FFF85991ACEDF4919CAC0E4D61ECD2744B588F2B0F7CDC6FC39AB4E3106B06B7D233FEBD79D522C7437A97CEA0FC832F5C6580883CF6EEA72B09D8E4CEE54DBBE11DF6125AA1CA0324260154EFC1BE4356E60F80180D4804334FD8D711C19D9175914DD4868173E0AAF19D29BD5F28008BD44F2029C644E37E5F708A0001EE179A897F18C2855CB25CD758BEA99F2602F91BE2F7EB2BB04553EE3879AF16BDAFEAC8129FEBBB55831575DCA7F91B981EBCBA5D06933E21B0A465606FD6439A9B8BCC825CF707A2DA511993F5C96CF1107EA1ECA6D83A79DAF39FDC502CE950D6BD4815CDB738320485384874415D609849DB57F697AEE682B586043D4025934273475F37C0F532CE865BFA78EFFF2CD63F43F5899474D45A4FA960ECACB85607345ED762770C75D9292438A11C2F83DD2D483502ECC311BA86A85A9CCB9CFEE63A3E58667E43F74A1520B04C8794D036131B8A72F52A371F6CE52F4493A7A93DFAC8D9DC118805C4B8A26A6C2FE167770CFAE57C72811EFEE28D30755A2174F01AE3B6D2D733CFE8A848A12B3F186F9C3DF74950C5F8913D76F38A7400A5FEE752FB5CE25DC5A7713C7BF72EC942B5A58D88A23E8F10CE6B539DDF0AA0EDD4097068AA73289B914CBF1F445EAD42894EFD5B5CC2D61198B85D3EF582098B589BE1F39693048240BECA4305A108954ABF09FB32DEB1C4BBC982E709886BD5BAD8B64A0B8BE3D2FC8F7EB1085AADD059506BDB2D0F85245D9C0BADA78C3F7F0B99B10E778FA88A0653657106191EAE2BC66D7D2C44987D64D82BC3B297CA7767BD427388C7AF64CD25418010211DB7DA8AE5A82632B2C8A158CB2AB4D166EB62F34CC238E2C2332236E46030F716222809675790081F952036B8C87BA9288976C5E72E48483A70CE299E4C6EFA37262EDF2566B898444EEE431534EAFE9DFA257A7DCB652BDB197E3EAE4340CE487070976111F4771437B7B59A2C139DFE8C64BFC7A849FE1B87389F258C217E6D8CCC132878A4E65D854D897525075570E1222461F90207F27F1175B8274E47F3ECB2A4DD0B6734B3969CC022E66B9EB45081FFA408AD00296EDC8B2193BF4635FD8D12E880A7341CC7B5F913664F8BF5E893D6FB7B9ABCDA1A33CCC883C0F8ABEFE454CF7D85E2C97B0AD25C130C69D1DCC03A8D2F633AD6435EF425B073B2C2 +Digest: CB0EE8DFE0402D9114B1A34AECAC85DE7F7FA59C3AC69B067242C3F4FB26FB70 +Test: Verify +# +Message: 1325D82F0CC32FAD2C54F958CE9CB7FA24B0D68AA1A43F7BFBF78C09EB9834015ACDA50DF8A3DD3560A0930E4A7D27C5E464C539CD1F3C147D4E3FDF9EB04CEF9456F0F261786990802BF2896CF95962E533F9BF6C2077121E44E48EB7893B5617B44DC3429A43DF8D7D4964D800FC4090CE83C9219ABA6A64BFF04DF15BAA56686CD1AEDF39FEF78E3B1DA3E6B09DC7F64D05A16C4813DA3DC405FF47C0729CED71AA4396AB59E19344776D9B697C1E53C6B2D437027A8847DC1F381723249799ABF3B677F9A7682C48A5ABE0ACCFFCFD6352C2873A4C75A0829DD4A964CB631C8EE0BD2B68E5D84B2D57683D211F7F3D4F2D6CAF77A9D3CAACA634A72D3DDE81143A2CAF243FAAED2F2BA790A0FB6E25BD545041BE8BA3C7B86E6692198C6A449F8F3EA69A28144C2798393C2D0ACAD4BBBE541D1CB97AEC0123F73DBD4A55037677CD31A72E303F5FAB8EC9E433110D028081B75724DD960482AA72D83E3D41BE7A9133855B589DBED245BCA0D93B762F119C8A97037A2435BE5CB0F055D854D63DFAD5DC06C4A18A67DA016E0EB9EAC79B1D1519732EA99637A65231900159D75E599CC1D7E73E63D71C3589A9FC555EA1E53F9E89654D1183C18CF94164EE5818D603BE5355D6CB1A7301E10368580749883326AFAB7970E3EBD063662ABEFB3557BF663F510CDD27A42A26455393F78A4AF15A53DD6230BF9882DAC42ED7E26D7DB7970E4E315D2E78628D8DFA01D7A77865384A2B23F65C50A77DD53DEF72C8D32483D2E511153C00FB52595B52BDE4D40D3ACE1A5E9619BCA87A5537E817574F40115BD4C3A326953F6E11218B27EB8D725B7376DEBFE51B9F72E912B6AD403097554C8EADAB18AA4AF338A8B97F773B15BCA0D653DA50B1FF00B26D330AB5DB1CA07F11259B09E5713A16B9D4053DD293831FCC851BFF44BBE11297B8B04E5896990EE099BFB85667EB33A8B55C0106CA3DF4DCB36CC5DACC0BC1512D48B9F80A3FA957FCD396DC08D5FB81C25905D2B1D24CC5A1076D7A438E2B589474DB67774561EAC7460BC29F5DF48B89584A0C510F1ADEF889EF62C0E2482038751E177E205758574F490B84B9C91ECF73042D7D1FAA55A157A672F0F984137C4951E5FB5A0FA123820509D732978F0BA054ED9E8BF9293E6C6204533A39824C48EE9A233F7F8285BCFF23391A806F0259D5EFC09EE2EF7400E163F61C694EA2DE11CD816152E3C7039BCCCE0903241605C89F7B5ACD49C1DB80A406BD6E4837D0586A3D6117B9E6D8E7A00EB3B87056F0C1DB34059B24064CEC6CB65A8F9788997E301C53974043D915EB01510B7EED112CB542C00399D13555F490B1BAEC346F3D6DF2553CD5D53EE7EF5A5779EA59F5029B984305DD694043DD8BD829202A6A71B42A871BA52B16E2FB231129D8E5C83F9347903DDB56600A26FD9A91AD0AA16675F6E347EC8BAD2C7A3BC0D0C83AF43B78F2293C254781EB708B3F9917E3F8D24B2B78ECF5C2973718E1F745D7E46AC316F44DEF05E0C13A059547A4929D8760B9A02F3E906E7C28552A7C47F58A3F82FC19B74751207695514F8FB481240DCA30CAD99B8C8D814AC9964DAA526A3AEEBD60679CF5330C4F39962408AA5FF4CA6B6A24E52BF1F633BEEEA7EA9A8B7949C2674FAAE8949674CFFAADB16986EA1D658E1D624E5541255184920BDB01199ACC559B66935BB128C789C030869BCD0D308CB1E8094AB99880C283BE7E6625D7CBB79C4D5B7989A5C62D7861AC9334108CBFC28D5BE71535FB9B9CE9BF1888EF92876BED46B69CEE868C298C3E34969BB69CC768DDE7B727EC23DE7B813D7FB13499BB1DCD20D6FD46F2F781F777D5D9B3032E95010631EEF584EA56AD18A5EBC8D1B59C9421DED691DB9AA2019A18FB93F625FD783EF47F139BBFAD9921746C714219DA1F12BA86F964777FC3B0C6775C26EEACBA7B088374ED83894BF5C435638E982F2E982CD2390F5E46EAFA5FF08224B3AE20E448190E6184C51CB3605F2FF4DE9E62F769EA7AAC5D07B45E22FF87F8F46391D9C5033E10D653C4E3043E019BCC4248688C506CD9E6B17C29F5DC0CBB774898DF30EF982F5CF8F79941A7A5C5018FC6E1D3A221449F7CBC90FED88209A79013C90BDD2BCB14F2D12E92BBDA7E7E1BF121C0F4E475212856AAC5960F0123157D1AE401C3078084D53F4708749AF36B2CE0B28F101E1F68AE21AF521364C93EFF51D42B33575503725EC3124E76DA1EF8382A45CFD160F9B3A6BA984E6538EC4F82BE887A7AD52631A6E9C184A77421FE6883B686C5E2482ACC28771AA6F4065EB94093AB4FA25C721C3ACFC66BBFAC492A06BF32787E8AED8E6851ECEFC142881BD6AD86BC87A4285FE673CE874424D6D71A82F006E0E42C622AA69B654EF908195EC1D053B2A3C12E054AAC1E767368013779D55DCADE66E36AFE1C5BE0132929DCE8BF4D2A4B5AAED4CB5A9837C9FBD6AE21B66E263590FCBD1504BF0A555EA8D45C0F6B0408B2DAA3FCB8A58080F15F66F7139DAEE981539BF262DC3903CEEB4013CDD6A6B7E5BA2DAF01040A5E2DD8DE0C860E5248EC1A2C3EAE15979AE743453651E2A7A02E81148727F1841975363ACE6BB895BDE904464521F9795944FE8843419BCE7E47CBF7E6B9FC1FE69B00EEE8515C265AFD19DD5ABB531D5A79015ACDD527DC864EF441B7C74483990CFFB3B3222E0C890CCBB053DBFA1A277D2EA3B21F620849311996A080A8F1E855A530CBE64677436F787A70E6D41021DA82C808DFA7C9664B6DFF0A3974C90D4DFE523A2D88EEEB292BC29B6965463D2242A45FA91511FAD9C9AD56317FD82A2F82ADAC92535EB05880ECE4AB24A9DD8030BCB7B33F4991B1EB427EFDF9FEAB2AF01F3FCCD205A8F497C14A04F23B46570E9E4810E0DD4DF0734AA61004862A653AECCE21B428F67970438DFCA504CBA5EB4E362CDAFD8F7281412D2C4FF0BFCDC7C6133F8B3BF82F8D5CE61AC0E4F8B48FD22566C24D4174A1F86964964300CDC55BDDFD7203B1102D0FD888F31C7E599A11FF5F113019A6491D5A1DC2564735C80468549E032AC89D4B1CCB1B02D3C6DC7F030B324CA6959628DF43852267DFE4982CD78EC0CF76B3AECB8312F8FFE2A5863B477DC285853303B55406DD27B2454368DAF1D09EF6962CEDAA069A41B7F7736247517AA7B36D5C9D20E5E60C689249EEB1CC980E6BD64EA1A88BECAB1565B919CE28F8EEE0F02592B6FFFAB4078933418E92BAF370D799614E39EAB03D0759DB1E03CBAC9BB7C39398631D5C62F1866FB297EB9042DBCB523B0EA0E95D28CDC97AD9E5D985D10CF50BC5872E23FA34F31B90CB1F8F9844C8C82FAF704B01BA906C9B26DDF2D0F4381E8F7472B978F602F9F2E7E88155496A8DC6CFF23ECB7C7609E93E8660AD110A2238995558F38ED6A07FBB8B1ED2F8C6907772821803989EB50CAB7D68342F40D138BAFD72B816CE1B2518C48D11802A45479D8302618629EB1AE0E24717E934989E946B449BB105CBFB0AD4DA58E473AA7C09CFE9DE00D2B20A42886D92FC39C04AF3E673CA9C8901536DFE99C1A5FA19E382A1E1C259C05C0028CC54467F26BB11CADC515853B5B24859DA34F54A7EA3F94FD7EAA03B215643307F8A745AFBEEF70D21F8D78B72C8BD8711BA1F8C5E71F8CF59869A5BACB3A56857153A2DC0D0664F84C89AC94EBC0DF22DECB62E354B531775F5A8474FD5FA6CFE9AAE05281D3A704A64C265F0E4C42C50E0F0A241B3D3A343CA9874DAE5D7A16A94CD1D880400A1645F4F4E34F1D3E1DB07A74790785C82AD2471583668526FB12F49FF4F4F3E7ABB06A9868A49CCB5B86A23A78A68285B9809FFD34037D31110D2FA71231DADC3A0D5D505BC546335016A01EE4C2CED18A2B0CEC98E7D9466F0B271D5BD569C383942C4914EB7258ED389CF066AF0607BF41AB59972CBA2301B40284C8014175E1C829A1CC2D0E7DBBC2609BB754973EBD12358BD2E50B39CC0E92D5A33145C480505AFF3EFA0CD6FFE2D2E517A748594683026D860A6723AC61D5E1CC91A3CCC839D33C37ED9064F7BFE593F523296D357E762F9948E369889BAC4EDA01E8C27644E0E08D057D371AE7EEE6847EBB99ED2D0DDCEA63063D01CD6F56DB31911E4065EEADAAF232CC6899AD9ABF5BE383CD0C5707B062CA47C6FA42ED4FE92B37D093F5200ADE891A3CE110A105FE4EA0D0F5F754A4ACE34B4EA113CD48B4CE40D010988C04B4DC4A7FE94DF90222F50CF993542F33CF28E4723CB40658F9BBF8480E0560F17CEA5629E149FE638ADC9B99D09827E142B1FB4831125686A904DC8A80E9F96A3A4490AC3 +Digest: 3D77027F6277596C94EA22309847D15BB8678C190338F90D6E5662538F086350 +Test: Verify +# +Message: 6E6E3CB2044A4B3D0E1939C3E56C125EF2AEB258B290221C6C2949D9696E8BD0E6BB7C426CC4A4F714AAEAEF98EE10AE204CB3DDF00F2B4C4D9624CA982A5B3557D30BF701722E301103C48EFD811E004F7F3B003DB3B57A1673DF9667A90665CC615DE1289E6BF2F1BE88A320B30ADBEF07243D0D4A5118F203020C936064CF9B741E72CBA8186B2CC7A8791EE30BCB0DD9EEEFBB018775E3230ABF76CB448724ACD1E21B7DBAF29BC927F18C3BF84DA1C051DA4F01AEDBB1A760A47C913B67098DEC24A9C465D2809920E43016CE5EE9F7368AD395F2C81E5440FC80B7915A0434F59BA4907E7E653492831DFB41D42E78F35F87B1B0E991CBC52A3641E3E519C94DA1A49774DEB99974748750FC6D44994DEC08BB822AF257784AA5F75676C5B6B42F4F7574449D63CED198681F59AA02DE0EBE217A4FA67EB8344FCBE06F609BD6E049DE77DDA1F19C7860687B08C09ABA586C03EB03E3B4DB53B371D22DADF6D34667DC74C40414040B830ADC24B99EAB935B6D30636FFC16AC9EC1EFA27A2E5BE63AA0821B43A77860C9908203C9F2680E4543D44BEEBAA12241932DD183749AED6ECDC623A0BB9EB998DF8AF665358465137AFDF52546923DA0C044B4912355016A4D8B455210A7DA814E4F4027238C62C72435A55892CC2E24305007911999B12A9ECB716C8A33BE31BAEA413D03B1F0968FAB072167A5C0EA66369E81BBC59532660247D1B131843AA899AEC152B721F84FA80D8475AA35F9051A79BD9BF08662903C781AB811D5723DAAD3E446EF7DABAEC02A26C5F97D2F5DC6D0FA3F0798476A2C033E444331683AB1FFD7E2BA8E6B5BCC1D79DD805EBDD8C2693E82D24C18CAC6F791151CFB816EDEEF036AD0AA2E8A8F70E935F8CFECD4D7042A6A281649A36DF69B1F7F21324A093DD827B605F1099C2C64AF06DE0D407BBEA53F66FA9A7D0C3F77FA7A30BB89E9DF0D8580CDCE1B34C1F0C9BDA1F30E90E01E165002819AC01E78463CA2204BC25C6E8C25217CC310DFD33FEE46C9C94F938AA9CBBEBFA46DAC1216CAE5BE48E26BAF348964FFF4F6EFB022AAAE13E078ECD51AB7AEC4718F3BD2B62125BA48C7F977F0CCB243E2983C8ACAC35A672C100EA6611C160A93CA52AF19065252E3C4D7E6118FACA3CF553866AC4064C26CAE703D69B4236BB36F8F51136E2D4A4B6688B9788B0BD3D21E6AE6E5C177D5AFFECA51A18E11498C3D0816058184DE37D0835BB851A62258CF68A7E02A79BFA4FBA23B680C0E8F3712C2C62A60C9A000DE02E639303E4F5FD5EFBB083B9585C088FB197592D677BC230B0E6974FA492C089926E71C465D1C0A53161D84515005A5CBDCA19F5EB66C1B0E6393310A7717682B38308940E4FB53F1AE8785778513388DE4A828523F880B957184713E89AC9C49A49518035AE620FF93F8E070170EC26F1E56199E124E58844D57E70D3BF691D3542BA0F37EA611DA30C966FEC0E7D46B355CEA55DF5DFABAE4D83FD786355D35E3369AACB3D0810F67D99E1309EC47FDAD55E7C1C0E17CA5379B1686F3F33874E937AB2D97CB92817B9E988E592AE592C3DFA20CC7052D0427135A7191A7D009415F57D53225294953CF94AD5FE9F1DFBC03525098FB1A6BF2F65C70BC1C7A7D0B69D17BA5C8B7EA1CFED96CE0647C9F58A44D88D8B93AB432C1B339172845DC9F352B505576D108086F0C8494D616645B0DBFA69B93C819339AE135D238C9786816574DF0D0A1C70231ECAAB1E0AACBA5D1DFF654AD7F9A1906585C5BB491EF3C957A563F135EAF8430C6B08DB6895C2C5D4CD235ED7F9104789B948B53E8ED533269D724AD96703E928A3BCF9CBB929AC5A0F4625684BD21E20FAA45A3F0E66795A5C796660102F9FDFCAE834EF9635A0D35193654B35E30EB1ECA7CAE59CD647673B1FF31F47F84BA73AE5125046448D8B2A702A1A9BA4455FB791BAC7A34536C0319496FC9162312B06AD2121B39DBA933BA76CF14B26803CD23272F41755DD48FD5F3E19C2866113025604D9D380EE1D431CBA7A9A46072CF612CC7970498BC77BFA8230A0AE9A5226DF4D60AC88533C84B3DA60C179A56CB9C3345B195E3AA5D555501FA3612A883E1A119E91AD117676632E2731272011EA827F4423D0E47349DAF887D6E0C99FBD4A003B19143327FCC58F4F8C4E00E240EA00E2C3EC32DE747369EB2EA09F29A1A83C742579AC9C6F01A63F012F7869F77A8244D41712F4794976A4D4F31CD3AE020126A8940B18D112CE50FA0A69188628BBDCDA60CC5B450A880A1E4CD557256A2488206087D10B25E34D7F7F9B8C07F080B328A86C9615A9CF69CC30E731320F1FEE2BFDA226997125423CA0DC5ED0634765E9B84633AF063EA1166A45D9B43E896FE532D7F0912CAE6678E76112F268E4196A72CDFF93866231F831C0EA2750D5E22F86CD3659EC0C6D2E4C9FBA96ACE548E1CCBDB19DE7C7C4DF42E119F49CF6E0C92C59A482B39BE7C1A341EBDD2F880AFCB3F13EAF98AD6BADEE8803BC3ADFDAA1CECEB1CC5D1BA7D0CAD981E58928EC727570EDB88F93238468CAF7BFF7961FFE1905A11C0FA7DD24FD0E87F09D51F269B0A8A705A4CDAD1C6E943ED3CBED03DF034FBF7D09FFA5D66C1C380D1737586852B746259AD8283C2A9E3953E886B77E402FFD9B61E4CAC73D9A40423EE0BB8BC81FEEBD3174B0020E7570140A3BA83BD3768BCC3EC590950F647A66976559E6C6760A9E9531959B17835AAD085E174ED683769A3D3DC8CB33D68E0FD2B948AB1D485EEBA97C02F5AB1FD90DA3EF975BE4824D192F6A7CBBC8280AD546E82C0CA581088BE8ECC095B18118ABCFBC77C28368E639CB36BDB56C47602C8E06C6AF5D5BF16BFEF056115D9CB408C27BA92D96CDA61BE99C117D919C174AE61A12C8D47E6737723107A3264C46CEA0C3F5E981B3B38F80DE0A0B7F72B12A216DB5E79BC499AD912C91AB6350F0897EDC410E2E6375DD0E8D1564AEE1722FCDB552977F2C628F9D69F53C9269267C216D2FCEDCC8DC83B91B653E2E3DE04C75FAEE0F4DDE0CCC3F861B834A8C11F8F1F36387E07DABEABB914CCC46301A8E9AC4F7041F896CC02563C004ACDE01EBBF5DBF1E610DCA9EAD451C4A2DD1F75B2F080EDEC9B079ED653E472287BBDA6DA706A0B891FEB56E72281592B53DAE74957DBE4E3F54EDA42C9D5B309DF05ACFBEBDB659F6D4BFC15D72BF9B38578C25DF75892BE7872EF0F1EA7E65C9713B987103412DB01B1C5FA89E3F68564342E7EC2E4C4AD3B241DECF2EDCC39B039B74BF0B0EA9177940C79EC8AF48078DDDE0209E780B41CAD9615B692775C357D3D02FB520B80B209D5DFBFD5D0021E81867CF6C3D5324853D02C268266BB22BD1EF4C5FDFAAEE7963A243E2BCE3560F03C0D5A68F504408102B5361EFB1F92043EDE9BBDC568ABF596412DABECBAE53E9B492D6073C21D083836780C3EAF4432E5DBBE35E18A94EB92F4E04219E857E5B9691B3EE56B186F901406278E64BC626A68A51D00942CCB5E66CD1AB7F9CEF57FB7114C807A275D6588812A750362C770F1BA3D784515643272B58E4A84F981DF9D158CAC679A44985EE772C504AA42C9700D01331B2B8DB0AADC0199AEE52CA8B1AB6871888F9A2395D8BA7073D59727FF6DE99769AA1FCEE507A05D13AA8897F6A6F6A4BD2CA8825D866C94749951E695D4CBFBEFC44388607878BB56000A0EEECE881EEB756135C2373C124F9CF4B841D37E8770B830608AF6431AD303C34F125258A616B5946550FCC0C05B6495FD8D5E4D74A2A4BCB06649AEB907B89564226426E02FBDC35C50CB0D84A8F89D8F1744CF9370CB01D62F9F28BB04B013844BDC1EBA1BF98F51B92C7D960191A1371FA9B6929E8A5B27EDF1A51F78F772586CA7F34DD66F48FDC7FCBC104DF6BFFF8C395284BD176C15512F2E0E97269503A26DC31A113EED538E8F0E2F70FF9ED60B14988CF89674C7ED1B890280D40DCF7AECA4EC43F0A9F664FB97AEA489261947C055DB99A6625A6D6A03A79EDE46AECB1CA9C649CC3DB40609C316552FB122A6269F3DDACFE94B207B6BC4626975876B22785A73F23503631BF0F53001021347D3B48891148D27569A50788A6FFBC5D5DCAAF9857F784865B2DA1C8034D204D9704468E37E7691ED4DC4A2F0EB80324F7AA5F8C6AB86F48ACA238F58137E6E93A064F6BE272CFD5040320B13E6B8084C5E0783182B73FED4F81127E24883F6C622D3A521A1DB4A1FD267B00EF7CD92C467201FDC4479F47EA836EFF3CC1F395E4B1B742204D7F899D45CD9F46844A2D79CBAD9677726BFECE5F10FF585DCBAA20DB4D3E7 +Digest: 0C1EFBDE15AD49767BABDC7EE82FA09E90B7DF63558E2528DC58936B68BD433A +Test: Verify +# +Message: 7DC0DA012F2D8D9CBB0A701A1561BA7681E41238C81DA33B021AAE39CB8901F3DA42155431833DC6AE1A1FBA884BE37F4E1D64477473342F6A88DDE793CA56587F41890CCF99405250E7C0C89484436FC4F59A1418F73E42A1C8DCE9A51C46F59DEE2EFF760D5884F8E197EE7E2C6737E11C593535E1BD4DDA3A766F47C6AFB2CEB96CD9871B38DBEE8FC869AFD0BC6CE0857A2CBA2C94E7FC12B99D67B8914BD74C721C077C9E8353F53A7D5BF625E097802A149684F58E4BEB790784358263FBDB8B2F8FFDCB862B57DD7415753A7624C810B34841D4C5FEA3C676C4AA1F1EEE139167327CB63230A983507BA9B521FC2B286AE2A2DD179F54C073C5AB0E9DF210824199CECD1263366CD4C421476273602D8A34D0EA8C158C9933F9241ECE90EC3719EA30F33261701933B6FE2919E1C22F6DE8C736D99FC640C88B5E8D0324E6E91EB50DAA708F6916872E17385ABEA1A32C2B08BB5741741CA27F1DFE2D21A3E3FC79DDADE719D73FE99E085B7B6CFDA7B18A20762CDA9ED6F29A535AB99ECC03C62A001F9AD254109DFBE5ADB966B529A31138B5E7A076B940F4C1A10C8AFB43C833875290568DD06F489E9EF75EF0DB9C263067BC5CA8C2EC7B9B7BD6AD51026C11B1542EE38B143794666AEFCDE0B5DF74C12D600827CE9475E8ABB5DA921A5D10CF3D5BCE7768D5219DB733BC0825E773903588A0DAB6C82E3B17E2B0D7D64E039FF4553642248DD4628E0B9DAC5C1F8F94160AFC2327063FC31DBA33505E21352B2A40CD989631D6BA19E160428C724945E8EFA29B50270A7A10A90FAA31ECE168861A24B2C1B430241527602056A6DB0011CBEEBFBA7A3497E39CBFD8064FD061C766FA0F3BDCEDD07C739377BC19B3ACB14F3EAC9D330953B0ACC3B562C9758A63A76DCF5521FCD81326E517EBA1FF56B935ADC3A5D59E70FEECF543456B29A70D3A4DE1FF235A215FD04890F4343C9AFB7524DBDC04307B4ECB6F6708847323CBBE052AA5FDF6C618330C5861B9147D37CB8A6753309E90978755A28E296D0941D7DAE912A80C907BB784ACBDE1555B33DB5F01AA0B9A391DCD71447E3104B6AE3D055E6C43B4379AE46901A3BBC487A12836F5D35BF7EEE7A49B77EF40572C23CC04ED295D650BA2F8AE797CC484FAE9C543B41CF01AFFD5E34B1FF74469B90E7C8E8F53B72BB8ABB20E63EF1FEBF250F44DCBBD669BEF84ADDEB8B803C27EAFA33189722CCF77B9C35F4A0E259645F0BA53FE29235A76D1A0F11467676F36B4341A67CD3A03A0AA9C9C1DE390A83591FE33B38F9C4827517A548DE063845B3EB521B0CB6AF3CE71C7DCC0FC44EE68B37F0F798ECCED717F2C777944F347FA1597251B7FF5D5B2B912473B700D57D1359162420592C9FE584B06919E47AA541AA908E2827D211C008FB6B6290611D738E517CF7DBB4C96CFD48B6D36A24D4861D759B867A86E7865B9C8C2F11DD18142B5EACAB49D5B89A30E20723F860E6C1EDE057D198D24B7D70C691C8A38E440C620F09CED01E5CF4F2320E7637A563B95A8DFB6A01C6DAC32433E8C33AAAB80CA8D8D7039EA73325E75709FC1B5FDAE4220F29BB0485D3D5C486BC8653201F7B6389AB1C717E4B2BB984480BB0FC5D63E560F5D0A123A0F24CA6CD85E27A676FAD76AE0389ABC775619B954A1C29CFDF352A77B9B9838B4906544607B1B9974E5C62876B274C2F31C816D98C4DC3CFECAB2CFCFF247CA4A27BBC19D1E061182035BB257AE3A54204AA6AF705FFDA8B2DB11523A68D99E9D62603890119C29B906070B083D4545EAC4C7E892E254327E30136157DD5E87A32EDE4C429413DBCBE9E66803C300AF0E653B730FA32718DA0E0364052D22D5E862499AB503924CFBC8D8A2E8E2A60CDA191079C0EF4CDC43A8AC8F2B6C23F81A5D512F477CAB755ADCCE4D2C24316770ABE6EF8F09FC8D321E5B708C7011E00BBBE9217F627B76FADF7731518636C9D7525E3515117FB138A938EA816E8B0872AE9580DD236A2142CA90C194486F312E4B5E23D9798A153B3A2A46A72BD2DB603E7AF3044AC123724CE2EFDF878781F6E44290E27B01DE2B91EAFBEE413CC8E9076B2C93E6C8786113A23C50231208A15EC906D2D4EC9A82010A08D727FA770A15DAEF4EA8C159CE42FB02F3DC444585FA821B0173DB943B960914C20B629FE8CF0379CCE85670EC9152636A48FA86D055CE7BE9A9C5998351E026CDCE1337AD3019A90C8F00E9C6576BFEB9EDDDFD66B172F6B327212D6538236769F474C02EDD1827D67E82EAC7B907BB42DB94779A6309704CC70690A3593047E209756D71A4D3EAB749C7DF596C0A698E3AF7C285812FD4DB0F216BFB1C0191D75B3A6B9D09B970DD23027310D1AE8C439DDD5B1EE95DF7108B6BAED852FC9DD8663C7FD59DF9CF08A1E00A30B14B42333DB94FD074B94CB4A9CF4605379FF718C63A532A949C32218E90701133E687672AB1D38D9715D535CC7FF86F77C64709400548965833C5F249A47311F95ED09248ADFA434E9694B8752E911443A688CD8A10E756043B535CB83E46261DFD99AF9BC1D1ECC531C74A2326E8B128215F68F5E5EC8CF3DE4F8DE8C53CB37B678AE8B55E13F0C9B61CD3E0C48542DA7AFA0BBA99586AA73E16ABDF2FD8219593DAF110F2F7678275A0D660C303CA605504CA3BBD7904A33DCDF2F8B7CE3A743A52842CDC1A107F06475D7F51400390CCAFF92CA467E5CA69161F5560C7B59E621CD75444813BEB5ACA1A13F9D150A06C312E817A439477AD43560D4F7FF225D016E98C41275C16EE4BF36304A0D876D77A9195C952A02BF392A47C3D569A73ACB13A9F1C8E4A3B34B9AAC6684D56B8E9D05C655C9389D24329D8058CBDA5BFA4E6FD14C087D8646650897E07B9B91FF526340928B126CC94993F363983079552C96D092C2D81D5C7BB8B7D16D07557CCD3ECB8A5E4FA1C18FC9F22835302724B99F515F6200C4527EAD3436587E260E3AFBCAA45F25B0B0E821B532B98FCFB2D33B400508429F9DDC217076BE3D79800D5C574BE11A33580453014C3AB9CED36FB3EDC1505B772876ABF4817B446D27399D4F2C34433C34A9F70659599FA40664827793557B4ED6F3FB169CCEDE8E2003DD97C945E603AADD50BCDF6A731FD6F4B4C8581BB8B3D3AE814E25F6B8D44DCA3AFD1288F013C1669D66FB1E8CAA9D0D9DD28C37DBFC2DD118EBE8F7B40BCDF9414770C83B3325E421CF9CF5619EF870CC13FDA94BDEA5CDF61C2173F71E303EC1FE640EC0CF5AA4ABFC8B2E0765C5A99CC6B40ED4590172EB9A1115442E6CEEAF59C614A70CF3FEE32640ADCEF52EB2D68AB9BE6B7339A1943F8157140F035529F614145DB5B94FBF59DAD1079AA7A6DA42A0F94BCF65EF73C49D792E073CB3E602B04E90C5619B8FA5624847EB44EA03E397EB177438ACEC25498749E5B224257AD1AEB3A69A532368FF0FF3A874ECA59D3DBE243EEA0697D72724A08714D7B9837FDEC56FF59538A4DCD884B9758DCF85EF51FB4FEA932E3EE0DEA5CDA9A1A93094B94F36D68338FB5BFD62FBA3AAC44CEBC41BB3B7E29A4435992FC67F765022610205F63B92849C02D74263FCF0A73C8D24A0722126823699C6B9BB3554D59CD3596FD1D42A7C7F267AA57DD0EC950F7D19BBD04F79CE9DB913E551E504067A6E4A7530756AA257CB31B8A96C1E81BFCC278F5D06C39900B6785EBF09CC9472F9B58321C87E8F51598F71742E5B9E52E6A0D87928D9B238E9DD3CA7E78B27302E4DD1659581A1B0C4AEC4F946628879F4A642718987E28D09A11381AB7A01D98B4B7D82558FF9AD8F6A7AA4576BC4163E0045C53FCCD73B351BD463F99682323CAB36266F355564E06D2B096D1BF9E8BC76CEDB74C982A6852383BCF6798C999F5925BA50ABC698EA252F7D5FBC5B7F10575E47F47C8AD2AD5029BFFD73EEE078BE6E8932D01F4B47D681487B3D6D62632B6CC77ACCABAF7825F2F7A7B1AB1AA71F5AC7A2332760BBE732E1F812602A150C8F02F5CA62C45ED090FA2AFD60B7EFB02464117249AD16CF459FAA47CC75E6E8476AC414512D13544D66086CB8A4129604DD1F1D3FEA4E866648B61222F7E508DCF3CF068F18D5DC7C275D53DF84CBAF2E7665B4E46DD9CBC8D07202A82C7C82C21257CE9CCC6CDE9D4397ACD2415CF0CC40D5D4EE41C09F7157E30DCF9AEC680CDD19DEB4D5E721CD48F691147A627976AD3083DDB3957D748BD0AD93E29721FC48B9589B2C2E94F12A260E11ABF3992609F22E2DCABB4B2D8ACFA7A3E8B5FEFBA7C0BC43636F7532CD977287FCBDC836BE4F9B29AAFCF0763972673D16269D702E244292724988E4BEFB0D9A82CAE8669EEBCD5477A740A874F2A759BD94FA4FDEE891C045F33F9CE3AC02C2FAC4AB1094DD3EF412844C532761716B9A5C6 +Digest: A934C30E7F1B4813525F997DCA5DE37CCBE0072545C02A8AF478D2499A6348DD +Test: Verify +# +Message: C63EAE9E2F04450568400579B0A121A551CF67AEE33C42E7A03DD755B4FD79FBE4F95BAD8792EEFE6135E3F1FA414A8C895E90F9B0967184C8979B59E71162AAF9CDA9195658410058AD84CCEFB889956B0A4A9228D2BC009FDF7A361C046EAD24AB0E9832B7F1F98491C1966886A74A606C12983E6D321582D0E823D3A30002F5A056B6053C8B037D7CD62D2D2A5E07267630775BC8118D4620100027C3754B890E63616E3472442DFC5D5292FDA73EACF36A091690977267C06C2DC2E9431D8EE809A09E75D7763D29995887460837C0FFC68C041B4AC0D5B6E0004FC94BB440589A2EECBE7CF5B096E7FB3E9748DE272A331F6470CAF4468FC6442605F941EC9D468515A87DD05DF4ACCC3A7155409428E2FE793682DA656BD27FE559016EE8F07441A4BED6902B858DC570B66FCF1C33831ABA1EFB310C48BB28097BF1846DD7D8EB65F9A584320FDFD002EA7DB9BA69BF99FF569E8D114AF05D976EE43B444449169C75E3E304DE688A7784E2D61326D45FD69D5FEBE98C16E7385255C3353BBF2298357DEEFEBEB7DDA6CE731187117D766968D855AFABF586DAEF283CAD7E4AF9163BA951708389B0335A9D2BB515DAC509AD1E911C448C6D22D7AA8B82EEB26BAA4A1AB02CB0603D5096EFD5F3FBA700621903191ECCF6F5437E18CADE68B4F1F77544E7A76E6AAB325B1690B73A916C822E493E826C2F99577A282459AD070F466F3E9ABD269B65F23161F6CD3A9A94F5FBFED7192187641CCF9E839F19336DFF5F7025C6C8A0221206C2B2A95EB4B84E27BC12E1C19CDB437CD80CE5A1E5CADC251A15A66817FDD1CE61C6C8349687AE760C6AEE1824034BC8A2FCB0EE2E45370B4EB945C3DA6A10941826C124A25C4FC666A49A4D7D4D274FA2630AD39EA3DA8C0BE7507E1413928E892A10D4730C87BB4D3601FCEBE7A6E47289BE34D294F1A3F1B5C823AEFE250B158D31A9A425C8E3E725D1FE4C4598919CF66FB6CFFD2B6647E03FF6D301EB457CE0DAD09C894D5710841B2EAE424297C65910D2E1A0B6D5A57396E74B7EC795D1162E7471FE1ECF7118F448502F8D11C8D40A2B08FF1945E35E0C844D577870B67F7AD07FF87BE57D205823FEA68F0882D6D7FC1895FF8A75A47CD3B56C508E63C206437E16F7399E052E929CCC27A24A39002FF7A1258EDAC2FADF475153B30E14C2C5667F66A30914CA9211FB7BAE132845F4AF8A60C18C6DBA050002F2C225CFCBF40D598B85333A069998F095ED14E04778FE939B69FA297E3538BAA8DD7D82DBA93F29CB98380E5BBBF86C4A0D92967622E9277FEC922FE83C1A5D010CD06A8C48BD7153D26542AF2DDC4EEEF35E499E15EAF91D32FB156A5B4214F93B0B4C8A2AA39D97D91BF914EF580AB8B00B27DFB5844858CBDFAAE1FCEADE7BCE6C7963EAFA3CFC07A7C6214860BA4B3478E5465AD07190B113C6107C36B1C77BF51696BE4D7DAA938214C381E9CE8DE33E1E25DDC313A64DC3C1F6103C9C58ECFD419ED878117902E75806132B15F7C0E07D6D06930B8DEAB53C7B024DE04A6964F1BCB9406A21014A6C7E582D64BC5D60224A76E2BF105BB949E5B17B168EBEFE05B856D3F79B37634A52FCD925A0504B57157FCA0869E975988E80CF80F59008990F7983244ABED57A5883EAFFB2DEC7997F98EF0685680D1A59F2B2CA6DD91E4116AC147D0023B0034F35AF2C1077CFF9CEB37857D70659E5C14CC61E619ECAEE7092824FCA2490CBC8D303B3A24171C4673BCC63B89E8886C0ECAAC163F808532219E2D3445AD68E78130C59868F24DBA64508AD30D5C9F757F9D4DE807490FB5370FB9C6A4C75F93F96FF38B41419ED9DAFEF3130DCF1806AEB19A3B2C8B1B1A4AA9D59556C43C469CF246AD1D84B7C8D7EEA1B61E5A437AEA3C27162221571B487823980BE43B93A4BF8878A482394AD911284F7C6EAD051B3E79080AD8AF4BFA7B781DF19ED156BC9AF013A21FD88E469A86F3A9C32AD0CBF58020150BEBD833FDDCD6B7B14828B2A8ADE2C5DA290F6084826D84112976489028A08AF385632D588CBD95CCFAE333DCF170611BE9235EF2A6E4BF9CC67A8ED5F119CCE28CECF58AC905854C83CB15487E13FD7478C202CA51A4812E535F5E2402E57027347EE079131676BC64157D4B7908160F17D85565104FEA39C7F0D5BAE65BE1BD32CE3C251B0B72DDD046902F376F0342B1097298A8A69727848DF913A6C688679FF2DF58D160BE04EE3ED9477BF1717B7B1CEF74393043C6EE6A3EC4926D2DF4DA5DE5314015D32A0D16A16C688B8CC5B5778A7683EFA9BB3B05CDCFD2773B8BF9D984E06BA0B0172CBD340CDB2FBCE00B548900BEC5139C2503D6B7FECF51364CCEF5735F6C047541319A2D6E05F0209D15D2FAB248D646E9DB14F0E26DFEE7A27FE38289A839B8426871C1A5FC8A870B0E7B4F22B2AA0E12AA36D505C0309BF88129F92CB9283F6B9F9D6C0384D0DAEAF9314AB527901DDCF0D3C2F1250E07BA168AF6AB336E2938125D8AC6FC5A087197E54487E49A4E7A9E8004814F04A722E38BFF87F8ECB99D062B1D6C3D7993D5039BFAF508D9181725ED30299463DC4D815DCED964E8806A2D7789C3D6B659F685BC9F45117CE190533ADEDE21E2E5FC62CA8A19639A2FFE11464EC5B6540E122F310A12881E544ECEF1B771F3229D357F53A56F8C38AEDEC8C7E85DB9522F14F669095F30E86056B2BC45875A5312A5770A8BA7D533DD8C3CB48CC4C24A02332DF090B766D595291AC54A267035049DB3D280658C65ABAC96D61B38A10C6390B591186FB0EB438467B2D59A4D8B589E6D1492C0E9C133DD50773AD0EEFD17DF98AE39801B46298DA8E40730E050881670BBA6E804675B30A802A6CC8E4AAB98C3AC5487C610C8C9618A6D8556F01E1B639653E1CC1B8335CE6C5A4D81922E4D475118CF7EAE0657F612660E0956276B5E4BA45ABD27993AA0B9AE46CB72ECD02329A838CB8FB6528ED8AB2A89DC2AAA118E85EB44660C6F4F8937AF1DD1C74C98A1A2392D463F75404EB5D7D02AD8E39C9D548CE9537EB5E75A7836B3100C80BFC02C8EB93E35ECBD935777E56ADA29B312023FDD18F5FA90A03C2B8C1E19F0678A698E6A891AFE099DE21E2A537C6E9A3E121C421A5FDDAB936852284FBBAED34CAD7144EF173777535A89617035120AA17CEAFB81CE7F937BB10756422C4F88F05D2FA9F5F2917F143C21655AE970DF47C2F3CC8E98EF8C1FCA65800E3F3788CFFE6B896A14824BE4F32AA32920987F353409AB76429BE987141D999A87DBFF566ED5B311F6159AE14055358D033013DF4D15E73E7BCBF2C47257FA7C0FA6890384B4922B2870A4FDB6014EFCA37833AF087F8EDFA7CC6AB4FADA9722A2B8F1BF4C31D9FCBF242E635B3A7EECCD6F1B6AAE743B9B48184FA61617909489C4B66EFE7F6D0D59501FEC896EBEBB15FB9ACF7ACD4380DE38FBC1000D6DE7C48FC65E319612145621C56E98490E99E7CE636B3EF98E84DB8181D383AE19DF3B07138CCEB239FBECE3874263E6961DC30844EB1B5D768341E19758B91CA7A947236E3F02D0057A6BD957B49DB3188D5408F759C1393DD5E78381FC20AB707CC8AF620CE8E1ED9DD813A7E68264031F11D368C4101F8A830E78BABC43F6B31807EFC492D29987E12B71BB738CE97AA86D27121D41E08CD3E6FD7855145E99140E545AD987CB6AB8335285AFAFE130FBF5C4B6E438F1BCE88309DC99A85D093ACCF31CEB06CFA877C9CAC12BB4CF21FAB4C5BA9466EF3BCC15A50995CF963DB89EE463B14D72B3A134C70D692C856ED9E1FFAF7EBA199529B0A235CED7216C93F3C4F4526694D8937282A42A65129D15C4808CB4B0E8BB710AE5F2DC33C687A59C41BA6DA66D3EDCB123B9C73D4CAD72C085F5B83BBDB0A088210634B14A8ECE730CADE5BFFC77DF29B372C56EE4DA75A4558EEFA9B9A0341FB49EB068A1F94210EBA07E05D67B81C1D9F1560EF310CC75BE14549E04B2E1983FE3C2BDBE2DBE63F9D781B7975B455887E65A8BBC215FD3B0F5E9D810F9746DF1741C148BB20DAE5354D7D07581E4F7D6852F8C80BE8AD7F64A6970A3143839265AF2FEF00138C686A976AFBFE35C7DEC3A983DB164082A3CAE784072C1B1D635BEA3E63811F3621C08989750A6BE80C20CC1275C5DA75A94D7ABB7B220D495C11BAA7C1A1DC4B59E9A6C7172C16425FC4B298222CBEB1A6C4E12DEDBC4A0DB0B9835D16DCE8182ACF8FC5BB14841BCDFC13AD31FD1AA15E5E258EA46CF0ADCF1236BB9C01FD4FEB7CA4594EF1F5D34C1BA6C4B11ED7688AE7DC9A27B7E9595624202F7C094AB14A7223774F1A3FFAD194122CA9D0FF0FE9FDFB0C5C71BDC172A9BC7B396FA9A8454FCFBF1F830BDE78A5695EE34DBA620A375724565EF3222F1F9CDFFDFF519A01583EA621F96DE5C1B4DDA89A4D5C4ABADEF2F78F8529939CDD4C9ED0A9A24FC198A20DFFDFF252859530912C +Digest: F35811BE56F07A2923792F606E5127394E1FBE5F15E738DAA649247B61FBE93E +Test: Verify +# +Message: F2A464A16911BEC4DE27F22C09C1D4B1E9000B93CA6B467116A79669E9FA30122FE27E92A9D2A825315139FEB2B6ACAEA2465B7D72B96141AECDB926021CB490662622494D1E662B2AE67F7E5BB24834183FFF63121D2504E259DBF75358B66BB68E2F1167E44585C353DCE4C60F34CD5169494ED12E85FA37A2EE9C3914EE3271DEB4D10E7FA6B422CFA85FB167D8A25B908F8BB9F502B971BE55DDCB3CC26AC8A59D265C623346A274AB9E143FDF637DA4CFBFA6912E87E3DEFAC5602C7BBCE31D7796EED1AE91ED86581E2D2152939AF120D3C0357B95CC8E0E0D0D020499F6DE72D505FAAE953D296809B68E5101B164EF16B2BBBD941B7F1D7461A8DD5CB39867D34129D423DBF4496D0E3066345A0AEA3F7A061F0EAF38BC0353C09172311872B0EDCDD00BFDE28AC652B3A1A2404418FC11EC864FFA2DD4EE590E2BBE369EE8965F9D01E7B0006E462DA2015C3DBB6B602F3044852EB0A1B4F0DFDA406478848151AD7DAD5876E4BEB896DF051AD389F087C4E3AC4A1E536550D4ADBCE5B5FE4548FAA92735C75DBBD276DEC210311F2E86A1212615ECAC4E40D002944562CE7FEB6B1ECE0C50D8BD7E9371E0B8A430F8F176C5DAB34640EC320F22FC789400270827EFA852CF938C1F825107D671CF59D468FF234727B3516883922C99A3C70DBEBECFF08F36A68DC57D71EFCD618761DB818E7FEC87DF7D2E655CF429376AD210CDF51A16B06E87FF005C82B1C75DCD7F499F5256C68AE7C70B8E8F4C3A6B6BDE215B0F25CFE69C94390D18C333C052A885AA20F1A514F0ABD0C6C4A0136FD4F50B558D568FAA8E5952A7CD389314DFDCEF53C5FDDA85FCDB3078A69E18557B75CC724A65C4C80C6F3AB14CF2ADDC0E099236C51BB907BAEFA896F61D6FE6A60522B1B23A6D7FA7C38E4EAD35E6F08C8CC1D00E91B0199DE63CA867616E12369AA1E252945DD28EF6CFA8EEA9DA254923DCB0ACF5185C3183BE275DFA7A0810203FE5AE4BB64D754C2F847FE068DED951770ECD0D69808421ED7760A57976CC5508F60EC2DA569873FC87FBFAAA938E3E4B6554089AA1BC893C95F72CB73D5185F490C005B86B89D46559389CF356292C5304732723169CD747CC1BD6E82F45B79A57428CD0A5FED8A36C475198CE91F919BD8358FFCA0008AE9BFC29FC5C9E1249BC6CAEFEABF76B3A132C8D667473908D51AEC2C01A51FE936F1E381779822D061C48B5ADADF7E3F4443A46479CFD8D55AA401248CC2BB22C3A022B94FBDBDE23D9C389C98B2D9F6040EE6BC056DFEFB8C62943B76E28563D3A24F20ABCBB404E742A57D7877D85456D8D7D508EDAD43874A1C6A2C3D07F27AA348A0BB0A291314FCBE9E2CA1BE3A4AAD551FBBC3FE77516BEAB0549DBA0521784B7E3E755F05FB5DD946369E06045AEBC1A7350917DED51203CCD69C6DBEFC82B722CAC2ADAC3336C20D9168B5690BC82AFABF864DEC9E67D96CC5A572F04639BBF934C2A3E055440B2D6617C85F683D9F913A7072D810AB87D18EC968F7F143C31E3C57A4254DE46C50D71923E97BF5058A3F78396E40B267C821E53DB75DD132C8F075B70F37C8738CCE1C25A7B6CFEC70CAC537DB1CF67444F5C6049188EF907FB19D9F9C73FF9271C856FE32F283B64304AD8C83A869E94922F8740B8A3953EAFD42E4D5B993CDDAB9050E6371E56214CDAA338990CBEADE1801A2AF7381131C280363DDEE016A6A9BA92FD3EA2E9686C50D7F71424B42D75D303B2A09105E50731C39041E00010A28C829B10173CC8CAC38624F6C960EDE41C70B442A1DBD95706DB0D98FF298C84209EE008D03396B1E1569894AA50E36744991687EB4E5D824634263AFE6CBD4F2EE2799BB79437E31AE5DEB779012BD4F620A49E21445596519C98A88CE4812465CEC4AE8F44E85A3C55A9F47A3A736EA9AAF324E0A2777C56F537C031FD9CAC9DE0774AD27755A070487E8C1C6EA288EFABEA74FE3A4D22A3760AA79B5AA4FEB4ED7843FAC2A225B14FED38203EB68974FA84FF07CCB56537232A42E7E27E739CC35EBC19BEE73F10C101153EC8E26D64627A779C18A54E684C89370A49C9955FAD9BAD8BAAD1F646F54745E5D8C9F709D99D4523307DA7FF330E77ED6903B2836BFB713B1E31F86826A1922164C48FD0B7C9FDA864B50BC378D50B22CBFD90419585D3C4BCAC9474FA3E332FE7EF3BEC87E6A812598321252EA7258AC837D4ABC8D5CD8B9C16D451AF3D36BF3EF0097F61759B8750C1007D40F7BFF0343A02F54285E2184FE1D9B7CAE813961EF4FA2BBFE6F489FF93E130E47E00028AA237A2D620171454D79EE63B74205AB2FEAEA8F7A470C9B8857AA08C53E04CF741927BF50F99CF94365855F5E8737A2BFD03B63E909B247C6C1412CAC90891041EA47B19406D7F40EDC8E16EBA9EC2AA8A86BEA69391D9F4856F56F07C47A44BD0A285BF12FD94A562725F993D3D893F078F48CAA2CACC9D908E2FDDB9430A58884AB291EDE4A654B06C1A61476E8C6AE4039E8E3201D72F6A4A7ADBCE02907BBEEF5B0D110CE3FDBC873EA92B88E4E05724F4A966477DD816BAC1A6BA47E0EA7EE176B9AB8F78CCD7000CACC235DF59F9E60C52D36E664B27470337E6EE38ECEE08622AF7D4D85B20405B1E623987038A7DD55A5309449A6A67D19D771B1226BAFFA0D2852370D2C9F4442F21463E75ED56459F30808519E035E8343A053C3492A13114C7120F1C06173630BB5AA6DBBD8874EFFE9842EFF234AEA6A08B124264D208E06D52389A662C6257D858C38D41843D26310774A8C3AA199A46B497946ADF6BE9A3C4986832DA11A5D975CCDA8B674B09C01CCAFCC494601EACDB124B5329FA59CC31F5328ED1AEA0318E4367C98E0D76C479E74BA65E4C8AD09B291880AE86F0B2CC3B1C151F1BEB6004B6D90A177A1D6696F42BF1E8C57C49D939BAD1034B3639D3074E4A3D83870021D09DEA4E55F3FB3E0FF74E60C85D0E18B3508867EB2265C68E35CF1B025296730A5DEA1F3BC0D35563FCEE5ABAA174E10FD793F76F51421ED600BA60A3FA9BA1C9A5D5728F243F39D3142A5FC4402CC6E7AC78C7034B884F611BA25722704C06B4B9186BEBD42AF6AC87F9BA3EACC45F2D43914D8731EBD5DA6608184CEA236F06AF2F1F24A0D878F45084F68929F617B3DED89D449265A912445543205C522737B8660CE08C723B245D5C3847CE38073C2A43AA18820C12D2C292180CB5F2347E3C61F517C690B2D2C562A40EC7AD16EE7CF2B503CFC5489C93EA030B74F0D1E3F377A4C94F39BA587EC7E3FE06426BF13F253F648B58949812BFE229D9F960BEBCD909A0ECCFD7047FDD3B053C08EF8136D2877054B0C5CBF9233B2AC17FFE4025FA17E598714422B16BD5C2E25F8FC0CB1F0900C45DB1827AB2964B0F330A281A70A80AEA60B236D312D1C99608DEFDE75E649F06E28BA32A41EF19F4C4A7B92D58BC3F27ACE80543844B93C05F39A448F5713A6657F8E0CB065305E989979B59DAE4C8E329D2ACFD4F6A40155E4D75CF6E73DA0C749A56EFB9B38F5E931F8F62FA8D763917E7C8301D9480F330C7E0E68B9DA76FC68EC34EEF17E49F26A3FDA9CC2C8DC3DE99BDF6870A507C09C37B9A35993D48F6A5A0FDDFF715783A4BCB45D5E1E9F4DDCF9E5953D50748BBEFCC5440F5B6CB1CDD3629B69EE27FBA43B3C9490E1E9E47F12BC684217776E08E9F7FD6F8EF34BDA38A3E7387B126B5C9BA53632CC9C4612CDC3D83914B3BAEAF3B63609C4BF86A034068013AF76B39D9634C2EC24DB713AAAB4CC16BE004EB89B22C3A4907AF3DF62711D1804E151673ABBC6B37D86DD7607F8F0560AF68AEA0B427ACB080B97958BE6BD69A765E342A19CCBE3F55039E13C2759D528BC82E4A56A9367997F9AB6E01B9242FA44AD9F00973E8FCD0DE38E85CF5E43B2F8BC0E2CEE9C88E10CBAFE45C4A30543C3AEDBA640CD5AD0CA6D9CDB3CD1E673042D437DA5CE4EDFC4E76D84D54431336F1B909777FE7D0A239CFED9FC33DAD9C0BE32248A9B9FD90C63203CFE3B84CCBC0A8DA99E3D945BD577819EBAA6F8B7B78FEC041ED10CE74FFDE7F7B5A835EC6562E30706454F2B4A593F2AC2BA8C7B24E1066518BC2058BA6FE2854D6B9D0D9B66E675A0B0D0119850D0D7B85C3FEA1C613A6EAAB7EF7CF27AC3C78B17C014ED33BC8FD3E7315DA07B32E32ADC015FF030C21B134A185A779536B1FA686A74A8B1A86582F23D2CFA00DF499DB25A27C179B5FD2F0823820512A65645C17B4AFD95C28DBA6214FDAD5F2997BAD682D0C40D155EA3FA003459C44998938C94B35E0AE044D898B6994FB3D2E9005C99D60C0F9429938229EBEBDE601EA0332F44746CF7C3D1CCDFC37D27F4C474D57833AEA27C96C74AA72BD4E077328940715DEB4CE455064492DCBB84AD380B989D9A02AC9A3DF18E59847C8986CB379462B58C04BED1B6AFF4120528884FF4F0E358ED7A321C32425F0A154A81D05BB +Digest: 4005AB152AE0FC14685EAFC6BC8401A5617029CB1C9FCEC244F352827D969603 +Test: Verify +# +Message: 32865DE385055ACFFB93B632A800AF460072FB3D19B10B05173E5CDD561ED026945AC4BE7C1380F8DED75DC76C54C8F3202C90A2FD46742FF563B272B30055617B8C5975520661496124C4F7181DF9AFA8DB649ECC9211941731AB279B882FB202D3C426B6984CC3B2F3B9B5FD247BD85C9FE77F70AFBE992141BD98F0369CBD95EC63DC8524E3621D31198B32BF7391ECC759AF068B85408CC7ECCDD9EF21643F43568E79B760473C109A0E154242120976EC762E261C9993010FBECED044C999CE67C9903CD48C867B06D68B86CB91E0C5C1FAED88ED208DB24807E658D5389DE5181922E6210402B505B2280020065D7289FA55FEBA6B28D9F58D23FB79E3E161A891491D5C0E0D55E169FA346C4642189A5CB21B40874D64ABA71FBACA7DC5C313FB8FBCAF6D5053F6B845ED60EFA1E57A0CDBB3F65D6CC364E25D76E8A15F9C98CE4DCEFEA70D3C325216190F34E7D41AEA96D792445F502E26DEF431FED1DD98A0687863393A3F1FCFD746797CF6312297126EAF0C92129657C8A7CFBC707B28409CFD4DBD1199D229F0506762C139B81C972E44E4FE40AB2FC6FEEFEABDA2498130BB09022722FC902F9676160525FE3D8746A5966C615F197CE2C835461D68A2F895D2CCDE42BA053FDCD2B861EF4D143E1009827EF6EBB7EBB5CE99D6CD0D88F6606807AE00F323555A028EA6242E3EFB45C113D0C98808904215D9929B4B260B49D6E974CA95FA992E3946F1960700858226603F78E52C92C2E01ABDC77C84CD3C07BD482C49078C7F2898CB4D0D1CBC883347E75CFC1DB47798221F55D1898173EBB238EE69E1F41BC09C12597A69C7B759654CA21A5ABE05FB27A82A78E48A588545061B7BD7A102597C178F656E16F0B9222B99BB2A0084353EA0526D5C99C6EF4E00FCE3081B891874C3EB64C05557E62FE14127264A8418AD995196697C2FB790609F4F811F4B15518EB87DCFC586F7702E9D30508B7F886E74BBE5886AF1471297779C1D6D0AA56848EFE42AC2AFBCAC56E230724C84757B558FF52547E2E421A421012930CF964E187219F7EFBABDA7F36B4FCB28004CB3A0A63594419AE3182544773BC5F7E0E31BB55925550C7ECE31EE71E02DA47E6E4ADC56457B8FBCE7965762DA0AD4A31EC36AFACF12B10ADE339C0B0C5099E4C163825536C00F917555C05755C84F18FF101244377148A85B7F980E9565A3112A6A1A107EA8FC13CBFF8864F6A83E277AD7D4A0FAE6032EC5FAB20CE3C50A1AC54F7687C74BB712189888CE8E6BEF77161B6D46E4D82AC796840D8F40AF8A82FFECB130E9C6B96701E4C1E52ABAE2BE233BB8505A4910EE96F937415C2F651937B51F4B2A9AC6BBDCC625269ED50003CF8DF4CD723AF8B0666D5FACB67AAD31EC204A4D79FB7B2D1A8041E2DE30640CAED0BDB9F0A281CE247151522DBBE416D6AB864AFA6A4D62B6847142E765928EFC2CAD8101B46888FB172C152FCB67170F953A8A9610DCB47FF038776473B8D80A156E6B328B50B58B7FCB5B7AFCD54EE1F366708A2664F2A4EF39CADF7217A3F93EE97D632C51FB37EEC2C7BA4030BF874156227C62AB7618F7144785EC1538BEA5990E4E241B637F403F39A659B5D60B736F0C2AB2010F38E65C91127AE67B30040638564938F27C52D5D2E5D93F02F2288BF4948E3B478FB5FC27FDCD804CEE3337BE289DFC8C03124B03958DC80C8791BD5C6E4933BC14FDFD73B288DEA52D01C1A376ED7A8E8B214BECD64FEA55B733D175333384FDF07124FAE72C6190503D41BB2FC8F928003C7CA8ADEE77A8E5F646C6769C131AB191D69A37E8C428D83DC6B5C3B54DB271F4B4E31FDD1CC30233CB8C6EF06AD60D577CE5393BF6F76FC580C1661CFF65BCC3C578F71C18B8BC84DE24C4CDA48E37E127440C7CCACF97558F270CE59FDFA9F0B6904E219F72941415538ABE3F493E40D87A92632FF6C1FBCD482433CE7C820B63325D4C1843F94F94F8BEC386061E5D59187DD9CE24154A4412AE7B6E772A0D18A6B2EB08EEB7A61BB118837BB2AD8C824056B668A36BEBB86F4D16411204859D96CC5AD3DD6F5F03CC3C3A592F09CFE471ED2205E360F50637DC840885B5681EE667E3CD16EF455C3CEF600300882B212C0488FE2A4239A861EEF1EC8E961FF5C12A83743340B2538EF5F8F5564D3D597D51183DEBAD8881878A0F1CB4F1B8F04188902DA77547C1D9515121ADA141EDE653F236D317BB2E624897395B8BC62CA56AC5C92B71302972F403A78A2A8FD73457D3FD4BAC406E928144B7F9C124083D778B2A4BD4E794012E2106DDE0B3D10D2FFD8A1E400D19ECC085CF77F7D74EA2216200066CEB30590F29E564E6F9789977515F8708C261491700DA610CB6D889C0BC20D3D3C85536757598D0BCE824B096E3860C495CC32FA4F240279A18B65C1FC8EE5BE79DA33E631907704ABA229C9C367D1433E0640B9D57D3790608E5A4407EED3E7FFD965B4EE2D180588A34A777EAB81C76110E1E35688456EE21D39CA4FB82430BE3DDE91A3586AE6D30DB1994AF361F0B6F0E09ED068F6D1BE719EAC7EB6297A48313796AE0E221B1C4F6058641B6E74D8269C51AC29DE0F2AC7E749759EB6103F35D6068A5B23E03863C52DB593285BD1A2262DD78048AE45A87E5546DE4A444E79F4F4EABF9205242D61EC7E024A4F4722860FE9BFEF3B0250CB34C45208512CE14AA76448AD370A2EA1D3CD2A5C107DCC1EBC6599929A7E4E449D0056CB66B441C8436107537D330B7FA5584B8F5F6DC7B49F24E5FC70BCD797F60C6E6F034BBBD667F5E213BAA30F3080A1A4794A8E404B487AD579A261F56C2FA9790AE918A4334736956CCBDBF4CEE37E7A544906F79CD69A9F87E08639E98DCBCFBD03F0772DE7CFB590A2FAA1BEC669C7C7D9DAE5AD6459A79EAC02CD924E8DE407BD1016C38B11E24D294B4040C4C2F2F35D20CBD1357153232646C936A1DB1DD6B0CC4BF2CDBAE9A4AFE998150BA97913BFF3C703A5804DAA3C3BFCDB19CE6B1D8403809AFFBA73F299F7B943FD3BF2E49D8D3F5022E9BC2E146D10F2D160D90EDE4C466BBFD7D59C52E3CF3A551B0EDA4D61A6B08F711A9B500093A4221138FC5CA5458A37519DB3CFE158FABD504D5B95CCA9F3CECAA2B0F478A146207E95E05EF27AA6162EFE033826F6F9B05B738862489D6B10D87EF25914F6DC9A3762207CA115E1FC0FF1A4585A43C0228CA4EAC684735F6A0B12EF19680FB0478C3591A6AF1DC4ADCA49A8ABF52678CE0FACF7ED2AB21C58C3AE5FF61CE3E8B81CA34241DEE44299F45637671BC1AB5D82BE1AD2CB5978165BD6649E70B8D3D11504753248D29B6CBC5D184E5D071FCE4910BAE1E7A9E31A97A4CEC0E8D52292B2F5702B1DBCD0C42ED0835616BDF4C60478BE0BF44EEB1C91C32BEA3CD0D30474310ABA578A47B2B793E272C8E6E3E502991697824117C8BF0EB3F3E179B89747E1B2DBA81384B212F861922CF04272D8B38E8E69E9B0AE01D8931F932CC96CF70053BE884D1E449EAB28E36C632CFA15A82ED0D5F816E701D53F4FC5D600F8047148F614796EBA48667CD6546032EB00E476FD18DB096E52775675D4650F5B43C8DB16227574D29532F89E55DCD77CE5BE5F3571FCB981A110A39390B3009DB099F35DC5519C3E1253B4070D6B46D637EFF37BA815B2FAC497A32F9F3D7640E031D9AB539F4C955D1D0D3C61790D057F201D4C7B130BFBDBEB4B35D81290BC3B5168ECE82B7A291FB71D4A559284D8F00DB3253F5790C40AD4CE9AABC52303D9E649A91EB11BCE3714DAF5822473AD751EC351BE1C2DBB02AE799BF0E4530997628592C681C95B5CEDC066531645EEB1B6AD6CA228BCDFBF337719BC627A7763B6AEE32CC877FDA9A54E9869E67B354CFA081DD4E12CA513EF7F1D07A2F6F92313246891D815AF39759B56BCC8D7901C31421F810BC354068128C9512CC3B06EEF76892BCB1EAC7B3987C16923AE8A7F17DC8F0DD2D1E994DFACDADC632E71AC2369B1E67A6D7936494BFDDE0513FF47DF7BEDA7F519AE62118F87879ADA78F68CC439017551A129ABED2A7E375384578623977F26FF59F1D8DE633B68C374FC1628EE7D1409E704AEFDA7A4F2D90D37E26A396DCAACE96247B7A9D9FA1D948A82350A92B8513DDB985BDF80CB1F40534DF2C2E36724A1E6C022D86315CE8AA0DC882F5048C1F9961C2515E73AC7AB650145ECDB25E03AFD61F32AC5F4706AE5F6AC78B17AD2616740D36F0061143BECF90808E5EED8B30C70A69B04A1D9ABC18C4E9E04DBAF4874E4FFA5187451253791442301915937A9F79A23A7451125075F82C5A96482AD9FA165316D65E159A83FA8ADCBBD7DD97D4CB33BF2686FAA35A30DB0F4BF67F806EF97C8937C78334CB991BE27EC65D0AA4806C88049F7FFF5DB19A1BBEDCE2F1904388C13E14699100FE397D891082DAC5783ED0607F3FA7932F1A5FA4CF4B7A43178FB2F9B96C302A5CDDBE671C805D +Digest: 9BD05F10FE33E341E734B870E8E7836D0A35CDEDD0142EB808238569E19E0411 +Test: Verify +# +Message: D8551E4F0CD3AE089173014FB4B1964E6D037BE05A998ACAB697A950C99AE10CE0D3485D2A0430B1784D1FE0718D9D03E189D8AF2A35A39847AEAB39A627BD83DB2B1B25B2F897575752BF2B27B6B51FB015E3207899258FF048D7C1E99B8850E5406E3AE7CC26292278BF15C80268CB194EB92DFAD981793C7BE5894BE6216D42BECB587EC1F17D074D2182E3F6C22FADFDDC5F4E46D78EB983E5FCD9BB7490AB7D643544129C0C68AA3278BEC00902201574A9E4E2EFAE0C21036F317CA260744F9EE6EE74AD0DE813D23D8EB9F93ECD20C152B0DF0187A0D8B7331456C6297AE8344ED4647B59CDBF981E725D8FDF520D1D7C3DEB4E01E0302B13322B055FEA4CC21B8C0D5A3ABCD7C184A60E9C14DC88EEDABAEC8EA23C81CC9AC7267645245D9017C43220F12719018AE7BB9C8B2C43943E1CB5AA4FCEBE1B4F114B6FCC77AB2E3D395B45EA68E4F051F9A72C5CA7778BFC1B0D7FA8F2D21A865D80208DC29EE33D01B4A3D1B53DC00E1BD71237E95128A512CC0ED5248AFF6E942EDF32FB4AE1B7B2620A4A3381469ED4E11F563E5CE72BC958DC1DAA1713D5975FB9AA5846FC82F1EDA1E2A297AC7B928D10DA4E89F3CB68883AF301A52CA661987816B4C6506966000B5BA19140940275E81E526A8286090473AEF8E1082BC2ADE29A56677A2DAC75457C8CA6E86461FFE40DF98785E6349F168732208BF4CBEAA7A43AF4A96DE7D72A0125331E09DBC4B035A877EFBA7ED043CDE1D17E5EE043C13D481B3D35EC6E1FCFCC438784F7F72856BFE97FCB700FAFF6A2819EE80D7E1E24BF9434B182166DFFEC47D806BDDB0A6D3FF6341F8B934358A4AFB09EAD4D970D771757F7BFC76F86420DDF91372571EA4472D32721FE147505FB71784960E38BC2046A0E8A9A9B3840CB119ABAED100F480C13F93E787147EE228E873F05D5976ED7EB21ADD68FEA4C1776A62A0F8EB42C8DFE0EBAEAF3E6E6F1E348A97B683E6855FF5605A720F448D29D9488B839D8E1FE44867CAA57B96003C4C73BBD0E2D7A756C9E0D236FE88CF86A01AC55AE63265D1AF5B013C66E720D7455C5CCF7204DF5346B8A8224DCC70AADCB149388B7B2BDE154FA340D5EDD31CC441921AD2DD71DFC9066C9A9517217D08CFFAA3567AB186787D2E99B7351BA160FEFBEDA1D58A00E825BFD8D379076B57260800E1C2AE2302B5C2FDD8DE4612866EEBED19B6E9241B9907CA1C75D22378F39945A7565D1CEA697C47DF89974C32C0DAA7ECF7F0CECFAE2E3CF85A24D7BC279E1F7FA6AF47BBD69D68D0126047655097FBC6213DB1F7D698321BC4C5D27B4E2C51ED549D39798A3FCFA63819F039F1A3CB588B4D632F2DF301563697BAD204CC6B5816C6F457D3430AA480D5A63509DEC5993ECDB66F978E46C9B9D2CD551609F2EF145276261AFEB66289F2A972D3BC09F06AAB84D4A3E49A2AEC3869BB825A0EB73B325D1F533046F14715CB02D23A0EB867DDE08C13E19CE5C92F7BAF1052406A2F89EE5E50988F2F2A2999362E79A99BAC3501E8DA24515472D3CE6EB037A74554B33F4846405BDBD03B86D13E5FA31C8931AFDA88213C7C5A7F112BABFE7BC7912735221D51D18FCB3B0E8402DF1676C7EC4F15CEDC99F352E6E9B0D3B7EDF2F882D0F90DD154FA041183A5D2164102D8DC26C67788AD84B2F1BFADD4B4C63DA9C08CC2EAC46B893694E1AE2500E0A4CF4AEDEDCD6BD8E4483C577AFA82697048E0A12B986A619858D932F8A2AAE17AA119DFE3CFBB3880375DB499BD357C4ED7CD93E9197E731157CC18D4F665321203E9F923071CDC7A03805254D2CABB10DE6695D93B5DA443E91F6ED4193881EDC88238CB37D636564E2D9275997CA373DE4B2ECE32D47111AE08A93054974836C41F5897AE087C198718F9965ED241B317D92CBEB4DB118074444311A1EF0EB4A38B278BC48EFC9A50036EE86089CFEF49EA3C5786EB3F2EBFA9C37ACF8C7702CDCF0E5F13D9FACADCB77975812A019D3C9B50140B5B824F21ACC34AE2E77DD26D9DA44FB14228E382CAB0B47DA978897F5A5268316647C11E66B29F2C833A9AC86D07A37E34E254AF80A8E1DA16B22F6B711E08B9FF392B893FE3B2A635F37BDB3FF835F52E9C5C31FA0B7FEA826AE5069B1F28CFCEB861A0C89DFD43CEF74ABBA78AAAA1287F1E8C8F70BF178A46787756B26E1178A1BC0EAAAEB380E286F61188C17B2187CF3435A1A9C3B4552DC90AFB5D099F2F630B997B604062241D9069A8D01D4E7599A7105314ED1E916B55F7AE9C431462BA3E80D30E34D81BFE026499DD9EAB79C977932ECB02531291E709D66684D96B071856B33BC8AF66ECC9A13482BF80B077EBC494CB9341659F30179969E320E8DE157E24A136D452F67B78F9FDF2552778167A37C78E4BB17DD9D26815A4D2599198DB17F7F40F3FAFF7FBF740D065A707DD991320B6DDE61E744B09503533D1FE8AA7172E8006F1A0CFADD77A20CC306CB96768171639EC418E8EF136C6BE0AAC5C7838D8AC211A3DCAD46E79A3F962707EFA2C452F0CD42CF9E9EF14D913B29D57E41A0F566C62AA004129F94233B0ACC5E47674DE229CEB08EFA9247FDC7DD839320C10918F44AD64DC0570E9275653E38FA064C9E8F5CB60AD5EA2E480D2F1D2C8822DC307CA3ED55EFF9BB0A87CF77546AC8EE4C130F6265A709D1989791EF99FE93CE9F4AA1DB5FA26C0A7659B8AAC9007E91E4BD9740591F97B11A863256BB89E892D490ACA07C6198541DBD3231A45F49EFF75CB13BD24069B45E76FF41AFA3E27C9123D9DE9B6E429C49F76377FCE481C31F2BBED2578044827E417868C52ECD31EC05303442C1640B9697EFB826B6CE341DE31D5538A9D1F0B13BF03E920ACCE402D15E8F6CFA03335E4C57FE3C3D91BBC8CAF35E8935E98840B8A52615C132C1E36E43CF613CF86D1E9EB612235FC3FEF0D23D6F1B26D3375FBEE4D4D6404A59BC64E2D78C335318178A577881CC9B4EC7D1C08BA27A06A752D16C2144121950DF7AF1AA3F8FAB13A946ADBF200799B352580021D0F1233C28117A9935CE8ECCDC996239036C4E8ED3AEDC58E9108D1074DD181F7294B5B54FE388D9C3778E7B484F16FC0CAC3C1E4A29C54288F96A98FCD7F4B34ABEE74222AC268ABF4B3B0236B5E96CDDEF2FEB22A42BEF8988C5D572470B10E3D2375D095636964183C05545D4A618FD62BD64B1532C5B0CBEF50078B34C7B22A24B9BE78BEDF1B1CB6F30B4BF5C4CD8D2B8A62A9DFC73BB2AAAA866F50BDAFD8EA6340099B08509438CA1470A80D875E957B077EF17FB67C767AEDB5B3947B68E4180678DAA9D87980DA2389CDABD0214011285E1EA32278A081E5C3BDB487794FCE77E9977233909D8C5C4CC4B245C717CD6FD47996162D9E7D9C6C42AACD4CA639C8A33FC5131B8F0B288482CBE09F88039E2C17E9DFBFD601D56F8D11993D2C3316E05D1A1B4C4A84ECF94A507FEC911E2288BAFB9A9B64821BE3C14F534E8D4DA0D74D7A1E6475CE6C3F7F46802857E2F9CF28C8A280BA7B5DC7FEC88BB04870B612C3723BD7F19CF6D6E7733ADBA44ADDB6ED164037A66213F147840A7FF6EF6D8501CA17CE56566122AB19F0B36A4107DD3FF1ABC28C7CB723E8E2F44B1291EBA1776C801B193693B958DF6BC64E99CD58AD6CCFF9CAD07F9DA3FBEBB4416D99742988EC5B77F39B50F1FD5DBCDCCB0A5BB6E4E271DDD29A87AF4373FC6D96D6D87E1CBF4F0B1A10176BDBD9281F03146972DAC97FD81AFDCE2FA40434B6AE92959669CBA7A59D1EEC7723C12F4B45D39786818661AA1AFAE5374AC980BB7EABCADA793CFF720696DCC980B274631FB2D991860CF07A95754AE607B9684438C2A092C4FA36315EB9EFEDEA65C3362930C458BFA547D16400E9E9A83B3ABF4B98EB19788FE911153F977D30F9BD2E1FD8FB1AD00EA50E58ABA20AF62510EF69453456B3200759F485354F686DFE760897CECEC9CA604529F4316045E4DA91BD9793C815D45C74298091F3E26093C06ECA895AF86FEDC3419923D7A35DD479B0FFE30C04DBD34DA1004759C027204D0B10C19F13415BF34476AA98B6F7D1AA875B5406547C05F01450B709A0F9A8182838CBDEE08FA14B6C2FCD5B5C821F0B93F3B8D7DBF8A1B0531904EAEAA0B9C483D76E22383BB2B846D4C58DC6C3BBD080AE3915CE18CD489F8051438C0D554F00DC868CF6D4C32B1BE825E39F02F1C074BDF70417E82C9A3D2C03F052AA095A9A4E323F4BFAAD77621E0B4747F15AC92CD7D0F4B365F2607C1F139F2F848E2EEF6079BDADDB51DCD536DAB689689BE4AAD2EC0EC4F22ABC256531D8B86A58AFD5A6B0C33BA241D1B8CD020DEE33812892B25AC61046F6007791D84C2B9B0C775926F505EC2B91BE835491A289AB40C0196B9D12A210F00CF3F7F9037C1A6A324AA001232940E55598258AA6BD1E0C5D80A862D362AB4156BE65E0A57EE4E2FE409993D74706FF395A79C89A36A3858503D22A2E9DFE3379919DB438227D5DE6A63665AAFCC713B45DE620847800167B4097E484C2CE8F5085D1F9257661F48D4C67D6965A537DC8FC509D62CCE489F45BF +Digest: E1B3EB6651378B91D7571DD7B22B548395D8F56450877A16CEBCC9313F8634B7 +Test: Verify +# +Message: 61D993D684CDAF3D422BE9DA1A366D299334B018BCBCAFE112FC85F3B94954E2A7313BF64BAAD8E16CAA4D9199D51184D14C0BC0193DACBE7F593B256F2A2B36A9CD221F079602C312F309EBF1550CBCE0B10AB350E2D60DE6B60107CD6AE54A34A245745843EECFD353597E109BA9BAFD89EB293FB56754A2169381B696C7EA9E7E0BE4283BB5A15A79A082D0BD7147DA69EAA6FFB1C6FB969CE6D9499B7BAEC28F830CE93689E8A6537D7820FA9C6DF7F6DF345F5EB100E5E8FCB5DCEAD0621B9B15830B26D1C94E94E762EC9802C8153E545F5D16E118E36E6DA18C4C2DB55AB29CD9110D87447D8CA2BB795B2C48FE81AA3E04186BFE23F3FC14204A73C1FA6B22C8430B344B0F43074E7B381D29EAB5D20DA0036877EF60345EE97C266BC18C044D6C1D6E84B39F6D42953408F4C0C0FDAE4A1B063C87A7BCB38BFBCDEE61B3309BE5B6701BEAF47A5017285E63904457BB7F7B92C22366085417DD1F55870CC482C6C06ECC60602F61FC2FDD16A3D0FDCEFD22CE25FBD571C52E9CC54EAAEC5B50678EF42836EAB016F236E36A59A33FCD77A9FF99014F19DE64DFF7FB0A3CFF89AAD1CD4DBE1AD1B79F832ADE42E5B979780D2888D86C93197C2E985F7582F41A158B0B782A2B365B5DB51AFBB87DDE80623D8B8801653161804719929784B4FD6F7A2F63348B477FDB8AB389F782E6774EEEB9791804FF4632DC4CD568817D11A6777F22D01E939C277D8409EF4FD117DB0FE51EC51FF0F90977099C3BA2DB7B181B5EBA454E03FBF54A68F7E50328A6E14478C8A26C351AC8EF24B572A6DE3EA7047E14CE396A64BD2373D3CE52ADC95398C42CC8A942B9D4CF765C7D2BFFD823DBA200B078FA654BF78F872BF2E740D6550529DC11FC8E9CB3A92443CE19A26795B2626B95E3B0FFB41DDA8E83F9222E498EAAEC413D8B278A72B481899D4BF5F38F496D52C9C06A02AEE8EBA5B956FD24467A9C9633ED7D9DEA3060975DC89EEDCBEF99054A3A2A07D62C7739531E8D1C58245557821697D2303BE80C8F0B488B83CFEDBCFF2C1E8BDA318B162205AC1A537F3974C24D3C55DE97243803F74F3D819911434C186805A6563CA2E2870CA3302FD05FE20F52817CA52F550D4D17C7DC387E91B52310F44E158F53442658B85EC9EA922761772607B8171B3ACD6ECC725F30A218A501CFCD358075052F978F691273E9991D9D03F5C5C16D3B8B315DBB1D332C759FC30539E1199FC4C3D0BFAF8F62B91D7446686D6BDEAACD7866E72BA8E6B535F3AD376E2F9356CD3BF1ADB8CC92C58FD38B76F7FD9A95EF611942A1D50A15D42089F6582842B99E1D4A9ADAA2F348E7B6A2D4F5BEFF1B6E510EF5C6AB36202BFD21A281DBA7E991C47A80F00605FA717B4C08EA264E54D5D281936E1ADDB8C5B0893CEC923949CD01944EAC5269C8F34225B435F3E6868DA49BA93C94DF4ADC6C41627406E4B9D1E61161697414F9A848550847FC399B18E5E88D16130B0E2151A8F863FA506453DDB4F940874A05E0378B9BA844D00794C2604765CF2E738F62E63C03481AA7D830701F17700DD491723CD970ED74DF0D28BCFA039B007931E54BF82777A47B75B52A5BD87C54400E8A3070D5FA987F86C46408332EC8A81D8886D2606A241B9F972DB16CD722846B0226349E5A3FDFC236126C5212165B1D48CB09480E4A33C797DBF42DB8EFAE36EC150D56F541B64739FEEA8397CAF6054F64EE7897480167B19D2BC0EAEAEAE8FD2E3F395B78764F55742D13804B6329A381B87377007B6BC33CAFCB0B042BC30B2C0F07139CC97F211D4CF93825D013B0F075C14A458DAD00DF1CCEF006A03261C0BD646C1A9DAD957B16491D81F994DE6A36EC32EF6A25F429FB9A49A267E5E9A6F84DB545B901E68FB7657B8C740F88F7EBD4698E072034F7B92A4EB72646DBA6DF784C55B634FA355FCC88060CDFC6711925B4FBAD0C83137BCF23CA41ACB9FC4CBB8AB7892F584D76A3EBA3971A4D2FA1B099037951718E306A3CF76A6EB38A108E2410C4F3236F6B17B7780E618F20DC2721415E0A89CE397836481D84FBDE5E73962852533289714A5704022316066725F50E90AFD1EA8BB8CFA4A72527A52967DE5EB5F70F4CE0319C40C5C3B44E8A1CEACC012EB7A51D1E29E3DEB160AA7F92B2DDE84342A5CF9EA77A13ADABB4E09A8F4C0D111187E9F5993EA7EA1CF3736AA9269101722363CD95DC4F6D66FFE48D4976AB6AB9E973DD83A2C2EAD425D8C40738407DD4A1B6A49D0D4D5770C0796251A64BB29CFAD1C06B00488CCCE47B7AECABB6ABC4754C9B9FD97898BDB5EAE04A496E80972764DE7CCDE3684E9CA036343D9DBDF799452521ADD758F309A4D192E56DFDACAC67CB285F5906A951D0A37986F58120ADB51BC1C2AD0876B334EAD9F2F07EAABBDB111F40091E633235DB7FB3DE044C5F72776AB1B94E75EC9692A682F4AB1945DF3779EC6DAF2016BAFA77E78E49DB9E936555CDD5D37058926AE0FAFE22F0655C0886C543A4D640994FAC6462DDC85343766DC16592836BD45007D36CEA79C808CBCA522A82903F99E644692590A35BDDB0DBDFD008C8EED40DBF6CC6B3641E35BF2D94872A1B000F1789B4676FA70D7ED03252B7A1B3187351F4056591B4EF7C0359A4FDA9D959C4C2A361438DCCB1CF9A05D6ADF3F7B849F3945B75AEFE303A61D67A698F56B523E100595C18D7466CCCCD0C01C0C022F693B8CFBC680B333E9ED26F4238C1A6155B7B5F640CFF2676234F67A9C77891F1C319ECB8D03A665AFF83D2863187C1AB0ECE7CBA793C2042DD326E671E5B75482AD06C8E7ED2B6EDD1545373E46A17B7B25C50735E826A826C4710EA558B33772AFC0D8E46F0A08B6AD6A72BE5E187C75B011497230012AE60D378780AACBD2254C809C31895F324E5683C15B53EDDEBF83067B3D112F1E2C426BDAC3B178127D1C9965EACD0344D38271F1C672A405FE779119B1EE04A55EDD16393A730F7F14AAB1F67ACD06A4F476BDD954CE2802F659DB024D7678DA87301B8027B689EF8C65CA6C540E2478E335B92E48A5AF9FBB7A2992C233FFD4EAD65C204ADC463D61C07662B6A4BB22DCC141CAF487C0060B4863A14054CCECF5F6063DB59F3A1D818BE98D5235AC35B324ED8ADA095FBD821DE0353B6DBE9CABAA7FBE4255F5D335ABA7FC6B2F512A6732DC07BCF37913DFC11ECD08FE76214F9DBD8281FB963596E9DB0CA9CBCC9E26C3D4877F98A47FCB0D0DFBA53D9B66489B30910C7AF0FDDCC5C5262993151CB1CAE167764AB683996F24DBBC7433C38AC3F2AAB52A9477699BFA0F3C5352D6DB2D3A0C957D486866DA408E39EA1C6B27C2624FFAEBEB8DBF4861F74DB98756B292410043007578031EF7CFB56332D01D8B2FF838A635DA217C8F3B6B0F4271B430B48BDA8C670FDCA391D5278724248AB01FE6453B0E4054ACB8640AF9224FEFBAE42037242A6E97E3AAC9A5C542407A6BA134CBF4984EC78B47FAED60675B9E1346AC0A907C1734DB2719396307025082ACB0B55923BB8B7A7C062416C1034D93DA8835E5C3C140DE7CD468C3E9C43F122E25939D639793B1CAFC36FBC415BA12C6F496B6D519E2C63FBC64CEFCB616345847FF54D13F9BEC54A1E65A513A6A673D0A917873C7B301A5A5263D2AFF4EFE5C98BD9EB3B9E767761068BC0BDDE47FC8752977D398D421AFBCA26165A5D3A46C079AAC29054FA7B5C4A58F24AF6E81720615B263C0CCEF14313E2899C578A4BB1A358A9619B5738F3E1CAE044B55B6E50139068E46BAB18FDB68D7D23E3F429B2BF41AA4F108EC0ABE18478F48E258F67A3B5776C3A4721F1E0DF39156DE03480A3D1FFC6127D4733643121E9F2F49A6B396AFAB0895BEBEA4D4A8ECF35D3A0D390D3F9F12E0B01B298569D1231AC27EA87933E0F84D6CB782CD322A7ED61F9950009217072B75835072144DAF4CE13878B6BB58A305F302F60D232E8FD0D309C478C0F8EDFE8045D5774FBF31227F239DDE26E0A9B2E811F96FDB344474FAB3BFA69FBAFBC682747A20D324DB7054B3CD060841A021C13786961E3AA7E28767C9D013D7DDB7952CAC92C589DE0F374959C2F4FFFFD10D29FFE005C5A52B2C68B6AE8E92E2E56064D18A3D341272F1A92558BCE784F774B47A7EF238362710048C0D4CD59811078059B24E241B70DFB64F21167306D4BCD0BC9DEF69F59BC71DBC5B52369B6464A808976D050F00D4EF8355697637D64F8A361196B38BDC483D3F03952AB39CE9409539723E9828185E1D9E09AD557609FCB50C48E7F00C5D2F995BEB85EA9C72B5FDCFF6DB38CCFE99E56C282A22727ECE0095F78049FA6797ADB999E68467415E8A14E2F0D9C43CEC37C75D620C56A2D299320D9262D1E2F3D656DE7F6B582DF74CEDAC195F1FAB84BC3EF3ED1BFD2F6A6DBE0114E3C706152DD69CB365143CEA1E5123910FDC5415ECA1DDA224A28B8CA3EBAE08B224A524CB3D6A762A153BF18A605333DF6311583C778C371A4CC726E67078EB3C2B448B7A9D4C3019A8DE16389CDED33A3F35EFF2EB9F9BA76530A0D35A6B5D96BD5BE1D42E866C85E9DE94DC0B4B38F761D43C782CC72583A2FC5DD8D8A94D462F0C8A98F5E5FD4910AA74955 +Digest: B727429B76E44D719FDC4ED2D2215A52E8FCF7C3C6AD9504C39B9BA836B82EC5 +Test: Verify +# +Message: B678572BE45ADCD9509222FD3FACB725F8FB44F4D9A25A0FD0CD95C311E9F1D4D0AFB615E6BB9BAE66A25625ACB8B3D441372BA16DCCFBAB98BA101ADF9BD97365E61CC97E243C04BE521635C2FEF97C4BF7EF1C17F3FFB03F684BC680223829DB92B97FC89466783562DA56F3ABB1DE99B244F8421496A9DC618E4CF77FF6C56837C16AEE17D809DB37BD2DA821AD000440EBDDF468030FBA8A91921172640AE825006585959FA661B621DE4FC8A6583B2416FE00527CF7CBE8C2F21C0C831C31A2CE6A7B0107E93EC5905273A6E20AF09B201CDE70DDF66D456E464080EAEECC97161DFFBFEE63A6BB7410BD74A1C079E48E80C68903BF78477999704E856ED4BAFB54DC339D827B69E981465147B27B685509A857BA8666056D6239E7A7B559D7E5FE0FED3C92566C6A2679AC1216EA43602825714E0750D7298040B8C168557D794C8E18CC714468F462605D56ECA2B8F4C681CFA21348DA3FA87576CD1E09C5E8FD02E5510241A8A5091FFFAC341B12C26AB56F570AA2B79B50596EE695BB7112CA98887827895497682F927D7020FBCC0B6F6ADCD89BD563B08073BFC6311F0932E33DF27FCE486076E5E1FFC0292E5C83544C70BE1B6D2A9119F091A5EC63A4FDF2270A18501A078EA01DBBCC63E6F4D87722166B71B9D140DED79505B81CE64C2B98E86DCB849E33C299E843609B37071FB700B54A914C2D3E0D742820EB849085400BBC1C8320670E5599FA9B1251AB9715B8DF771E5E1ABD29BEC7C5CE68F6A821430FD46781F8073DB1B5D715A5575A243AD26FDB2FC1DDA18777B11DFC5B2FA58C5DFA04C1440298D1AD7105D0E9EE1B56F97A8A7B2E5B21B14C2D695472495597A340AED509CF7BF463A37A3152457E2AC6CD74138168EB3F3E13C5DD491346BA1146CBFEB049B4FD73FD65E7FF9B323A7089E43E64B24DC1CF50B97B600B91AC3D2F1DD39D014EC4D7FC18B2A1166FF19C5A4E7CCE84D3B8D4907FD46A49FA13D60DF009C9CC4D266C7FEF5F2C7D7888C3667F656D3232D903FBFD4D8EA8DA9FBA1465F548BAD42BA49999ADF084A4F2408640350DE3E664BE34DF3E0F09C512B158C25AF99570732D5AEA76A330B6CF649CFB77373351138374F107C93E503C608D58301C3C297328F8C6B372E3AC3A6691E9906E7ABB9B91B174E28EFA0D19C3B35AF0E1AEC6C15D2B4C57B0ECBC3FE9B1C8E413C88D20CE68C5BB9D80B8A013BC26091807A175DCE291E9C4B262CEABFE209236D32B0EB6E2D817A5904A9A52129B0FF357F3758D6AB5C7ABF0B10AB638C2CA276EDAE30D0416F589BAD2F3FC7C4DD30BB56F8FD69F1D85D657F6B579F947269E3634C12326B18258B9F11B2D6567446931B0C78CC320BB6C510C2D6E78F177580A84C6EE308EDE406D59CE225B1E5CB32B40223417591D912917CE06A691BDB78B12F758E89A3A875FC689B4FDAC0DAAF7F50D54D5CDB8415BA3A59A260B7251D4C12737947524F4301F208F58529E0CE00638747B8AD5FE0E28B63EEE76056B38ECDDB0F0508DFEE5D7A1316F5B48A5DC980A256658973FA1CFA5F419BDE235C8591E58DEFAC38DDB341DE1BC045527742821BD280E85EECA3E3CA564DC7C1E6952F243F4C38B8627DDEF350FE37695490385D0D409910B707C708CE4B1473D247395AD7565360CC00F30E84451609F4927C8E1E704A6E6F0D555784BE24C2A3ADA3CC4A1E1372ED5F0CEB4C9C8212807EF7F43116077BBB6375AF34F23FA2C88E409D3CADCDCDC88F84974846DA82CECF0DF4F9CF08F1185B19664CC2A033C6AD5D444F45C2A4C613AFB8BC0F6B495ED9DDD81428C3CED515449FE027586099C9237B3BDD567F5CB9543B025409502ADBF61B3DAA48AD59EEED57A36F2F7F716C98A03419B89762AE8CB1DC76CC083526C71736D35B7277B04BEF0AAC01262219977E688D3D05FFC270B63190D216A593AF0DE55542F72BCF8A9191E1C5F84D9B47CD9D2ECFB0B7FB653F3EC307155CA386BDB7C94487D35BA65B44D4C6F49AB342BB019BEA05BDF3AC088FB44D66D6DEB253E2C61B2BB1BB0142264B9CCFCF2EAFA4DBA23FDCAF6D14510C4D9603A8343D25EA33A33B6B863C8C07CE10C928D2B177C380553BB5FA0F16C04A0C129452AF773E127D24D94832D87D69AB9EC2AFEED5F89E76A0AC2A1EBEE346DD8AA2163F090A833917BA9486799B3531FC53F19A31FB98564807DE1D0038678B211CDD93029CA8E469D0ECB36E32D7759630B60EF77E18EFC2D1E465BCE64734D4B558B95377A27F2D5AF5942C23858948427ECE2D5B04E31C000043540379545E9C678210F7CE25A2139764173A986341448596A2F83DE6C7C34A4855523BFEBBA1DFCAFC0AE1796DE179946CA2AFDC05CE542581CAABF5A6EAD046D7FA6234A6FA8000286A547E8DDA71DB2F5E0EF811CAC5EBDDFCF94B61EC066F0659CB67675EE310F1FAE8AE6403DEBB2CAA7A611CA9530AABC10A2D3714D6CCE22A19F86615044A8516693181F840478322ADEBDC32E31AD78D7A391F20B621660A04556BB701414D30E9E963CC74E5C55E83A1DCD05EE20CA0BB5949AFF506CA388E1A339102B10C7FB234F2DE170F21E01DD82A41014523F8E2E8C79870980EE09B8FB4D48E5D7789E9053C3DDC3B1523810225B1A3E52BE17E0C3E210ED0D93FA99030ED862462EE640D1A953550AA46484A1AD16DD85C1DBBB3AB17EE683B7E63DD4C62FD293338E3061CC84249E4FDB92FE9653E87EA103D009CD2D6919583136E64574D51BFAAEBE4871D680C0A235ADFF8208678E6A989B015DB0047A0A1312FDBC2176D93F57BFA7E758EC7BA29234B93BD209795C436CFD8B924ECE60F4D589866B059E43F9E9C8F07CB15D63C4A50A765124C2D01A2131742B207A28136375F0279BB022593E82D82514311E75CE0F6E908B0CDA92D43C26A08C8F6B2B621BBC7B97829E87CD7482E14E1AC8AA90C9901A2C73785774B6D33BA18C101E788FE61E6AB4ABBE680C298ED338A30CE6E0C4DBF868625DE8E0F00F4D5DFD9BCBB11531A6610480DC561C3CDF9324C31DDE28E99118DB433B8EB763C2B03A157E3CEFAA60B0AA1CB67EF841334FF6660E9E2BDCBA09DCAFEAFE22F3C6F1DBD2514B592B1842AD3F3463074E28DD954C4DF2FA34B7EE0DDF1E8C440E54EAF4D26800385B54742CC787D5339EDA6E7360C2734E0727436CEED5E2533BC461FEEB4F9D47D09F1EC83C379CF35895987D28E733ECE8787BDDEF2F9180EF44076035C8AAE41409E63F1AFF68C307FBD11C1CF9770044154D22AAC910714BC827DD8945DB4DAE64DFF2C1F81EC3C7B348431837A32EB355F2C2BDF3EAF2C6181F9A6A77657EB16972B97CB32F5512AD061469A9D23C23FB1CCCCF8B37E5C82414A0EB29E52671B49832E176E481A56AAB2ECECBE8745E6008DF694EF1F12AF1FEA57B3D160EA11BBCDA04CDAFB5F3A43F1A8FC4C2B41EBA4835AE0FC1DF93039C90E58D2AB116DA7B38E63024A95FD1830550A1235FAF4BB6B5884E0BA6BC138E657465B2B10096935A1BE44F3E13BD915374FB101C92D0F57C79065754B60FC5AE3CBBA7A96A48CE110614E7BC6C37A23293A72E0AC9826E3852C0BD5EAD92549EA96DFE63EDE8DF7829CFD6E6B9DFA3AAD7581BB7EA4C2C554F23A127D05CD0944E5E18530A556688C7FD0F9302891F39726125221D58AE177BB684F9A1767A8EF24FDD6FD57708FE2DD5EA6DD8E3727C9E5B1DDA9E30F21A06D12FABBE4777C17B54BFA676F59D77675D0F20171B2490FFD161B83AAADA5DBB85504EE025C752A59C45D0F011E2955B5BE338DEBD6EE1198A8C367CFA15FA911CE9CA277DAD7CD42E81D07D869F3BFDC6B2DBCFACD7C226033041E771F57AEBDDDD054EDDC6FE18A4329B80E165248ED8AC60256D94A70E40E08AA8578A18ECBD76A074C9F41C8229406C2FF81880ECD8C62E1C231CCE8D28755C79AD9C39B24BA9AB9A2824D7D1FC52A2BE9584CE4F565CFE46EBE21B96849A53832DA4A81F4FC676D7562441289B0732927F59B3E5D52E23942EA37F4637CA725CD21EA73B37B13F12C05E425D713E5D89BE4D4D89C5202EC6EADE11324CF136F1459CA3465A0EA5AE1F573FD1D3493E88C1DE739D6DC2D35F20CC5CD99479CB8DAEA1A1C09DE9936457FCA2A58D7E68A36C337A272F9A0F6BB13A2CE61224460476325581DF2DBE8177176D80FC5C30A3077BE64AC0B4739D79C078907A2E34AA746BF128931ABFBEBF1B682D0ED0574064895340B224E76E3D9C94409D6C109E717D82CAC8A1AF6DBBC29CE2CC50A4D29C4C1949C9AF3B516B7BFD819D43EE872D2AE97E94D311FB71212D1F6627A3E3FB28FFE093448422A75CBF9CFEABE3961670861E1D7B75665BE7C922EDE5535CDCF37E9250CFF79C5E2A523C851786E5A51046D15F09601E5085B0CA97253C3E2CDA8497D47DCA2696B59C4A0C7639685032740CA625919E4663E0CE467F06D86CC57F01F4654C9D585F15BD25DE2529E920C0BD5466B1E32B86A7B7007B43AF7A6D9F7CBADEE2C31476B6A688EBC620637F8304B3EA264C6D7ED986BABE10375F4BA5B3A7C0786DE7A180CC317D5D34CB9CB11FA4500B45FF1DC53E4AF9CE493D61E7DA8EE443B1CAE06330E2B256333FCF7C016460448F4B6CACFE2974C25AF67F1C0C063749867000F8827E249C666A9E7947262AD04878D4 +Digest: 6B21CD14697BE746F33978A146B4C96941A0BFDC512291BC9CF60B8CF6E951B2 +Test: Verify +# +Message: A39755551F6C4DFAB95FD271A654075C06E8FEF48B37BE5CB4DF7BC2D97D52F9D30B2CC55CD3222C90A923F6E07901370AD387EDFDBD5F2A187521E43BE5D80C796335F9A743B26AE2F18B29F72D564FB281C0637F899359C624D0679F12608D659AC8341136760C3AF502ED34AA309FAB151DEFBBE0CCC654D5DA8B3A329BCCB59937A9DD5E5B99CDDD471C35416F91420F239193A819C1A5D85343E3DE424CAF59ADC0F51BEF0A05E85332E88727B41D9D5C801F26CEA409E14EBEA859076D96E1F5AFEC21DE5912F554304EC5AE339F39FEC0BA48A7EB976F9CA581AECE9607EC75C61F569635740D811DC136FF8B248E815FA3F75B58FED3C7022D1D64F6731149957A21A4CC0AAC1BAEDF7E5FF92F396FE2CD9C5CA8A082A7158A8B55C3073E31A8776BDA03DED49A4C5DFE3999F34CF371340DFF4A77B58A922F63CF673A8F7F67B4EC65BB5A365556FC86FBAB87B14E7B4708E7591A96C1D4BB70EE247AC18355C6836D0833A9AA8E4E6E7619953D2E3B1C2E7908CD41F6FC71103ED15F723FEB29337653FCA5F017C828514D4D47632685E0F7AA33CA37FFBBAF4B513E57BCD24237DF2F377BB6854EDA66B1574882DBBF4785B6CD36D9CE3431ED0B545D9605DB99C89FDE0367C99742F1D9F9E52F7A7AF2363A7A16399618AA4BC8391F8AC848142203B3CA069394AD456FCC19F164DB273263767B61C79A1725A97FC95E42573E57991F49D63F508731C3D9F0A00FD59EA3EADBE49200740AF178336B33B7AA139AA1DD6D481E3FEA7C6D67EBE76F49EA7E1AC7D473E6AF9B3F212A56E0B0B97A92EE733D86132D6FFBEB72332D6EB0A4CA6621A2031D473A10132A670012916D7F9D9E702BC4727010679AF339FADD3C1F6CE2B2E51C6BB9B221646ABF93463985771451F4BF0FBB775B363DE2631AD0401DCB699BA2D84787F4EDDEFF2CEA56D629BD922161A03FFBD55E9B3DAA2DB5C4489D1DDA1C11D586FBD1254F792332BE3E7D833A0AC928316DFD63DAB25D351D67A95DA94A4486C67F23F243EA30AF8BEE30369983DC21EE66F0382C8A39219C20E7C0307FA26E957C79BCFDC3970BB5219A6C179C6CCFAAA3E47DA65A8336D2433440F669C3180820CBCBF06D73DF0A89224829B00F3D0CFCA6D96B8D614817940AA404E7DA9360057A339C6D4A170BF245559D57F63D4F4FF9C229E7E36ED72EE9E75F082728BEEA6DF3E6D090F7AE14FE585BBDD4E2C15155421FDA11677E5E3064D4D9F91C42EA9576216BEA40AB5030B511E979624A95D0B81577B3907B89F92BFCA46CB0D61DF0E959106B3E689A79E811D82CEB189CB7482A9E2BC578E0ED9657F947ADBC9EB6DD08959680E808829AFCA799D94BD2EFEFDF7A94647788C4365A4E65CB81ABDCA38B097D5026729A0FF08DE5015737AEDC4E0DD764ECC25762FE8DFD4773463B24EBF2B96D11BC2FD78F43D704E30474337DCF6D522020BC06F44BB4C526E2694056CA3DE4BA2BBFA9A96914C7F50E9631DEB193B20649C6931AA7A678D32C91CCC7471D85EA6537ADF386D8D699D833A40253844F9CFD797B37B46AD46CA98D9AE8A45A689A431C8C4B12689A7127579BB7C94B4B615EFF168ABE3EB3F90E077C65579BADDD6F75620E6BF44D0D80A7901B4902CFAFC27398605141DF1C184B3AF0FF42DA7EB257560EE0FCA3504635B8BD4E294EF57136E033446F9C0ABFDBE83DAE95F756BB68DBE004A1224211F64A16E4EC053B84FBD6E35C03B61DDE3602F04103DBB5E08120694DEF835F8AA34D8A274E2480C5B84B1032566F6C3365F133F05191BE72C4D5C73AF82EFEDF457E6B8DD7D470F05F2CD5A3264667C5C4AC54A3AEE931399C6F7D069DE4B97E8C97865A7E5DA6DE0A8F7339AA07C4E785535D453479BE36A064CAD14E023D6231184422AA70A7330E2B8D3C26CC2B00D45F6FA7E4A9A604C5BFD6125D42572D67AB5C5AAE10D35508E5D823CD55131B23132EA3D57A2FB9DCFA1D61E393FE5BBF30E84246F940AAD70FD1017D598F68DA8F95FB256C1429C54F9223ABF1CF1E0B94FE40FE680575D117193A18EBF8AF360F943961121440987CC3436CF2775143A0637C111BE2337870238B59BCD1DFADA589B758DCF56012FB21E9D9B0DE0BCA185498A61E2FBD685DCB8FE131ADD214F9138443EB34EA33265E6699716912D4EF8242C60D8FC710AE10F3A5DE582F9328143138D41F598EF732C0CF911C54E1137BC673661D7C90C6B2A68B0A5C64B342FE2CE5F2EC5D04B02B5198FAA22A6A4FBD8C21AE31195CAC27C9B712817A1B81E50CDB4197C5944F298F057DE8512F2AE76E2105FB24BD9E922E61307BB7685C56D0DDCA7496B3BB363169C3124713773B1599BB6430A41C5F157AED3CDB70C9BC5B40BF4BB14B4B745048330B748B11494AB7DB9CFA0C15419326258A78CA43863E72679BACE41A418B0E92635CEFD511101A2B1512C3C98DEDAB0730A364F57A19CFA389847C07FC7F56B4EA145068CFB8AE502B0301A4456E67B7D01046E69B20F3A813B3273ADE28F766FD5D6A6FA785395D0AB5F61290D357472485384DD1464F09201E18B47948A38C70CAE841F8B962995969C33FABB5373179468D226FC88597A188929460296260618D5C9FB87652BE9644E593F0F56ACEA66CD5217C5CC69F42BC242C669739B3B37B78B907A2E534C49D1344E2F42D2DED62D6422C4416F4B60CED55158303AC5089A6CBE2AFE79A5335843370B4115BD8D6555921508C49A156AD7A62BA4CCCC521644CAEF11BE72F54CA4C5C66D8EC6ECE28F25811A9EEEA8468B2EAC9CC0DE6D079F13A3B6C33A08A8B58DB8D7BF7B04D7650BE0BA4FA47D38686BA22C3BA1FE244EFDA614163F717728C6E2B0FFC333FE5785EEC440A955D05A8F14E9F3B6BD4DD520F1EA719E86B75F5B111EFC53992930315A318D4E315E8784E0B44CC0E4F579A82B837266B2E5826BA0BC2E8289272EF40CE7997FE43D60AF8C424C16DFA113EA56815B738954AC29E4076657A84A5C49029E6EA346E7A631E6CE39805EC920B904152CC2544E8F6BA5CC1A3389FF0540A5F45300EF892BB5915106AC521A555E841326567B67199C20F2F011F3141EE3FDA1832F5C62D58252A3F599E8C2C5433BDD1B271E3A8060EEB5B188002BD6EB5605A856D8113EFDCCBCBFAB5AD75C91892304E2CB7F26CEE133713B7672FD0A3DFAC07D82EF8DDEE0D2B0C6529A5D557789413EA4AC2FC3DC5FBBBD109F42107A36EA7F6B09E68C8DAE2B9D4613F983D7235E0473AD6790054BDE0E5E843E10CC5E5589593A939776A37D6EED42FA639F8FCE9A43D665E284E772DC5623EF390635126342797167A6EC6E5345976FC3F431BB844E93E5DDE86EA7E2BF8C6CE7844559AEFB40A0BA40F6922E5E8D68375279CEBF1B4F66F56E5352F2CC1C92DC606A039C95AD85451EDA717D81EE4D2D25B142237DBAA459ACFE9656E666D1EE1F7D8DF5BA11AB889073B221CD7FE987C69748FA0428DD89BD6387DA5EA87BF221A0C265DF08253C749D00F06C025035AEB9A1F41360A29E952433B0959C44EFD7AEBF7B4CC9E6FB0D784E054FC9F1E0427A912026CD17A1B4B927CC294DAF9F176465F93209A057F9BC67B22FAEFD9CC9AD78ABA7AEBCC948B61B81A5A7DD78DD7330C042C47338D8CD9F4C042C8A37BD24B62DB88B194789E4B0035094F671A460297FC7FBE314DE5EBCB88206DCB18DAB3D7392171B2E09060D2A9B6B26B8E2FE8676E3BE8F709DF5AA016A4737E7B3324C1AC499F81994A7D2ECA7B3F75085188211B0A51782292096E3C2D5C5E98D3C9F61C9D8054DEDB2A8C556BA98BBCE3A48ADAB0BB5C7E113BA3C036E3756A3288212A437B3397C665617078E47AE90B53A304E7A5C235D227E83205AEEF4EEE39AD3A60A46AF22AE7E6A6E1689360DAB3179A05D7516EA8157ACDED8A5A20B0853A8F7A7EBE160B36BD7759A0C1A0ABE45B10240FD1F350293D246A912E15BA34BAB9514CA55F2CB138D0CFBACA77BF1F7AAFB29F438883719F9D9B64466C58054B006374F4D1E5999B8C049021870E28380915E8B7ED65817B27992762F79D12566711239F7CF9D7471DDAA3CF0518F5C2364E514F671AF482D8A907CE82BDBA20EE9CB767A47FE6C86C35057E2DB250A7E9643E5A3BF2A9E28503F4B419E96B1A2BE98FB4415630FA50B7EA84D99D91FE96F0378797E03B8ECD8D8D096DACC5030AB5181B262D6EB3508AFA8C5D7E80DB97D9F353D6C56FB7665A9A71B2CCEECD327850E9398D7E9E9B9C3D10F5C3B29D48C05C7BC49FC01AE4EA1641091267A1CFC527AAE482EDF3210292C22D1572E2F8A99957067BDBA2275CBF3379A290ADCD326798A7A4412AEF242B006311C2CF5F8673E13056941EB67AB65F753FCDB894FC646F71BA94D1A868752EEB37DE6ED5E83E6A7847C2798E99FEBE70218284C5BAD4B7A1D0885C3BB8F02E87001F412375E543F1A3BB32B5E26DD688ED671D3A156912D4FC4C490AC540949D1EF236F67C0749BEE7BF82978B6E4BCECB349CFBCB04D54A34885B8918E330C6770F705D092BD0A7B89BE7940D9EE67C00736DFDB09BA1BF633A2AF4367F87C9D9933FDF4D0A972C4545D252483332BBD4E23E4E574615DC2576D03B8C2B76FBAFA98606827D76BF539BB1269CC2E8F4978A6F7E6B8D81F5E6B9103D983358578FCCE879DE01562F6E1BCC48C8F564C4C54DC295149C94E8940817CC96C06EFB488E49EB07E9058BD9A1BD +Digest: 002A4415BECE7C4252914DCFF485297002030F5EBC9A99A1C9CEE138E92E2174 +Test: Verify +# +Message: 8FFBDBC72C180BB8E1CAD93DB145CED3824BB260C8D54FC80F66604D81135CA69CF43312A6F08E851885A7C45064906526FE0C2B36EE91A3F7CF5438FBA36C9C1F48072DE0F40949A6C97C7D2F80E511E88CC9872396CE0385D599A850608C700328EB00B141784B6F0C3E9B2E1FDD856927A0A2FC8C0B21EC63F21406A2C8467283328AFA1107DDE89E157746B81259422A96BF13362328D660589F7B7B37E8299A24D027A95D526264256C13B2A69092CA514DBB36C503C47779CE107D085D64C9E4C6B3CE8776E82CED72C572C1BEF147C10B34840B56DDC0A821ED4B324ADF463E2460DA39774B8E277946646488358870E16F901FF4AFA6CF28A334430D43C9832EF2D1225BE7D8E2B3B2AE08A2332ABFBF9F2DFC6446B7D8F6C5D86578443E4982A06ECBB591B656EBACAAAB2395E48700A7467991DE82934627FA65F91F076ABD169C1F4DA8D21FD675F2737201FE056E69BD06E42E3FD0E9DB305F2AA2FE41136291780660CC0D2F6A9342BC1BD29A7FC9E86665FEE88013725976FD8EF4BD87BB6A10747B4ECF698AF99939E4FB5627EAC5CBC95CFBDD8F63D32A1BE469B5945CAAF19E6E0ED0580D8A12AA7F726E804D79C4F4D8F3D1E36E235700A0E813C40F06430403DC8402FDB6C738918DD48B5C35DEEBA1E4647F9685328320585330810E5D0BA593021AC8EF8D06CD50BBF7C928E4A70FCB52F8799054622DAB6D4C4356EE71ABA844F2E84D3F68619BB2DD11601B0DAD486A50A3064816F0ED4B4941812AE07FA255461F87043D9AC9D72B9ED06A1E943AB6557CCF8FEFE3FFD0D50A5E8257AC00CC03F85E5DC4E6D212F48B0CF0A2CA620A5D4FC0796F82DC57D933AC044F8BD5BBBADE8D305DC397AF67219D3E6ABAD8049FE7E08FDD5354BD94AA29FD19B102F268666F41B052C8A17F503056878CB64CF7780A0412480D2854DE7CA943F95F624FDE726BC4BA9141583688688A23F18B913F27E5EAC882E3E5A1D277130F31AE534221E1385A559CE840B62BFB6934D37989409ACA6DE066CF1DF56C705997A3CC5059AAB3603C37F928692020D4034D79B564B16DA9FCBAFF39773457C5525322960AC0D9992B50FF608E5E43566895001D3555B02EC4BF9402C8EFB926E262DC91C8D2718A7A6FC33C8D3B5BE5E6860A6C60528294776B9676779B923A8346E1A931EF743FE94A139FEE6730FC939966A17828B432A5D966CBB8F4BCD16D0B069F19FC6547CF5B3F7C991F3B2BDA77DEFA62DA097BA96D79E2BD11141E0BA6CF7858573E19FB360F8465D0F391243D6C6B824C6B976AB974816F99EB8E471D6AF611E53623EF46420F8B3696B8314DE4610FDB7184964FB7A81E0247D8665BB4EF95613AAD53AB2A9D145B6C638CF141D80CA2A3DEE4F735356DFB700E316F0CA25CE031110017868B2F043F8D7D9FF62B493FE6E702906D9E226606744A11EA95F1B98A94BCD7C118B4AABEC94463F47A32524CFBC6EE310EB8CF26033C89A34B821EB82D566A9D4C2D779B5B8604FCBEDA4470687DE098CC7599B02062776AECB09B83E42FD4A3BF991ADFE4E1043EC8D32C98B5B7E1255476C7428CCBF0C34D6AEEB3C438022D5AC49E7462DC3717CD88AB0B24AFDCB590318D2B9CF17A22E67FA16053883879675DE5F22A5ED87FBF3C8094902F172B6F37C6F93B08B9864E756DF08452AE2EFB941EDB04D1499F6DD55CAF75798A1D229FDA3AD168B31B235150D5855A6E7F43E2900A494AEF27BDCBD2C1B4026603614D76C14837B973D8DB5245DB7BFCEC90E21258341FED82A469F679532A0ED9E1478BBE15F82DDACCCCB61BAD1371BC68C1355F434525B7E0E842777FA07F74FE9E40B368E104C1B1D9CF21957ABA0442FCF0B75E9CCD0E98D3D6E9E59F843F7241A75045F1CEFAE5A004E6AB793830519980784F0E8233B129F3D90C6D08B0A90509222692F93BD2EFA89E17A3C8286E4207D2DB56BF4405F070059219FAF85498C89BFC73832D259104AF74010A1AF81A2CA64EDC3724B8E4A301ECC0B5A77046798B8AA4365A955C7DD32B77CF8BF1E0BB2E5E9FCD49375C5D5F48616F93300CB748078B83BCB670441C471D8809A9B4A28AF90E06C37D0E9682B7ECBA042F99D1DC90EA2017A95CEBF9D9E9830858209748CD5D9D8F11902942C98C8B0D7A331767DFC95994E37C74399C1E9BD52B26A424E06822329118FFC72F0A4ABB3F5B30759F488A90EA8A3E8FCDA641A611483363608422028C25298FB1914B9753E8D431A561F3EF03A82C80A16DAB4ED32895501C2897817AA3BFC23CB69E0C127A1C425F97AFE7875D43EF6E69B4B14D275F121042F8399BD29138F2AF0DD3F23604DE64E84EBB85256DBA52A60B457C412BEBA7BEDBAEB7DA0B4D6ACC4FB1CD22E6FB3595D8BD01D11345D115021C55908D969FC5234C8069073F037B793151C8A77472BDF684811FF94F81433AB16BCEBF248AE1B63BD24A97B3DDDAA68BED11BE2ED6CF7ADD13BEDF2BEF732F0BB89662AD1D9E713B2696F915973A153B31B69DA6EB0152EF56763BC83B1AF6D6D094D53E1C0446DABA384437CED200C05DC774888298772A51AF65C13CAE2D5EF740B775BAEA428201D8B27C1DEF5B9F1ED2AF412A8B9A6840EFB509E22DE4ED96435A7C940E2C323290666DCC193685692E859F7C15D4572A0CDA2EB04E22D70BD799533504500273E0C1FA68967AE1EF5B4A221BD3F2F281F5E4E0FF15570181592AEF517647CF90056BA123D4742291088C1AEF87A0DF5D5DF7B99CA406617E9A6A5B0F4BF8876E7B8C88A9E5B77ED838E352D1042D4145849F333475C8AFFB007B5E70E09F29F9383778CB0243D72CCD5140827FD81930F525117BD016FB53F7A1E05B8C5B1011E1EFC00533AC4521C5F0E35DDEEAA2316BCFD60A7021AD2CD9EFD4B3FDE2A8F9714A1DD3C784B9C26EBA229DA28448A88B667154713AF22215062A3C8461FF863DED54D4CC99C9823CC751A707754B04C28B334056DF37B958C9ABCB630A156179BC6789C1155B552DE5D766B4E9D65090036139C9553EA91121933A285FB0E43390C22AA3932A69ADDCE2DD8D378D7A28FE8D4CC964F8FF4B38A3C3CF6BDA33787C599D612591FED6640BD23A8C205D7DFB8F9F85B74D084819ABAAFDA5F89BCA54A260817B08B0B71CB9377593E4E2F3DE236CB577610F122F2CC42F4704CD9D27239FE2D1266FF3DFD5401077357AF31DDA88E305982E0E108F9F21C83590617F77CEFD164DD32B9DEC452DADD519DD663A4AE0CD572A1F7F59FDF5803F864E5702DA7D0B6B591897FD68BD3F2554B1AE042D4D6AFA0EF7910A20548B291BFAEB454BF1B94601A8648BC32CD5411E20E2C350A2E01B9F544DAE536A7C3CBE26E8C06D38419279608145C478C0D04ACDEF2E9A96CF3CAAE3B71B74B7DB4C8DBD2B877D50DB7418A1CDCF8B849724BAC125987DF16FBE0FFE3AA2C96BC53A9F80463B7405C8ECB0CD99D6B0115747F80F2D731C713467E74C42F132DB7AB2303F434DA6BFA879C96CB2A4094349784E608C7E737E081954572229A4A5E5859DD63D1551304EBEED899FE5F697CC3BF1C82A8B2920C892B3F4CEF455D8DA916F379901B250A58A6F6F096F0B6765189E3D066C9E29318CF3E789CAF9131F26DAFB52EC57C13432E6B99595BA51822E95C78D2DC06ADCC2673DED9575486C8CD5FB1D8E445BB433C32FE6B552F9B1A3E3D18E0EB385384DD59771EF00135F2FCFB2FE88B22E9702C2D816EFEDEBE5331B3328CAB83A21A6003826FFED2A378473862803B788A4D3BDBBEB2F73F542CC42867EDB28CD9F6DA5095F093251F78226B4AE1E7AFA07A37272133ADBE0F39C3A8FDF48FACC4298C3AE3DA8F9DBD539E73639284386F2A6C31FE671E07DA65296CBDC1286563EF1FCC5C978F5D8FC7DD8313E3A80973FCBA0C4343F1571563F2194299EB6C413315C49EC33698AB2E617B604B5A4A5D7FB4064773E9659F5DBEC8F6C49A1A7815E2A17B73B139FC181B46335A830F4F0DF581778EBB671ACDF7E5069793EF51997D5E96B55D4D619B73EFD11C27304CF718CDC2D66ECD1357F457A539FAF8D6323202D8EFE2815FD6E6D74B2E50529F089CA6FB3551C6094A900F3356124C67E8106DD4C085293E2881E2244D2922C8A5BC3BAD9A9784C92E2C6E540E667DFA6CF09D20BF949C6BBDB00F306B6AB8922CECE53AEC04E9FBC3E532962746C625845C29C6A7258C4A33FCE4F8F6CCCC036FBF6DC50C2B301684911A6631484124E1ED1CD1732CF6A45C0363BD4105BAC43CCD84F67B71FC459C81B2FC5CBD263074E112BA70D32A00431E025B95D61B55758D5AA041300E59B2E8FF16A7C5E5F7D6BE260E43B24553379E82CC14D9CE1C09DEFFD7BF6D6774BF392814512D4A34D9F576884A3EB79F71991DFD660FF968111B55BE4CAFA38F143CEE1FD6448B58C6EA7343CBD0209DA88D2BD6BB9AEEE730D317BC1E0FD6844DCE0A2B0B53D3149F7B68C52BB1A919539452A212930BDC69A37F8218FC98D1288E8522B6845B906F51B7E5ECBA1F6756C25B72CA0FE09C2A5736531A4B0DB32D22ABF9C43548987FF3E29FD33E9BDF8C8B9F84C824E58EB73AB9CF8BAD421C0838C734212268E5ED735DD28B087023BA4A8C89DA7D41E3F46AA375BF664A614E15ED253432045DE274F9B76E9FA595D68C093165CD00A73B876E8E07775B6A1DBDC8A08B192EA878E05085811728107EB2BCC99E3D7A2132DDA14E728C5C283E6C68349F93A12938F8FAB9E10ED9A9EB3BE17E9A451BB2F482933A92C80EEB550FD1C0CD7C9F3172CE9C0D7063822E449888229 +Digest: 01132F6A2408A08E3065D3E742F4A905B5B106BE1BB44A948AA612A658BE862F +Test: Verify +# +Message: 773A7C56FBEE9CD3B830006F595FB952E9ABB9D0ED254E54B08B2A0E73B401E3BA8E83F540BB05746546A0A645D93ADABB4FF89A64C163DB7483751C40B56C61650C7EC0EC49DB80C184F42FBF40D892F24B9159EB7E8BC53D1C0BA6C1254E88D558A5454F187EF9FB1F288AD0BD5B9162F583850098711DDF358B7D3F95ABC31D820589A863A5A73817D02563D2ECD75E0846EB175BC63DE3A6CB83873E272406B51046F672F86FA8684E94FAC4C8857B4F55CD9FEE417B7D2EF43CAE47CE08F85396E833426AAC0A6ED244E708E238F78A64866C17A202B2C0B51A136030568EF06A78ED4FAA233BD37EC1DC993160F4A5CB50BBAF0F08BB15BF902AD77E7B9BE0F62DAACF6A5E05B7A34A08B5C7B1CDEF220C037ADE3143202C1A29CE4683ECF3E598F4A575470A51CDDBF932F1B568B9D2E98BC86E78D08DD22E1B5CCB5EBEE53CDCD012714BCEF582FA3C805507327399194ABBFA0F529A894185DFFD4629B7EC8520BD5C341D71E1FAE21217576C110FBA84CAF9E0D9BA307DF84B03EACDFBA9394C9D2C377C075ECBFB8D1D6D60EB8A5E2127410211573D8D1ADECA025343398571089A17F2D0B139AB1EE32B425EFB1B33061D7EEF1F237124222DE3CB237FA1C92F35F1E8DE7F64D9C60FF3293831E685FEC31EA196AF524294E0866B02616697000A92AB804B84230D9346486B2DAD96CB0D88C57BDBD2BF2C05454521234725A2A33CB736C59227F3E3D943E1DEE2F3C45EBE890366CB1AA03D3989B184F936E8DBA6CB38802C12FF625DF46790FA8515DF48F1EE3FE5498BEEF168365B90F6DCD1B23A1E30C5E67D969BEB95AA7359A09FC94D7BD85A40FA2963058C87DF074194766F11E98083A9D963C084034CDAECA8CFBD69C4402F3CD81B54DAF7C0171DADED236B50FA30C464DF23810F9F6C2E1AD75CF99F800D3B557CB18755FDB8A205818DB14733B8067F84D7522FA681C776DD21DD011B2BFBEF34D70CAE9FB0B4AF82C5E37D76F5349AAF37576EB9152F4B4B35784A874F7A06C94BBFB78F7FE96E3C3F55C1CAF99337FDF42FDC8040C5ACF68AB793080346EF96E24615A3927C733A53BBE89343725977FABF3A5538CB02DA203FF4750B23629780687D5A0DC9B439582F7A5BD0DE2BD449252C2F887589865181D4831798B845CBA0CF5BC7371C1A25CF9F80493FF14698455D38B169EC1A0CF3FA7FF32158DE7B2A5C0F589B4588C5961B526F6F6DCC7DB59AEEA63483F97AA50DFAD8C4E14E59572D1EACEC1F3D1FE54870B86F81D180D315E60B99CC64398B8603499226398915D3950E05DC4CC21C9311ABCC73C16DA571DF611A2AEA1E1054C0018BCAD9102F8181199A8B002D64459BF509013BB6FA4B4B590881B764D1580B96302DC0B3D748527F42DCA127D8BB818ADAAE2D3A82B8F2B098829725F2DA65ACB3B7C78E9DE49BAE3DE135870329B9D3C78BB02B9BE468903CDB1D27EE363E5FCA04718B8204FC2941B129EC53E82F1256015D711B0D295ACF3CB346DC44D971C9FA24C0E8E5A4E64815DF0DF3139E54B4C7BE3C0CDC873AB6BA422E81688CF2A84E9A6F7CDB801F18532CE0E3EE128DEDCFF7FA88B9C90CB952FD4D3E52FF351F0877616E6C5223744D7F4DC3C115B334FD66D62AD1D264252D8D261AD951B645EB96FFA6E5C784A1B2AFABA096A58897EB8C375233EA8859B7544B5FE03C2D59042EEA0C53EBADDD382A82272BF6524C6713F90A5F75D3EA385D36615A13D1059B6FADB0663A1BDFE745BFF435E8ECD0E25834E97FB90517CE67A458E0A283C83E0A896BA898773A0C2ABFA91ED22AC333CD504BB3C0B67ACEA45D81EBFCDE53BA36E3D25538BEAC3FF08A38635848CC486A9B24FCD6646E2AD854372188204A5BE8469A51385792B659C8468FECBDF72C7116485E550E34ED100B5D57C155564B9A5BA0C441425E7ACFC525E86562ACBA04E564E29B66AFB4D35BD8798F465FF4172FB727CC2D192B07E08D92AA7A49B5B4E291A4E3F8549DF3B33E5673D6EA96419BCE57474BD591893F4FFA8C7F5D73BF25F93843A2E7F013F1055E69BDA925FD144158AA5CBBFEF9DCA417CB645F0C5ADB3EBDC0C1E9B0D8E0E4034C2F025F11B0230C285A81A3933899351BDA1B0D12517F67F67FCDF35A3B868AB8856056719BFB99F228874E0929F81207279CB03F31FE70815ED7210C9A6EB14FD89AA6EC1D06C3C9F843E0FC3B5129460B753322F1BE314BA9C27583EB37C67163B7CE3D513E80D1EF2D9E7B0F2F8E31DFE8A5F8342957C005C0C2B27A50D6F15EBAFE9C17E6CD9C3EBB0585C494AF5DFB17D87F2F3A2366EBFA32011ED4A8E114E15913E789F36DEF1CAEEB3ED6442C23ED9708C3FD7BA442DF46B09F78D3B604AFBB58717CE41024E8C31C262C6F64DF08A31FC7DCC65367D93DEF55A91CC81DBC1936E231E238B76853CDEF0DB8D0548547F64EEC3F9145920D1E823DCB224B0E37B94BC64993B065ED40295F172DD94151585E1AFACBA5FE5771088D17F323884100D2242B74D5BD59730A387A2E6AFBC086C77F28F21FA83A5F8E8BC2971314C661280D1A2B5B235B77C41C9E97A0ECECCB951C74FDF1A1F05A4E1BB2292CA80257975B0702E6609E55BCDB6343A2489BCA2AE14184A6B872FF69FC3E387BBC1C9C55F9239E7BD29FE3D366231AA79DA11C8B1046A8BB9E5F1A51697C35B4EFCFA5559FAD11A1D39206FDAAD703CD3EF92BE680E0CB53E5AEC99469956FA0AD501CF972457432214FAAA470CA3CD092E1C5A6042194BCDBE3A79453BC3648A9B5F310E41B57868E9DEF6C32FF28562F35702AAE7F709B33436C42C8EF3DEFB839156FE592D432A6C4D02F8C8F70EDE5292EE30CF64F22D422CFA1F03239EEB244B063CF9B9D79638591F4F2F0521A47AE39B38A4FCB3B9FAC444199EBE35D8C397E58888FA56C8D73ED3AB0FFDB3F67A328943DAC4C506D65134961B5C46CAEC01DACE8DA50D34233734D328E3C0501C9A5328C35B61F682C2657CA0846B6786708875E82DF484A39917E1305B4FAB4811C8DC6C1923EA895D6163EA299C61A4727FE9AA46C8672E4EF6DE505F6C86AA6DB739A87CB3C996856CE04403FF33C6557854DFF3503DF55598B53B5FB3B2C49EC55F18CC5C276795EA0ACA8C3C7383175EDE8FE42DE2CB8FED47491539E7EE4EBDC8559854D88E40C0AE6A86AFA9294CB67F1B260727FE4DF47196B477549554AE93D34F0DA596E3A782079465DE561EC89C37992DE03302E789D2484F4FED2E48BA35938F3DCECB10E6B0D5464B9FD6599D36FF5817523898F391D2F96DC23885C7C6F7D56D24909501BF2E26F81ED754FD9ABCA0F349B35556F53111496039DFDC51A1B4B6CED6C9CCEDBB5DFF4650EF39A5566E1EB1227BCE347318DB7F2CDABDC04408B3DCE8D63F23F5CC042A9A89810D3DD44E96AD5ED409882A9BE6F898B7B1B76C5E7C79C22A33512ACBAE9C29CE6D61CB28218EB48637400284B1DE7E3DA0EA1EAF663CB187947BB59C270364C57DA2DD6336B3F435BD228D23F6B1F32600F8F00A77F95971E19DE66A81D837D74426EAE4DAE4B44E9C3E6283F2565971C8AA355C8CF895062533DFBFF82AA7B0680BBFCB048C9269CA630E8AA0DD25857DD3C8E3CB2BCFAE26DCE696F59BA458CBAB6C29C57E5E9989F163075F05BFC7BC973D6A01CA5C13223515408600479F0777821D6DD4993D9DBB51D12BB1C108CD2EFC84B12B3205C95219E120A558DDE669DF1CC572F31985A1F5581F84DDCF453E86DC3520467C65475E93E06D45DB8BD7DCA13C07A4F30BC59C6FE263FCB349BE8DEAC9EEA5E738647CE2D25F365CD9240D66ECC0DBCE08A87AC59A5D37B1DF27914DBFCE2317B74CEB48092A1BC5C16C4BC6DE9C4777C37DA2CFE8D5AAF4B43DBE7F059A87247C351170F05DC98369D5107E188BCFF319DB5D23551891E786A18A5D51F145FB6841A78F9AB75EBBD48206F5142F1F59DC5F4066A669A2078BEDE399BD0AAA506846E21FF40C64FCF5F14CB669508A0B1AA52B4FBEC0FD9A7AAB2BDB57FD9D5EE0509804D1AEF553B86D5A1676784F7345B43B2FC7A8D60E7A7F37ECD2403C9A38712A6AD7E30150137CD8D564032DB2705E03681AC15D21B9B0B263613FF1A21D096BEF1352938AE7E17AD156260421F60E6CB67AF87859F71AF4AFC8057728F6F9DBE43EA50108569AC55F0C75525BE6BFDA6691479DFE8B72B9A448E01D81C0C3AFBCFD66D73121806F44266274F16FE4F615E77DDC9B6C6C1A4CA82194BE25E2CCA3876C113A9225F19DBA3DA425BD387761ACBA7E203A12CF704F5056E03313D44B5BFFBB0DE744184C18D9542A5EA8471041F9814F2EBC48C1B150893C2FB685DB180539F6499BDCB69FD552635E938EB0993163CC60B7A105A4F918ECEE886ED1202C16491459E1B6CA12637802673A740C18F574355870C5D9546753C0B767E43EF2B8DDC6B99DF55F00D6F6E0E0C45C83597DA0576EBEA21DAEBA1035D8C8CDAC2A85B5A805CDDAC7110D2C76C9BF9E69F8FECC413502B8A8B1FC0ADD5694329D5CDADB6975FE4D548E27518CCDF8F45F956E091071BB762703D4F508CE10EC111C6FF3D7B9E80E862C3EEF7870B0DDA37422D67230589EA33B08FA66D0C613A48E59AEB3C9F64CAE7A390A1ECAB95F386ECBE21E1A00D1909C4AF62DB25786B9D6032F1A537F5AE7BF1B68F2FE53C6A1DDCD48B35E8E06BA9F378B54220C2C8F26314B9603A3815AA27E9585D8531C32699852CF2C5EF25C51A9C638E239074750631491EE92B8CDB4EE3A57960FC29514DE709AEAA6C145124F29200AEAEC01625A6116B9730FEBA285BECD606481B60E3373FC57E7DD665AC4DAF7B50FF5367A4386316F11B1F04A366158304601E0019A328 +Digest: 6C7C4AC6FB7BDBFFACDECCA9EBE58B8D4B22E2A9927A5D2C5C9130BA9515E1F9 +Test: Verify +# +Message: ADFF274E04F5ED49218E8A9D9BA6DA44AA8AC8795F04141397C1E19C0245A7553AAEA073A6C5418CA93877FC13324E36A2F394025C77725655A22B5567019AAB59DB2D6CAE4B5DB242385AE252C767E6D9C6348AB96A239B325D828E806FC75E7A319E6F4B25209FD8C6E48E75ED6A4F35D5C724DAC6CDA5B53B0F63E82975821C07CDF16020B3E93C0974602360A699E94B282FA20AF8AEB57935A0EB896FB3A48D6F96CE4693A94E22A4A21295A6F83AEBF7FFEFDA4B01B3EAC299045843EF6954A47AAB1DAE780A8447CFD9BA5ABCD1255EB8F62BD6A5A3BC1C8E94CC75865BC69C28BC770F7AED5EEAFA831616FE1D19CB9492D9D0A553B1F4220172E5AEC74E894248B9BE38277723FE5DC7A3104631F2957A2AC8CAF5E237FCF34F8487FC57AEE25D94DFBF7C19099004D7664DD4FA32C43940EB1CA8978ED9368EEB63D770651364C2CC610E3284B775A63FE1924BDA2C65AC8451F7A284A82EA64D4783DE52FF1FA678E139F6D1B834F9DC85BBCEF8594ABEF15987B1312A98F3F97BCB6FC864404648D7BEB7D343AC0880F9452D7158DF675FD19DA6965C197666F138165D418960A8D7400CB4D30F0F48E9A1DD4771D2EAE1E3959B7E43BD486ECC90B8DCE1FCCBEACB251CEFFF47675649A27998B35A4F606B6208FD8A0C4A661DCAEE3D542CE2004CEA3E011D98464C9E85BBBB9F2BE1A57349E7F023706E93A7DEF435B90367A62E4B46AAB2639843D66EC68723972B9C9A3768BDC58FF92FBF6DD8F9618ED36036C1B73BA73136D3CE830ABF5E9254BCCFA1818FE07928ADBEBABD80A7745658270D77E3A382E922FED832F4C84A766009CC70EB4EE39B6330586B160C35241489B9BBDF3DD539F391C3FAA0B577A36CEB454D99F56DF520D909407C1B1D6310846B19B061F715F0F673E98965496DE1B8D246BED0DD61B5AD794E66FCA380CBD22EC3F9CDC6E3367587BEA2A056CD49B8F9530371F90D6810E7DA2954EA7E598170B994B07DE0C85CA86D522DC3F14025F0050C3BA49A98641FFAE0BB3A8994A4149138D3D010598DE820C41E565638D33B122258897088076B537765EEC0B7E8EBDDE5B1208F224534A7526CFF293448F6AE4ADCD674C559FCAFEFAF11A81C60E1BEF9ABE24FCD7863234C77C458893BF1626B3AA5335F94CEBA85BA5C46117828F1EDEC0A0DD581B7CFEDEBF0C88DCD05515528C7C425A312D87ACD96E7F7226D5C7DC61FE86F2CEFDC88978445A815796DC7A8910E9B048FCE35513530AA97B2C74E5318E4428F9EDF784C1318BF490F06B061097E4CB477FE9B376CF03A6904A528C887E742BBC825B7D7700267FAC36FD9E241DDD984D95CD86D8D19B374471E97384BB9952C17C2A6679AA418C52DDE55E6D01245A3A97CDBB770327EF7BD095E3C527EFFB10CF1AE18F128BC7052122C3755DA60E3007085AF9BC558B82C956E3FAF8B1B41248552C0F4E920AC6212AE164BEF82BA4C203565966A7B0C6AEBD55FF550EBDFFC75CBFCAD24C3BFF1FD840576640DF698E1052FE735ADE78FB74A43CD4D40CC97DF31EB3085478AC512BDAC0F320CA1BF303571598EEEA0D5453164684C84A9D522649FC3737EDEDE5058AE69EF25AFE2FC0752389D75769B37CA23F845787A767A963AD06C33B2178CF875AD3146D3BC218D0B674565255131A842C0608247EE89EF1579FB69825B4E88CDC7E5274083C940B7707E6F715819AF491E96CB0E408656713D8AF93D5E993E9C73B5FEEDA744727B5973BA33768B2ADD74250F6243A0D560C26F8220F571DE5341663EE1AD9D01A8FE0A31DF8493D39D604B267268692EA3D40857BD00361FAE2ED8332743475915FF3C77CB6C17178C5A841D7BBF6D6BD1F4B005AAEC81015D2EDCE4BCB6FE9087556D04739ABE533C6828A481A7496188E467E620B6B4A51B0FC32A26EA8420DE24397B1C19B9FAEC0183FA162CC8E24616615E4350B65D47E9184287E7BD8FDC03FCC0E4EC6D98A6F6EEDADF798B943C4D4BC4AC0663356412BC9ACA51982EB4849206A55F515D37FA6AFA8FE0482D5EC40AB63A5642A47E0C861FD1146FC50441CBC405522610F2E3380AB32D4292776799908F2746B1DEFE8E6A8B7008E3D58CBA24182D2DBC495D47FCC0141D357FFEFB0452FD5D2F5C56737A10A43E666C2CC2E6F437F86AFE6390C4A0A9049A30167A52534865B3EA4EC7C6BD217DA880D824F95B67D61C24572B16B76279D4A16E79AE90CB1119FB6BED9B0E550008ACFB23D6A103FFB63D9E6145DFD4882F511DE626A4FDCECE9AAFC700D919AECDF1374FE931330B1D853C26918686F22D93A0356ECC49D4667783002A3A2432B5BF33B56B3C810FA899363C11105E2EF8374E83902FDB75AD4F30D71474EFCF8E358581CD67AB82500B27FE834A4827A08364D27A1B3427B2CF0EB6B17EF2E0A063C2888C4A5B2E58105F5DFA3C3D0A8C1B470767AE1D1E684776EBA5B849EAF33871AFDC9D11A0370539CE7FD3B4A83C7E5571102210A00D65A160096627306A31E68B0383DF6F30A59035B4C268DF4A0C1834609262CBE2E9E2E3D7791260EFB9279033F4D68EFB784EEE3191B70C73BC71AC6001E21CE9B63E144DA2D40DF64F37ED0FE56AB9E0D85E318C13E3944D933E1325E41858310543056461272352F53D831817D23CF51024B8AE534DB6427AF06A411EE5D5470585441912CBAE23500A9E5E4FF23FD32CFBF85791035D0B9C48AFC1B44CFE69E018B27C28539986A19B985994388E8F2F69BCBB7E613D18E4831AAB3F039373084D9E61E4819FC0719D97D3DE78D6412973D1DD7B37617ECDAFB513D51FB3F38F406FB4D563D6B158012FF6BC5A28C6A8D385FA177C23E31B5D246605FC17E5668B71D4E08B8341606813617A617D13C5962FD85EAB699D59D319B8B8AA3322BE822640FCBE705C842B0977A82BEA33EA950620477265D05ADD134AAA022836A50F2ADE1516CB6CE5CA4B92AAE8D3B00BCEAB436120FE99A52D61A45878FD72718B64FE37DB5B5E661974E69C779FA8C34F30C061F74441772241E1915176C637F78B503D2752D6A33BAE454B789C7E652BCC56C6B1AAFF6CFC3BA9C7846B9261F71AD5E71C673BEFC9FF115BF70DBFFC619B86D216200068C73F7A72F13F97C15999A3912D2D0FF75EA553CD856A006198AF5819555CC12EE1529EEDC0AD6EB4C457C59B671100A4C7D02E28D26D486726248BE01988F1063922DF674B40D7622783E5B9FD030E039F3FBEC1E5DC57F2072F5267D5649A436191E771A8371A646C3EA43F30B1A49FBDA15D7D1DFFCB257F554F162B628CFB256524EADE9050FBC97BF39D19ED18C880755EF3F92B5DB42FAFAB2802CA227AB2C8BBFD2C8A598DF839D4886586EF3C00125FDD75E16E7E9B17F5E5CDB466CC8D99CBF73D9A7E73975929849F6493CDAEAFB82B3DE3A55D82E299AC5023F97626CE89834A2D9C1A1FCC9BF3B7892DD488BD25328A9DB5C1C8EE6BCEB17C3A6D40B0F8D3E401CCD0F700A68D0B72031F83BF1AEDF62847A0C60F794A7B4F0F6D87206567C0530491F2A125156A02753465CB0EAE8B19BE87DA865689DD4992EF11B2931D1A3B60AC471EA066CACC6299D28F603DFCCE7539FDC9B3B8E37CDA698C5FCC02CFDC1528CC7A80BC36D957B546EC32CEEAF588B79A28D45FFF11AC72B99C55CE4B263DABB7B0A4520954F87AEECE302A41D75DDC4A55C18413F5B65DF74FC456BB300EA8B0F62ED5831B0D6BA61256A8CDEDBE71AF60A30E01DE1FCC06016020241BAFF9AB86762DF443B08689EDF3B164AE581B849B5FEF51670734CC053C897A1F2136CB8169AAE7C0AA0DB75E4716EACE0F471C5A1074B8827FBEEC48F91A8B9B1613FFC1121FDC99FB31AD71FCE2FFE92D76B6EA43A6CEF087559581F749C329DFBE14C559222715FE29D150244DF8014E61749CDCF70689C8C9C2F6D3C594AE5C54F9A5897CC47D23222D35BA1F8D4A257A8336672E3091FBBCB4177530192E82735418075FECF848BB63C5436D8191C46E123BC4AEE24A132A02B522B533B5DC3D4E7068A5F6D3927FE7DA5F741F48839F13389C1FA3363B66729B2C852ED4E45A30BEAD91512170FC68B32C613CA4A37D5D76FD2DFF72B7032275BF9DAE34BC208BBCC65B1CF519811C2E8FC1DE987F80AA833407FE254FA62AA0AC23ED7E7ABC4D82B6E50DE2DAA46D3CC21BE65AF6B9DDFB0D254B5988B3658D180C7D8084D838681085BECB720C2C73C23120226986BC4B2886174A209E1648836F859CEFB70C1B147EDF51B45351500CF0AABE56B976271B9AE9DD1C95C3454AC2CD9A3A8699AA3B233038FAE0A2F11DE91380E7DD54DAB77A98AAAD803EC129EC693D598053F11E3BC900048A1A253ABA9C42802D696B24681559FF57B7BA189AD0C6955AB36658F0538592F79827355D3C70079893A04CF1290624CB003DF570C472A789D84FB65CC6069EBAF539C39E5FF6203392D87ABB672CB393360FFF1BA7D6FC0503B08C33BCF2222CCD08A894F5573409C7A632CA96529111F100D372CF71F61D1867CFE1F36FBA08830626D9818610F7FF8BB6D88667C8AE57AA157E06DDEAFF00B4EFD29C82DA1CCAD4786058609DCF31765D22770A703A98B9F3B0B87B4D1F0C73722DEB29E971BB0BACC80EB520E47A7E8F2D4F97BA8447E741F50DBC3ACA3003D8B97B977C4D5143B32C675881DC06226E796B6C2705C3E82EA0654E2A83CACD0838FECFC6B631B244FAE41CD335A636016602B1DF65127810FDA410226D91BB5E86EFE1FF26063F51EDA75AA6FB645D8F83D248E2657EB4726398D749BE4AD1137E58F9891B314241C8FA63B54F8DFDEBE287CAF4B02F97030E0D294B64FD0A4FA6D903ADF5F90220C91142B30E53B7F1981F7123741DBF9A2F4A8E176DD2D488CD86E42BAD71764FAD6552A10E5CDA4FC393EB123C7664B4379608DBEF50164F8BCC9F17BAB0C91CC16ED6CDD19A +Digest: 3FD3A24863068503C72BE6B9102DCE3329F98AC90B37107A6560E51B0E9B03DB +Test: Verify +# +Message: CE3C4C90113045EF072EE694035DE9736EF32D510823D421CA29C13C77BE4C929C77003CF53269358E5A00407C8DE239163B8CAE0F6C5435A0B1C3210144EC9A41EF5AF4B7523A6BB9FA6F7BC8AB4F404AF230431AB348B1D1470D2F194438F04F21BBD69C0656472056EE7AC5713C7C7A5351E5EAB0041DDCA594DFD95ABD9503F8CCE391197841D984ADAE9C6F3A09C463167EA4C973F0EDCFB2ACF09B06074A64D10A00CA1ADB3E98FB5756046402BBCC56160C3C613A59F98B3350B0E8DE02E21F529E0E621F6B5ACDE6847A7946B2F7B9A556F5FCC4701EE901A10A2C4B4E763E2408302FDADF9354D9E31CA2A5470D0E26CF033835ADB8DFACF01DCB6E134EF027BFAD284EB9D494B6E6CBDD1C66FF1405293A50A1EA763CACCEC4ACD3FC6BA5DA6273C48340C04EAA474BCBEBB7BFE0070198EFBC2D53CB79A6780DA19D407B4CAEEE15A825B2046D50FA2D2E54D827C0DB4960FE8CB0C6B7D573AEC68218AEA699CF14F177D16DBEA9D67AD11A22D8DF9E7BE503F295E01824768F89497E2CD4FCB0EC946DB04139C1298C362A282C244D6A585EB9211128358ACCD201B3D8FB214815E00EB68F2A79136E7BF3FDDF952697F37385AE73751A7992089E5ACABEF2D344AD1AF0E00EE6A0408932026FFC848DB595336078348645E03AE4866ABF0E6DD2B238821C6B7BBF7FE1604432DF5C2D0044D358024B31F53B79386FE3FD7DC07BC4B4E03F36D92EC4C8CFB9094D4962B8A405C9BFFA25138D535A4347E53F4870E6FA64C6BFE58A7CA443B235D8581EC2B4BB03B28DD85CAC2D9F68C9F45050FCF127D77C40E21A0FDA0AE0506A5BB117FEC5DFFD3E61445DB56323F0DDB8351E52672A9F2116D17AD388931B0F49E441163CABF18B530278FAEE79B9A1F0A61CB60A1F7551BD17158B78577F10C8DF6093075BE62D5C3AFEC59CF46D08C6A54B26327316E9FFFAF6A96236A0187AFD2F3E1ABD2733FEDF8BA765EEBFD60FBD97532F12369F2CD6218C8FFB64AF61CD2E6DE83F5EDD7DB190F3C8F38A5BFE1F9F9817F3C5B2E978F51C6070A657CB4F908DBC9A65DBDFB9F3DC71BE5F22A636845F8033951F4BBB53EF2F42F69E59A63623D1EA8B462FE33ED3055DE2DC2F10FE2A216E3EDA832C54FFEFC1FC4ECF3BE02CC43E6B4BD0DB0B45CD2756FAFD4F420E5D24AED9C281434A2A03AEA6F1468DDBCB0544E105F282BF6EB2DE64E5C98EF4991915660FD97AEECB60528230999D522B268673363BEBE8C5934B4DE6C2FBFF7400785E43E13642C2CC746A4F0F7DF754147428D92D29D748615532CEAC22C2040F4AC72333C4CF04F095F7A12E2C9A856AC3B7FE46BCDB650C502C65657014AD5A897EED59B1F97B6065AE7291ED6A0E6D44699C1124F281133FB0C3E0423E2D7EEE4FE75BB52340F73AE19F860927EF2D96E9750CCBE978DE5B4EF7BC2C354E4AE31E23D8C5EA90575D6B722DA94F8AAB9194DDD9C309E2E93D149FF41E259E2A2F9E5ABF5C3AC76525953D524D6A6E3FCFAB94C408CD0340D7E55FE718938F11E2331B9E4B85A845567C1C0EE8DAA717300F4D0D73847EC4A6CB4F8A46E40DB4AD18FFD096F2B78CA9230F7E0F318155CE0DC41ED921CC5EF07AFB7662F900F68B3F5D6A16AC2E59E5565BAB05BD15D53EE8B1E63608EBEF06FAA3FD180F4DCCFC5C3976E30B6CE53935DD34A942A56DA68C6F8ED89EF12DE1BE0F55EA46B2C0D4014A40D716E0B69B01C0CA0255F38491FFF00E8BA0B2204E647A99EA76790F1C1F9563EA3690116BA4589618E5006AE3968A289AD47532534D6F2699B7C472D7C56A01DD8EFF0ADFB98CCA999587FF5FA66AFD36BBA3B93810ADD507FB16D9EC25CA5EACBAA0C271D31DB0C7800AFAC5073F62D33A03F186F70BC9C627731871C303E5785090CBF8D7C860586C330A3F7113E367114B0A6EDB884E15A15F94A36A448C6225D069CA99726378AFD2AA936FA0F46A2A04E9FF4CC7BFB32AE95D7178FDEB9EE9385472D5C84574DA83AB23C5B8CBF7951A34C0AB8574E09C4B167D8FD6FEF95F5240F1F69395F42017B9DB6382433E95774343B3F2F38143FC4D01CB2F203ABA4F6A0149A16901734A4EC21EAD20C3C18B37341CF0DA9C9411A684D852B1CB7D09C2F4D14BB78679C0AE177E9FC500346EFC977A493EE65878C43EC75DE0132DF58972814B478648379DFE4A393A7BE218EF9AB6F7A561087047604942408B9AC039DCAE92A9057F24BC255529E32A1EACBCAB5BB5B10DF407EA8C13E57F5A6FC9CA824A558A12F826D33F74C6E95E114723208BCE56E93DF52181ED089079C7BF810BC7A4223558BAA7308A2B8D0059E26BF6A1875CBC1E19D839E6BD8C0EFBBD870BD9FD2B3210F19A688E77424A154DB6AEF6C51E7241C44C4E7DE7F23B10FFF9FE5C63F94C26C7737C811BE7152715D90E35EEEFFE4AC07AAACE9DDAEDD2D4F92564610A47AB5F55B9E0BA6A1A61BA5DA9B7B9C775A5A21F4110697707B3A242A6627520DCC2A261BDD7EB2886743226AAAB17B3D6BD33AA55E16A332CC2BEA83290E7D41B7EC7A486F38274AA6A8DF8A7B0A4BB3B8475A076EBAF8FA26E5E12328F822750642123B109948E8CBA1CF8BBC328363A81FED567C63496B5B7414FECD52CFA9B73C555EFDFAA8FE67EFDDFF2BB5D60BF5CFDBA554A643AD8F88F558F135CA7B8264EC91E5A7131D0F6A8ED8BB589C4276E0CAA4A3681E5F5A698C46DCD4654C42D465595213AC662FDD4F126F6CBCD6C200E1E3169EC524102A40470EF34686C5113EF727762642729C363F168802F89AA8D4224F466453EFE1CB25A6939DF4392A28FBC588574ECC6314DDBCC5910BD493918A7ABD478DC8A34080B0A8CF79F5BDDEDFB031F1B35749660F23FD71787C063F73FF4A52372CAEDBF62F4FE78C6E258EA6FE48F463A8FDBCE8705EFAD7FD5C8FD3E1D86EFCC21B1719064877823D2DD1DB069F30CCD48BFF81A57BDD62796D40C7EABC8E62F906D20C306675A4035595C4F102286B38501C2B54BB625A86631AF548DBDD8C2D5EE01C7BD77B82C067401C896250769322304683FBB4C0D953FB696C723DFD6A2259729A4334138D5B36752206A9F2DDBE4EA85720F303B1B30CCF0632E334A12BE7B2154D0FF75B37EEE299DC9D791C33B1C25FDE24FBD055D2CF447E2FD592250E9F41D21BF54452A99D4722AC91CB0B6FEB4D43C0C4134EEAC8C067BF29E31B1428E3277D71D42C14B73813C53661E9C428E5A44632A15867FBF050F86D9D5FEEACD54ED716C061A55AEDA41E779565B0E0D8B75F7AC8E66750084917E630C428A681D5472EBD41DA37A9E21E035E0B79A8D0079760D103C90D2FBB2B272EF4C34D9CEB503DC157D02ED64C4767E4CE8A615FCE4EDEA2C69DD5A371EE92754572A22F332447700D56A8974EA0E16396F39805F975C5D2DB416275366F7764B2ACEC6DA6A3FE32D2762F4AB704B8D27B8AB21C0F1CC492A677B7B13DA0BA2E989FD6A1D1C91EA117A6ECE740DE2F66E373E2A160AC3592DE90C275535F26E8BAF8911E0FEADEE42B8A1A53BA95D44F6A9D6C3E9B283AC0BE6B1A777B984011B8F145B3090B8BBD0EA35BA7151FD827AD10FF3C5A62E9FA213D7B9DFD37EF121F655D521580A09957565AFBEA465ECDDD2885FE0070BD5B24E835840B5A215C753C7724FC3598D4D97AB9291005F743F618DEADC06256ABB4AC216C2F630D24889A347EFED861D09E1124FD09078A9A11E5B9EED8AB6E16DF1039894416BA522A80C522B421C9A33557C828E2B210212080A32E0452A8129129D68DE5CDC7AC27FBC8D6F48FC62C0712A277EEB5B3F8DF6B8B6458BFCD5BB7C7154E63921A66051C2DA2E1B4153322645AAF02089B08557CCBAF08A69D890925BFD23BEB7FBFA3724537204E7C169B6575E2502FD7001E0800F89F9D9379ED9E677A8A714953A472DB041CF0F8CBD4BAD2A73BE49418E3200ACEE93303276F59075291241CD577342F21A6C581FC75681EFCCB100C5E05EFE724397FE80BD004B504AE4F6EA0C3CFBAD8AC21199B75B70C538E73AB717A207D39C7257D0718E2A7390FA87BF3EAEA49A978ECF17AE6DF29DFF4850E3F1D3AA2302837D88C8090CB2AF63B207A2129F6723395A98C8809C3687DA35E1BC47A9A1077DF6077A4DF77A6CC9EE5ED0147E052447ADCB2E27EC46864E3DD9D1935ECC13A8C3643B4584E866326EDA50CF236E1DF50983EBF11818E7191A47542B39F658B27475127D58F1F4D2F509B63C45DBA26BFBED2F82655E584893810115A123846486CBC063986D785380917F1C3F7B4E285B5A7E0B900ED7793667A5BE29494ED6435A37D6BDD8E6D3EA8DF82D9D9E2FED3E5FCD96983C3302D385A48887CA1CC57CA2BF14C8014143394A5A6F2E6B5B14F52CD0C8F2868181E81CD9A3278E5EFDEAAA330A74CB197E448004E29BFC01D542E37277A8DCD83ED4A04030BEF1F8274FEDCDBEC4C124B7DB443441A1A54C2A50643B5800294B06BD095B238097031085188217B43DB80FD77BD5778B378C9BC56C428F07CCF83F7AD9EFB399A2E2FF776DED99AAE1ACD6FB7D2F103124B2ECEDCED9DDA144E6F60301868F6D0100A30554575010654BFF417BE02ED273E1D6FFB1C6BD69B0F69C4C822BFD3F223B30045F6632EA23B81ED6C0C81FB1778F2779FFB6CA0BCA6F45762FF2F1B2304E05E7A0689F221BAFD333D77E8508F17C29B450E3DA2A3CAFC8058C212A892A2FBCEC38F54266709F8E1607EC01A8F293999307A7C013F1525797A95C0669C075753F6851845E37C507F33AD420DED7005289CE31D92CB36D0683AF5A5D1D9BD8DFD5834D2A1FB353CB3DC5BEB464731BABE172CFB1C08F7DADA4BCED90F247A89BC1B6695A8097B822FAFC8381C63954EF101F52B3BDBC4A5FF61CA508306C3FE8A3F8677CD87156787B7E1E875EC95E5D9E17B3D72ECCC9EFE06E1AACA970944EF266894CDA0B95F4F26BBE0F6DBA2333D73AA42EE2CD52CBC7BAAAB2B824F62526DDE5AFE11C5F214BF8A752172AED2A1A4BFA06 +Digest: 8C1B7E411A3CF0211B703A96DF51014E0D7C1AF304A9FA5E14E66F399D835CEC +Test: Verify +# +Message: 8F7B77D4E3EF4432E15BFF186EDDBDD63F583CBFC042A834513B30D70A85E2DB6EF544BD9271D72F8C115AD9EBAF7DF4EF0B0E810D57BA1C2468915248DD0234702CEBF5BD1039D7D065683438ACB9A45811A3BD9171B26CD6F8206377BF1DE972F612EB51BBA94523EFBCC8379445EE8BB3783D57295E044BDE13D5DF2542E31283B993B55D2297F72BBAE8D09335320EB5B3220B236E79E5F68951230A77F0635901A5FED9C6506C4E4A282A2741228637D3E0F50E710EADC652DB2A21B298ED03F7827D9070AB2D53DE31A7143880B713C85AA64D23C99B5C11D3DC129763D3C87B06F0599E2A1B2DE5F1561A2E50D978918CF762F2EC4EC4D9636D8CAB6682CCE322D68E7291BD91DC67BD0A59CC2EA9121A43B84C1075DD4CE1F365E8C4F045F9812192EBD7B1F13A3427C2DA731D27E943170162861EFE0CA372B9506C6A193D820B1B063ACF9F1FF58E9AFE90FFD5BF35FE65280B03F8EF1B472A3DA2468C184E399CB4C2375A4457F6E23B78412A067CB65EFAD9D657C57F3FA6F28C4C7CC5FF795E660B63F0886B73766E01F46C13A86733136A51EF347D2DA7C28A0D385B02B67DE041C8C78CA1B50E351809320EED4F9E09A169DC3DA158479687B82AE75EBDF8FC5DC802FFFF64347EB1D49045735B46C88E6711DCA57F2DBFB43933DE1FCB1F568A1B157B056E7FE7C630EF839681409ACA2776B43A6273B29E217FAAA64A186D20E00CF96C8842EA841BC1A63B5BE1D87711DD0E8591FA3F3E2C1331909184DA9D2EEB1770276C596C4BF9BD26ED9227A17B713A83AFC656EB1FE6812369F4C0619CDAD4F09B0819B465AB4D6373E151A12739599BDE466AACB12DB7CB322D295C09AFF94BCC765C121B339A59A42DD89011A9C53B46075C88964D5037F0CDB8E29672B4C94391549E662AB75DC58B013613B62BBB9FFC19F059A04502A686D88D8AC8998D4FFBD5B1C78C5A019AB24D0669B08C212CF5282F7D7F786ECBBA7310B15C81934AB99347540E5BDEF3D80220A0BC6D066B6BBCE74A5FB4CECB187978B0736697CD167A1E51FDC117A12B7D6BCC46CFDB5B20F637362B19A82B2436A90FEB2BCCBBBF197EC2916A9924DA60735F9168180DAE84C165945C4FA4109DBB06A0AC9F7D3BCC75880998DCAC382F18AD9C69C4166EA6C024C3143E658B27E668C89A6DE16BB5AD6CD7B5E0CAA7DA1B10C278E625104B758B57DCEADAC809A9A7D83BB7947A252E63DBD95EEE8F26C00DB72EA47CF9C033571A49C5D3C3E2254597FFA9261FDB4D9F065EF9018C589C2EAF1FB1327CDCC92C0943B0F4B5501509C226945FDF67BF38068345D1B3F0384BAD52AA20712296849DC24602E8DA0D0722AF0096AE637DA4F1CBFAD39E1E8A76D801500E44100FCF51F79D58E7687DAE9A7727FBBA9DB3BE4F4D25275235F6B30B2E782DE6C4E59858FA5219A9174B11A1D62FA877A8DEE4CAD4E1BFE822D2D16FD88FF823CB14838C82BDA34AAFA2C919AE221FF43713C1A072B89CB7CAC299DD669FD65339982C0E5B8DA53FF882A5CCA419C328DCD4AA44DB367FF7C0B7C4DA23E1A3D04BEC82A6003875E0A3874CDEA569DF5BA1C92A255CAB881DA6C1EFD52CAF1D351243FF43AD087DD9E6D5E910C675FDB7EDA0EB0B021D8F0A6AB98D59E6AC98C0A5E9504893125FBD1507291EFFA9265A2A5756C404ECD9E8F1C65228A3D968AAA4FE191D6AF2589BB346AB4E9363AC1CF39D5559A5C20201F29A668BE00EA114F9045143B106C06A967B67EBFD7B7370E65E2BC8B718294828E545DC925A598187EF41D5D7CA00D22D046D68C521D40FBBD627B518F118811AAF86234291C543365DDAE3D6A941CBA94F7BF9E88D02D5D74BB1D965DBA6C2D838F0B67425BF2105BBCFD51F301412AF31C3830ACDFF1EA84FF5479E55ACE3416E9EBA5066531DECC0451B3FD563F560C63581399A4A80B6BCB27485AF2850F485713E1B1C93A74BA08C23BEE4BFAE33418FF4832737B10BE1360021D2C186E708904655E6D2EFC5A97153475B47CB6B679009D4CF059DF580C488555A9B0499256F77251EBF29E160D5CBB7B71104A2B64F06D7DC854AA4C1882FE816B1A87D2D622E88FC7F26B6661E02C84C361EC621E100E6F492AA445F8B01B6CCF683D395C9D298D1F2496DAFA83B82AC981DBF2731B631657B17B88BA148141ACDA94BC59B46A960299944D859BB3400F826E47023257ECEBD210EFF28817232039ED4A412053D64DA46A9324E7F6908F0B25CC252B1F0DB071D6286FFB2ED32C5AEC0CE5D182A498D429D5223230F24F72E5D838D8964F265161C1203506159C2F1378D75C3405365D2A812B3672144267A37A8F620A4102BB7446D7761EA0C0A211C2031DFAD1CEA36F23C053E41DE21AEFAB604DF7F5871E60D7C9ABBD043779E630910944B0A45939812FEC3A721A42A2B024650357B0E85D4499CE36F2F7F213795D69CBA6983B964C1B5944661ECC59520B66D38C448457CE1A8BBE6813457E9F72BD490DF0CD19D0CAEFB58A1152EA7F2D5B5D0012561961087D6FB64E6B8C2EE47B236E6A723C1C035A1F11AEEB3C62A79C835EE03652E2F1075890C4B2CB78034A8BA04E52057029E804378BCD32E36DABC9B1CF34342828E6DCB7F20F0D7A2B6D4289A75D955CB813B77A4AD0F89663D84C9138D0B9FE10677AF73690D26EB9C856372FC8F82F65A16660A00EE8235BCC15E244ADA18A273C03A4F53468D50804B7A7CE48E36D403BC5643EAC62BFB231CE9E574EF1022C0E8FAF7A9C3838B8EEB58735EBC171408EE0E721B0BE2919560EF922F4B3E9B3C74A709F708472E36738F315967FE12D91168D507B1F9969714845B469CAA5FBDF23F7DF80957651EFD94806AD8A37DDE8BB93C37CFBAAC7F0BEEBF7DFFC5BCA3DD3ABAAF1B879D3AF92879B47FBF032A170FECA12907EF5CB01AE20258DF85A663A5C44B799B555B33C96F094B8E65FB6306AFE386CADD5D30CFD6D6FCC3FC9D3F9A1C990D19A39AAE28400CE9999A83ADC3EA7D9C5E35CE956036DE1439CD40A780823EFBCF177915488F2FE39DA61EA1646AAD7DF78137519F78F99F2451459358ECC272E66C5E4C2C72403361B673664BBF50C2BF559B965F67286F4FBAC9A5B2F2AD00C8158D9E9FD869EC3F0FB4623E0D1FFC87BEC73FB4E1F38408C2F53EBD13CEA78C6FF7AD459F595A80C1D05C20E2D6DDBABE8D1AE9E995F4A0FF1FB9E9CB8B129A71962C2DFDD8A52C5DBECC41EF320E2029B38546BAE49464642F68E6CC5EC6B68B7F2B1373054A5B01D660C4ECCCEC95499850B3D3572C05115E45C0838B7B42DA46F7C4504E8F374F672D1C0878946B5B28F5617DB9910C555594668FBAEAE256C872A14F3250E13AE2B85701A4E9F4AD770B5F66DAABAB64C3CDA296CED7544E711F47059AF6B496322D61E7F6AA0C756F17F0499751C2C39C4DBC86752D80AE4B932E0C6564B4D16CDECA08C60459E061128BB9E45D22E14DBD427A908033A9845E3D19E63BE628D7D2BA070501AB849571BCC438A4BE9B32288A689AC356709ECA02A24394E2F0D26D0D428CE383FFD50A03C396E76D936BF55EE8E672C0BB262247B08CB9CD2A38E1F2C3DD16F424AE233E5BE77470CF1BE403C565E11669CE058FDCC8292F3FCCF4B580CEF0B1E86FF9843FA6095C3FA4DC6B70CE7456015FF7664BD89D4D9B6E9964CEA1D88FD95AFE1145A19CCB6937C135BD46B7A54668D0175E6CE559F65E4E74FFD7C51C1592A69D8B1DDD6AB57CF68FABA3E159E7B989351B6E4A09793835AA1DBFBEE88603527BBA3479D76E9099D53FC2A1C2BE58859F1FA82DCE0D85E1A029845EB2A79EC08ABAA684D006230D4985E0CEB4E7B532121EE65D948924DF43F3187EAD888468F9965C594C01722EEDB9716BFBEBF586004F533DB65662BDD2C1314729EDD19BEF84695E105CE98CD79B508C3EB727A48934D3941162D6678CB3DA03EA5B257D53A09CFF05504DA40C3784F347BA38039C65FA8A47D5A8E59980AD3FB6B8B1A42E1C83F54219C1AFFA3F00D56745C0A7AF51BC6F5B083F1713337934222BE1E83A9BA69E54A49656A5B1BD6DD2A9ACBC502FB3687BFD0259CD7975141969AD30D4AD69A7B9798E523D21AB2A1FDA1EA29899E62115F566C89E1106EBAAF8F592E90F061E7633DC15F58A21F4E3E4176916FC96D5CFE6203C79F23C8FE32095C9B99AD222BBD7BFA4975162BA55E0237C9750446447A889F3D543358DA6CB58F3E8DE52A10CA4930FA7216A9FD7C7C1D6BA33113B803872F67E8AF7D06480A728B44E0207CA037F6EAC88F3DA0C6D82F5C1DCD946917D6C98F6F33129FABCA295BFF042504B8C02829733701D97945B5368675750B001E07D5D98C807525085BB02DB5D6963A62655483406ABD37A97BC107CAFA34019F4A168488F0F76CEA51B5EB2B710C05919BB0B6665AC2F67CDE181F0BD99E7A158B129BB4A3114379795B30421AA3EE71459D3671A147F32E4D034BF1E30800949596CFBF7F5B9DC8424B974808F6B0EFF5A774B3689A73DEEA8EEE2C2FA9FAEBE82B8601DBFEDDF0B43325BC6D75D48947CDD47D647F3DD66194148E34BBE499FB7C0C43814C80B84B99E7E014C14492D5B348ADC62363E8A7C989B62A8851969782A0DB4BB9403A471FA4D4714BC10C65DD5E6BB6E2D5BD919B28D5FAB1DC05066527E2CD9586F8DBB10F6205BE90B217CFA5682B12F1585A1930B856A6BFD5BA3DE722BA80E055DA7FE7B6EE72D6F9A46AAF89991EC897186FAEB12A11D306A4EE5A90C4D1C60390866637D09AF6974BB1BD4C3B5581F918F798739377D57741FD1528DB6574C4AD0B493AFEF7FAEE5E24FBA2D715C3E78014576EEC29930F71F59E93269F5CBBAD5DA37C4123B1144B64E97DD7A6F31DDA72853BD44FC715E561A09D6260F77746A664451A47AF969998D0DDBE7D49C3807630A100BAFA2ABE33448A6C90AF3CBDA66998D423D98D51B1BC82424437F5B80E1A34EEC3F64E25715C3A775A6E2452D1BA6A67B644E99CAFEB0D5805F7BB0EE5ABD7A04F0D703C17545FA2CBDB534C90E9EA9DE05D5B6B8D19DE6498B01A3D907956F93904860393720236EAB693A4373709C896BE0EA6A77 +Digest: 8DF566CC020BFF7A9578DA248637D9847B4F29FD2BAB27B1C59227D5C54550D6 +Test: Verify +# +Message: 447D37CDFD374DA0C3DF9CAF3753F674984B1CD93B8D5ABAA27A34725B7C7D8F8ABA2C72839E4B7787A1FE6A39BBD9A7FFCDB46BB5C30208CA0174AA6FB6D03318D6A911DA4626CDF278D68944D58868398DCED15B91EBEF86834D2351EAC30A1098A74D26395B068CD19DEE62C1929BB8B6DECE714E7EBD1B8E2B5A0E3C3EA02658982B58A6F5356768C7E455737E59B18AF0FB5723FB99B1A66D01038C3AA8C59FC3F0BE96015AD753151076745DA4B1ED5EC2F9B07C793E9D5BF8BC31394C24CC99300EAF33613AB88D2C1B04A0CE727C7E9D8AD2485202DD11891F65C7A250640EC69AD13AD9E166E704D2DA02864C40652BD3091C77844C44A206E795430919E53E164E4B4655CCE487B2019E373A00DB4517AB5BF26E21488F5FA734CCCEE1BDAB93F26300441CEB7AAEC246EE7D7BBB04AC70844CCCF2D3FFF9583C59828801F9C7683EF83F4042A4CD8BED29C18B9EA841A5E35ADD089B0BEE6BB18949AF4B965D764648A343FA181824D2DE06F20D99497668D1B4E59AA20B9EA05AE4FF1FE36EEFBE8C61BA75CB03A46015FE64E4F061E6CB18D34D66DDF049ABEE0E461B846BF148EE1513F4B940F88B693DEE32D72B39EB270FF3A7AD9FE1B0DB1AC2906E9972DD6D42B16D2FDFE25850D6B2551DB8432FD1CAD09CABB9AC3765A3CAE97FB85E0597D63745D510F048B23500FEC6927BBB77157F3F3787FEAA98773729D30CD592ABD82E2AE660F353E956D68A7901B513C77D5D14FB8AEF8FB0A3AA4E4CDF107960EB369AABA901230AF1C74126EEB34E52A2D795638840AF9021C6C9870EC9479C747721B338ABA814DEF63C6DBE20A1EFE6E5143F86C39C5446B21AB283247D5860B432C2EE75A7CC11FCD819E604E8B2EF569B2DFCB16DE334A93630F9C47761A6B0EBC1EC2217A0419B9498460AE3C3EB143A18C7E56A492C7441146EC55FE9CC1BA835B4B1B53EF9D8DEE2C2E5758BB3201910F43F62F887C747F2E7BC4C345CF68A44ACA53E8F8397A9C8D57BEDDDD27F67098401666369223C99B012EB30EA7F228AA7976342D2758833EE7595E75763B9693146A60F606F6C6E942C15A4938781970F22421252EDD973EB5032CF16F2C631E7F5D87D19EC91067C430FFB4A9B26D31BB70E90044D38D1ECC77FB7C78AC71A8868DCE1B30ECF0C3323FE021F312EE5F2DA84017479803A1FA174AE5C0D56AFE499251979641FDB08F2EDD85314E8768DB37A5A4F797F384E7D07B8FB1CC684855EC816A9667885292CCFF4E5260A8CD6FA8B563B5F5A86076996FBD72977219988549837195CC7808111BBE02E1301C93A484FB89A38E3B649AE1CA8B00C0DD60063EDB646113ABA0BAF1D177CBAED53509EAC4AAF98F0C08E26099406CB369EC9571A6183988434A0F28104D9EBA3D460C4BEADCB6E665348E8F82CC56568C56F56A9EE5DB907BD4E2914942E3132E2EFF7556BB5ED599062E8547473CB92F9D36AFB93C19499DB0BA9D7352173ECB1E857E6B720FA56F66BE4F31C0FAB408A917321C33B934A883785E5AAC7918285A3CDDD633C0F4C2D9E5FFC116779A725F3A8481A25BBC63CC2FEB6D0E6E63B4F0854E41FB47906647A7F865160412DF985024D9D1B0DD449F9D60B292CFE3198C4F976A5D19ECB237E4AEBECE26E92186C2DBDA95F8BF9DD5E03FB2AE04C1040E397984DFC3341BA764C7086D130B38B7D3BB112AE2847D0EA6E70821B74CA22AB3C0F93BF8D7EE61B854A070CC2414AC80BA4281E0840A752C270DED1E786FD0B2D96BD8AA927F8EE542267AA72988C7DF438D08F2DF9A8268C01001EE34940EA57626888B117BCF412179B5DF9ADC9DA4FEF6C77BE5F0A64506D81E964CF4ED84A4A65D7A72C51905C6F87F5F13F1D1F751AE70E1F8C8811B6D845D30D9BA111566411B0D38D1005C877DCC66D47F46374468022986AE2C053E20609F8E4100CE4EB8DE0B5A44F6CEAA4A09C23D22141D8B75DB0F242352F1E8F2B4F1F5C6131E779CEFBEDB1756C4CF8E937106D20E6D4B09DEC61BEC3E5470060EA777A697D8E4AAF4222DCA205A2734506DC318B0DC048E56808AB5F772FF0AF8E2506FAE3A39781C33513274262C79A0C57CE535A9292BAC5076745CA0788DB5189FEAA6BC2F2FF2986411684D7CD074D796E06DFAFCE924929DB765194581C87F6C78AADBB5C96823B8ED5E118CE184624A04E57FCDA1F09A046E08C12775D234F6C5741739A5CF3BB44356A5EA929F1ED7BC31E01ADB0C83691411A1174570EDB82CA10C8F2B7C24D1D6C330F2249963ADD54F80FB2B0D0558F4E1611A8660B72915D8CD582DA1EBFFE2E96CC4B7A4CF97B57A3977E55D750D694A6899EC132995878891615563666263BCA1708015B17D1090B98A077D117086B4DA0D28A49F23DF8C95273A73182FF9892B6FD83C82E40DCC2DF4F48D4A1C28C4EA2487F704CCD0492D3B2A355C4ECA3F9F6A715DA7FA9B943C6A4402EDB95E8C50E0360320A95A6195D8059C5F644E50CC12D25B15E73E109DBBC9E485AC31611C6F53EDD69A889C968EC54EAD2480E88B33433EC329019E9CBEC9B380B780AEB09859DE83632D492918C4CBEDF9A1A1D8ABE658CE6F3908E928485E37A72B1112251DFB7C45C621C5D4E8106934FFB056284CED742126675CDF57C3FF818FAD5D598C209618FE831BAF28860518096D3991876EC5F2A74E7639AF03F3A2B2802CA59647E8DB6F371682544A74D132363FC3CFA431CE96C36034354DD08D34CCDCE91B205B5877365718E1FB4A2B9988A0BC70986441E404DD111C1321C9199071C233020DE69C001ECF96EC79D509DEFFAC5993B5FB06B0531E432CCF27DDD509E6EF912D9B34AF9C7EDC72F1D4C4D7B72484AA9A2A9E9CF543D02449922CA22420E3FD4BABF8CFC7D18658C51191132AF580BF94FB4144DF254B3B341FB91F279EC540BBA5A9AE3A2B068F5C54244E2232C247390DE91C70D8EC41FFA3A9C07F025C717DC33AC3BA032F0208FFA8B4C02EE21269E5C15961FA366D45EE772967630A76C2256C07E6E70C7CF44A930F5BC0D022B180E422B1585D9102E0C487F14F8BA84D1C7ADB9CEBBF34C7AD141C9DA320BC33C8EAD1D754D8C83A53A3C5988FD06E46374EC7DA67E7EADB07476D0C516372BFEF7BA7CB4D422F1AD142E174BAC2797EB7CDAEF8056BE96DE42E05AF66F9D6064D751BCC0E65E2E3EEA09AE390F4F322A446A59045A2E181686751107F9F7F5FCAB9999102AA3F52855EA50D5CD8BE21989ACE2BF71BB1F944C2BE2C7F7291E2558D72730A44D2BFA032A989818A17725EC2FCE06347CFC3DB95FD498BBA055CCCA21876A9278688BECB573888690DC12CF848FBEF56AA3F63390F52B9258A51D65E5C9163D42647A61180FEE7DC89DB77D679526F63EFA8C5D70CDBD4349D9C2F750626A10483D91832896F2A50822F69868A84CA3EE31AA48528F3AE65AAF254DA4D36DACD96F738C38BC7C669B1A2D1DE62A3BFBEADBFDB9E3159D6EBED557B069405989FB447E357A798B2FD295178599C357F745A2FE5DFA79E9B3D694281521C7BEC6BCE74C490D3EC707169B85054023C0C2511565D845CA35ADBFE9EAFC58A7C17ADD8B13527E9D7653F15EB3BEF274D5969DEC2DB3C5F5CA11110F5527DD7A4C582B0378B6DB4443AF204DD9CB5F3A09B0D89327C39405EFC64BDACFFD951252AF5F4E3C66EF5F4FFB70091E9D7D0EF42D1AB9FCDC98D85A47768B0CC3F59C8B8ACEC3E1B200462A9694CE615E0A3D0CCD1018DF19F85AD4608FD0AC9060B7724B7F4A0656094C9ACD93C04BA2D653180236DBCF77D79A5223144580F3A54AC4729BFB0537CD0647C276EC1C3710B350E0F806EACFA5CA62AD5277D2D93DDBE79211C98F80880DAFE6BA14F86461A448EF6457203A257D5FC7A790108EF007BF33DB07EAE349DE3781B33636C648F52A36AA6EE8D31B084BBA60930837520976E307B79DB592B0D20AD3306EC22F6089B6C5343210FBB3687F61177E160D7598BABA9C39187A7F025D8C78F72B660135A66EB46E4C1F5CD1134541218371716D67EB9D0F061054A71A748FFAA16B6CD74F66D2A7B26CC2C5C40421AFC5D89D8BC28D096926C0FAECA96F85C325F99CB9F41A9B146A4CC73D944A9BB974EF5EE785F3C9C8E030C3308B0BDC35629C47F94510AAE1387B3C50E9A048A54AC00BFF761CC59665AB9A58B8A9B400EC0B9EE20FCCD3092363B4CAEE2693AF3B3866A668537E1FC0CE04A57514D9469ECE02EB5DD275779D90AF22671140D48708F0105B29349D89B2D23794EEDAA5B67AEF35134B2440B934FFA5E34E2885D250590DF79B424729A506098382FE283575F13832B7B31793F1333EFCDCA233C936401615581206312B94A82015527F686043574AB655B9AA804919C99E639B3386ECFF9FA008DF778B9989DC6180821841016AB2F8F6D2ED32765AC20944985E92D3014A4E3278CBFF5D2E49B80362E8851C7918A1BB02CC6BE75E36B3AB84D2B975DB11EDACA101E64FCADD6A8BAB46B889E00BF7B703F99DF8080E387B6A8717DD25EAE809064678CC3E260F27424226258D411ACCA6300CEB970A678B71D1C6327340716BACD5A682C7AD4CF6FEC6AC52AAF56BB96BE8490EDA30F7AE16F314AE3A974C80AC72D32D77D003012AFBBD2F89C4DDDFFD837A5342CE14A9F2CAE28830F9C9B51D4903DA051DB4BFFB07C2E61BB787CE40148B98695D6EC4BB09D6C314EDD5F73AE6FEEB620AD9966038D6FCABABC830F1D5EF5F31618C936C6F5317ACA9B7C717C5D4520A8DF2ED458A5A025EB8DBC5894381FBFAF8572515EB067767A5BC25561C6317F7BF78F71EDBBBE993423B21403F5B39D313793662C53F4218E7F054EBFD2E297E64F6B4B5DF71FC105C79DAE357697944C2134FD2C256631F1D808006EF81E52560B9DB5993CAA36F7DF6FFB36644DFA3515E56EC9C445A8DD2ACCE17DD197790D4E089ADB28CAC8D92C33AB36708AA6CD47A5D991948E8127130A7874D35E36E9A0D2BFAD04C9BB9C08B741DE921CBB42E6341A4F3B09EA8C4BAF08848D23F965740440774D79EA2CA2FB28DCEB1585CDA2583CF857018B5B4636EF439D22EB1EFBAFF790EFDBEE653AA84524BAEA4A09243B8D932B4196B0D795CAEF1C9 +Digest: BCC130DE6186061E8087CAF0E3CED3F5627CFED49AB503AC0DEA0351951611EB +Test: Verify +# +Message: 70F79C929C459A7C084AD08451777F7C167AC34758A15A0DE0733CC0954610841E3B285A4574FFE484BB3FCE736E8BA0FDF32BCE878924F4FDFD95064E43A4D10F6052E730E55D836546AEAD0DCEC842B392795043AB307A01107FF008608D0FBF657E645420C5DC07C926791ED8C1D53344FB9631D1C83869C56DD4C1CC54C9FC89C7254E96FCB89D75EFB2A2808183F84671854BF0A712BBF6BF78235959359C043241979DD49C06FF2AA65B483E6B392A24C1E70C71706B14B6DDD1EE8DF1E2127009C39BCBD33E9C3C8794F1EAD96B91E20A80DE9CA15FE2D94A68341830CBE686A6434FDC8157BD04563CCD8BFF4E34348462D8BCCEC9835083BEDDEA2576876C315D49D40EF935C9A33C9B65F8EC53B5689ED8449E7BCD7138A2C883F18DBD1DC2F183A7E776FCC5AF24308CFB56FE8508E30AAB1F744A21ADC307D30BA74FDEF375AB263EFFED6EF4F3E6606A5BE784D44CB94DA927519BBE3AB74882523132D3B5C3D10B6AC236AE7CD5282A2B365406B82CFD6BFCB3E240B886ADC18D423FB9CF1BF01942977A03E5EE8282C29FF6A399A62B0FDF3D379691B4D94D289C293992AACBEE5F9669A0C91618C80020D441707A0C1E6AB49422518390802A688167EDFA44D919C8E22D26120717F322D8BC2133F65784A7E6A8132DBE9159302940C118311054D26D83D34CA5A083ACC3B3076E4EC921BC32B7928AC127CCFEDCF28DBC95E89964EBF4F34EFB753CC71859C141D356D430A991D67BED5ADF473F8228B260B5034764FF82F14FFF755DBF4202723D07981D9790253C47499A1E5B377315A52870E19C110BC1A2058BF932C7E515012BCCA7127744B427A8C6A2E6CD687D7115545E108FEC38FF3C7886EB70E662EC9BB8605CB77491B4E7EBC20559D8854C1FDBDE878F5C4D66BB853BAC0C0353DE6C708C384A51B9A1114FA7D5FE67B3DAECE2773DAFEDAC99E69CF09253F491F93828053B5000D42E22B55B4197F072ECAAA0584C2285ED2FE817296264812BC8FA6A72AB0D913A436FC0253A214DE504EF5EE28BAB048E4B03F9C239FF3DEB770CFC13E8CB226293764FDB3DCA952351B54B84C2E78396DAD28CBB996DF073116F731F962DECC960EFFFE108D20C4BC21B2CEF955774A3AD495A84AE1648C7F71AEC561DA021587EA6D69CEAB22261459761FFB80A320798CC3A455EE9056083175C82553CD6CC3C13056FC099C84B8AC7EA46C587998AC279680A98F109D0B18163A87C46768D775C09F6A83DA0A02B97A4603726C422680AC672C1926685FE9A3A66B05B37BF5B172C85825CFAB30372908DF60C7A7A6F1B5E3AAB02E9F21359A74A1F8D07CAE4CE5B85CEDBB04B9676F3B1DE472271B7E9D2E83AFA8DB7C042F4BF0A2683A4DF326ED0EE0B6B084D35A570ED0F092F297C7DABDE8C9D8BD87DC3A974681B51043D6FAEF16F53D8C50ED052C6EC130B57C12B595356404B64126519DBA8835D28E7F638F2890BB7A05BE6542D4707B50F5DD30D0C0F5B975FE5B0A72097BEC14FF48A94A38BC5AD26C3CAB3925108AFE942CD7632E5A1677ED12A09A93625E3BED351D57CF8F868F56A5277F1D31346388129172CBC7093F8396AA30DDB790F01ADF024B1CA8EA542236421E722C91A9739A7A9D1E60E86EF73F56B5F75B56B49B1D6EA18F7A157533BD5E535CCD46A603D126F9F14A06607EC1A668FEA50B2843BEA046A7CC1E85347DD95265B7E8E0BF4C5D6B563B6BC263D5193F933C151509BE717078615661D5212F00A77E801F10A2CF66F7BC0529FA7B93B1AD82285B36923652D762678E0CD3A8A505C4E98F536FA1DE9AF3DBAC3E6E7815EC74163471832FE021A0D3EC83B9108A0310B2EAF93D564A558555EED36DA368FEB629EDB579E30ED9D9680F91BC083A6F1CF7E3322F1C93B2E7C3786A2349E952CCD41C5FEB1B8027824C28B0BA68D0EC97F4E149550935A220D47514C3421F9DEC888D95329AB5408E88BB69BCE8454E6D5BDAFEE11D35A04F2316F9801BA65507B49FDEF653ABCDFF637D952F84490DE47CAFDC7B900D663C8BF4FF6ED14B612147DEE67A030C8A5DCE8E0880107168193160FD7C3B6E3B03EAC4F2AAAC680B93F1CDDF38DD2A39BEFCEB2453D27FC584FE207F746FB4A8E283F62FD208D7AA87B04F3C8FCE299E1D93DFA72D41E44BA56A6F374C1570C1CF7F1BE06F8CD8250D9013F0257212128E237CD2203BA6D582351C8FD9001F895F29E5D7112DE79DB2DE2835D1F5C2945AEA02B955276BD6BC9D43BE9B4D73DD197D66FC1D7EF4C519AC90EC66AE4651393B01D752A985EA5CCE58F48C3E2662E00A1F16CA6A124939B42AF53FFE5CFE3D1EE093881D60605F66518A75E01DE6BCB4B9FF1070F43503EA5BEDAA7D33BDB75C699CC7165C4942CAAC9AD6A4A64CE99CD004996622CB808BEAA238F3F6FBC4E6D738060587614FA3E29AB8292875FDB6735FE16B12F12DFD4E82600A1CD5DECD71CB1AD31AE61B3367C28D2B39173D878749AD2E1DEBA9FF94D4B2BE91F71FEFD1CC92C5FD6D2708A0CB3ADF24600DA0B71B4C915EC760232D5F4A47ADC1DD6D5DC476F928F88BE023710C2C4AE8BB7A2101E9BC6D0D3A76B16B3F89D41BB0E3062D51D5E8A1E2D754F48322A84A30148592E702CFF107499837993B36F005553D9A0ED1ED9264B2C00E6BC128369482FF81183011FADD68ADB9512C532650FBFC8F9AE6E0E9E876A2839A662456C8571AF6F5CF3211144190708A6729EE0CBC766B5272A4483CF6BF5768C1F279678D075FD11D0A95836321D5CE663DCFBF6EF34095315D6F7FA1D7A5DC646AD788874E6F76AFF7DDAF656988B4078AC88B4521C3510BDDC47A20B3F63AE7A18C9F0DF1C71FE1F3A769076D3588D1AC70346C580EC5F2A5746E87A4E1C461484B94CD00B5A78899D5705AE750E31436C0660B50A6D0C68C089319891EA70BCCCE502A89F4ACB2EC02712F579B5D9E5EA4AC3467E490F3C14707DAD3C0D6B595AD5990A6F4B410770C76FE1B6C87BEEC97FFD2BE2EBE429BE0094DEDF34525F6B0BCF78070D7A14E186023C008C0536182D11B417180BEA70E68151B1E6FBAB5E0CA21A5589D757DFA64242025C4ADF3A2A6E950BD2F98182F958845BAE6F5E61AF17C14BDE91C3AAF6951DF63615201D8FB070064DD912F7D8BE14D198106D91CD705DF66718716CDF4C35BCAD0747E251513724EC3D095309FB8CF445A9B308E930FF2335AEC98A2336FDE4CAFCB50840B491C8487F33287AE4A9D2A4008C194CA21E5D9A04342DAF140B88B6B9F8197FAEDFEBC8092264DC4C7CCB3BA9D64DE13C6D66C2A2087170A345B2D12A99560FD08F0BE3E425592860BFA0C1961EC8B75C782E269A612018B56F6F0E77CEDE9115A26A5C364074E84A1CB0B03840757C876D59DBF17E31CC11ABB539E9300EDFE6E1E8AC35BD5ECAEC05A6938287D3D185C851F060605D8CB8B36CDC080E18D84FE4F9B489F9E4CAF660F56AF0E36059B53CB9CF547418B59ABC830BA8C9380DBB6BF6F1FFCB3C65D303C28117516472434C41C5D814E0563B7525F2418A01FCFE3BD444CCE7395DFF0AA8CB5C5A80D81D5F5C2E7EA0B37377E906AF077CED77A96B4EB429501679633F53C57FA8F3A9AEB6D8A1F6730485500A00E9F7B8444DFB1F28DB67D303CBE1772F3515E5A659A63E27779C2E4D09224B24C78C4713A99E08FC2ECB6D67276B8721B94BC8FD12E46BD68ECBF84688D86FE601871BB62456C885899CA375F8CA78B209A89DB984DF9613078A294757EC2CA1D4507FE5DC576BCA97A002AC18E522459658094A32C4D71582AC06961A6FEBA6F3D5BED6D5148FE389F52822088DB9A6752B80D91C93168F74AADF3DEBCD70036B284392D4569D3D878567ABC5A449AFF1DAD7D39DA422E0BB1C2FAB3C4748DEA431CCE915C694951FD2C742B9D5BFC7E93CB029449E719C3E9B5891EBEE6CCB91C8AA858F730E2134C75C970B3E84147E8B1BA4B3497CB799EBCCD4E04D346EF0168064AB01D6CA3BFA901EACE51E090C0AA2132111BF9832115D5B4AE9ABB2C7A8A6B69383AC62367890D3E33413654F36139CFF462B65552343CF3B1B1F89C57231C17FA4C6419D4A004714C30ACC8CE785D418DB43B2516965D218FE1292E04220995F7DAC660C7452E2D0C829C6922CC9710E67810D6133F20F9B091BB544D7E04BF144A76D1316CB8D71E39248C58561014EA8A4EA7497494C53F83A798E4740085A2DDE793E93B036F10D93815DA82C3E2FD337BC0D383B6E6C6992BE0412A3BD55D7D44995F0C2CD453AB57D777E195B94A8956D4BF0F89AF6E946E59328EC3089E724FA5934A360898F7296B23CDDB314807A6CD5EC4EB0B6345DD92884F74379459E36708240EFF078AE78A379E7BF10E550F160EE65175D7F872CC56C27F1D1529AE78B1814D27CBED4484B2B9680799B7C4018B19C34F007778FB37BA08CF5C0A737F8BA49DC0B976911CBFD03E720E03B899F89897DA496B7D6BA7E87BE5C2C172FD1035578DF9827596C5A1F5BD8E9D9103243DB7D70E87E6CFAD64FFF1BC4D0CDAA5FB5D352F55240BF18858D081CEF54CB315BAC7DFECE244F044B548FED2361BB37A942C467FB0AF9CA800202C292A2E1E497EB1A7A4F455F12FD7C1C095656FC2643990D66ADC644F5446CCA56033BA65B2ACC7643F8D358FA3DA81716250E6D9A76DED46D6B0E17DE895B27EC048655E8ABB64B751F12632A09A7CF82F3ACA2B3A7ECC15C9AF86BE53A403D1E62BAE6E923802AB1680C86210132C912504165155A7CB15903784C178E502143CFC459C84A9A23B54A8596E88C0C7D6918C640E29D8DCE11EA51A6EED6A6845DFD391952ACE19F6DC2B54BD07466F9BC2CEFB345C83C15E0C4A373ED366EFE74175308C6A26D0EBA40C46D99944F0C26988EEB210E8B8F5259B410A9EDA539CFF58D280AC4AEEE0A21F1147170AB06884BA44F33FFAB0D9ADE7AF501C7E208DB8F5152B918A950F3658130E461A8BD841519D258F4A79481F0DF5851AFD6E82E7CD669CA12FE5FAE7ED17AE27DD054EAD47B63202EC2024876478F004706A5A062D7A50A7F77CA19994626D01C34059BE4BF28B5B63728346DB6A9F21EC8B568206C5EF4338FE5F1FC792EA98A9A61061E99F570DCAACA7EB78EF8C959F84F78B840071659 +Digest: F91B93DE0C192ED5F0556AB97763A2553673CDA16E88919F1DC2204DD5FF64D7 +Test: Verify +# +Message: 73C2E2DF10AA9FB33CF5CD242C793C733FB386958B23F3D3C9C773AF5AC5143A3E6A190E6343737E4B73C50EA391777079BFCE80D43983D403415D92BF18C3448767BE1A0B029C23ADCEA38D25CFE71CC6622D8AF3A07837BAE643D8E682969281BE69F1263E9988D3BC716F07145EFDEAD451AFAA9E3C3367B1C234E45BB89B3AA23B5A289F589C7587E705A1576EBC0049115D7DF37C912B0CAAB3A01059BB365F2D2DD094409427F3DDC698BA9A167CF903F75AC60BCDED15B841F4B7B59E500726DC12C25D5E6C0914EB1AC1A5D21CBF0897B30F4E115FDC09AAFA8F218FFB9FE4B0DEB72371FD64EB6676BDEF66CF5639E8CFC0B722C50FC3BBE06786816073007CCE3452254348AD50A96ABEB4B344DACC5589B97E052494895745138AEB1BF7FD612DCBE2719DEB64D9C151091F454C1167C8ACEE37BB24FB65E62F9E23E8C050ABA68FCC46AF8EAC64AFE330981EF02FA954DD1F5FF5A76386BA1A8C73BF08E4B2B70FD4F7D1AC8D077360E0A2EC65DD9654428C2986D30D198A245CD3D535A8FB10115240404022737B7800810E81F54C1C864467AE92B207CF7CDB0CD29ABEB2F4C4766E2AEA204855A111CE81DD22B50082326F4109004106584400A318F39ABA2FA86699AF889603561E7DB813EFE2FB72D4F34928ED236F0D80B5077F2F4AE2300574A68AEB008241AF11844D3CB6D8319F700B1B3EDDBD441799171C117D935CAADD42D05786AF48FAEEAA291BC5BBB88665F8D3285ABA9A740B6C76B1E121FD303FEBBCC5EA07392490CA0C3D4C89DE1520A24CDE1BDE3E896754460866A048ABFFF4699C904F1500831531ABCEEFDCDFD61D83ECB927EB4B46BAA1764B356F39853F5121FC98553C90DE3FA5F0D72B3A1A240A352CF8FCA4901BAE7E246AFCF6D852F28F3A0095FF7069940C1DF4AB544E114D6C3ED0F92D66FA9F1FC373DC5EF35257ED58565CFACF0731DC0F1491424FC91EFDE528F48800DD8ABAE4680FF18831C2419B6D70C9D97D10C688543FA6147A7A446484027AB3E8BEEF7F676E377BCC566F424289394B4521D98BA6AE6DC49EEC7181739646BC78853A17CB57AD2DA867F585D20F6C366C181CF40AADCB8971D501D566252CBEB169EA1B23D3D29CF48951A9095DF47F9A8A1D4C6F30D7B8B64874C19345DD09FAE7D2D117F955A8CC414A0D99F49423EDB86E75A2A55FD987D3519F42F4FC3BC62D413096ECE897D24D6AF33A64745B82C872B99B64FD0F9320568D4D0F7BE1EC285206B34E836B32B7DFC412A514710877E208F647B35CE6894D7FD71248265F1FE5F917D6234A63771C21B517ACFD03AA92004FCDA318DEAC0C8EC3FAE1CC6093C6E76A4A1EEAEDE952D37645D8A46BE4293F4C7C8F98CEDBAEF9D9FACE27B7E346F9778AA03350ED240AFB7F6F130AED860DE9ADEF9855188CA8512C4B38790A50564D719C5AD19E5261DF3081F9AB3D32708E894560C5BEE23A2064918C4EC38989C70A05C284B896273819368F684F670E31694280CF7E1AF3F70D6600890BCB30517180CEE7274541938E3F04538938AD6ADC8A5F90DCC34F96C7A43361827A237EC3A4FB8358560EC69E748D61D87502C441308431FCBF0DC2C7BC74C3C4C90C6966E7829513EBDF6838B43E0720D8386346577DAD2C28674A8AF3A2FB0568DF1ACFB4B4025F8FD59ADC6131E4F4E97E88779939372D881EE72FB48AEFDB27C89E24360AEF2D34849BCC19116EAA64B1DD969563AFE4E7CA03D65DF76E6A212991D51D3F5A618067D87C6039D5823B7755C3E9EBC09071F80B863CE2C7F4315DBBF9282DBDF34E40F3C8F83F6E9B42BF3D9A085322CB491FCDA316EB2E3246AFEE131C414403C2BC76593EB84B0F74F0C67F114DCE7E062185ECB2A82E9C89756F2600ADA964668555F4B3FC0558BFE0DEE3EB699711B6C8ED3AF9AE00559115B8016DA4268240F45137CC884E1D1D7B0E86CDB5C835BD7FB475E82828085024180BD372BEDC2A7E32FC31303A685E71820D88C6991B1DA04B5AAC81589BE3BE0090560670CD30E39186308D71A2B7843026AF8D4CD8802C9BD1BD14D271EB6403B9BA395F19CA7955A6719D36E941C5B34DBC76CF4C4C4BCA1CC84E5C12AB3B76BFAD9674A79AFD7EBFAD8FB3EA5A0021ABD17983DDBBD5D6C7E8BE95FBB385F12C5E8E2670247EBC0D28D16C2B9ADB9F3BBC8DAE3DB1F47C4E26657FB338436E8E66B1AB7F3F488271757B20E422970029955583058B34C0CD982292EDFEA2CFAB067B50D6FE8286746962314DCAC08EB4BB11A2C9697948B14B2E412DC0213BB7B6CEE936005D6354A402702B93F4925B1E2195BBA39E8F7D095FAD24B46CBDF1696736B6777AE2885DC9C5EFD16D67C139CF8AF9C58627BBE68B05B43AA4A512AB3B47B1EC427055083AF4ED2A3B0EC766AC09E7B56E673E8D8C27AA394853DCEEA95E0408FEC54A365CDB88A9C65373802B586DC491560A23F5A7113EB6CE444FB55C94F35EF622531A1813963F642CA7B97F1EBBAAB1C579429C1B112CB1A4B69E8DF8E97173F09221C5C65DB370AC1B8AEFCFF227FB186CC4BD482C2D799B9EED604369951822ED218052887FDFFBA48AC7F13FD6FD23324E137FDB91187F83C35BB7034D7C899F43C337B32A5FC153295B338973B208C2DC7B0D3F0E27335880985E79A5C81BD088BC381CAE6CD06F70E094871B82A68A2B9E8E6EC230D00BD8C24A89395E1EEDA2A44A239A2811028FA09F12901237D55AA34DA28DECDE2055F76EB1E0DAC56B2023BDD1206A152619E9B01BF94F62B7E7C6A8B03530D0A4F2BC65546E573A230CBDAC603B09F4DC66D84DC2FF1989649F90B089B5A64A65B322A311801288F2F2C7084218C3C4A49498679DF3B256E80C233FAC7A81562EBFB474D1D96E81D339BFE7317C1C97714EA40A23689AC6735E988858B4E5D1EC93EBE65ED1CA0E8C3CC2A5DAD23ED40FEB2F48905886B2A7ECF67AA30567F5894A1040DBCE1A8D668082347F284B5186934DD5E9A5747584BC5F937B9620461EF01D9EFE7EC2F44E7051B67BDD78D5BCE712201B8D29BEC1F86F4E3DF6997224D637A6BEFB98DC2F5E6886A1E46FB9A761B3B396FD5669B23A773CD72F7E4E703B7C54B011FAC563D26B7EEFF9F9F9E62043D8C7202907168794AD8996C32EF6927924689B322792C648608CDEF1165E5FD3D7C3EFD619E02E0811EA03ACB3F805EEF99E813AA71A204B197995C7B5376E1AC1F73F00635FFA1AC7B4DB2C7E24AB933A671AFB6869935B96E960709CF97559487B018D3BB45C397671797549BDD58B1FC9C8F7CB149D2D5CFA8290CFCD394768BAA07D335ACA268B5655F9C26D48A31F4DBA4FE5EB03A525C1B7D2119CCE0105C9958B24272830055C8932435363A39F88832E36509537DA76D7F55E6ED44EB53D7D1BAEBB289F5AE37A0F8280751FB2AA57F2598AB67691FA7432A2F1ACEB563872FE76B80EB61272E902A69CC43E13781A6FF12175348FB66DC5315B4BA81FA654E169C4F41937CB9CBF345F2EDC432B96D58A2D497EEC1FF84456C94AFDCBF047F3F7FC1D5DAA9E324E3024A92B925BF1566DC1CC147CF198CDFA1EEC8C730681E9858A4555D93A684DFFA2097E763522B9B6EEFF769B59AF38469ECFAD8C33EF944F6FDB738B1C1B9CF700E043895E48C6E4155261F8DE3E67FA2137E0FF319591C7BFA49EAECA8B0A2B9CD08C2A6BC877F1A356060A76C8E8A2E57B94D4A6E4596745FD52D8E3AF2E03B6B85CE47A63FB1B68C7128DCB5DB0E88854876D44F50AEC1FBC3C8A8BC3F06CF8509C410D38541C5C83FF26854240C88CAA0B16F502FEABF4FA02FBABD418AA86894458D43DA9BD9E07EB3F37406DB68472B644FC3FA928385765CCB49AD8D000DD7F6DA9EB1E193282B9A42DE846AEEA68E86D67E82741409A32248E0AFD35C2DAB4EC69860088242E0195416ED71083C95074D9225260F97569BA937085A984B1D35048F899202E092E7F56879884413D1BC967126054622B99613C3277AF71671F780F55715E7FA214866ED9BAF0BBA86032D4A050F050271DEF8A5C2E33591D937AFFB581225481D69AB0E44CEB7B5F13A75099BD6EBE1CEB193EA74393EC6E58C7953976FF1CDB8113C4AAB552DC7077DB0F86F634F9DE77E1D58F46AB6E47C77FC036BE9550993A6F4EADEF322339DE06DFF58A48928CC2CB611D826D3D704BC9A1FD05FEEAD1169EC50063DCC89B0B902AAFBF018F5308F2B45DAFF14A0AEA2C38D13AF7845CD5A903148F90124BF7660F1A40E526E56D00D9F6E1467DE56EB1D303EB245DE48952BCD3E8769F85542078D3A132D62351CA799A3A1155F7545ABCAD14AE007332608DA8CE805F53875520266004E196F64C137EF02C3329BF44F9C8A61380452A9D733093AF806DB99D1FD02BC27B1492C21AF415C00CB56D9BD151830FF6FEFE3C2D3744DB579CE35E61E29C4E43A9C5C0B5F8C89C1532121352D27B9E6B0D5824D32D12B658599538A32ECA717392C56BA0F5022FFD58B8B7C0286B638D872B5A67E1F3F2C17190E0B5AC477FE866B44CB1760AD9F083CBEDFDD038140E0625DE00A735B60B27B06BC18569666413027234C52EBF5AAFDC476053A2F97160C6EE888B30BA285F4B52FABBF1701BA29A989EA9AA1D241518461D5EF2BDA50FEBE44E5933B22664EC18B80AC936E7058C5BE98F6A8D5CF375A91316D07D817C758A96C4C28A9790DC4D32A4914F199E3F1CA36D96281FEFCEE7C93780B91F86DE110DD09B8D75ED527CADAF8C28E7D01435D6031825F1293D5F406A7407F18C559B27B8EA86C3F1E9EB803BB8ADF27A16989DB14344D4D5E443102F1B44516F5E6142D75283B8FD4CD167A4EE2FACDC792165EA5B19CEC6E327CBFE7FB211B0327B8A23D96D1CE1E57F06295B300E39C99E50981CBBD7138282A871E17206DC530F5D058199B52DF4E8361B3CA2EB69C85605EC8BD1C62577695554C74C605868B435F69BFED8AE45461C2079240C89BD574BCBA2F9550070D4FC9EBA533943F7F382B367B2425197BD9E4F7D5DCE3C8482D60B05248EE3E70FC4C09DAC9948F1B88959815A16F3AD5D329982BEA7B06C556E05E49E8B8371713CB66E7D70C77D5506E9802819CC8AA2BC312F3EDB9A6655247B25033EEC6BF056F8BE14C46CCA0B3F84224562FC1553C4EA2400B05A550DB5A0C042E48C37E3677BD2E14A1CCD05435967279593AA6B5FA0A735D1 +Digest: 222368323A754E5095531B4F1DFE93AF0E662B32FC98C727572300587BB948CE +Test: Verify +# +Message: 371207BDDE8547C72FDDDBE90B3EC40B5F66D9F8D8BCB301608512354FAFABE6A18CB7D4407AD50C9DE4DD229420C96F2C7FCC93865E0B30957F33568C790CDBB81628AB26ABA8827B1B0B4DD9208947A39A31C99703517BB55C14FA648A5E101CDFDCBF310823D11EF14450EDFD6D6B7A3B0BC7D9B3D41BE13532EDECC725D508BBB7170835F6673FF89B655240C713A128E76CD9F125BF69DD473706A949BE5F8F1342C8DF329AE42E2C7B74CF5427D69021E54A64F47B1C5A7A5EC0BE907FE2E605DA0289796AEF044ADC483C5669BC719A80B9D811CE371B8005C0CABC5B587579CBFF37D6A1F90ED7470AC7538B6AF60FF39224D2DC541193EF2C5750EC4700848D7C65E137F08ACBA72DC064F37A4EAC263DAECF035419A7F2F9842FFF6E99D24626DFE4893C1854BE31106FBB0D93306D1A6FD86E51A0CA98474D4BFA344BC2DE54DDDB19F83A3EA6596EE2D60F2651B1B1CAC035E60208A6BC483FABC6003F1AF6D593F84297E662329A57327804A5085B2F650DA07C498342C3B025DEB41E0C4AA9CA475659AC6E95E702C17C0742EDB7C59392E02AD50DCF4054E790B6C87CE8DB2C5268DD11828D5D55B709B67B67452880953380900ED4CF6617F3A5E408A2E037E67BDAE7A2F47C027E789C204428A129F5A1462F975BF43F305B142D970962D0E98B639B63F36BB756041F6AF6CC75309B3D514E8C2BA2029B90D22759A3139D4C77E04A1AB1BEEC0612023619F7AFD5F619048FB3535A0ECA1357C8604009681E38AD64A3C36951845EA769B0D5440E43F58AB9D3D0C649DF12404E8B3B42BF7F52ECDA19A68DCFE3D696B590EB6002F7A17441C579A533B92D434BC4D297F23052D21B7DD6FDCDE1C8E2EC7413E7CFE97BA559A0A6CFEA42E61E1D03D53E02CD9451C97959516B9DE558D002D5A4B261972F2AB89BFDCCD2B3F7933F2806C09C27EFF527F97D4E886A2C2B71128DE5F62989AEEB6E1723A412092264C872017E5C42046A1B3DE6CBFB7058C4B6886D19B19A7F6186E2C09C9692C180445F1310BB6BDBE025501675239AEDE392309BB65AD44534ED91BFC5700D67A8F1275AB7F27E5535A7E255F196E7D2B7C17D0E42F67A7ED4ED81C8DDE35DF9F603E62DE2FCE7DE182EF42AF9A7AFAFF515A6251D88CDEF9157FB798663A8E1EABFC603029233F1A89D7DB56CBE2E483903E9C6A6F7580C231C8655687E1B18238ADBDED5A827CA6C4D1173607D09BEAEF7950751346A40AFF650AC16D551D05DFC874B16F808387C1350CD0884B3941B2DEBE0E6D8A9F3127BE6BC90C401703055E51B03E8A9D64F9663E2670F6231C65B8939756BDDA9350AB086FF3985751528D5E0EF4FCF0280E1EE607D01416F34DA49C8385A4C9EEBF57EF38D5D3AB9496AE09A2C2813EC80735814509E4794DF1BA1A8D3557D0190CAC85A0A29F7073632EDC01823D490D2257037D011F6A7F8F53C5FE18170421442AB932A5EEF8184E72442E5C2624DA453C77CEB0A1246D408C59C5ADB775071BDF9CAA8CA8B9D8BBEE752A9FF51A367DD1DD1E9891B8DCA69BE99DAE971E6645B9394A155A6889CC3B4DDEEB17E0BD10C7B618FEE7CC9D9B9535985A20E5D02BD68EEBAF19AFA7B3AEB0244DF755D59F707E032A6C77ADBB8A6BD97146AE6813688DF8EEE7FFB20D71D0919670695E4A5896531B02B17B2154F0E497BC5AACFE0764D532D70CEFEB9B2041F430FD9571EB0CF28FFF2EC38B6EA8A758301CFA23F9EE4B6C2CBBFF2DAC71AC36DB6830E036D91F6DCB9318637A5F5600C446AF8AB81FC66B4E45F5DFAA81BAF8509E08883ED6FB3A0886041155771BB8BCA2F91F5D44D13CE5B398037F7B9E00330E58A6CC8A8C258196EFDE97BBB80985C5ACC5CF28B6EE36EA3890CA96410EE41ADF45151C154760F873695D73089B73B5A867C41B89D74AF60510055DCBA624ADCB0260DE954140CC94582AC45B594EC7433914CFDC25F4EF0FFC690ACD2D97E5A0D4E750F7AC2D88FEEFEBD21E592D8A9018700B203CCA7295E9E30BDC45297D80A74ED8551160CEA6ED84635608C37FABB1FBD85778088BE22A2834DBE9EECD7B5CED09259251DDEA67ADDE0237BD79B3963C75C12BBA85212C3A7EC8EA65ECF88F27747F0DBFD64855E2393405CFBF94C5DD64A00A957636DC9360C6113C648ECC6F5A983A41F0E40CA50072B47256F9E1742649037A012B4F31C8A123A09D2C7A4A47B69FB6E46346641A166146706FA71ACD9C4B28C7CEC5B66494584A0D89812193466A42389683540970899EDFE08FA5742ABA793CEA6B42758A31AA667FCD717C56514AA8D63B64D66CA8DE878CF47370B6F2A3C89CC1285D26DDE4D62E090FC7663FBDE423CD2812778B6360965713B37510B2A75DB00A49AF4E600D28FE0A92A784ABAE7EBC720C2690BAB9F256B8409C09076176817DD7B867C2D1FCEBEFA9A0BC285F810E373C655CE6F11FF073439A1885B4B7E009711DC4CBF38B7B3EFA9AAD7DFF11E7926A4E783BDBE179FCA33BB43B643E1A18E3DEE0756FD198B2E9C26088E38359C30A6057E86AA458D562E450F1D98A44D8FDEC13DD5246AC856F8C032822A46573286F47A661C78E63DF8F8B3772FADD6277DAC98AB09C59F89D770DB9ED0BAE85FE334EEDC2AD5DAA4A557C903D49726472DAF9EEFC04699937AF0A039598EC2B1A7A6A682AB0E2756FB68DD665F07B6AA03BDEF08D2A3C034CEBF6AC983787865BB435FCD1A5B2B0533770C502A81C531D75A31EF2F270BB87B2723D46F4C23E38D0125DC75C4B5BBD55C7ED6D28D05C6F62CFD74E09D8369D81924C736FC39295D3E8D496209D096BBCFF7D180474674FA217DBE4549809335A7D4814D8EB6F136244FB52BF7D5E988120966266E1E95C5FC3C85A2F36B927A7AE4F74ADADB93F45BA9D3AE40B21E80B63394B3EC0CA9C91AA70D9F690BFEC7668F41FD063BEA8F8FE9695251C8A2A67041B598DBA2DD49B192D1879273CA1C474C999F8A60DDA9E0C1E350CAFD689D2434604062D1BE7E7B64B4E4263C43BE2C2C6F6C3820F3DACEDAC289F4E667A467DEB6C8F053E4DED9A901F6AE5FD5FF68D70AC13DE0FC4BDD05007863C68C38571A27531AC16119D9FA9271E996C3140BA9ADD1917C572A0185CDF7BE09461281ED8AFC7FDCA5812FA80573128B4BB9D7A59112F4EE8AFBD69725D5907EC3BDCA0FBD33406E56E58176AE43D48426136DF6DCAF09EBF4029B83A9F28406C558CA1F688619DBACEA7F4351048D083F6B57B6938A254FD2120C8D96C06CFDA243CF93D1283DBA49B919D6FB413DE4896921F56ABC2D4A6E85904B5D3DF496EE94B76FD942C29C94A43452E41872650BD0890060FF075629D30103332B58813BE6635C239C6EBE631B0C496A5BB96C4FA3618F0266134B02BD16ABCC50C47E8360C34E450AF13D7879AD7FC09563B45D91B4200E33E4F8E377064DC66E4385D5FD85531193408154B2CADE2A7C3200FB2B4B6C7A2A4027641A2A750B20CE00CFF4CBAB938F524E6926D6969E83A79395DFBEA8663AB9B97627F9B0A7D7F16FBF61C39C13BE04CC757D88EEF9C75127C79D167461344718CA8CC525E136BCFE1E6FC84F26058A4656571E8BD894C6F5CE0602E7AD63CBA426797F7999189275DAAF8F024B6F78D4A571FECF09062F37FAFCEC7025407F05D3C7D46D76524042168BF84DE4DABE609F70651F809D9637E9941FDCB8169D195DE7ECD5E35E8001B3D9FBE4815662877B3B8C92920814B04858422A8C317AE6156B19FB2436F2A8CDB0C0B6AC520A157971722BAA890B821A8F630B0FB7B9416FD8A29FEDF5BDAB608AEE6DFBC46F4AAA5DA3BFD31EED22BAFFA3B634D9CE898A65D152CC9716801A79B0DFC6A89131EAC81D574A29969262DB2BCC0229146D81CE35241406103AF8965C6B7544A196E7D99C19CD76BE36EC3DEED8483E665B4B306D338CD08C7C4A73C53BB047421297DB8C441A846B150697843F875DE04B274AEBD5BF590AF321DAE319CD8C8E7F2EBECF4BC75929370AB7601AADBFC41C83C3C7B5FCF7132F764DD85F9CD5BFFF88156A90609B196DE07C84E66FEFE5633E505C54F2EE000FBF066DED195E25BC2E51E6733E205680B3D98DE11596CDB02D4C79740408DB0B9737471A5BB407D45537DFDDC33D4266E26D306EACFC6A5B1A9EC965F2BD082C00F41E585E3B86151E2BA6640C34ED5FE41ED04ECCD13AAEAD1385A1B557427C8C5BE6F708B56F036E0777E63FDFDA1C43E904634D38F15933921E5679B0DBB905D110B455F1B9EFAB37A5B792A79580B51D00B4324B931F0713AAEB8F880D9918428F02C2BD47327655276AEB56CDCB676D8C8EC7E6B92C4F18E839CBE6A38D65E35A63B0289A3387D168A739CD83678EC85DA33BA93D914CC2FE7A0ED730891C5EEBA15DDA3BA2A0D3F8A729694DACC25BC6F2B070A224D229DAAB563B50DCEB63D11F3D18669DA0220C2DF793E507C9746986D2695AC9B4F3721392BA94F47F30755CF87593B3461BD86C20600FFBFBB4CEBFD7C45DDD68FE1CB014BF0A42CB99175A912848E0CCDE2383848583EF9011B6E5F3C1A9CC8256BBD2F80A2FA0565A97ECB139DC430B453AFC9A0726D861E2AC147D64081B8C12D6E683EEC21D313E92018AA810BA601C8E3A437B69908F576B72CFCF1C931CDC4CBBA2968EDEB61DD86D71AEB1CF4A97F5DAF5AC4A3F0B16814658C760B152F7274190FEB32DECFDD5893AB8911D38CF03750016BE7A6317D44CA371A308925DAD8A5596AF26089FB396A72CA98D22FDC6067F4D9BAF0240729E4E8D2210FC3D43175AC6021575AAE1CD24274682F1B48C903A5F9540B5EE281D5331560C6612AD8DFB664AF0A4C8A431EC2306735148AF0AD793C96519436B3F0A51043FE8B122DBFA72700D6B9A92408A97DC28DAD0F8E704D8C97BD6AA24DDADE2CC2E686A814EACCCE652D83552BB3B679A19FC95BECBC2CDFA5FE288AD83486A6AC5D631C03DC0CFB7A68CF6364F9AFADCEB54970623E7EA9222809CF65DB890ADAA315D4A6AEE41908E13CA2ADFA8D8AC29D1092EEF586B144AD4AC93FE1277511CCB3E2D74E8B0177A7118FD8E98AE64BFE003C4F7240A6CDCD1C9034EBF9D8FAAB7AF191E6DBDCBF2DDF0319D6A53304D07CE1DBEA57644C055BF3F69D1AB3DD9C15BF02152F68B11179DD945EF19D30ED17B0F86F41B15EAE77AF2BF8AA7CBA317D262E4AA324D3C28111099577146A7E545FDA71DBC0260C87BB1E4ED6ED46E6035DBCB27EA10CA +Digest: E52755E42526DF51DB13BA10C05DB89F78ED5C90597F87A77D80CDFEC638D201 +Test: Verify +# +Message: 6E67AFC8448176297716677CB3C1587CBDE145FE3B8A269D9FE273599817E7ED43B38E5D0016F21408DEA12CC000722324E6F081B4BA7EDB12D02CC3FC6545CB3344590AD979B2FE5310E1E2DD461087AA5A8C0921EB6A7D2FA18A3118ABB213A2F357356FC31B5A0E828663DF3A0C7AE6DB0C535D14C6F0E04F5921D94957E0FEA699B1E90888FD5AC1A555D4BB3499B77F810572BCE18202BC678B6871C5C7865696056243A506A5129440F3AA0A0950888FE6687B021715946DB566D9802E62F10B40C00F52842FE11D803AED9FEAA4EF0CEEC1DDECB8C77AF1C2AB8AED8ACCCA467E47C32DCA1134B15041457540E8577EF09033A140D08EAE7694725E2978E4E67177C86ECB74CED802A000DF7A14AD8293004E94A96BACCAF66B49F5B0E27A8D8BDEE41A193F45558569C8DADF319ECF47FF62E0AFADFDAFA93CF3322BAFE475F3E89AF2B796CEC9CEB9C226A937303D9CABDAC9AE22435160863B84C99485BA04B15E9C1AE333E1976CE6BAE56D061C6D465431E026ECBFC2C8FC6E18226FAE8DA5EF871DE5793DBA475BE3C22B987C2182F13AC14173EC437A24CA9C69B70607BE6706E660C8A8BC1F2627EC55CAEF1EF2B0CE80365F6CF09F86404687F1D7F89420FF5EE219D1D4DB6EB4995B8899D7CBF7078CB5AB5A5064943EC4587B3DBB6BDEDCB4072E7FB92E6B57C4B273F0556DB93E442C6C54CA09EF7DE933ECF87560905AC50755151EC9CC3EEFC56F7121C80ECADAEDBAB3B3F5B868122FADA63072E349B4163099249965EE7884952BC642F81D61F16FA185AA77B1728C7ECAE1B2C12EEB383C83A9CB21F233B58F2CFB09D70F4BD744AA2D185E940C2154CBBAEB21C1CE86E03E65D7B43284A5386D69E50B337684FEFB52EF0B43411D9F747E491A38A7578388066D92AE576D126CE1DB876CB867B3C7F464F0EE11A76DB7743FD19C977F6C6580BB7A052DC581C47EEF7B5D7A69D8268BFF03CC0BF6B418B5DF2DC966FEC8CD34CDD01DFE4410C7CAF44A371D1C0489EF129B47866CA50592F60E9EC74A74110ED84A214EFFC9560DF4661212C7CB29D9B8329C826ED0EFFC0973EDC92A4BC8FAE3374172BE4113EF901DEB913E98FEFB5A2BF3670DD3E28A12260F24CE01FEDAC83F5BC1B8D8ED95E52CFE7D653AF7B9DFAE38EF69CC1C6584218D359FFD2D3CCEA629ED9FEC3D87D0925A6F56F8B50511860D4B543818285FC15CD8C5735141115E8561738AA472771F0B865C605CF4408E78E86CFCBDF73F45B77CD9DC02C93EC40758C54B3A6F6080104CCD992A275007433E011CF6AC49909C87305AB87B2477A9D636BD259B5AA210F5A0059C6F8D5BFDCFE1F15D0972DACB6393594000A982F341973E3457C960BD1A325B2A35953C47854209663C87683A67850FC385F1ADB7C61B3FD0A901190FEA29358439E06A0152D2AF7408A8DE0258599FDB1E58F1BF69A917B7B13901BF96EC7DC3A06A8434272989380661201B7ADAB47250638E82D5AD94249594D5FBA3024BD46DB5D68026E104C83B8351C0958E0B0C30300CE8C818A8718C7C3D65B5DDE8B6DD65555E4C2258EBF3E98E324219620EDD0ACF0E3492B083DE5DD65B689F549D8FF36A444B26CB07C2EC1FE8A68014F5101B9B11DE424839EA11569AC49377A30D0B9ACD5D43D71A5DE184046A8D672B65DEF6A795951C39D5DC865F49A0A0717BCAAA6B92FF9CEFA793A4170A4FC369B00240A70CF01BB757626EEFA638D95669CC921F96AB3C6C657C34A2E74FDF423C0363A7D5FB6B31D6F8517CE4F08C160941B9A1D4590380CB6E4B350EDEFF25C436F6473EAE27344FB21EB6911D4B80226E9EC3BC09EDA1CF6C43F122C4DB2463D2324ADF239AE236097835DB6F3D6442A345ACA73F5C9AA55C626F3058DF2295EB1FE7A8727A327D901B9BE8682F4430557605A4BE7B8F4E86288CE750D215E97BB60A13A520E04160C48262FCF1D6EC8C426C946992A335396EEA42C84B3239455E17B4A230268C7C34051629EAD67FCC7BD872A56B6A36FB99F31E4609B2858FC10423DC1D8CD4DD7AF38A4D323121119163ECE29CD0CBBB349116F88ED14699FCB8679D9C00DD9CF231860000F8C945082BAE795BD74F97DA27ED892F24A6A10182043A3C3041AA0DF86A9A4163D15917382FDE9FEC020EEFEEA6F17336F733967634B842960BC142E90EDCE09AE2675118229412D8B94A460AD663BAE021FF55D511A5CE0D49AAF1142C3EEF2A33319A80B5C92FDB0C85177D9740AA54BEB4D50D8004F9EF641EC6CDD0B9B2D2D402C26F699CBD689527E1BAA50FFF338775270306026478C81E9773CB36374E68EE1071B0289189DC3CC2A4745A82F97722A91DBA5A40ADABEC078BECEE141F35CF46D520DA945EEF647DEAB626B82473038D4B342A3A25DC3CB86C6154B623691B94F3A6CACDCA742A8B44CB6DB3828DC629006F37E37BD9F02C2043217A187392804D6BF7AA39218A1344C61BED0BC454E6691D46BB6F19ED5D535AF9901FE9D2BA3A02729BD33C9E27AB661E1044F7EC16D1A20E3466093B44C695AA3E90D60354B91EF31B442E740215A68877770813352830C97F1B30458B7180CD34BB22F10BECA8506A9EA5E37C88B73A2C7930FB684757656682076A9D14DC734940BC57D17AB3A4AA1201A8098EA165E61A3812F8332463D4A55E38A482BB02B2CDB8B84F8EADA54720E0C191A809B19EFE6A110A2E8FA5357F99DF321E419399E550B88129D3BEE711D406670932482948BF78B3469766D58D4EBCFE6D19CDB1294554902AEACDEEE26FA2993C9364BB9F89424CAA7A0B18A53669A9045676B81D2B220EAD38C50D690B711F38A33A84623F26690330872EAB244C030AFFC65477996D80ACE929AE98F746B4AA2D2B54D5C1F27DE46A313AF23EEEDACA500FB8DDA462477348A14B3B82288C388CA529A9B4331975F062437E2C1DE508F9FF9ED5A0FE0F48A890B4B082894CA693105E071F1FC621FBD13AEA75ACC74EF9BA943093C0614ACD3B3763526BAD7822514F2F31394742072A9B56CC1E4BB419F4B45766C4EAC5B4BD00E25488AD32DD89191AEAEED42A38030B9D8900AD5B3F3237EFB542D7308A17130DDF3840844D089BE0E7801DC15963EB259FD43D6FFE8EDFD21D39CAE19389FE4B839B67119DFAEC06A4506D8333B74A267B4EB98A6E4506AD23D988780A72040F2233613EAE045FA7FD9209D7F14253BDFE2B405F1B45DCB77F3DA57E97A64C26C829C8F59D94C61455BE570499040C6974A57A40FEC32AC93215713873C0D7F4C6BD812294F72E8AF9EBFB504E4DA1ECD34228564D24DB9242944232B7EA55D51280B87630D334F560A34F413C2D0BEFA8F347AEEB309F242DA203497710589045A27208259C9A4B78F361AA17D0833776479A012E2E754B706F88E2518703C88F42CDDCDDB994B2817B8F79DD1C288B34A978240C0D01280B2A39A4FDD902C229ACF276A9C1F676CAC1E498FE5D01202A3BDC820EAC9B2193F470406070CE448C01B344189B72D92DE5B2BC8B3DD1E8E6B03A8121A304533E510A0F1B84C70D2609FD0D854AD94A7F3A92066CCF4CC636D5386A472D8989CE19EC6321B7EB1C16284484CE8043FB8C69C126BF21F0E2BD9ABB91F816592C92040C870BA690BF69EFA2BED34AB81FFDEAFB9D1A01F3A9A68BEB4D3D281B2DA3016EEE21809457D791D4D81F232E7B2A3BF04A91FC5B1344D5FAE15727C6419EA2B816BB33FA90DDA6A42C7938345481E188AEB946819E9B0329A1DA748A11D3A62D8F92954ED74E0925BC54762F0F4EF302F9F6F7D82B6379C636DD9A46BB5B690C52836336B2E48E87B10122A49E58ED087F1B559D0B4F5645FC1627A3E92CC3BC8769DAEF678207D3E726235EC562FFF4966EE698E6BBBA5016648C5CF683B1B28FFB7BF12E48C9BBA51B22E121E555D066A0AF08BCE976707D2BEC8DE7188A5823BB0FA7C57913ABFDE402E62974FE6BED34440947DC55F77E1C1A25152F7ABF04167049C27AB3F67550541546009DD4C238CD596CDFBF2E6CD66F42271E75F03F6BDCD785B68B627EFFB66C7A12DB211E7FF57402272A64DA6CAE34BFD6829B1B1341044D33F73F87BE9213939D913894FC7A003CD642BEBC7C7E1B38844538156169E11F37586C21F2E03C3D39DFC380E827948DF18DE8E82B72178CB6097A9BBD7B55A354DBB01F87F756BAC4648BB59619A5BC97385DC6CF11253E25F79948E6F671AAB1EE04C8DAB266973B32E507B73140D9B6B32A6A69C31E7187256C0773FAC7520AAC2B6F39623E98804D73213FBB3C9DC4C11E33673F87E36A64EB6BCA76534F0FFFDF992A6761574845C2BF2B73F264D4750A54E75B60CAE711246EDB7DE3F9F694A9325BBD2F14DA67B426C3C2E19DE118E2EC8A0BEF0E732268467FAE62D14CB39CA4760D09CD2C41F0261E8778EEA997F19B7228CB64B004754A357F69D55D9F793860DAD684457DC425CA22DB455570A324C81CD6848CC1714DB33DC4D78160E4B5302152CF30063007B061BE74553E20EBD744527FB4602B8271B07AC1B9B5BCC477F22F1B48A7FB0DC8091C1F83EFDCC8DFA8D445235770667612479CA3A6F79DC240735411A18A1B36B021615EFEE2C45F2064C0EF32AE4EF24DC431F84681548002E817A59FF211A30A76894084FB0B07E137B196CF082246F65A9B3949F5438DED3E0F05B2D33B2839BB9B0AA66806A7E434DE461A6D2741ED015A3B9FCC04BD16122F56797E905064FBD11AA4C66EF61D06BF5D591C4B9CFD232B3B2D6DE65A6C1128196C725A5A58B28D74C42AF43F23900BC4496EDC52A4A23A47C6EA37A61440E9FC23D9CEF348B74D22E96FE2C0CC1E672628CBB1AFCB50C86694DE7D800876B8D714762351F30B8C993DF925A5B63229CF98D92F6FF749D578328487753D1C2AF1ABA9912295B8764E14361F79C1A9A5D5B0F6A6C2111735977473BA457C1B641099A47D0C1EB9C66B96664B2AAD96F4BB17CF8E13040B4AEB2F498890751FBFD8FD57899FAC38586FB44A2FDC8ACFF3B2DA53D923CD5AC8429AF49842D199D11AD0C38490E35929DF9DD5A1DD1C5A86A68AC02C048B536C43D231EFD128CEDB5BDEB6134ED22ECDF0C585BF3D3B6AA40380AAC632B92CD3448CBAC4F0780AF46DE83C9BF2F397F915465E40109BCD3A4315ED5B1FF4869CDEEA3C9F092C612DCF0364BF2991B63CCEE6CC5E87D456EF66E9456ED5D1D20CC01FFEDE928BCFCFD99941E5E83739EF4CD3F1B61FBAEB6F0FE38B5FE2B8D9FC5049850E6DD95784B24C70B6A7126B78A3BED8A3291ABEDAF0DA6490A47BB0D93CE1FB +Digest: 98072DC48FF22CB4D8FAA51694FEFD97E0D65817F7586D7A92DC2D4402E8FDDA +Test: Verify +# +Message: B64FF54AEED71D6737555D786D3A72B7F01D79FF51BB0056EC3D9C6CDA06D111769D9443DA3146B13D06C543C14BA287557C9F41F98B676D02D4EC981F0624B26B4FB58CEAF1FDAAF737DD4A944E1093F15B807A0FF005E0AC1109DDCFD3322283024DAE4D0E8793A3F14FC43E718209E3958CF9756921DA4C0FCB9C8C0DB146BD669A300DBDF74F869D4044DF7A99A18F92470AC2B5D929B5100A0D2E1A7AE02395D0A612D07E23E970C7298715CA63242D975DC1D3C083A25E62492D6A2A20645C9309845566378B8E36BFAC88B36120B6103E2C3019683977D3EEBE380CBBAC8F1ADF74E452F2F96C83D25003B2CDD7F492004F5B98936E8F937E3D64044D8687D2DBBCDF77A6DD12E85A9BC5334EFBD2E2C026C12524EFA9C2A8DDD036B9C7D29BC9ADE5C273D252D17648B28CD8834F83B07A969E9BF39816096234B8BD72A486D8B352A233AE075867B9C12C0668B5AADE2FB8F3D6759A2176B6D9ABA3A6BF81A16129427A49390C2807495170874DED8992D8D4DDFE66602DF17EC3C72295364668FDE9524DB05165A533A1960D6D4A3441082693CCF2F7B669979852FB78F98AD3BF86500CF48B2802ED2BDEC85561EB0C9F2B0D19D2D4732FD08FABEE75920333F417F6C12D08D96478429B54AD2533B7DF056A50EEAD76CB5D872FAEC4CB47A35FC419B348B6792515D6B513E90A0BB04A94759192BF878F44885261511DBB9919B2BBE4DB7FCF78AB1B2F2E64832862275C82B36DDD5AC7D7A3894BB4478ECAECC591BD6C53CC90EBE8E7C0814138A870345BD98F33EFF67C890DC9EB956C59D6F9C840906CA194626FD25B9E3A4F942E4AE4107426890672B035DEADEBAFB68E1E6A0B01338051F322C7AD84E987BF9B63F564F997940B4EBBC532AA4AA14E2DF4050FF49A9A746AB3814BF5D1699BA40C315919EC0D00442CA7C71CFA3C952EAB77C59B7906887667591AF619FA14BA06426DEA7AF5D0C1A12A0300076334B4FD02EC7CD4E54B3F09016EE20FB0A871B39750D5E80CA27E3656B21A6796CCCBB4D439102E55EA6B8727F06D2DAF2B7A19E909C9D567183E27AA8BF20EF34291C0DA7F20A2CE05DB1763BE6A3365F671D3DF58A631E181452E192C0835142C24A3B16BDE3F0ADC2D450215FAD3455071BC0235567C506A7E53E8853583952B01653E7AAC13E9532FAC6C03D1C8B82B87E4D948B9D80BA09611359B0EC4A7F38D6C63FAA597715AEBCC1293288513E838DD2EF1A32ECB4226421CE7F91A7A551CB2FA9A5A65D247EC098FB1F32E06ACAC7D63BB56CE4519D16AE050D28535931155B60AA9F4E17C1FD9A48D19FB73DEC038F8F51A618616A0FA2D52E001D811AD5886C1744BD8BFD76DC69A7619778C4D08F50DC28D27797D9A0A63B0B80B2DDB563360C706157595E3984E1E20865B5045E13324EBC2421BE97F71FB2E464C347B9CEF70FD5320702DCEE9C6E894DE18160B2EB4F2653A6E09136DE4987C0BCF0D855B193187F2E4212692B1B8DB735A26C045235FC4AFB3BEF49DEE87EEDF4C3251B9605304AFB1ADEC3156E64DAB88AD5A20EB772E22DA5532B022069DD32E2E8B5118CEEDAB7063307DEB886166F4FEB47BFA72F1A3A21F03629D4A3EF8581B2FC52F7DA35FEC393A85A68215506E3FD156035421D7330DE9E1E3963C6E792487AABFE95C539C4A7955E15AED3B75D5785444E31E69DDB793EF873B1F2223FE7BFC68F30BE31D41041D7DD59ED0BE8C203F3025229DFA0AF2006F763C6F317EF8A92EC5782C899162EF7814A7AB0737BD89A8DC04832CC7F4A58FE94D5BB973EE6FFE43571B27830B24EACFB76D22A839009A366F1327016D3BAE5ECFAE01CE7C810CFDCFF14381CFC0B4B53E0D1868A8E20C9DDD26B5CF6FEA0F12ED68DA79A3BC90CFAED16B477BB0245D01B654A0B2874239588328EF1EF1DD53696EC29A716FC5FBE8ED0D65DCFC571D7C3BDBE762AB0C638FD42EE065925F253EB124698EF16A56652AD01290450433FE012C1D595AD84F2824DD83FBA869CD778784F099EF3B2862B66DEC9F3F64034F8907F8FCCC7506914D228A11447AF8DFD7E15EAE3BD1521C7EDA14E5C8DC8DF98164329F908D43070639500FFCE603A96339D5EC1663A6A80943D32560B927FA7A02872C1BA9E5329E124A477C51CEC7458738079A11EC34D1734732638CE4A4DE88EF8069361937067D16B104499CA2B794321D62556E17BAE93F03C27B9FDE2B983762DF14509FEE76D01BCD2EB52E90F07916C7F5548ED091F6429EB089B14A5A9F1B917860012910CB09C5047E06D6A4F5A7004A6391C1D5CB9ED043193B1A4569B1211533AC2479036B5ACA6D12E22E8D3FAAF972BD426D1E2FE6C495D6CB9B41ABCFBC58500153981BFE2E3BBA5A3EC3FE1464454D639740E49575091ADDE3A6F07DF3DB5C2ADFEFC2A3C37C1F9BC6E1611C042F1296547DCF5B3DA2E23B859C4FBA79D828360981AA91A8FB020A0539EBD818004CDF84014AB5A64F57EA576E5173F9C3B4676D0792E55C7FC7C152D9D635F811A3FC2DEB2515F30EF01B78971540F13B7FE040248C1531A8801099C5A350C3D28D2680339FF196DFD9F0945E6C87509B94AD334358000E460AD37FE987FDEDE47104DE71469C0874EFC2E4AE00A28799C58C71667F621BCC081879FB5FAB0B5F8D802906928BA65D9239442834BDB0FCD069659E28488FB6838390E1EC5CC8FC5078FAD3F985401E6153D088838FE059BDBA5D48DDEEFEFAC17A3224963A4F25CC62A36B43A72292B81E0BA9BFA69FC56C118420A8C260F741AFFEB2AB9D732829C061BCBCE7C7629590922CBD805DF92E358AFBD7A1B048414BC4188C6FAF34E01CB2B65D10C72A325BF33208E8E9C0D15F22E90D6BEF5CB3E5CE56B8C41844FECA92A0D7B282812A94260FB67EB13BC9718BA7C3B6448E321E2ECDF7037262BA9F128058D8DF7ABA3FB113EBA0CD634AF1F8AF84FEB6FA6DC1CA18304E8017CB59999275AAD06E165879767EC0C86BB371257407009C96D3CC35E32BBE95FE76DC58CCE6028B2B04D661100F3BC0A3D755EAF5C06565B8BB554825BDB87141A8DABA087D1C41B78E09E737EBFC3C831C4511ED78186B98FD06D7E9343BD8DF227BD2C1BB58DD892A32E30F63E8F96A33EC12AAD0ACD6D35C9888C40629CED2FC2F62A4AD7045D4467861781F53BC721D2C59FC1AAACE0D3093077B019E2B05459BF07E65A6180F6ABF4D9C0EF45EABA1B4FDCFF87C2F8908BADCE39BF7208C917A8FE422107FB32E8DED0B87B1BAD4BA74C16363817FB7F0F37756F7F395A66A56D60F41CEFA58A82E62CC6120C2B350AA0FAC5722FAE6EBB528982475B0ABA9C795F7695F15893262930E5196BAAD887A5B4A3E8341F1A14625FD745DBA6CA612B8B71BA39D8C1923D79405D1D85D344D198B4CC1AF5F0219B54537FE234D30AE94F1DDF1EC0F966AA277CEB1B012CCC35086B41AD06CAAA9AE82C4DC3D0CD982E77460F9CC1BD3F3FB1C6007E0AED480DA9A63D9D5503FBBC5A1C44E6E2D2DBF2681F9515E8EE6DCC0B4A45C6F5884D42F69AD7721F689A601DBB0FAAA0C1749743EA55CA3189D74FAB2F89F15EFD3304D8A2C0C164B946A7CF80FE8ED5720E99FECE71C97BA736CF4041CB52F24203FDFDE7E6E9B39561C5B18E6D88FB2BC4B45098140D18628B131189458C0C2EB02415E107A7D7D6AC0975968CEEA0D9882AB5C424E6E4F7123426F9BD8F728018C994590437473B779B3F6DAFC2793E492202ECA1E620B08DC642014A95D9E5602E7B5BCA4F8BAE639820AB2222B5341FFBBAA3F0D3CF66E64FCCB6D676633BA89C3E01AE991FECB4B0CFB34FDFB654F829B4ECB32E5F0126FF4B1864868B01BE14B6BB2B1BE5DF4921152AA32982B5A5A8DD63D23FB407BFA6CF4019658D618A7352D62FA14A6A922EC6CFACE04B80B7D1643FA4049C78D587B1B4B67C36CEDAA74F7DAB4088DA1AB56AFA55725FF04B8494279DF0E316992AD9158BC8E185AA6D3DE06A6B0618B2F3A6965B9376510290D1D6D783C0CAB2E6789EA4CC4D68F463170FC6C864A5EF529D1214CDAE9A319AE1CFEC37B714D66D1FC3A7D2CFCF22F06F384AD584B9439F241C750019F50D27CFB2B785DCFC826ABDE449B2181F96C40C28B2A70994AFCE2A1CF9B57EC5ED4ADCA9955F4F90BC554246D5AA4A85F369E2A1707C591BB93BCEAE1A31F6BBEFB496C23152EB189920F595D23A2F22979F8F85A2A3F6D8F21EF71025090692FEC5F0FAE0AB472E13E0F39F19353E9F509F9CC4DD5577D4421F13CBDFB4E9F0FD471382EF6C75ADDA8039CBF184AD3CDAAE07117FB1365D10113D3F96E6F410B85E0AAD5CD3A25DCAFD1A9F3FDA85D8491FCF7AEC7E2772BBCC2DF78075537FD6785C5F82EAA5BBC58F3F21448F2A467C7EF71BBF84A3A45A5A8E5C50A0B79BE5FCC877CEB8BB7CA26175E92FF334FB2503EB36D0CAE3BD259E3ABC7BDD8A6AA6610DD4576D99DC5BA4DC4FB09EA1029F948FBE1D818902597503BF74016D9FC3888F717D9BB61D39F29A911382DCF284F9D2CFC1FCBEB5C35B812E6B01903672D4117D57349288A5389C79D885CE489757FD2B94850C2A5E7E8271ECCC7F2E09636B748DCD4F65B078CA963BC5B67B5A6FB2285BA0C03FA74A1338576E910DADA6D1CCE33B65D8A9F830682F66C27B4B632BD798357BD7BC6F2C89CF17DBF8E4979F2DC4C27B0A5B3DAE34DA6692E1C878F798A4313ADBB531C444D50DD2013B545FEEFB10BFF01D429A6038843CF5316D8D8CB04DCC7BB91864122256C9ADAD87A39B6438B234E2379A393247C9D1C163DFE34FEA9AB7AE3F4A246DA26E7ECFECD30767A751E2DF4D1B3405A317E8268ED4BEA3E3F89865D8FBA58E96266CF156A1A029BEAEE69CE21FAFF76030B81BED4D3AD8CE1BAA66F66731EA96817ABA6BC3DF53586C788D91A7E5D8CB726CA2B869BB2CA2907829AFD1EB707E7CA844BF2B049F6982D752C333B38A2685A4D60FA7E551B5EFF2DA06A05C839D06BAA44ECB59CD2558B42C59C57DC03F74928B371FC66495418BEF95C43D988160FCD34F36766807F6C999FDC3D3EA212A27F24C98B33FA18DDDD5F2026E81DA544E360ABD63BF1C7C844006E57736060E2D17AAA00CFA2F1D3A3F1E173AB6137E52DD64D628DB134272E0E3720A18C0CBE242D3091F77C92F1E30422D9CB50D23F38118BE56A67FA7302D3758B7C5B7045FE332953244F54296EEC5AAEF4ADD306AD7722268F6F5DB1D1845EE49BF0F0922900109C12A4E526E3BA8CC081CAC206579A9145CA92F930100D1199637D6D4DC9605EAF8DB8BE1F293E3F78C7FABBB91622292CA6B26DC7F3224710A0A3D50F41A815392B7820EB9519365C9C24 +Digest: FCD08FFD51822E7CD3241C71BFA1A9F507FCE48B2297EE205095EE53EAF6B725 +Test: Verify +# +Name: SHAKE-256 +Source: Botan 2.10 library +# +Message: +Digest: 46B9DD2B0BA88D13233B3FEB743EEB243FCD52EA62B81B82B50C27646ED5762FD75DC4DDD8C0F200CB05019D67B592F6FC821C49479AB48640292EACB3B7C4BE +Test: Verify +# +Message: AF +Digest: B7CBFEDA173533A5FB72340C9AF14B82545BC9FA02828DA3B6773094289FB8FE75CFF7D0BDFB6015F3068907A1BA24611631D1DBE4EADF8D95A9F6B6021231B7 +Test: Verify +# +Message: 4FD6 +Digest: 426D6FCDFB2387A470C4B55B999315C69C9CBBCAC337B98D5F5CB38ACCFE99E2B195432BB464B2E857FF20DB2A10563BF93FB518E6F246397C1C86CE19A7C1C1 +Test: Verify +# +Message: 1DFAAA +Digest: 5A35EC9D3555ADD9975986A4D9E547FA19B5C0B9E34F483D7B690B762FFA205065F37A2A7B737B295D0935942E084B3AB635073221A4F2B928FCE8AFDCC1B02C +Test: Verify +# +Message: FAE3E468 +Digest: 5B3F24082085A8E223CDFDC2D644F559BEFEF6EF22288D87717CC7AF1A9FCB18DFDE7AD7E38838015894F7ACC98E420DB10DED4E85837B1B19CFE0007DC3FC4A +Test: Verify +# +Message: 92A2016A01 +Digest: DE390DA3333DA2B1FECE5B63EEA03D47C19E4B8D97B7E2E1EA6C603961DEEA21C1453B2A005E9DB9171ACF2D134F0E437D4276BF97FD3E1BB8DB3158E24CF90C +Test: Verify +# +Message: 2C6D367D34CE +Digest: 6913DDC0BE4C733E66CF583A0C28406CD4D142211C80FA39B43503211601F08D19C40E1AD43AA8A10D31649AAC4A5EB53A774734826419349FAF20DF30F2CCD6 +Test: Verify +# +Message: 569B4B2142876D +Digest: E4A575B8F8A33174E7C7E61E18462749134453C899BC01091609D0EFBBC587C3B53FC4668385A04D88D4EBE5A3395DEF42B9214C7A58CFF846D3D777A9A76C92 +Test: Verify +# +Message: EAD43641B89FF682 +Digest: F700E031CC3586AA75446A7CF91CD85AA51CF77D92CFFABF6653D86FB24282B9CD65284CC4DE3337891E25A4D18B4F29065FB7D073097B90E8D32CE570F0C943 +Test: Verify +# +Message: 765E430ED16DAF7768 +Digest: 3920A5C5D4D52E2ED66FC2266120B241D7F28A8027EE52B21E1F13AE64B9E7F9EC9E4AEEDB1DEFC9FE2C1FC8374AD4EED2D25CE85C2A041B087B792106F268C9 +Test: Verify +# +Message: B5D1EA4987274FA08E96 +Digest: 7A37151186699C54F10E8011A7BAE19165AE901276B03CC25998DB9F529EB6C3DEE63B66DA86F1AA9EE496CDEBBC4277EC461976D02694711078EDB95D500AF4 +Test: Verify +# +Message: E47944AE6A699D65BF5C2B +Digest: B74627078E9A27A347BB77BE38BFB4C11CCE50268390BA1E5B0A40F0847CB39C37ECBD0995D916421CD3D3ACC0378738B169D8044944476EA0ECA20015008E62 +Test: Verify +# +Message: ED57917EA7D2B4D252181EA6 +Digest: 57CA39DED6C23076D30ACFB07110F53535AB4489F6993CA79380C8DD03448D3CDFFE56B7EC93D47844E1C3B8E4A2540D4DAF1A1AB585415107181F3D99A08E25 +Test: Verify +# +Message: FF0A33DB7EDBB7DDE07A1640FA +Digest: 2813AC0ADEDE127FD7861F7571A7BFE15248B70B91E2F8C722D6F23F848AFA9DE0E42077E1C6D93D60F74A738157DDF8B3675FCC0B4F6650CEAA35D9BC478BCC +Test: Verify +# +Message: 7F1FF9CE9675E897B9CAD503C808 +Digest: 817D9089CB7645DF9FC0BA962785D6F083F9B563D7152BFBD95B73F9E1A9C6A5D295A0CB7B6A921BE8518F1D32DC7303258A583E27912828245C26D5B07F1EE2 +Test: Verify +# +Message: 7433876B76BA77D15CE30C915FF638 +Digest: ECE91A828700CEB782B5BF96A5BBAA3CE3B3829729C6D808AD14D4BF74027F64DD30BE8E8C68DA620006BC38059DFC89ED29A644F50CD69063735019C4387AD5 +Test: Verify +# +Message: 7AC3858B4C6A1B629ACED04AE2452E83 +Digest: 2938CA744ED7759D0E0CA27B0014E8C8EB3499C5202E657D7C568BDB841DBD011C1F222B5138C5BC4C89DB076F231082F3CA421421E55BC6C182F2D6DC7D00C1 +Test: Verify +# +Message: E5543D9BD799745C9A801C336C30BD8A05 +Digest: EC3B02C431EB03A6F62AF1B8DED349A34D9AD07D32A9CAB72DCE78A9F6BEAFF1484343F133CC8485F5FD596937B7B6D89E6BDCB18EBCA8646939CCD01E92A89E +Test: Verify +# +Message: E3578E19D4A6F6DE3DB9633D5DB28DEE508A +Digest: 2EF62234E27186D3E9E0DEB3C74D36DBA431548944ED1AA47F477523663A058FEBBB5176C054DA43385EA46ACBAD1A56C1ED074BDE9389B19E1738D53AB2D07D +Test: Verify +# +Message: 1E5ED74D49FB8108254AF466737AC21B06933B +Digest: 1D72C92C8B20B57DC91CF1A7A240E48CA6F68710A0724426B11CE7F8E90D47C26B16D2300F5970AA3608CFB1289650B9F7B3B7C755B328DBDD3AE89EBCF58CE9 +Test: Verify +# +Message: 184C809B4F8AF30F87F200E3B08F53993B020AC9 +Digest: 682B04B9A905027557B9FF9A01F8A0B9E748D7B0F950C775D8978A96AD1CFAD5AFBD57E8CDCE084DB59342BAAE9BA297A20CC374836A5AD3781725D635D89E68 +Test: Verify +# +Message: 41CBE6DA4098B40BB5825B234272B628886B8F891E +Digest: CB0048ED916D1515913C7740E0BF1FDCB86694B40A3EC7348E922EFF2F82151DEFB2E2F280A358821AC5AC67EBC8703E19F3EEBFD08ACD42C896414AB67CF3D9 +Test: Verify +# +Message: 4FE35B936CC2712D63A15BBD0309FE733F11C53FDC63 +Digest: 26C78FD59D4F49950C74F4C66E5F12720C928581542444D497FF3AE0DB3F84B289C416B5E55E476CD4D01A48A9F868744B2C837332443264801658A8C5C8CED2 +Test: Verify +# +Message: E2F692944507C4BBBF360E8AE94F2ED9901E23191A5D81 +Digest: 2FB0473A7AF00D63F7A8242E267E124B606A4D63BAD1387986D3B43084830DC4599287D0871C4F55EAABE8F765F08ABDB6C6C008DC05EECA950BE62A7C3A15A4 +Test: Verify +# +Message: 9EA5C90A6E2FD46F6403A1DD1D7AC1FC3B158CA090FC19FE +Digest: B4B6C9096CAE71D94075CC98C2579347C2470FBF79780AEB28AC73F35B905205D0DC47B13DD9696F15F21FB24E548175C4293D32B4689669CFDA63995E311F27 +Test: Verify +# +Message: 8BFE1ADA596174D17A74F09163010F4E2CCB56F9668C0C3D1E +Digest: B46632C8B825693AB56DF1B7AA742225C67A32C0938724EB76CD2CBF468261A3374A8791B5F4B7DFEFCCD0C95B8EDC9783FA24C1157541C2B070DCD66C87A483 +Test: Verify +# +Message: 3619B9F657A2464C8A7D5DACB57A51B7C27CEC73B5A4A0F952DA +Digest: D4AE29DAB30FF0875C3461CE255BC70FDC58DAE7B9C9D0F1BD3B698DCF860FF4B994116365B5BAD0FBE02B77D5C325D695E6CD519BAD1F484E7175D42BCD1639 +Test: Verify +# +Message: 8652C6E46D4B4D21EF42106B001C970EB6905A1E102CE0A2F56998 +Digest: 7ACA95344856D21C52205F7FA6382489316E749279CB4C3483B5F97A953854F55C133D0A23EB5FCD9E0E91A4D810766B48EBC23FA4CAADCBB208EA994145B348 +Test: Verify +# +Message: 525005DE05F7F0834558EAD251F1C8FD81A7D1CD9283B333C3DAFCAC +Digest: 7E7DFFC91D8D0D2CAFCCD27EC7F8018DA3C3FA804E5F4692374F939D5236C42AE7919AB53D35642D06330017690022F20CFB7B91F20F24213919ED3450253B2F +Test: Verify +# +Message: B6B21A8168B16562306B7B7F383195B97620291F67242C980C4C20073D +Digest: 2A7C6C4C2E06B5DA4E0C563A4E2C36D31A0814D4DCC0871EEF3A1C390DCFCFE9F608BB0D6DCCA2BE35412B5117996F3530783818E7A2A4608197A28B99108510 +Test: Verify +# +Message: A4FFA6694B66532C877F838AB8FA7CF84019E0AC9E693F8806310CC05D35 +Digest: 80AF578AA7F11085D09B96A3E7D26CBCAAC5DEF5919C00939D2B40B000D46557290B0AFF35CE19C8132A62BE36DAE5AF1959BCFFAC4613B7ED4164249D0A66F8 +Test: Verify +# +Message: 7987BFD3E533F0FE3189B6B64D10CD191621B59DCB1468DACE7DE02CD97FCE +Digest: E8FD24D4D988EE12BB3FA6A1A4E5DB87D079C186A572CEA89D5921ACD16785108D4A1A32D48A1B4947975E0568A6294D3A8DB3E1545574B25EB6B237494FF04E +Test: Verify +# +Message: 46CD81D161D469E5ADB8119A5E8FDB8694EFDD2946F6E4A0B1CE633283D1784C +Digest: 79C12C6DEDA56CFBE4C0527C1C5973BBA058F9A3FE704E86E5F356735A5FC5F0E86C4FE1CA08A6A5EDF02EA3854F5444D699DDA6E011818538E3C4B0B6A5AFFA +Test: Verify +# +Message: C1200602E42A8290A32045C33050715737A6ADB4FFDD66A0E75E66FF0A92F794E0124AC2935521C381790A386C3C +Digest: 91ECCFFF1EBBCD961F6D3842E0A02B1E2C11158AAAC1E69B9E5A4B21639F6C3F9CD105FD6FA68739BCFDE9D5B512B4AC90FB1B71AA09EEB0087FB5452C1D4198 +Test: Verify +# +Message: F33876F06FA1F8C8C64CCDE6CB8561FB769D1E2420E7F0AB7066B18901F0A7E96D5AE714995831AD094E5875C286843A59D6CF3E277E0088 +Digest: 3555CE37FB9E226A75F604273CEFDB0BFC23E4690B290B3392EBA676C63C0BAC7240E31D4DFF9A7B8A0D3E9091AB7C35AE188E426AC64F504EA1E64FB620B5B5 +Test: Verify +# +Message: AD2E48B4DE3EE7C1FE1F58EC74A9995571D164187A7BC51FF22B7284E5BD4E62D29F70A5201A9D6F766777ACFD6F97AC07FF11A19ED2C0CBF040E2EB372096EA +Digest: DC0B5AE9CD2802E985D9445817F3005F6B728D2FDE40FB6565D0D9550B655CBF6BB3F040E00E365845AD1859F572B87985E0B80EE29B94BAFBB6B879705AA8F4 +Test: Verify +# +Message: 066B8BAE3E3D306E2D0024026C6E2A5643F5B9DA92AA132CECDDD18FCB4256864929C4B85BB7E1121EF7427BA3137072DB1BDE211D1A66E9091F5089982486A23AAABED48AE8C38878C9D2C4 +Digest: 8CD87926635FC0E22FC4E518155C941485454A7AEF69690744E50DC1729683CAE80F948B4B48A774407038641F31301A81D9CB86807D1A4B1D9BFFEC4192537E +Test: Verify +# +Message: 8E4C70268F20511448345DA1F6DF6645650978DEA25FE2335CE652CDDA7ABC62EA8D15D042E2CF403CBC1099D577FB9209DAD16B90E5BF0C4620B65823F6FAF7E8B0C2F86D8B12986E7987D10EA4 +Digest: 045C3F6D2D096602A780AD4B42FEA7F5EFED26ADA54087513D49E902CAC640D47F0EC7D8BE98D59B9196DC85AE2FAD7FE37DC265F9F56FE8C78B5D9A0A5FD45A +Test: Verify +# +Message: 7FCF26982D8A1742954CAA5DABE564F2F706645B1D354905E1BBE5CBCC7C9BE4716F5B8AD5629713A96D6A1352E1B5B725318CAE91AF6A5FCC496AA4714206C79EB352E56DBF9FD238AF52CD16C38EDA720D023F +Digest: B79F9C893384BFD58B0BAB4EBD5E2AF8B5B9C7B86ED51536AC384DB947E3095691210D673A8A1369351D1035F7D4D76449144C2CD98BC302416A6A05E42C5FE0 +Test: Verify +# +Message: EE081BFB0CBF83AA1AA45CEE9B21FB43D58F2E926B7FEC31E0130C49CCEA1F4D1FCF5E4B29EB71E94BF1B1566DC0A273F4FB34025B97AAEDE9210E7D5927CCE7B0DCA33B424F4EA072BF8627C7C23653F726F7372F3A936DC053CB +Digest: 309343EF8E79E47067BA73E2889E0C24937974B74C830E5027545AB5D1CE32721259DA4B0152B223D25D002B63D6114D1404C51BF439E29998E560A6E2B066A2 +Test: Verify +# +Message: FD4C04028B513CE12F867760776DA5881A77F9B00B849B8943041AA6C1C683089BC1873A9E6CF4D86ECB77F6FDC4BF9795A5CDEA87E458D1C150FCC2BEDA9FEB7BAC466F5810341CD9B2C8486F23BE65B25E44ADB9E1551911E47E0233839517DA7A91AFB03940 +Digest: 78D5DF2C7C3FF5EBC485587B1C800207668470C3B0BE02046B761F9346C35B5BCE60E0C4548BE161416EE7399992A19D109FAE549534D6DAF7125585F20C98D8 +Test: Verify +# +Message: 132920A72C0821ACA67A7821AE8DDC6F4058149CCFE89744D29901063FB3EDCE45DFDFAF96C8998A8A43EB8E49E18671B0E57385F0936E80CBA414F0E66F00899CF18D4EBF7B99B7C3BF47B80914633AFFF2BB0C7FCC2123FFDEDEEACF217994EE8DA99767630A239E +Digest: 3409A7724A084F9E44F57062358CAF2FE850B9568E5F149547225A374C01B847DC7FA82A229DC511FE9E8521C833A55B29AC43C8B92E40A6D8E0BF73F5CA21E0 +Test: Verify +# +Message: 8EA4F9775862179F2F9B51C14E62660A919BD132DC774CE7E3360DF096A7CA7D412D8358F4D3FFD5394DFA6FC60B5E0C42923A65AC517D8BF6AE6C106D2A862062D6952B3B544A7801E06F46AE90D4821AFFBB83344C3F328DB4B815B281057B92EE44D0169CC72513E108A0A22C0D230FAD4687C2E456 +Digest: 8731F60C40BD3CBD0092A628DC2E5B8B7C2B63B556D74AF1D7DB6B668BFE339D2138D985BB690B3E518730741498B0E87F61E1FA69B9F223FF161DC922206E06 +Test: Verify +# +Message: 934F1624B2E673C5674C3D935571F66DD02258EC6D5054439D317143552CC50302F65AF8E65DCC20639E6A6686D25958B1E4D27B68B691D20466EB505F59C50206180E03F4D9C2612F8480C717AD36BD816D4A5C5D4A08B7DAFFFE8B3D384733A22249EC4AE5366805F0AD6A66769716F864BB308D974282A117C74FB2AAC9449A49526A88 +Digest: D700BE2D5CCE9E98E970F4D301B2120306AEEEC65379DE3824BC571037716AD379EAB1958DCF2F77FD9F96D9CDCC795AFBCAA4E5BD7627CFEAEAAD5BD7F0AFA8 +Test: Verify +# +Message: A5452910D70B93F0126429D88F8A1058ABEB70B4CC9324A645971147282DFB5C9DC1A7F2AA2431622EC2C28C50265A161AD57AFF3DEF84DCBC435BE1B353B55F1180C6A8E748C3C8AC4989417BA7EC80B4131D0B56FA1059759A26347F79719DD2341E84E2AA13FEDD84487AABD418C8DC9C7B1B5A68160E646610A3FC3B9A00FFDB5A46C98CD7F91720BED1CC50F8BFF70F3857C049BA03A066BADC1192A06BFAC9FEF0D46595 +Digest: CA48D2ADE4E9081F84E2BFD8F907BC80BC0E508D4BFF0BD1529D517A6AFDBCF1AD31D6541FC1AADF48C58ADC7E98777AAF92E43791AAC15D4F20109333263EBB +Test: Verify +# +Message: 3FA8487EBFD0E9F31BDBDA44E37AE792230D32860BE64D807164C029D8D08E1ADB8C51C04CC79507E3E927C2E5F0432875124C36E9C3C30FF610DD5012AE78FA181A440DBEFA8431E6B1F229F197DBC4914F86C94C00FF24BD7EC5856B3335A1D56C74E88A505D88821CAA814BB9BC9BE483ECEE068B2FA7EB420EBD5B60FCD7D82D13724B9BDDA18BA5A7EBDA68D6E27D7C587EE62C4EB3E1869DCCA23955E9CC2F7611451E04C28532F1E613B1E9818BB44AD2A77CACB02452FCB7BE5B5FC73805911D5F07BF110147AF34D2 +Digest: 357B9673DE3BA8C51B473F0BDD6681B5D3A766AB8B04D2C174A142FE73607ED9DA0328ACC0C4CEA6599874CD24055CAA38AED0B0415CA008F064A8669B8DEE0E +Test: Verify +# +Message: 0A8E4488D9143ED72DFAE2F04B16D798BC2C0FB6FBD590A7EF0D704CA26C726074CAF38BBA895DF75205A68792B0A78D06FAA441920B6CF2E7FA9665BADF6EAA871FAA673036EEDAE58B7BF70AFCBEA9AD705149FE108CF47388B58C542E527EE4E009F814CD37A4F28749B2EC197AE340F5B6C09EB151D29CFCB268169DE28330FBB0B7C555E77C604D21F50047599A8B8C5724499EB3FFB35651ECB74F08D9710EAB41195DE698D51B6196ACB9967B7F6B4EF651CAF590B066AD4B84F4B10E127533271B7C59346D8481B9DD3B69513CFD61A2A095A75252214F99E7E61304906D3E6E356494CDA24E4C82156C42E8497898994B3E637B5151D84ED725E8459E25F232A1D2 +Digest: C9992335A9518A9D35B46E4E1EFF11B4A809B1015D6B54BFB312A8705E70632CB4EAF1A65A89A96DBD7A8A5FEF0DD74BEB2885FB6C34A0771DAF1559A4392C20 +Test: Verify +# +Message: 7B3ABED5B9A389B510E9C304235A92838BDC236A6F35001B06FE80A032E42B8EB88427E5C78DE572392F421156D45200763582E03E6DB05EF17EBBE1A792204E832F09DA6C55EC3D132CE6240166B5C22B041FA52CD9DDC4CC58EF95E183D5F75545CF497CF09EDDC23756440823A264CF46B852E449D3682CB4448FDEF1D4BF56090C7A31830B6BA34220D7B9A225E7C2D998AB4664C9C6C16BE4729A6547C23DD85D6BFBF97BA1F47944A270709D06AC3B70CDFA20D3A84DB20029FBDF3506C5927E1DF004BF7AF0022255E399EE4A12BA8EE9A685DC9A6ABF37CAD45D46E16FA688D31DC750CAE914C140A927132648614A535F3BB95C3E1D95805FE49C41A200B2D1A0F2AE4E02E9A7FB663D88754158684E56311968 +Digest: 22064370BD2AF5BD2BBE8C7841CDDFAF98FE572854D5E5B2787FE6BCDAD915C99ECF9E7EE4C511A88A59B9EBA9AA940B90FB6F53D92467FA380752EEDC6F03D3 +Test: Verify +# +Message: 073E75A26CA1C25C0FFDD43CCAD211A726B0B1A917DA04DA14679671185A3831AD1AE5C410C9F166788E4AD74B7E2B5D68ECFAB1954F3439940946AB19B09808BF39A7A2FE75B1F33DA7F2F4E9010178D56E58671AEA078948AA46A53D8CDC60605FA12AA4B9900AF24A711445939EA9C263C5BA27E12E15C3E4172A4B78BB9F6A9156479F5E86621B80F0F8A71F55FCC1E7488BB7FF909F6955B1C9CD12931715D6D53FBC9226D12312D7B1C316203A0EEA1A50973DFC74073AA1B3A7FBE7D54E20EC75A3CCE2A6D1DF8A3A3D86EE556BAB3B1771063F8A9709CEA84E8B78FBBCC9DAB47C026D879AC1B6DEADFE59E486B34644F00BED05A1E2C0C162B2BE7AC57D685AB0D13259365B002EEB8686728C1855B508BA3EDAA48944418904EB5A051A524397D3BBD624F69DD25DCCCDC7F3A7F49EEB8B0BEC74C9E9 +Digest: 6985BCF84AA6E359A7C48142D38FC7D26687EC83829D120379AF4BF52449AFE23743B20ED2E14A3F964290BF634418FC1AEA7E5950EC71E4921C2CBE77D8DD5F +Test: Verify +# +Message: 7E29CF33FFD8CC3D5EE11CA27FA7763D538C9045A230632E4A0E50E8E490825E8EA47997A219B3AEB5D227D6C05870A725FB3AC0A04700A7267FD18892143FACB9B0F589D85B10B30D14937AEDB9654E50E7755C0EB86E27DDADECDB29AE4EAEBB6AB02842BCDA9B7420502633F63672DA0C8A43AB7A5FC5018890766311E7CB290D2BBE7EF8BF23095879D0A1883857795F6F6660E7E93748D6ACCFA1CD2B3A7FDB79B48DFD786D786D6059E240E572F39FA3CD8A9F9937A93A7D25E9ED1A8668166E40B3D4076D5CCAC6A96A7FD0C82F3040BFC788F4B1FDE29380D525ECFE1348912D353F1E7C9E517EC8148B1EE20E8F9091F812794A6F6AB66E40DEDF691FFEDD0C0359DEFA9BD0E82C867FA3219F23F8C031F39322A24B3E9B8A6D8A53CB9D8DA750F4A131EA32DDB0657C2C8068EB6559FA5745560229C302DB38014BFC6A226019A87F3F +Digest: F000028EE6D960A5C7568E840E4C0DC71065340F61BB87771CE091058BACA7D77DA625C4947DDE243B4036598887CE524E307F3FA2D54B9FA294D04247AFEF95 +Test: Verify +# +Message: CE9B324C272ECAAFD541CB629BFBEB857077F47D5F96F3853289848B82F7A333B38460EC695AE12701D3A59FB3241D95E5C5FFCC4398B3F035C21E9FE4BB2C5EDAE8C187FAC7B9CB53E12A6B2FD89C79AF1656269A1409974786F9996B1F7A7973DDE5EF83C8B132F393D3FAF2098F4E1FED9156BCA1B75AE82E3EEED4E2DDD13922CBEE512E0AAC3A9D1C824EF9D3E85C1EB93DD1C39C6B6B233A8DAAF85F1C29FCE034E8199BC51AAA863E4369A6420A1BB03BC45A69C203036F3247BA3652D738CAB6C1BE1D29726BAE35B6A45CCCF7E4A9A5AE12E5E81BBA8A36FE626242F4857EC4EBFE5F102F4AEF3BDCCBC8328562D3E7ED17D21D295E6D41D8930CA7DBB9A7B150D52DFC08F22FBF4F49A6CB27EB6E7E4F1B76B3A16B6EF337E3FC615923EDC19E5DFE0250C8BE9FD40425B9817160AD0894D9148812DE5822FD9B3D5557F603808876B77BEF2CA074738492B921 +Digest: B2EE6A3D12F7ABD4F69F7C49DFC91F10CC611BD20BF59254445B54BD7E9494EE4361D5C2A761C9BDB7C1084F72B53BE725077F90B00A1A1679D7E36A8DE2A234 +Test: Verify +# +Message: 70832165487C3F042C3E880BD7A932967F09691306E22766BDF04080E28DA08E9080B9C2254CC02F37F3889F8F8DE374505CA5EA75528CD7AF851885C46A63D919F4F7ADF85EA1CAD4C1A5504BD355790314EF0B2F83D5F0C262115F6C0A1220B474C2A6AF9189D73F9CD89FD1FEEC325E7D54FFF7110B444C917A59E467BDF031BD2CDBE6988F663C772DD2FFDF70F2E7FDC7C7F6C032053A94AFB35B85B776EB989E8639A45538FCD7E34B7826A7938DB6E5ADBA1F467489448CAE40D667D1D54EB928565E48CEBB442E9D5F99BD3A5A66BAD965C460B1F5D6957DABF79F8239CE493052F72D31FE4AE20A5788856908D2A468E90B70356D2C649EFE0990673542D54C8B16AA42FD80231FBF28F2034EBD57D91C0FA3529F0F3ED4C5D97CA37BD59A9BE7AEEAA26AEC88E806225E2B1A5E4BB63F31B83FF5FDD1DA51B2C6CF1F0F3F59B4BF1810651FD1965D9AA50C41D4D4A8E4ECD7BBEEAC6445A0C4A12EE1955A9DE08001EE0F6603ADB28514BF5079963E9E7E +Digest: 5B231F8FAF2D0E5A4F5FFD045ED2F910EBC7D182B3435BAE134E44456A6A08E4234676C926BD869D1CEE2EEA437AAB916B359F01019520ECD683B84567B53700 +Test: Verify +# +Message: BDD11C595E52D87217FF723190252C1B8B0EC1B2A70BEBAA103994CB62192C58412C1E635570935600DEC4CD8F3D1DD009E3499DD6A31CFC1AFFA7A3591756371BB16CB2E3261D5DF6A6FB197D92C1453E10848592BD0B882D8584B1BCABF3FC45CF452BBC285E253194511F68B3019D740D4C4257980E35DAF517DA20D33F4E04EDBECC9442865ED7D82CD879DAE816AFA13A00C213059841058D933D7DD36B49D4C28876DA0BB0E2BC956116C95B0316E77E492438734F38B7F930CAF1DD43BC90289D25A80D10DBE0D1EB8CF493E6FFA35E673EB993AD93E8AAE53E598D158EB18EF0FEBA3ECDF9847B93D253A82E34523159E55EDAB86932F4732C9DD344A70644B3F5BEDDC9625F272053E8C2F833F70ED375E4E9FF5EA9285BE1289243EB4DDE679952D463B83DE241AD04904D24B52D98211F7FD6FEC3194A369A583BA955707BBDBA38B2F9C39719AE633D931685B59E01EBA3E91C3DFA08215C915F28E30088C4765EEF90209ACD9B06A4D93D1406762EF1471AA9D23767EA67A94CA471054DC531E1444F8BF9 +Digest: 088279389C7707CF12CCDA264E3CDA10BAC8DD315748F03318F448F803766A434107FF1400F730A2C3F3D0FAB75193CE126B7634A5A0D12FD43E63D9D9498FDE +Test: Verify +# +Message: FDAF59E016822C37E9E6107CC6957A3D5676B560E526148EA3BC308CC5C360C8388A5A2E77EAD6F434F76A51D3565330947C44DCB899D16EE5D7A4E5E915EF71001FAC2138B639DF53624F09238EA0EB7EE9067A05C25121048277E162530E108B642D24195FF6D79E489E3EA8842FCC82331774EADE205EADE4B732DB987B141222314780AE41A318B67DA9856B53F5F5B9A1204AAB4CB96AA9CA456A3DB212A7EBBB342D7B420D590992D035A505DC8AD7C05BA7EC9D06B191C803BAD43ABE90CEC2569E9CC57C19B1A9E0D7072A93F0EE6DF2C6B0B7676FF3E8CAEB8D0A0F6CA4C600E998D94F1365985973A0FBDDA25A30AB7EB87289B7D6F4BC6A4FE2C97A3E02C4AD50C40F5ECC508E7D919F9FA71374A1EBFBBCFA1F7DF2B9579C717C709B2D18E93B90AC4C5804F380F21327D7E4A82C4FA3E01E94E40F551ECEB372ECC01C78AE9685FC43F83202D8103CFF84FF3ED8A26A6DA40FE3BF8B7272851F4EEC5301C5852F61B66428C1F143EDE497C96C872B0C0B5C4C057445687DD929FC298A8C892760A247198B1984D755EC466C41B16D614451934544681EF54B15481B02F27DD348F6216ED248F9E8BE50C1182AE111922E47C815 +Digest: 47B281C92047B2F2437C32BEEC317F3020AA3D6ABA81188672311543CB067D86E0F3B06CE63FF06695DA1B06FAA3CF9DAEF7695FC239A1671104AFDDA6BE38D7 +Test: Verify +# +Message: 640E4BB946090A29563133B297C5A14AF93BAB879411B1C2E75E84AE4A3E2211403CB75E1EA7B121E276CF9B6E977C44F0003DE3B252EE2DCB70A9F7875FDDD0B8E1AB96BC569D5412BA9149C397AA4C5081F6EE773AF02BBC6D139A8DFA91DC9B6DB7771AEFE55FA1A2994EFFA54405D6F21285C5AFD130C8613B6AB965F24580A32F7541637C123991035D57C8318A32D8F09FAF66034744309A53A26AFD9A9950E71C9973B97DF9E3D1ACBDEB6171569AD188609D36ABA6C9B1D79316712D614F8838FC2291DB171C56737C16B38F3265220480CEF09095930DEC7896E1AAA530F4ECA28D37CA2D63E63120867535CD4EC40C1754E5DF103EC4EF71405C1FB8319CD41FCCF001226D55DBD1CF09918128C0A1EB485EF144EEAAAB7713D41032B9E42F22B1016EF37EC5175076CEDCC421E5C8409E9F4C92AD3E4478DB69F31927A34EDFD0C91D11A250FCF9F4C2744B44AEC4461FCCF2697DC79D667958F0A2FE416A4DF7E5EEFF26A970869342079B6E9F53F2D3690BF3403EECBFCAE550DE9A9B836ED1218B78B5E8D3EBF7D6F0E790036ECA53C9CC6C331B202EF59F90DCA4C19C82635AC85B89727749149FD24E866616A885F4F7FCD9948C1D6D02449256F224AEB102C221DEBDBD74BCF123907891BD4EDA71F66B0650CB4C89F14AC0 +Digest: 5C4122378CF08FF08297446D076A319A43D40E728F4BA983ACF11C296FA852E238CC3AAE38935B1463D0A33BE19D594516EB815E41CD2DF8AADF76F4BA3398FC +Test: Verify +# +Message: 377460DDB1EC37F394D2FFCAE2EA790C4DCD90ADEC192B1F46281F65B5F8465E4A64292137B84232508668FD9AA85AEF681136D63D53D32F986A4347F4D140054898AC7542B330491188D9C613C9E54E5F961C627A5A626E709851D68C3379C225C74BC6484954450F1AF1E39DE0E809F5E265641A995B52D8E430670EDB8DE7258442EE79CCF65972086DE8E892D115DFAA55134D831B797A64A9B3BA95A01B44C016A0B1197F5ED22FB10A6DB529FD67EEE54A3A9D98F5097DD27998C91E95A7EDD4FB7E5A636E792E48F33253422C2C54848D5181A8068FAFCE64F3E06F62AB51C3935620200072CBD2FE52530D33C1E42A1A209EFF0AE111AB55A1BCFA2CA6F8D94A2C802E39C3286BEBCDD8762D54423E570CC797A028511EF7F6D6000AD87A88790A21941D46F9EA23BCBB0F0B77E3D1A45A3A55E4B58489EDE63EC166259F6A40F25B407A22565E61159D63B3739759A6E0648A66C137FCF0BBE7FCCEFE035A53C6BD90AD5943734FB836C339792CC2A3DC4B119B1EB6487C0D9F70FB6E01BC8EC91474F079C2FF489451E759A176BC9875A0E67979A9305515F1105F7556E784449B08EB3D06CE3F987D3160268C615339BAB669213805BEBB65E9F0F7D5849F3BEAE4D404ACA53B3D8CF81972822A99AA25BB832FE5552391FAAFBB12D118B13DD2D937F07C56774A3EADA83ED7ADB982FF5CEFC2A942AE234451EA08AFEEA9E53AB9BCF90E6879B0402568EF0E8DBA80507A32E753E6FBD46D7B3E +Digest: D6F6FDA6397D2E4E6040BA2B4562DCC22813CFAF5026028F553D94ABF7AD3538BAA14DF7F7E5B6B4937CAE3D5B7653B6DBE8398EA9C8C1AA995DC8634A037964 +Test: Verify +# +Message: EEFDCBEBA0C7F8316A56B02186668C983924D6FF2DBFF51A6A5C5E0678A09794969A8F9658054F4AD5F9C1165A0A55C17F2856F56FE95651ADA4CA704DB7145F9AB0588E77E42805E2D77937A12FB01C95E3DCC24A62DDE0CC783C6C33B7D49054B3A95A79140EC784B7DA6736C523FE37B968EFF05A948DA0A755EBCEFC7046B6CA6EBB88C2DB9D0BACB3E6197C977F22959038B06A5E463FC53A021B024EF7997187F00AC9B5D124ED108E266EEA6E8B3EC23317298D591678BFACAED2DAB9D230823B9A18E4DC0572ABCEC1512C24281706E143CF63D07E12D8B1B2940213F0B38BD068CCAAEFAA3F2FF6D7CA27CB7818440BBFAFC762925659E519AF954B109D3731A5B4A61091A09D589FC4282DF1914A4421B266E771EC9750CC1692CAF7864A135E372C5878F25816C5FEDC05F2EDB8EF7543C36AC49FE6376C8F7F6552042639C700C00DCE46704ADC9CBF64AE81DE1FC5DFD0A05D9D417FBA327553E4C1CEE4774ADF980ECB6F83C5B44636F064F404BB94959037280F05B77036B8051BD9593321EA4BFB391DBCD2F7ECE26BAD241AFDF6407860796BEA9CDD15789D20E68496879FBC4CC233517C7867E3E2815CD6EFF79D1438395998A4C337D37DFCD302A35007A7DC86845D4FF6BD75FB490E0AF580F68FE8B697ABDE5EB2CEB0E517B7AC2827C5B14B2C9D46E4F5C25D94C2A31A20BF4C7E6CC568D22B0067971AEBC12242E46EBA0511E5CF6B134C1ABD9BE13D0612C522FE6E602A3EB20BAFA6667CA7EAD7 +Digest: F528ED27541ACA2F87D83E2AEBDC728874C6CD42B83600E05A1721969F27290C7C8C2D8082FF99E08C5C5097E669C4A5D98046F7E6CE97153893351625B79A42 +Test: Verify +# +Message: CED626A933265E7201D099670926C4B2DFAC48FA7D2CD269B4C6939F231BA774174BB2196F4918528E437A574769E4E2CA4E1F3F8710BB39E3BEF276312CB2D6B32A834D722C6DA5A62B28BD14B365539EE0D6D34A204CE1A6C47E8C9F8DD06570E884A8F837FE96CF3B699FAC5014EEDC483A7E2C3D14EB6C5774144BC9ADB94BEA46DE766D585F2FA6628809B318DB9AF5DBA80262990B36C4FCAFA93BE497EB43B6A8A5E34B0621D9A9F14379C3DDCFDD5BD683567EEA5B1FDCBE728DB4ED181CF05B9B2520FAA21A7D69DE5DB2E196CE3A21175EABCA142B8326A4283039EA92822FAB38FB1FC60EA28C2D8D7F0252142164AF2AF8E49488EB6728A2F6E3CB0D9A3AD40D0CFE7A426268731953AE76817434EFFA8D7BEC1956EF8381334A22A7A90C6194DB5D8B50BF37A9CA4BA534D08E499D590A51C6F5CF60A68FF917F5EE7324EB1435C21BEDF11EF86ECD260093E88C7A8B3EA18A46D00823AAC12784EC9967D022EDDBFB45B61B40DCF59EBDB3AF11D4F4B52D1A0DFD22498EA5C06F23CB2B62C32E6F2820C903C1926D0E6B57D80499F128BA8B414CF4B5D8DF846133C7B4B327311439E6256124E6BD6F2658B846C3A8B391F1366D8D22C88CDBACB492CB1007B4ABD998DE911FFF2E317C3F74A36B226B5A80DA7C6BECFFCCF4FC81DAF81E131B59077DA17E09679427764666882731496462586084EC6FB48E7AB148BB9AA9E3091F3E668DA6186DBC1F36B717DFB7247E8DF36A45AE4EB762621C082B27995BE79187F5383F539AA2B5891189EDE00434ECA67DDCD5C0F2D4182AF0DA70DBC91A9584BB356E +Digest: 5CFC42558772DDAF5E5E25B040C0DCCCF60023CE53E66B3444D6B227F839E1B28B18467A879510C9EF6B493AC808C3ADDE4C522A30F7DBE0E78DF5FEFF00934B +Test: Verify +# +Message: 9EDDC1AAB711891BF52CB693E47FB6E09B49E099BEE10E3E31C10826556A6E0F4A6005EBFFD517C71CA90CD4CA47B9D01DABBADA6161A35BAB3F6A39F754191EA0317A7A88900FA5C44E7AAD0D81D9AD2AF801586DC6DB4BF31BD02F7659FD8B0208D957A344B107CEF40E3F7E6FCF390743A75217EA7B7D4FCEBBECDE2AE67F7055F4C2B7C813D2292020FEE090497249302C6555F90D30CB224653B78FBA557C117B4467FAAE2C61E6D5ADD16DBF990DEAD54B64604A24607109EADE5C035987B0101D8212F292792AC3241F7D6FF5BE4E99D9A03730FD2AEA306D3A3BF529726A4739BB802DEF16F181910662399652756222D9CD51649BFDF1EAE9BFA15E2C0C2667CBDBF7EC20DF317A9DD6F1208634013CD77436AB20876CBCC8EE746E4D582F5898E67124582A15E2107E70A21F302168E7B2477559B697EDE807597FE474CCB8011F19E42E98B82DA0D99A15E1C0E1B9630F474DEEBDCAE5D31D523903B125A7D6A0E61AF762CA229B1A90E82B81BD28E2CDC141B06051BD52CEEA01830E76408B2ABF20AA45C3968225C5F0946EE5BB75050230A43F5F7F66727E48171D585DA1DB352476F7501C1B51A1E206847F1FAE7770859604C20BE4D7ED261AB0DFD8E4EA33BD83B4951821CEF8FB96DB9585A02FFA28EF2ABBDE23E2AF0CDCD42CD81791CCA65ACD9781BB1EFC3F6278367A1FD804BD665208D03EAC5F155AA1F0937F3AB530C5C801751124CD356D10E15CAFF598451D4DCA953AA6257642E3249510C428B44BAE520A4BB9C56A08FFF5BC0AB71E8410A957D5EDCBE0FAC226BAC0E8274EE2061D390EE648A72B7B9DE2C76DB2AF3FDC86EDA3FC6AC35E2F12C93479E5B74ABE08F73FA9DB370FBB0135C17936E1B4720F18A723A15BD4E73D +Digest: BCC47EC4B03C82E30E8AB03E9725E739E73E5D259670CDF7626F4F152BD4A2334F9F59E208246EFB26ABA7F9E3CA2B11547DCA977D53A2B9170BC11351913E37 +Test: Verify +# +Message: AA0182CC3F09C526F6AB15EBAF5A478B3FD9CA7FCD5E45667ADAAB18B3473C2701D52B62B9F5A3A4C18B4C3FBE928D92DA61A53D72637142DAB940219488299ADF32DF5FA7C24FD12522FBCA30EF933174759E56F0324EF10EB67FEB792DFE86D34DFBC7DA03A886239C3F020F6E6256209175161DF17FC4CE16ACD71022CA3D13FDB0BF6C59D9AD008FEA03E004DCFE3AA138049E5CBCCB87DC0732873FDA51DD26A98007DE4D23EDF3A30A600A38F45AFE81E56EA5820DE2D62AA6B1A234F3F584A5A28D3F3095DEDF1156351E81C92C9AB80AE3C223E581C3BD2A5DC3A73DB2292E6A37EB6F3B2FDCF9CEA0C45EA935AD1E4D45C41CB9871DDAB12261CD359AE18CB8BE30F9317F179C073EE650DBF77202181E4BB45E32936F080436D311C76E646E2782576206490222F8D94DA7707D4919D1C8E78DB4932B4DE0729FF5F196285CD642620BDA5D2D7A94E0FA996AB2B8107BCEC059C2CC06FF2D9F5770BB24FD7DEE375F845BF4D43CAFF9555A30F8E4A0EFC95AE8AC8F201CD1AA003347834E3295331BA94E05F7725F6BCEC30A22061BCADB28863BCD9653A40F4119378B5E3860F6158168162CFE3004FDEEDCFB8FD167C5296474C9BA501EA44E7AEB082BB026E1E086BEA6260905B4DBC6D3BFA862526021F4B8F3BA13D0DE73AD12D486592A8F7B1C10BA1A746489CDB0458C15B85275BFCC301A512103769D8AE598FCF3641A802317452756EDF37B62DFF5E1C939A2EF1621A4557A06F4C8EFDAC35A120E47070BCD068C84DCD173AF0B9A7F2583E2B491DCB74CAC2418F894FBF50E67397B8C17F336514BA287AEB87FCE11B1DF3B400090DDCE99A216F77522E9FBC58B348375EBEC2CD0E7EA32FA620F2D82B32D69940BBE1DF107ED58FB92A1640CA614ABE2988297DD6ACE +Digest: 0349C97C55A9CA7EF6721458D6B61D75B630C2C3AA9C9B5D6C60119A4EF18D788EA8AAC6051E7966631751BEB78134A4074055B9814B487816CE7E6DE6736C7E +Test: Verify +# +Message: E34475AA215FFFEF1ED23AC8BDE6513DE936E45B26F34496B1814449FD8130347F539706C759B2BDFD26699C9CBE67F76907FF6595DC62E5389FA61125BAEA5F022A420C834EA5F12A561176A428550E77D8414B8FB2DBCA4A9AD2E24F59B950D5E02363AB9DAF83F519F0CF2781BCC75DFA5AE8212F274F65D46A4FD3C1941BE1D51C6D01F70022BB179B95564581623795066A2982D4D7405116B6D19DA0488CDE4177C9205070D6F70C348B861BA8ECB3C3938235AB2715C9460A7EE4278A2C9EF49F49ABD52E00A83902CB2E07350ED7BB0EA72E11EC326104A29941D52EEAAD1E9FDCCD0D0D30DEE73E6EE544DF2B42364F2BE75F8465C1E414286F374870AB55CF111E3E0B4D57A18354C2745C32BA0C45B2C8C5A535F8B853BFD7AAA93D7DBB94164ADFEBE47D2B05CAB41E141E8F1439D54AEF97E49DC6E4667E7056CFACA3D6A31CFF38D5BAABBAA5A153E2E7C10B5AF812EE11C3E5BB32A0AE386E0A59B1D7DF392DF63D5BCEE78A936BAE97FD2A73B7FC94DA381824D544AB37935141D75E8F5DF05BB9DC1CB4D589E87CBFC1E4FF8BC2312F66A0542004D1BF2CE0892E44333AE2EAEE2AAF1DC5AFF9C524635110C3451BB3E278CEACECFA1E02AB6EA205878EF2B4D3719C1742C2283D8A5890711DAAC88C98E70F3465D694AA25FF0391913137742E7410250F28261D03D1E30FBD5FD22A893CC3BC9DF216E72E311A7206940D6D208A41CA16801309612D3FDC02F314D736A41DBA9C630110CA3206866130038B2ECE79F1DCA93BF7BD9EB774CE8F692E6883A3413E8CFBC57ECCF474FCCFE893861BC2F702524418C2DAF3799D971960B6514671D51C1D50F42808772650F4A4E8D1FD28073F99E56B953905FC8A9C7CE67E60581756AD1043C51946F6587C65EBE90D59417E155FED1F6614B86D89FFB8200AC4D78076BEBFC3E30E07983DFF3A8E +Digest: 37F8B69715F82E3E8F4C999B93EE3D698DE60C172C27D4DD49084DFE8FCA1F2236EACA4EDC07ACC36E21BBF22794C7E34D41047254441BBE72EEF1C0374B8848 +Test: Verify +# +Message: 8541A86589117FD59A6359A31875423177207E1328040F824E5483ABA7022CB46D665766DEC4BD4F1E60AB169331C2580483C16055E2FAD63A0B6854E15B0748FD83FABB9874E0C2EFB53A308B5D16B1DD3417110FCA3012B3847386D352016C08EDFD3497C0162A6606D6320CC837DECA8D9AB01FFAAC82DEA0F8A24B852A786E0265B17079A9CC4A31559BD2FECA791FC30417D5DA5A2E13864468A4AA2657F24F668B8798FAB7AB389BD52BCD8DAA325D667FFAA1DF1DE4F73F1E1895A05C59ADD28BD06DC7670EDCA8B368981199A1B126867EF2A6599BD2545C349BC8E7A904FF2E56F8F67DF9F2AE25D5BF61312C9B06D46C7F5D0FD8C5C8B8C9D679CF0B5CAB90F3C8ACA0A0375E5DFEEEF3CDEE5EE5B8373309298006682C83233AD93DC04B69591205408B5ADE748A0FC8D408F53F9E8C48C9D244C12706CA304286593005F025286D8B55233AA3021F34AB922F9A5FE4BFB5F6B9405A4AC09A6716D8D303E0FF609FEFF6DBF6B342297735384265424EF99A872DDD06FB09374C473F10817725BA6D6520D88BEC55C584B9A397D6012681D18A51B991C4A2998FDA150070E68A0F2FB79F30F8358A6C6BEF8AEFA93ABF169006BBF1410F97C018D1C0BE8A63CF03F54E89A615A1EEB8591DB3B760C1FA8362E3E4A707BF2C51F4FF7ED5B8473938BEBA8CD7454ED38AE0AA73D82242F96BE7B83B6F74B24DD8DF035B5F7D95D09A87CF7A349C872892CFED62827CDAF260E1834291A719A5222AACE489FD060CB636D2802D36D4CF2A65332B5AD56061D7B462EED030A7BCA2AB32C00D9CBD07F461A9AEF25348AB244EAF886C368E1C705DCBE9A3FB435EFA5895108FC3AD4AE42400A76ECB10472D63D49DD2C91EB73C8CAAADA414A36DE9EBB407E2AFB63767FDD8B516B724061568F420202C8DDBF03144EC9CA15A7BF8DF76999C9E6A6F567E007EA577914C0C0D8B230F5E5355BB35D410E142642004C925B1F393EC419FC98D87AD4F64C7B0CB6FF185E30F346AE33D0EAE711B2C0C3EE271B1ED +Digest: 06310A572C7B281D6AD9C6919AE840488331669591147A59FAF2622C12A87A0CE09451B5FD4EEDDCEF46E0C87D9A0B8F018DC9E093B77CA45D7491AF9C953861 +Test: Verify +# +Message: B13DEDBEB15A193702D3AB8C14279A6BC7D5BBB85B49DD94A16AD8B84B09BE80F5472661F3E26DA7CE5D1CA37EC2C2D58FAF752BD21FCE17102E6EC2DA07188EC432222D28C4C8BFA67A537CAF3EA72636796F837D9FB289AD3D79CF3572479A2EEE6B73309F08E9659DB0F4D55F8E631B1079B7FEBBBFFB7D55EA9238FE2D7FF9FD6848844BF4BB1416A0E2C8E4308FE2C27FA95ECFCCB53F167BD8D607D356671C3E3C7997B228827FC338E30ECA99A7EAC89D6036984DC25DA74D994F8EAE298EF815EFCC0ECBF6FC51EC21E4AAFE3C2457B5B1E32BAA923353BBECC67442E33EE3D533E5473C73B6E805548477D640E36A219E64760A082F539617FBA52BBF3CD9008AA39DE8A5D0AF4E7B2D4BF3E85E0D2C0672CFEC77254D9C05ACAFEB9E22B72E412150D7B5C1B75207625EB509A125E3CF2C22E063D2FE48A4901370FA9C9134AD7F0915BB0453556CCF6AB6E3C3BB6782580DE00EC7F59127B9110ECB7D895DE8C141978FD4338B52A65DE99B04587ACB44235EC5899C68074E81D1A95F6DA8A38817BB0ACEE2C2F84AB4A255F7A0DF3507A5950D2FFE742BAFCCD2F4B4F75E04C188C97390A48841810FF61F94E636F78C87CE60570756213F279034B201CBE6D5840EF861141FDFDCEC829B5F0F6F39D4C6E5C0C9583B0B8EF59F336F5EE88652ACD319D68C066223AB4AD8B04C55DDB61B4126BBAB73E483D25866DC45699CA59486760254BC088412CC9381A2589D3B1F08B748A0E45B5B2106A62525C22DC32FE406AE8520ECEF58201B6D5084941C7EF7D43F9B8DD9BC61966E72825C7CF5A52B5E890E85C372FE86FFE4980DA27A9D1CF4142465AD9C4A91357804870E450686FFCAEEB99F2B935A1614D092F46B1463E91829DF08AF14C13B9A2F12FF3FB3E1A49C8721D0D97A692B96F90D511413C470AAC1F629ABC7A8B8A80CAB26E875D496FF13AB717DFF5C3C246FC56CEA088824AB43F94AAC82C8D4520218D4234748B34CD445CFF644CD49E7B22CD04DF4EF9EAA1AD9744603D0B30DE61CA2E51F55607D84A41BD2E003F808262EAC9A7EC950412C154C3F3AED711BFDB17F80799BA000E566CBB044ABC4133CC01F +Digest: 995C4E81F34BF36AABEAF605AF91DD5076BC0C76B22F0CF022B4D783BE25C200D6B0F64C40316BEF454B024C88E6CAB363973DAF796D9531AA3C608270F7CA22 +Test: Verify +# +Message: 7BC25BE66B1EDA44AD609F889632E9A253C7FFD1E36553D07563D110C9C0E58C49175F9BB0466A724F23B55B1BEC4A21C3252CE881378ADF5E77D444D354F9F1944043419B42C2E96F2475EA82D5D3F10CAD9E4AC3C3AEA35BD7D0BC4E535F506941ECAFD6AB6D7D1BEBF85E55D5094466434AED97599E8B0E4DD32CEC4F9F4262EC01118307C2AB42EC29192540E372A9A6A0B837E33273120865571C4EA808143A2C350C40479D9472293495A2736A0F48C8946CC76DFCB0AEA37D26E283EB345F2ED7AEB0BA6A167BDA86C389D3159F79BFC6BFC49FE2D87694795935FAED032063335DBF4AB124CBA3202E277D2DCEFC4B0BD279B9003544EF7FE442E1CB75FDA6974A390CF17030299CCC0A48C9CA8F6DF3BA951E97CE2A2E5F8A705AE1031EAF8B760F8C87D305EDDBF5D926295D138C1EF677B2BFBDF260CD49F844F4B0D96E49CDFDA40DBE2C986E9A4BF7753AD1E71C0EC9BBDD8E5D52737CBAC986B95FF5CA7430EDDE28997287AD6E0736CA125D6E424A7D42A4B537E2883E9CE6929E1E070FE61E7405481A7EE1C76B4A784D6BC02AFC926D36D9AAE3FD3A092B2E390654F5337E837393E9D7555225DF39E0225625B88855369639330A4D8B2BAE28A11F2B3D170B5D9906AC8BF7E17D9BCE2435630CA7DF087C4967638ACB341DA4A627DE0571664D6FCC21F5B8EABB0E59D78E079B8E6F794566FA5F0012BB9D9F2501F923312C6BEAC0E9752C4934E830732687508F0E657F178AA75D43A769BE18C2A39E8C58F0CA99D69CD37D4E4024E7B065DE6420603CABA1E183D005454EA81C15CFDD7AB8B1F520A58364AC1253EF2F6B73F06A429FA14B13F7F91B9C2BE6D02CAB8D9F308A6D2BC391C1AB6615159F54B9AA9EA2A0456CFA6B2188BCD2CC80992C0AA57305489D4EF37E2570D8D9116AAC6F4B6CF192C19E2244FF1B8B883AA5A2562B49DD8A392801FD7E03103EB14859366F64B726A7759E63B5BFBD358741D2958F0D6D5D4C231ABBCA2551F702373678E5BD8C4A27D1D871F8CA55DE8178A207A27F9AED7C1BF1354CFF901BC36883DF5FE18B23E1E2E9788E821B85CF2DBCF84B39972CDE5E68962D10391F44C1EA20D231A7767D04784B445B49 +Digest: 8E39CDB5FDB4543925DC5D297F8C9C6FC808DB63B3255B9437575E21D7518488BF5566986271B3D6725CE61770EE5E89D9DE79C2876DCAA69BADA4BCD8CF4FC7 +Test: Verify +# +Message: 06E24DBCA04660343469747254B70C93AE87AB5C9F40405EBF82451ABE2EBBD1FD575EAB2E6D06A6BD355427F94142215143CE00ADBAB524B7E9CB36BD26D762409131535425D770E35A44F5DD10C01CC5E9BEA6249EE5E94CC15124AE97BBDA404C99217CA868D56C7292704622ED8AA8AC239FCA5A4FD82AC924262D53B781FDF096B22971D28FA3B203109B0FA26FDCD336BFEF50725FE5F98C7FDA981F8BEE76E8E2A3083A833379D88C18A64C79F147662CE5418E4E102E12E5AF64C0F8190BBF46496958183B935D46861C92DD7E200CBF4E07831502EFE9B2B4034C62F63713FD90D6D7F283E37FA698EB1FECD94C2D0CE5B859BCE3E072EA9026CD8CC1F7AB0C5B1252407640D7E66D9D5F80065E1C3F0A87A510A77C4D310855960ED972A623E89EFE91E9A73041A4B64481F9A40960B28D9A6FCE2AD328BC30B08382372A04CE7FF6E1967D8006C368E3B8F4C832E1710AF63536EF0B3F4DB6B4813A05775909879ED1F58CDDE7DDE484F7C645F6C805681FA53C5314C003336E99E17D7EFB4AEEABA8AE54C835ED6B183FBBD431C40F81A69E2DC7B33FB0F700A8D1BE506737C31110CA6599F2868124318D0EC55281F719170B8470D87F312390313946B78D04EB59FBEF1C32A1F2F6B88EF2F85EFCE3918584E23DEC61AC953CB7A412AE358087597038F69B71946AA8B493FD4E2660EAB947C7A5E3742EEAA98B8E31642AD06E91288123E83E50D689C4845DCC881F634F1F1170F638CB9CB03BF4A8F6B2B22AB3468FDB45127083BCF8F84C8578D05BFFA10551E48D06BBE2BECD90FE47CFD5D867721AEAF3B157E7ED82D4AAA56D44F4119CCC8CBF6D92C6A0D53AB7266922FF19AD6E617062C04D54AAC3EC2569A741DA48C76FEC50A12CEADE843FB52B25F2B073BFE048C646897B938A07B92596E6314B5A19C3B1130A41CC620EDA228220F8B7590A09C8F269D29020EDF40E23B2CE7F00E8716D4BAEBA09B41131A422709669E6D8174A611BCF2022B8FBF66BA6AA1D3BD1332E6C3DDEC48E67ED8DA71F64B8F113F26ACA846FA6ADBBC76A23371BCE4FB6E788FE7DDD11559EC400988A8DCF70F3088BE3309DA588F1F52B49EA9902EE4E967A0ADEAC8248B5855DA61EC0AE3C460E5549F6B33D4A11C7296B18F4C31C75C10AC04179B17CC7500C258695BD6E5813D740EFA8DCF8 +Digest: E725720A51E90559278B9CB19969D6042A4BE89BB356F6CDFD58121712A3C354F76D54ECEB380C2909A7F3C3497CC50210279E5E1E64555D0A00899251770890 +Test: Verify +# +Message: ECE55CD5FC15C85D53AC64A9FF966D49FC66CA02FA703AA8F8E711FA8E8AEABA458A4DC2620CC0B819859875EF1F3EC3140DEE66BDB29F2B2A550D1DB69962646820F4D828E6C35EB31E258C0CA94A082B2B7FF4597778EA931AC0A4CA472D3845EB8B65F707D7194E9EA645E5DDF83CA98548B237F452813F9DE69EF3874DFAD6A916E36B7D93FD4234F6AB1C186E54F94141D139222A43690E73DD4FD74CC02E84BDBB9FCCCC6B607633E635C37E43E4C92C4949EBF2D2457120B41F2D7D621E5E232778294911F8EB5FFE9405711F84A8E0D40D19C482AA8E5B5B76AED0B09A3B91BE1B6D245A19227E594A8990122CB022D45E41469E6279373D71EBAC1C55773FA5A04626B6F01381D7529FCD8BB6E72A99A2C4A0726B8D08874571FA11152E1A2531B58C52194A41AE015D4B5E74D082C0C863F78F79DBAA282DF5F33C7C1E3CAB7F4250977C1493BC7B2C8CE13D18E9B9EE7717C94F96BA0562711417598F3258C0906F6D719F3AFF43A799DCDC5BB6908C77CFDA9CDFCA898BBEEF23072CDFBC0B46B98BE1B07E47AAAB1F3D8E9C6A837F5856567AD419148D5116371A4998A6391C861AAD01BFDE5C12544BCAA8FBE74E3C55FE0FCEC5E1A918179C3BCFB661BE44B5296001D2D354C29A1617A2C7D7CF51806A74B98D9B696042BFC864A9658B1B0500FAFC37B40DB613AF0574A6C2F267BCFA49EBE98C6723A3C366CA1A4D990008F3CE29757C491E2B65271D8052C75D254CF39B4CA371EC9CF1F323E2D220B29C1A2AB4D7285AAB9547C8E1E6B0D3BF660FBAAD545CE4F28A2D94070A6E5D52DD5884BA495FA256E40F20DF205D8F0498D361D826D03A8C315EAE3F8123F50374E3733303BA1223EC197D186EC849C7F999DCE80C1C142F4B2C15C15AB477882B3A635294A49024A5E2DB4611B773ED8A3D976CABE02F8A49EA64C2ECC984BEE5C5FB7CE39FADAC8C498C248FEDF6FC76848649D0A6CAE7B73F1FD2D6B0F0F7AFFA7FDE8041E867C8640A140038224698336A327E84F7195D4F51FFFDC673C3A46C1E53AE39A3A2EC8494748AD2C1041BA11EDFB3F17DF988DCDC26B925850A760F1C57B245D9579E46B5A9C45A89B93962C60BD96CECE41A1A93B1912D4039C26E75475D8E795468DD220674A74046A18ED21365B505B4BD3527B62CDC580E655ABB51DCCC1D3C2D85D6770D2C7EF0C6367F6FD67B0FD1BEC6CC13A0FC1036D2E89975AEDE2C881662D9152EAABEA61AB7ABC43A640A20629C8F371D +Digest: E76DFBADA66BD4C71B7EEF524B94C0832945D6F4646745DD86BC8459C96F7F5D2C31415C9D2311282E05D36C687135B0F148C22DA40A6D16180604B087408835 +Test: Verify +# +Message: 1170644299C6E938EC37B4F45FA3C268311423FF3CE298CA4AC34FA5977CCC4D3FF98911E35636327FC6BECA6E767229EC8DDBDA653C51BEB8F03A4EB4B1FFCD364628AD57A24942DC8A1B8D245290F81A189B574BF4786A7702DA4CC43F5F861948ACC0B0E7D5C3699B04CFC36AEACFB0A033789D177F3EEF3A26111FA14D039130E50CD923A37FDF10DFDBF4582853F8C3CDD40D4CFE3A688C10B6851C6A68E969284549BCBB6F4FDBB42C475B75C396E014A4FBC4FD11A7AFE179711106862A301E5B8D02331EA63082081197C5F1B01E3A42F0A7A9862E572FE7A6D3C2605BCBCA340A23C72E3172F1EC60E2A23E7CB202B32174E87C2BC0A00A05968D725218B4BF2EFD8F68423941E98B96B42F93CDC6998EE3B53E148DB442809D0ACDAF48084A720B8E931BA9B2B7CC7CAD93CEB71B1A70C18CAC8A6DE095DC2C95BBD601B27E054B43471DE33FE948C011549A6000E935BF65C2BF6E8BCC591B7A4CD39E018EA66CCD001F587536D478D13CFE17D06A392EA483DDC888C3D362A7F1E2D9B28719B7742BEE21071138A4908D80D730978B0E8FF090E8F5173575C3A2C6573C561FAA1AB7F91CC409FD3020A8D424CDA6201FD542F94DFE7BBA3841E2B2551EB565CE43008FE1666542AA330711D19194D3AEB3D4E2DE699945733064452875C3C8125C609866FC0C17332567ECF0396C94C735873D0E94911C90AEA89DAE5EE7EC6A3317159090E9165FF4D63A37D4B4F6FF37950C33FAD9B08B04F4C8BEB85716CFB2D8E2D540463E7B6880EE7815BE718678EFEC68CDEFD437987E22F293320C0672F4AB54B0013989208B424C31E1930088FB38A84B4AF2F8EFA62F6AF47BA849F86F48FDC40FCADF6F57D8DFF720585C4C344B96A9ACEEF597D644543F4A7C3D1B05E46D81A7A470DAC40414E12B3AB7A9304DEE71D9DBF13A3C54974BF4D7B412AF73995802C8602B678A41EEDECA795B70ED362D58EC139EC86266FD28EF7B8BE803D5045A6E362D9C5DED0ABC927CE1C37E3DA04DD8FEA07B06422ED1BF2BE8F02B807AB8D72C1B17253C088C431EC693EB9261D2007EBFED1B53BE8B9FB2CF22ED9E5F214C588ECA06C11017A1D324321B58175687A2B7A22FB2F05FA6CD364B30D1BC5E79D912CBDE5C980BCDF81F865D4A4B51BD97FBC574CBCE5DCE96219F593849FFCAD15399DFAF9D9AA48B96CB664B4EFBD7E995EAE16D9A807882A9B89AF3AD83EAB3C24719E06B08218D4DD34F563800AC8D21E1E2479C08B74F38ACA12F71DFB71F5353EE7146580D0473323507B9DDF2ADE46BCB11BE899CD21E7C8B +Digest: 40467B969693D192E924CA950AAE5E6AD4043BEED13F89E5C3E6BADF355C35C657E9CCD99007D4A8EACD7BFDFBF9DCA407CBD342940910CBE5068E53F9E00BA6 +Test: Verify +# +Message: B473F0B471EC58B6FB374EA3455FB0487517B377C2A1A1DA17816801335FB29683B2A10A87051E228FD866FB3576CB5CC76782E8A34C3C1245DFE7FC4F14244814BD0F1FF9D167286BC0E5ED551F310C7BB074A7AC7E5F8B75FC54F5144073041F751E9819A0C25D6F1F133B45F2BD9F97B50372DE4F78DC9CDC95EF8768F223F5B99A988A5CA46B0FDD681E5CF1AE95311CD1AECECB049660BDB29F39C1EF4703AA8DA85DCB43C45D20AA5E51BA4C5137B51140A5EBA71350C0B7AD7C88F21A9D27AB0E3763829DCAE6F3A7022422CE4630ECE37C8A9BF5BFE4959FD4487EC550D526030893AA69E354AA01EF12C214C0A6401095F6D259867470E4EF57CDFB3CF19EBF062832CDB08C756D05E840C88F61FD778329CF23459DADF66FD11412EC1AE1DF1076E1916124CFE7D8FC7DAB02102E5EFFDA94A8AB1B5DF679E733B8EB1AACC6690DA962CBF9C38287D57AEA24E1E887D55451F4AA9F8594CE848B0AAFC82F8E99A0134F21498F837F751D8FBAED62556B8CB5F074537E1E98D3C9E8B0A3EEC219A5282CA1689A779130AA0515A2277540AEE5F194ABE10C687D63B6FDC38E331C0EE19F82F2B0E5640623203215089D7E992F3A91B8F3CB9D975C487B58DE376F47791AD75CBCEE792172653B8E62CAB89002B97B4AF1F6E91D366B53DB60AA79E97EA4D662240E7167B7EF197906F5CFA6939A19BCDABAB0673128C5D1D42D5A2BF00D6D90D8DC08C0D6B66BB5E319E19B84EC3983571B49BCE808067D6D7812B9E4FC76926A3C9F7C9AA7C250FA8CC775A5F82A2AA801001775AF18DBB671AC3E65715F69C4B3E3B0B048AC6B8216E7ACE21A5F5E7D23D970F6DC6A990774E0F674D03A5DF9154CA9E1A9250DF826586493B80FCD952829EFD76F98DB3305244F7A297C3591983F23D9DF835DEB3C586E56382FE92B3D65EE83613C73ED2042F65C33A74994941B1E7D8676FDF11CA45FC8EE03CAF79B97522AE6DB0FEEC16C5A500B13CC83E6BBE8A61DE8A7D58D6757DC0841EF282D292AB158521C835A7143B755D734245C933104B88E444343032B79E8EC7A9AD67AC70AC46B8919512F0AC9074B7AC275A21DABF0678DBC75C245941EABA773F95E58E096826DC9F4769BAA59729CB18CE98FA3B45BF2FD669422EFB321D2DBEFA6B52179C8031542D1AC5F105D209142F9F2158FDEA001FE32EACB4E7F25985581776FFD52FDB843C9BD4D563B5C85763353EB8CA71BC809B4C025E9AD13F1664C2F221F8462C475769178CE22888A9846DAF64310A19500539BDB2175A2849524A16182EEA5265ADCAE8DFF5DAF355D92 +Digest: F43DF1129F43190F07F4CA8E4363EC65C26116FCF3D27AC31B4F3D3843A640627C3A58ED47866D6927C7E0E383FD0A44F5B1322C131A498A9638775891CD13A5 +Test: Verify +# +Message: FC699ECB31A290B51AA444C7D2CD0D9DDFA0A5558F1A43B84226BE62DCFC4E17E557C7F9440581717B94F3F271F0A95362F46B40B95B1146731AFFEF9E9A30D1CD4A0437CEE05373DB24BAA1418D0987CBE1F47BBC3C2A0FE064137C7C9DDB090F5A79422D58D8EB3D32EB6BDDC1AF523B099B238953218267A84297B1B5D93A2C3EFC564C99B04D6F1A1B345759C5592905299AEA9BE90CEA33CD1291703763658D09F0EE37D91263F1F4B5ED8BDA0277C1E2C7FF1ED8048A1551AEB27EC7ADD99E26F8F56CDDE6621B7BD47192490F20CEC134D2AB0BB36B6B56D9A65FA13D10FFC62B582EE33B9FF6128B8673F58BF5C8E98172557A593B8A4ADC2300C16014779C10352EE00B9F630065C43F153EBF5A480B77D88F916EDBD25A01CA400F2ABA6E95D4F00D77880FB186BB19B21F61B06910E9FBD22EC2CA7FF5C77DDEEC40FF5FE855FFB3B5FE38427EA2095076A7343A07826A62280C55A7473EAC2A00D9F929EA83319E9E6C1C7ECFC4E3C09D206FBF40741AE4526FAC7A78DC797288668D35311DFC47A2D66686D68C1A005F86B3C0F3364B242FDA07FE0E03A6DFB0BEE0C4DACA13CEC23693DE1AD8ACCD6CBE734843BC3624D62821F5468CD634606FD91A5F65D6B95E4C01A3C6A429D4BDC05BB0A2443CF7B5C6FEE4BC668522073AB3503812A7C41AE8A8F1D0B25AE14E779E0ECB3B023DDCF6E2DD35B0362F1808D291C2509C732EA1DBA302E10AC77F50205C3589B1E2506F7EE7364215B8F041BD4CD95B27F857755B28CEF2E99AF305DA686F90F7B6C8CE7699481972C720B124A289D3AFE8886A8990B66B2CB5AB302B47AFD25E54B6F56161EF5D9B7C3A240E252BD413EB2CFC68B59F54D6FEEF2F3601A68D2F154B05A1E7083F710FEB77D85342436B942D6D0AE94DA6302EFCC4FDDDC759583C61E96ED1E51F102CA0D4C9419888463206806E265FD1A853DCF9077ED2E88D60AABCD29DF21BDEB870A152957AFA2DA89CD4C72C4B0245E66EC23EE4699F02F14EF006F60350D8741D4ACDDF8BF377845CBFC3C46607461DC929A9434C0E3F8CBBBA0EFEABD4A52031A0B8B032D07A80CCB6E8516BE039AFE3695C2D031C15A9D0C5D37ED4BB47772CFE3F347082A57577D12BCFBC7A2D6549CF38E5709591055FED1CECB9BE779C4E281F2ADCDC3BBB2FE2BB5EFAC4CDED5E9A6971243A66138AD078BA42632EC9BF5BA4A0C6E04C69F19C41F14DB1D6FD57734DDC07FE8FB5E270515CCE71EFDF5480AB8528935EE5B33902DFC26C01155AC3160D2D04CA384C64835CB565CA559A56664E9C61AD70EB4887F193EC574ACBBC8C375DC8C5E66A13B17F5492C967123BB3EEE81CF07394F0E407916A82CF4C4746FF06E006939B17 +Digest: 1E50ABD377876C964319F73885A3467E34468490DCE3040430B6C586F2DC077528DF1ECC027D6B2929661C31B73F3DA1EF0AD40DA1187AD91C738CC2077AE44A +Test: Verify +# +Message: C8CD54A1ADD7B74265D35BB6D01E7028636F07DCF43BCEF45D9EE7672447FBE8F7B3CD0901BD9967324D7A536DB49010AEC7EC3595AC5467BAA4212C644033FFE25F2E18AC57BCA2CC24A923FF4BB04689BBEBA024816E321BC8009D0B78BBAC918BAF4B3511242EDC13BD7C6DE5825A9153D92B01F2A6C6C63586D4D946B4295DAD670E69088567DD9CCF04A7559273EBDFC442F1EFC7C6FB111348BDEED2AC5075E95E435CEF67F84C829BD2E29574084B3C8A9696049A993EFF511999D3E57D0AF226AB491986C294BAA83714E5AEA57804D0A90C27F7A5D4E6DCE873EAD8550557CFF915BCC86971825261A9F9C12180425368ACF25F1317F1D3D7AA88FA066B88E9ED6B9D30132C80C9E8931F898172FE7EA0E2659D7A893B7E26275D1D43BC74438987803615587C5AA754016E8CD6E9757E1412CFE4B72B710A7D9909CE11C8898431EC9F6F24965BD443E279B3DE940C3914C79858915E9E45FC17E9E1B958D661B37E94517BB7D478B237F38E5F44EC8EE87273DDC1BA992F259E3A9895F448C85880A7338708DCF79F3E9ED733381A886CF6272B240FE6B4C50008D1FFEF6D17A854919C0A3D785184B43923C8364759DE21E06D02E6A882FD5490BA2668CDD061CBBAB0F67F2F6C89324B5DAB9492B915BCB6B1E889865900C204BEA29D333427C0CB2F7F11525114BBC77CE453B83C60757BFEA4045B84B19836A11409D377A38BBD64895B3214DFFEE76928ECC646E3B4F9DCEF38DB4122B277D3982C6B45D71112EA393A9239097BD39B9B0CEA4116624083CF1AD7FDAC41FF87464BD06919E0EACA1C356C50B8CFD9E13CF2F631582D03D6F949F54A64D7C899C466CD5FFF2E2DA2D5DDF0C1360B8D61578D5749BF1A129CD5A8988F487CB72F0E19BC80A0E9736093217939494810FFB6BD95540BADE2C697A207FCE0460D4FDA1C30BBA66BDF581148DF2DD71A4ACCC031159A64662DC46EAA0AD5A7E797251F072E904FAAB7D04AEC6E92C8F7EC279B3276DF0663BC3C587F198E49716313B201EA7B1F40008389BBEED91AE5E43FF1270D62DADDC0DA0B3C6DF2131F21B4F2112779BBE48C98A2C55143562E55E8A3B9BFCF082458167431EC32A71A102AABD8F2AA02573E465267735D7B2191E103F9BFFE579E57DAC992EBA13B350A6F0B489678838CB3A08DE826E9570320E400BC2D1219062248101594B8845062DB0ABEBCE3D1E3BE3C4E551F4831CBDB74D1A5E7F6939F7FC9ED8FE82850F60EEB58426BE594303570AA578434B6B4FB19E7D62BA9CD37CD03929DF4ACE1F26E28F6F2369CF8D98439A1A98C7AB3D041870F6E394C28E5970166167EC55D87E892711BF76C83080C6AB3B6F9AA93DA1C3CF2FC304A6812A29B32D914D84F225EFED8E548E24A9471C5D9483920A6076EB711F267 +Digest: 1BDA3097BEA7F7F16E2E1B5A9C237D231E5CBEC40448AF4B10BF23101AC9BC33A46202901F2D2630A354A80EDCDF2E5B22052CE34627CF600A1D955114FE4681 +Test: Verify +# +Message: 7146EE8ED35F5DF5E487E2FDC0D6FD0167F876C86C2040BA6464223AFBFD44DD32BE1B64ADAF7A6E61BD57FB0FDDB6B6EDDEE8F71F44BA013FB151A802D5FC172860B60A17D220B41A9871B474B96A6C5BD13D7DD8FC82A6CFC5CAC076EB47A1AE91117A5DBF7BEC03AAF980336E1CF66CA3E056724E929F855298E12BB23762EEC482D893C7EE6BC194D31BA89A58A874F84ACC9E3A1B4181E1E81D689F5410EA5C6CC04DBD523C8815575D3482C555FC92624A3ACE8E6F6D31CAAAC73F6B5B047934F94A8D7278AE69015D3B05B8A61DC51E226385D8E35C4D6842F8A14FFDC0BCE2BC7EA386F0716FEA78206BF8CE8189577D784B0F97E5940F6E9CE38654E8840FE3B9C3954078CDD62C2FC0FF986F704090365267F88638D43CCF550A10FF3C8AB7BC9A87D6FD8DD7FF7D62E0C6295621B73C274240D4F730970D99204C7A42927DE02FADD0DE43A44C3CFAB3C045B42F8F0960F6A62BCCA59A85A13A07AAC93FB423EF62FD459610E82242965326EC84ADADD1675408D484D24116999CA451FE856B83C220634E6664DA0BD7667BCCF8587549E09988C6117561AC65D911E97830BFFCAF384DC816319DA3694A49A3CE5C3EE561FE6B4AB38AB3B091BA8D71957EBC548D9D0570FDD52B4FF3993AF13FB34AA2B6CB78F02078030ED23036E49F5D8BFA7B2CB955C592BDC7868B80106BC190E45A5BC7371E4D746A93E866B9BDBDB7202FC8275CC75DC9D4797A51DDADD1DAA036FF2979C3EC57505776673659554333012ACE883E9D6590B15790214BC089275B9EBF3B293D74CB4603DF6649EFE6E0CE6163211676C6C6926BB877BF3BC3B53FBC1F4B3DE69D0E5579561745D231794B004AF069C122F5F333B1DFF556C5B149D8E4FEC7CDF40D273DF5B85525C5B02741B8359E8E7987D51F5E5FABD849E2ED8D2BADA4FC97ADD046A742026DC6AA0EC2FFB14B9A7B92A84D89FA63495639408117AF24B55C2439C27E2CAACA92E0DE1A1B2F406DBB0CF6827892D494B61FA022B325E132EB5A1B622E7E48CF6EFFE80E27196BEB5F6B2421AD8097B4D0229BD83AA1F091A05244097C179F1C8DF3DF64048FDDCE9673282C85264D16736E6C10DD787E5C419BD5F42E37540251315BA1082F01F8745122F2686F7C317D30246012C2EC1AD8D67A699B78BBC27226AA2D5EB9C054E87ABF92A0D4A4F381A5A44953774C88CF37DE0B19B08560BD873E55850CDF0521AD0C6B7601255E336958A896DF54DBFF3B1696C80F4947AB4FBA6978AD9EEF9268B7E50D69113A85E9AD68AD54CB1DE8769CB4CA6B302CE9F7A423C5F2B6049E7622FEAEBAC64F13FDB666D4C1F1731CE58E355DE242E540FB5CF1564E7E4A71E9BC5E5B69AC51DAE6FD115E2A7E6565A7F24286C065B987FE0A5D091A4E1E742657DFE33F42412013F57504C481CC17600987D5504C83AD43D254530BD6608412DD34B0D3EED2D95F9EC81E1EB896D61EFC019131CC20065E +Digest: A07C9EF41C5F6B0260A05AAA3F1F8E21ACFBDE188D258AF7F9C8413A0FD45A2EDC3CD6B8624F0B917F383449899BFB6444D3BAB047C62889C7AD561FA36DD731 +Test: Verify +# +Message: 93FBBC35C18F3616DBDB62FAE093B0575CABD7D031100ABCE88A906EFA451EC45F241E46B106567899402B6B4FB1B0949695F4AD6AE43BE4FE0F5586E24002EDCFB5ED9ACF284ABBC3C2109CD44555D3FE3352FA9EC38683C43F187CE561D08B2E54C8312A028E3B40F876D29AFBF4E7C7AAFFC00AB847CD86025653B5FF676428BE9DC204FD8396438A4AD7CC95FAFCCC74038B43F1F84B265E335A558242EF618E0E4BD08DB1EE8CA9E707A872993D424BE2123E19A96EDAE411AC3A4EFABED9D244D7CB090FE381E35EB769D36639460565525009A5F3A5E067103EFB4BB1857694FAE4E2330342F529ECC0B944379A1FF83E6B194FBB0E1E0EA67A7DCA8379F71372EA2C682AA237FA724D06E59169B0E28688AF2DA2B6311A2226520A1A20E5DAAF4DE28FAE1E4984B4AD187153BC16C63B9BF1061DD1253BBBEC83F482BE8C1A2F833AC019CC4F34B7888EDAAEC14EF27E9C95803FB51906118DDEAAA16821619949100B3A54D0157E1849B419DE87313F37A829BDFFF4F7A79A598449D4F0C207BC34387AF3EC4966697B5954A264D38F0552BEB07EFDFE56A7CBED9937CD1198A62FCB244D204467098552FA0C8C1234C0AEFF4F31218D7EF1557F115E13A4C030E68DD05E443844AAAA48A359AAD1903A9D6907A6CADAFD868ACEA32197909194FDF78C55CA4EF6F50F23456660503A0CB6B4D90CA557C9BB7F06842DDC7F339E9A429EF9E916338E31B113FFA5174D80F58378647F96872DAAC41A6918253DDDF3FE6AA479C62556F6F9B60BB4A05049EF1A00160C9A44AC2268229F745C40846628BA6335B1A7204A53EF687BE6D64F09E4F5F77D7BE42CE21F807B200F4FB78FB3863C700666DBE07A452F955961E70C1354C777053938D1861769980B36BC9184F8C9FF2C5F678A61292C20A370884D807AAFA902387D8C24532A099121B12AFF358062A781573370B87AC25728CA2CB286D96159DEA0E3AA64FF389578986B9D3BA6144A50645F410CD8CEDCDD659D6E722606E0EB173474322AF7B2AB67DF1CF5A1900BD7998B4BAF14B5F773AE2972A02761B20C196EF24AA8C4753E757B8BEC3558FCF0C1A6100C4310589AD97F3191637765289FF4DE6585A827B4DD0305558968771F2CD072EC3B83FC91C2B1D5CD2D3622001C5C899BF507665222F46121463FCDD2C804F8094118987F1363BDCBF2885FD3FF363B523035F82B0580E8E63F5E7445BA3E218D14B55EF3E4EFCC129CFDD38AD243C3CFEE83EE3B8E89106413C2B0659E5FD592BF787BAEA2F0CF9BD8132A9ED18050C947934572A0B3FF5E7BE7A22BCFB039CEADD13BF7E78B99281162FF2D84CF947C856896AA71EA867B8F877E05887EE0C6ABD5F3A3E462FB145D9D1C5D7B337B4DDE2625EC362D52C73ED2D9B1E51C2A00880E6784F2B00E1FBC49734E9666792658628CDB9D5B40973571F3F6FBCF17A0500BDCAD03700C4B9E414DBCDAE8B5098C8DD7CAA17CAF095D58D8F589AD58BC4D61ECF375B58C85C15BD7185DE3AD65028C90C9969FD6A7F70D +Digest: AED513B729D1EBDD3791F69D8C41E9CF9C85DE7B5772C8AFC61D7DC07912E4572CB91CC58C53AB7D1CC65439617BE6B9B5C932A1E5BA73D1165B3AD3383A5E9B +Test: Verify +# +Message: 5E036FFA19ACACA341D0F59034C860D525AECD7AF60A96D2D3D95F5174F4ABD39A8CDE594504AE565A4782164148919B5309FF4073FB3DFCBE242EB8CE729318A317AF1A2EC373AA9B88C5297B734F6E40629569672681E22A063015E71585028DF3D1F68429BC26243DA4B8AE60FE4E764B1C008EEF609F67C5098288B0D8885C472E3FF3A97DC9C3A4A95A4303AA700C1D7F1930B475C29379C0EE99DC156A0B1CD12D8020A2DFDA02C0E2943B2ECDC74FAFFECECD932EA6FBB90E6C3785F461729CFBB8F44ADBF856D812586BBFF7888E98519413551C872F93074FE9CE10EFFF0D13D6A41EC152BC2DEC2F4667C48FF4116A0E3BBC4F148EAD223C5ECF0044365CB1B53445EB6FBD81D0E23765A8B3E3088B2552B4088E3F55EE9FC2787C1C095F563D2F1092301544A2B2105206BE59B9C4C19D8613416E343D10DDF422B9490D232DDD2B7665017F9F979C2A576B183C7BA5179A133A7C4A95FB5EA015BA059940BFA569841EDCBDE1816AA5809268DB4173F67B10639D256CF977AB2A77D0D95B9C787558154ABAEA1442D05062F2281D9DEE3512A922E0C1B466C0ED397FCCEE44FC0BFADD3E6186C0B712284D95BC34F2E5C9700D91BED4EDC2181503498CF3AADFB51DAAA37B15C2D9EFDEECAF33425A7516FA7A5F08CBF3E0A84A8BBDD5FC7870B94137DCD254913818EB55B9846A94BA5E05ADB1C321C93CFA03D8B4CBBE2430E549C5D744AB767FE6C13EE71673D98661DCDE966E5B25239ACE8E406B84508F37D54188E739EF098A72C14E7F599BC307D2A715104329A4D8E23BB49BE3A1CE11A5D95218D02D7897E045F572C8FA1BB72063C3D3EB1C15AB41E6083B08F323868754A0CBA8990BE5423749990A6256521FBC0928FEE156F4173FFD8AB3096F17B109C22005D4D0D0A5585EAABAA18A52A36D0321226AF23DE5C97D76AF038B5747529CB0DE268C248703653AA123D6CAAEB9CA3E6A5E40B6BC7FDBB3F10605C96FCFB36F5C69E0C8DDE5A589F200AADC915FE18E6D3CB476397B9408B31D0D3D43064549FBDFB61A77C5F50F7EC4360827EE1A85742A716E261E496C0C16F1AC54BF51D7C1E7D48533074CDB50D44D79F011022E29982437D7240C51B1E9A9ABCB53EFAED4F0532F69CD54C3EC787A4CC03DFA4737972B65E36F1784671C97C112EAB86B71CF76F0EF5BF2243C409AE17891D7999C44EF1DDCE15814BDA119040B4D3434C28A9FD83654BC78C74858592DBAB007B29BD6802D547348EBD0E3C761A672C2DDD9BF015D0F3CE46A7343EAFB45245599C660696D36919FD0EA3809E395C2AB79AC1DA4A8088BBF4D8511001EB305022124441426FDD37BE6705F7D4770F7ABA0A35967F55273476525F26543294D4C4E60B60DE30F171CC4871AF6B8A1BCAA59C0042B11EE50615698511459531674D3CFC5CE3120B1929F9FCA5B8AF6385FEFDA572DE3310C2BD24E02B40DF8C562FF9EFA5C6408AF1E63B28842FEE22229B1ABB456D0FC04011DFC1970BDF5F2C1E9D5EC889D320F45FBBDDFA9E3F355B1409F873609A59A6565FDCC2789 +Digest: 13687E4A29C9EE74861243B7655826D0492ADC7A598A4F05F2063CC191D0C14A3FE3E86E5073A1C4F68DACFA54AE2B9BE104E081C8EB5119828A7B8F1DC14188 +Test: Verify +# +Message: F12726710DB0C5BBFA71A60D78659B6F506A820A3507FA66D2EFEDFCB3369C49F9C1C0E177998855B0FC96DA8F93983E2B99AFA2B556060FDCF4FA4DA755FF8540A1A43EAFEA5CE317D86419864DC9AD2EB4D57107DAD0148DF39769BCFE218F5DD8AF0C499988B3F311E8D7A39F1C35B51B1C6E691D4B432048ED9AEBF5BECB02DBAFE5934AE1D841D248BCFB5C5B3F99FC55DD5F3A589554A2259C64C1A18DC3298A80CAFEC584D4C4BDC60854FAB6E41DF47C534DFCA4837B20F54C8F84B12EFB152533DEE404CB53DC05BBDDDB22FD0720A8D5E39702FF4B7EF0112F738D1004E0546F420BF607CE03AB6ADCC6C01FEF5C639B4D83841E32350BEAA0EBB13898DE24B32922C5852D07D00BFAFC84ADBB06615BB4F7A798A3C46D2933CC32AC20700717DA084029BBDF61951C9F5DC6A23114FF37458DBE9DE9B74C8406F11FB0EAE28D514AC5EA2B66A506DA26A22CFFFD3915B9BCD1B116D4F2906931B2F99B5BAD320C4F6BA2533914753FD2ECCA53CAEFF4A18DDF18DF32E9B2606DA351A0A00365EA81DE081532B36C7D8A6158189C714AACEAD538EE9DF54C38E524CAA7A337BA368FC08A336B84525FB8ED17CF4AB1443CFB339F98B7B686388524AB23DBDFE3EF1E57EC16FBB97A573A965F1FD60D623CAFA16F32ABA77B19EFAF21B85A89568E6C43E1A782EAE63802A7DCF38D4E01284B5638517C9C9C63902F12D05B47D77F59EE98B8A26875A2BE3E8ABDFDA4BA1CB445E320B75F12371B41D5A7B4D711555A9DE21DBB3533F422FEDC1814D7E40F153AD859BE970CD7C431E463D3CDF06CE86B3E80D38512C643BBC7CCA8C35C5060EB07F87EFF07C6E8FF3DEF7610E85349A58B832FA0CFC26E638719BF550F0AF60A3B465CC90F1658C0E6B75067ABE4C0D987FC4E7676C031CF09A360FE4717C1256CE14C573368AAC2059EEF8C7AE9C1EC22D9AB28A7473F3D95456F2C3DFC8D935883FDF4F93254844DE9464583D2B857D31D0F2DC4155FD7DAE053FC7AD3E11043A451DF690D46974B4D2B4862FDC082F9EDF24006EC2727FB47E98ADA9C05E7C46E705DBA5C8F9331573EB8E20E42D13883AC050F3D8D7844208E05A0B28DD11E0BE75180D0B795EE813FD7255F5CBEC9E00D978948769788A87FC6DFA70785D13AC872CA3E92BC8547B188B328AD8E1F96A6FD2418F45D4945A54558B9E022DE2B557991C738897BB3D37C59910941AF287A9FCA5C8C943A1B81C3CC45C7E18ABF83855542DD4243C05289681E439E7899912C9BECC00EE273E5873FD70B91EAF486880E84DC768684A399C96A93B9F15BB662FC38544098FA07FD6BA959A778B82C3525060647C02075E3984EB27F285041E30BE3ADF0C2D48A97F2072DD6A021A7254757DC720FDFB2CBBE4B4787467964FBFD34C009DACBDDA665EE119C658EF77853E8892DA40F6AE57DAEF47DCA71A931A963FDC1436D7786D4C9DA745AF8B23A23FE5EB44138F4E6A634C5A99967897EA92D7DC6345568202B9CFEC240ABBD15813E234F77C56EA4C9017CA792F870269393763C2111E50F6D952E01D1802285D524FC4EC2C08995D53203FB84F79D4291FFAEDA +Digest: 97993CBFF286216EFE4D1DD3782368443FB6F4182E794B3A184BB9716457A93DBFA45ECAD9DB2DE095261DFCFB3D0A83F806B62FF585204656416E7FF00EA5DB +Test: Verify +# +Message: BDD73A6A2D46AC9A30B9BEFB9CA020E2910D92ADAC65D0396F58F92503D856B8DDD5CE104775B00663F5A60C14843EB40312E0001106B0149B650E6D0F54AF736DF16861667B0175BC3BE8B119FDD9DCF0905EBD22C2898D114606E2A15EE8CA19AFC054D7F9F1C27E52705FC872C215B52FF14BB9D6210E10A1AA8BDED0D5D47FA3CC06CC9102FB16BB7EC4785B2E1099F94D416CB4457A2C94F2A76CF3BFCC8CD1BA56F13E5EA73721047E6FF9C6C2950F0D43AE39744253E8166C5BE7B00BCB0A9AD47008F4C48B8FC624EE730C0F4696F4BD09DBF5342EE928A98A6E25FCB0AE8FC28F74437AA567C0FA661474F1C455349D22A1D61749A5025728FD73CBFAD7A2F37E2B2E1C2A089FDA65A61720C4B294F8018ADDE7E2EA4ACF4CC62DFDB24EB764EFE7348782F891128B870A2E3E36F2E364F1C3008117ADC8D2622F70B14CE805A296A6AF48BEA9D44EA04F3F3D4CFCB52412388E608AB46F84E5F1253B93C6F2D7E852D419445E199582098587D31D8D8337D55F9E48D34C400DF64146CB150C24791BEDB21CB209C2C0CCCF7A5C80C5A17D3B6EA0E42757D76C9B6CCDD62D432B69B1B0768145B88F8DCA27CDCA00BE593383DB5D241757CC9B9B805D6D4662A2492E589DA70060267A8B91B45FBF153D5A4322FA09FF15B0E3CB4FDD9D78D951B6700CACB87918DEB2B84B5217A8249756464728BA26C6925CBB49F723E1AFDA4021C6D019665AF8B9AF040C5B10C12F6CA4D1343D26B3C3A901C0ABAE5AEBE12A9A6789EC33E5DDBACD82A0F9A3727F6C9F378D2446C46E4C1689DE1793FB5BED5636ADC101D88DD0EF08FB1B1519A3D281ED47CBAECD7EA09C22EE4B86A658440BD349C92E83D48FCB67E9E9D9BFD324CE0B428D82AC67A94EB7AA2713418265A01E630FF664B997A8F225DB7DE64ACA464771C75367F558DE560F7E2D605C66634C0102B06A93D76677AD9A8BE16F4291EE707CB8133E7447A03099CCD822E80242A27BF9FF2C704B061A98157298DCD19B9D78BBE57BD0C7DCD7FB07CB8DC1813AC5E109B12C3EF0AF361EF07DD3753319AF7953CBD8909CF84615F77EA1B4839CAA6182515D3201A23037D8D05813853CC3E7B58BB73A0F270E7E29E3B44A5A477F30BFDFA79B5D2FA22D419FDB89A3EFD5222D04F2508BD22EE2F3A3004B2C810613D3874161AA7D19822663778149FFFB6580CDC7230F6FF86A8304C7FFF8C2B42BCDE8D368740689EDED025F3725E24ABEDEC0F451D57713E0B20565723B973B80488004C9DC4D217EC6147013B719528ABD0DE0A64402EA1CC6AE2333EE7ED045BA9A436C96D9DDB117C9727F1F1B2F89AA3DFF22F63588E0EA1AB627AB6796D75CE1FD8413597062A1B131D059824D617F4D26EA0E8D94CF553D6DDF8C40AA5AD4CED4B884AAC1850A0CFD0B9ED050E81610377DEDDD0D0FFBCDBAA297A022397D884CD71DEDE8230EC131909263932BF022F7D6EEEAC8516EB3655CD21B2CCDF8A80EDE33CFC89A2E1C82A674DE31AF6D7223A1B3A24706CECBF0F7061EE6A3A7430F6AAF8C066746158983C417AC22DB0FF21E9B165C1727F490BA8907F77DAD986C438CBF5B65011C19FE47AA5433740E0676D5E3F1498FBD3C61AF55848FA848D0BD3DCB933955FFF6 +Digest: 839714968B649B07E55E5E99371027755E26BEDD4B9068C5DAAE2BFE900EA62FC7FC1AC6FA78013E6A4946FC97C3F93D82AE4FA89B2E1A2F9132D2FD1D42CDE1 +Test: Verify +# +Message: 2363B10D89489949A06D49E17CA7552FD1BE57078C65C17DCC8644FF06E4B99A7FB246199E123A0BD9DFC4E4DF3489426E13B5EFE9DBCA1FB0A24D6EA22EB15AC2A8E641EC54D222C7B8C41D6CA015780CB2E0B59A331568102FB87BF6A52B64EC0BBF404B0EAB7897A6273A100A820549A6B2CDFC098B19C035B6E66835F4D373551FFF233C2B6A8705EB80F4ED1F6D2BEC261C48EF522B010455DF52A93C58CF97C8DE5164905122A4084DDAF49DFA18DCF4CF2887F54DFADF1CF99E5B9C015FFED7F77B4E31DE0C3C64AD18008FACC77F3BD70D94C513EC3BAA64FC55F16623925D6DDA75CCCC466B5035D726C338EC7E43C4E961848527265647B83F29FA907605FD7BE26B4D221E9C5A1B656DD236B8311103E9CED0A4A8064ED7D1720DDAD9B49C19A27618CEF0C6A09EF46BDEC5211B3CCB13948680C8F129DCB5A91D7FC938AB0EEF680A218B825A5E1C6279B4112303151B8E15C2184DA965ADDE0C1B8F5FD3C796D2B2E259569C0ABD42447341F2F749379EFDD6E35F2CB9050DCE7691D4C1655C5C9BD2002D4CAE5CE29487C0E72C7349A4CA4B975E8F1B57CF809D792AA25B80029D801F50EDE1E73A7E303D9B122DB72FB63FED85062E78C9B33B53A5BF9EB28B94E9CE3FAFC4CCE30FA6BDE0A79D7A06799EA675C9AA04F19631208AF5C8FF7FF98A1601A1678E53F4FA170EA2F28986E143E586206A21ACF2D5199C85D165C79A5F8009009BE0F5028810EE5A5E02E6D1E0EF53B68802A446C2C57240EE5E7410DE1BEA8C48C425961D965E1A54A2A07E2261DFFA3444434BCCD9568D24986B0D55E56C384699A69DA0708C79C9961E93612C6566406D37E8ABFB22CB0767F86D7D11B0306933CFC218834C9E0ACBFBA434DA84DF12452BDFCDB869EFF235D97447C8137003D17773151ADE845CED59F66B833D43DCD9DC73B14111C7F080044BB29DB5B512A35584BBA9CBE239334A4F8674A3F253A2E3428F7E05E24D241E91C2EDAC3B70D1DC9C1DA11B605514E988DCD8F47C282E1F70B655B14EBE1074655FBAFDA3FB4CB5F84F9239D566E02150FA29A8D7C7C826DA9745E15C2342FE2183E25C32497EE8776BA53ACC4001D4A9294D2E4088A9AF81D515F400B9F0E7B1836BEA8EE4F94EBACF5191B5A66F370189317D69ED8E13926E4CF7576D29EA0B8AE69550BE4091220901E6D3BFE4023A73BE15A34E339E137A5508A2F302DADDB37D28E0411CAB46AD38A627EC95A324344956333F1C33C1807187B487FC332D964A9ADE8471B997CD332D114FEA14A4F4EDDCC2E5224A51F69C3514AD25C64E167B3F8CC9AB9FF6C0460EA67687D2F9F710B65EBFDF65D3C6A8170F703B630B38F256C855520285BE85C7DEE4A6F3968A07073A56C544C283EDDADFE95411F0CBAC1DD02F5A713A7524A47D5C1552CF7A9B47CEEC8580CFDFE993EEC364659B5BA609E3109050C63891D9EDF7AC92D4F8A6C5ABD4FC39A298C20A845EA3D323EC71B34CA5CF6EC57186914FE64080B88F2A67921DC18987B500B9D289298D82C5069978B3912426050876E3C579FDAFFED1C63D71C237C5495AE29543DE60443304A7BCD7A7B42CFD72481655C5D630BC21B26CEE53D9156CFD76339654992F7013053B2A5BEA8B733EFED4F302B66BD41DCB043FEFA82442D43520CA8C2B410D9BE0E1C26CB47CC4046616B7AA5527CE9E171F +Digest: AD7D39989268F1134D48CE3B1BC54A6DE0E14BC04D78113944938E0DC34195674B4D7EF4697494145E8F8BA562A7311A7B56C413EC6B3C6AFCEE94EE1C39E049 +Test: Verify +# +Message: AB29134D2EF77A44455E493EB6FD007882029EA3D93CA2D68D8EBC9E0F7C37F5A877840FDA63B0418C52F34C5DDD390733D51BC6EF122A3FBCFD1C1B9E64C56471457889776F475D9AA8984C1B86C1B3AAAFB2F4B29AFBF6AEAF8CA930B6867D84FD1A02D206F2F4845E6E90419BBFEC5B7294C10BC746B0C897DC01E4C2DE340578472910C9030BA284D2D99FF806F365F01404CBA14FFD794C25E7E4890A59EC247A52603D60A6682039AE373108A4EA1755C647C32A1DBD2ECC8287989D686F53462D99060C46EB8F4C59812FA31D8F610F4BB8F37E6530DD88EA22507220D5C8C1A3FF05C8E56101B1284BE4C3AAC8D4057FB1686DFAF78579E3CF6C9A070C525ED0FDA771F918CDD5DF53F1AA2481814ADEBD3592293E055DB4A0A50B15CE11B970664018638405756198C4C4755655F21243FD2DC1862826BDACDBB4D0BEAD39BF1FDBB7CE24CFA12F67E0046FBC311CAEE96ABC67340D45785308D16F9E265151DB67B719CF2BDA26E18C810ABCDFD1B80D73D90137A2C028F6CE9D4D53AFE2BE1BB208649A86AC764C76C1D1FDFD9BB716E7DF2FFFF2825049FCC2461C62B6D2720F31A56A23416E7AEB013D6099D3972A3B30D7B23010426B409EFD354D0DED41B7E490E665B16E47A44EB3858B7EB6FA171F6661C50416AAB686B5509A39564FF799EC3B60F2CA4A668CF0680562E12B320D7090676D2D4D3F4D10911661933AF261C143DB6115BC9D88E4A3D2F71CF35979AD838DA71F9E87886A4F7DEDC850B2B634F27EC5D0309AE5578EAB993108B1D8C5A53BEA8B04CC18D907057FC0C6F4747C31595EE33464CD7508B2E08481C9241EAEC68571CDD669813C6E17FBB405C304CE78C397E147466B3B153CD19700EA4FCE6464A38592FD85A0F06F09F1C063007EBBEA233DFFA8519038484FCAE352FBF05FE5DE62C1E863116D4935ACF72DC97CF75C521E12AAB7C3BC1A6257A84D1B2F45B0409856E53DEC165A65B49EE676902CC5DB21D68BEB9053931B9115EAED233CCF90E9C2259953919BE98CD53EF4C4E73DC3DB1080B50864973BEE06F6A1B71D626C44F461CA68FDDD465CCE9AAB6E6EE18273AFC143B6317BABB0AA7C5DE18D1D3570091AEABBFF1BEC1EBA9B482E11085268002BA4A4CAFC2482305DE55A661B8C57C07585799D858BFA326F714F37CD512965FACB92E32E87178126786DA66B04F843F4A2E905499E906E057079DFB01F0F60B6A65F7679A788F076DEF17651D9C714581918E05B3944FDA7C8A344009F121AE411159DB4254D91D45E119B9D6B83BEEECCC09F34FC719B014523D449DA503BCA8A9EBDD54CC47FCA393EA9DA2F47A4F591E9A68BC52F52CDD76A552A145FE0E74FCFBD9985FA8592426E4E6D9F289C2E836E299AB915EFCEA5D072A7A73052333D202F7A61C7A5B3E851FA7246E0677D704996D46F07ECCFA0B51986B3510E0FB4ABC997FC25916B5594D794DB48FF3811AA9D6D5120408158C9F29106C555AB4769C2C8E50C8A32D82EE20F9DEA018A4235A2CADC0F0CC8BE52FDE80B2A58415830BFE00A61CE4DA530C0E5662AD9C8638BCFA0450AB0304F7DE1A23D7C035D00A70B2AC698A4FF943D4ECE736183547C52F818A0A9036763939CB23BA4EF6696500D7800A96DC6444AFFA3A6947CEBBB577D940AB72730451347825ACE4EDDAED19CCF332B725BD7699E6057007D81B2481479D5290A940504DE2EF1F61D28FECE71084B7BF13A6F3888479B752F7605BB6C74EEC0F6FB983897B581B0916A3C8649B06DB2C56FB4FA05 +Digest: 2F7A5A3E75C534F6FC08C5BC66B5068DE7D97CEDB93343BA29ED9B6B0FF992F94053CF146C11368EF793909B25F7DAE05558CDB87FA08939DBA4C52B04791F64 +Test: Verify +# +Message: BF270D938A48F67227FE78509A830B8EF9AD2F12655AF4F38C7D8E98ED74147BDB519AD27BFDFA721040FEA8C918C43D9F2684CD952443690B21BCB174478D0FAA1941599BF5F360D6BCD9947AAF8D8AA3DB3A287D4D94C25827F6C754C9B9A63F2732A9729E07318CC03D205C1C281862D9585543B6DD49388E062F363C86FEF917F64921BA166FDD7321A6B5162FE27001F1ED29D19F1E371737C2B89B30DD601AEB5EA9BF1D3F0D1A06497FDF5E1A181B348CC4DC58A20D11A1494536DC92B26CB0E9A72F65CA5A286501DBAA4B93E82ED5119AEF869B35A20D6A255BAF53EE7BF205B736C6E9295E7FD9D8BE70496543DC117A82267262326C06C7895FE8FFFF791C51BB6DC0458A26C0991A3985DE21E4A0416D98637F03E3CCC0236C84FB913C871C5A4A335924684F4D0C83AED9847645F58081166F4A5BCE02722E850578912B1314A87F48CA29F961E504BC946D260FA569722EB1573E3A013C7CCCF9A2DEFC1865AFA498C77E757806F66A2C2C407D44232798BC26FDB1256CA5A26373E6440B278CF7B840C58BFC531B4C981F259B899A7DB71425CD59165FBA088535249C8F5823AC05966B540215EEDBEBFBF6B09F8BEB2556DFC95480B823DA590B6A6CDC042274FC14E46F35CEF38D5CB0BC93C33170309D19CD65074AF167BF6B61FC64F20FD0E0285106DF19CE93389CB35376048C8CCFEDBDB42FD5ABEEBF7EA3FEE7192180E74C3976CAD3372B3118552922461B8485E9378F89D67217D8AFECC031C3BF57E106A2619B7A021DE4C7CEB966C1E5A9A8AF9C49CAA286D5066C246D9B0023F1794F49EAD672678C4A7569890EF46F08C7FF3DA7F67A0C393EE8B4314FA40F48DCBAB7C00E969623B494DA7FA2CD580971E3F6DE1DA6AAD3008BAE1F6D11B037B496A7529660A814CD9ED4F9D10ACE44D5D50E75A30B462213292C507BE174D6C8E115CB38E0D3B35DB4C2AD2A06FF47954D8DC938B0C857DDC82EC25363994A83B1F5EF30B1DF825B8548B20AB2929A2A523DF15904B72FF5D90494D88F0B6D2BB66BA94E955C6AA75B24930126BCBFD9B4D9555F36D5CB5F404F24BB9AD13FBCAEB6BF197D09098884ADFFF5F0F5EA4189359143FB251BBBB623DBB9BEE022D66CCA50191EC2A0783F62DC9775E54611E77255D350F129491CD6D6F135893BF26EE689A2D266CF6920D8EA1E3E586226BC295A0B4D68ABEF3226B47B30154B77C95396DA8293C7039D054AC3CB9987D0DA13FE10E02F01F0FB901A84ECBDDB9D737F63B003FE21A970D2AC12B769827A536FB22838EE60DC8735897D3232F68A4319A2823F66CD0B314455EF3EA81B009E2BD417FF9AA48F59C076CA4584A88A3E1AA6BF69D374DC1EA77C5BE3CFE0E8512A66D7A133F1A041FEE93E4BCE267093DA7171CEC57B42B1467189376D113CE2239BA0E669D208C5EDDBE5293BD07492BAE1CFDBEDC21063E3EB8F5D892B25897A822C5E17E8BCC00BA5A349732DBE10D3AE6210AB4A513CE7743F2B0746EAA4698039762AF5E3F6A3820045D2925C6B846AA14DC6EDA93F74D6AAEC5DCEB8EBF3FB24BEF8D96339A39595C689D1F242C3C909718C1AB0E2EE6A203D0490DF4CA46EE7156E55FE9517E3F5CC027F81AADA6642B03F2085A9A5B6BFFA7EE44DED5E082C08A97EE17C113DA0774892A75EE588EB3CC056D3CC61D63B9CD8D1D64293D414AF3871724B89A511C7F791B3E3A5E93E64E7841364E269AF8384F1AC92C73447F1229F4553C351624C9A51286C9C46B9B8EB0D2B190E4F2F637F73AA6EFD +Digest: 9C8415F9F4CD9D1C01C504A35D00042203E3235D8747416BF76A9C2AB51E4F8BED3BB1F33658A104B5A436D072B7B761F09557193147495347026F73954792E4 +Test: Verify +# +Message: EADDFF7AF9FE7CC91CC2C4B9EF23829EB54574FDE80BAEE9A2A59B49DD3D6F7E5F7386B21E3059C73C746143ECFDAB387DB3A1AC31BE5294A2373291CBE5AA2F723CB7D98315A58FB05D4584DB946C38832AD0E89930D259BDFDB7F738EAD0E7A0B052F0D7E5B9FCA9FBF31FDCCCBFCE63B68835101144F5505E000E79668E520C3802DD4750B2C6D639844610062C53C429CD0ABEAD64AB91E9D570FF027ED3CC2D530D911CCC1804014647AC093039A30DEE73D9CB635A31358DD495B743DA3299BB5408D218EA526BEA60F0BD2C8305A8331D8163E7EC7358C7D675606F1D5E94525E03B6FDA3B08AB5AB7649BA91410B37DD5EC512687AEEEA95EBA03E708939A43DED3DF944AA90C768DE136D4A012267A6B9EBA5ABA24285E26704ED9DB222C83E112E51D845E513C91C25AF659CE83A6C664239A6265ACF854ABD94A22627B23006EC0AACF175AB7F8782DBF5249B2A9FC0452104921EBE70F5D02F2048B11AD56742F55D33A2752B698B76B7AC382F6DB09860329D2FC7E749CF57EFE74AF789C97286E7796107D52A4D29DD706DA2918071077BCB396D1AE8E529446FF30345579C4DD711671CE6CB9D4C528EFCF498E536D998533BA6BDD81E8AEAB424796E04FEF9513DE800EFAD66A2FAB157B40C91111C4A3A2DBF1F46621D1706746F592365D5FE33254DFBD87381639588992D5BDD33A49488E51A1B455ABDA8D2E5F524A104828EE79EF5C46DC3D059F47A949FFCB5A99FEFC83DFD451B1D10849A4285A2CDEF4D34848025BC3681EB2930DFAA948BEA65F034DD55688CA1F9C89DA92B0695E4DDF290C278030BE8D30510A6D3577DE4B80B058322277001832453764A61582F99E36E1ECA4ACCCEB62196B19BF1E551B119A0FBFD78A78C56C95824C5C44E03D3FA0E5BC2195AE0004806A20D9D35CF3F34A814B99C593F61F79C7647C9C87F3DC26D648AE0DF5402B04E1559BCEA2F3881D68335FBE6144C55AE59B80D4C8BA5FFF3E5E013FE3303F3A5AC527F73A614DFC5A9D495B45D388DB2D97DCE8FC7F1CD38BAB85F583D346E5ADBD58871543CE75A464169EFAFDC273C14F734E2ED5AADF8B6ABA5AEE5A6F948B4F781998356A982FE5BC848C7F9AF4E76DA2C8887ACC1BFCF00095867B3986EC59EA1F719F0BE32BEC7B9A3A682D0099BD95DFB056C04DFDFBB0CEB016A94D7B4243C8DA0F046681CEB97F2CA612EBEBAF34BC6BDD1A64C900051BB18DD1D77072B8AA22C51D3387A82538227359FE83B939873C9C8C14F2E61874966D1F85BFD914E2F8AD52104B6440AD624391C239C6D175272666BDC3C0F55403A8D0DD6A875CDCF76B124F16E4BD7C82E3D6FBC86D04318DAE32E51D2282DCC2A6F5CAF77B75F945C77FAD924328C3C7D83072C06E59AA8102C1D85E7A6B4D527CE2AD887CD0ECEEBB1764458FEF91080A304BE20E50238F9BBF27097351B48CCE0C68D13A3B67030154DC8ACCA593302B651396FC1269AFF3BDEA83BA90A3554CCA3DA451F549B99820A87AC2E1881D85499028970B2CA0CDC27FFF053E9FFD1CD2C0992DA375FECD8F64347A27AC0CC7911357309D89F720EC275FA45EAB458DC57EE9A3555AF6770834A1A278C9A7B1843FF8CB26EB67DA24792D883928C5D8DEC9F8E6EE8C34440463C785B5EDB2A93CFF8BC8FF9750B6C27F1D55E0BBCD11E8FAD956719C0199D221C47B9C7F191B7A0060CB5B1F102416DBDC107E495DEF867E8434D81DA8BC105CF344449F7C6F05385108E02F1EE5EF45A998956978B745A6E0881EB8D42D3435BB3CED0F03B82 +Digest: DE520FD799EDFDAB77297A2A92C464D44B1F193DA259ADE7FC8B13F42C1B29DD2848A062A0C477B704041E0C2296C8E2E6FD4FE6DAC9D4F2F95D98A13C844B78 +Test: Verify +# +Message: 153287BA8CA52F23C666253FE6CF7FBA001431C55CE7C809DBE8E0D9DA6F38CD821CEA4A086BB04D36C9B149802728382255A652D7AE02A2FBC1C9EB08684963CE8B56E8E10408422F643FD103DCF477A86354B0A62EB6A83843C75FE185595E3790008F0E0012BB2630124980D267AC4DD006A65655DC5A7FD440FEB41C6C410838CAE45EC08502EFA34A07418B20E63F5E3E9296C630762D3336784B50A9D289D14BF7D116D0F50B539125E7466B33845D5D0218604BF316B3DFE627E457AA84CD227FCB8243BB594744ED1BF6C1A51F9EA18DBDB36E0C7E85A7802B13E0CD3BDD5B4C15B00A860B5DA6AB15452FE249B02AEE2D36698CA5EDC8BA8FB9731F44F10A289BDC2B50BE78F3EB7C1ED61F4C22F25321B3DC04B933A080208087CA755C2463D4CC06D514E01C19455612F55EF641B5277A233CCF660AE8FA342DF8F813927E117D26DFE508F4CED7123050157F5A57B674BFC920C21CDA40E79839F72C8F757EE66DFAE06758AB22A6F419620D417E13B39C1536B9232A233E3AC52E0559AF2B106FB05EF51011BE856FF8E0F211345079C59933943EB91A7CC8173E769B61422816992A9F69D485A6522411A42796EB63D1982CE91070B7D471E707C5CA3829CECC9C69722295AF6B093EF1272493B0294E645CBC6EF8F0A99A74D36F9DF5A01C4B32B9052AEECF529E168223A1FEDA8575E0F28D5762FB40525D1A6164957A225C67376B0B2336DFA726FF3FB19C4B8BE320F5572571ACCCC421CA987E8959B1E1FE6CFA1538DA9ADCB42F28998B4DEDCF1EFF99CD051F0A956BECACAD736EC93A7368F081F6ABCF63E15EC7D0700AF81BFFFD57D32EEEF505F8108F4827E32DC82A718BCBCF0EA0D566EE14D57A6D3C252173B9CA00D5B9EDC07F53034216D09FCE27E8C6F271D09FF2DB63FA814338CD06DF40830D5019FED5EE49EF882410E229ABE4D413E2ACA4D79C1A02C72016D0B0917CA5C95BF2C1F0209A9EE680979F1D7DF8CA8B85A8F56B99A5966818D5EB58B35AF5997CF239A9EC2C6C9290B654B6042FB9E60F3407BA6AF77B39B8BF76209C9031801C46786FE862F77F6D808F0C48A2209D07FBE1ECF3AB54656CEBFA7EF7E0C0A4A99C17207AAADA15F2139BC712432C54E85DD3BAD0D29F965A052149AD01C042EE4057252B5E372F945141A4011E0E7083ED7145BFBBA4F59E3DDC4C827AE407E43316AAD580091FCE98FFE78F870F48EA8EC15204BDA2C825F7B97E89A844101BB47D3E54D61F4342534261D5E9FD53FCA85526B780E060B6BC0851494A82757DCD8EEA82A782337D832C46A589A17B09BDB0C726DFC3D435DD431E6BE1FCB26A7C9238EBC9D6B286EBD84CE716A6AA642734D464C724FD9C1040CEFAE44E9D6A484DF618A5DDD56EE90232CF35D5B2050EC3CCDF5899B10874FE4CA6C1DA5E787A3D13189B94B465A8315A8554690315FA96A4C2DAE42BF8FC5D377B09BB581408C96DAD76B83D473119E65A63AF2B103A08DD549E2E50377EDAF1278A8DEB35F2F1A378383E44DFBE9641E4039222C27FE400A7FFF7A8AEFCA1EB78A44B55DF4CE4A5776D8E254D83B900A42EBBC9EB8A68EC6D43504113CAE791C2AFB41974746EE7EB96C18410ACE9180E9803BE587169762C8F4852709C5976FE4638FA2C380B55FA48BCC086149A71CB5826209337884FCE51550ED70707744BC4637C3E84DF522FA913EC2C2283329E5D96B160D9FCBD71F499A2B50B06E9AA7F67EAFC7C06506FBC7AA25FF15E274CB7BE457D63314F6453BE2AD035A7A380A447454424C93CF5EAC8A38365761D74F36362948A29432FA95D56CA017E85D2E76BF009463507FA1EAE4E586A6265106BDA88 +Digest: 45EAE2D069B5FB07FF9681C51A71D9D3F376C70FB0BD9B1642F886B5D87336D68557859ED0E436837ADD382D56500522756717BB60EC1D08CB2A21BA3F7B3398 +Test: Verify +# +Message: E045837DCC83EE827416BDEAF819E99BAC120817E1F42AE970407216C556DCF3C2C8DCD87ECB7A2896085D42FF353C33EF5EEC338527393EEF92C98ADA266B853210D6F06B85D4BA26B656C22A45532FA9B613CA102673F8E82CDD82CD4CF252FE67F6A42B94C8DC21E0A80BA7EC231D0CD5717EF08DCC832E82775EBE514BB1D2EBF4CBC443513E51B88D0C4457679F720CBA07A6FBB2DC702D81807ABA0B5FF24DF4B888EFCDECD71E508988BEDE697532096596D9CFABB3C1E169C7FDCE844B843C1E45A5CB94391B436AFFB85A16D5A28B92F2920CF0FBA175D4C201D37C60D680FD751EB5F984F9F364AA497A214A54C3AAC7E57B7BBEF2C63B84813199C2E3EAF056EBD120CAE879DBC444312B12C7960E072A17144DE9410E5AF81AD90953DB561A07F18A984BAC6C8B77E49ACB1546885B3D91CC497FA37ED86A1389115453B11330BB124513952ADEDCD90129C98C0BD7691D6705CE63B64905B32A9662F351CE8FB0B10D534B4DE61BAAEF0C91BFF847B0E03960B086167BD5B822AC183829CE46FFA1A8E506FA285C229CE660857A218C320FCFAD4263D8AED34DD832F183107C27B1D692156C1FB4781D56145F8D6669ACD414E4BC8204809BE14C943FECD2AEE7725A3BE9DF3ED92E87766A912CCD5155A0411C288B951B580197C674517EF74034CA760BBA846C07E4A729004F2B25D43F7D862C76327BFB0800F42717C956230A23B1CA261B07AABB5136D6B66BE2C5EF69F66BB547947B8654408434FDFDB66F2AB9BAD0B26DB328B7973E1938DA12C38E5B664F486962A62F8F072CCF9D8AF588D8C766A6026A5E601ED2B2C7BD0880B15FBCB648BD9CBC03A63F1E885C8643D7D890632C4592EF48BCC9A5D6E244F696138AF7F4C7C9858AAC48C31C314968B42B6C6131260193E088937EEB3A4EBB7E8A1392EF800C6C0A46715CEFF98D13D3A9BCF4A85D986A825E4E13EDCF4018332B3F2F4FDED73BBA156E99F3BB27F5DAC180891C9D6596AC54E4A06EF9F1339D593CC7F774772C037F27FAFDF03B8C2D3412CE1700CC9B3B8CF6071D4935E181E72D8BD664189524D3F6C1A7B52392070D8C57771F2BC7747092A005DEE3F767A4123DDFF5EECA6451E97B892D49741C9D017A0115D41E1E1D479F889F8624C1999A9473E765617B5076015C3E59BE337FF39BD867C57A9159A42866A4F9CC61FF9587ADBB9DAD1345F47364BBE88DB73ECF055F69AAAAEE7205D732F85A1C9F17A6CBC7E3AC23D722D7A5CC63A33CB9EE042AFA85F2BA6FB1F466F9B807B5E52E8B89129802E750B8AE5CA682FFA15D34C962BEC259DAA58671ED2ADBB704069A8434C3A2B0CFBA965A51D30B8DD00294D1793F6E7F802822154323991F2D59292B265E42FAC39DC8446EFC7422C8DDB4BF4457C47B9A2B79E7D84FC0BB9ECED06EAA0BC9B214EECAB2FC6B3896D0D05F748ACCA34784BB826332F51EFB7AFDD28A6BF4EEB13F019750A5D167D1133EEE3173B87E4D6F03B486F05E538AB59A4C12646EC1F3582AB2CF1F3D5D40ACC52E5E94F98C52CCBF54D01AA92F6442D90AB4318C415CAB030C5CD720073ED35D25C0EB27AF5332F94A0AF36F4328308C9F481E66EBAB2B241EFDBE2D6C90627340A765C528A03AEE9D4F4E6762412D729BB71986D069E41B5A2AD92F89C9DB68BAF9B5BA8E43CC41CDFB9230DFA1FA062FDF0F82A70023F9AD9F33BC81465068771A64B36B26C90EDBE70EC02D1803BF0731F158D09CD899112DAC1CDF951BF3E874508128FE62F46BF9E5D411529E0C5D6B7F40824872C92B6F44EBD7B1D1B9868F732D0D2BECB19C32AF90706D1E67E4D2965D295B8CD643E8FA838E950A02D18CF3E7 +Digest: 187CAED7EAAE27BB4182CE243C09E335B77C748FCA47933B561F9879DE5BCD876604FD605159E4EF31A64F0E4942147CC1CEBCAD19BE0FCFBE0FE59FC3047FFE +Test: Verify +# +Message: B146215DA4FC06768130B362DC87EEFB4723966373CA32A6DBC06C92F764307BDBEBEFA6564A0C8083E566CEF5BC81AEC6603CBD6C54D92E239B3323C1676232AEA0AB48BF7558CE907085970F2458DAB2525F8E51E87ACE828CF272D5F3451BFF23DB0C7393EAED8D4E8666EF6BEC8DDA7BB6B475DC72F75D3199CD77DC89ED11946D6939143CD9132FE75C803D91627EB42041210C05B1F133468CEB3CA777E93B956527B234A0AEE0D19227104032E4D8E52AFC0F040D6B04E3E227C36E1DD5D8DC1C2404A1381DD1BF9EF1AF4C7D3307A85D91E0A6FD169B220452F47E9F4C29D405BBC7A2BC0F6BE34AE034E9145C695160916DA4E647F3C9EB08543469EECCE699737340E5541FA70FC0AB58469310A0729DC024A0E33C9DDD752A5FA79D01ED9E8A77B501E073A97875ED8B221CDCEA4340ECF1554611B251AF5ADABCECF9028AC8336244F0423AE7276B192697623A342D669027E87471994C6A9437CBE53C39298CD0627DFB636A883CD87D324CC34747E4A32BD326D3B7968DDB91771FF9C9B67C6824672404F69DF50F2E8BA096AC4E9B1E7A224516F5A3BAED6CB417D4BB53A5BCD71720AE948BF6014A85A2E1B95FF6EFAAB1F74B870BB9D1D79270AF7558D73031916C499954E0429D9BB5B9436258A3CF112841C5EA11FFCF5A7F27AD7E8B5D70CF9F0373A4E172311F537D8A1920569C3D5FC4660B1CD1F618732AF040AAFEAE4E1A13F9D2E76ECA2B12670ACE015ADDD13643C9A096F794580D62AE9446AA7557B487F632BBCCF5BACC1EE9F98B23032779E90749DEDD56C8E3283AAA9DE676E9EC681E664BE17B479514BF4A178B3B6FAD726C3884CD0608682293E4B8F19C0F5C619AE6441071DAF28CBA69A87676560BCE901013851DD1D90A01C2BD246FABDB2A6C5264EC7444BAE0CD43DC4DAA9D65F58B8F096A2762654F5DC8ACE71F934578B3270932FFC6955516E44B14BB0A27F1C7543DD7BED6F025EB850835036AC6FEBB2D9F808D2F2921B2B1116B204A27B213C75B8E566F58B85AE0B5B64E3F543883C846D41AD6E7689C08EEB595DF56DEB20306E7454D953E5095ADA43D5FECD27339C955D094E760F85334A4F287C1F3828CE46E27759B9184263DE97128069802DCF3B33BF93BE1BBF69BBA39E612CC302904BAEA8D4DE3AFD4CB29C633D7308BFF4B2C6246D7ACBC953A7F5A77A1AB8755A1852025A3DC9F67F79F1BA2E74398288902358EBE544BC21A77C6BFB722A547644D0BC938DEA711CE14E4AACDDFA97401B52218125B8EC48B73AC64CBA6BF649317F950007B071A82064A526A292BB364E0AA2975B50A248940046282CEC0F0B90C81C39A1909F828B815E78693FDD7B4064D54D7E6C4CDA525A1E5530E6F8E7FEF74FFD65EDD3A1A8D04D13FC497447892155E1A81B7A3F4EF3F75A94D025FB91D36B6F936FFB62E30546CC038211B62E7B26B83B8D25017B2EA5BA05B085D8AFAB6E1C5427F3154769ECDAD716064CF3BCF1538164511A5AC9DED72594E4244990DC85BC54FC3F525741562EEEA23B1C28A4FFF4C065413D814A8485C4EBB26F44111C3B1950059E94DE9DCEE6B46E7C5F74FFC9B4EF974FC46DA03F586062FDA504279ECE66440773CCF83E3F8711AD48153373C3DEE2598435CB0A5447D7B53309B3D666E6DF50E1B325CACACD8B371B263B2011EBD869277C31F6FC9A63FFC9B3FA896795A297E62A54BA4A6597DD728B64538DE06145BB29A319877046DAAF5621A81955AA9C77BE57E8033DB7B3546A8902256AAE3F79B5B3E2982EEDB840432AE0538AC0B9C76830E5A5BC33EA5E01A98522DA06BAEF2F253FEAF176EFA680066E770FD15C63950BAB21E67F2F8F6BC23596A4789DE3320C1683352C1896E4CA0125ABA7B852BEF2B79BC341A +Digest: B6AA402B5EB56C232310E64F2457F4592A53A9C501588C53630B85ABA2C546F57091E5F8C80F6F54854AD6F55D32D2E8F7F4920940D536897879CB73FB87FE75 +Test: Verify +# +Message: EE1BD4D4057FCA9B048E3B90085A34A95A3FC887075D0FF112B37CEE086BED08346E169FE6BACE1F98482A0128B2DCD4EF610B0A8578A273A6CB00EB7D2B02E13647504529366A95BD141B294DDAE53358436CF5F526B39FB677D3E815D345A516B0602E2ECB541C40B35B5D3764EE267129F55D2F3A36C63FA2C1C6AC4730C9A905C5F0832AB19AFB2A2B8D78E58040EEE09BBE781C1BAD75DCB2E4FD733B3021D5EA7BE614A021466D2E402AAC1CB12A569E2973CE317DB4A7E90A7293A57C503202D5B72DFDD0F349D5D0E36A7E4A1F08998A277818E21833E2158060A25CA4611FF07D2EDE7618F921BAD8F0EA8F67925FB43443374C8574FDEC3FB1598A8E8C694E2F1A0B31E8482E7A8F6250D07158B9DFD34D85D2DF8BAED1BD21CE78CD6530E1DF77808D5DCC1019286B5D847E185D3A3C935B34AB1FEC486DEC50845F6C8C8ADE945DCA13B179B11FB94F32C014791FDDE9AE3BFBC261A513D638243BFC8D9C5508D61E3BF7078929AAC25F4A32FEF7AD09A876930A54E8E40E450CB900606696614C438BCAC23C1E375EFF7B3A915D1CDCB11422B36DF62D0468B429E56B51EDA7A2AC577A689F4DD0E44C85C896B9F0A9BC72B8F04630E2CF0BD8DB42C66B1E80A7643DCEABCFCB07090DAE426B0CF580BC93935D537E22DBBD8942D14BF76E80912A5EF935025972F2D13583134E04780E0609AE938A8691DA9084FF4FEFB8D5AE0531BF21BDC89A6F4B7B4F329154F205D0320C2AA41B4A8EABFEEE387846E60A8C7F8C8260780E0815A6ABD34E59470475C69E5574F8160DE2AC81948F8267F1BB1C574938ADC511DAC5EA8C78E46B5F3C8E6256AEDC23356B1B5144DBE67C5F695012E6B407FC159B9D5EF671A9A6B62A15CB97525BF9D49A2FE2A841620243197811064C8121DC862AB0F0662FFC208166703DE482373AD0AA925169C030D6EEB8ABD7B6C54DB125D7096D4605917F8E74AFCF64F39A9A28F1EA686DCF8416CBE882B818BEB73396CA9515218D65D017E1E002D1F5F42C6F4B9E54C457282F9525CF2E4AC40571B849BF1C0EFD089F5811F2EC8D9E5DE998F6EBA556B09CB4C9A76C0F6FF8177015450E6B83B42FB1550E24DCCC665CBA9AFD39550239BFC2AD814566CF7D42B04AA736CE3D44CE26EF6DC98C71B7681F5DBC2540FD0975E22AA75CFC5985F10D92ED9DC6B457005200A449236252AB42C2A952B689516408FD4E864741C75C7C2C72E6E02449FBCF9958907BE325ED64AB7E3CB528ACB29C8A903A71AF1CEDF2E9A712B8D6FA6AF27A342AFEF82419A3423BC6DAEBDBCE0DE4283B59445795F3A9D11686DADEDA787E1FC02C723374FF8483DFFB9E793C25EBAD91329C159701B02DAC77A7D8B4791C66D3A8E9B0BDB7EE7FC694FDC5C3884D19D507A0ADFB835661BDA031E381CD061CD5A8345879092123166D574E7EBAB5B78F1911048B562D693991DA4C1718D6D80DCACD2B6ED645C32B994B2697A04EE29F92E9088AF656F6D2B42948D5268BE8A85FC5D109F3F0F96FF6EE596CFFAD470C8252DF0BC09321BAF04D6E0EC68E857487B353D29F7E3271B2D80B912FF6B7FF3ABF8AF6FB3B7C30F4A3E92130CDB49CEF43D88DD32133DE265ECEF72E04D4B3C560BA6021F5AD2179169522A9BC7D81808FD936331044CEB72AC82B9F5672AD42C2A9CCBFF76A092A11762FD1EB9D96A62138B6A2BEAC0D61E5949EEC2BDFC0220120C7110FA284D6B7B59AF379CEA81378CF626E56C0535954F296EC61AC6E01968881E67D72104A447705C2F3FF5A9A71F892AE671DA00F8110A19D56F1F96824D0B9F9E9B4A14F152CE32E364E6FBCDB0A93AA407FCB1D9E29639621F68F3FCE19DEB572B2D7437F3CC9FAA8CE753146535A881598A3EFBBCEA1E4E1DE9DB18FC33C04AA9F77F2B3654BA59AC9E83958657EEAF8B9BAB1E95C26E6F1D260C99A69F739C1B01F1E8FCD78BC696C147382138B +Digest: 1FF9E6523A7A97F9DEB7DB27CEC6FFCAC7932110C6C5BF46C0CE883E125A0551443EA6117987859879C5A090E775C6FF793A6F24D53CE173428AA33948BA0389 +Test: Verify +# +Message: E5F293A87CC8EC34BFD1F23D0346D9169495E046C6A7251C5C41CF46E0D92D9EE11DD7230C52F2936B40890BD040C12132B519F74D94711714CB515D35729D59FC3403BB132C90FB90B9B997D829BCE5E12DE91B6AC6E6013D4F02F8340359F4BA7D6192BF3AA48ED523D247EA29AFF246D17C6195162C0349853E4FCFA35688172F366B03DDD02B65072D165890AE8F983658AB67C182A34BB03B8D3B850AC16BB3D1E7756AB4EFBCCDC1F3A2A9DC5C5842F3B6D1CBE363C2C9884AC7C6093A27BB1153DB1102B5C09013FB11ED4FAE0D58AB65F705C390F9A3EDE82D28C65DCD26852DDBB435162C41D96BA9D853E1B4AB9EBDDEBF63AC594EC50327509400BFDEE94A0DF26C1BA9147166A39E13E6755BBD2AE40DA19FCDC779E81642B2813DD742AE4BD295258015D4078C25F05E1547EF4A849F3C46691009443830C0B987317AFD5FA24862ED589FF01D17DF25835DE5DE62D7207509B5AE13DFE5A8EF08AEC9B3456B8D9AA36F839B80BB7D4884F66D2B7DAA1350DCCA9671BF589DED9B5680820DD1B6DC6B08C9F5DCB754243BC454A454E8748B255240668520E73C341E3E039F793BEAB4301164E37DF5653CAFBD6E9D7670AC1F593987951F4B72230E6388C06A95C15B7C375FFC4BED04E9E56FA50D6D112E82101B713C02D01C106C2645FA4020CC9D9F52EE5F66891EEBEFB6D125BD0CEBEE9C4F6D2716ACD66873ED3CF60B2953DEA54559DD6472200119ECC2A799536E56D3EE8396508EB9661F2A7F5975D1382FE083B128FC648A51BFC72181D19B3126B9E72607EA8A2E5130DBF1720525B860445CC463EC13D40CFF805C83D3504B3F6612E92ECD5DCCE487E5FDC6E9A995B2869396F32C68BE32E71EF710B6003159A1657EF2D62E8CE8415816F921DA33577DCFD9F5C28D6E17A897422FE0692E5E272BD8585D0991D2DC50C0ABD9329A02D9940B444725845A8CF2785A7B03D5CE955692E8F904C1D05A0F871D99C2D65F08E7E7B5E4788BBB3B99498889468F19106AC9AE21961A44BF3F21F1D9F3955ED63DF73F6D32BD6E6EDDBE3013A421A55E67100271006B29AF7B41F823E5FEA12D2FEEA6FBAF57AE657125E4014A7D71B871608EEE1D7B8EA27415F9A41CA935682A8967583412D0CA011798C4B3C4C51751C504745AB53BAEC7DAD335452E44F61E9AC7E13D943A6B59BE11523A62AD633406A66E2BE6C20BE9B75F488727D8EC9D52808330BA71546870B5556E487114557447CA5F1D6F5D1ED2EC027CA2218B33C2A604C689D6EE78FDB853204F46EE4044ED2497BFCA363016C918452C215BBC6AC7AF07A482AA43F4F806754F515FE48EDB0B47CF145CF204AFE5FF6984E51A6BDF178ACC50CD573FF78C0966EF2D0897D79155B7F845E57BCA452C005231542B5BA10EBCDD528891048A8171CF715EC7618EF8831E0FBC35A1E3C9A63EB294B2B4203746EA73315BE75AFD0237A86059A20CD663922A932D6F41A19A545C57339306406E843D481FADECE1B8FB025E19DF7D3F16BBFFB7C86BCB6F2305F64194380A97552D6DE7C952BA9021E4988143DE7795E7740462305658D098EE3D2AA3BD9E2E5383729565BA17375370C5B1EBE503B6CE23CEBB4BA93C2A9EF607A5A7A229305B1E90A6AF703E0A8A61F6A55E20B52C44BA690FADD863350AB90A89EA36A188FE17C58CB88A00DDE36573EBAF24ADAB9DBC2E8CA2EFDB87C625CE211FF0CC5E448BE72D07450F0F27C3F8DC3089D2F404F7FA47751A9CE8CBD16003AF2964AB755F8F80016BCD34A8678030F5A5481D1CB35D701EE26E172FCC51F1253C81942EFC25731BDFDAF57968A210F37E1280D62459EBFC48811DEA030E5250B19D1553034DBFAB7E01DA4BFDEF2EB20B1E6F002ACE85DEF578A8E099992D321F3B67D66A6732024E9658C09FDFB158DF52F87089F09CB8B61BEFAC52EFE3CB689DDA3CB7BBA76825F66B2AD79A000F6161E5FD58C43298F7649FFF02AFA3B32FEB28657223EF4A1D11C72D7D3A92764180B4CEB10DDB0F32 +Digest: 4192A229E04CC347431D4AAD43066170FF5C891ECF30D40D15C0080164B5F0313C55FC793F30330831FB37996E8ECE6E6A6E3E2070B175F17D1A50CEA1265F4B +Test: Verify +# +Message: 2F2573FF8BDCA52668CCAAB9E7D81E770DDA2EC2C966649F99D79A945DC4272862586B30B91166770AF183028F655B993A03449C5F03D4388B15C96239D97EC9FA9AFF9E386F4975C590037E7BA0D8D99809F19CC714BC4623E523B6B4F4985E73C711279517940D23CF9E9E3A24950E943EC20F4E8EFF716D1B2D8B05DEC1A3EE7D22A3242C1A0760CA307D1F1ABAA42ED87831486A41D56D501C81AA7F1365268D0C716A34B7479C34643464C952BCD2FA5CA449DB78BFB3DD1663D6BF25BD64F6DFA771A2E364A99DD27861B4D50F42D422239E3D84806B6D992E86DD4CCCBD6B569F36DF96FFBFE1B1BFFAC2D50341519EC9255B36D92B13B7B0FA3E1BFCEDE457569B7B384359DCE5167C30831EF7E54E34945805AC588C5689E049C155E7CF97353195202223C8DB0AB71391DCFDBDC3C87E1BEE8515460FD31509829A1662CA955F54376969D0C99782809BE153DBFFA090AA55D37E612A8C824A853E040C822928414E254D285486B5D75F0DDF60CA58D9DDE64188496EF08DCC408829DD209D8B2570C9CC0709321666C4E1EE677CDAB61641D8CFB9A6B94EBE3395EB25227A9622B0D70D06D309ADDD01B491C790CB3E031EF493E20B50ED6D4B14BC28AC02CE45DAC4AB229E7B0F207C48CBCBF6E5CB8D1E0F79BE6935558F8DECD514141AD68EF6C128479936E23B2DA8AD42CF608962F7C1E888DEF68B25606ABEC4680916E294B4B8903EA917A97EFD2AB99DAA23847983FCB03561EBDFA7E8AE5E5D4AC37BAD74F70085C74A5B69FC153E1269BB7500DFD8BCF273373E5EA0F30EF821C1E4D20ABEFC6D70C6A855883500BA9AF0A877A41DE8860EBD4C9C6EE5269B7433754C4DBF54FDFF1849E9F96DCFCFCCA2DCAF5E31C9A872EDC45889D37267E03EFF3FF2332A00B1C69330E972F39D976C3A980F0929C8725A32196ED9127446EBE15E9A3CA0BFF7211FE33D7669F1A8A10C520D96CF2F873A2370129A87C963D0A49003AB7BA1BD5E2E302C76C5B5C8FF21AFCCEB524E5350D6AF831018D5744DF0F6DAF8E33CE8E3A8366E44D6407CFEBE50D1541CD4E4B1B5CA2EB9A7DB61021E05BE9F7A8A7C220CC6A10AFCE2A0C4B63830EB4BCFDD693073795D3327A1379161EFBB29854A92F551143114A8025C16A3FCFB5CCD7A89A31AA11C96E5C90BD6930F5986E4C820DCA9F61CCE7D0EFDDCE1BA9F0BC00707703C5891B27C5184A2C5F63F385A5B884806FC48A14D515397DBD5806B3C197684353BD1599FDD309F08693216F46A7936C3E7519EC7DEFC57E435B1B166A845911AD8744191277C76BA56E770157E84FE25175B46DFC3A13D53AB763EFF9D26EEC7C04653FAA40CB5182C85116E55CA91B08FD14DB60EE7146FF3A3EA5DC19D061775A1FD885DFD457027758A1F577DE852B0EC1D6EC09E83F36CCEE972F5FC0946FB02F1567986E1CF388AE3FAE2AED1E3A7E1F6765BB428583B2EAB34185A49D1C3E0920F3D16D69167EB2CD5F5CD90108E4F18462B2915551977430E4EEDE7FB842202B39AE65A3E6BD0910AB91F13A11A58F1017AE4466952C82D26D77D7B367B2BB87BE0635F2C28275AFAED6B02412F1593E24D04B142F13E7842882B60FDAD1C43C8191AABD3CCDA714B3384B1FE0D31C31E9BA634EA90369B2C4EBD1AFF6336F8C61B8AEE14D613CCA4CEB2B99D29889A7E69008143B837FF5CBC08120CE3CF7F85FB952B0C7DC91D99054CB36F610A72C353A6B23D3B3961CDCB2C2C2C62EB0E5F712212F577CDEFDE0A76222F682F80191DE8D86B304777ABF4BBAC4D33C8BEACFEF06BB08297EE53416EC8AB23080DAE22FE910AEE5218B21AF32781E565E8860A9A01190AB873F5C5D5D39B4CD94AAB98B1F79DA4520231C48127FB4FFF20F880DF22552BAF2C6132DB39CD6F33A4B9B295BD18BB631F4B95388C8E9F2EEAA386005E17DFDAE3AD836CE7BA8E951DF6C13A7CB792D71EF6133D1B13029CCC132C8D040D094864351388FD0DAA875C62B3BB0DC6C6CECAEEC130F58737F6885A1267D4AF9307300E08E9D487 +Digest: 87FF995B7073F1D40907B31B0B6FFDD1B7B30AC82133AFD49AEA8DCE234F11759170D7EFB0BAE41F7B14339064D9A29270B1C2E62E12DCDBB70307BA174B0DF9 +Test: Verify +# +Message: 419F67D99BC1D372A587BB59F2820B3EC9E32930232914C27E06351027AF46E3391ED6209726B775CB4B5EBD7CA515A60EBFD2A9688FCC014E507B2FD83DB0E0776B459CA8EF1CF46C023D3BB3BA0BF805AD7629802C2E1619828CE1A27425893C21BE9353606882B3D8C58290640C998F2C579089B7476B9C1FC45779388951A9B80599F9300FE456DFE32195D0DBD9D6D9787137C58B6FD9130397EB7BB230E532F53D2A01BA9671F7F661FCA52586986DB26D37A5257F32DD80C1F1702A7537E10E7A6343B8A1AA4AEF7D04615E6365D362707B738B38A27317D37B256AA528B802C192659D46AE59B7D736B6B28574B6665F680C43F78EECDEB52C164F52E2099E5D4584575B3BC503CBED44ADF575639B5CFE7DDE3D66D92E2B2BC064C73725FED9FECD5E746D1198845668417FAD069812E5005B63886689FB47791267AEDDC6B5371FC9A6C8BB810DBC53787444A5F89193035AC264F5DA9332CDA8BA5D4094E5E5A5E3987892D27821DB950FBF6A2283B54F26F90B1855CBCA8E5F8D706293391F5A7E99735D814E5EA8AF17FFE885B30D621987EC71DB3A004AAD063E94568C716EA5148DE8D61955BB01068D4162A764B80023AC631D02BC297182D778884E98129FDC7FE2D9C764D42D17E3198795C4F78B36C2E249B020DD077EB6525895F775D1E203B3CFAFFBB19571A9F46923C9C6FF91F1FA45C05E5637B884E4C622DED7B19E831050AA0AE93393940976247ED6C5EC50AFF6410ED8DC26BF0EA678683C3CC54BF0B7FDF969963AB713BBACBDE669696FD8776989F0ED45C921789D9852AF00690D6B1927A089E6D6EB2E865E27F74658133AC4AB7CF8253815ACC55C9E4A30355988EFB3D7A51D9634A88BDA7D4DFAC2CDE67101976DDAF5C3BDE042E8A15496D14146D4E7E6A581DB4D0BE237705EE3658165ECBE0C637744FBA78E57E62388A196BC508761BA268244E7CB60820BC3888944E262DFC154385FE096F5025D7094D0BA323A5469FF3B097F42B5743A6B855FF77EDCE020F6AA0011D5ECAAAEC361FB78A099DA5550BD4035E6FD8B10505DD7314B8A86B68D14907849A91336D62BC47BC7100D56112B8D1C409E2A6D7499D445965622FAF06940754B433F56C00D286272020FD268E2860F60B14E58F5CEADCF4BA32C741FA4237002D4F966C27922C251EA18C54F88E7D87156690198DE743C09C0222A99547C2BD8ED8F284F624E2B7065A4D2922F64634242481713C23AC87A8DDC409D56D74BA805C0A889D110E7A1E3CA915B428958BED4E65B3D6C7FE687B42FC1F0ADCBAFF998F91193A4789672D0B550DF741466E67ED44C312FB1CBDEA34BF231D2B1AD4ACEE8BCC0CE27A399E0F4CCD18CB7C4EB9EB8E5BB162E9C064E69FA687E0534FB25F11B2955F61FF5AC1DABCE53850FC75EA8B94B78A4CDB23BB896B97EB225A763D0F93090EF8482AEA369BA91628D388958CF02B506A51BD90C9B322D16D7DBE35495DAE494733742AED49E24786C89C350A68268FF742AE394CB965C53BC1ABA6F19A3B1DD84C9977C74F20E5A88A6B6D016C45ACBFF0B80CB8F6028973718AEECB47AB336FD0F8CBC68EA7D30B817ACDED35FAB851DA1A159ED99826D66B71424632A431755E473EB4E95EBBC4A7126CCD3F53BEEED9CF35AD13118A1EE9262FA249D8607BEDC52FA6D54A2428B6A9A5DCCB93280A0880321A738499679279077C08C9CBBBA7EE25711B93C9A09D815CA89F5B31C6E23419D1B5C07B17BBFE9F39E10958605BD299006FBB2C0BF20F9D6274CDD78F4BD28CAC53C7DF54964ED2202F4563E7C4AB6ACD311BD348DC6FA8B5B981AB4A9F19E49E3A8786C3760F35C8FC8A9C29B7562D8FA54BE19B9BE1C65F73893EA445CE6C9963A91CDB0A25A82F69396A959A43C56205475C798BFB4CE5A40BC8DFE0DB977C2A181FEEC1A6E4E643D5CD8E964181FEB4C1EC36B55731BAF8B1B9717512ED18AD8612ABDFC601075DEDA8432569A40E162FA4F577789DCDE78BA289766A0E85BB32E6A79486AFDDD9E89B6D53A4726 +Digest: 9ED613606473FA14F0406CDEBB7C19682224960B028F01D9AC33C40DDAADF11811F5CFF71828031F099432528157C9C08F14A07800542384F6CC1254775B2C6C +Test: Verify +# +Message: 29B830694DC92154A9D5580939649ED1EC34D1A9284E629496511A5967B4A1FDC36B64A82AD7E23A3DA66DA913E4A1168C72243F6B99AB392B79CCE88D7BC0F8C75B9B2A51CF3D0924169DB75C12588E0D9CB0B9BB383C63BE7E0651C56F2FAAA81DA1285E9A5E7EFC7515255ACD6754962C4ABEC63F58DDCD80C9169C1609C479B7A67DAEBCDC7ACED8FCB78FF73EC60445B8937572AA7A7D01CBC06040CE846E482574F720D68E24C38B1F1916AD02E41DDE7594EFDEB185A669720A89BCB39143B9420A597F157FCBE2F7ADA04505CD529DDBBBB779C5D4E0E0CADF02AD2299D5F182443C27FC6D3BC45EF589F7F3C5A795D8441B79030E283B8D1231E597D97D369B991BA2CAABC12185E6454B26F63142404AE886B05A3F76FDFAF31EC564DAC76C25FE0020E7615815DD45CBBE2A0514FE2E8219940F9CCB18071433F116B0A86073E4EBCA118C96D811BF28F5230F7B8F920F5FE5DA49329535544AF8172010002B2A0277EFBE67059BD36353C0FE75042EB244382D689F9327748AE1899A14C6115A3CCC9F80F68650E404D3553858ECFCAACE1751BB0F809A6D757B0D3AFD1C39DAAA0B2D6F8E79A766787706FEE2DF1E0E2E5DF67FCFA024D9B678BD8BB514D78A57476B3DC368DB0C7E571D3D3D818E203F2D0A045CECA71A80F28BC4F75FAAAE510CBC7BC31A845F7C74B4B4F9C9C4E98151AB8D2C450A42F8F4DE4A6A88C47AF867E2163417214BF98BEDD6D35C49B1CB6653F8F741E6DA31E41D4131AF9F421984E1B0F7FBC5FB991FE76D64554DA8493A1F27329E11430F86B3FE4984EE779457DFDF9C9859D23C44D4ABA6BF75F0195D2A76492D024F768C1F6C4C6DE99F06EE4BE55B866FF877DD842DB3D348AEFF6C4BD7271C96533E7354FE8959284BC3840131246FF6563757E86961CDB9FF7BC804353A4FDD35626081F346D33CBACAE1391A56A3BB02CE1EF0B9DDAA6F8CDBF3958C5CB902A1761CEEFFADF71B0953798C8394A16DE79E5E530E61855A1724603D784B2A6FC8E76F6A8AD3870C6CA3BF1E858DBC1279C1C33BD4308843AE1365EB533A3D60DF0425A0F2358D6B6CDEEA91FCF2F7AF6DEC7C785EC6202377F49FE2D59523CF4319E6E2EEE8F5EE14E462DAB48F975117527D40AB33C71DEBA345961ACA937EC03260A46DC23A25B6748753F3BBC929A0A06352BE245BA3B49145749839BE80FEFD698B23BE586FCB090F680FEF010A57A92A69A3C2B3433F9EA1D5D8F70EBFBA3F09065430CC68BEE1FE19915A01C2F5CC30C7D77366E34A9B6A86E376C9CA1BCAEECB03D1B7FD6068D64A473B12465943789285EAEE6AFCCAE7D32B1E6BCCC0F6D843F82F88B0BF4C78302A3DD5F68977B0BFE84976CD765BF73FEBFC32B9B0C1E7D58779CA243094DF73670561D0BFAA4EDFFDFACDA40204A8AE4A96858944EC547E1EF81B003E0E03494D18F8C05911A3031CE1F3BBD43AF5BD3CAD6C2CA00712498363328A2AADBE40A062369ED7024490A775CDEBCC946BF283D8C2E1D53EACDE08B665053AC363272CBA84EA9AE3C0ADBFDA12427CA1D01CAE51B04B590856EAD0BB075571E893419B581B323165885FFC81C4B2776B99D7941D4236E232B6F2FF3A20DDC99FA5F6FD7CBB900903E778C5C0E01F563025231433F32EB17CA74C33F3C06E3CEA2154BA132A2E62D0CF81743B3A857D1D60AFF7F297C937B1DA84D35B1431C23C0147F1D271E6FAA5D3348A8EB18A73F4A80C4247C1299E432D4E1AEDF11E18E2FE2A71E0F151E0ADD4CFDC0B0A95D1839FFCB0CC01C1029122BAE35F2DC81B3C7D75F8ABB993F1A76A59435B8F7E28037724B3477CE1F55F3679B2AC4DFABC34B2EBBC8B8EE11462BB6C539874571C4DC3CDA0BED112A24A8F4D0DC0C24A29EBA0A70D0ADE28223E6C8E296796E6790ACAD7F372C2283ECA5C46603F56D93AAF0C1C6B168DA426B51FB9F51742F0015682630DA108A17ACCCB2CA484222D7C3FBDFB926425E63D9BD5AC999CBF7E9EF359491AD8976EFB5DD9380AEA1EB46A6840AEAB8E02C62F43A0D675F927C67BE22D46A7A47F66385D5586FB164B6D1A7BEF209598D1CDA3B9D2 +Digest: AB017077FA7C3133336B556CD20CF958F8A565B831A1EFC7D019F1A9AB9354CFF2B0456B3536B01BE71FCBD7A1B860FC983240A02626E82E3193747372B6DB97 +Test: Verify +# +Message: 79FCC5D7CF612F451640F7B9F44409B85F120F639BB63FF529E6D76D7C608965051B26E807DFF665FAD0E8C3D20231279BA2E23CE94BEEEE9EA8667F407261DA4189FEE9E30A67B7FB60435A20C5C4A521FC1A8612D256A716222225422AC4E3CE0A252871D6BCB4D6141DD77A5E403BA446BC5810FD4ED7DB7ECBEF4451A91D55890C7D881F968F3503F748C064B7197F12B853CB0A21F637D16C6AAB82E24F4D7D53B448ED94AF0B42B10BC88CBC5C9BF677509144AD06C0F2BB94CF06C285ED650248E62D53EC49F25290A83557A52D9E3E2673686660A2B5F3BF2C75C79043CD28F3CF5D116F5D103ABC4D530266EC5FF0FB60916AFB3FFC005B5A96333D78661214FB95B691218F72BC1615E3FCF8DB5DB83FB995CD370B5C6476C0063340645875B720071385367EF3483166FBCC8FE0998964B014BE29161F36A1160CA18B068771EEF15B9045F6498F7DD1C5CD2F912E87927C89FD98571604CE8535A11C6E935361D4C11209A1902E726225C0294922FA6F3D7B44659BF31D16FB93C03998DAC776A56B2D75750C084940BDCA224F9124A9D229653E973142971A0CB461FB92ADF810AE7051B8A036BAF8E15D23A8FF7E5437CA95B7B4DD33FDF8DA02326ED2A18810E887D6633EB013E10922B42EA9352D8C44F135F88CA8922636CF45A7C1DC3201F3876EEF13894569B54448104036D65465C9361B4AC2F25C2B324E52E3AFD619C5048F5F19ECE7AA1AA6D9FCB2EA4A30B937C9EDC1FFCA40712AD3929012D280DA2B42DE2E989C0943211200E996CAD893F99C94E397FD07AD7680EA838E6F978A899AB01F8EEF2A581806814A5106C50C4384E1B69204DBC333A759A7AC0907CB7A34903FB22ADC90E4516A978AC2AD7B24A2B7739A3B2126519E7A6FD0216B4CEB82799E44CBE4B7A87E460CB774CEE846D658CB0245605D370DD0EB086ED7F6176AC72467B59B0A18DE22BB5093E4F919E603E1376F436E35DAB0E882515DA0CE8699E7BFB753971E0605F2870A455973F5D556661572CC8E5F12336AA16A481A038BC00B9E5CC604BBA488B67EEC7B4CA79BF35AA453C08E3D453E7804B916785B42238B47D4800158E7F1E19F6B79381587DCBF8E84A6F9F263036B5225B5078F9D50DEB984A09421EB2915BF3DD5F5F3AAE7AF51675FB6CC14259B135DE0DF458C14DFBC88E7765686564BD03C3AA41A43386A3EE45D30571150B655C0349419300EBBBA53355DDBEE1DE7416041DB814745706B1D5B9DCD80E6CD2D49D920479DE3B75E189DA6E12E1239B8D5821F0F4348EB977B39784CA8335C2AFF0319859ABAD16128A7C8453B0146C4A1FBDD3A2F4A3BE8D3217C65A4F7B8017E82B6C2F2156E46083C2CC2A143277F795EE3A68324350F7F51279C36935FE39634413C756626CF11B5B52DA0F8C8DF2D521073A020BE1D5A28B7DF46B27EC022C3BC8D56A87F93E11AB296F6EC9C7F79B4195C8C2638F515DBD17230116BF293005D501D59DDF613559EFE282A1F6A5D6B982F23344506A15593B7238E6176E1E7B83D84774AE14A0B80DA11822BC239C01DF61AB56F94F8156A0388FC422B97998149F97FCE0DCBF981DAFD8F38021B7EF59DE8150C266C6AB75B9BBFF770868776FE40C0043753392039AA74A0E73EDB28586722B195D0BE1D941552D89580F7A72D623FABBB8BC237146BF68CD7C5D3178F1CA14CFE704C10EA284336F53A47C8907C1AF435992CADE46841CE9B9AB12F54F14A0307B0A42E013D35F1329A96BDC6EA8D1CD3F80CA4452FAE1E166419707F699A7B58BF97618EA948445F39101798B81F17F9105851BB24CB183E0C5710DDB6A00327A354DF7A44E40B2C27B80B51AE06E1C098BDE95E9E79AEE4743A96792F9EAAEFE07F7FF072397BFAFAE12730AAC78EF9344027F3114BD5A5178B21679F84FA9F68DF4521D83C16F8DC4AD811B08E3B28B5009FB26549EA3C07B17DEB67E5441AB573AFC376803D63B1158145E1153D538A4F606F5904BDA58D9A4130F6B692295CCC32DDCE25169D1B15C46CCA89A57892C4F633E47F837DF9E44C7A84C85F3022FC63DD0C7834BD7A630F65DA147B6B0829630451236043B6771F12A74836 +Digest: 8016A07A05C2D45B45ACC1A3875266D8EA39CD5C8D44C55DFA820C215A0677CC2A04582D1C2BC4F41D10E827C4A8FFCF67046403AAA5C117F9A2ADDD6D90170C +Test: Verify +# +Message: 9EF88639FBE5FCC61F3827703EDEA2CEB2B9C4EAE560246D6184B2A259499278801DDEA976128AD14E0C90B287B3177872D43380F7937A2D056F3304A01ADFB04C0A7EA4BE17CEC0A58B2AD42804BA456BC5C839CD195F8CC2E556D19A7416BABD46FE22F02AEBE25CBD910623C8446D99EA84A3B15D35C760C7A1C1BCECA0C716FD6D8F99B328613E2ED28C554025ACA3A08B86D90515230D8B680CC66F53BE91CE8E47E163E68F707D437D5EB174DE8CA08297746DCB04D059867C2E4A8DAA3CE2909708B0F2929DCDD0CAFF29F0BD7839DB21DAB52FCB191093D14DF7F9B00E8B15B87A038FEF7369994358C732BB7066DE71966FBF494338AB1501714FAE37F8DB2459A7B979AC8F6517C24D5D2DAD09A5908812686EFF0C6A9C724C5322F4265DB27996E746ADE99F17AC98310DFDAECFBFEC0FB6297BC5EBCC9BD15B332E401F1A078C24F97DC94071A15FC7D84787A3BBE491EA64B3FB15B572E867FB2CBEA696BDEDDF38274788E8E0E921393AF44F9E8ABA83E747702AC37DFEAD1812A4276DD657210D9E19F6F3426A870ADD753FF4A5E04387BB76F179B6D26CBBF3C702F5204EB206A943E936BDCDFC6C9551703AA203173B9E036F41FFB3A6D0E5C31B3B66EC8E466932661B51EC6EE4278A601B424F947C31F809E40D835A05295C9FDE2C8AEF20D2A8B46650403A3452CE643B7E186AF862071ABC422CD6D006BE52BE165E1DD3F6BD6CCBBB52109BF974205D5371C6EAF7046F9441E0D878B08FF8FE1E77E08EABF342BD735854E0EB806678DC9A6CCEE19276E8458CC69CB5FAA53834790B31A22C5AC0E54E127D26C0345907745732F0FAB805C0BC9F11BBDA4C223ED05797E45B2CF8E9B249500CD2F2B3ADE19BCFABDF543AB68CA9C70DF2D92057AC6CF5DE13A60EEA9716F6DF7FD9FDC3C6D839047B2B933A4AED831B19DC1769000FD9F310C3159F6677176234E844E454528FBB2F651B46CA7F8017BC43D9D0AF1EC7DE1D41D068CDB3E246E61981986AFEC2679093272F2D6F808641B38CA45DEAC6A3D18DF92D8F5DF5229F03AC80521F292355707E79C3CD5B44BE5F323CD938DCE76EAD2E575DD34A0CFFDC3776B8C7957A85B6DB1498E7CD5288E8E462C65C83FD4F59C1B52927DA649E9327CD8F01B7F5E92BC6B98B36B35ED37E91B95A798C46F699BE32F369809C08E217C618ADDE3D46EDE4C6499FB82AF1F15E3FAE3A1D1057EBD5B375FE2508CC8F7C7F1EC0589A266A697FE060644F00FD1FCA01D3AF6E0050F4A545C1BB98B4914FB2BD2AB50A5FD522D5D8242746E7C77B48BACC76BCDCDE6B60F63C3BE653CF24ECFC167A4A98AC4F54D7D6C581780CA672AB299CC31162523FCA2E6A83657F65ED1DEB430244707FB21FF83B4C8AB2E0063E93551DC34F58EA13C2B99652A3CEF79287EDEB8494E98230AA9E6AC48864518D096F0DE4B9FAB16B92250C0D56A95C6CA5B1AB62C5A011CA7656EE7C4FC1E431320A4E0761CB94205E6230DD3E4B46C104F01974C4E3ACB1167CFFEB5716D484B61E77BF4B82EC3C20E7A40AE47EE742D771260C30079F997AE70094C75695B552FA260DC78970DBDA20CEBE270B9A93CBDEAE1DB36611EBCB259E5BA872CF3830181CB290C9CCC8D887C4C8960C597530703134FBA26737E1BCB9B8D1E1F7CCE36C1C6358562046DDF09C9E74A98859CF47C655B2A1ADF7A476B5CB96081ACD83BC25C59AF93C7AE98465F78E3E7A0379C2528F76C2C40B4647342C25F8E11D465A91B25F5B25F02F8033B125712C8A477BF1B36BB0E89711F95976CEB509F9FC491263D63728B17D2EB69213E0582192D18943564175AE9292AE13E240CB0418D15E0ADDB81DC8A871FDEBF0D947E49FA87E0B27FB81ADFFDE64E00CB1674C2B467733016AF1B7A7084DED1568016B9BA5299C577C0D43CB3C6185FB963BBAB99A0E8F32123905D82548BB82E67B3007C961CA26DFAF651D8FD9214A8A2B7905B16F8C2F23BC1A35702C241CE99D9729B462816725E62BC8044F0C7B72BAA3065AB0DB0E3F29B72F0AFB333F17CC7D23172F0B0CE67976F19B8A6056564E93392EED7EE0B23A36E7D9D4C8C7BE88D98B009A93FC1DBD680AE441A0440DB8AEB2875FB3721ED373D79CBFE19993B6ECB115302B2C173EBD1F57488BE1EA585718446D846FED88D2A4FC58 +Digest: 292DC610E12C97CD5D6123177C7C043DC1776D979647D4136D1B3CB53ED0C361BA2A28A5B44B74099B4980CA47DEA25B9411F691DE69BEA044D1CF786680B169 +Test: Verify +# +Message: BB15A079D81E5D5F5B21A4B1B309F0C6A8A644077B2AC9F4BB4888147DF9BA82CD2D929F7D72BF800EBD107F27D43E3BC3A47997D90EA4EE3D6304A0D74ECD92D9B68BE4C994065E29B863040E108928D6856CD692DBB5471070A49FD636BF8642662C06D85514DCA6A0CA77AFCD96817BB7D76F7D44F3C645AD5A5AF7AF661E92607599A6D2809FACAC697990436D3FC470D257F60ADE7FD4529FD7894E3A3F5420720418E78A545E372C4AA89AE38EDEF2CF865EC96FF63DF781AE156C5CF110610089634013311648DF46D7FA0E544B59AED52825745A095849870093B8A8545CE979A781E761F6B0D274602E514FF0C106BFDA25FAFD3963D4B241B060A35FDCCA953FD4308ADF2F81E62760E5C54C5672E3BC49D6E07DFDBD467CD47475B31030FBC6FC64E4414377B4DF06FB5505A8CDB2BB7865F84F89B63ADCD5926F68EC9BDF25BE3826C889280F0E9122F24807E664A90E2C37523A55F158EFBEF4196C38BAC9E5B98BD48FFFBCD9CF22298DC579A0B01350A4314C5A144836319C73677C2A3ED13C3A0F50122808C6489EE366B437FD4A22B63C567C1F33CD91B8E2144035606010F9D85AE0A3C3C17E3DB7C6080E95F615EC2BC6C35A8D83DA9C41436A44ACFCFFCBEE0EC71B8D95D4BD8C377B8D0AC7F6AC30DB73CF37C95098B963B38E2C556FABEDB028B9EAB5766ED9C3EBCE9D00AE8191D7124167E2DAA548F861A8E16E0B9CDC5CD62A50C8EA08B034E75A91F8C2DBF405E83EC4E9F18C4B339ED6DB838F939E57E99B4BA1CC3CB09C2FA64D5720AA897C1F53E8E490E47090A928EE193C82E6D5F587C552B3AD7D4F01073A6FCDD496B78C19230A7C0B554DA4E84704F574D48BC4104E6AE146E12DF277AF78B0A70A40CFF46501E5C0DD6C7F84FB3C9CC0C00AD24C47531F488E72538C059EC6D53AAAA600FC3CD468EFFDB74CF5C8518EE03548890A2C7BC3E5039B1127DA980CF8379620AF97A6EE3508152C8F582CCC45A789AC60D688A00B621C9DDB3EA4412527821EDAEFEED54EDC87D18D2B63B93853A08AA875232E08B95643A0674409F04D886A14AFEAB14C2D7EAE29FFF8B30916C4CE2407479F3C9EA9FE50AB1B34CB02D2D19CB1317D63A9D2A183A18373BA2657DED609EC669822A6C1FFACC8BF1BB14266C9DB52129BD366F333BF54F6A957F4CDB70646D03B5CC7F11FDE705ADAE2A0B10FCF07168252FD26A347296DAAD8CE32D06C8D3ED9BA295A8AE9A26280D7F53947EBE2751FBE51109FF27BD311708A6A2A41BF4A96258F424E79E2FE39B923C5658750A5269AA39D5BB50DDB745F8121C386C9FAC78334E4BCCDB527BE0B92CF799921501E08B754AF4840C39334B336EF28CD37D6A17F4AA459D979479A3EE3848079B2A69E29541D8544412E5BF3DF3D4C9879E22046E9901D44DB4F976D1D7742C5FB5556860E3AD0294DF59D7D16590B65010A130BF5D1DA598D5BB7FEF590752A0EA9ADD018451FD195FE36BD61FA1154B091658307555BF829C60DABA82EFD7BC9B2ADEA703D868A1A964F62424D2DAABC3BA70831881CAC5ECFD151E85F10DE1315D465F7A5007344EB577527FC1518E92A99D416EBD265E2FE1DC729E184BA370FE71BC476BA05E6992C37456C0F52EC8337982C6CABEF82390EF4D7DD40C13F212DF17C4ED443BD51D8712CA95F9A914B9A3F9734F207A8ADE3B67AC7ED5BC518E3B31ECA9AD5E426C7CE041DE16065F1A9241E672906483A645BCFF5B344DA255FB677210E234D18757899B9161127DE3D492BC3BA16AA9367F635E03957DDFF4A3D9B4DF0DF52DAA75954C53A8F630368C4C08F749DAE50BE7D0F9E2EFDE543524F773744DE4A027D46BD5CF739BB1CD9827850968F3E42EFB556D201C7902907108EB6DB5AC2A1DD9EFDB7235619D35C4E6F517DD393597231AFB5CCE423879F831631290C524C0E5B74E86EA54E0F9C6746DD5B32B79EC3855245B6ACEA8978AF22E968F494F6B75A18CA8663B1FA0BEB8E96D7365CC4E079868D5C898D4A91307287493276CD18F10CEE5425CD65BD0EB1D76565A79E2912A97C11E9B1A3392E5A2CD210AB41AD43C024672DE9B0CD8F01652E1A2B340D394F8DEFD6D14D21635D47CFDCD9FC295FD6F2FE3C6AF5903E429C3D30E2FA24BDF81D645EB064BBD7FD8389B3C325278DAB8F7DDFDEC602579043DBB0468D3738870471ECD2A3F5DEABE213571F5F0563 +Digest: 1007B82B92442510B2F98C8F392A3050D5972BB27A8FF25C87086ABD4193FD063D34416B1454DF09380CF1C5558B088EB58D7EEC2B0E87A9A06B8FA7D2E9B1DA +Test: Verify +# +Message: 65A2C2BA0EDB48B553227DC5AC6E151E45111B10C565D905E1502C97BFF7ADD5F600704C54CED5EDB4B612B5B65E42B3546DCB6238FD0C85EE1C482D9B8CB5B50456C10A42B4BE2E68B61C4CED9BB8D46C865C0140901FB3D46302F9E56B84F313B834CA5B223376E5A58EDE1013F360D1BA3A9B25118124F6F4464A9705E93A628006BB937B48094E01A760148CC693C865B182B7D6565273746521D41AE0C3AD17A75A1CE21112FA8569FC68C4BB07A423E6E395977AB4A7433C82F9332B2801E06D0A1390609C0EA1C3F00229B0FE204E89C0C6E622090E70A8ABD246341820736CF84B7CB6BF6A1299A7509181D69D4BD92617DE9C712B58EA028FAB39FBB1B4F9191D61EA6495D5F3235B267C1402E6FC088C62425E8E29F84625990FBC38122DFA052609B77510E8A9F28BE62C5422D760CAF4D59A9E0167916CAC9B2CC07B7BC7B4BA69858C475093A400C3F9FD48852B77AAB9E8016AFE77535E2C84B2354DBD4F386BC57F1A9AA8DEC751A7A24D635E5BC6D843F04E94397085FA5239A8380549D86C1CD1FE81B886A34AEB40DBE14AA0ABBDAE944C9780C4D40D60CB7602653C17FA6DC6B68082B0E64DE700C42827A3B04E1F46E8C7676F712F65BC9BB7487701A5665645B9548C7D03B8210F79D8A593CF655671D4A0FE323E193C52413A83A0D1F260FC8D2B6C3E191F99AC8A1ADCDD4839B7CB2165566322DDFDF9DE0D77BAACE883C5CBA822737C5A99EF0520F66891528CCA9AEE8136A43705FA86BDB58E643D59AB066AF20D566A46C22E4888014F344B3D18C12EB1BCD56F683762367EA84A7DC78F5AD011A635BDDE7AA0C7816D89BC2913ED5CF8A1AE2BA24488803CA18BA23F7A3AF44AD09DFEEFC3232B0518CC588794C502045DCBBEECEFF3F423144248B139723B6D03C45B718281FE17B2E6935F2B9ECB68821D0F46CA329577B4B5F1F1ADDDDFEA6610C1DEB71F71731605081DE4AE6F3627581878FD49C12CE47BAA5BD5102A96AD4C5301ED698F86568FB676BA9B353EFC9F7DEAFE8BC80741DDDB70C2C747277DB6EB41D96CA252B98616A46295273C3AE0176B9899EA255FC924D5894C0FBDC0A0A3C812E3536C2BF3149D493EA3346F35324177C46FA964629540B776081E9613C930ABE2F9EB994383D295C7833C8B2F106F66263929E613E92562AD112951DD3AFA31B274085AFF7A6D713D9F188C5FCF65E0B1BFAB421DA308FA1BCBA50ADC744C3CFE3C879FB4D3C83B0A020670FA08D93BF55B1E0782F749E12BFE3E7DA96E5E745A9DEC2179D18E1E50F850B6BFFE0129C161793C97ACE7CA12F70287B2C26519A7E016CFB43149551F8E119B4BEC1C09A89F7094C7FFAA72596AC40F72648354E9424B6258D5A483DCF698F24CCC0F158D567AD95D04860032E06CD9E65C16D12246157A2C45F9985538A4B4DC472764B6FC0DFDB7DEF387B497906BEC4D83EA671DF9480919180912226256EA8B6050D02F2F54D8C15BF999919751C9BB7FF8D31D1A347BE6D8A80AE124BAA690826E7B83D68FB48FAD6C6097239ADBE15469D95377E95306ACC3826342259DEE237DCF2FF6DD07111DAF28E712CABB9087326497BD5203170F94FA26F1CEBEE3942EE959FF482230182C85F8E1038AA03A23D4E221729F5FDAE914541F3450BDB00B9CD6AEF10A083C018F262E7D7A1A505EA9F58C5E2122C56606C03E1C63C06F7CCD3B802C89EE6CCCBE929CB8EC4DC245763D8F456E372BDE44049DD114D53266A01BEDE36C31E161E1E5995C18B118FEAFE0E5332DA81189A1C385C268F30ABC42D16B19C62417E0A759BF69EAFCFB167E81D6A815B64449596B382264E8B793A9E2D0ADE1285BD26946AA51CEAE746223AC87FF96DDA66F6CBEE79AFD7AD38AF66A274220074163662B142CFE886AE0B74B6BFE2A4E60733061B5E24967DC7820F40F193E03184188913865C96731D1E5A6F14AAA6E10F5A736A634060FA342337BEA3DD4E8915BEB87438BB283CF403A2575A3854E84598B572BE2A43B0E81AE7500EAF1C157B96FD296B615DC9A47FCF890720B838506A49780B06B61B2CBB0FFEDBC0A1C4A894DA5B84A774082F7949306A863FC64E0BAC371A4756FDDD71EE9E8DD8098CFF8B6593FA450896C06A48A0C6A944F606B8AD7376E664303E2F75EB91C4A006E26A9289409B528E26CF5B3385932EC2AF7DB238FDDAE8C6B9F518E3623A9C4397BCD3F81439A11C38E5C43F84A1A4F54EC9370EFAA166BD8C68D5996CE68457F1BCB19DFF3FADF032D +Digest: 333292172CAF8763E52D71DE5C38747A1DDDB2A23A93667E1E5E728E76485ABC9524E081AFA8FDE01D10F5F2651390CD3A98DB0F3133CCAF1D70F3124BA14E44 +Test: Verify +# +Message: EF420562F6B74614EA1F8727A00F81F94A9B20E28C618D704C28534967261BAB75A2984A5D56E4BC3166A87C682E2C2AF08B43DE109EA5742154C70EF3ED0687DF95EA498426C9CF85FA1C3D228BEAEB8513E39FEE8634DD2BE0F282D8CFAC8E16676F0B04AD5988DB48A0AF65D4799A627837CBBA06F7B8D212CD8F7FE0F59A55AF8FEF1E33EB89ABB3058AE4FA146DE7EAABD7B62C1F4AA5923C9812094DCA4CAE2CF3487713E7C819403E9B2A8613528CEAB5D8453EA591ED288986DA8C483388B11574289DEDF0E0492349D4604C56263CFD25A741DA5E3524AB9ACF357ED887DFFDC9B84FA1CEC387733B16F8AAF7A874EA8559D2B0EF71A5C900E471218C302F7E26A05591D11E4B666C185CBE00415F519A6AF260226C14BE16D0D384907B3413EB18150D6628FEED0EA315E3F1B591573E261A6C0715219DA2A785CA5AC910D7AEA662395505C72113E8695E5CC123CC83731172AAD75CF3E6DB06D8518D6C69FFAF21741CDA34DCCEEC310CF09AC36CD941FA7426FDC41A0CA3CBA5D3A44141013DAC21C499F3070DE473D245E47C80337FC97BB074C53F6EDD5A68E3CDF61DA7A2F2BA0A8237F39B62A42C4C3DCAC19AC939C1160C819EE9E3B956EB7632DC7E64DD87FDA884C5F5CE150434B688BCF11986EE1955A0EAC1F67BFF7DB971B11F60090521AA89B51052B5457BA4DDEA98946074D96A13432987F684FC4E4977B1859C7B3F7B8C1A026D8C847F24B752FE8FCDAA552B5DB6A7504A7B89B9E84CB1A7F0808539BF15E3AE282901F3182CB18E2902B3DC011513865609E872176CC938A04591F1EABEFEBAF42D4CCF3B11EFFB7BE932F03D605954489D670C83F20C7D2B8A14CFECA248C493785485C74C05530F9BF73366F89DFE24ED7E4C4B03FFB40E7D41C65AB35ECC46705BA39043E8017390477541156549985E90D1D973E616F9B4CCB74B1DB02041BE89091DDB848FA119E82EFF673718F5B31BA57C0BF039726B43F7E4817A9C99864BDBB22A522401898780F87C395290FC70D805C1C4B15A16C2223FBDAF3290C283F4D71EE1AE669ADA343C396B5F98AC8E25C392B40D29A7C3379618B13E39382A4D86539095086EDE682FF288F0F901C4AA968614AEB11ACDB9220340B7AA601CB11426C7F64A9B89779CD72B04B80175121AB7E7F9D2EF5ABE4CB9772517657D818B16FC3D8C1486747C2B91065AE7F1F6EEF392C21C53B51CECCB79FC8799BAA365278356E73ACF2C0D3B31A74FDBFEC441F8BF6C97A0DECBAD9FEAEF769BB1F9D61D7AB118BF61DC8D6CA442D9A0CB1775CF037B9D64C3A17844642217A4D587D5736F979AFD09AB839A243681D3165C1C5EF8E63BF44FD91C4DA2B1ECC0DCF4DBA9EA61EA1733537E647B38F7FA2C7F5A6583959F0D3DF1E9B922FB5BA926D203CB73B4970F4F2736690C06A09D8D3634D944F341FA50DD5A0AE01F91AFE2C0B249B450040DA4E4D7B8D8A700EEF576C3A66B96F991E22BC2FD95485D479E65FC395AE3FC12B3CFA3C424B62594BB21A5A4CEFF45C68BE0CFF390D06844975F247437E5EB1D1ED8964ACD79CC2F10BB1DC63DE307791C601DB7D6E3C97AE42717DD67C4CC5EAF428F22FA3407DDC9F6BB73323C3B66113CD998A4812B703AC2DB819F28FD2627198BF1F7656C04327A858A986A0879E5CFC1BB593138682E499414CC55D871FA1C04C6AF90B9524A1E6933678D237895036B7D1FF69A673370D4A49AF8C812B90CDC31F2E02B61291C3047AF7C05FADDE8AA2E656D42E0AC46C55FFE6A7639409EC2D536F4B35D0C3E208DF279E09F426074C7E858B35901530B7AFB81E3959980D830CCE536E16DFF866024107BE17EA853BF6F2FF52ED8FC9F42C7AB126185A79ED04C2EC4087A2D5037D87C420A8AAE922E603BD7EC99A0842A725A6E419C4919DF4003BB9D2CFF1538F54533763688B18DA26BBAD4CAD7EF357B2B6D6CBD5820A8D7F8C2EBCF8B93A32CFF903D1BDE264F569A6777776C21230FE148D545B3D98FC63F853661980534CE495C468AC8218C03AF8FDD72A20D1905AB2A96536F800C1844FAD24DA967C6EDFBC04E1B4B332A416A91956D78C528E66A52C34D3347DE8F30927276C48B99DDFE30988E86E62A2BC24B272D3BE0BEF2402F91EA55C4953C4D3886CE530DFF1F97E55C253BAF75FDB432558C29962EDF90958075D74FEEB68F40299388968EBD03F6C27C791B9F21895D52A62E6884BC4942E12DE0D939E6FD61F16390FC5BA412B4CBE7FB4DFB82E4F078ACACC797BB272CE2A1AD4B40A012 +Digest: F573CE77AE0922B14CC6324CCEB85240756754A0FB8BE926376E0BE3FF2D7F4CC703BD19184EC30AA4843E58820AD216B80BFDD3FD64DB2AF0004D7332882CCA +Test: Verify +# +Message: 9DF4975ADBD50D9A9AE2938F3DBCE9629AD6DBFA4AD46660FA5837786CEE545E6126C113CF29E4F99B10EF42B0545236177D81563285D34B1E8C2FCF91AB42C31C246A6169DFDBBEE68FE96E92FAE3A77C88047A370985C4A825AF4BFC29145BA859BA74BCCB27E0BEB2110D89C05B8786BCD61C960A66466F524E855E3AFEC443F04907A95480DDDF3AA1ED715FF6523384D1BD0702955BA2239A1E56BCD519A0C51BD3BA425C922EE1465FC2290A31074158EE02075730861F796090055F2A49E20E49813C9540056FF84D60D85CF3B6C87E5B404EDAAF62EF75ABE7725D68584109D20A8E5307F422F790EDE3AB1636BCC87B7CAA5F1E21F67DEB65B0096F857EF041E2CD9B4DBC4F7F6243E32814AC57FC2173ABA8B7F7871ADCA34AD2D852193F648143709A575415306BFBCF28EA2E88F71FAF2190AD5EA9A9C7CDD736B811D37D3872EC77C9673E8AEF4710C5657EAF2A98430739DEA4D10A0B3CC0EBAD08352AEF5220801622C6E05B4E9D3DCE94A9FB927B20CB1ACEA5ADB3C51C86E6B8CDC27CA545930DDECD85BD099C552312A2ABE7E103BEC630878648C3A9ECBD93BC5477BD4319ECDC6AD17FE51F5E54549F8687072F019BC45A7CB6CE9FD21D039D9702BF55AF42376A29DE91EEEAE69E40EB7431567DE167BB22BC2C8CDB60B4B6FEC7DDB8BA5860897E031E74D35A0E5E541971779CCCC8DDCE15B9CD3503001950B09E7949077AAC00B714CB5B5D6F8A3E019F857820E840438E5648AE6B691D037B296C40E4B59B49152BA3EB66DEE607142A0713E1C72214EC8A27080635F766780168E20FF25A87AC71E0850F79A873B9B1CE13CAEF29BD36066C83C028A0220E83955A5E3F61E153E7609FDD57644FF1D04BEBF1D4AB09724665B7CA7A2B83EC8425D0FBD64C058282B5428C86C798BA49B60694AFEC855FDE4D4AC94E89803312E23F0061F924E6F6E0BDD39089641CBDA787A689ED057B1784CB98299D60BADEA30D182EECFFFB965F82BA54F7A79574CED525307DCEF419F86E6430F103196F2CFA0F46CFAFC6FEFB61AA3FDCD81A1981D6E1686330176B2E885E848D73B75D8BE5E7C80B0B8A249D30873B75B52B9C5C56A482AC0B643CEB2CA30418AD9EBE3B430190FF3353383457077E5C7C1B98A770EF3AA93924F3E7DF8870F3450FA440FC22A38BF233BFAA1460EAB5FFDAE4054307EC67E970865AA62F3D42FC4DFB3026F3BBC74B9411840DB25C24788F9913DD08E5186D686FB3A3BD7BF343223B90A6B63735E8E004DEF988871C9832B969D5AB56DE4419893F605D9B29D86EF32FF59C2EA667A210579CAA53746771FAB863DB22468484E314C36819E754426788A11543A407599039608BFA3072F041061CE9A8F450BC3C72A962D868D02768C59198AF954012DC8668CC491C5E00EF50DD6C7ED1D21A63CE59AEB6F22A387F2E17F96E185C8B6AC539429FB3E4354514CC1BD181FF462AD449D9DB52F338066AD74DDE9E88BDAA3FBAECF060B89171B7DF8739131D2C52EC7B250D79FE05EBD923D69CC16F4E801638D751CEE2C1B5D772C73EAB7902EFF6F4045A65BD21E40972FCA5DE0874575F45AAC4DEDEC97E003B9D1A2E0FA450A4BE6367C2E44AACBEA7E9F66A7540161177699DA7D14E7738C8FCC73C538C2475C4823B69726C3CDE7EB5FED89D4CB6AA3C8EA978ECD1FFDBAD41E8FA6A46A9CA1235D3694BF67E6D50D602DD7EF814FFA91B409170B0D4EA52B43B153C62BF9FEEDA24A0EB4E0639D31E36ABB0C604111376906DB2542F4CFB69F4AF529A325CADE0FC4A76266E8E59FD5745A9CDEC913BF9D6E99B7820518A855DA8567F80D1625D1C32F7B06CB8AC60C6160F73FB20D0F9043EAAEA77906B71C10828092C1B493C7DD6808ED1E35DB6F84F4EB5F0F191A216758A7F06DD467CE51C256D3A53AA3EB4760C2C6509A21F180C6A5DF40D945FF44023F13B7E9F2CCA25B7C60E828E66FED555EB1B0BE1C7B0827825D88844345B2D4FB18024B916C8C653DF3997AAAB0F53DAB0CB014510DB942A1E7ACB2C2CFBEE1FA2A169DFA24D536A6A5BAA123D4F8E618B7F7ADB997C87844B6CD6D7AC9B28968237D1CBAF9E5B5F84A3AE850D8BE1844FE9118DAA0EA759C3D6F374D17D9BDD847093A752943E3B90CFEF9F3FAA2B7E132C79A003934AE9EF24C141C93D3F775E0F2B625706C31087220C052C55A6D57976D8B8F4C25013313E9C481E945A9FBBE286E61F16862402062FBF0EDA01D02F59FD8079128D4F070E34A969B93D978D45CA1DC92E748A4BA4FB5D706959BF34306F3ED5F763C9 +Digest: F3F576BB7015757C38F43C5E0446BB5F4D1963A064AEC6F4F1E3AAE525EB2DF18BD25BB3BAF1A606F3E49F64F60CB53EA10A2B0063C51667BB3B78AC99833334 +Test: Verify +# +Message: A38D613D67170E9E8C7211895E745D142ED2601713C47D80598B3269D4619FAE57D614E7392779592259F5B495C596473C3A9A818C2E4AA5FA37435D6584470D2010DC329E73C50823162459937CE939539773D007AA5C47BACF764B5C6B572A34A8F95917088B81348CF10687CEA67978946AA8ADAE0C654B4D7D3728C8017DD755747993ED3287675D8B76B48B2C596DF5E31AFCB6CFD380D644F30541946DF8FDD49B7D486622A0236C3F8CFE1C1FFBA749034183188C5BE2991536990483DB99423D023907CF02C3654B73869A68F66650C5862B8C51493997FBE359386F27D785436FD4EF31E445312A2451132DBB3A9CB07F309618E21045EE631B7D34C44A2C21594C8FB851B7669A4BC1579C6E7D1B3C36FD0259CA03E6928ABD6DA03E1A9ED8AB3B681DEA8318545640E1D4B8E476DF76971ED5A53A5FE98322B83682A4E23681C9A8638749C30644A5EAC7D3105D17DBEB56500AB05FC6C9CAD283024FE6AFD0582F94688480240C85B8BF4C7983ECD7DDAF1A18961E7F074072920F70584B6ABD48C3F92360E1C7B63BB280E2CE90C29C13900B6A8279E7FAEAF81FE95A38CCBCDBE408C696500669F57D3918BF75C219DFCB1BCF5204BB62D038CCCB39086E9652A986E142A6E1A89AA7F7C35C6A8FC37A125DE60B78AB803F8298E98A7428D78D34CC0D04B7848F8D94B070364CF2AD526972E28434592EAE370AFBF4233C066C9E014879C5D0CDACA2E830E5710C9DA51ED99B4FF2E75510675B9AFE4FB75866F2D46472C8A50E1B0ABFD5091AFE7C521E19BCB15C8F96F74FE0EF44EF679219081C73C212999B3A4E0B83FA1AFCC1E40BD49791069ACD1D239813E2064A74A3E953CF945773D7B8D344C4BFF59FAA7796E13617E85672FA003A8750EA84CB40FFACBC35DD0B5A02CCE98CCB495698F357EEAE2406E59096DB54C60D3DF6111E0BE31ECDC586D9742F1837D49418769B26B8477E0CC88AAE1A0F49081DFE6280B2A54F4C7A80676332A79E4656693A84D9A5962A578ABB898B3281ED1493F0DE453314EAF3FB9EAF58445816B847394D4FF9B355D3E7A2DE2D56E90FAB9214EB188D534CA637FD08CAEC29E14594DE200DF40CA67A8DA73403D7D9C2EF5F3E203521ED076AE697C7D60DC4D383346F9851A8E4A637D9F93872B236A7445691F951FD86F44F94C353F179FAA66F01FA439D1ED57C8BE82E4316436A130C67F777F4802294F2871DCBAA9B8039D6350FA1BB116A22EBC345D40167E8F05286C01AB3A0FF83079DCDDC247E1A59890D3587B19A053732D2B361B89A1C29A78AB844A35735D2C76653D5FD0B92F5E4597348B7E83B22C4E5BF129E31B0BECFD75C96EEA8DAA19FD01DF43407094E42005CBCA803CBB5AD9300E8C8ED11CEE31AA41E8D7FC0AC17820110E7EDE0A0756769E078C3365219FE187D1D5969F15F774ED350EAF8928D348400253333DDAEA010FAAEABE7BD4576F020BAC017C2221608FFFBDCF98D192D5E075810376FE7C87774DD08A9BB8B0A8D220E7D14E9DC0FD7E2E5052DA3B07E2E79442B00038F0EB97DA60F3A0CAB81305157D47CC895A0FCFA221CF3453F73B08E49E28D26DE9C89C8506E4A60895DAC4D0D82647181F06F6F4811E037C0CC4A8491EE3C472555C4783E2D32A36716E815DE24FFB0B1AAF780BE718852D6C287DE5FC82A6C924D9736FA03FA7431B8FBA660799E162C55824440DBB649EE3793290F1FD90232EED596DEB0E21D727B59008A52BBB5985C37A6B9DADA47D366ED9BA891AB0CCE065DF4690393DCCCDDA7E6C7D69CADDF77F804221BBC172526537103D27C8BB016B33EDC9809DD4621EF01064B2A76BF5F8D30822591C818ADCC4A1B0454D936CB4CA0842B2DB865972EC60CFFEB9E08F89E03742428DAC420611546B6B3B904A3C5BD62776B5C9C49DC924BDBDCE3B4ECF951B1590A7723BA4C5A91203C39D4155CA9C7A1F28B8FE5035A10A25C556A97B7B5A84150AB8E7C69D4DF05724E620259379C9DDBA72D306FDBD6674BC06B391E397A204E28C538ACB00EF3C4FB9B62D0992DA181398B3A568A07EA486D3A85203F930E55335460C21BC8EBE977AC22A99D4C7EE4EADE6C83A96C9551DC0F43AA6C7E18344A8A0354F5C35ED8D5A6F4A47184016A781C469A69D72FEAFB947475786988FF6E476FDE413BAB20F264A623BC0E77F4F57DDFABF8D362A9B1EECDB0E4353FBE84A1C7F9274F496E4A9A285633A39AE45794A57A9D28BB40D59C1CC093E8EEDCA0A7647580FA954F97F54EF357E8C5B71A89104D482EABC362A960158CDF3173F39714E19FC7DB5CC683FA6D8E509A26487E4141A019C91DFAAA15C4C69C8B273D7F56D6F516E598449A606C266D56 +Digest: 11E8953F80B68FD0D7782AC742C2DBAEC6DB4F7BAABBE9A9A2E63BFAAA8D4A93E20E060600F695BDE4C2DF400826A2CF9FC6433AF8A88F08865C82BEDC67AC1A +Test: Verify +# +Message: 01AC577BC82CBF752D314268277F48628E867A07216A2BDD603EF448EF2F0F5790D35F82DEE9093FE0E72F4B32A9C2FB81E32AEB11F22C1D60183948BD4D5ABF153A7D4014B0E310D5803DCFA5B7EEF2015DEB7A98F096B68E9C9480F07409847449BED8FBC248949A831BAE899167DDE2469F75365DB7F5F9E54067A19223368BF2CA040E512239889382E6C860EA43737A37776DA0381546116C1EF1830C2A650A25BB22CD9E1694EB7EEE7FB81E4C85A612439318A7489E9FFA7277D1708ADF7B8FBE37ACDA10DA87AB1EB530B7B0902AB193ED2457B41E135EE48DF68E6F40FD8FAE9519FF251FD1B702AD381602831BE5A26CB2C5BBB92C5B8B018262A5661985CBE4C5EDAE2703A3E944CFDCA63126E78951BB7424510015F9BB641253D879941172F69320C4200D931002FF78D0D3DB9A7152F1FE83907EBB5D34EF9AA9CFDD38429A4598AD043236BF4D4DBF7EBE5B4862D943DB21684938DBF565E67F4F5E725EC83CD5A7A85555C982B5FA9A679AC5CB7DACC42A7970222FC4FA222DC93F8D5E6E4E7F7640843AE22EB94001A7DE2E3E1B63C92F49718518BB62694953E027570CC121B58207259CF269D291E8739D33120FFCA1465737E64E9F24BEAC963EC4ACD7B7E519032935538621D2E3C57545D027EE4558075FB296980908005CBE34FA978DF8FB66F8E701FDDEE805971D988949D4F57578CA5213612A10193476B40638AFACB1C01780FEFB07CB09BDFFE7A29DA1A0C0D0457BC741A970433FCDA9B37001CE7C27F74D2AC317B14D26AEB5BB0FC4FD1445B80EC3AEDAD0730C621824B134288384D1185557A47492795A80E5FE1D6830245401B11FEAA547E1B261915F9FE5A39261E14FA7F074AA4A24096371F8601D907DDEC4C5BC0934E8DFA8CAD014A05FC52A21B1FC370D85F1A0E9542ACBF5EAE8D68ABA9E7CB698A41D0B99F4A66A14A84ABF76F96E14947EE62EA3D58113692F6BDD3DF9740833BA727752CC13B0D3A61E44107718BEC9F9DDD4A61AB0F9F1AC3E3053A0924BD5434959EC8B6FA53529DB940CB9F5498EB9C2B8687846FB85E5E7C75FEBDC132DD8F703211A770F69FA0831F7D0EA19DC5D5CCE1C276A080756D7213AFB0B5AB933196C02DCFC2E758018C6C1C209588A1DB2AE4F14A9D4EBE85E39C1B26C41ACC97795DF3B7CB28392988DED4B0BD613430996764B96D064B43C57A89E11D49264FA3CE79FDAB215C225D3F620CDE7320F625AC2617F881DF4B6F3E17F5D07C83C6415B99C21E3C5E3CAB5F8B830DD2E00881E8F8B00E4127C7BB47621350E20EDCF8000B29DA01E4D4180B2F85BDD46FE81BD3B83E1FA40CE41F62967EF4E4F8A97C4505CF603E51954E57A639C13296A95F3B5AE02687D2CBDEB4017911A5031F4AE276333AE73241E9EE4130D8EE4667DCEA63CE5B69B5B57FDA7D83B31512E3F7D75AE33ADEC1173F67B3114F1401B3A69DA996AE2C58C8A74233CEF40A85B57C9C2E06CBA723D6D645C4C72DAE92781468FA1DEC6767C240A83FC2C99C57A1BB82FADF04D49FAD586C94AC77AFE4C8BC5F34D3683E4D441647034B396026ADF8A63D4C621F3CF0D04016D060B1C5783FDE34ED86C8EB3901304FD8D7B9A1633C1B4018A78EBD1645873E40D12E276FE319BD03B124F5347E15313B68E0590826F620BAF55AFA8330789C6B05E88ABC1999E34A9FB00C09417F8216AB30C81A9A80EB9260EB6EA541E13E6FA6D21D9567108A7CD90B3E0B5A7401861DDBBF0E4E0B88296C6E69AF3EA19BF09379ED643FD5F6013F00E3654F609CABADB4394EBA3D6572B2F8670E45BEC4652BF7F9A91E3381779576655BB0DC1D651F9C917401A40E32444E1DC4BD2CDEF5E504F45D9C536629381F45C0F86D44007B4196F51ACFAF601203E7E695CE0A10A206CD5EBE5171A996C62066D8A2C077234A266E8D5F1B77D67A363523416446491CC694AB82F83CA464E60D39BA82E1D8B18ABB2C4F732BB7B249ED563413768704F763B79C0EB114BD023D93AB3031DEE2C3943AE1B7D26066427C42A67F6AF54ECB6F3D01E2DBAF8ABC7A70A728E9DBDA3C25EC7868CB62A6BCD85C2122E4864FF08C9095FC1B76BA253DBB93FCFBC0FD582849F587681831EED6C61E2B836F756F3E2C54B6B906620D5152D4680FED515E3E2C3C6908F2386A177C360A38CC1C5E317A01FEF6D956E8D3E2D5CE23173E24888B21979B9CBA9FC35500BC43C89C4FD6AB7C76C5CCE4E0B61998F791C0B49FA9329D5FAABFAC3F1CA7A1848E794238B448A7DFB3908DE49401AFB9C26384C8067CCB18E4EA136AC957230C637C1A19ED4F3926FADEFA54E8DAE72AD57C125F57937F796D0DE311DA7BB274A3EC0C37E53A273B47096670D6451959A0E1ADA766A6B0C6214D17F0A57033CD38A +Digest: A78A84E6FB2FA02619160D7AD563D59E572343A7183C50B1A3306E4650C60DA11E793DE8204EEDCDD4E452050E608F1490269624F55F433F707CCEBC23FDFEF3 +Test: Verify +# +Message: 104C8071770292B73910C6DE8D1BB3B7F6D83EEE6AAD99A873F6AFD20B0330CB5D79EF2DA3E3AEAD1A2F951564AE2431F7AA7E6526F441CEA96E02217186D0FCA25AEB258D42C1DFF14FB22C1658B69AD78B953EB3182E84A84B5D0C4686E0E8527519DAD094F01EB9A7EE7DA0A3C874E0BC8DA815893210BF7E8CE93756F754F6699BB42DF6AF1EAB61E26067852192E1A590F436A6679107A52F7CCD367392C28B59ED505A64FA6798E9278A71F863E58CB3FB7A026AD8820C5AC400A58FD7D3170A0B5C611EBEEEE0905337AAB36F0EE767EE04BAF2B0E4076D9B0A403055B5DC72DE54AC2FF124BDB10B7CF0FA93B67D525B7803FE75469E28391FCDB14BC18A721D7A8B856F115ED2F1F95C42CE80F146DCECC4FF6EF0E8DD3120A4EE7F6DBDDF292CB5F9F51FEC0725C2AF691ECD0A2A7BAB322F9BDEB58C9B0C73330116C7A0F0F133A6E61A1FBE195441C1928FCF112D8F8EDA9B508CE8C1F950E2E68EC3A4F3580EA4A4520D60AE7222D282D153F55DE803209E0D353CA0C39FE74B95CF32521A0849478D39019D0E9F300024C3E4293F1D59D4A07C204D05AF287D3D2194761F17F382256612DC2D4F3BD4C23A535283979CBA4E9AF16FA3F14147AF17DD288ECC38D3D8631DFC3A1401AFFBDF65965BC45EEDCDBA4EBC667134B0FEA587131A4DD3890643FF6964F24DEBD0772FDF7A9BE19635EDACE440E716BF825DBECAC213F62B78970EDB9A882B65D9D54DDACF0725B7F74C20E3021A4AFBE781551D033BE17913259617DD5C93DCF4933D6703AFE2D24684F19B25CEA441186151C649AFDF1CB5EED6B986CC0A55730038E824CD4CD08FE69842122176C74605639B26F82031AC5465D3BBC1B5122FF2E4D416E25FE2F63045B9B5D92C6A0C7EC6A761D853F5C15AE2AB5FA170EA0F0ED09ACE7988BE351B69015CF70D556518B4B48961B7358239968ABDBD41BC80575654E8AB9609D6015A2ADAA5A232E1115E500BCB3FA38EE6F8EAF2B261541399E87142BC53C2875E33E38A394B9AC7AB2CD5960D7BC9641BC3A958834200DA9CBA8B37D5CB417369FA5CE0FC596070EA8374D6ABD311DD3C7DDB6D72DCDB93E07454CDB702285C16EF6691A32BB4421A6214FB728BB08949A5F6272E037957D85A8984DBD79D2ED499293CB2282E389C9AEA903E90B85EE726A528D9D1908E9F7AB1325494DB506221D33AE15D18FFF00B2198F3EDE217A4CE9B155467B6461ED6E296A6891A09DE5462C03CA22EC1B95AB3C46760BD7A0642F53897E0BD495037D104859B5ADD0A93DA78447CEBAD27B9D3A74AF3484F7F1F21F17C1D3FF78E9A1F34B28FBE4533F221508BF59C6E4E6A8014EAC21A1CFB8D528CFE053767BDAFC4D17504FA4C6F46460B705567447247907DECFE955B475F56B1FB8D227F46B0E79AA1AFA126BDBCEFDDC0D379029585319228288CFD58F0B1171218CEA5B250E31F8F0ED7D665145B5469DA38C745FE88EC4313693931A74604587D38C4D1BC5AAA4B8165A893F6F8813F6416AB47C7233F1F6E5BF2AF184B95C58A372EEACF4CE8F994BBAC970188D4CF0F4B59C2C9583B6BE0FFCED6A18B96DC08C45CAA13F99490FC38AA4E27232A7827CFDE6FB75B62FE777295DE442CC2821C8CCC63865833A803FA4C2B631B0EE831B2B12C92D9A1A8FC46D18B278DCB74B9BFB5835626281C163D2FEE0398512F06785CFEF8D7A4F27E56A94491991FBFCBA911519AD934D835C31804670AC6F10D1B9B1DFF749062F7966BEE6341A0D97A3369B3856E9B4342D5309314C9C8F1D4A7AC7B55101BD4C76D330C169769932152BF7DD1CA31CE4FD79324C21ED77B21516707B479D8912697FD1F9C2FCD7C063FF900EFED3DC610823B27853301671735AA2CB2E7ED0765507E856C42849D82B99F6D5EA0B1CDA8CE778619156D6B8A9778F83F6A97AF91A827902D77EC6639424D03D6A94BA51CE1E91492213023C352B100A922FD067CF9A152EEF0395D64E3C5F5525A48F20A76679376CD4246882A370A88BA878DEC6738C4B6157A2177EA87E5EED0B93386B25548C31242D82D642BF47257707E1C22B3E4B59E956BC6A6E69D1784709C180421FF3B31FF5CA489E6B7B155E24A7966FF4675CFA564523276C678104CE9648E55898EA7559608D6F5A567545C0977261E731572A9BD93FABC37A43B943955F4E4CBCEBB95D82E76ADC4C58A670E900F4CCAB4D18A92317827A518002195592B36258860F03599698328CB63428A19524B1712E9F583640588491E1EC1052552E2147B48789C611F6EA2C95D0C055D79B7191346242F4957955C91E3EA4A393A671926CFF28E17B5B5B20AC8F956916FF472FE2387A04C5187909EDD9CEB785426FAB1E4520CA5D3BF5855781FC330E27A9124E85E3E6E3740EC47856A441A6C60B8EF7145174429F91C96132256F3A3 +Digest: 889DE0B333F68F17E8C17D32BAD45824C0AF7CBF0741F0150040999C0F6055C20197CF0177EABDEF4D75C906D2F2A06EE4A88F537BAB9C3FE4C28AA45751E86B +Test: Verify +# +Message: A9F1DC82F9769C206DA24688733AEF2506BAF6D1F8CFD6CD1E371D05F7D979CE28AC8E83CAAAA6F57F609259BDDDCD3022DAC09926E97E6B12B00E5A11C00D071507FD80993F031B1FC58093790BC1929BEE061B44A3BC4C63BA6DD11C1B59302A1FBE38889E143D4D39148523A958685E8660C6682C33253A375D97193FAF264366B390907822EE3BA04CD0C0E73BDA016122FA448046E99B075E95C8494A7D56E4C5DEFFB847E9C1903C19DE573655CB022641B864943C19355C5E1F8798DC855D6567FE56F8AB4EBCE7AC347AF5025743551E6AAB20024450ABD4C1218AC40AF05BC2DEEB44B4697AC9874495F7D986892C982E3A119A147FA5971E212C92F8BABAD748FC0856F05E575315CF5337FD0FA650C738D0A299A67E514C5CFE53777C446A5543FBE9C2444CDAAF132784EF49093C822671BFB87FDA0EE012E249D9BAA8D2367B15A44FE08440FAD089D5992CD3381FF4E489808989EAAA8AB704F3002273CDA8A5C461C5912FA2AF57033FD33388163BFA3EF3C4F33B4E6298281CBEB82B4D39B2C0D4C149F807D119C3EC3A39C9F263ED006B8FAEBDF2DA16ED1AE3B64E16336DEE4A45A1012A6A72E4ACF44C7ECF4AF7CEF5D14DAB31988EC9B59E9ADDD8C495D49C2809C5A97D1B4B469E39188434D6B0933FDD7C3962A69D1E0CA35E47BCA2A85F4F7164688F629F85620A978A08B85AFA1A073FDA824353762669AED37CC9FA5E35890FD1CE244C203AAED845AF3741A53D9EFE2B13D93695D3BF764C478A7A7981EB7C7A2A3E64DA4E30BF4E75328ABA3235227E8F3C59B32996B787264D5A0ACB73619B18B365732A1E1DF0F2D2D218986618BBDFBA3D061B0AEA30906363382733DF36261B300F1245E2C5ABEFB36B0CA7B482B14A15109ECA37902F9F16240C0734099639F3C728CEB00E9CB11C696521639237E8049259963C061C09FB8EFB50F48FB97123245976F0FF2E7D0B081FA27619FD897FEA4F659C14D733DA9A8FD6ACFEB9152CEA0A2592F268D051A3BB651611E42700292231E4DDD7DD59D60F6FB78DB757272E614C9DE2AB6D0E778AFDCFB4AA1E1DB1274EA8A0ADD1080E8AB0CA74E68E5AD900BD3C79504162D018897BFEFA1019AA762987E2CCFEF51FB3CFAE553AEC0B932C883629201AD8CC6698239B8373EA4FD023457D4D18B3BF049DBA96AA9C65603F0B685BC9880488A1B3010951377148FCFCA26DD8343E7AE3793E77693E5B4716911D0F68CEEDF65FAA312D837F7FD4233F542AB93B5CB5849E4E564941C5DBE9C0B4C9116AE2BFC74552C478D2A7CC9A8E27F389834D87BA1FFC6C7C3AA2B33214BB19BE420789C53EC8FB38E83BE6A39B674097BC6CCEED462CF73572E50D9DA8AB9224F76725F048E3BCD54F488D425856186DFB937CB0B9671A38E11AB4A9685B8DCAC3C8A4D9B8D490EDC8FCB0334F1089F7F2BD7B0DCC545B8FB65572C32C749A1D6DA5828844E8E95E7D444C47086D4AB4D2BE8B7A3FB8CDB186D0538F67747F8A5F7E391081800A61F839401A55F313212AFCF30BF01EDC2E09E85E7FAA74987971FD86E65E51B86A56242F2125BF5C50B76712A998626855924D4F696D4DD5AF037A8C01E404DDF41CE36EA2B4A052608A91FBFEE609616056ED6E92F27A19ED182A89C10E3F96660D83C6C77BA3AAC15D6CE8789CB7AAC6D726C358E623754E1D25C6D1B3C38F6457D9EBE7D51866EFAC1782D57DE55D401259BC38CCB984868E9C934D11135647FB9A3BAFE7036A7B242B922FBEC38615300A9280D5BA4F98DB7179CE8932F21DDEF5F194EB98C7F9625656F35AFEE4EE86A4B4C738CDDC41A5694EC3FD35A506DFC8F3A6201CBD15CBA936B7A5416D49DF0E051468D91F1E575F3A088DCAE1F7F903199738C4DBAFEBF867457BBA65C15E975368E2881E60E5753641CA2CEAB14571F20082637CADB040B1068A7D9A5B4D00A432A25113C3AA5EED48784F2C3CB2D92F107E42F3610CD62A87E22322C323227EE40888F3E7EF4E72D114FC7019621ED4C4D7B4FE6E2B133F79FB0A4A97564AB97DF8502BF81DE644003798489F9CE2358BDEFD7024341185BCD8E875E620DAE315381403C9F4B63BFEDBFB27FF49386686367C78A4219D022C67A8D5853BA30057274847AFDC1217A2A576C102FAA9ED7023AC0EB1EBBAB805E304045403B83B8E2A419D686FC53C632DF2E8DE45CB2766BA6E38A2D4C9DCF945BF177815B789B7AE51395FCBC63BBD8F22D98F561863BC7B5CC368EEFE522130A72136FAB94453B4729F30458B827A60348837C5A8BBD0A5B4795E29C15A18DC951886F7C03D74EC68D33C2E6DAF9078110512EBB6BAC5D5717F04A8BD54672C7677B94E5C5305D0A3FD64A1292003E6641E5E38AD186E18D39F5AEB2E22C05D203CACEA6E4899E16642AF0E1139C65DA14FA487513A0CE621E49854E212C576F4F08DA8A4A6B30822DB87BFA5EE4F01C66987FFC77C82C6B2E84920DF430CF2D13B +Digest: 8BAE73E6CDE0D318CE1B56F4C2BF2766A82F2F214BE5E3AEC3D7CBFC520C6D3E376587438F0DA993EE3D2F26DEF6280CEC7FCD12BFAEA55B1C2AE9AC22C94FCB +Test: Verify +# +Message: FEE5808983829AD75A9B02589E08224165BCCA4979CA81A8C043007E0A6D6BA9B8A4E24791C60DD034E987B6BD0046564EB5271BB5E8C506EBA8FA4BAF54933D85D6B42552850B47D7849EDA78D521E759032E98DA5E8D70859A3C1472D712DD68F76C8FF18FF0184640CD15B64FBE5AFAE1083DAF6D5FA24C16ABF9D16611B6024DE53BF2B6307E5BDD1822CD26A922ABFDF1B0AE25B1323CAE499F4802040051F8D10BD18E0542B546B61087B91AA6742789F2E336C7C6253867ABA2B4D736AF1EC26986FCD00F84190001F4D7D5234BAC95BE3F1F24515D19470D9D8215CF00BF0C1DB685A8A3FE0A061B28C0FB94B0A73FA2535E72642872C67E8D5170124AC6F59765D203C06713EF95D731A44AA3EE240BC0204EF36D81D447E2EE00D39B1A66E65561C0F4D1D623C389EA536D4E1C8FA562F1EE896037C770DA70F7158A5AF2A8A60381752785877FE4FD39050A151BE2FDDA17F38FC4B2BAAD5C080DACFFBAD1B56D05E1DB8EFA8097947931681A4E59E33D84C8666BD360CB9F3611802929BE3247685ADEB360770A8E9842F293566A8B44867ECA2A2630B891AFCE8B3D00ADA7596F6FC109F9A2FF3AB1FD756E78F93710E2A78B3F6E7D095C5B0055DE5BB30C9BB5411C923A9CA93BD58825C8C4F9A2CA76B17528EAAC795BEABA5016E28DD5016D398CA2D662AC1181781D08DB58CB366AB2C7C67B90CC8979F9341DAD3B4B096DC9A657CE784E8991F8D62EEBABC9AFBA0DA62974D108823CD01955606D0C38B00746451904ABF320F6DDF0CB2242263BE2021E21586743D51D52ECB0FD65D3C6CFB7B70431C3A0BE0722E27F491AA0BF72D1F9B7EA0F412B1511DFF8A899636BC381F50DEF769CBC1F0702C46BFECA0254ACE8B7567D48CE9C677D3AD82AA371081B0A4DC387767D4BAC7A9619ECF4191F01470CA7D43DA165BAAD8F0074590458A3CB80D81E7AA36839BF970D29FA3762ED03B0FFAF4F6F28AD6A45F93F541D1623C713394B8D9115F60EDE99554BC14FB2FBD38DC34F52AD459148734DAF57068AE1AB08294975AD720B2479ACEDD988D5FCBCC346CC07C8DC47E6BDBF5D927B1BAD0115D4D89EDE6FCDB24B988B7C19CE01AAEA382D85FB43BF0F16FC18191661D75D1C02F265AF12DF49F02321AC51114FB94F7C36FAF727FE9FE168D38977D2CD4A8014D8313695EC2C57C86D640D25C5946755BD3A55EFE7CE09CD1042AC6B6B4A49EAB38076577D72FF78066EB2E71719699FC6636D06496D49EA26FF715235F6D5D7229B1E68AE0EA0D3A4AF8DCD3A430899D46B90E5730198BC50C7793E59F03594BF25C357B967CE0985AD93B182D019B4613FE7536FDB6B285756359C362154598EA384914BACCEB8B3061B500D6AE7FDAB6E909DB96793818CF70C1915F14CD4AE79190F03CBB65B0A1ABF2F7022BED48AD721F3A86CB1E88F8E0ACAA48797E40D7B189422908FCAF6CB749CD1DA55909B365CF94B797821E8E65A6EFB1EE870BBD5B4FC084596275E73280597DBBE7D072AD32282CD97FC0BF424EE4808F5B1E3A42D2200B06CDB4ED0BDFFD75008D8665146286D94927A6985E380B58D2385CF86D747EF5BCE1B4E041EC26B7A216153C3A7E21763C60786C709A83BD84C65F0FDCCFA66381367436D37BEA5DA29D149304DF8A43B8B800B9F2F2E1C8F2D85139B715E9978859BE90CBC4170055F8EA846FCEB9F7ABD84EA4F87B719745B0F9DA31F9A71D87D729CDC8F6FEF6F4799BD518A8299CFEB09A6EFF345BE8FC31D2A83B3F2C8FD788A0D07E45E85BEE698A81C36B80F1D6E561C817EBFC54A5CC1E07BB293F415886A7C586950D8A1E62C1013930B27920D63E25D2A1890BFEC001F1AAF841B7C1C9456BBDEE504302BF954984F79F36588F8EAF7AEE72D156091F2B17376A09EB461DD00ED336229FAA91E4EDACBCCF4974D5EF62F6BD387F0E4406D89B25B722330955B31B8C1C7E7B6CAE7EE311A00FD78CD6484F6E11FDE386BFBD0BEF1EA51881A58CBAEB9E03EF944DFBF2E25A48B254317BC8119E658BAFB9B1C41D62960DE8D0EC877DCC0D0E307E10BBDCE0D381DC67BDB5DC5DD61BD7FC58EDE8F60D8DF42778C21A5E3363D45715A93D8B46AD5A4C69AA66BF23DA0828609795ABC1DFD66F03ED8336AB41D2D9DFE2024AB3CF151467CE51132B87073EF84444FBB0CBF30868658605A09F472EA4D1175F23CE78417EF601181FF0418134796B9B1DC73D085390AAF15CB74BB675C50F095DE1EB750252CB30D73999AEDB8BCE1C8E87608A6D80B6FD3747FAAF5E50D2C0287B34FE3B3D7C165EC0947D47FE690987615D5686291931B929937D55B6F8582F9B1FC09DFAFD26DE4459087FBA03D1C00ABECF64AB1B7D62940348E125C66939C57DA8DAF2AFD6D57630F8A8E71EC56A9C0E2E734E26DA71EBAEE05EA26629D3FE2E3458010FE979CAF503862ECDC872EA976CAD9C5CB3E3CB1AB3CE12D80980C7A95C1472FB485A7767150E152CDED6B4A61A52AEE2E9E43CFBDA66E1EE34C58C52E89A54EE0AF46270C056B263AD7C295AFA172C5CC +Digest: 6C3CB039994B1F520D30361C76C15A457B2150E10B073C1FF59E23B00359A7B8576ECD7C96E64030D568D8080466651C8FE05B6334BC27DD0A65D8235B3F8103 +Test: Verify +# +Message: 0E18EF8FC5FBA78D8362BEFC829BD4783214B0E9D06763F5FA579532C97E889664FB81DEA9F2BD80115C43E73257F61CC5B844D34415CB9F94BC5EC12997628CAB31E281D89DBAC2D46D52207C0078286FA5F9C5D4983489E5819AE2D21E947717839BAECF283A159300BDC8A9E4096A4CB297EAC8A1B2962B3AA08BE2DF6AADDE757CC7909753781FEAE61DE92C1BBC1B43180B755D1FF6883213ED5AEB220075BA1D5637A88A353F76AF9A94413970140538DCE48FE2CBE5742F17A65B11ADC5C748BE0D7432D09B19E8749129BF0DD832C6204FCEA4E9E6D8EEE8FE847B9A128EB63EE4413DC05687CD9ACF10DF5D18234D7DA289EFCEA4BB0CECAB72F282889EFDBF20859D082C0526C983BF36EBF0B57CF40555A2769CC945EE85519632E26178A18201229527C132D279A8425D560C767D3124BE178FB695BBE16FFF44840BDBEF7017FF69671600118ECEE7098B329996B8A927B510C3317B9D394DE8A008B6E2B4781C0E956F72A1B80872214742969ACE32A0DE5A2BCE6168D50BBF708A84A3460EE98C38D2D8F142032D73919A59E4B0AE37E28168F4B1D8BFDB14B12085BEA27E95DFF8A83889A94B196735A5AD5D08DB4AE8DE0CED89470FD3F7B56B9EB74E628932A4FA1F4C02DAE4EA23B529FB7BC58A230008838FDFA718BE392D80787FB1B7D613D0B086C1E9679865A663A43407EFCE58E93954AB4B3E984386C95B3E89171AE02CDD44CB9B79309FEAC897230DCCB008F53B29A5B19DF4F453A20805FAD7C0DEB3E366A8D0009B54DCA5BF312A7F8376CA804AFF20DC21692DDCDABB23B8FA82AB7157CD6E096BBC31158155EC67D8A5318CBCC44F8097D2E1F358BD59F4721A2D06112009320320B6B690CD745E78B09D7903051FAF7F9FD9596D0281D6FFFED0B302EB07011691DFB4CBA9AAB04919CCE15B8F8C9E690DAC94063A7C7125593D0A85A8FF1452CB8297D12E72E32DC1AC3360CF5A44A41EB68FFF65BF95FD1E0E86FA28C8B52CCF281DBDC803437B41CC01B4F0F96BFA83DFEB8F8BC3E95AE74F2CE88603E08846412AE168BBE91A9158F389E989E3CC5708F1020021718A101E5FBE3F94D787B6EA88F7A2B2A262E9904252346FE7DD57F111A0E84C999DB46DE7459DEC04D14750186D154C90FED2DBF8090248DE7090357C56FBC76CEE9F856743F1D58839BE79CA1D2DFDF59485715B9712B0B95331B9BB26E54FDBF60AB06FE48423D864A75F0C9B336B152A2081017D9F0171C710D48D19F2579E93A80DC63F4E8726BABEECB7DA1E6D2BAE42F9DFE6DCB8078815529AF69A747377C5BD7EFE3F4FDAD8589E92543E890E2601A57C4676EBE95149028FE5957ABD5CFB04F9C6C593F3EC59C760C9D7BE2A4D04F4730F3A6F3163B4A96974FB853396A7CA290793D44BE31AFCDC4496A0B893654C95DDE214BDBD83352EDE835D95549E971AF75560C5B103FF4CE250E3A4E8B106200E63FF28F8E5BE20DA342A90D59FA5D75685BE2EE6937939992235A4C573792059B39A2CDB8D51F2B870739FB29140889F79AE50860B99B984C1477124B785B34F7E5C4D3C56CC5AA89B6B94727E08CA213C10836FF9E1E93CBBC8F92344473A1C707FCC5261000CF0A8207718E589E7EF978F21B922D6491ED0092F5400F34DE1F5BF850D728FA04F7B08BC2110B370528A84DB1B5509B030CE48F6BD374BF8404A4F88F5DF4FA7F60A4D23A459BDAC59BD95E1A8EA7BE3BD30721DE40961238D7807E78BF7C3F225411EE8BC89EB3FD1FCEBA0EFCF6DE92D9DB7E38DCF55F55DB6D08ECE57CAE1363933E9C82DFFD43129656B0865946A90B93E77F494CACB344C882A39504CACBF27F1E1C33CB351BA2F90C2B44F12FD06CAE88B66DC475008857C1939C6485BABE4418DD20C8B7E212590C0DBB43312108BF1A371AD5FD4EF7367C71794E037B65E9FA69F941C02A336F50786BC5490717036709EA37B05CEE05DE02244A88172465925B1264847EF96099ECBAABCD9E5E91FCC1EA910F25A362E5C2A7A8CAFB83BEF71EB0A030D7704F1AB57E02545EEF991CF0A3D7F753BF2CD687FDF01921172465CE1519784D1413811B8FF1B60AAFE9EA24D55805360AA15E59892F880C9458EA68FFF16DFBC24FBC5DEC00ED6AD6A75AD1D5C0ACC600E63D8BD7F0D515DE77637972058E312B31777FCF8239C8C564DC7018B85B7A0075717D4F18796F107F20CC0B5B884A28F7EEC890BFDA4F38029786FCADB3C80A607604BC3F40B42302AB3BE11F301453A67D42E0CAA5145E9FA6D2A597D404E37A76210275598C39C4961A612CBC97D6509B8C582F7274B726D592250CE77D947F3661F7D8D845EE02A0D27EE69EF071B90B8FFD43BBCAB12EF110865341DBD924E5CE62CE120456910CF9B77EEC6B8C663971DBB872AAC529C7AE8D5C23A609B01F54BE7BF020997D78BDCA80440A71455A34D60E83888D5908148512610BCFA99005E01045336A22C5416999ED865B9D07B2E849F5A4BB3AF08790461FEAEA5C339E9DE8607890C5CEBCB5568BC9BA82199A7CE3F673ED1865FF30C5BDBBDF651520422816DBB7DBB41E487BDA0D7CF04916431E3C9118B91CB74AB492BEBA48A33 +Digest: ED0259845AD60931FA51D8A02A55C2B47EA0C692ADCB3A687F42C9E5129E884E47E9D1CE9F0B3A1E655B6BA72457E65A4B66DD7FEB3A2F41CE6A282143A3F73B +Test: Verify +# +Message: 249E06FC239EBDFF924F2C43D1020DD801E1AB4135C356673D37A376E1D4E1A8998841253C89D3728D3B3023FEECD7C16DDAE2A0E56977BDC23E8F6E77C56A7FDE7AD79CDF24412EFF10A2E2DA2ECA9A0FFC0BFF2FF9604285F468312B263A6CB2DC3FA34D9624840F7ECFF826BD42BC266B825A994BD79F6410D29380CDCA7AF7EEFEB79A93DF38A22977D2553862B1C5BA24A656DBC7F2A36F1C2498FCAF135D10B2FA30BE08F6A918A6000C94E1D0C11A458C4597E8AE388D1D3503118EB280080AB3D2891363BF4E087E9875EDA444ACC2873EA80C36D3CE536B578784F119FB282E3FBD32204D0F9EF3D3A5C1848498F1B97F53FC8C7BFADE0DF822D3A910782B3CCF03C1F41920A9B9E0736BB70AC6BC9AB9D245D8A2FD49DFF9CCF251EE65B7E0B09E7751DB3ACEB4F86A09DD1FCFF13568A152AB7142CF6BCD621C8309B8E1E6D008A06E83B8E93C230EB9DE5B289CC14F0615129E8530286262D3DAE88F65A99DD7669C88CF6CCAC9422350A4930C3786E4D16E44EC24226325F6811D26FA5CD1EEDAA87644ED02564866036D7F3F0F7385B803693223BAF06426F2AD668D4148FA5B6EB3FF1CD71B40B4ECAE4EAD0F20B26DDD87E37552E22C7045A18A8D1AFC1540BDB5F7B1642C2430B4AF5D1EADFD03AB68419FC33056846916034E1FC1EF4A6525331A41E7927F2A941863FEE2E667E82C0438F745D27348ADCE6CACE9E430438453CF83FA342D6193B0B4801EBF2D5B961B9E3C3505B4273C655C34740B004DE4650E0F335E54AECD8E444A19838315DEF32542AF4D718255B98F97E7FBB716481FEC3729F50679AFE2154B65326AD3A32D6E62FA6FABC34487F808A5ED42D4B68A07742CFAE218FE7306FD26E7BAACE95BA5706F2A61E46AF2B3AF2947657E4647DEE9BDDFD6783787CD4A34DBEC6137B1B8AC78DD21B565205FAA71054F4A175673C9D1472B0E89D73013336B3A7AB5D9E1772DEF3399C2E2A355F2B7D9908EC85851ECA1152C4CB27536BD238BA7B270ED9074AE6B352BD48B3B98FFD2D86EC79A9FDAE605199A6524E534046572E75AC5320CC8F8965B2EDE1F315B7353AA54EFB56D61C092F54D40603964CE788E06773EB6513DC9F4772871AABA3A7EF3E7EC55B0A9AE78D292E11C1E97DD67320E7B75EE50FC2D2C6D5BA5988E23F4112CAD2BBFF7C8764AD65A04425F55E625178868EEF22C2339ECF7DB86077B9FBE52DD26FD5178A8330F2FD6A4C705AF9B0B2900BB341C83E90CB8CBB6BF6CDFA3955ECBA9D36130E99808DCD6E897B8B2316BEE702DF583BF909FEB9A560E9ABD45018B06BBD19B4227951B8E4B1F21ED3888C9C28B84E42A56E4415E2D86FAE04C659C61E74A46B1DFBDA73FBC28C38BC9DB96EA604F1385F9EE1FA38E8063138FD21E0B6EB9BB395C792C048BCC0C2493D7D26A75A120AFD5C6F43E1DC1641C73EE5DDC4F9E6DF898DE64A5DC0F69225C24C1A1CB1BDFEFD5243AFB2F2D6CE57CADBD0C723D1F3B9727D98FDACDCA2AFD262A67E451DD2411A66E643BD3DB0D8048FFDA29CF2259EC0504098551A6CD829AC4BDB48CA8EA45FFEACE467A9D72F64C2D1FD20ED69FD38568405EB11341681B505CDC50311A19CE4FBE4EBBBF9237E45AEC9E8CE0CF380F4FCAF06FED8AED85176C0E9875CB4EF07D5655376E53245AE96CFD46E549F786250A8FB6195896490E44C5B80C92DF8A2022224F4FA9277D5E332D12841E661876AD400CA1C21DC968CE756FC2AFD952098E9905A0279E4A419D2BAF757382E180D5602951AA79D631EB578810AFC9620E81EFF8E1D649B761FCA0C95F997BB00D72F918E524065342CA4114F02F0FB92AED3465AE004EAA33233993CB6A2AFBADB070139F48A1ABEDA58621D45FA2E380E21EC59206636CC9968BC875721451230FC1C115E73E64A2039AE58AFE4DCCF36AF64C22D8AF05CB95538617FCF4BE8BD1C45AEB5027C3D41F73010C1D4066227FD15022457A6594718741AE6AEB9E7E9F14BCDF8DBE4CB4E66C93960B7B1343D4FD73F959ED65E0D72C6741D5E8B0E4838D9348E8A56B2F67F43806EEBA68176EE6A29B56C4CD1B159AFEF95451352D5643B5855E65A0B1552BF18563648F9ABB15127A94DD3D39AAD5E2EB5B72607AF9304C13D6639432549AD16351CB57C0D6B7C91B9635E8A6C01A95614107DF316488F6B5285B62E5877AFFF8E952B6B044F4F3B34B88B00BA2539A1C0B98EDCC6CC5E1065944CD348CD01F510437B82A6BA732A7175923C61635EEDB867E16BCBF976189FFE78EC7C4AA1FA2605F3AEEC114CF20477B169BFA1D9EE77EE3D6AABEE2410063740FCD5E0543B8AAD38367D52AD21662F3E38E454373094CE138BCFE26340366600967FA51A02DD9570D38868E9454DD054175482A519947B8DE00A3B5C60C7EBB1D9EF1FFD0D80BEB8A3FACBA0E54584C6E243DBCF1FA9CC1996BDC82E100F336485375629F991D3ED99A5C4848C4713D7C83B4B15CBBBB31F1E46641320FCDCFB58D23BB5EE16FB42430F3E6A6A71C0B0203840A28D6506C45C40429BC75F505BDA6DBBD0B6FED42704D8FDB670ECA7E04D38605FAD523C862F8913FEC16875E5D97BD44E26A +Digest: 8EC13D9BA407F9C67B912B9C5185B37CD6C99DCBC41A16E33CFF056715483EAF4966ACA197ACECA6D9682E450E8FE3317E1E6A0D548F68B386ECAA696400E605 +Test: Verify +# +Message: 4D940094C7807B4BA0E43B9645F60E9E6E63F7BAB1D6E4475C20D5A21C1940B1A4AD4C7713E9D6BBF45F2F62E8F907772CA2E474A189CADDDF0B51827CE265D2E85CFF82246D30CB938E7927FA63ABF3879C60ED05F6808B3C526F530A1095F79253CEBBFE840717EB925AEA167F362DB5B9435BD57045E3888654AD8D1B5B49B2B1ED2DABA75DE3B96E97CE0381F80941B62048CF1E5BE12A2D0A0831505B3F80652EF158E714FEA7AD3474452A844E8D20B6D4243A46FBA6E7F69CBC2484D238C670B63B8AAB7B41814877B30BB952DC22590E6852A2BAF3BA2788D1B05F58AF5CA2F31E8F35F8B1965E16E7E18129BC9DBB12669957B7133DCD63445FEE7C4A2A0EBDE2A0B6DA7803FC044334BE3F3D7F5793F79AD2BADF076D9E07022E2FD6C55D2BD27AC0238BC957FB1FAF710A9839F18E328E65B6A613442646B009E903D02934F2BF0E93046B1AA778F7B852E81DC7BD191755BBC612394105554990AFA4C66AB6CB7241B94BF37EC45351FA88C0887EE27EB6860B46AC1BA0D66B7CA16202ACD08D1B4693398FF893FB3F6A98166A4715194B516460DF2B6A77107F96533477DFB95E80973CC7317EA8DC63864A3429BB3D8AFD1C5AD590877273EC44CF8E2A46A0545355F592B9265F1A8E318ABA6520CC596264AB857C91FFC02FB3BD164FD777088EB6CCE7ADED483C340B18FC4ABDFD6AD6BA2494328B7A68EA80DD3065F929EBBF03E44127094E435967DAC92E90A806C6ADBD32BBC55E877784A42678839374F936C56F87373F942CE30193EDAC81CADAD89FE656592696350FB4974D45DB7BB489CFF12A9221890AB7D54B1134F73666CAE8D859688E02B3F66BDBFBB5BD2D8CDAAABEF336D887B3733B7BEB5452D7E500A55AAFE98B9B35E89949E2350FF121580D1CD2862EAB5592C4EB29FB31D6E5E27C182CD724C4A6C25F5DC7D7BC6E4558177326D6D93DEE17D17FA6356AA88023FE9A035C69577AB66A36094FEC4C009580A05AE038F1CA9313DDAA1B212672D2537778D12628346CE27FE5652DFD0B8A4F63353077E6BBE0B83DE02D45908748A65C4BB9140D8B804CF95F294E3B8EC28D67ABE91AA2157CF6EF65FC3540F31996DA442D62270C4F523057AB1F08EF57D718835332FB2FB113B9494EBDA644B661744CEC211EA8F6D59F218EB6A428B3F8F0DFE533DA87C00C3994E25759FC8E1E3450ADE1B81A146FC8C39D7ACBD84EE25FA0A39BE4F8FF06F72E6E9342106BC394603FD22D75488B03ADD7BDA76BC6345665D5E29EC0D723FE096C5CA66890D691467E6C5CD8F2733A16C0BE41869433E2C6BA7AA71A6EEB898CB8FB4FC482D46369DFE2B0BDB1DB8D908CA3A7C1206A9B212CC32F6B49EE4799D4C4AA5C1D10313A87231A14635A09C71F2368F51BC899B0385EFC3AB40ACE249CCC3E6CEB46FC205831396C80C814CA8C712ADC0D251D10E2C5782CC0429824A64BC75D30F3EFB918DECDE6E54D07794F1D7013412721660173EDE71505C91CBA15FD02C5F5F3B5AA2D9EB733E73AE132E62F31C58254A43BC7FD5603BC43AA6F7E88CB8BA05B3FD7BD1E322379C675F88626C7EE8CB5D5EFFB8D6ACEC1C72972530928B17CCE46E0E5032C855AB3B91EEE65FF7C6CE51E8C675F95F43225DADB69EEE5CD3B9C68B8D316DDF6157BFE343712B9FFF6C57A29FDF6D9BEFCE34E6E2C46CDA2837D2E4563AC79A779073356E311AA745DA0D9285691CBDBDD0C870F12D3B55E4E04A9C9F3BC394DA6F755C5B106EAAF52D82A821C9DE4217F2AEAF4322B95FEA700805B7D19BA1044477AC7CB7F20F58381EAE6273E3F7B4D089D4D7F51D354E689359DE12CDE087F74BDB2C88471E2DBCF8BCC88170DDCB04036E38652932F54B3F780595B625E43ABDC131333CF4DBE58958CB0571487C74D8FE7AD5EEA968AEA55BCC047F9307DA4BB2D6242DFFCC3E0B0182DE670C87675BB2B90F9EE3B2738F45932E75C55ABF0C3C69EB7AF7ED9A23E36A6F6F992C2C594FDCAE9E6D73A5BB1496B15A4C924133F2E748174BA0A8AE903F05779AF77EF4197E6FC8FA070BBA9E9BD07AE8AE47ECBF02534ADC1C57B5ABB9471DC7509F8BE7CA6FFEABD8DE37B363368597DDF65F310C39F7748A2F2D2140C16D2664C1365E6C967186B6D8453EDF8598833FE2755CA053D199DF95BDC34350202BB4D830EF64403914FABCAF4672B1A07B62D8E466D481AF5E27C4955B5F39394E62565A466E3B1EE1261B173BAC6B6695E89B2EF392B6FD7CA6ACB1D0800D25070AB193A1558903FAC7BF5882D0088AB382D2FB70A26351FA3A57596003F32898252D3DBF3C70566F190D6E9A4A0214EB6A0F8696A5BB7A7BE6BDEBE069656DF339CDD3D05B740F04FEB158853ABA59B0F63B923EFBDAE4B092AE6C2758C85B797C0DDB96CEA919D7F71DB8BC9C8A673128B8FEE4742F1DED5BFEBD7F5CA6EE9885E675882D7F7EB670B24BB76D881C68A7F4FB9D3F7856DC972094A784F286D3D3A7FB8781D8EE2D2F92B347DA6D28F66D9745C922D08C87FCABEFFE46C29A1406D40F8AD8E8D6F0CBE38DF8934640103D521AF86BC24CB35EF0EADD60A4D9D0CBB651E636798CF51EEB0CE43A44CBE2B5C3F5C9F48E3FC10A59BB5F64CE8BE07 +Digest: B5FAE7FE360160DC4A6C86157C9E25F79E0C97AF5B7357F7D28FF4A664DC1579A922A4A64055DB2BED3E9B0E23F99F41FD5035169D9983E0D2AB031F104DB771 +Test: Verify +# +Message: 3123EA71E78E8DA6862F4DC9C80A9ED982CC08B0D9BB9D03713137C104435558001C9397B3904850F45D41AEE799A1D2BE69AFDC8EF19EACD6AD9C0518DFB9B7415A20DA1B9022062AB6BCF43A2F33633CAD989C6F0C2031DC4DFC8ED5AD5796174A23A9783DF9BD39FC034FDD0E20D73A19C95CB27DADB0FA1DFF3F65B671BC2FB2162EEA91E4087964CD87E50DAFCA6CFFC3B015E48FDB903C42577761B795D54B7F4BAA120AA097EDC0206DEB725AEC76278172554B197FDA4554BAB00915B61BB01DA7DAE7F0F44134C6FB941782689409DE22B3D7F6C7AA77511C6DB5C8A4AADE818F96CAC7F8787A0B6AB51E244D0E174763936202A2DF45C27C2060FB106BEDF104024E5577E9F18D5A9EC5E982E2040EFF2211F009A9845D772A2137A6A32198C5560BFAFDB707453D513B0763FAFD0F459B1FAE18931EE56F9D34AEB1C5B819495B650D6F527E654D2D1DDD128D14C17C01659C0E02A6C00B457F7002EE4FF555A2358D7CF145AA463FC7501CB3AB9B7B5A1ED5A949CCFA31B7B966A2C1DC2539F6FEA749DF8E04289AFEB7C3A7ADE6D5D6E1B124ED1081FE3955E3D72575A0359B5783DD9E61B6EAE6AE752036C0D42D8813F2BF1683777CF8C75996BB3CE198EBF2829EEA42930E66E22F825C6A3C335C204443474AA0478312221A224D471A0817413D0C7ED9FE3CB7E9298464762743ECC21F20AB99C020AAEEEC4898CE1ACCE3CC85A57E12752EF642AB652677C4B9D35C86972D5D81E81202129DF9599DF4511E406A694D63122F524EDCB1123515DA58F984032482AB3AF7EDA37D340A945E2D4751314FEC0B1BC6F839250A9CDE2A635D573ED91D4042023C9BF1835ADFDE9BAD1FF428C9E9899741F79D754AFBFE1963A6BCE97F58164E39F2790A86CFC051F87560411B74A864872565C0338ECE5B6B5ECBFFEBD990113936C1BAFAEAD6991E662E15E73A635F191C2254945E6FDF4C7DFED94CF905ED584C57723C827F4F1C37C799FF06D8B088904E31A95576B107BF8A9F229DCE95035583441246794589F14435CBB640FF7A43AEA754147F2D27F95EEA3C97427262C32478A16274AAAB3F34C3276A99C1607952716EE036DAE30D88F14BAB010422320B1A3B055BB136FB83A63986CC708CD42995DBDD9127CF3B0C430E62613B7CD62BA25CCCD287921F3A3909EB7965935BE6D08012C63E27767FBEE45DBF421B7A1A5E977376B769728A146FCA8D657393FE5B160225143A277E4321826DB45E838F6CF8660D4A63DB8A8B7F5BB4E557002EA249B65442DEDAE9F93C99BC00E1B8FFAD8F539ADF338EB14F3E5F67496C9DD869D4018345EFDA903423CABB5C281AB6874BB684830BB7E004D69B3D7CCECFBD83362A91D33BC55037B93CAAEF07DAADECB1CA3470D59445BD6E86D5F1CA3FAE4D22C13BFD87A02EC9022173C837524C8FF597976ED920542A614F86A0978742140D6662FDC8686C3327316D62DA2FB7DB6EB6FC17F1BEF99B04E0096613DD19BB1C7ED42AF8E9D973782062D93570526F09D5F9C879B0A72921043D8A2C7CFD151B362F2D20A548712D30C810158AE5570889D60E54C6C5BAB0F2271AE9D57759DBEC2E94802754DFA9FCF74D084D03AD029B07B2816F31401E955218AB38988D6D243A4CC6FDD5AEBCBB0B0F1C1F8EFCDFB1FFDFB01B5139C49DB4FCABF49DA3D8D04C6368D293AB4BFA9F26EE031C353974113367E59658FFB4CCBF13630B884AE6344A84BF4BAD43D6D77BA35AD26E5745842B8C0C12194C2CAF8D64CCA399AF4398224A7E81FC178F810D9807E633E17F64B8699E86AF64B5048181EED0D650F2FE6478E7408AF2DED8865E98DA44CCC6F31397E950223944AF4413BF8736112ED560FFB72309692E3311318440E49893D7D3B254BA3546B1AF7B14DA1FE2D93AC0EFB005CF5453AABF43F2B6DA2539A8F9CB3A08584DE23A34D0C1ECDBC27B137D8069C04F3E3121A52C932F7DA241EBE5E2FA1E2B4D31D8A059502057731461E14A003F4BD15F4C4D2B8A0F1F3355B55168F65BB1E2EC2F0175FEF88E53BFAD275150920204982BD1915EE0DE898ADE5D341E44D23C1A64F909E637E7CC620C2EB9ED45E96C478496AD301539CC00136DE99EA20A806E265881336A362515CA1D0699A683E4E47C13F0DE49F9886F11C2AE0C35C0E9CD5921C3AAAF216640AE124375B498F8D7480C92AB6429142C8EEAAF054C7343686A95B0D0CE6B13A3FA9E86B9CB404994708C70914CAA381EBA678D4578545E728D567289B36573BD71EBAFA3A7CE4CBCA32A60B0B3703C0952B225D333F3911947E108E6BDAAE36CBDF1027C28F566133577BA08EFD1D236DE8EA0A8E0E5FF7BA47ECCE6736922C661BA313C68CEDA21A8DDDD425995B00F43F5ED4A715D89822E9D9C3E7067A1CD4A32C62ADAFEC901B80B89DFF07328E6BC32ED7E5F6768529DC94ED305CE878835268F99B37A467D576C240B50BFA9AE4F11553E70213EB252FB8AA687BCDF13985B5EA85B9D616442E27E5FA80D2EC29B554CCE7D39F44C4C515A9CDFF1CD62875EEFAF414FB2D398EA5AA984227F4B6D80E96554EACB3FCB75AB97B8369E008F4EBDE0B5C75E2BBF15CEB6EE97DCB54677242FA97EC83901618D9E20A2576B9B2FCECF92E8F604802509C7FA2F1B0389337101607921421998EB19B0E43F44AD7DD06DFA +Digest: 928207AC56A7C95CEFCF2F266CB086287AEEA5EB7084D8C1AE381B1141180FEA9D37BBF5554D5A33F6B734F570C6F67EBDD51A520E2CE17F82531743108B1002 +Test: Verify +# +Message: FA716024A9B208E58EF96133547EDCD8A886824FB8D3BA9C9BD15CC204213C36FE95F890E3D3AD98295AA639E8FFCBA6B77B57C548F1DE0122515FAAEC03766D323B0C6DF9AEAFC231A35F96A6FE172CE22B05649141B13705534652352DEAF183F192CDA3FDBA6A67472E1AD36271D7024B3C65CD23B9EBF9E99C57BCC808185B52B22180B9A69F255959C6BD140158B43CD37ADE597EFE33313F5F446540127AE3274100023B4B148BEE9E384D9054006E74902474AEE9A0175DDBD7BFB14889E24583379710C039C1D8F8170FABAE85D8D4FB945AC06FF6A469CAC775B6272AB45E21B0486DF361326E12D99FA68E56AB18361CDC6797152457FA8D13852F0A693DFB7424B951A140FAC940445275DFF0723A50CA25CF7C91C7E7A6FCAEF1BBDB6EAC43C8A59F4E4153474C173E170143B4535850F452A6875175CCD8B0FCF08334D5F6DF3A2A03074DC2AD5C3C4FEFF7CD00396569B6815BD6C15A96A9E8059F7B42DDD56D54F09AD877FF17ADC7C505E3D1E8453D5FEE97EBA40921657E8C6D96619BECC03B55DD8F2620D6EF98406DFF032C4D1B26AEB47C54603BF47181E9E602310E18BBE123A092BB7BF2A6D8F757E23D638734B5B0425F302E82C6865AACD2E012CB2E17C67C9677D8C540652495FD729FA5D1ADD9FA537DB5D522D645870251EAAF4BD25A52A5D654B1670C0FD75CF1FFF9DA7D73B612246EAC0ACCD63400714EB6CE3FB7BAE8054F03F40964D6AFB3F283C60367F32D3FBC7E0D1F1BB5663FC24017B6AD5B0D74F4B7411B96CB1EB67A3E5E9865D67B1C432FC30E79338151CF790CCEDD6216487144997D4D8829445243419EFC0EF71BFF3C641DCFD377B74AC7671AF22C70A9D6D93C3E7E3319887F042FD0AD8FF5EE4D79CC04675CE334F697028995CF2B0D5C6D790594FF83CE558BF55BDF8307FEFD078FE99505B8322A92ACE31AA5E8259EADD9868B9BD4DB9EC09EEB45119DF9D16EB08942BA7F0C7D6F20E649F23DC45499608C444D76018590108AD01AAF8364306182722BB6F62898AAA46F10A16B376CCD4EAEFE6FF3DF8DD2FF2A3FA461F237C1D355AB4260F390FFBA005F1A98CA6C49389DA09F89F2772C4464083BEA4BFD9C610115117617A08A15AA729DD83240EB88541B56A5A155641A5EA23E8D09B11E97B39491B216FA41F65B90C9F77C90BF59DAE16C73577FE931CE4474ED5077F515081E27B53C1DA45B93C7A24A5339503F1EF782842A67D5F7452FC1B2A7EFD8E73949DFB6A251C57AFAD5B7D9A310E795E9B22D586C055E4FF57F918B779CE09001CCCD63B93111913C0402606C7DBC22FDECBB351928C19C908526083EE7477E5DC1A706984E488079C55B43DF9CE757153D2642A59DB94A009F9C66900A3880C6142468FB7BCE259B0F8EE97ADDAC5BFE8A6C3843999A0B1BF7BEBEE9F083B7FEEDDF782134ED9C94F36A2B253FA587138D5F8CC014D7963658C0DE0E3B08B6EF38ACEB627B7E6534E3A61E0901C30F9CDD51585C2609B84B0EB83654067518B695430AE7B2531A16EB56CACB48A4A0B9908AF0705C39F55FA1BE236083E926FA7A9C2AE30C80ADBAC6CBE6CC2BA7EAB11E6183D6282E48D6F4380EFB81DC21C920F1EC6D69286BD6B366F9DCFB4EACC2C2D91FC4ED4F6E960619B85D078CE2E4D58154C09A09717B5BDC5A5C56217B9E85D17065891A3527F34EAE7B3A1BA66D0A7515CB1F08CC9EC68895649A4B163F95B40FF7FA227A7E957D138693D1AEB318627B3A2E6F4C25101F01632510EB74B65898824D10FCD33EB75D791A390D65845FDB0FE93904919EE50EA4FF91B4B5DF197A04DA603B90113219C18709DCA3939EB3B4D1A9A3ADF01DF96510BF6875BECC350E326B35CC14DA4557CB105F22269A99E8882DC4A95301D80CF0BA198DEA2557843CAFFA54B3FE270E077001CC6274E1FA24ABED86717FF0CEA37E6A9FA7224C95191E4B23D59D8D59C3D65A8D8D1B0975E9996770B238D640B72B7F844CC9AE1843966F9BD6A5CC072B0DB12516A8347DC1B0E73C7686634323C35FDFC8E6B210C82ABCAC87D3917F2B2CA2D8DC8FBACF5FD6AEBE8B515C18186F72F4FE87C601E5A202430ED9CF3FA59D20DFB089394DA065F403D664B4FD8B1B4B18D2C0E866CDEBEA6130078C062DB2B8964748B9F8F7EA755D9597EA17C9A125218D6EB2B039A5C133325B7DCC3A9BC0858855F8DF905B5F3DC384B79629722ADA42C3F0A6285FB803803876BDD0E81D167A7A42912A3511F577C945DBF002C0E2F2C2812ABCEEF9CD310D847A478120108606F91A0B1DA58F3BD8297212F62A77FD2FA54F42DB68BD9F1C045C0431CEF8327315D240F760C61816D36214042F88741D9B2BDC46AEAB2C99DAA058BA85B9085A34B58A8353FD14E0BB388DDC035C36D2635F0E6C67D23E966C44092C5D3A5833BA7AB8240ADF29E02C3536A20A9AFFA69C46D1A4C8B2B0A42B620F104D20FD58EEFDA8D013440FB2DCDDBA377EC42F28976CEB38D5B2DC5B5DB6A5F23BC8658FEA0DAB7B4F8FEF0B0A247D99E904174834C0C8C072ED4C9CFB7CEBFC6E5C6D493CF798853BF161F157F58772F089288CDE707D3D6BC92A32EB2F90774A5A737C56DE356DABB2948F102C1B7ED8DE32745B4EB06CE3B014F955EF165FB68493B1BD70864293A80F667243CF3CF06468117A4D31899EBFE66372DEA41BBFB9656AC730C2156E1DCD4A16DEE862AFB00EFBBF14E90D215A879BE7DD20FD45B6BDF9727B2AE5324E6801BFC23410E34681CB +Digest: 3CD5057D86E7EAA453636411FAFAC815358064FD717DB90EEFAD814EA3CFD2FC1E5D1E72AB90D3093457A925BA43EB9BFEEFBBB24563615DBABAF3C8A02553F9 +Test: Verify +# +Message: 266DFC3F2688DFCF78D81F54DC981D1775C569C601971E53DB4442A59E66A3F66D7C99AB7D17F62FFA62F415B8FB5C8D475024F5F9AC6D6394A93CE99ED43C83C3C0CBBB28B2C6CB38F10B468E579CF296E391B61586A39732159114CDD8AE6F6D82966B0C4CC5F9C29DA720FB79EFC1C20CE5B42B20705DF0A23BA9C822B428FD33A1131956154F9EF28AF3F5C3D942E4EB898371C42E8EACEE7E4323C424DB93F9F7C1561730C4AFD2ED470E8421FFEABDBFEA48614F22AD5C56594F57D90850FF6654DC9200D98BDF7C9E495D39B403B7421854E72A49EDD03158E5E979A8D42356DB563415178941B6BD8ECBC25EB73E44773F7A4894D2A0A9EFBDDDC5B13D3A0D59E06EED88D53391CF5C1CB3445A60DD9D0602AE8816272F68378BB1E73F6D6964AD39EA57075435787B74F61E3FC9829849800681BA5DBE882B3768FDCEFB09AEF91BBF276A38F79AF499CCCB2D7FD45C399A5A8B077C7C5A169C1A2CB209D3522B12489F5B63BA1C0182B7821BB0AA31FE0408CCBFC73CF8CFA5BAD75FE5CFEE0F4E39EAAEE8286FD632D76275A57C7D142107151D428464A064BF38179942691110084C0225470C4F4D474D9922CA8D5E566D6629997C6A1E10C26FB4D4F0BA0403E27C601669A2C0A7F7312048AE30C32B15D936C6734985B7F9F5ABB0C9C9190E25C7F5F6C73CF36FB1B2E789ED4E30B6A06E5968F7547899984F66DD6A01D9491A62C0457859CDDA046843CC675DF4326DBBCC6C427C74A14FA22566BAA27739BAD47926FC2269F030C306AA4636C01E806E5DA393F827677334B6B944167A79D22A122B253FE75A9AF3026D6B4BE26D11DBE3E7B813F1B996F96A98FB68A62816AFEFD8A0101A7A0A4C720A665A2A0FE8E2702F2B0FF9FA290F3EC75F289F5C27DE187647563A739FB83F8231EF21F0A8B569B9AD7A934E75C0CBA7ECE0C9D265C6D54277A0958DBD78F85398609819F565F90F30D8611F1C56231FDEFB6D2A1D5FB158222E24009DA14B337526F32539B79735E979BA605B8B2AA71EC6D15B9B628275BE61E921796768E0934C57DAFAC362CE6584072CA0AE5D5B5EA9D2BA46D4411236BC3EE2B6FE9F7A2E7351946A7DDCB5BA53859AD14A42114A7A597BD2CF482CA4B47162749EB266E93BD130FFFE67D6B994A7B11A65B9958EEAB915E1E3C83DB13BB1AF5C328442EA6407F6F04907976EB1604449054BB98BAD2E10E358DCCBF5BB7F15F3A66FAAC61EDF6C0D241D34275AEFE3C4E604844578243B038C2D5B2F6B5419EB5451A91CE40F0C3F5EFCDF9CB914384A89641422035575079E6936FE596B93040E416D30DA78649FFFA67D7CF8A9CF8C46CBF5AE7EBF84A4EF432D2A5BC99762568046E97B4754535E3C2B5F82346F6D82252B060C0D9E2605B33ACBD36D87267447F3AA52058734A7BBD94072C774DE571D0B357CEE2204EC6CDC92DB8D3CDF294DC0FB31C53A74741D1CA6565E6039BCC361057EE148AD06353FD2D300C2A331067BB6787A2D36457FED117F9E30CF803C03AA7B03C8F747B2709D1449EDD9E56317C00B05FA06BDAA1ADB7FB1C74B17C06F3861C33D03932BEAD5684185DCA26A7F674BDF1EFD54084E851F839847968C0C1032A5F3C13FF80A85A09C547610F971FF52E541CF8C6A1D0FB1F3AF0585CC91748B643AE5320E549C8D1135CCD660D57228D42AD2731980D468D351CCD39342CA80BD2445ABF7D12512C2B51286BB5A2AA0B7E20B24ACFEA151DBBABC2720C8CDB289DB7B32D0FDD4BAA4A4BC2548B518D851EBE45041DFE33E2282EF9E34714F3173C5B00B1555E375F60D3E7D12B05ACAD77AE6B5B6304B0C59B30DAC54E4D7CAE473D954D16FD10E2E2F2465C108ECDFD18EF85328717EEC3AD34292ACA11898098D704B6483B4AA5779165D33D24A2982E3C883A6D101185712081EB72DBD4C311E7FCD22AD2942F605AD882B760ECEAFFC0202790BBE24E62FF095D7EBBCC99FA56D8FAEE409B1D43E213B045B434C221EE89A9EF809BC02213BD5962ED09809EF08A03A111149148DA547FBE68A0CE1EC60067352B132575A0562AF7939465C197BB6E4D2DD86F073FAED33A66088C5C810FE16D73921E3F795243728E794160C2C1D3EFB367697B934597939E3FE8BE0FCFF981DE444E905F81B749CDEC8DA4CF98B2519568F184C63AAF189BF6BF3C2E3F949FD8936C220CC7A6F266DC475103B7EF28802EDFEF6ABEE30BF0827660C06F89C12CF67239005ED0049F41960EA9445EFA28C5A5E04C326F02DD7DB69A22809DDDBD0A836F9339D975E08604DDA7ED78203E195C80894930A7748E0A084546DF6F77BDB3D1EB9A387AF2A9AA4BC14873EEE82EB83CD872B08E3D6E7FE03FECEF4B4DD14D10FC8BE1769FE892577C9E4A7B3B577AE0979C908094A8B7889B1639B1BDFD52D49F60535D580BB48DCF42E32EA594386930D2FCC6DF965A93C20B00EBD0348E548B9799DD31EE181C8A1C21F97F602A093090954B7D352B1671E36884A144D54C8A59C2A405CB2F789468ED1D1E1331359129CBDCB7A92AA6957CD3C02F7F2B3B3B45D952A5616737139BA7E78A6CA94EF707AB96449E698D107489CE4E061F1DB398FC5FE621B2CA088CE3303BF91069E9A2A0E2F9FEA16C64A2B6CFA7AA1EC74616F7F3368196E9C53C50D44F2203B52223277E0D0E4485FA9E9ED8EF1F5930042EB14A031072E0EE0AEBB1684959881CDDF01A1DD3F4609C6081A768568E9FC6EA783CCFCEB920D5893CC6CA4E28B0334F28C56DA59226C0768F664B275305839A7258A +Digest: CFEA46F379B0490BD393F16CA188DD6CE3D263C4E337A1C954F90D4CBC79CECC8066A945AFE46A2A934B83530435E94B36096CE8E8CD408BB30F88E842E02076 +Test: Verify +# +Message: D04E9146067B1A34874CC9AC9D6C57E7A0E572D40207DEB1931F33FEC38BEFD9DB0BF88B315B95778570FD29B0BBC902C888320575215249802A193A13F3750D78DE8F37587B3FD2EA935667926B5C70E5C72715387D4CFF3F2E21889411BAB265C8A2FD64EC888E28038D0A8DEB5DD6870EB940BAB9BC06EA9B7AB79C6F749409D2127DC8917C45F7A92AE00D286BBE0CF939948A19D7104CB2D48C7D56D895705B0D9CAAECEA010BD8B6219EBF6D98BE102BEA1CB1EAC026C846D7F63507CB8D4F28E6F2525352A247DC2886C2361B7E1D457BCAFC0AB9431AEC08DEFC6ABA237E9CE9F0AB382570F411727C29D7655F385F9A846ECE38CE2606BF63E4F680B9E4CC11B227465FF030CE6CF89D4F792F990B9D66D202905E51F0E0CCB473FE9F28B86EFEBC9E54EFFB13AEF2775808FF60135B2DB7CE5454FD66522D8C76EDDFDFFF68A54BF2BACBC945D4985A4AF231C4055E092BC7CB3FEEF71B18669F10421B1D1736E59DC986129AA935D78932F5650E703E8DC526B833F5B0B1D803D79A791BEBF673D0B5B6238F86061EE90E0ABEB7505B1FF0B8B49D71C8676301A3ED6E15ADCE6719EFD36B8121530288B423BA01375D8D13034B44EB895406FAFC1140B3776FCDA397BF8782892590BEDF0E460984F1DBA4E6CF8EF3E3A5B06BB10E19E04153180EC3C88DE740DEE630D26C3E878BF3381F3F8F15DF5D2DFC35FE2693A16AF7DBB9D6F9FC02ACB9462CB508D82A4FABD2EDBD259C9DE863827FB59ED03ADD0B262BEC6A5F904ECA87C2737CF27B6A9032945E9137F3026AA88D9418FD79B329895EB228770B1CDDAFD458463491A229C6E3C41D0A084D322E480A2A907E818B1541ADB43F3470691CAC728C124EF67E699B455EA8792C7738FFAC19E1BE3CE377DD5633B7F29210E00B9EF9D3161344D2FC5C97603F931F07ABE1ABA9DA55412B2008A89C29E7CF515022AAE13BEF0A783E52AC08E554BB3203B147D4B973CA26B363E74CA5FFCDE0C2717E92EDB5E8475FE32BE3807139846C407F51F40F63DEE3CC6EF5DB94D5822CD7937CC175CBD85C7DB0F26D5BF1A3036C2B7A76106094ECFF74A0D8835F8A1649156FDA5CDE483334644CB4A2BE7C9FAA58842B8A2F4FF327383B85FC00C537D5C358A13E32603BDF198ABE1B436A92363C7556CC858C0149B8C000D8D1A2CAF640F8742663147A64E11382FC74AC4494FAF8A71CBCC293D71CF39CA9CE5A22077BAD6514688FF5D9874F645E3DFF3A8976A7554D3F99F0967FD489B33588D3B0B45BD1DD116A6DB32992EF8E71805479388588FD0B68B574391F1BB852DFD5E61CB965609928627C70C7403367406931F55258C34ABDAC004192BB1524624B5058542C9C0DEBCAB694E7321575F6E226DCA9F00981CF4E0B30546BF30384A9022AC5EF41037B89A0AB955FB38C52AB23C7B102A67809C414C8A74C05F9AB0983FCF7F65D225A2E18170366DDE1EB8DE35FB621A3DF852F7F8B4E61AC5FC6158372DA20004F96617CA22F8D624D591AA6EF1FA3ED44CFB7EA4C605B99C510901F7C508909A784DDB621723289FB426C037C35B7D6427B9562A701E757B34D685EB96BA2905E5A9635498F1B0D764E98FF9A3B8EC8EE5018217B145D1BDBF5253FA88866AC48788772C036C9CF6E021E1543151C090742791FD077E5FB8AA63DA3E68122E113D53BE7FD363C8B3241D73991663F12EC1AC9E07B79C1019A167783574D1AB321244C3CB1AD59D15E49F938BA6CB269EEAD40AB7AD7E5E65ACD6E6F43C9977155B2D9BCDADACF872445314C8BEF16BE3E8C8384506F8C8F88F66FDE0EF351FD95A65FCF40289A4F010D0661EFB4C9A55026FD4AFB4C2DF2A52CE610C8B0871389ACA473A632B1BB36388180CA9DC23D284A8AC9F78D5B8E6C65B2326D715C8724490E6DF830212372F2279D0E1C7162ECB6923BC83D8334C1A6D91D00060E1B5F6EA20ED39844BF1A58546B32BF21C0D7E302998865A2FF76AF1C288E226B1E9EDBEA4277CEDEFC1BE57BC0DE2CD1285FFDD0B751C5FC79DD96CEDBABA62EE0659BBD55D2BAEC88B4E95AA33F0B4F2557B607AE42A31F428892AA9A15C9E393C1E567A03A4E78932E668FBE9581285F161A132C5BEA1074656E8C690BCA2EB0A54A40295EA8BF30F62F55512555E7F4F56B6828E263C36B6575E7A70EC1635291AF3ADA246DF380F8264DF21FD7895642A589A33AE82272562E092C75B5E37EA97982888F64C8B067894A1EA0D6688113196FA857EBDCD301CBD27CE800A22277FF1D4E3DC7221330D681166ABCEEDB98807121E293E0533D30EF9A1DEF3FF34BB51CB26E45AFE9C578E08BCBC5C35D2980F822ABFC744D276AD244D83BB83CA0C9BD41D720C4825EA99406C3C69B90C738D8CE84380965E7470BB1EA4027A89CD334C823231DE1B1565033AF2962ADC438530F5AA81435349217ED3816EBE081CFDBDBD3E867446870A5399D5656EE88426136263322D74198036EB46E57C92D4741FBAE720A0210A10D30BD9675F513B44277C4F2DED7BAC13BC53F1245A21AB85BA89E371BFD066BD5716A352DB03E2E7070770B9115520B2C99FF66E333FA64DD17321096EC184C9DAB7C8DEF27C39FBBC7EF0C25FC95D804988D440786640E898738FF29AFB0B3CB8A19589FDFBC5CC888D5242B217018E8E31711AC058B11A67CF14E97AF67A44F69D181163C2C1224CE059EE84A9489A0CC22A5EADB85451EEAE1618024CF4636A3BDCE5CC8D291210B4EF5BDE2F873A347EA2563901F8D378971B1CF2E2096FC535D43480450CBFF0A +Digest: CBA654EC960D80232E40934347D0B836B02396E0BFFD05B646CA77119CFB3E588A94E3D44C74EA4CDE451002B56288272012AD20B7007BC84F7660EA4C874602 +Test: Verify +# +Message: 95CF20D9BCB46E0E64C212D740FD845EBAB5B1922F440526533C2F5E980F569375985EBE4174A66A52943C9E6339DE152539821BB4FEE3F3DFE1AD45F3DFFC21CB5CF1D06EAB52F1E18AAD59583A6E88D6CB4E5ED1E8B5C2CD8743D3CBD31E23CAC8275FB85D1699657842842950AD6DABB06FB59EA64338FFA9083AB0BCBC902E6818146CB375089B11D625E17F406FF69E3720601AD9194E94CCB9325FD482550FBA38A6BBCFB66361D00D8F439A9A1292FDFFC9D82D1BA20E7CB12292B4B38E3D7F9E512B91BA488C003FD3C6D14F46A7268302F2BFA62EE4A885133E47D04106942EEA7A40FC9FBC443DFF55D26708FF24CCE3AA97F26C5899E8C6EB6728E894AC14A33CF98C6721E0C6D20F9D71C7CF25AA0AC88B71663E02A0006C49696F4A4F57C99397233339C44876483B6D7B6880FB1B5BFF76010FD2CD9C2C655408E8F91982A21B89B6185B7DAD958AC381F2F50258D484F03540529B60B8605C284BA4901AF9A40AF69C388A4E75E5436408657CD5BDA8B94F4D674847182E3FBB6FDE139D58EDFF2AA429357ACFB4922BEAFD65E3EBD4B1FAC611E34E7259E7E723191E7D4178A0FDE982AA1E79A85A2D31BA1203527E68DBBD80E9F8265CE7F93A350222260B9B646AE02499F27B6B24EBEC09C009DBF6AEFD770867C33A742D369912E5FFA3F624183DBB8A3EE5D965D00B6C4B8192794CF8CDC6D8099BE764F0EF4407E200E5B7F4E5EAD84097DB40CE5233BBE235ED3CD505C38E9D636732DA92656D867FFB3F3B9887C855D40553F6C32055F43E8A019C20C19344BA4B052CCB298C483D2A050A37C409CC9EC59F5243ECD257CE7E41A0F3886F9A38380A189804B9A27DF49E208820C61402E098B77BBC883E38CC8E97D7CF290640BCBBDD8CFF7EA461C461929F7C458160924553F667DC0791B4BEFD58CF36C3E36DB6FA75A3C06ADA286BAECA8FA1FE2607B351BCD858E1F0798DECFF85F813C88052A3D129D447C556EDE2A6C884F3F22F98867EABCACF377D92DEC1F5555DD213CA30CFC5516B5981FBA68F698B999DCEF913DC71EC06772EC49BC186A90A1D4BACC10AD075CF397F2893E2A7458C7A17C9288E324F5D65D2424CA0844CF2AF2E3D86FA5A3571AE5D52134DA95A73E9D1A18E172CF9B9B13089ED30CF2CCBF3C25602FA9EB4A14353F06B3B3E419E912BEB5D04325E26B3ED330E2895B9FC06E4F4EC8D937239F723E1DA3B8577073AB063C83625BA5377302958AE7E3D650965F30238ED3B335FC826305FE8B2B405FE41DBF613A08D543440DD388BA0BD71CA72030ABA5E96774F55DA9238EF99136778DAE620187781B03699B17181369AF5502462A426EF2D4ED797F2C7CD3C274B7563ADD425AD813DC14168560A4A557BE481F1E36CE36E150DEC07DAC2ECC6E5F0917ADF431D4CD497135CC5DBA43A0D4622FBDA3CCAA556F99A363BE478C22A089D40544A463E76DDE3489F3590F4630687E7111EA09AE97AC69268CE3FBBA32691468E734D188000EB1D87638EB27BC3231E11F9835EDE0554A6423CC0F20645A7D72A49A354188B8698C3D8FC49D47C06086EFAD98DF421C5B8553FBCE2A51DEC9A65A2B5740898C2473EC742659871C773217A37E9CBFD8C8B919F3AEBC70431AF281A9668FC4183BF0CFAE973AEC2F58399B3302A23B94B05C32BF2CDFC752E52EFCB0E39F28E70AD17B7811E6BF85012A0DE21140AED9BDED5A36CAA52F4AA7169410CA4AEF1BDACB43587B26E6BE09C0CC088C0932A1E3CD4F7E29FBFA8D3F74C80E85AE80C3CB9473B244221025B3533EC02C3CD25981C2F50E82FB6DC4A30055917C5BF64E67F51641C9CC5973D2F39CC98779AA74BB6A24698A2AA909604E83E1596D2F99E536D8A09BBD36BCF0263A0269BF7632CA466ACE42C5A4E8F64888CB883164AB6969562B6049B87806CB57B545FFBEBB5CE01F4DA47479B7F884D76AE4EF6DCFC83BC2BA0B160684225766F82937BCD1E122CB9D471FA65B63925E39F37FDC56962450A4983BAC4238B2C1B3108F866E823DEF82D58030A279E032A3E680B85BD07A8702582F8A89370F93F3A480484020252FA74EDECC0E9D7CA6AEE2AC274B85BB7237A3FB265C83C006E1D4D192852B67A20DB2A1916954798A4007BE92687A8D84C012A959A70588E4F09AD5C715094722FFFCB8C447A6DAB0452EBBE4EE6697158A27BAF46F783F1179096425119152E392C2190E190827D8273137B2DEFC8493AD7212044528060494D1CD415ED610F98DBB51BD89CE6B15DDEE3A9DCE4E0DF5B5E84A82E3C6776892B0C1E887B83614F3AB48EA0A961B5C6654CD46394AE5404289E296BDC49A06BD74E48D546D800C7956B0CE1CDA5A925A8DADDB8E638C6B59B0243F49D1E767EF46E1F306A07CE3F3F9F46CA619D5F99F76C37E952727EABABBAFE1BDBD8CDF781B64E5ED2DB00774797934299604111C303A94B1D15090A6C158F4C16A13E59270125C6755468AA033D165AAFC8F4A8940E22B75F263AB75C73EEF283EE5FBC1BF206E83B216579BBA370F855373C583127EA11979B36D70C12BE9FF7E2FF5DC6B2DF40941D09330BDE2BF84CA76FCD9D6197A5BC440928E83C3433ADF4B987309EF3F9B8EA8F5BCFBC34B5DECED2787B9E2DB91419FDEB8B84D74F9A54D2D862D2E9C0143254A7043E5D17B18A4422FACB1BDB63298F72287445CB5BA962D69A86F744720B9DFD5B7AC50E39243329EAD5C2EB0DD5FA1B115CD796C24B3988D9ACBEFDB11171EBC7176EA17A2617D7ADD486BB3B00C2258D43CCD93DC8D954C218E77DAD971A637EC64A08E86E3F72 +Digest: E258EB8EA46662EC9F591D8D5B273EB501034FF697CBC5A74D0F278BEADC8DD1FB0FA6E6050E07FA1ECE94BFB6B04C6BBD146B4361FF302D70CDFE0059FA8C7E +Test: Verify +# +Message: F981F5927CF2B80E02828879E2939A54D9C1CA510F3C1D185D8388B61CA645BD47C76B9ACE4BB4488DB1DB584D589395C45E3FC1A85AB548330BD59928739F55064B8D98BFBBED9F4E4D6AF1CC1B2EDBEDEECE51E7A67144CBA78401C860A94FA104B67EF54193EB89199C4B66D37548D29C22F96E2773D00D0B57AE4AB3C56CBE33A50AD83137227F7DF840577197072C9D3AA7977EF16146B067BF19E980423461D913236F93798C050A4243F22AB8C7F58606870B3165711D617094A51F07D962D4D94D8137BA32F3AC46BC43917C76E4662654903DDE0929E0246E22696A69268DF61132135CA9DDB5613535DDC06BAEBF0A93BD53BEFAA650FD46241187C5BEBB8440FFD16D638F8D44EECC6EFFA05F06C45F93155B85425F31E5810B936A966D8791667F31B29A7DC81373555F46FD1C061212F3E7FCC62642F3328934E0A43B38B1091C459C8655153B04AE253110F5078304057ACBDADE4D743F456876842F71AA31BFF49AA03288B6CC8C74EBF536469489043B570C45152A7C409F16D8F3298B9A9CC10812E8288D3E8FADE434A6237F1B52951D65BC508478884C6512DFA20D4F866ABFA13AA14EEABB8AFD68C45BE55D61541B892AB4F185D64E948926F459AFC00CCDC6CC25E8A454105D6099B981BDD92990D55682F7040A214AEEC5F0639B35A98EA7D4EEA49F2F715B657B7965FECDDF1E228285E112A71969C87C8C4208EF62B343D24E21FC37888925F34AA6C54F225F339BF6FB41EA8D06FEFBD893E5DB929F170487DAEFB7EB21AA34954FF3B3FF6FFE7BA0592E47B12F45E6D0B748DD079BF2666E8C96AF91190826DED4B9F301AC4D6969798D657205437A04947B2F1DF6F81DB9B93DED7DA26D8EDC82283C17E30EA748BD2B6ADF83CAE1A94B736E5578E00043F32475C96182456FB21EB65B56E49B1FC541AEE6740B486DF8C717F4291A895C6F9DA7698CB26B6F3CCC2DBAF7A2A7FA1FCE007B5B4626B212E837BE1D09E7324E3A8E1A3627D7257BC3CD814D256DBF83BC91D67EC13F26A1962F1027BAAA8A19E88D663BF1041EA191DF189EF9C1FDC04B0607C6E658E7C7B3620F3E8FC1B860BBC80A1AFD501552C4CA5B583B28C5A22F49E1F43394EC9FDE8899D474A606B113BFA0E22EDFA8F91E457FCF9CFFEB296797F43FE2D481742AB00C6719BFBD0E968CA3D11ED18D2B31C9CFE6CE0B0D71E28146478EF2887F71088D5DE3D6E7C474637581EBF1C7F06BA572ADDB2B3BD9BE0C74DBAAF69FC632BC69118846E505832CE25B328A660B97212C458784293A85BFD7D83E250E05FD6B028DBAD99DB0E845C9E8C4ADFFF638175ABA35FBDCFA31C99EB0A5461E54E269D695FE4A0326DB3951DBCCAB9FE922BA14C6EFD5483F01443DC525F5B152E5BF765D505C6D60469C83483DB44B5D4BE90A02DB87AC38C96A06ED227E826426C195849F301AD49EBF3BBA17E7E6DFA1F2EC735F751780A1B097BEB121CA3C0B2A22409ED4367B6C7E537D73C78057E926FEFD0F034AF74CA9ED60CDD974F8817C9ED15937918E43557002E46264215415DF77F3A50E9DC36241B86F6C68E48ED4AE8B5B018CFC0DB70D2BD47616BD14B138CC0A145A1B52296FF0A2323A1DC404A74CC110A94EC5A8A13098D9FABC6EB9C64DFEED6A680EF25B5C217D5754C74223141BD4963950F48A1FA91BBC24C2AFA8C8B140F52A8BB7A71E5F9C461E1108F5A801213B7CC2F488E0E6C13653CAFB0FB47B1E8C01D672347C22692BBB344D5D4639BC66153A4A14F3E24443659C926652292C30C311D75AC3B71BC9F8FBEBCAC8CB176A6B353D965702FE9E94643DE694F38D4D7B7E79E6116752B56586C1DF600065682B27F84BCF6A0F56A7CC791780A2EBC46ED38AADC14166139312DBD4C7D109DB7841E8E513FF8FD571529B6780C2CF22C7E966CC5210BE1427946A356AF5A36D53768562B8A15D19B8C3393521FA4D999EC4D8CF35BDBA43364370D7381D4DAA90B0FF62B098F0FDC6D59EAE40851D0F0D42168493D5019651B731DB81FE3F635AC960D0AD04EE107C7AE3316D78C238C53DFFE3B3F414430BB6D532D9CDAC79164DEC71DD4D5F4E6907C5BB98D1482855494B6464C83B17DE112398656A246B294690BD42B86CD5445288F2A41353126F844943C4188E1D5CBEF8329D93D65991D321E6ACBDFA2A2A509D1CB74FE9A64C90033B84B8D609B098D8C570B36BE5286CF25358FB38F835CAE5A45528F33A72CB45C9A3EFD5C902B08AFC13EE367CCC01AAC2FF4A5FE3D592514382FA531290231A2EA75DBDAE85FA76CC13331761DB116FA62904D1A0E423F044495D18B831191F0CC06FA3C0BF8967D7973E22C142A14A680B3E830C782A724BFF16CBF77CE383CD07C86BCEE041F62067AED7C7210144B4261FA853D91688492F4395EDCE60AE38CDF875FCC0025F78720E163C105E4E47C87AB38F3FDBE39755794B9C3E518DAD037AFF79FF2EE81EC9C495D6F147324769AF7D1BAE6BDDF8BBDB8D7BC3B160E97EEC68ECDD51DB463FF54578C6D6867F6340E68587BD8EC33FC4AC20D40D169265B7DD8E8E6E3F1B215B31FA64A80C4EC67724F32B9FC87CD44264E22C64787AA3DF38062288F0B75529E4C88B1F72B022913ADD21E57354A0988F4A667969D811A0C7D1502729AE81243DFD1C8D1C2833ADA4E0277FC58CA2417B6CCF162A8C4E947AEF55ADE6C490204CE976C0F696CF39C2FBAD17585594C5B3A87F1625B7BAD48DBC8A3E2053947BF068284A961BE0AABC3178EAF6CC1F9AF49EFBDB498C487E4A3F58C583D46B567C18488E82D626298EDF1BAB364CD4E8DF6E9A94F366811AC24E139EA7618085986597753385D4F720B81DBE89AEF77D748D0207C8EC2DC57CE6954A +Digest: E37557FAC18F1CE28C3F13557F505FEDD9FD87ECA8C2A3F0D46BD1FB0AD5C364FFA7AF798FF0B608AD2B33B8AE2D9F8DB229346EA489D572BECA0C7D8F79246D +Test: Verify +# +Message: FEC04BE966CC5B0937430115DD0DFDAB78C5FBD7C93A923220A279BB35A15320A8BFFEC4E4D53F69E033B7A88E95D9EFF4B258C1454319EA2F98CFC2E3E1411F8579F333F9554B955DF2CA2BE1B2D40CC3BA529720FED8B071C8D461F3791CFFA381B465837ED6595F9334B5E78BAB6E9AF4F40B789F98E1BA09A87090A0FA5E9575411519547867B137AF75BC59D67CDBB0C67696D78811D33DC9ECFF57F6E3D3B67E1FC9B5AF06CD1ED71E6EC19C917B2A945AA452FFB480D83D2F76C33A08B08849E03014EDB86911A083CCEE32B8C3A87E89D1623EAB38F674A676EF21B0413474A6BC35E89C322FEE87E8FA7B21D44E3E44CEE230D3F6994DB10DE2803E086401B483DFD49D58EE96FFD44A54E8B90BC82F8F6EEE20F5334F34C5BF67DFB180A56C1BDCA006F78990EC92044848DDA64BE1285771466F94EFCD7D8C28D59C501DBB581CEF4E3E54757CD523455CE47E00D8F87419DFDDD3FD73392CB7A0EB908AD0049C30612704C9328B8848A3246BEBDBC80E292F4B941D0A073607F6EA9C3921E93D20210222BBA4E2F805987B01B6584392A46FB94D95FE6F88D54EE4D3B5BDA980AEA6C9424698D54F202814D4A6BA366685C2699D21053DB57827215BF979169A5157F04712C5E8049E50ED8C9BF1DBE80AB092692B6CE1E850B3E4F97FF80A87987E0AFFE927B1349A4E7453F5230C92116BBABF33555CC0FBB788D03660C11A3E173B929173141A67B0292BA43729E74D9AC930CA5BF4D0B8AA9DE987D113099081F6CBBD3E5BF1742E1B1AACBAEFB16F9D72D711E2EE619C11FFB0B974D19E16B97166292850543A0434471C254A31BC8DCD980FEA4A429117BCBC0F84B33865B55ABABED29278C3689D852F4FE4AAA33237E8B8A1D539EF7C643C2BE4623C8AF51A9C47BB66D3C7C63CD90CA091625BFB5F4383B8C199BA6B8D4561F907455DD730D05FAC69E6433E97809F2D5326F9DA2EAEAF1D67524D6FD1CE0D06CC1F1F7A3A3D2CB502E49F26482B9662C0C77DA0627960BAF07BD736C44F91751991E8C5341EA10A33C9CC1E760412A18C5785A509221208D215A28A5AFB46DAADD99EFD2DE6F98CA4B3F798FFD282FDC0E1AE8AC4DD357BFF12A895CEFAFD063D7B689DDF8D21F826ADD5DE08C900E6AF1CEDC0D71B0E07973B806504A0D9DE597D5DAFF5434372293AB9AD2161674789F306B744D7B08300B4C1E8E999FE4B919A925ECE7040AC12AD81FBEA77CAB2879403717B1B8C5A256EF95681E6CB12A7F9057EEF9CE70BA4E59EA03822BA654CC0151212199FC819E78C2A91B6BF7532C282A6E64C4C28A4E7EDA0364547AB6F5C3ABA9F53C3E2E2A014522DD532BE24B071A684F9FB63EF8474119A35A726E4226C037E1D440DA377F6111B2EAB7D26C290B559F85CC355C57EB000FF2CAFD627D0F2F8D381175703572B639BADCF23FC74E68E71477A3570986BAC8AFB6600406AA519A136B367432780A5269CBA25BCDEB7F75265AA67553E0C9019BE88C6E5F0E2C4306D606251F1A55BA7643FCCD8DDE2515A348A32A06F4B888197F1378DDD866E3CDD646A7EC5A274848DD5F50434AF5DEAFD8894A07E6C6FAD562F9108058FE2FB1579AB1D8C36FFEF18FB6A1A71C13ABFC21CD2ABF7B85891D156C7D13D012DAAEF5C77F426171ABFBCF08A2C4E7BA64E4C74A7E2CB7D3594D492DD2577217C9F526CCF0E774FB52EB83A9367E017ACFBA07B71089BEA30446CFD90AB1A5697F2E2BB9840A732F38F00F32E58CF1E22E8D396B3DD185D5AA10609FA013C462C0EBCBEC4EDAEF0DDD1131A54B359A2223507DEFC038C86E37E828FCD8D9C774B3B1E591A84BCAB9230DCCD9C7A968ACEF7627BE3F0DB5D3F06107C494446175A1A9F09AE7AC88860644A4D4E5AC1C92B728EFC2F5A08BF2A341DCFE9E7B98FDCED1C04FDC1F4BFEF565ABED0D7FE11A084EBF5BC3208525E676491B704D8FAC4EF4658A24FE552399DAA3E93676AD3B23370B9DB381F93F750B52F4A82F1546670473E765A03C8F4827CBC0C6C14A552E73BCBDCDD839957EA633ADE071AC776E0D552731F7E0FED50421CA4FCCA671E9E25E76FD9D6C996BFB82D300C6AEA7DAF023D0F771F45F2A60CB681DC2CFF613871697D85122DCA0176CBB4DE6533C087B1060551BF96EC60EB1DF19E692CC623A103719F66F709823CD50999466E18F8F800E187A483A82B23252CB2D91401A8871A66756190CEED6665001C34796897F08F8989FE94F5FE7E7AD741CDDA8A5CD71A38EBAF624A6A2E04BA718BF328FB12FDC71781B23D0713C0F7FB6D5A7701D7D23636015AB9D911FF626DDE083C813FFF6CCE6A82FE3F5CC773452785AD4D9ABCC9E3397E4B2040B2B92EFC3BD67C92C30E733FEEFD264E67790E40DD6818F659A6377DBE5A5805131038886740F2408B6DEB17DC64E19F56A1A99D7A23257FC95DA47FFFB77602701FE0926A4DA3B10BC4D8FACD057A800F163A5C864E3B032CE43632933EF1279A2FCF8040ADEBAFBF6B2ED228A018CBA4FAD4730FA8C99794D98426880B01ACB5A15E0314F9F41D80489F9BB63CC620CADEFE89D1E55B3765A0E412BAFF8DFD8DEDDC753C9CC0865FE79B2E4F68F6572BF930F06557B19A8DB9F049EB14B65CA1D3CC4723F3EE1E80C6FCEF4D81225B960984324F06ECF56EDA51A7201B378D4698F79437D940855F24CE68D5A282F610BB2AF51514D2B0F6B86A27C0924F356D6119BDE5F8B00CA7CBEC17579ED9E84E2FFFB2D879E3BAB3B40975F3996A8191504EBC3497C3FE1C44D49C7FAC25FD9A39A2B17243E66CEAFC6FEAE2049796E6665292B19E4F6540ED129739AF358CDAC82027A7A67540B9DDC178FF9C58B6EC1F94B4B44AC58176BD25EB0C6F5D0C2225B4708AD9BA2E7AA08C8ABCE97137F0EEF4899E6EC2F7B16A +Digest: DE270B8DF64575339C1D2EA1E9D5941252B914EDC78B492F82F61DBB59D3F82E6069728E0AF5BB0BA34DC18271C929D41F2D12AE86ED53FD50C85D3CBEA73DB0 +Test: Verify +# +Message: 0314C785024A45B430CA9CCE325E81BD94F831770D2FABDDBB413866BCBD4122DCD1DBDEC032C2F78E52EA7B1BDD87BF8137930B19C04E2733179B9EBF7BAC5930E888749B91C5128D2F5AB43EF76FD69DAED0F5AFC77110FD24EC79B12224138F4732FF66CE3402850CECE93BCE3ED811068064CD05DEBB41DF49956279423A51427D7E82ED9483E3D6E84D8306997D5459D912040ABCF44B4363F6855C17E1428029AAC9865F5A56203B77A3028AD2287B02B0F20299A0A091FB0DB1932A925D520C61FA4B09467960C23CBCED3D27460A1C872C2CA9E17048BEC87820B73D4C6C756E059DFFE38CAEC16E67396D449678FFFDB96FE5F3C7FAD398C1FD3A1B44BF237043059C2B0D1373A6311EF710A6BAE9C2D3F3DD65EEA138EA7B3C68AA0D42636C4705340D18305A3BF23E5FE4A35284101BDF2E527DB96D8863B1B2B506298B38A6D7FDAA2525EA26DD0C95ED0500926F7D11B82932C10A235DEDE73BC8B0C3C6360EC2859D026EFBF8FD44BDABB9CC5EB33B0F63E46C0DA7E74F7FBBE72FBBA1D48F31DB2838542ACC48AB20EA24F8E7A0D09F49BCC4EC5532AE0687FE60EA1C2FAEB403D85D11DA6A5966E6BD7EE1BE614F7DA4B2871892884752CB2308FB6C22505B682F66768B158AA1BAC3041D5089C0258FD898F998406DE9934A737217FB49465CAE0BB49A6FA60349B4CBFC472ADEC9A5C0695906402E877A06A43774044928CAA14FE1BD4142912937C1AD7A7C15B9618D24103313B45E848BBD2A0F7DF43D259FA1E27F2D8D6566531E42CE139F1AC9D0358558750858CF85FC1BD777950D55E31C5070BC3288F2B46539575B09153C5A01713DDF09849C5DC93E8A571F00CEAE5BE3F9FF98A2B09E98A338FA9297110F793665A78BE541DEEE166E09285AC480DE98533F7C4188AC62E31B746C3F8010056448566C4F9271083DD9AFF63B2F362A4A30F1C2521A165AAD4FB694FA6210FF2DD057F03D6DA095D9307DDA7027710AB0EEAFF9D9653EDC430BAA72AA53243874ADC557C4E27C48AC1266D77BED7742EB3681512E12CAAF6A0A91F1BB903993CBB5FF916C7219136AB5CAC56FC5861AB052EFCC581E441E4ABF7B2E803156B778139BBA6AD748B3F96EC7B3D10C26973CDDED7C5CF8ACE0AF39995FFB7AE95AC5C9BD6B6EC69A6FD11102CAAED929F5E2417196B0E048CF9165C064858DF58019BA9CB004D7BA112C6B791E4E43F07E21FB2DA00C99EB1CC2319CEC9D2708E6FBF83F4321E4B2C55A430A422A572D10F6B236FF55E08AF6FD272196B195BB1A8F2CA68909FE43136267E627D7368EE70E29DC80CE1B33E82B9C3844F904F01840F23F1A08DA214D6E806F6E020CDB8B43E268869BE1147B38D43C3B344B55E4775D7207C9F4CFC91EF82201ED091367186350E4BC847D783017EBC23CA1FFE6AADF9E83129D0BF8BE05F03B43FFD59AB90B3472381231C140A8C50A319F9FECA7882C7C24F2676FDB921D2786C0A443F3998E3BD1038C70ACD466BB718BC63BA594904B4DCC63298251B3AD963DF7C1D52830A60432611624EF56C434C1D81B5BF0CB7EB37477471F1BEA130C89DCB7E4B2455AFA6ED796A436B09FA2FFB9D11C39B6CF0215F70A6EBFD9E74F790353B9C2202A794BCD363961891611D78AACB866A317F22D44A8547B7A765AE75EDE431E0A6A4A68C21AA8D5EFF24797B86CE27FFCAD3519EEEF6B6CBB737224318EDBF5AAD64B28E6C83A1376C3D17119440D4BB5CCC8170907ADAD74B03155766F14E72049A0726A2009FE568928636F482939D682688ABA2A7E0F3A0EBF6873C324DDF42290E31894F3D801C7E249202CBB9CFA060196DFEF48CE3959937EAA33F784437047F5C9F73B3CAAE4F1558D74223B735B113EF1FB1EE41579C4863C1DC82409D28FB9CB39A7D662829BCC6274EAEEF466E9EDBED981871F0F85C102A34E71B39FB54B2823B97046FF71825B1802A758A9F78CDD680E4DC3E16F6412FED9F289883BF28AA17C7CA2DBF6D05B45D4DE8485A604EBB27EAE9ADE104CA5235F04F290FDEF72A7DF05292A7B796176673EC85FBA3A96DA9F0F4F76A8520C4016F02B8F64BACD2396FD183E5447F378101414366BCDCEA049913DE542DD74FC1DA253AA5D70E63C59E550E4CD9A13140391D4E6E82AF5E6A846C6943B6E1E5D867ABC3642C029872A5DE8F7486592EA033F8B37D82E541AF4C0B06F743392A3C63BF97F4A38CF6964B88E7E0C5CA6F27F6279021F9590E90D4F4E2EE8CD33ADEB46D3A825FBB2FBBBFA3E1D644102521F7CBC654420A21E6D60DF900F639A6091D5B1D5AB106F85F5A5D0409CE2A1BCC0C5ACC59BD5D6419E53CBC6AC30E96EB74B2DF9CA635E429399C027CF0058965E1C37ED00036598AE90D1FFDE58AA96754284CB222A49F2B9D399D5B0DBE897A70BD7688409FD3EF8D3D4EF9F2B17A994C2D45CEF55094FCBA0434367257277E9F16C9AF3973A9B506D2BDD0A2C3DB1D4C99AC149A373C33B20AE8B6FD356B80B2A56F450846CC832BB9DBBDED599869F1D6E3BE770C9F7F90144E7A8CB2230A2870D90AE4CE1533899F2998E5606FB240EF1A02286EE4975D899ADFDE208CE21212ECE2C00C5F300F0C1B88BD6A7808651CBA6522CBBA831B94ED44C3B5D17ED560B90453065A548E175624BA8783A1A36C145EEF0D7F845446F8930CEF5118369E5C22B3E60FB3ED1531B073B578AFC44D36CD2D646BC59D8D8D7EF259B3D36086670497445F8BBBCD5D8410CC55B6F76B6448D811AC041C1DA3E1C7BB07EC337A117B9F0BA62DF6AC0FF55E1AABE802B1E6F206361FEA9E186AEF14A9837F9D4AEC3977B868A05D8E808EB66C5F5BB8E01E929B551BA4EB05484098C437DB2E1714A946F8E28020D03413E4506394EC10A0EEB7D3C65E01133167BAAA01FD9DEB1F271E7035BC3EDC869918BAAB89DF4AF +Digest: 2563ABAA9BBDB4FA72C4805733E0D872A00C2CD0A5EFA069FEBC04CEE43FDDA902C4C1C133DADFFD548F0A35050DFD6601D6C8B71AA1C0C128AA83D9B7EE9CC8 +Test: Verify +# +Message: BE5AEED6F2C70ACE5B9FEB0BBDB4CB569310948124E31BDF2A0032867CC003B8DC2ABA5B46C44EF22E9E16961E9D1A8F6042B17F7FCBD1E093CC5F4A22B83042A741B763ACE54AF8DE50DADE8810A6898097E886D9C57665E27FEC13E956E62873AE1267BD1E96A3DCB907A651DB73757BE0CD842BC56B118A7D0B266A68A01F2C99FD56537D4AC90F9701490E10B0C436F1A4CCFB2669656E2F9CC94AE73B89EEC13FAB7D2938D9071B32EF9414FDA9D56D055108F6D4047006ABF28B9B896EFA6E936C5AB565C99E1A3C38BBD25D44B1C65764B776453B8DD9EBC486CEF134E99CAE47D1C7B28B74F65E2221133D8385D0A4A30577E52F702446F48DC34EA50280E23AAFE3045625D9F5E633733A5D512118F5375D3E0BFF3FE7F49765AFBB677AB905D7CD0199272B4AE2429CD5A34BC9ED1FAC2AC18AFA8EFB0F40CE30F7EC4B651D65FCED3D59642C5441F3236D2EF5258707E3740B816729F22097D59DD4FD19D6C1BB2437C8CC878C43E5CFB553A9A55F65372036B87EB2EC7F706C2003C4C74808E5A88C99FB4FF0E31A09018CFEAD033D0C8A36D01CC3CD83A9B43A59AF814A0B52578230814C2F6FECC6D67741E289194C7F1E7CBCD043866BD3F4DF4D62F7C079F26A55650C55D82CEFFD44C2AAD83AE0FA4087F1B22B2B4E3FB59F54AB0CCFF7A08699D47231FFEE168F1057451FE50794380A2956CF7240967805ED2CAEED78172F6FEAC4BE9A124945B4B8C86D36F77CC05ADCD09351B02190F39378ED376747972F8438AB22DB5CFF0B5756125151EA7534F6E7A63EF17F4B1E4026784B3ECDB51ED3B6BEC78275B6D4413F9DB26C8D6A941F7401F576892929FE4206F3145FB6319888EEB147D0EB303096DB44EF17CB1BA95EDD064B32EB71FC6F58E807072949A1AE50C5940EA3401C6E51CBBFB66E1F21792FD54C607CD05FCDB6D23AC36994BE7B55B446947654424EEC5E3F15CC51CC7A332097268E6848F4A71F4C01A54E4F9F81723B92BEBC4A5411F900CE477740674B11C09DC663B77AA3721BDFC5ADE7A241D0C24B607C47F114E0BC79C96FC13D35EB9C1F5832060E4BDDC09158F1BD67A600661FE77C73FD53A0BC34CCBC3DDB19254B45691DA1C788BA48A9AFB38A6A3AF3715C48E97BC0CDC212F2C95DE3EA8FDFFC1E0E6C5E259B1E9D284777BB66B278522AE4F8795A4770F46A149FD5BB4CF33A386E0FF918473BCEFB47AB9A530CE85F57E75C124F5A676FD05C95A56857C1008160D5BC021C1E6AF0A6C87601AE54E73D0334B87D874083310D54570BDF9338AD8B90B56788E403F98016D698F06B54255E65CC6CBAA048571523A2048FA4036CA27F7A6D82A3CCC9B2CF125C74BAAD7696A245FFF6869FBA48EA3FCB7E5C355E161A219591FB11AC421D2B19B0130291927FD4C046FB285EB7C5D75DD808D2FBA06C68D52AF904B2F284DE287D414FC4EB747EB73536245A5C40541114D00E8DD9364D40E5324CAC77117E2CEFCCFA8B59E69F92F68FAB5022AF72AA9163D48AE59E1491C89102800E9A054514B64E5811A4E96338181CFC211B7419C0699230540656513BB5510E42078068825EAAA39A4452D74C90F2247A79BF2E477BDB847BB8D85EFFE867051C52E00A9691DD4C8E94F9CE662C785A0423D14195F1D959F350FF81C551A1B5E5691B52072A2D2D7F4B64EC8887456DF780B9C346C0434E7C50C8CFBD7CB2949961DAD6150F7791E4128C2E7357037C6DBD18C9C8C5E34D6958B3F170510589DAA3D2C789B322435DFC00D26C2FC7EB1819886C0C3612DD212D38AE84AE4E021EF20C38C3CA2AC23C0464DE43AF81D26DAB817AB745F0E272E62C12C63376211F50B1DB208085CFE897B706556FEC8A5C46CD6A9FEE7FE051E86ECFBFA1B1DB1A160B4BFCC1CDCD4BC01CDAB670725C55315E85243B3622337D948631828610744491056156245D9B605AC62F381F4702D4F6D1D9DF51A4B41517B4FF5006CA56B537BE3D5F44E1DD88FFB31C1D1712F799E810CCB452589D3D4CC362DC60122DD1358E9DEC39033796078D140519C7896CE0E9D3AD87E2AD9D7B8840D8B925647AFAFD03626B22046FD4BD9314059FE6FCC03CC19D61AE3C66DDBD41C6E2576D380DBCB92D40D2E714254A9BC36F7E23E348AEC0A35285F33A486EA628F3156C6922E8AC66AD0751E9607DEAB6A636293B496513821AD41B60E47594323DD2A011B7435DD3A05D23D2F9F7563EDA97E252AB62A81488DDD95659ED8E377BA61FCD70574C81BF261271362207C4E7A561A94FBC332C0D3768A1CDFA471561945FD51CDF912B2A32685C5F73941C71D4B51B46A2191AA9B5670E52025636918CCADB4A7A2DE2B0AE72E7B316A7053940E97945DA131FCECD63F72D9F379ED421EE0778D66F0BC243A1602F4435342E836D5667BB9B6B19DC266389DA3622A8D58DA54D4197ABFFF3B7A73875C24EB1B2D4C12607CEECEB7A378343894CA55B81ED85598B67445A03F9EDEA56FD5C7A438E1F42AEC07180D3ABCB2C754F52244FE7C5D86528CE62DDC447EF493AD1E6CACE0186077496852B10A9F63636EFAC88B2AEA64E828B0F0DE8C0638CCEC9DB1A1054D14B1E86476D6D0849EDAE53605CBEC3CF4F9A3DC1C1E67332D862A43168B975AD1F1766349DECBDEA9076D54E73313EE6FC53BA7D928677DBA605128A1F122967CF07920C5B4CB886FFBE2C81AA29C534CC00A7BD4578AB7BD39D578D8E7B09C8282FFED606B0D28AB9DFB62D1A9F502A7273FAE030BD6E9B153123BC1F0F7A3738BA825A884117F10756474583A8AE12121C9A52F52E6816B944920E736B7D58B3031C9782D442E45EAFE720B8F15BD0184945A2AE9D6D5F120A45A659C3EDB83B5518B52B9AEED16BC9C926AE7ADFC127DE043497FE5D655AE2B550C015A7939C97FCBFDA6E7651BAA60C59FB21CB2BB5A89121DB7836D53E1307A0D67D9800A24CC85AF6380CAF0487C63735BDF0C98DC78B6F5ABF6B6DFFC525CC536D779843197F7D98F130453E9E8B +Digest: 98AB02F940DF2CBF0D61DE805FCB6E43DFC44DEE328684D3CDE1B1F7F63C744A2B3E9C70A6EACE70858401A1AEF68E19999AD1D06683596D6BBBB06BF3355B65 +Test: Verify +# +Message: 76AEDA9944A65AC9E7BE0787D368ACDA61EAE8D699AFFC95F8B5F106C4150D21F29AD8511DC9D03B0AD135D94E8F006852783CD4A3D1179F02347B4E89FE85C1DBE8B3A7B23CD21ED69E20271B879DDB7D25AB1FFC09913E0CF5FCD8A96088AD7035F6DFE1A34A5FAF167A80719A3576DF6E35E7EBD94DCA448BEFC02AAB04F58546A2EBE7BD02EA6F863A3F51329380995C1A520C9B1C173A59C9519AC5E04BAA51DEDFC7EBD2184C47189EDEA3B4BC06EECE5C02AB6A742C8A34FB76956B90E72A9E4EC85FC7208A1C03AE90772F2709FBEBF0276311FB25AD822633273ABD0C387C57A2ED28A556B5A383568AC8C0E5E49329D12C4905127F8D5C6E4905A5AB9D5275B2DC2464E237E7B42A86E3239C6E33D9318FE6C0FF7D8B4360B9078FF53772A5285EF768B73274E107CFEA5C3296CFD7C5EC082CB1CCA716C596FB47B3A672AE3FF979D64AFEA04801792C7B500EF1E4405A9D2D9CAD66FD7ACAF0B7E5B7071A1739C5EEE3EF40E1CC7B0DE58A950D6BFA9EE88C416F9C2555FA74B9F334B78DA1F54CD2358C3E4F99AD4FA8A35C5ACED1359CE2D828CD869AA3DDFC5C09C6ACC81B0DC46B21735DC67885CD1DD77BFB7AE5F215C24BB74A48B9D9A225C71A827F7CE6EFDD132ED73AC51A1F5A5DE3EA2BCC0574EFFC07F1B368A1114B7F5C39AFF7964756B5F7ECFA58E20E0EDD443F2AB68812C3A29094DD127D22DBD0E085685E6B91E7CA80DAD31A59B54CFC7605787808A545835C98746198F7175B33344934879F856B73082E4B74BF70471B0B9CEDD0DD0C8758217E23AC66BD93D2427DC1ED4E120F178AA7B447DC4064D59354F094FC56028C8599DCC471B1BD73F7C53C3ABC553DBC0CE8999D7EDEEE3FE662FEC292C8BE2648BA6924ED1ED5636A1D722E7BB495128FF945A6851F0C1A6477DF9F0F19C81FFA3CB9BF7D106D5C6562B92BDB9B30D7C77642C6A59B576B74631045BC16DA3D5AC07A607CAC31152832E09444D771F91CAD7A92FC0122BE5A8093D501389183E0A761F15ED6117A85443198D45C1DDA94AC3D97EF36742B9AAB26A360912AB7DBDEECEEBA16B54766D8394E53550E6DFB1A5FF3D267D49011CE5ABC9F8DCBF532634104A89FAC0928F819E063A95252D8AD40AAF7EBD3E8B611453402D0E3F3785DF1284F0FEA4BE8E12BD3CA2698CAEF843965B08B455D70E22E4E21ECFB88A886B09FBF46F802BFA441B189B5D84FED84FCFB3D74FC71B152280DDC0C4FB8E2C66783162CB223720B82C57E9A7708155BD581AC32B6CEC953BD833DFFBD99D6A8B8D9D9B99150B54AD74B688D0093D4EF4F9C800DF6B42CAD85BA0383D9EBAE57A2EFA788B7FE1ABA035A41B2962AF0BEBB4392FDC679BEA0A4B3FEC8E15F8D3032E17E0D90928D983AFD6629F5F2AF2604C4B04CAD62335460107AEA40325D8D47886E92391B80E71D84A92F02C58EFDCF10EFDA578D413AAC76E1E5D565013E2476867DF1B6EF042B200D965E00ED26E31A72D9E429FF65D53A1C295FF8955639419716FB5ED6422D6F480A0A8B676213AEFEEDF246E8F7F40C496AF609BA454445D23396DFFB5D72A1B50B4D74C8CBE5FBD3F7F717DBA76D1A3AAFFFCA274D3E6F99DC80D70EB43E190A47F5D4C431643CAE20329FA90AFF34D7BA1841E11E0FD854CFF0F0BE90CD42695B723B7C5780528017106FDBEDC93D86785DB462BE0FE90AE9B37294EAFCEB917921638E0AB08C397D92B9676196CC1C275FB3D31190965B2F24391CEE1D5996FFAD6C5875CDB93832F7B9724ECE82CBF34DC9347897524AA02A4D5604F1B63DD4F459F23A009F99FFA72F69602D4EA90A456FB902DCFEED061CEDA8E869AEE9818BB9CFE95CD27BCE2D50A141538FE3CA68F05DA8CCA90059A85CE1AAECB6F0184A2F1AF977C38BD20FD7F95190D3CCB9F670763698192A605A9F354DAD0B0B60CE085D99D367EF350FE6EEB8C9C1911D8A48F413DF8762C5D3AAF03BAA0B14116977982C3738C1AB6012C6991812D2EC5704C82A0441C72573AE3612219487D924186925CBB951A8ACAD7927BEF6C38E04DBEDF37A5F41EA8927A04E6A56AE7B0A8E0C0698CD20BFF1F2FC9B48618468B4A881A81CA881E94F5CA352EED2278CA0633CE90537664A77606E0CB156BF22931E7AE0CA816EE9C04403D15DFEADA5E374C88DD4D1B3573EBAFF991ECD2B84AF40BE7000B96431B3F599B627AE5235EEDA47E5D8A8D54639DBC5226E2509BEE220743A5A95F3283F6737BE2F60BD4EBE297B9B05A41113320DB401DF112FAF7F1751993A9C195C61A20A4E095F6AAA6C6DD8ACD0F97A0DE88A6E1DE50DAC969A89F023522ED2B827775D14BCAE9117B1E07EE8C25ECB5564441499A5134CCC63B825B1EF4B0244C98AEB59BE3FCBB6DB8E9191A3134CB71D562048F067338ED6D7CDB065E473D14F6559CA39854A5ABFC1BF2C257C8C3858E2C6F8ADCF4B522C238D892C84669FAC5DB9FF7A299E0D9CDE39EA2677D614A5D309231019398D159AE02BD1FDC3AAD6BD3C8991021B8FD905D2A90BCDD7831830276B8B7FB7391D6D8214380F8C1298F2E2D8EF6A9F80535A7FA0DDABE92B1F3AEF3BAD48372A46D0AB457F82E0218CB794336D35E62B0087C0E9CED2D2DA781C4DEBCCAAE3B58A6A2175D913F6CC53A1A5287E64EB84C239046F177052DBFDBE406AA14F166FB3FB8B5C431EA65C1F0F37B3C09A1BF8E701B4FA5A4A22B724206404E7C6F8494E238F0235C82A92B7FC24E1068C0915FC1EFDB7DA45D8577408A32B9C88A9BE75BB656A8F4F08DE76425F924AB1FE56FE10743AEF16B995DA125EC8339F27A4CD58BC919B4355BC757D3E75AA632EF047DBF49E0F78AFFE264442B2B806AD2A1523BE152CC70173A632C9E5E1E568608B4BA5521D8184350AD6567A593DCB1B752100AD00496501388B6D197F8DE53E45165F5B5B9F60A86904639B5AE23DB0323264F93486D69219F654962E397B5E50269105822A99959A9A653BC6E2CC4947251E6DA99C237C4454C30272CCD093838A006ADE35C33E40B62A +Digest: 341FFF6A2E61B66D3F331516512CB6EAF9BBD9618E31BCC369D8A0B5E5E749D83B2C32329BA406DE120FC16828C1B84D31D02CEAC75A5A64734E8C8EA9A55311 +Test: Verify +# +Message: 0C60BB3ECA662A62FDED304E19FE01F1C1DB0A1B754D8A1F26AC8A1809D0419A5A210D652911B426A8C517DA2C4AFF217202E04237019599308C1923F21CB5F9C694A6EEE39958AF1CCE7568AD05E4487FFAF8C193DB13509B79E6037345F668DBEE13B79E97E33BFD2B022761B25F54FD1DCAD35AB1FFA6A3C2E2552335F69EC04FB6FA2BB90BAA9F253EBD704164C55984F17324FE8A502180ACBF9B8CDFD783A8D6FCF1F4599AA3F4863BA2D8F9567FB3D6311F32D7FD5202327471931FE7B364F3452DA5D4D68D882E376076F84621EC1106102A3509B877D3071A6F4E055539837FDC77C64578D965E37D0ABA22A4F61E6A322F30877DFFD2645D1753FB421889C3981AE1CC775009F4448C5AC50E7F16AC07071A60F0F290420F3E7C09459E533DDD27D77B01CB70EB57EC887E3802E11C89571EFF1CBCF6A241551008B3E466AFAA5F1596724CFB94FDAB2EDDDED734209D1B3B1C72C674B0055368C5120C36C16A3A8DE9B4DD0367E604E60C9DD2E39137D93DA6DF618B8E05D97F5CDE5743625CD7FDEB96D251E95987E11AC1D9C0354FC02BA981A9416E7AA9CC365B3B7D96681AAC2AC182DD17499AFCB5C33FA799F49D0A0AC2D7BF485220D8902C931A7F4239F594C23F92D21AC4791FF3DD427693060CA1BD7EE3260DF0F33B165E019E8ACD8308DD3627C9C962EAC3C5387BB32D325ECDFC6116A17C5B2BC08D94DFA34DCC58ABEA2E5148D089877B69A48E0674BC499236CE8244E4870E88F13B408373219753B3E8B1EA3CCDFCE74D352FCF31896C048D6E794887A11D1DCFD894461399CA5AC52E20239E966B4DE5749B07600E51FD7F09F7C5F56C2F6090D98839CDD21B8EB77DE443E8E73F7FA8F7C8F71188FC8C2D11906EF4BE4E49CB4E9BF9E957957D1D20B631FAF40BE5C05CA7D599DD683360F74DE92F36BBAE11933BF43249044DB34801116F638F5CBDC0C9EA3B9F68DA82239859BAC674FB0C0B92FA1C26AFB7581DFEF6D0B2E50B8437052ACE1548F64FA3F20F710FE7E2FB6DED1718A1D4448E232BD3565A89503D77F8080D7806861361481140B309CF3B156C3ED4E00674A4A67F1257CE3E56B1E7AE0343180F31786169626C2DFC0CBC2B69B66EFBC68DD216122518BD7AAE46FE7858CD05A032D887E5F49A8605F668A84C6A46B30880A1EA1AE76781B33B9B661320A146FAEEA3E683C7D6A24558FC1162628A59029E8FD6E7FD1257FE4A67C4A62B41AF8B687911124A2F5DBB14849BCCC54B3999515421F13266CC947465927DBBE3DFD74A67CACEEA7A90D347DA6D466D838AD46F191AEC7A5D620DF6CCB487177D935DAA2A2BE5492EB6D59CB9E53116936633D4B1835443541E5C659F4514AEFE46F29273BE44224537A656E049F997CFFDEDB43711E700B891A2FD00494369EA7D76026255F75F52CF42F3192AB3EA3B1D79E6A1AE809AEA2CEB0629E25F86786DEF85405973C739547A6EDC89E437EA813E37F0B8A8C743EC3A3BF5E887518BDA8B6321BECBFBBBB938A6E3B4F37D05A3A78F4BDDE04E704B5ACD43F0D8E11846FD12B31D47BDDF6921FCA1EE3F820DB7F9CED004E3ED940C7CB20664B06508FAF684F7F4039F017C72B5AC8F0C635EADD88B923369D9756817A439DB1B93F45ADB86D954F81B1DB6EE7E2E821FE1EA0E203259D5E49769E983BC1C9736837C73A64593D9DDC7479045399A3CEB102FBD1CDB2F91D4A03E375D3C061B71D020D7231821320E243B392159303CBA503D271354948EEFED74C674C345BF7E5BE597C87897C452049F9FB5A5D09F76266CFED84EC37474B4D9A0F8475A8F4D4A447BFC4A272EE6570E8A9B5CE3A030EE0CF2CEC5D2A15D3BCD06CD193A3BAA4BCF0BA00EEB36E35E48032EF933F3815EAF0DDFC6DFD8716BE7C023868A49D5E9B234796BB08B817E0950AF964A096DCC4646463C5C6CD664E785591257242B2F9B6DC71F13353C01E4869703854027992F206E2BDDECFFB6ED5BBD5FF7E5DDB551E2D0C179FC39559A1210402DB8F458AEB101709375D1F371D7BE5E99758915AB88FCFE90D78AF28BFA81736ECB6E4215703E5E3A0B023788FFAAD1C1D1CAF0646EA0E5981A94895D65DF9366B7A65A4B46A0064C85628E11F175974BB2B34AA5701DA543300EAEC5E0835E50ED9D2654F4330803BF9721E97D335B7CB749839E0C013EB282480F70B0ED16BD212D7C4867C08686B97EE07667E71B87EFE6880CB9EBDC0A46289716233329BB3B86FD6B881607520679BCF0556F80EEEA020BBCE4FD3FBBE8CDE05C73A8D84009BA0CD2267A6DAB8E157B7C3ED122B8734C8B7E45E2A6EF01E639973D8690BFB2EE1A2587571824FBD48B436C6FE4CFD9AAA8A027F60FBE2D3D4C980E2C569A2C11D562AA1F25908A37AC5BCD56B47577D4EFED263CB35EE7A4EEB3F680770F51F544279975EFA2AE9BA63024AC4F471DCDCC0B169036863AE5FB6D007E44AB413DF24F703CBE32909FA000258CE2FC38830E9ECE5C14381DF01F7BDE22FB86D4632204B32002DA9148DA27A54126A6C7AD0122A07B746E16A22966E5AA8A1CD7A25A1EA5B865CB73B9EA7E64A139A0E8DDC9129BFDC75C150CC8BFD545DCACD2B2440ABF0DA54F0D0E77C4A7A73AF5B559B2728F7F284D04529E4B1258734B743FE17042784D102AB1B38AF76FD206C894EEA00F91A13C8806728FE76FD6EC2CD1114280C1D67A6551140312CC35649EAD28F2BAEC2DD8A35484AE19772E2A854DCB2650AB899D6A0C3347BE4654730AAE43FAF7FD6520A3A4F8B697344133CE0409758382DC5C92D9438F4691EAA184C30D6EB9082CC26873AC96FB7EF4154654B608B95DB84AFB7EA0E6807D18FCAB5CE0F2E1F47BFCCDB5B2272529BF4DE0E1B1BFE4CCEA6984955145DD942777D9291057F23C6F4FE87C5709EA66341225A75BFADE556A0A15EFB110C5ECDD871F7A8E92006EDDFD644DF4EDF7E51CB8A8DE9054263AF4E94AC9D91A5C8CAD35AD3B319261FBDE5825D6A7417E2FBF585C847D4C1308E23AB631EC284C7DAFB2681A4B796CB82E5D6FADAA564BA2B4A34A59A356 +Digest: AC624319CEC5559D02C3BAFEE65D37FF3FA6B18450B323E043DC3264695C516E08437E0E2EFC3051331DC63054C8223AAF0CC321869975AA09011C64A9409715 +Test: Verify +# +Message: DD1FCB1EBF6C2DDCEB89B02CFE49134EC075658849B26AC12810A542C9D4C1B17A93F217C9CC906E8337BBB2CFEC926EA925A390C5A967E069AA09CD5A1AECD5F93AE258A33814CB9F1A58B4D5ECB01E78D3F9D4DB266DD01E9C7B7BC36C05460AF7E9D6BEBBC5C4136B9D7712C41D4BD12834BE77D7AEDD7D69950A331239DB2DF2D581E6A8E16ED7CF49755D20108913CACEAC9592AC90D7D387C324B117DE69B44318108094AB1BA3E79C01531B2F38DBA0374A399B8101F579697B721ACE06AECE5982E08A29BC11756150452CFFF532D85BA6067F9F3803CDBEE5AF495C0E8B91FE035113D93AA37A055CE784515CD81D854AD5FAC4356DF2A03BB3D5F24C6372A1BB52022E065336C7B6E9BA50B4E6A1A42DA12947522447C11CADBDC94C3682F8A4AF8B225AC74A15FB0FB2C2848A4B964D2186B40F8D3A52C28DCA40064815CFE5856B222AB02980A56410B7A486B7F9AD4676CF2AF7A964FA3C310698C46EE228B5A384A9A270AB91A42A77C7F62E605C221D3493393CA09D76BD8105EF78496355DB7FC25CC81173733372255A62CF8C1A3685A82E861095AB9A00282972252FD54E32AE22BE332089F1D48AA02386DBE762CBB96CB51782CD56DBC42079CC5DD535A27EB97B33B69809F38B663A0E6B41128E18E71FF4308EEEAB2FF1327D169CAA475698D4FF298515EDB87AFF196E597B1276155603C0FADF2D70BCEFF10A1FF9185562A4C2BAAEEC9F60559B59C74672EB4E4AD7ACC7AAE9C0A791E4D98FC39A0BEBCDA41AC6AF55AC0F8A8592279B62BCE7B87568E2913833156993B5DB3C920DB1102B6AACC2FE77016D342FAA1F12BDBCCBD274D19D18968307AC9ED689662257C164BDFF241C0912925370522D30ADE78E2C50E51CF91A31CC0F232FFEDF6A3DAE4A8EF55C0F7E7AE6AC3773A81022460C0B0FE99208C7CE6110B2F8AEA03F810ACBC43AC5E4D5F8B1F6B4D80FFCD6954DC46DDCA034EEEA16218377CD8DE32D49542C2AEC5AE59ACD8BD61EAEA2B5E46DF0383C7A7D2D9F5ECAA6807028668677C1798C63DDDB8DE7ED56B5653E46B9F4AD550C4B9DD9CDB760C2209C36EF87C4C6DBF4F91EE3FCDE16C0C14E0A05ADA413F1806A2AD6CAD950A63232C10CDC556ED121FD8E9F46A5B3DE9CFBCF5FB45A3C2AD31A9A8E6B81545B9F175DAE1886D8B1A26705503D262FF3ADAF21B19115C7DFC648B8BFF6EDFB5DAF10BBA3BCB485D12BBC5CC57E81AFDB1D79F74B7CC25804C7F6B6595DE44A31B8715A196343584808ABCD45020845467F3963D658B4E4627851889710D4F6E8E908DD46573F457FF61B3FF3E6E9019E7387462FCDE02007CB420D54E0C070600A6B9794DD65FDC9C5DFAE54C1861E3516D9FB163988CCD709E5F8B8037918981BA40D29C23264B84A836FEDE4A0F846DF71FB3AB2614A9807042A3E6A0DD4999EB7137CF3F0839B50B34F1646F8B2C647C72796BDC7DB1E2D9A7FAE32EDF256591594BBD9CC3D07BF2A1EE60766C2B9C0CC93F90B43A4EBF955C21FC4ED21A410253AA3B477D692D5DAF36B85AAAB374C82F55426106A8BD93881AC3455B0EF0D04BFA207418884199C428B1AD8CE95002300C3D7F1668166A137E8CBC62BDDC48AE0A98CF185B0BE15870006F53931A42FF305AD605636082C46CE41856F8157D76C7E92DBF0F7C30F8AA7EBF9F94FD738A195B7C4EB9FD586FAEA4101091996935DA6F71AAC791A4CF7E18822A3C6ABF26197774A275133FE4443DD3E39AE92C166363B77E994AC541C1FBE6486E7BFA177CBFD9B83101610D3F2E5A9D8D0A31869E1FDE59072E2132AD7A83D6B855928A16355EEBB53AA30E41933CEC6B5A5DE3E5804169B3450F221F36EBF8DFB5EE7577E85D66AE0954CD9FF7705D2CA628D18CCD979C5A0D6332F497510DC7FFE93C8B8C69F8E6556AAB21327EEBC5A5CDFC2663D9DE4D8067A176ACE8A73A8FE4769B6D2E1C2FFA1E87F88769CAC1FBEB3CFD0420D38178F5DDA1E051B66C3EB16562A9B26F699D94100204095BE4D3B934003B985C5CCA0F7C0C5654984174DE49C0894BB6911B3F7833E1A1366BC602D9084DFCE5C5EF64847F2F43C4510A2CB9A1B941AC91E58037200626A5387EEFCC59D58AE4A2F5A3B2093C263486C0C2D21996315E90D8C9D26A7373F077D6DA79F26E527D98E0051FA16B01CC9A3CBD59B54F4A0CAD7EE2E0F65A1A6B21780D008B47966D6EFE210ABF2D3ACBE88530E92CE46727B492118CFAF3E60262660B5CF10DA725148228767D2A4B98BAD587DD5C9B20C79CD93FEAA472BC87D6573FCC27AFB843D61E43C2526E12057A5DD1D3E60485D80D2199CFB3117C7FAE7DE2DCA9A09086A5D3E9CDA1849209FA212F04B721525C7D596A20A8FCBD8471E4AC833119A69E616FB8EA0B93DCCCD5E49AA3086A9EE19F360E314215D485D19F07D6244D3FC9711091837EAF4CA0EC81C2A56CD1620C867C42FC995C45BB42517E3EEBFF725773FED7AA6E2E6CDF7393354AF41961E2A3EB1A0CB54B7349237F02B216FD1FF67FFC545EAE950FC5C7268107AA7E62DC5194783D56E34221C6752D778DFE440DF0912663932C58C100D009E53FCC5ADEF29EF4E09FC9A25BF4D4AA09F6FCD9439B609753FF5F0B757A7A494B8FC48B37BBCF27FD4D706A89803D61372813980E2D99F9EFE962B69DD29A04DF601D4DC932661FDD984AD0FB945508FB119766BCFF3904D2343FAAE34EC0C7A80746F10604F573B69B5D7C40A1F94A53BA342C4D42947E8B1876F9E9B8F3353995CE1C109B7EAFCC6F5D148589AFC81B9FEF9CC57103465FA414D3711F863BA7932A5A330E3FFF1C8B193C675421AF5E71EA507A3A5CF534C5C3119C1223D41279C0FA0C263FBC5A3921D7F01225FA6D4775F48540EF6581CD0CE0925A5777E379769B881ED4D8B510651FC222E7D6E301C4088372F4F1ACFB4A122785AE56A9DB8F7D21D186DBF1068D5CE21C2B030AAB2C7EF3DDAE485FBB2BE781A40581AFB4446E058F625626CD50C211E9E9AFB07BD750ED5C91FE58C4E9F31D80CF6292CF882B89F79CD2443669E1B83BFA2414CC4A21DFD4447BAF447254673B2EBB5F5FF54FE6541BE79B686DAAAB467 +Digest: 6B96FF0DC49C95874C3B87C51964F7148563A2CAD06338772422D4BDD344DD6851420195AE6504610F3ED4EE6D4ED75BC092398D106673725207BBE01E4E7C37 +Test: Verify +# +Message: 2F6AD2A8847466D4D29375BAC2F55A534E003D84191FA571DD05E5F1795E5EEF122D33F49E342C748B84387108FFEA1EBE58AE12DF6EF08D6E9503A88DC568B26C2B5105C2FF255EB8146E3811B5EE075C354F2B7518F37D688106DF81C4AFC1A49186454C0A66580DF9EE073D6E4AB3CE6FF65811DC9208D443E4854F0DFFA1B2D3E0B3D9AB842B11CDA68B94CED436DDE967D7EE15EA9873BDC2F3C1C85D6540E9392F1BFD5E424A5AB11530F087C0B2A12C3A2C520163100E5612BB56555C12B3E08A62380124046654DCE5C22ECA0A8C75AC4C9F1FE44344DF4F426FCF051AD47A0D2FC89892ECC50E6260FA3877BFEB7714222CEF04902B33CEBCEDA0488BF7D0AFC5D2B986C84B9A08D88AB0B734FD5BA82D980857847D5CB0BD1B7F9BED449177A3E412A05C629650A64B27101F930B7942B59DA176DA3AB09A8512D23F89FF0CE250EFE77B84984CCE383EAF6A92DCBE52D918C25FE23EF8C7322D3D79B5BCAB50E37FFA4D66959E3B3ACFD2A92B3C7EBAFBA037A74E70954B0819E3580A3BCF2458C84067F25E293CC9B2DADB60C9227FD8648BD9AD64E052BF2554C912C3952E90D65D95E7E111A6CD80889A5B04ACD996E4E9EE39C7B8550C360570DED2009306659E3D39F8B1FB7928418444AF212AC4E241E0A2454BD39922CF974A403A47CC8CDBBB1143E920A6970AE6CB1B5D1DB64E8EAF3BAA0B099C750178C94A2216B6C5B8C44BED3FBC81FA91019303AE2E04A1BA11635B7B7992FF67C92B6A33BFD032824ACFFAB7FCD4EED8BD4D7720CED06EEA384ECDA8EBC4269815650F1A557C46FD267D43B17B664BA1F2B021A2A399F1F4655C3AF2AF771D3A9D32612BC294BDDA88AE945C247A8822D77FF845DB86D5F42489C8DA7AC727BC41A0D325914931429D23D5C3FB66683E650A2CC8B8D208612C067D70ACEEB98F5A7BEC58DF11494390B5962F90C86712A86FFDE6090B1D972F60C4A400EAA07372063146150528F09DA2B369105993A5770B44B5ADB2BF62B8C81B22195F98490B61769772526FF77F8B812D9EB91D9EE4E257B472D934C83F16A7CCD16323F08C28D9D2A7383D497C2DAD495897E6DC26B999D99005DAF4C2F3E83F9CDDC28075DA792F670FBBB55532C139998269880E1CBDEDFA64E1A817EC6BD9443894BFDE4FCB4093F787F34B79E04AA16A0BBDD9BE2AC288BD92F91EED43946E631B1C0022983D0B413CDDE45493F1E8A862691AB6981C78352E651E0F76211BCC8D2019189E4C3EA9AC8AC65ECA8D170306C1B32AF6CE337F0E86D333FBB127E86CDAFD6476A6C746A7D511B08192B8468C4812C1DE75ADA386F782284FB2D845323F12A7128F8D2972E6A3E564396C0A2FE4F876A9AB914B3D3B2E27898B1829885D9BEF274F4EC5B9C12A8BF56763F99AF273629C56CD80F68F86F2F4182DCB1ABF464EE27451DB826AA99463E71515E48B2B50AF4215F141BEED543E11C62787F7BF70E81C645F3A36CE0347D57CECD2173B0BDAA9639D2E19D9C6796A8BFA53ABF91F66DB9488120AAC656C226C4FB9FD6D359DFE699942F8DEDD258CEA79F2740612E1ADA700A7915F95B1AE1D9712AF229724A1421D039394213A32EC13854186B946EA8907EDF25452AF4ABC201D390D0E969C3AEA21ED9CDE6264CA4ADCE072489331F1A10570DE447158C93B861ECC07B5C4EBDD4AE960C834EF0EC9FA18EF5405280FA6CDFE2E86644321DE7290E037AD74BA45A49A1426E418F6C1F6614725D6040BF1CE475ED43DC4DA9F1AAB38285F05D1F2B6DD77AA67AD3CC9D9AFF19DCA4851B43630989F0B15B34E72AC0ABF0160A3FCBA86FF17F528A95172F2A9E9F169020087C00A5E73DDDCB8587215CBB48D1DFA847327E076D65C5333D5913C2FA880A407F3219054CDE41758A15D37EFAEE6FB1F13A0F1203B1BC7C222BA50B2984D7F63316088B64FB9301312222AC32E9FC49FA429C2C9CD549C0AA9D0DD0BB85008F2980346AB3469BCFCDF23481089BA8622E5D70156A4926C9034B940FA02520A6402DA82DCD40EFA26A578B812236E4B7CF19DDF45977B80C5BBF78C218E889EA181CB2C019759DA813F13918C03CD6359813B3CEB6FD22AC36AC6C9E95162F008A7529E18B0DD95EBB508C4E3AA24D27CB94EE5E0B5B165D78584AE2769B33A87FDECD2122BF330750F463947F79C37D791A8F89562A029A09C4CDBD18B50E55181251E0FFC41DB8AD3A2DF8BB0EF2469A7302E3D4681C13CDBC1E87DBD08DA28404CC312E00246ED8DB8EFEDAAF82F6587E3FF4FEA5A87577E86CA223EA03CAD8B470769630636C9BF6203BDAEF9BD6A201A08580EFD666662E1C225BF96622B85DAF8583376CD0E0276E476625B96564255F58FABC6FF7C2CE8DFBCCBD6F35CA0F226AEF6E5D38C5F377F7402694B42825928915B2B6A8800D3F88CC11D443792180BB86B8BCFA1C5BFC1D65C8D494C8D35700CDC432432A63FA335A400A615470FF5C61B011F20C6E693E6A81E98E7D715E9142E380AB9F32578CC4F4232DC6B170486B0B7F97D561C86F9B85D813C71709F9FDB0F20C8F19EB4282458654F94C0245D43918A21ADF066E3F5C8EA38E1BB20D9ECAF0758A219C8FA5BE15EBE8B0EDFCF1C002B17E1B211CF4E326D41A817A0A27F7DD3AE43A0D7F391F02AEEE3CB011D2CB40AE41C5CEA3509778B9C3B42C54E32E914C9686E6E5671EC722F4EE7CDBC9948B12559351BC3A4C08270CBCF461D674EDFFADEBDD5E709D6A111A0EEEA0766112B58D7F58EACCE5F0CA69A037A454C18A441D20F2F0A591E01DC5029B4A3D1A68380B781BA3DA5D5B939EBBFE1DFBAB82094D0F124FDE0E650D61BFC257B1BA075F41A96C3586147ECE43F1350B71EE390D7C23D3344B9E003A55ED8C49A51B29B86098224314EADEDFEB565208BEA2E0D5E53BEA98E26A3607F1158720710E9F79559FD362B820E716D20F4F12984B81256BBA69AB3CE9625A4FC28296C723FE2A492E04648612591DCC9B3B522E965AA6E9F5C7A9BA90CD9684DBD4F21C8ACA6DBC8E8F5BC0D7A4EA016D6B810A735A856D03E2F4713E37BEFC02E14846EB680DB26AEE2F7AACD52E743BEFF52DC9E2F0ACDA35EB95EA56052F9735BA7DAC752347972D9BA129F31E080F08905CF41E6E28C667000FA17464B157DA47EA9555681 +Digest: 69EEAF2796C0BF8F7E89EC15D075B36AF8E1DA65A1584BAC15ADCBD0F9139B768581BC93C04991B0F023B2BBD86822785A808ABE7A26D4FB978E8CEB53FE09D6 +Test: Verify +# +Message: 1F966123A466E8B91AB2F7C62FE257C8A7E29B6334FBB8282FB862E9877E0367659F707647205D84528B9CC34F68D687C70E769F1DA70F82582BFAF584B04288F64A4C3F84EF8FE99ADAFDCA6877C75C4F288387EFD9B98D66B3EF476DB58C86A7407F676C875AEA56A488AB9A78D4CC7D649068E71F230A7DF5C762B8F9559B41888C61FA5620B684AD4D1D338FFA1CB39E247B48514E18BC0433DA01DE01BAC3676D1AADF3C6BC753613C23F2798F4C27E829A2904EEF511FE4274DBBBAFE56F6810D7E54BA43A7723FB07E7FFE49F206931F84853D53C306086336CCB0F79EACE26CEE41FB3B5A42B36252B3162B8B067AC41ACF11D1ED9F8B38BA54BA7163A8E535E36ABB1A7DCF737BF411F7B01C96F72E721557B8A98D7B359D7F7635B7E83BFC3897C0E648511FA6124B937FBC3E6293261507731C3A9D002A1AD1A8212743926CC68E1CBE7C8052CC44221FA173EBA1DE6E444A319E1078E6A6874C1B55F39B97E002C3082DB286A9CDDF36745F14865761BF995614913D84CD89DC408ACE63F972582FA6F15AD6F3374997E85DBF1B302FA8EDA22B3E0EA68AE7530B526CE19F257C961E7906B85D0C2790F3585D0A331D68A49DB56BF743CFC24D7EA159241048BB4A8BE9F0F18065605A3A858B41DD5ED39FCDDA84858653FE8801849292EF36A2F9AFFC404565129E7A3925055BCA6B527004C0642279539826A27132CF69B4E742ADFD5A271D87F00C468521B945C99F70799803B4ECFFABDD89472F3AED8938316A061E69EEF5BCF47A516B84052E53EA50A5746837996025E29DC8F6E23BACB55843BA5F68E15D68CBD2A037BD0B6B48B34CCFB9FA1A5CBFB7B8B6AAA8906426C39DC9B4D3B6C2488816722BA5EB50D561075AEFAE78EE1788ED63010AB3C4A93A255F996D3204C8F6588F73D90364F134070B5BBF399533DF074552DBCD99AD9C237A38003AF2C7AB6E8722A82DB8FBF94A6B459AF89FBDFF624E63B73DC9CA704C6FFD6C40A952455A1B765FAD4339CB081BEFAED79317524C07DE8503AD8E1247318C3E6BEA65E7271321036A6800F528BC761291A8188903D2308AF8EBA1260870138520A4463CD698C2A2BE825621465E890D8AAC7829221B9E773CA86FBD451B213741F8F95E770F7DB27076FE9A034EED875F9A46939E24E669926E7D234C4BC55DFC7965741ED7BE95E9FFF582A1231459A63041DC2FC7E43EDD317129760E19698AE255A5E1AFABDB112DC62DE5C40D04021D4E53318250159C3E27C4EEDBDEB8601B86ED697D2D26F85DDBDD4E4A9E7E9A1DD16A43B3CC27633C064996781558B7AC1940EF1DAE991C204E46097FC2B0028682CBFF6D3AAF7AEE7966EE884933D87C0E3AC88C573F6DA015BF20798546536CD4760C3BDE024FFBBBF38C2C16804F6F10C22A83F8B92ADDECB1A52F710298528B758F9C9269038FA375D63E4CEA57351E2A6579A16A4F167E8D245771EB962F51E8D3D4635EA9BFB6819FF0CCD81266300FD208179F7E0EC33AD53F569F2C4BE940A9CEE7E17B3DC84F74C573DEB74E47694B3FC59FE03907FFD4B35BD7696E22CBBB9D22F7F01309F7D96E7D34E8D22A9076CDCAACFAD25E7FB71F20B5192BCC66EB22DB458F6393FC741F3C1B924A29A35264135F93DA51166B1A8DD1632D5542118FB637458359C079203C57867175729D4D05AF1668311BFB9DA32943AF9F6F2CC4D62FF18C3D2287E48950F5C38DF08D909B07DABF7DA893EDE137071373AFE50BC9386A2264279A478B5E6B18090D8123D875AE6345B06BDFC80C7904E170B7C892CA95E2562DE0CD0968414C04891EB4668727F9D48E8340CC84539D227BD7A843979C2927A3B6B9B6F530D814849B969569D3AE601326C86B052E00A7D8EAA41927C530F7F9DE384906D9F53CE48F62364B02B880DF027FC23663E5F22C9FD1305AF96FB1B1391DD5A669B2A97C6139AABF85DE3449795356584214BAC000A6CD110C8B583E0069CDB070C140E58AFC8F614768C309A7BAF4BC910EEE8FE7354B4AF8233D444048B7024A8603D64FBA409500B60135775E263B280C85695D7C6E6802B0AC8079D8F89745C63025B9DCE1C7C2C438C5679302388DF94D9C407635F97FF537D869B8D58E94555065FFA19A663F368488FB733E4041DD9745A6056AA378964A0ABCAEBF0DEC57A0B5699413691D4687B807F14CE2077266EF1E9A8F9C19B9CC66AAAFC04B8696D697934B53996C360E037E6EDB315DA3D538BCDC341FD67AC099D74824B90A8232FF29071BDAC44D4D1CB4CC12B79F73FEECEC3190D59CD0F4EEC0B92F39DBC6F25E2EA65AB62959B5281033B3FA266D8EB1927ED9DE0AE99024206BC3DA309E44ABBEF5C090AACEB8B4642E34340AED0608045B5910FDE48442EAC7CE9F808A309EEFE5413AC6A7C53B4A6170A0A9F6C28BA6FF462F37DF881065A4991B22AE5645AAD46CCA9B4FF2437628BC6701FDF774526B2A367D6EFB6B710449FCDE697F0B6AAA7615B14836892A4D0BCC9C4BFD75EFB95B2A320F78418BDA0B6A6786A1AFC1B64BFBC9CBCEDEF618087A9CC1DD4B09A1F40B5B4B7CF8D6F7F84C1793B6DF4D443FF653F734E32693E2BC19674C9BA8711D2DBA64306A8027310DF7384558A9A3F45306610E1BEE1ED9AB80D5E37E92FAC5A8924F1615B4DFE313B8EBEF05C28BB535C6D94D1538B8E1BD60A9C695E6D188AA33995F035122DA7F9BB8DDDF7D9B4FABF43E39517A44FBBE65F27FEACDCC471928A9B7984579BDE3497EC9C5E30883D6BF13B753044C6BD8682B193B31F6306A24C32DE12EB82245BBC8542768CA4F63BE14DC0C27F2304CA098F6B07EF5CC0A72B01C3BEADE10FE25D3C8981813116598D26BF685D52B08E63416F050812A220D6A6409866F0FFD55EFFDCD7EDA16EF447F7E61D4896E79D37701289F339F64C11A844E222A2041617EBA18371F0BC654494104AA782810EE1518B385A0A3B58F1DFC8F33BCC8D2699DF42A95ED971EED9D0E1D514D8E4373AFF3EA6901F63832E636847123669AA7F18A26B183E5A9E52F92A19C62424442C31C60D686E897745B562F1946855757FD2F6C7AD62C6E99585DB2320A9FF0A203275062B3FAE5AB52CC1FF5A26FD0C1081D71653AA56BDFCBBD900899CB784EB1290CC804227BEAD64715831CA38DB4F5032B103A221169F23F8A1E70F960AD9CEECEB231D9770DD7B9A66C4 +Digest: 35AAB7B74ECC572AE7DDC85499D58255974496E4318097EE3C4A00A4836DFE90D1A42666ECD1C098B1F69F64BFD81AC8EAFFBDCDE827785D6C570360E891F801 +Test: Verify +# +Message: 486FA7B2E0A6D9D694552A29B8182414EA8DCD286E70BE8487AC4159D77CD5CF52BC1BFF80F008DEB7B48BDE7B5F0786A96745D06C035CDF66C6F9CD507474A41264353B55E5AE326398EAD61F7FDD9F9B05DF150F3BFE90F603CEF724AD59749EB56AE8E4C629A123A12E736E7890CAB00873619AFAF2703E64F55F3E54D7AA964966F71D2E8DA59D0B31D2EEF983E6251928E4082936A59A4105E17F6B29BD3B05D50299FC0F958209285019D74A39F7B26BA8FA2011E1CE730E0F1FA95BA2FF00F997DB70B2167D89A2297C043BEF96BD8E0F861551A6546687A92426BD1789799A1DDC72F4CFC001AB126121B2EF430516506159BBD0CDAB26235C3664DBDAA9B34A850A8F418C063F98F5B8AD98837555BB9EF09C22979229231DBD7E4C6DFF52A3665A2730AB82469391BF56090FDBE66F680AC7FC1E5B05581C72AD5D2CA92703339A788D90FF05D3E6E3BC1482D7F563D27991A742C9EBE8824F3F55375ECF3255A20731D8EE6BC445AC9B08813E2CC82CA0C936E8282AD349502EF1AC6C6A8D9CBF42B07BCF864F313677CDC7B9ED1194C83467216921CAE8A8F6931CAC0A75E16E8DE373C3C928F440C5DEF724E50890B0C3CCE9D5DF7980808A18A667C3925A771CA4B4F7BF55C6FF46EFF25F1877C744549458BD8A17CD8F69170E6816EFAE930024B305BD350ED68FDEB292CCF4EFE78C85F1682086F668BA83B19A003D1A359B2D6F512AF7397DCC110233773063DFED5506B76B1091AD56B83E08D0205F76B0ACB7D350ABB25DDE97B5BFE6DB2B783A02E6951016ACA5A93E8BBEC365A7922126093C08453A424BFABC42D8A7B76B78419F37612217002284F3158010C115F6EEA6AB97D63FBDB568C68955AB8A823AC7ADC8D017987628C021FD77BF70FFF989672F73F2148E22110963329A53D0AD9F21D18B49F74EA1FBD1F514732B1621496FC2390D16C8D9A581AC442BC08844DB2605A3B7964CAFB1309C595399F503737F276DAB55390A8F75CC9DF0B74917E5E1D6E00A1F38BC6432FC15270971F42569B42F8EE9635E391406BC2579C2978FE0684DF7567DCB90E142C708766FB62106A2762DB5C529B96E893BAEBAE58CB7958BDB5CAB5D2276664650A3F044AD65696DD7142CD115196391EF5817044E7B8E12D85ECA93E83FAEDA9A51AA180D372B34A8DE79469784C6E049F1A8081E4FA11CB660E1108B8A850A4B0211C798D66BD4D16D65F68161167F36B0EAAB972C5B78B73BF0CFF056FD951B725050E4295269DCB116C72BDC10163FE266CA68C69396CEE0EFD6D507BF7E08B95F4029B3D52CB39347A1BCF35D28479E7C9800C9B4F59AFED965B2512E67DC3F29F66346175AD4D90D935B8FB3B076ED85EFFD5B6A31B863C15985C583678DB5778E4CF65C780DFC6A81BF40E93C47982FD41D34290C8478D279C28402396D23F39D284E81C3E684A1745E72A88E4C33D0853C94024B9B058F69352945C0D8B9CAEB2D4D96C755F29A684BA22CB5EDE83A463A873C06BC1EA1E5B412777AB261406310AE61BB69376ACA2A602F62ACF0864411AF7D24F0293004367D41D4DB6FB18A21F47A31D9EA037EB950DC07A5A2F1A8E1DF414A2B98511D9F563355DBC6F81866CF3A83D5E67FBF20309E1A4EBF1E60DE2369B542B72EBB104D728E7BC812E50176DBBE8EABD7BCD3353909519C6F62632605AB8E324E1C4DB36EB04712640034D4B269C97AA6D7E09218886FC28237A3B27CB58812F7C4E0BBDD790C95C8AC10B28117A26D363B4268D5B2354F6B3FECC66EE7FD1A638461761A9A531294CDB9F197089FB123084565DB525166079CF61133707FBA4599948D21F7FEED0D4A015C71571D3996B48F7D0B469EAC3690ED5F1C30D47D996BA68B33A823F314A7B1D888FBEF5B41463085E912A9561783A7C7D2EC53F4A2E4FC267A8BB25C0FED1E7A7C5BF0A59C92C4D1E81BFCF534569CFC7F21C36D038584C484AC789639CEA42147E269FF0AF420B64F0375A3B99D9FD8A356D6263CA4670BFC99828C688E49FDB116F1FEB5F60B5732C9EE0C6EE625B1162D0DFF2B088EDA09C9D320314C194A43EA21FD5FA0927B850FDB253F957D74E35FA79F8267634A0C39C0B656707E1DAB9C90E0BBFB21F8DD297DA8BA8CE9A0F8C7BC10E082FECE7F0EA8DFC8163C161CD454077E80FCF2B88F660FCB8F326F933F1F35B60D91964A156FBAFC6F2CD22C02768EB1B931021D6931106C67DC3C6B9274D833AB3E266327F5154A9BF617F97C64918E61BCCE8CE8482DD34E98B58FF484697D373AB3F9F94C5BA9A364ADEB5811C9961189315A7212B2E8F56E05AC535D3495ABF4068280CE211A43BA35625BC0B4772C3798DB4B73C3447287407A8272EE657E941023B7E56B5CF2EDE5D80183247209B189E23218B2A50E86C39AA1736E96B024547A53863E39648DA3A509A5F608357BF1E51B82B0E6870A0B1153F37736F4FE4521BA2A114B94CFE509361AF6949A7FFBD680EB55836528696119FD9821C2FB41A6B749633C803D3DF5A8F9BB8A0379D8C534D6F59D8F69913F9C92F82F46684E105DDDAB0EC2D257D5C8AE78240EC2527B7F4F1C6550D488F036444860616BB1DDE5EE4D9F8F228C4698EFCA4CC7EFB1B0C48069D031E3C51514535F96F2412ED8EFBC2EEACD37BAF957F38799C8D862A52172C48F5810D51926EE3F63F2FAF21B6E648E21D325D51A8BED3321742D786BE7D7AB192B31575F03B39887859659A45BBD4646FF6FF6D294EBCDB76D9A3CDDC2BD33B849D4733001D4C630B5E912F3E4340438E644D1D5B87521B89DF1F6FB8F72B70CA168CA2ED9B2B63EB3C011DEBCEF8AE8E712E301029DDAE832CD5B8CD0BCA6908183D57CBCC94DD0AC01B7752ECD44F0939B143611E4E37F0932C8C58A305EE95133CF4CBEB74F132913C2D79DADE85630208EF7C439DFD59B3E3B05886A162AED0BD23B184E92B92AA538ED120DB07A7C69EC4A2C9457311172843BF3B15561DCE84619CA02A7E04A7094B414E1FC8ECBCB9C69033596AAA93F7496005467437EA4D05155B155F0F539087698D2680C3BAEAD688AFC704BB53C08B9A9F66FBB691D8EC3091DB7AFB26D5C9D8501B8726D7A95312358F215C1D24B61B0F2A64F48442465CF12F789D6B600322EF6CCED3F3A6A1EB126D79AD4F8BA3D2B6066DBB0085D8DD90F766BEC7E3A62C5D4724BD6A61CF04399D2F35A2AEDE7FFC3ACA6B531DB5E0E05DEC764FA33BC5F55128855AA4AAA2C09EF304A3CFDB15E274DA5A5462188731DF076 +Digest: D21F9CBC04A0BDBAF6E5596F562E7F2ACC8C38EEF6A6AEC050094A7E521A54FF64BDC19CF68BBD6494BD31680C1D494C84FC1F2C5BAA2A724F9C55A027BE0C0D +Test: Verify +# +Message: 404DC2D00F45C9A2424AD43DBA21022E6F6CC0A368A045036CD41A043628F9BAAB0238E01D704440C34BFAE00A80359D3AA48607819050CF5B1A482B344FACE2031CE3CEFE080F357CE5C035F5285E4841C2BC075AAA1F00B6B2ACA1799B3B7D8A136BCEC236E49F9955CF365BD05C8C33918928F536C926A75B3CAC67EF11BFEDE4584CA6058FB924EE6355E674557F5132366618661B6CF405977331CCE9E5B3E5EBD15D0D617F1DB866AC99F4034DCDFFFBA465FDA7A13F6EDC031992F4A547511B4620659F569A48F7117443E307CE58E31F84465EA2F27D5EE9774780C6F54BE4992DD69AC8C6C1D3950227B224B0029B25DE933FCDC335E32652832FC2CD6B6A2E19531D44E2AB721C4D886E8E123D2B1F9E92F9CA1C8370EC4FC27C7B614DE007BC2C6A8DB757E6465DF8101A03FEA440127081BE10F14C6C9B3691BE8F7E93E7488C7B2B042DAE24F68C542DFA91EAAF692465920F9C3C77076CF38234085C40905F7795B2D8F6972E969C7F24A5B1803FC1971FB416249B25877CD7BE681AC15741CBD5C41EDA8874B62E894AFA32CE8555872A606DC7A297632BBB84572A47496844E7097A48B17DA559705CEF66EABD066511F83E44AEED8B74A30861EAB907140787E498C19B4ADA631D1E1E96191D2D5ACA9F243B6A698A9614F21B88CFEED5EC656AABED459B4F0A430EA333A8C8F1B1BFA5D9A1532E7AA21C1424DCE8FE1DA916D60D79565A0530196E74D26DDF5F624D4BA50A5B102D9B2E27D872B079361B29305B189D5EFB783DC899278AE1D2583257208DE0179D9F41F5DC2D85A0339AE01CD08501A572A73FA366F494C61665753F215C374239CF55890C31BD0A327AFE45C4B39DB1AF65C9B83E2658E0035CF73B92B7C38CC37FA3DA2D234D38E28BB6C788ACF75F67E19E31ABD93C8EAE53BC5EF21CADFB4070D54C557E5A2FE14DA4DF149B0EEA2B179AD630127770D7A5014B84F04E3E005021AEAD1752FB1E4682B3A3E2849B74DD94DDDB6280AA146DFEE68A24FD346790F916C3C653B402EEDBB51FBFD0B0FD2C6945095DC529EDF14C3CC69C81531B92632DDD3C3C76F5F7EA478211ED8306D4C047F6DAD3CED0FB0EED80446106C1E49C95F40426B6DFFFCB45958573790EA1C4BC6D044562DF1E2B1AE55C1F5986E61845C9A194F91B10E9483B79DA72A069B0B38D6E7C26823E819C4457C6AAC33DC555C505D08C6936F85CC15CC690F084F477B7915FCA6D83CF2BD0D6CAC266B9794D11D132169769524553F63768FD611A7C0BCF500DE918C1F610F1804D06E6A3A98390531F5B554A45526A1353FFCE4918A4CC8508C537DD43CC2EA83273CD1006D35E9D6A7A3019F6596C20C52F2E6151604169EAE3FAFD58DF08459E64CFEE32A6A0CAE2EEE171F4441D25D789174D1A8F4C715E199ADE7CC2EF630E4B912BDDA40BACF8A2D681E03CD506FC8862A05C63DF7E1EABE5F4607F97B6283EBB3064FD40A711AC44EB5DA6D6BAC88DF31AA8B54E022DB318213433520EA596780816E26EE2E00915586BFBD0A8F8905BE541A10814A0ADC74E3CB4C04797E822DB4BD99E17D46D389912A1D26887458CEF61365E0D54B68E413810033BBBC5AFBB0A0E6E2116B2A821DBBF7F8C70530F939D69E88ED348437EEB5A3623D3108399B242936162479227540B1DDCA6FFFAD0C0722E07620D2254248B33938F28B2C6BB379D500028FD6F11DFB9A31F0FA54CC3C8BD5AC777B6B464729376176DC950B9A99C07100CBFD9C19952C5929C96E8E623AC280EE8EAE3753AAEE64060E61054AD3CC8A242D246C1CDBEA88B3949C06CC743193EA71A3F7E9339ED10B822B0D8F9AE35C995E03194DBF7373B4FAC2678A74D7ECCEFDD7704F7B5749804DDC72DFC834E50355D4F41CF9F7AD8D8473B0B21536E49FBF77D4EAA91B82D46900CE5728BC3C6A6FF8D11C624E8F648317923CD001EC757F5796EAE8216F1FDD68C3869BE61B678A75D4B6375E18DB333EF2757B0306F2889FCDA386AFC405C708049B8E81E81C25E34E7A761220C8DD245A46420317B1BC8698CC08880C8A75DE3096A1B37F7328CB2D66B06BC18287D691A258D0A91483FBBB957E5FDEB0B6319246F4BD1D0E7555C6E2233D8C38D8FD19567DC0DF023381198DA3926894745F019D33233780764613EA088D4C173617A26EC6CA197AB214BB4A2322F877C1B16450545D9B61A893F729F98C169E0B7F560EC2C5E202EDB96140522D942BE5C926ACBEE7E5015640853A076A719940DDE58E5FAFCC2F5456B493206140A5DC769619A3F7845B14CDF659A2A76293D98242E768336C9FB27914C9C16DD67897C247724DBD43380D4E10B12FD267FF8E1AB4AED13AF9626CAB04C94869AFF9CE8C579B82EE07B88237CE3D2A726A049880094682F8AD68E76B67BB544471D20A7CC3F34B73B11F6CF288661A53A44E2A2E9E063B702300BCC88BC3EC3793216C1438D7CE9B394533BE2406703921025BDF63A6F2FCEB02638B9C98989D8AC132A30F67D18A5782BBD88234989C1B32519F3AA6A0E658BB3244440075D840193221BBB77F0ABAF651732540138F58C9EFE8EFC9856C8782E178D4FF4B66C8E57005670000BB5C6B015773C4C14F7EFDD85007AED3D941F83FC443B8B1D9AD422B53599C038B0F4E1DED5F55A2E1B646AC69696939289FD50E55E147A87391AD4C288EF1BFB9C57ABA1DF34A372112DDF8F9B3BC6CA57376C2D05B5D7FC46B8A8C573BF85C62F4D7431C359CAE57CC06DA1A31EEB74D621F891A518E597092173A003E27BC97562CF971F10900B81C068D67BC0BA79A5ECA0FB192B89EA0C4D6EDD2A1EB75B4065AED924D96F7F7E0C52029FEBD55F40560D8CC4E9973FA1DCB4AB34AA58FF27350C8FE0A92AC0D4CE2A5A6BDFC4DAD0A4523FC3FEC448D2725DA81C4FA3B4E256460B1D25C7AD630D86931A0D1258BB739F4EF0719CBD2475CC787004F28F30457672922D1D84E94ACEB000E4B06CBB396307A0C4FCD3120DD192244C8F2EFCCC6E778E64708B1BF223E35D11263ADADAB69B84043FDE3B6C6F094FE467F28597DA6351B4DFA9791B9630F0A1575A8A3F5223F327167B54572A7ACAD48296E57225E251E115D97E67EC4EB51773EEF278E72418DBC81F9A7C1DFC1E51A2027DC350BACA8D21FC462A8D354BEE6FC80569EDE73317CA78A9B1468190234489F203A48D1B0D15AF2D3F1B73FC11B7C6AB4DC5AC4DEDCBCB2A695635A84CC3A3272B03480EF8869D8E393805E2EC772A0D520302C7AC3BEFE1FC5A72BED3EF64A7FBEBA31DEBC1659DD1D1B93F4BEDF15911CB67D7CEDA +Digest: 4E2FFFF4B24E2F55510922AE82BF6293C9C77AE0DF83C981428F3CF6A59AA6E1101E7C223C0E1F5E37B2CD0CA7184B2B838C149C41B71519EC6100D3BC77BA8A +Test: Verify +# +Message: 990E2D324B26BACBB322FD0ED08D22E8EAB22C139B4B74AF2F75F169AC07B192B97F0F1B93B1D343E20F38681DC1C5D54FE956C3A0AD02F054A392381D716044C9303F1CD4EBD14A7B16A63CFDEA0A2BEC81DA388579E1BA4063217C4F7C2AC339A3F390F0652D28B3CDB07D6DE044A4C983B8239B5ACD658EAE2CA6EF53B33881F0DF9926EC7B97247A37544A3BD1F4C4F05C1DBB6A68D92A3D2038AA5E4C1882BA7373C2D5A0F57E564B9F209BBC5A042CFB302AE7C691A86555C7D7D89681C5EC404847D153505B7A8D20A52A3941040EA830778E95C0E646132E53E86D83DCFA20380F37ABD26D4FB6FD2F9AD97A202D2A8CA645671D31A5CE1B6E95962B228612E88FF405F095E16CF746944A169998813A70ED822669D32DC1A67E163C4710486501DF2757C9DF1386035C8317A0B45649F4CFD3979C4AB60995CCB3B253FBB6EE2218933F41903C286DB3F4BB39FFE53E139078268569D04474570D3ADD00696C5B201E7F38E34DDDEF49835AD06D762E476997ED6041F126BD565D6E80E7FA75540B625A92F8DAE4D77DB9B09C256FD4F2A0F3DC8A7C640B39641EAF98EA3ABBEE433D1BF4A57A9E47FA853FC8F02B3CF2E6F95589317664D8473A62C50FE1A2A6F7414981504D6DAD267B3B7E31EAEFD0ED86381DDD3CD643865E28751B991E71217343F2EBEE04CA81AD67819E19B2C45C57C39C07104155CBF3BF9F96124828AEF2FEE945F0E604141F2A1940C1F2E9A284A7F3EB40B35AD72ADE31E34338713A276BB23BA190E51D954990DCAEF01E3B7E59708BABE4CE65E6DF1E67087E26F06D45A5910B9B062BAF38F1A88238B645773E2DCC0D33A0DE1A8D304661CC9B0DEA7396C541FB4439A5E4E68C6057DA81DBF1EF0AF98FD596FE3A88A686854CDE1F4D2006F0CAA18FCD3CF79C7F20BE18076AF0501F32EDCCDFA8C7D75A628A4E2370058469E97CABC409AF4558D5C580AB7B5F1C6247EA69627D5FF79C66A85E414EE0484FF7E93B0621BD493058C168883EB2D4DCD4189147DA95F9DCAB03BDEDE2CC7E1F22500B5450FAADB2459EF2DBEEDFC186A9590BB323E8696733AA0ADF4CA550DB508617F10CAB34856E968474F5AAA36F0619834463AA6A623211A1398C9023F64D956DC793E920B19D90CEDB2DB486D571B2C849964D3ABBB07CA076630FCDED1BFF6627D27CCAF96DA85E7580C48A918BB87446611D295799136DA4FAA285FE25A85C123EC557D82C3F31179A035B4EDE95BFFBCD3EBC07BD5500228964EA46848BCFC847D6C2E086AD39C68B3C65ADA9992083C939B0E57E0EBAAFA114E12EBDD6A547C423EA021AC640C992EBC1D66F145A0A6A3A2B3694666539B4E639D212D87EBCE492F22EBF1ABE7725B8E5A97FF4CB5485602461B16C94EA8FA649FFF993976A8AB0DC6BD5EFFF405BD9C1AC1F18FFBCE118ECD51797A6511CE903F7FD486794D92A1D3666B32953620EFD401D1ED0C0E436DDB8F85E9E7DB0C3C2A874EE6619AC47E82D2C1B4C45BE625EA6E37BE736BC00EE83BCABC6ABB5A6C050ECD86C27748068AEEB4984ADB405BCE6FD4A86762FDFBE021B427AFD319DC42ED437E8BC8C622EE63D7679C6DC5F02D440214D906B96AF1DD0D0B9282A637EA8E37FBD263BA52ADE65747BF9F2F5E7D4E72D14BB1E2AB8D22E1F2EB0AD5A5EB5D76F410DF876A82138B5906106D665DE191F888382991E4F5B6788ACB01825A8B9D25D88ABE15B78B2E733CBB6AD012AB02AB79846675E634D965055B8F8746A31F75EF8F3C2FD97303A88ECF71342BA998AA146C790EFF0FD52819053590221514C30B7F0A7B8E7DA1F90676BF0599AEBB35D0BBEBBC671E21970D4D4B8007C66BA86329A835C2681ABEAEA0A09D9B30CC4B04E0A1E575F45730D2339FAE287A046C7E2D1A9F8CCAE76DEB607CEB3B09D75F642BBD78EC3D0FBC6486AE5DCBC594336DA0131CFD91444B3C62C6581C7A805F89953B32D081B02703A1EDD9A706AF53DC6231B2B8FC754B7DF98FBB2CCB689C48B76F5EB81CD9C9781A85A78E87AAEA6E582C98375ABA9E46035FA5936D1A5F2D8B752D57DFB20ABF14CC7EC9DE2CB87D574A592486EC7D80625ECAECD3EE9E76DD14C9FAD71F1D31D11F475226DFF86287FF57CFF86ECB12A0A68DE75BB9E529EFA74220F4B8FD0548187FDBC323FBA83D716F99C47CE290D36EB07017B40B34A6E67E837E06EBF5ADF4AB5025B5EFF813A56D59FB2AD868D5D502E9A52217FABDAA56B9298C6D0D69E5E3ACE40083C25D458ACDD85FAB47CC284E8021FC5C9E1F023301AFAE697097FCC9ACA2B6DF29F37A841E05F8E6A42C7C6D8CAED19E18CF6CF28DA0E075E33A33E9143888A50ADAF8ED52EA9C67A51E081E2284DEFD24E83A8254484142E872D89C71F2F6675B892EF38DA55068CC3101503D7E67488292D7C08AF01E3B30D37A7AB42E1FAC38232671AA1F8EF5C3330A33B33C1F822DD761365B250F2FB703BF21E0CBAACC1DDE39DC2CA70227A93D89A1B40F8401ABF5E817097D77D02D4FF8EA686CDE6599D484E74907001E73BC6B5EDDD31A13B1CE7CFCFAAC9CB11075831E0C316E4C41FAAF66FC0EAFF9DCEC9C055BFFD4B91CE231EC1452AAE60FC0947A76CC3A6B69BFADCD9065AAEEE4955A45D5A48D49F0C4DC4DF0591127A9DE42418B54E8DFF78BFDBBADE23AED0BC0E5CF4B404D4353A279030FFEE3719C5F612958FBD45235C06A917B6FED9929D594726036550AEFE72FCAA7CAEE968E64FF262DBF0C102CEDB15D52599CC07583C4990108548E02228393C075A01C5AB94C37EC07EFBCF372719E278659DECA1B6784404BE3DC6E05427937F45FD96B6CBEE5485E5824E471266A4E59F427AEE399D93B015298613B6B2C4EC018EFD84DE6844CE9D3EC7C8608AECBB7BCC4F5ED7EFB82280821197B1F40F06E9FDD4B4B37C14CD78D0458AFF2C75D9F5EBC63B76ACAA9BED30155A6D7F312F039E5B79D204FA35C7748BC4A94408762D237EDBD282C0D4EEC9829858101E68CF893F756D118BFD45C295DBA60CF98BA382D2B3FDD75F092D1CE89629D1473A023E7ABD792A71972EC975B120CEA0BA1084E97C6B6F00E16EEF4E90B2721CBA2A8A8BA1BBBED2A0DD5E8E7EE08844C76A9EB931CAAB86293F8F5ED6A798CF7141AC1C9A48CBB134753DAF3B136C3F675CE652D70AB926462C65B1163F780F9AF5861855E0BD349CCB4A715E6FD4B7DA9A7198DE9BFE61F4774263625E8AA93FCD920C853A52B6C0FFD9EFE56E5FE05F8B2116CFBE2FBA443ED9C2A8A7822AC36E25F449E6C4DDA3BA8AEA6479288BB3FB8FBDA950DF80F4192870CE6C4DFAF1068721A246A843E68290B82F738DA1588218BE3A0C47575B99448900EC4F945D310F7395DDD9E5749B20026F6EC6427697C180 +Digest: 9F259F58CB996D6E82B8505E7D8EF78355AC355A6D2613EBB69986416EFED53D76C7B813432EF24B881EF9F6B63B1BA153DF7E0DF03A8B69AC1A8768E7AFE389 +Test: Verify +# +Message: 751591F164A7D120F20CEF8D65D0BB41EE0394A3508A8660D910727FDEAFB471AACEE4EB3FB32AF165C209BF2FD61DB131F54B4285A8DA5A6C5F1399E204732044FEEE8FF0F84C0CB77BAAE0C83F6F18230C4AF12ECD516E3FA26F844E3B3A476F7AF537E0478B8FD0E61A627D0C2611932231FE2E60FF8DA7A03D481B89F9945BA2AFEEA631983455B3365643F972AF0C2B37F33DC2F8C35444A368F67C632B64DFE072B129F55DC2242CC8354025CD62D4757E2D95509A94012BC47CD6631055863B61B6052BF529BC33428B37CF7CE9C2F15034822B87735BE536623782B9AFE3BC0425F85DAEB5B36CED7282B57F311EC3E4F69E5D87D8BC8DF4F2B491FD293D023C4C3CF8E480A4F96328352B2D7BE0011848A5B7096CC8F2F190F092B46706443582E3FAFB6B823E26A3D9042FA12BE00F04AF871F96B5CDE6FC0C975183DFC38EA9579244AF268CD3E6E3496805378A2D76425687C4E96C3F6EEBFEF04560EDB4AC14334218B5BB716211CB93331417924BB37931DA47368B8AA28B3F21AF470F01AB0DEE014781247028B896ECD7D1E51847FC87A88D0D25B8118A3855613B70A6D2C278C48C6E3DFA8F711B7E54E5B8C044EA3FB434C3D432D9C85158B5F0D3E64E122B688CB87C2D4F950E1786E5D499EAD27E0A63EB7AEB42F81D69A06494384C5E98177D315077FDC9EA67F9F5C69CC52D44C61F37669A9F725A1FBFB5C71B9D6DAC10552FD8E2F2D2D01ADFDFEAC9FD914579853129807D3A4A6EE9CE7E8930BE6837543D8C2E713B04199D92D4BEA69B2528F6887503BFE0DAC97CA6BB34D59E0D6FC61FECCD7E3D644209343CC61E52C7D676BB64F9E3AAA7C2BFAA90C6B0A15CFE96939561C02A4F9BAECFE22AFAF6CF9AD27C449BE4486A84C05CB156B7D38C55CDED996E7D61B0280B9CC9B4F74083D1605B3D7A88ED208E98259CACFC23A4AAD39FDFD0330B40764222B0AD58FCDB1C7B1C819870D84B9FA9983A2666B79BFC160F9B0ACB40A315AC420C8E68F8A43CA3C30F6E337752FADBD74B14A3F9CF70A4173BD146881E5345C8765C57513534326390B5A0457235E1D4D6EAB677F9CD3D0E4E37FA9959EB26969554F734043B93B9B379F7173C4B8200C117657D0F19615BF137F89F0C0C32EBC933550584AA902B6799311D417D3FA7A910352F5A0DC9FAEF809E70D641F616F8829FE7B555C5C5E1745509D4EFF3A72A0C6AE378D13EC1A8AC4BC553AEBA9A6CE086AF34B0A997EC54D816667C9F987CDCCB6CF0F8B2065A986740F8F4F835762A0316917C54624154A23C0BC9B964CC2D3571F0B80ED806E43D35C2A50E6F01D00EDC9869C9EDC12BE9259D59DBAF8AB757241336D396BCAF820A5B877F42FDEE6B9AB80A0334EE458188B949A1948FE1EF322FE8A93DDF72374BD168DE0808C157B2B832FC9BE7F29C44875C2DC7E6C46B2384DFB48795269C4ACA9D3B68D0CD295B60FE96E5E35544A0A48D871FF446D407499CF94CDE44AA4DD2F6F6B78647EBBA5325253369698F4334DC2542A231BC57BAEA20A5435C95C653CF79E9D4B166478474B98B6684B44BC45021C4F5C3FAD552CDACE962240D39B8A5B138630B712DA6EB6BCB14EC931651AEF86F1FB3287613FA543510F9425678FDC5CF0360BACFDD22BD9FA8846D7B17B3C9344D75D11F24C5B5F6FF74EDD69C807FA6B27A2CD231FF4E0F3E65095547796BDE31237DE09A2A1C89A5412668CD835A14970FCB0A3A575BC9DB025459E19C7C8D9DBB367C466C861DCB3BE3C0D345CC90996E4E990893D0E2F5FBEFE4689780974BC36074C30C1ADD9F4967D13CB9448C0A8C4F03AF7492E2E4DEAE9D488259D53ABDEDBDCF5327F65060066AF8E70F9478533B6CA49E7D2C425989F461A0F0E5E19FDD485F89C2AB5397D18CEB403CA9D58609C6FA144FF4C5C18EE21544804B582CDD6280F65BD7BB3097283305282BAFA4BA1D533E2A2466B1CBF5AFDFC88327A38EF8039207797949E9D3E5F0F66B44406D964D5375B33E670162D0E1194C31C5030AF880AC91E8D48D804F0D04B01A8F9F3A362546B39E10612E8C5EBF6D160075AF6F111DD583627EB8588BC5DF309D9412E6CCB8BC03D27105C73C3D500F815E7F238B86E6C31903B651C7C7A08C13B3DCC834A29AA6B8012A7D926F894C6EB306D7833982B3BC580390CC45A19603172CD7E60B1F71B5106781F92B1002EF7747EB999A9BC71D9A2807CC2B00206DE28C718CF25F6D8DBA4C8198B174DB788F46E4D2440217BA2BAFE8E01EC039C32308D4FC0AF9A0A067A7384187948DEB9CF62522BDC5A1D811A3BB2663F09F25EA92B30F22BEF645FC8A28ABB6503A41FDCADBF979BC604E00993ED02715069086A832D51BB43653ABEB71AE0FAFD0CEAA16A100EE9C0488C534F21B65F562C77FF242ADF68CFC1DF32468F473E77327D7A6EB79BFB3902DC4F17C370E47AF474103DAEC5B3F44EDF7A2CE7CF580B669D4984D984DE3880181D5D84C32428A98391ED0DC371062591BF9B6D002BA2800953D782DDD5F2A1A08589CAF354482E20BE0DC6BC82BBB31D5DE35CD78C554F4230374249F5CE5270B94EAEAFB0FA5BD26CA23AD754ECBDE1F13CB9182AC2733FFCDCF69218A16E878AEBEFB95A7937A36A36757AD08BEB0354EA25CF65F1954C8966B7238069348948693D9FFB7753D38003A19B826767413D6B8617CCFF86C8E2F6A8BAA9FC0717EB954B5BEA688885DCD81A8483B89F9DF8D8D9903CFB171D75F5CBA791416F3A9D74A73CE2C7688D36C4F3162543889AEFD08FE0381004EFA9ABBE226D0AB362541969363C7F892BB82172B2E23D06394166CCDA407C4F1E3EC027123D77C60CA94B705A7C12580CAFA017A14A5C9713344E826644F4CB2D06E70032668534CCED94AC120C631BB21023F8582698F1768519EC9E2C8E9EDA0BAA61B7B183C598D077BDE84F095320E6A6BE503D42CE86680704776CAEEA78E286246A47FDFFD7496517A4763008CF69FA0ED5ACDFC9FC36BC18955D61B01645A87C5A6F81A50A52E7AD0C069BFB29DFC97CFE105D1A908FE14BB720594C4E51703E2690960D5C871C9F088727E69379A91B5E2D574A5E1E28E4C776763A11D359E710F1731C5F364D64877C3785ABF6FFCFED4375616D60DC4D39E6913344118642AB9AD5161243198F5F03152D93DCA5761FECF1B92CA2280589CC518FEAFFE63E02F75B7B5C6CAFA48782BF08267C62876DB6412294004A949D284AD79A1B0064D2A191E18DB4EFD5C4262A838BC15B269EA7EB0BF30230AC8980B244F50EF3C63A1EDFC082F8187E1AF66C978F5B330DEA21ED20D54DF1E7F5F56024C26E6935E4F3B4EFE4B472579B61EFA69B625A01611B7BF1768CFDF4B719ADDA19FFB449F2EF950BFDF3D7AF9A728BA50D88C74B5786FC3E58C423AE2E25C +Digest: 4029BB86D3E38D0D8EBBDD024982D4EC9F716F244FA3622D583879103D237529358893884FBBE95DE1D996EFEF84070E0D7B6407D6BE840D43DF6F327E82A68C +Test: Verify +# +Message: BEE7D39D4F7E883A5ADC6CCFDCE3614F6E530CB16E6C486821790A498D93780595404F0487D8407CDADDA3BA0D044604F9B114AB47BB8DDFB38446223EABEDCC5C8CC52B1C6EC61EBBD76F7879BEBF665EE21A565E1C6097C7CBCF0A9650A03865B210E7C86BFC4461A7CC161CEE054C1BDD828CDD64A3C23552606BE6122C88DD1B05FC5FA1ED315F9CD9AAB15C961918BF429424BA71DED232670BC2ECE973304AE8917E86FD869CBB1AEE19B79B76441B684D51C399C9331362A54A79F34A1387D2E9C13710393BD5670241A7594C639C5BE89464E9B59D112C4D56EBD928C5A80D89725F69D51AAF28AEDF3F78D257728FD6C87F5F9F30DC8954D10587F26E1D126D977F6D7066901F0E2B47A09721953CB255990461534EE903853AF4CEF0E3B6AE50E7F89EEFFAB796EF88F335DCC5F4CB31F32942A5A39C090F7ECA026D8ECA8B8E60AA5F9AA4A8D7A00904AB5755817F94F5F6447FDCC8F4DB43E432A4582529DD6283F5F197B23BAF27A08B11A793F2453E4C28ADBB9C5E936627BA5D69D7991DF0AC276DC71EB1147287F3EB37B8BCCCDE1FE3EF1971B28E8A273F8895DBE48EC10D4345E271B5FD37DBC829EC345D9BAF2DB49CA18EBA0636EEC33B4CE6CC1A7FE7F30BABF5FF07F1C6DE285252C0C99FA9E9C97B92C5935BA5E79225AE0EAD7A3C5E97DE24B473F26DBB61EBAE5F34467B3839399E700E45B11D1485211D07EE4E4814CF23FEB6633CDD373434AB0356D3A14C0CEBC8F60ADCBA485FFC9D87EE5432A9370E93CCBD6E3380C603347B6553CACB5DDE730A00BF5D9CEB7725A71D4B9971EFCA23ED9535AD9EB931394AF2591A781E2D9287F7680637143FA5D6F0803F8F7CD54606106DF71EE81ABC4400CF0569D4D7ADD7BD89F47A1D6925A3DD274C5742E245E8CDC9D9582CBC1F8BB28F7FC396E52E4E8A16C91CAFC803159269C53A418470422D41B622F31BBBAE74BEE352F17D36E5E1B81DED242C20E67EE1CB670B17CEF1EB256338AC62346013D0346D33C1CCE4F534A1BE781945B4264200DD5B5A1C54333FDF48FA27217F78BEB9522B550D57F7B8613BF36BC91F2374DC679C0550DD0C13C68EAE7E50C179849AF43EA30CFF1F6A2B9A1EC075E7FBB3F04252BAC8E6979195B857A3B1728EC467ED6354A2D91E4F7B8DED51AD1FFEE35EB1F5710A9EBC2CA96E7E0EEB7E62AF7F156C4B4710F9E8B841E97BA72FB714FC8EBF22490A9BE492AC7AAC110D1B841354B88843D102430139D95CC3751D01D97ACFC389F77CB494DB939E360A85C81190FA57C346D009EB60D9C5EC7699F285A973DA66A46AAB887052556558A1DEB8B8D3AEAE01F49A859C94A8DB3482A77DF372990B167FEAEDF17C4EA17CADF4A618045A7457F0716177AB1BFF50DF07C9CA5C382089A4B75CF2FE4C3311F276F922035387D0CAF1F91215ABADC2C4D1046D9F76648183A0711454F68F0402878798DA688EB98D50E4F06DE500122D6E78C3381448529CB0D882B94E7B9E2B33F90BE19B5B16421C377DB09E196FBA56D132334E737A619B0167539A45E50B893A9E52A7CE35856A32EEDCFA9F0BB990B546F9E609A930DC98BBC1FC8BEBD93DB9D93E96C32F5C77C206954E4F88BC921A229C81776E85CB0A2A004BCDF6543ECB58DAAE97FF4ACBE43D5C52156E0CF8E8BACBAF255CB2D1B7592C273B92CCF73D37777E1C96199CC3DB5C82B923A4EDACB453CF9D79A70588076EBE71D4BD4F67BC04579A2B9D5B0B53BA98A90A074393F4A5EC388FC9A131223278B385DBD2A420FA9F59C6E25FFBCD549A880769B914438C5F7D41A173C59AC75811B5C0A700CDFF4ADE632A8B1BF61F1B25CB06C522CDAE8C6FF01B7BDB6BBB9FA5B4143CB63A3D9DAA63D898C2A2276EC757F791A120031AF9D507707420EB2DBFF319C75F2C9307421ECE7491BA6205AABFFA22D410B10EBCB04D4C8E477F96BDCA55DB34A8B7FE59AAE1A3D09CFAA36DC8CB24B5114F42F420CF5EE3715E7FF9CED915F2997AF873F260D4E2BA4E0A52142AB585BAB50F5E37A77E72A245AD841CE00CD9140C2560E12EAC2980721DE745E5A9D185C6FA82A45F05BB422E98A634570727DCD82F1F523FD7DEB5270A2425C31153B78F0982F417575DD49AC3434B69BE4752F77C18BC93541F7D6BEE659D7C1465F3C93B9DB6D8957351A547DE7131A84102E8001E9296BD33A0E89D04A39C22C39E9B316038335752E85C304A05E5A9572B78C521A8326A787EDAD605293737102ACC57805958432948E1250063C0D77F0C0C6BC7F47A29E421D1EA7F8C2DF912DDCAA99D175D63AA13B4E92B3A5F6EDB2CB7A84993DD0E6ABA645D7831A326AFF3EE5E829BA23E1FBC1166DDD9DBFDAD401EAA4E08B0FE75B161B9152750B5D8D2D9DB324909D1AEF8F5EF7F0C86A305810D263B5B1D99E2926745511558478C0E1BD9FD4FE35991B6603786E7872EEF1DA3CDC9C7699D06E123F04AFBFD3EC241C368CC92129DD274D2D79C24AF271BF0DF705A4199DB89F7EAA07604D3E1086CB7BEFE1DBA041E694A78960CF3E83FCA188AFE2B51F5B82BA95DCC654D47D1849BCAEC532E6415249CF468962A227328E2AE683F2BA9A9A44830899CCED85BB8A9130AEEA10EBA5DE0AF5858A7325C02325FEA007C14BC07442AE9864847FB241284A27A1B56456388DDCC45149444810833D2B1D7DC305594AD723E116741DB0C5EDAE245483ED357B9357796E4E5B8A57B2892A93039693CC6C5DFA71BAFA4A641C214F9594F9B9DD7628261A2132D4543CA7B75736787F83C53193D8C481AB10C9FEEE2FF7BB42C4DA689B4B55D21B72E1E3552561BA3731D39B8E7A18DBC15926E5F24BED4560B1CE443AFF43C770B1AAEBCBEB894ED323DD6BE4D12C960DD962EFECF226BC9EB25CEF04D03C68930845C70F4C76248BB13040FD300E542EA928DAFEB4B4E5B39ECA959420930E0BD058CF2B5D492F40C0EEC478949635111AD2C2C598608798A77D042D0435C7EB1B97F111C8014782A8BE5FFF8F7E4CC319AAD44E6DA54E5D524B7A1BAF24CDFC79651D85DECA0B6603CEFA2CC1C1ADC9C9A46737120A278B52A39CB0F1E01A06F8BEA68665517451DB308A514577462CDF0B6333967152B4BD0BCC0C563DD23418710E653A9723B1D1447354153FE6171B689227E61A3FBCF8A6D79FA8BBC527C07A9CBA7122AF14215DE17DEDFA41029843EFFB21C9CAD532D31D8D93CB75A784E3607963D3462750EE8875B901B68AE2894E8EDB004137E8E203956BDCE26DEE7336341705C53B0ED1A3A3DA984CCDFFEDC3C964C0069F722E4F5D94583033C99B0A8EDF2E514A064F2E667ECFD0019D906C2E6BF45D58737ED83FC39C57C4D623C538D6C05E5A8362C6403F71FDB44C26F8BB0466BA92C6F60D785CD70B0EF7C45B9A12CAEACD05F6A46E3894D62DB60D9A2331F37060F6EB5CE9D7AC1A2C9075D909F51DD4A3A +Digest: 59C237A3C9531FF63F77A7314A71A1265A062BE2B4331168A21C09383338503606A707113AB1D99B6245130031273CF2DEB2E08B100442ABFD5B64420A85A1F0 +Test: Verify +# +Message: 9FB9EC3581D2900EA432891D362F31C7357769F345B2645689238F5380B6B0C7B9975AF5D1141B98CC2317A5EF6087E98144CA8A8A119B5865495E56A3E45B21B35DF5225CAD32480BE21617D628B0EBCB7DA35C3249E88C2FC5D0C205838B7D9FD0A5DA76CBEAF69188DF21546E68EF74383869DD72F62B55F8B70D2AD4273F4802B37AA51EB160C60A4FD30AFB2B8A8C614DAF30ED7A3E9FAF76DD21A4895B5CB1E72E3A4BABA36383DA7BD88C1EEFD38EAD1A9C0DA442750FA61F7035F40AFCA97375F48863A73412AD539B345547634D29088DF77E4CA73F70E24CFB2D0A25BCAD3E3A2A368517D59B069E6AFD3675FC7441210ED1DBF1AAB2B0F8CE14326D7A976FF7EA65A8F63D48EC80F0C2A10A379E8AFEC049366B24EA650C9610781571F92308B444DAE305493D156BABF68D147E43207D53C6B140005B059CC2EF78268DE3F33EE49B2EFD4E22F8409BA52B22FD250B87D5B2FFFAE4C7248E63F06BFB640626E2BB8F8A03AB7CE488CC33A73DF2ACC7070C62C0298883CC42513F71E1D7FCDB6EBE1227A0B94ECA9B829CD890CFB1AE638638D8AB1EDF6FAB44ADA8760D4CD3AA001689B61BA49E53D49844AF740BFBF48ABB69285BD69C002E773B8674A79DA39EB60249FF72470980701BA60C4C51DAA05BD81098DFF7EDEAEDEE1BE1A1DA6D83932804DAD2211007DA3846D7FBB292360FB42D7BE14C3A73977DEE2C0C731696EC5804DC3FC6B7C57082277B897E0B4DFE6CC2DE896661C4DA7BA326ADDDAFB68CAE9B1764CB9A62B6C53CA1154180803B8DCEE03C42560681ADD019086C888BDD2C9C24A0A96E128DBA555583D4DA5C173EDA873BD173090E358AE217F0CBB2E9E7B46B7A648C8C065DDFA5EC91A5175D54BC2F8130BEB27BA776E9D652ABFF3D7516EFAC10F349E5898E72B65B526803AD8CD471D99FFD3ECF4A832ED4537AE0FC9A6D91904D61DFF5E17E123251116643B41C048E07535B9AE63C3C0961CE72363CD85C09FA0E36D2CAF6B76B0D826E5AA3EA7E20AFE73FD978D55742B450E04D9876EE24AA2CB8CDD39FE509D2FDB7415B7C473D37406B082C3B976CD3DD015AADD7A0A8CDF19CF14058AD34B56359D87433A192D76EE527426D1EA50BA8E7AB5070F028C4BB79AFAD97B86FDD00CBCB7877EB66A7D44249291C132C5988F3118DD030F526E4C6021294BE0CEA0BE23906009D0732E699F05948A4052C43BCD2908A1F387F16A4242F019654C72A3622362BF9852A2F8CEFC05B0C307EE9D5B14CED191EF0EC049500FE24A45FC99C371337F33A74154B429BF85A43CD2E9EE9A822849876FF9D363182BEFD8FEE5618E0C5FE72CC8439DD7A108569DF8FEAD1AE5C71AFB462471572DF0109C576D8F0D9CA098D45B3439D6EC3237ABF76FEF0771CEF49F98F64FEE0F3526BD0DD107DB53AE419A4FFD3551A1181308DCD5AD79CEE454F02F1A56313E3AB74B1F3ABD4E30BECFD067B3EEA4D794DF1BC9EDC9CB1B1492E4756D62E039EA2172174FB743AEC94E9640D569E176F7662D6C945B017BA63589D0E076922D2CD04A73D121E1336E83179FCCBB7B6C710C352776FB30D77B66F9757D80B29C5D97B8730B4C7EAE9F655818EEBDA2EC2249FE8B82B46A81B6ABCEF60E19BD57D12061D820340690AE3227860F4FF80AB87972A5945F7B96390AFD1F96A2CC4832A28160BB8EC7238078E84814CD2B8DB4A1FFCEBA6015FC236FCF7731C93BC91CFF680B06D30252C6E6DA8F7227C245AA01F12E12AE3E425A25A56B8BEF693F81B68E1E6B1BD42B1E52B3528C0BAC26D81EF0E49BBCFB7095D5A372EB6B7D2CA745E13AD016EF3D0A826BB0742396BD1293ADFE32ECBBC853F130BD1EDA64F33F8C7A8C00437F4EF3C9CAF8E004E7C30D3421507F377585EBC98F75B1C7043951A474CD27CEA63E5566362983A43C7BFD87B01205707CEC8485662CCEC8E703BF79A547D86738D675341B7DF6A6DE43924C6D7DB2328D937ED4BCFA649A888EB7B07FB59F8AAB47D4995521B4A57249195F10135388A0B595B316E71AD182116E6A4299DB15D600D4AB82698983A30E71AC4BAE3B758FD1E23A5EC0BF37BF8565DEBA0205FD74BA5B83F804D1C1F7E8F586F251CEFC83B3099E993E073BD10EBCCDB3F00019C1AF1E58D094EA1ECB38DE451855E1EDCF0792DE4FEA3643F9F3354D44E56F61D83942ECBB0B2A0FBE9A6D6158C1B7F89CBB466536F6B86C5994CF063CB7E27DBC73A6C08175EDAFDC61E94B4ECDBF4E59CAD1761209615C4F06298644D428BD70936CE0CD4E3850DF86461C0636BC234A2A4B9574A297C2605FC666D14427FC3C131B1FFF4993C29918AA0DF0BB526AB4CF2EA4B316E941434EFC756C1CCAFF9344BCE383622F1D44DEBEF163BB61D7C3324E50C61B5AEA5882B2D72199163DB244FD96C96B1CE90EBD94F523129782B47C916E9CEB31C7B87AA60851ED875B57EBC1E96F4577DAA3F9CEAF83209D72F1667D2858A90618EF1FFC7EBC7AD150BE5101C0E986E7C97A76E5E4842AF5975E1BFA7B10434B3EDF6D7112A59933BFB9F377722EADA35897D918C6A4BBD849B33345E40FB7861AFE35995E84D59AFA3A369944065BCCA81D15181850BEFB16C1FBEDBAA4132271967E826BC7BF5BF9DD9B260BCA25404B3A3A710AB50052FBEC3706CB93774D8F72D96462DB4F191244871D05EA26BCD95D3C65AC841D442A56200615843EACA3CFFB0A91CAA6C53973EFACD11F454F93E67D84C216A2A54A8C4D979BA6F2E958A023F0D0D6F5588A4DCDFA1AD1FF2F6A3B6480BCB1A6E3ED99E9F8385E728B23EB05246624FA1367B104C36B54F790EE02EDD24DB133B236C505AB8C8A904009837AB583FA9757798DF7EF13683DD2CB888C72E8A7318A8DD727FB246DEDDD0E01CB2AEAC8F3B58C0121811091B8117F313A4456FF81843DAB743C538B7FAF62C71C8D17A88740A9F95856B3B8ABDD9CE57B025BB9419217CBDF4BE97215538E3FFE46505C439E142C311C301DC215B7A0CE43DA3F4FCD6198E1AE6D167BA16AC4E0AA8F4BA4C0436F1B7AF105BAC1EC6FC7638D6BEC3B33DF5257D70225EC99F2EEA2E7D1D03F595DD5FADD81009A6EC6E03DAD6855A8049C1253CF7AAD7182FA9E055DAED1591BF37E47085149DB38B20AA904D9C32A6590CF0AFA8ACA6693AFFEF033DF3B792E174201A4102147BEDE5D6241BC82F1C6AA982A8B6247B13C2E9F1C3B51FCBC2062BB27F89DEAFE4D60B644D42DF4923CAAC138756CF8F91372C9F58E26A5598B714F06CBD99CBB97B997E8230660DBE2813EB654FB282FA301697DA881E4E2C675BC660E6F1AD23905E88D45407E5D0986AD379843D4DA946DCFAC45C930EA6D3A8F30FF39AB8B0DCB3E93F2D5AA1496B5BFF90F967734649AFBF8575A15534873F6D6D5362A73BDAE5786261F2BC041246068ABDE55999D044095D9C3841DEFBD7139A20166A801A8264910D7167B9 +Digest: 5E6024DA60D6E31BCE8DD729C26BF8004DD6B61CA9EA4F5E662EA10B22408CE91BBF1682A5AC4FF70837F79A073F693314FD9C10872B6A0BCC2B602ED217119C +Test: Verify +# +Message: C6590350F05373495C8CE003C80945195A52909EBDF0A54EE80EC9C76C73FC7198DB15564C867B2E84A78161F3BB78A0A764FF8916F0000167B99A4D1AE087F49F10969FE221B1260822C700A8B328D93A0065BF41409965C9F0C632B6E08E0172BCE9C04FC9A5F39944B85685E64DA7C494A379F43FB740CD2EAF29D419497AC5E22C4E7E0BA17E3A8115B571C8BD9637374C695B5949C7AB0A988E9234B4AB7D2194D6CD48F93A36BEE78B129A134E3929CA9426730C87ECB71737BA07E5739368EF8E1BA621FDD327793FBF1E471F72A0D77B962AE57D771A23D5B2768F8E49CAF15E705E6E56F5583F49D7110902AC65A711D7335F168F804BFB09C9162E6BB09E302895CBEFEA666E476BBF335EF78E633E2EFDB8FA8E9B4CA3E3CC70EAE7D7CAE53143D076E2459F435EAA9DA839A548E6118ABC98EE49C193BABB3D52C71C7A85CB7F887DCD1C6E3A03D1FA998DCF3E1217143AB9F301AAEB6AC635ACD235B78019BDCEE93CF0855AD8889B10B99C8447C1BC0979DBBDC4E80FE2E2608A7BF864F9DB7FA868239018839D3C51071A98791C0D1514A28E36E71D53F88CA2A75998642A29A1267747101DAEF8C749C34F5F2F836E1BE68FDCFF4C71DB3AF2DA50B2989FCEF6E8EB32A0D5D1948428C0E24C593EAD2EEDEBC90A2AB4BC863AFEF3BC5739957B5EB32502537F6D526F5F3E496BDD4892B3D0263105FE0DC32E92CCE7E7D6E7A1D39C4778C965AB4D8789490F8DC29FDF314539E1528F5CB778989699ADC065EBCB9863795272C5E20E6E7D42DC3A6684D50E040F18AA0D4E319614C19E7B5F091CBA9F0DAB91B4FFB8539B9EB52135876336D63E9A7A58EC764E9CA1C26DFB640A06BD2A265BF1DDD96B2E83AB1AD2B667075E0CC5D01EAF2EEC3C7A58FF18D87D0FD8F69466F0AE1C6E7890B4BE458FBE1C041EECA574CCD432417FAA5737FCA45EE2BDAED9DBA25A76AC171F0636711A4B4DBBA0DD888D85F1A170B0F00978DC02258EDBDBD1CA23ADA248D05D77B4B6E9862BAF4885C176DE2726F652AC203568F0AB6137EFFF02BDFFBAD24723687D3C3CF5EAF9AF51CA50A4E7AE7FA07447F7FA0B92DBF6CFB49D59814AA86A9BFBC2E67D5FE4F4ABEE8E22743D22081F109B8E6192273685C204A7F6A01F63A73C9396EFF72117ABCAD196CA692C054679077E7FB66B87446CE03378FF1C3E6B4710B9D174819BBCA0E0B0A56D5B91FDE86DB4E19BBA70E87575DA6DEC02C9444A8DCC9B2BBB56C8F3C4D6A5F42267C286D6DDE641DD8CC1A6E5A296DA182FE8FD5B9D61F06F7306B9A20C57D71C280DC2A8D3C62871E852ED9E5707B9B4BDBEDDB517E0666D784B398CCB7EA3B443BDB538ABB550929B67EA3A7E4817B242BD2CC1230D7D3BF24100480C544664BEA17B8000EA5E9DC0707C778D9B7AC3081622214BB658C872ADD522E2299180B260DFCA1F6B3F454E0C6189B6C6E34E632DA0C199AFB18680F79704D3074E23AFFCD9DE677FDB7C5043DF83DC7B97E4BAF8945F139F850E6C646BB818993D57A8340D5E9FA40CA6B8DF720F23749E50AB1BD040AB11C63FF2E3CE94EFA97F05CF35B9C96424484AA67E4E6839307A1ECCC86502B485EB0EE63EDC10D51DE0C1258B559462A768B065CF7D42F10DA956D6AE60E72DE7C62B1DEF5EE4570CE109F4A980F6FBD1FDCE7211EF5F181788AF93D281CB22DFE56855F6655ACF2E7428B56C3B70DE357EAC2CB8D2B697E9C1F78A161BD2B49CBBADA9DF670D5853E60490084FB4AB4D32EACD0B860D5E70CD20D28C5EBE07657AFFD05DD80FFB045420F6D6ED53C92BC128F2B0EB3EE88A7EEEFD08EC17FA6D8F69A14926962A1EAD8EEC69BC4109F97BCAD528847E2897A3FECCC7287DA22F798BA75CAB6CE9F45FD761E418BCA679B3520A609DB70BB28535AA862B9F48F2DEAED0E9D40902E5E088DA113BECE2385B0C23F29830DBD4EE2EE161C90C637926F4B314E551F2CF7044086D67BA2095FDB6738BEA7537B82E824AB01FB5B93B53EECFBCA27CF1B6150BB38F66F80A6C3EF85F60DB3B6842670EA4769BD224A4F7347ECDB85130FB3B248A394C89AB762A972A8B92ED37BCF62AEFB20670892B7AA6BAB69BC4CBD612AA53525FD8365FE79BDABB630DC72D82AB9B251626593C697EFA6C32CF39216AF18B6E754E129AE81ED3F438CA1B7462760D0BA40FC69AA881A38EAEBB60BB608F99199C94B333F6EC5E9164AE161AFEEB60D6CA73A26DD41197461A38F6E21AD36E6317875CAB19A2D768B95C83600137482586F1150E6A4F8301EEADA1DD73516686DE18C27925B4E6EE33AC8459DC2E7B52A1C48CD2A67CCD65FE8BBBA446835621937DD9FEA5E347522982E2280917C94722C3060C260066CFAC97DC736F5DC1F636F818F0F68D6EE32CAF842FBB8A04ABAB9A4D43387772B8956502DA9093715F6BF5DEE13EB07A2055DB7CFE8956EF3FA7109A11031F4A98C3558283F38CE640B084D7EBCA7611D9CB4A4D0FC4A0DF7298263A9D2877F2E197D0677C1900B4DD4B9ADDFCFEF669EB93A1AB03CE34C1D0EACA6E463C50A55624D665ACC38AB457174B45ED77172080041B105D6335D05C275B5F783B37FB0E073D21354772CA445D3F4E05094B5D361873C982C07C191399C84B7D59871BEAD2061B63151F6A14F948952CB2F1F94C8968AF69CA7609E0090DAC40A99890EB94DFD2B3B5E9319570B798B29FB1EDBA7663205DB04CA40C23668EC70F794AC70DF57EFB8EEB4E47095968CC03B82C20F8081A0A0DFABB63C9BE265AEBE479B3D0CBC8FE72AC07BDBAE421F0978B6998EAD1EC185C7C83E051D2617A5CA0FDB2E56F907E8F7A2CF573793493EA9ACF9CC2CE251A09698D9443B77E4D73F704DFE3B3C8E33FAD12BEC14BD6D3DEA87E3FEFC4BB8FFA2CA89E196DF1925B07912920A3D0FAE42A20B7AFAA6CE84F4ABF74FDE596EF815298DFFBEC8DB54F79D5B2B8E2B89F6AF80B2F8E26ACD135B16A3B19ECABB84B15C53F691F4BC2740547E39F2620A8B29AB92AA4BB0C55FB81E15828E20BCB0AB2A2118C86B278B2215C6DC65D7D4C12F7FF2B3400C93F5C887C0186DA1CF5DC8BAEB87EDB15F6F054C7E649FC281F1E9036B878B7E809D0E211867A8651A0E48B1B78ED10E5CCC91F94E9A95FC408A46E246148E559271D0998194DE93F75C8AA2FD55451C5712CD2978417BD70939B4AB3163E92DC863ECB0FE1C998F9F45C882EE1EDAEB0748FDFA1B87D9A36196F4156B8CEFEF731F578250D3C05077320360FBFD4A5AF7D0663CA83FB83C0172A9C298B7603792B269C173232F859D65A0752D744E923488498D2B7D323926CBB7C4D7B74AABFCC0796D31464DA14ADE01E01F802D79882A777530B04F657EAB6C937D2AFED5C80F5093E2BE5E877B49FD02150617109534D27A0A6023224F9BCD88F18B01A90CE3874EEA4E63168BCE3C22A3CAC8B5206280C67574676B6A83CA6B0BAC7E3399A463904C66E99AE403A50CAF3C5E8D95DBD0492AE6C59953C25150B3630006084143D453E94 +Digest: 47FE15785E90A34EFFDA4A205D3E0D67783F2527768090B56C317867B1E70BA8B4EAA2C767CD5BDE4C14BE5BFC6A0593CE5A16EEEC07D8FB7E80E46DAFFC666A +Test: Verify +# +Message: 5093AF1C0C3DD2EE2BC15184CE8A4E953448AABC0398E40B7A034C408A121ED47FBDBF12CCCE8494FB2AD2F52AF796DB0B06212F25AE919165BA6B5575D0A2C36CC9239884FBC669E2CC6096C3919B6808C22AEBF789BBEEC0FFF089E7E663EF8DF8288514C936CFD3E50AA67DA415F0086859F4C41C345093E274B401A6248C1B3A3A37F2451E7276B9758F0CE2C6F453359CF8BB576AB21C401C196F2890C7D1700DAAFF27C47818E501F63479B9215466C11B51FB7A9446EDF3DABF0D73E6F331EFBF2720E068CC84E8D33F90CC8DA4FB0A8440E7879623ABA8768C9B5D2FFF3DF1C565002612056BE7657F6D88EBA3E6964F90EBC0220296959189F0017D70B34C220E2DE51417C46F54A89C229BEB03D19CDE302D76852091A8DBE9E57E5EFF804691F6073A93468FC86CEBC2E80DF90AEDC27440564FE871A9C37B149B62B2BDED736F7E75FDACF9968D1F8F84679255DCED2122F89FF55931D97010C8BCEB27685312148205626E783AC0E7177B6A2DB622D78AFD82F30D00A90DF51561D3B4D0C0DC61A61ADE6DD726F88D8D58A331DB525E0A8FAB17BCDEE69F6B93B04002DDCF21F1B9F69FF45E076D107129F256DE9F5A5492AE9306F5770586D37C377F6E8D0A9748DFA909F73AFC456541629D366280B4244309D53DB24D1F7B44FA813C0865CE8ED62D5B1A0B839C0B95552307413CB83FEB2EF84B4D85FA7A8BED8F3EC3D96599DFB637EF5F09D66AC31E436BDB2139EF7B8FFB663F818AE0AFB6BD22FECB8E7C3677D22A00A2960E46075CFCE4B4D138A91146F019D0E57955DDDB79F6ECFADAE6C01805262D6E81174C99A3F9B82CD0BCF50B0E47478448ECA5064108AC6EEAC9DB8260C794EF7D3EC5F189E618F33C1660C8CD6C6B4A8A7089AC1CAB56A3599BA004A85D182AE2BE122C30CB107C6BEACCEEA33231F04B664FDD7CDE131E0EF86D1A2E7730F62D4E2BEA298EDF066773D64FDE8E4BA109B9118C4D3828F593DBA7A4FE8F2C6067807B93F01CA1854782E28FCA9E76422EDF7218AE4AD2BD7D242B55899E2F448CA060A1317318BFF95499D62EDB6494D08199FCF74B1A92112A8D53D976D6C2311CBB135991ED53A0619902F501A04A3451CA483B391206EB6D502FCC333DB2AF9CBCD44F575AA989D085B3D362E4D93E4B6DA2DC3082331AE8C1A4BD0A5AFE02E6B3DDEF01ADB32BEFE3A146EAE08100AA3C7C18A80AF0159813CA5547420743499F08CF16101E674F2679DA7A1527A4F14F3064165FFD2A2B3F09663645B6CEDB6AC845A3F947C2FF674C17B1CAC869EDCF2F95F335127D6EFD4CD83E589292B12EFDD73E7490D24E4430BECD0D7CB5561FAFC61776DDD4DD3A18A195E2FD630D71121650E485D8AF160125834D31A12B245F7053F0A8332A4CEE602A0C786E7CEFA5D3219C12698E88E058DD5740DBEA1250A894DB37330DC3E8B7E5B627B42F099A5110254F786D861FF39B524E12A4A82CFBACC0F61AC309B32B17D13FB17193EA2989536506EDDFFB1AA73CA8B22EF21DAC5DF1FF50B32718885F6ACB27E89B460FFA49137818997EEB4E52D1D8492675B2D5D1494BF01962B21A40A210807CA69A01E57ED8AACBF967B414A432A59E30DA5625D2713D3ED6EF9B0D0FEC74AF3466B8BFEA23DDAF5A6C54D6D79C8D791C893E1867D17639FF0DB8AE8D62F3F9E994F1C13D79AE74E8B54DDE9F15D7D6355F43DCF0BF04217CAB6229B66996C1E625EA2C75253562DC811E26BE8D380E9AAD34A76FF731F319991AA526682094BE5087ACEAD41F72388D86F7CF03C50F13052A2B554AE8147F5DB1F399927AABA4A1937554BCD4A734026113CC51DC60F2AC88CF3AF43C11FF3294848BDE0F63E52F31B1B2BD7339E4ED0764B71A2F268FB28B76F04E644E23F4CDB8B62A2EFAF16C3C2B9AFC7D8E728BEF383FB54C901205C5B9DB7F3EC605CC65673AB8A62611E12B295B3D227B5E6E88CBC0E56B1A26409E2B01F5CAA949420A271EF8286EF25F79020D8AA4C04C9A7966326F7BB703883CE603F1802781DEFD13E1ACBAD50E270637CD8888D6FBB6CE4F857FCBA635FCB6A509F5CF697AA56B2B76EA79BB40BFC9347EA5D996BE95A7CA575C1879B8952EF014C8E8D27E933796F039D7DEE44A3C2BA33B0B03D94FBDA1B7F6E4C4FB83153957A8E10EDC0C65C036916E67A68629BED59D8E1E4E512CF59FB4D8FF8C93AF9CD0A060E76EFCD5DC51BEF857E8B61F21484F7416EE42A0EB6F80D08FBF7D04ED1C7866B9A5B3EFF77E8CA49CDD1D7A957FEF8D1BFF6230DBABFCD6B63BD3C6C440D8503829FD644CD78B69B37D28AA9CE1CFDBD0A56CD9C723191C32932905BF887D92B8416A966D073D0E193FB354D120AE7849E399B41169AAD4BAABEC18FF39C661290E4214F9E4EA1E725B91AF78BE229C387FCFF5E94658F170E7E0E5C95E3E87BF18BFD5B86F0374982E3BD4D6012BC61B47430AC0167C932B9F05AD0F9FD1FF1E72A9A1EEDB1963CE86D2262D57A7A77D813CBEBC84F34D13C045BD9AE13ABEF9A0C3AE7D39B76A6CC46138BECA3F2F22BEB1118B9586A7F74702EB1D214496698371C27633DE4E10B19D9702FD30AF445C4396593CAF2759D3FFB98DB4C59431AC0B79EF606233FF2FFC5B40AFAAB55B2BAAE36455A933E6FB0ED02C225214A6A40F542343BB7B18EE4DA9AF0874B34D18C46E0F8F5EB711E0DFB231699CF350CBF663B8E44AD3FAD77AEE1C7AAFC52AACFF18E4E403B6F385AF903B0D00D08858FBA79D02FAA216D597894BECBAFA925555F3D3F25DDEED32D680B92C7A3DC341D65E64302554B7E74BFFE4E74557DD6CC3518387A6A3B7601AA014FF715369AAF2C218B4F3363CAB114017FC79718444B219440286FC9ECA079F5F603BE0EDE9E42B9BC5E38805928AD46E113358401CB82395F13402965882142AB4088F51372CAAAF8768802488DFEC4F78E58D6D662D1E71403DD6D60DFD72E87A8A5DFABD2B640A79A30487B9ECF28CF62F5904470545AD0B06DFB03D11AA02571468FF09D289ABAEEF24AD477D8AA9157FCBE5FCCB5B2F300DF795BD50A23447C615ECFCC87B8655557FB00CFF8C4695985D5D3F6EFDA0FC3DB327C238ADE493D3FC43096B406994E632DF780484A62A1A40B02BF4774C87306895417E973332E6069D45684D7C245CA3C306AB2DDDF4DED964CCE6C29FB54B03C0354F2B80BA418D1EA9FAC044B76BB7B39E2E85024D97660BE8311367B2F0D8E99EABEC23FD175A033DA615B97201AAFBC078D07479F758CD95871FFE3B51DF8A5D38C08F16DF7ABB0B69D82E24B88D4AFDE5EFCEE463B5EB8A4153D1C2E02D492E7896C3C8DA6E5E265C836488C5F51F61DF55926F9DEACDEFB0A1697C4813B12F3B9361421061AACD198C8AB6D26FD24BE00C7D9AA2D3FD412B64007C962A7B72E41B223BC0973D9EC6E0C1EE2664F4EEFB0B72415E42E3DD214EE78BB060642533068B3DBF3C7D523045D212E55B0FE4076F792BD4D06546E97A22F5CD70302FB5797CEE1C93DF1ABAD43B75487E35FE72 +Digest: B50F329A19A932FD182396AE2C284840EFFE9CE53F2EA34940FB43F14A7F5EACB47D776CD14A909781016047FC455C233D277EE411EDE04F1B8A42A53DD66FEA +Test: Verify +# +Message: 300A30BCCE4E8331359D455D5D36C9CE7AB36B610F2866FC3D8A574614F84FD205E2728126DB843A465DE7297C96526394AAFAF2A8ECF979C729BB6B2836D5DEE54EE859996CD73B8D7A38522CB1031B6F46747C26582205128C4860052BE7D91D4AB8F37A985879CE508FCF3160D5F1F4E3257B3233E5866F1BBD921D79FAE488274CDEACA7A55B7D60012B196365E08FD58504CB00309520B42E959F8834F14D7FA5E8B9EDEE8A19021141A04988D548F31E426C5952A9C969FD3BD4C114A920AB3B87E949514EA5B9E2DDCA4043DE67C298E642E181A5EDFEE2FED4C6D90A8A1925452FD56D8C335F56CA08266AE0D6B6E13813EF386660BF388E6A6090505080F38B5EC46EB5B1B10C8F2D0207CA28C410BB14176AD78B84B5B2A555D9E02A7DCFBE5C9DD307D43AA6145EF7DA03ACB4F597307DFCF2641FC0DFE048BB3064869E77428D8BAFD9E27FF165CD45F1DDEF577D39997AC16C3F91B5E6D2FF1F024A0B21A2420C2E63426230B0BD94451BED4BD1AB03CF96E1616B981B42CD38E97D65FFB00261782E72611DD9C9AECE64C9F6BD744E46FD74A0C3126373E9ECF1D79EDBF43B36318D4CFFE6F1DB7CD13CD1B686B4F4B90E65BD5ED3239170C5EC52E6D1A332795147EB3CE2F906D94BA318EEB73607211C50871A24080B74C65071333B8214A34FAE8E25D28C840545DD1D66BCD90447930DCF9E4419ADE052599E710A2F71B573ADE8BF291F409190B450FF9FBD8C98A7CE6E9EBA74C1415BA41C63A3B119E0C98BA50154BC704EA5C6FC7B8C69B4224EF0E03D0A63FB37C8543D5ABE5F5032D154EBBF918305DDD48D4C1E19F594AF8CA75352FFA45A7854E6B13A9205B543C9853FC7E781A4AFFB0ED01BAD06C7FBEA54BE8285DE73B171C302192B532081CB408ACF8831EF8C8475DB6735CF4D04FBF539021797614A5D5A3EEAA1F04D9675D3643BE21FE3270CB7C565474E02DBED2D1D06ADDB759132B238B4EBF5E5140922C8A7E2547B2755FA3DA47FE4394133CD1D3A76C87FE1294D63AF138019956F3FE62D9917C0B30A38A58878B7FE4F096B7CAED2F5DD1A05709B705BD8E69108C07D2CE0F54396E5B42D83F17760B72F00589E9EB6FA40FD748ACC243F70A406EF57715A34857119429FA172E316EAB02C5F2483F31CCCCB31ADCD94FFCC0B85931244367AEF0C7D3D03BCE8061A82E5922210A1BA5C34E88BB13ACE2D9BFC4C6C32294A49903C37A3007038868F4A23714CE5628A83E1ECED21758E57CC4247390D97B76E4792751EB506E1AE10C11C385AE66D322F95548AA37344961B84577AE2DB66B0D9862EB7D882A71284276E4F71D0CAE7A413CA3686791964AE5C364B9563DD727218B874965C56EB5B8FFA9357BD12C7CB956E7A2B921D88EFE2E0E2C20A45D94E260C248AEF6E5AB9F6A107BDEB19772C098F6C9C5CF2803086C7794F624A39DF79E39B13E9C70C1A1BB576D43C415470CC6DA2DED818149A958ECD4D7ACE01FD7CB529AC7731AAAEF348CB6A149BCA1324918EFB18658646ACF1B09D8284C6F6BDA5747FA3826FAAE17176EA0CF25B516D3AE781FAA7FA0D3B337AFBA215536242A08D25F3017E89870F58715623CF6C033132BF07F950986158457AA24A0EB24B772D376DFC7E60455CCE9FADEFD6D22110418826EFF3A2EA25DEA6DF77322845D8EDBD97117A54F5889031D8E91F5D8C296B1F1CAB46BAD5A2D09F89088AEDBD55E6ADBA80744D816AB19C6D5BB77ECCDE5428E68B173C4A4CF222414A43D13694B9F2457EDF57213E97E3F3C91D01B287456B7C38C29E834B4BD1B12BFB4B65CC44CF61109E1A11B6EB62F29285ED21EDF39BDCF19DFB50AF4769961B5F1A725E445DE1B0641705C0E1097162C84C2EC27E4CC08B5005DEAD8F2D43CA0C1B1C40628F6DDADA43F79C00756C6376A4EED7D4A41B730FBB322D94F311FA72E2B22FC597AEDB9C1D9497FF53D2C4D251A4821F7CA84A96F48697971DE7375665AAC05616CACBD88D3457B085C93814B8527AA8B2D39F2D1348E2BAFE98D89D4589B5A8B4B8A45EA95F9B9619132B50B68CDB3B94E7D5556ABD17D19BDBADA2FE85B97935D8624B3D3D0545499ACE05FCEE9B4985991134ECCA606B2C0C22012C1415ABCFF4F9F5C9D4CA1502D7FF46F42AA5E89BF86E8FB0A493B9CE092B4F8544BA4D6EA449F0C60CD3E247D995AFCE2850D3D544449C50C665C6FDD00D6698FF028747349DD11E73D4309C160C308C7423718155D46C46E881EB87DCE084C101A6773C1D3BB320E8FFC683D77E0712572AFB80C1DB53EAA8C341AC2FDAE02BC1662F850DEE37AF2A0A05D0DA0C3CA4A88D1A7C90B3EEE794E00D9721A41224BF33E7A07667D6A1012D6C4237F45D8B8E9B63A145A6F20152D2678AF6157F81B7D668AA1DD02774172EBE89745FE4EA4426827CFA29DBA65C36FFFD288AA0CABA90AFBB2A04B5E4E873427BBAC4A962458BB95220905655FB57681E6FAC47676FDBD2A5671CC83C614903E7E72337810CB496A3335B87C1D7BE6253023CC823CB46E4FC5F51477EA3E3BCDDEEF4FD15B502DBA17E1219C34EE2162E71FC1E1469CDF529523190B7862B206DE8DA79471F6834C2FBC1EBB42A012E91FD455C2AAE7CA8A1B72808AD4BC2ADBA8FC1A4FC028B0C62DED524B800BD370B06B7C60C2A2F7A323252C4B6116D6AFD8A605A342098DD32BE30D4EBB452F93E679CE8324B4312C7EEDEE57FE7F44CF142F121388B8DFBED47E46AA01CD92D3B32D7058FCC6C57FE31D6CE8BB0B1D296D5AE77E2191164ACA97A30D39BE4978399C3406B6EDF6D8D4F9A3D30773FED8E28C1A229AA322D6EA335AA1A4A57E58954AA13A4C5D4EC4BBFCF7668C31FD7F5239E3BEE0AD7E60F3CE2F1954D4CBC1150958053C4423A7DE21FE09CAB129E6D76752DF8ABDB76B9DE9C30A9EFA856EF17F5BAAF1B6A9FF0939BA6D72CBD51662081F19956556E2086C15C4A096E1DA20C140E4A2CB428E23E59CFAF3D76F6B7D6E52CABF84BC63BDAF261CDEA95136FB75B36FA561A85445880DD6B3FFC109A2A066A29E0C1ACE84647318091DDC1CF3D60859D1C116BBB41BCB990935357CD09B124815B0B4E8DB24A68404A7CC2C8CA124CAEE9188D0D4EE41C48710D57978B5A9F4C04A1F7689956D0184583639E63C56335C02F8AB0ADAA50EFF79085EE243CEF946B07CE8BBC5B2726C455F8DC5F055647B40784B8321A745E5AC2C4B61D6D30BA59FE2C848DB0971069E557EC8261B34A57EB8960E7081E51F4A57BC4329B5E9763801F7B0EF808CB9884FD5D5089ADE8E7F0A4C445F049F7ACB0A0000EDA9F01F2CCC2AFF6016DF5B56491DF8C94E9ECCF78D97B785B2ECB502788F4A7C1F49A36A200EDE1FF3A2906A86E4A15D99FDED9A359094F53467EF3B6526DC12B9EB8D5D52367AFB750CADFD6D9C2E1D75099327E976A548E30BE6CC1C172E7F8283D2ED1056B9B9137A3C831F60F8F793A0E988D4F526BDF34884725403B1D8B712F54E09615EAE157276EFCFBF78D3331EB8F4997F6B10140D9EDBEA64A160598B9B7 +Digest: 4D88FB575DD66AF768714401E9D5E5C25A079547344ECB90AED6620EA4E34780CA8B821830386635736E026E0B9BD5FBEE9CAFF9B78A887AE888144C08A0F931 +Test: Verify +# +Message: 3081FE4BCC8922E915B665D9287B5621E2B89831A0016CEF585577E77E58C79AA6A58A0BDC5827C88501D7C05CF5064A41A0B7C5862B63C8716DCF6AAABDC147C5112099A3F661CD998EB5C13AD44E0EA7F33063015596CC978C12488958B608A612F0D90DAFAF9B5AEC869602A538AEB2B05CD872798107D8ED4391A51188C971F1B70A419C82439DE2DF73EC18195579E32FC0454B1C4518D6F4000D1F2809CFD94ABC5CA89540768C915172ED888BE21BEBC20419C3FF5A127BE70B2FF230C9430AE59F81737D9E6D9F9D900361B7F0C36C53C25A2AE2FBEA68D4985CBF0324EB3AA365CA5BEEE9BD036EB4BBFF651F570B34F65E8A54AD7412BB97ADD495B7880E338B5D8EA34D0B3401573A8605ACBE456301538DFFC980DCB9C05FA1045240A951D56A734669E7C86411896C7FE7BB7BDA435409EFFF4BE5FF9BB18EBFC63247B8A510F6D98937A19D99596BCEAED071E38B900AD5ED84E6EC3E36ABBDD83C556436C041A33A4BAD1FD9A34853EBAE6BAE96D04FE13D167548E2A482544B6C7FC6B045D21200D03E231E781E86EDF1CCB7B119946B5893BBB1796A293C3C8117B365F5637A0EBA6742DB8F3B61F7DAA010E91769F63B835DF52D8CB8BAD234CA6F711D40860F2C593401E45B0255C599302A023FF063CF23C0ECE39292FC61DA9CC1AE9CB113B350EADEC300DBA634353ADB35EA20B49E69737A8F06CA4637E408CCAC26CC14232B597DD11E2BC6E3DE66CD623A265A5A9311CD15DB7A3B86BAE8A90B227E06B3BE1C04797DCC4B8F76113733404CA7C8AF128F7E2AB107BCD87D969A97B0D3DA32077CC1B23ED81066D25ABEB27E31A4A51DC0A754681472F9934E212A59906B134135FB969022D7A41313D6C7E6D84B533F9ADE4E84F1CEA5D12F4FC13DEC8BD2E44B88003DF584B2C92DB2CA9F94650684D0134BB88FA6D1E5A7557093DE612D83A73C020EE12FA86286D433120F730A89A4EF58BBE8CA530093C4DFB271EA2D17A7C848970954D4BA85D5CC2A966E9950DA70F53D0A30DA20B31CB10A2F1E9DD47725887351BAE523D2D81F24AD412124AEAD123AAE02F1233B906A234AAD6C878116D71D8B62A51CE4A60C292596AEBE2F927FF052514EBE0A1C63B0455CAB4F58009E03D8453CBBA3C1485A3FC8A2D61876DBED29A86A24B35693BEE0479D21868C722F2676CDCA585290C0D7371493FDE3F061BBBD73ED3FCAC5FE923CAA337D661171799060E51CFEBB35016F7622E2519D2DF8EC10CC21260125BC8F95A5BFCC5092B552D35F68B656F0F8E23600C429B552F1F24BA1AEA9B0E74315AFDAC8DB8E6433217C5399EAF95E80AE381CAB9431CEA767CDF6CEE5751EAC5617B6552A4E6D142EE9BBF16E012E140AEC41391ABAF043C98D1BB017B4ABF4CF3FF1A0D34DB8514BF7DEEA6A552F3E5285D8D938A232BA072A24234ED30EC9AC481A1208A3B14E3E6AA358D17977289CE03162AE670A14F24216C325491C57873746D8ECDE21B5214DBB70437EEC8656DF91939931C6F155946871B5112A434A2CD4F0993A1D1873C89400B4788D03BBAE5FEBB205099D0B5C2F4BA8B8A23080174392DBD36A0F972F552D087EA27E992FF4FE42595C16CB243AB5C9DFFEF449D15487BC167CF3B1567EE3EC23BE6A65609734B37410971426FAD45BA857954B446934DB470B6D8F05BBAF03C2C65EA999C7BE5A7F2E6CC7CDB40F9F1357993EF394106DE0927CF13A86EBF5ABAEF204B69C637594755A32635DE8466B3DD3909CBBABECBA86B9238A0950F5BCED53FE07C157D7A01A8622AF2FAC4D7F7BD264CAE0324A4284D5E550A6E9C80A246688583CC5D45D9C00D9A5A1E580AFF5EB485737FC9134409BF0326C78830ED36AC0256A6C8FDF847EF5F2A09AF14C5F999C1739CD384131043660ECDB3B78AC0D78570D73AD57D31CFDEB0CF6D7A5637B79593208749D4ADF2ABD88B778CDA56D75B0A2C751F79BA42FF1CD041649256E9ACFDF272B2EAA8661596E874E7E5139CF3DC001655C6772F8731D2F8D3E7B92C9B3FB178733B8A38B5E0542E6FBB920427340AD0A7912A3C67FDE844CAAAA72E092B5E45EB94C9FF41AF307C96193003D1936226EC1B52D54C9D13DB998760AFFCAD0CD5F35BFAD8937BA97FE2C783CA37BDB87751FB07195368B2F94A1C078E19D51C162AAE5707A60884C3A3C6B11770EC3C6328DC74B1BBC0B1FACC4C2224688A6B77144809EF52B227FB0277BE0DB7C980259F923BC43FB1B938B20DF0D78D48967F8B6A2040C3E169276E7E93A5483E1FC710FF657E6A601D6D93F7B6E40BDA4026D8670D6FB0FB4C7D240131A9FF574A4CF095837970A53E8FAA8E49E67CF6EADCBACAC8F8AEC8E6774D6A9B748E3CD3AC0CD5751B4824B92C6F7CFDDB07B62798FE78980A9F676D7A36BADE363E06808CF527D56E75E9A9DB9A59B96BE30CCBFFD55DD5C02657A7C766BE31344C1B045C79ABE2EB1E6660D05129B3806850886574D47AA2C00E05BA517C822C152697869A4D47D2FF0296E60E700898AA294ACDD2EF68BF37F2C573DFB93DC2BA42F7809B6269FAE7312414261E4E21D7823FBFEC19A95F25FD4391C888B2673AE10943117CC91C2018DEFE3B1DD181975BE94D5948438B903E8A206E261EBC1358EB3B1A0BF013DFE0AD47CFF55C9F2DF018690F1ECF45EF263BC03527EB0BF4D4730D7FA83844BA276C05ED3209A6390E28374CCA8CB1FBD7C96C840867E10A48072690A764DF92393781AD77CCF8EC0F86503BB3D1A1C535E65DDF8BF77FE9EEF4872428B9C9095039AC613A8B05F406B2436137A5BD2EC4659A344A6CE89BC8F167A60E1EC03EB2772A33BB9E686572BD9C20922960FCEEC542DE9C4706336BFB646404FAC6DBBBD6A1EC7550183E5E485E4DF39DD5DA448609E6158FA69669CF5C3C806D99D2C091C45FA4CF3DE69FF51FA563D79BB5E5A2F5FD80AE69CDABB97E112020C192530248028FF7127DBCE891A14074229D3094D63A4656E55B28D45689C30A529F8B39BDF919B5E7F12A038C696FE1FC5B59238BF72D8427F8B201DA1C062A6422D764AE9607CDF041C937F7B34CA30FEE5C942920DF78917972A6E3710C01AD3FBBCE2694FDFD62FDF1D06C3135B234C673955B770E22BD4A34ECF57EAF8AF43E992C1290392227C5DCF3F2B4FCB50EAB6EF3663687238A952B7E6CF03D366DF049CDE7284E53A8C9BDF1D3B28EE765864BBB8014C7F36549027660D12CC76ED2F3F9F2328AA33884FB8AEEB38729B41E39434C5C1413C6F3AAD91C9F49EAA2C43F2F77A6602E4EAB1B6D58176D862010783C8D2F392B526D0A2B3A97F9352A819F1DCFD62BFD6C1E7F6C4EA4D31408846DB4AA4B2F30756FF3986159FDC8808E4A605C43BB5CC852DF3858CE3173EF05831E1B0B68D31209EA71DC5F1074BF692A89BCF447AC2D5E5137E96FB28227DA9AF8F97174A7A1973B1B07D4167D7FA7B83081849BA2D5EFD189BC0F2ABD8760DFFF2BF81CFAFBF48F04966D9AA3361B45821388A9FDF5CC7D655999D2B522FE1491B96307AE232B3039362291B1BECE28BAC29CE4E92DBBDCA9E002E165782D267759BFFB77BE2479BD93672F6 +Digest: ECC71E62BDB447E010861D6C90882C3AF40287FC9A099B48C64708C03CC430022BFC675C0EF97FC8EE1F739D4296D3E8AEE3C5089BF5CD4553B66C2CED490350 +Test: Verify +# +Message: 6FFFD0A8942DD1FBCCBF0970192AFB949B92C073EFFDA3944F0B939A305CE5DC99C6633F8253A35B11BD339F130DCB216D69D37E0F0BAAB4CEB8D3BA70EE03D191416824B7271F4381FB2A9793132215A50077694F9F1E24D51D0F1F7E413B4CBC0E64561A6040BDBA57EDB6950C6BF064176B1291BB00A7999D0EB9AEBBD6A4273CD3118CF97015AF2E35B88B2AF9BE316B122E376F92F39DC6998C52BB6A804991B01A301A378FC471D90A291B602B236C04B8E79539E79CC6D5868D4370C53B5AABDFE2EADF03073CB5963F0D20D46CCE838DDC133B17B228430ED983863F2BDBAFB0BFA0198B2EF51A5BB9B0AC11EDE565D8B6571DA8200026574BA0069B26DFD01E0CD66F74FCD1796DACA4D4F99E18B0F3A467B266A6C4CB387137F2CD6054624AA91020818365BFD671E5D046DA6B2602833F0508C10244DB5510EB3E988775107736FF71A380E20A6D9CC8287D1D7F638E61A2C030005E92C2317DF5D7833BDF537EF5A9C16CC33145C7571C29085133A4E32AF7C084D8EFEA61F56BF56F9B2E452AE7BBFF955E8B472D5DD636D18007281157E498D3310AE0E662713A70872F071B2FBAEAE2938498BBE459791EE835EE3A618E3CD149596A5B14F6B513745B2F481EFB3F6824A09C95DD2E54E6E591768E4578FDFBBB7F12C462041EA3371FBAEC757D7433734A404DF8381D4D972F673F38D8199347AC9FE96E4410D3EA439AB7E2A257F9394DD54421E332D8D43DEF2C9FD234486FA8C59283EC391F7D7FF808B9D3AF2D359E155437B3ADE58C3842CEBA793A4A3C7A3DD4265797F43534D9971CA8268083F621ADA71D7980BE8A93B718922A256FEAB15A94EA0217C2A75DE2A23420C2A5B629473F79056F117930F1B20BE1D9062F125546517CE9F335F2E6460A40A4D4B3F5C801BF396D4EE1DA3DF0E5A57BFDF40BE457217F7BBE35EA0FDB206FE5604C148BE23C1B0559B7A3E77C4093EE00DD439D734AD9901C308119D8E2ABA4709ED2309882E7DD83E59265A9E13A24818C7E7BB8819CA6B6B88488288E559ABAF5F0E2E8C92D3351518F58B89544A1E6A000A2C3CCCDC7359501B8390EB8FE64F959B79C138BA59685AF84E407D8AEA05E2CA8B5ABD79C2FB5B82FDF2492A1A24BEC3A86B7992FA6D3D1AD1E5CF0BFF4967ED1CE66C829520C0C8B33945C64638934669FF0E46794221BC380C7B5811B38F396658DEBFA29135AC7457457836CD834EB2F5FA894B3692C92B7D35E8AD4BAD11F8DFB194D20761A18F7ADE4154EEE069C6172B81E80CF014CD8747B86DCC98E42611EA85B488787C5FEC29E76104C961627BE24ECE81902B4F3ED9C61ECE32BB073C31E37FDA54CBCCF6084E6FCB614E1F5389B73E2C668985DF139088EE4D1AAED0726361680659DAD62D16C16111B77C544421EBC35FB62FA0DB8C5AFF77D5B2EE0C8AF0CB2632D6E44410A5B75D0AC95DD41E34CF3C0E4263881DA78896637A6CD95E855897B0E8480586D630946E5DEFE7B662F50A152FC6470F7B8F00F7F7ED75F115EF7AFAC03A342E82D6C4BE33A60D6816316E108D2AB150590449FB765D3CBF3FF3E9570BC987D5142D3A3E4EAD0B723D2B578654973412ADC4A084B0C51EE36E29C43504352D5A1A80DAC9C33FF4FBA6A0E2C73BB70A661A51745A14524C4048DD82DA6078BC67B4273EB788AA473C1B8D412682F9F9440596B44071C709A59B1173DFCC0993C68BB5EC71DE66A6826B62185CD7C84A095D808EA7395F6CE56C6C8D517B5FB78632FF156CBB468BA948098BCFF474DFD5972DB419E1E450D111344EBE0D3E40E89EA0D8B6085DD99064F90EA6245328C879F24BAE9FD5F3289DD9DF8F29F662085320172A5EB35CDBD81F39FB5F284363E27116130F9472B8A994C3C37A085C938AD9D53A4A0F8B8BCB694BD6A136FAA0895B3E947B012FDE68CAFC7BA97D611116A2C8B2EA25A62EB6B3B0AF4E91677D6B13450349D1C43F5A05254F6A81E64D86D2AA8040CF4019AB175EAFED390EDEFEA0D5D08266D12E485337D170A24ED89A6C1F67083B6ED5D8E28EFE7F17D7DD4602B90746D8AABADE906D38660E9219073C96D8DCDBAF31B8F41A44ADF89EB6E8D32165071BFA9918F15D40F16878BA0DFB5BD89E82005AAF2241B81914D6CF04001A3233A11C132ED14A9CBD120DE85E72DF2881815BD9FB5A3E85E74FB45260365B6D2E0457A6FBB8ABE6F398A0D0BF4D1B1CE12D53D1579E74D1763BC8B56E7D668B6B58B6386EE51C677858DBC3DCBC2CEA487E5A7730494B49D68D2F797FB698C9844790FE544C0E0F4D5D1A3728CBBD5A7311FFCC2E8E2C67EADDAB2B230F84852099148812A88C8CA705847DCDC63DF66C230EC1DA9F915BF8BA30534549CCD24AB75F697A492388A23E1433C0E30FAF1A185BADC9D36C6ADBB577C63B54530FCF915E9AA06F3C8A8D54D81F580FD9F7A281FA0164CDCC0177019C2868F728898D012FFAEF4168687BBCBC749537183D8F2A3C4659ED1ABD4B1EB2AFA60916AC733BE61CC8E690FFEA3BF60B91A9232B754E900A8A23A1A0FF2BEF379196BBB2793538D3B5200BBA99003F8F0B4E702F2C546FF7A5F6624140EA507FB91DC8CC8D939D2DAEBA525A0D44361DB85AE81A98DE6EE0E0EC8E493AC6F83C9814469E234BA04CC515E1DC429191E5D5CCA2E92190469CD434D2BB8CB44B247A14CB63682E386A35000EA3EDAA34890F093863490CD8E146DC1FB4DB23223D603B61C7BC1220E573D6C6043C54B199CD1AE803E5C3C1E470EF7A14571433EC0077130DB0582EA08897975408A64A2D16F5C1114E04ADED7EFBCC0EEC49C080D7A7CD9331E541C52693D732ADEC06FC9AFBCE1550479D7A44AF396D97D04B2124CD5B1BEC3E9A9CC642E7973E005ABA9D16F933ED251E36732327CD6EA7EE11370EB3C74FFEDC023A7D46DFA5590C93ECBEA22E7EB4AA430BB41867D5A99014DFCEB50D1F8E27ECFAC13BCDC1C0C2B4CE6217EF68F4808677007F7C151A2859263246C2EB6099CD89F25F72FBBFC3B71535F4E205B17F819172AA806A34E337E905AE6999FB7E313F680D77C3E7C2DD1BF525E94B102B784FC5167F049ADB1774AF8B261DBC3E67F99B7492FB9F803D2055416F8A530F13D9F63BA995C165B0DD53D71E85094A3567B0482073BEAD4995AFE1909B3BFBD95EE0DB7F82094FA956C7799D79F8E88B243C859511CEBE734059B54D975AA2115C126CBDB7D91E36D91177D34DD0F18FB694B518E6EB5092116B1EF7BE8079C7BA912ECEAC9EDB6BAB815F710F4044EACBB45C3E5BEE818E8714FFAA053460E38DEA69E3E70B8B0B48936E376961BE981A465196BE877279BC235C7A57A29CE53D8A2606BE4C8105EF9A2D2695B6CADD275BABBFC4E751B4318D055DC2DDEDB7F558132EDB5884C288DD65ADB74F9C56983607F2D5BF3557B79D2BCA2C3328A7B5B19CCE6EDE83864D3C785D1583E90D4056153A3F182D224D684329DEB8F69170ACCB882F7D7BF858A6E958F26ECC88DFE135512A2421673DC973B304C94599CD58976715E0903D47D959418D3F1B080A3C1494907699DB8C3158BE22C515772E2D3E3F860E3772EB915EACE879292C5F309820C2037094AE7F79EAF2FDC1EA5F8D4B1C1192FA3BA52F6894FCA08F7F45C9B04B77E85F79822 +Digest: A126FF8BB8D067B564195FC09138E80C26081DE5C9DDF03416FC1B4C0F129311A9EB4697EF514F85ACD9509D38B1912EE4CC188AA585436A249B138E1EE826E7 +Test: Verify +# +Message: D429B3112C97A46AFF8551510A208E606DD90D5A4AC25358E7FCE053414DFDF22B34701096A441CDCEB56B3B8B34DE08E87E29E869992A1479C007EA558DAC78621269F4A8513E559DA4786D1EE62B205E1FD269432D3D53298A80BF5E09DB51B1A92A146FBF77220FA6182A2593E8695C0512B0BEED7D6656EF3093CDA1B77597C94ECECAE2C85D14B0AECE8DAE9A330C6FC47B232F8A348DAB3B8B24814A21A43E837947A4B202EA35CD2C523C8019A2C93444D20FAD9DAA389FC98BD04F8E3EAFB6AB40D690F093EA5D69CD370AE76133D527D4DAC327C41E3AF20F244702F4FCA0B8124A6EE591B3C7FC0D6F37D95CC4E12407A8AB78B1EA1AF919913FEDB42BE7F39F368ACA7897BE3E441803F02F3EB6B0E6B87B43692C0F9F1BF1373EA2FFA04C7956907A6D9C03FCE226D023BA1879C844C98C033821F1D599319C7979F001B91E3FEDAF49E377D8B264D2749FD47B77B783E77D2B4BF7D18B4EABCABF85D1379F838F48C128FA68EAF89A49512C8907B54F188BFB0A4DBB85BC11EA598A9DC5C9BA6A7D381779A1C8BEB015AAF7A667E52CF4762D11C030CC88CACE1DBB87056D3F1DBCBEAECE9507BAA6006BD123E7CA4D8DD4DF7CBE17D24936778A5659757896BFB84F04EB5D524FADB2AA622E3FD51CB247E396B07533BD7B45B694640FF9DB66465F4E62B4B59C3882BE075AEC9ADA0C65ABCDCBE5DAD7F3239750F7704E0ABDC79D95A6F992166CA6710A79F1D1581C8B9A730FEB6245195A15EEAAEE12727DCFB6FCBF3FEBFE3574370C1B3F1F77FA789BC10358029D44A40E842A27B835A876EF9652DE951D51B08E508C0B308227F9137067936C40BA5C32B1E6B7E8D6F64360AD01F0103AB4FEA1C604432ACF7DE07FB40E9C93ABE0E37B96E7B213E6DCFF5384134490FB53D3E752B9542A43E983AD6216254267041E0CEBD4E05EA9E595D280E5762F808524A046CED7B6580BAB34A7DA0E20D886CFFF7065E50BEEA1441B8D769043D3AAD93BF0780FC9666589C227C6E992D66A0A70A25ACBACDFF9061D0135B19A51730FC37BCCE861DBF4900D4AFFB875329C3B924F417DD4E0D20F5A894871D67DD3E5AB17A9BEE36E6243DBDD620BE50A173E824512E7DD1E4961A0A7423CF0883D6E418E40F6FC1CBBB846BA03B0D74DBCA371DF74B0A74E763BE377CAAD2A902D2C4FED9CF20214A58385D695A2C5A4F2A7DBA7944C8E6F4F06CC44F4E6E25A5E2D6F54339855D4B896A19A2DB696F22E8940836018DF3C5835B310AA82BB66AC63EC96FF843B46BD7C9BC91C645EAAE4FDE9C117B6AF2FC0D692D317BDEB60749E61C7F65649642C01A4C8E68C5F957AC30C7EF4AE58AFC86CA7DE17166988EEBC6D08D10F2603F277722F7DB3F38A5EE6CA2A85FFFD6ECC28C096293CE5205F4BED64051CBBA7D1A25779F567DB118AAD877BA8661489C9FA40E7F4E3A29F7D8BE3ACDC0751E2C41D3464CDAEB00C3D5FECED5C92253734F597FBCDB375EE8C68B01D39286E393CBA08741AEB4A52D3B287113BD74C505AE8396E54A8DD552C3F76A750FCD9C26EF23D689231E3FCF831AA71245C1DD418C8F7809A903D8CECBF28CFC9D856AFC5C3217B3F20A37FABAA9E07E7B57038EE731ED475D9F34AB88E650D7788970DA74E18616DEA8D6DC13E7A296B2EFE96EBB483DBCF52B5A0B17B3AF94178F403C932E42C314E1E04A267F9B7274D77A948BD38EBEA61C10EADDDACEF6EF0199E1C448D7303D6C4A1EDCADC2A7EBC45560796C8F40966C18EDFBB116CFD7D20F6453460ED843B03430B02ADE69FC20CC4ECC2A1ECE23A237BE7DE7E531F772F7B5D94518376427B40930FF5BD1FE6419CA8BAF7CD4BA6044B6992EF716D8E28D258355694F66555372259061D861365DD107A92B781E4F35D149F22160FAEE3196A4E4A6FC4437077C7824394FAA0D7CB3A30979FAF5FDD44FD9B39439031C9CC9546B12083E522D4FBB8A463ADF3937846A54D0F2992B7CAD4C8DD987FB9FDA2BF2370B159ACB2D45CBA8E505D39D645E655B76D57F54B8D5A614A62FE65EE335E64DE5190A71D1948C7875EFABC1BEB1F74DA499E69D2A012811B92EAEA9095816E700AC3C94AB3451F7C8876D924D4E223B075826931C7990619AF003325890B18162F83BB8244A6FDB9BAA56C9B062147E0DE82BE758DFFFE3E7387326FB7C19ABB70C13FC9FD752E7F792BA59E7792C0DABF365F27EF7BE2CC92D5AA8DD271169890B4B164C6FE652FC4B46ABDEE363BD524C8F7929D9F4B2EE20E136150A9D8243A6A836D21361418E50C7BDCD99176CAC972A8537CEA1798283CF9304CE793178FACA2C7D59265FBD00B293502F1BDA6DD08FEFB33F135CA57266AC0CA22C02E525D2EB0738859B9B14EB2F7021BEFFCC1F9250D9CF368AF6B2D9424DC620A3E4575A00D97E6B610FEAE72BEF9D3CF91EAF1EA019704E958D52086BE1194CDBB24F6B4CEA4D7548C437BC422A955924104DA3E984C8339320EC2CB358A72E8CB691D630C9EDF0449F8B621852667FF7AE19D585A637C8D9FCBC1ED248D47A105CF486B23C29BA135CCBC748B936C514CA5A2531F6CC65D5A6C4265B83DEA55CF2D4E6D545D726D225D9DAF359DB8CA008A5F0EA0613C1F9E2E981C0927C24209DC55FAB8F6819033293BDEECFBD07A8D62AE90593BB3CC695BCE50636BE03A3F8BEFC5986AB61CC451CFD30CCD9E8408C12070AFABBA2A6EFB3FD0C7F2ED8850911D1C63363638F4B74276F538FF88898977ADF306B339055C3F8FFB72DCA533772A0C78C29D90AA33ECE80B9288684321BA3D2A93A3EAACB284FE010E2AB53057000DE426F4CB3DD588639DA84CC34D966F6013DF18CD84006EAE14C62059BAEAE90B3D4D925424653B53226D00BC61D2359281B1A6B3CCB0301CEEA44B999870C7E724952AC4430BB589B5786B5EAE2843829AA5E6D8EE244A3460B07EABAAEED510B13FF67A5A0B22EA9E251325C8155F53735CAAB76EC21E90F8C002F2B55A05E7D31859BDA78F46B83C086774569E30591FEDB3383B7C1FED6860C655AAB85E5E02E7653AE83F71C7070E8D31F560166D6B478A14C6936571A08A38C74F06A028353FA78A6FFABD031B6025FBB6FFB60A97E1FA7416AC1192222414EAF075EB80B11B9324F33F24C0DC200B5ED48EDB2832F77A248710CD43F3D312B7593D2A1D0FD019F2295C31458E35D53566381D04211F6C7BF3D7F1AD357E558EA29FAF859019DCFEB367CA34177DC73895C24556A07B76C01D6894530F5F6E0124E97087A894FF17783082C7EB1BCE567BC78541727B6D88566A568CB32D2F93C7338067EDFB35D4F9B35F27FAFF7F550186150D95F5BB9F954F56A9259265CE4123577BA088B4027547C9FD69015D7997ED30AE219DBCF2C7F1D37E29F37188CB7C527A98F178D371E5B98FDD4178095D3CA5DF57C627B52E96D9B32E38F6DCA6DD8B1CB1AE44221E53D26222E59B868D54D5CBA02CF724D5AE4C740DF2E4913729620C269427B147CC03DB65CF0778BFE58B7A6689F31C408EED8643B63E08057BC4468B4C70AB13029B41E33EB12458A4AEB28BBF6F270B5714D0DB2E8EE0C1D1F82FF937805D3BFA4A4BDFA5E69499800D3653B6AC504B2F593C9C00A14A13A36B1B72B9942979B31E036A1EA639ABD80DD62BB9F71CCCDC488492D5654B3E38BB5059C8C42DE746CBE9 +Digest: B5130FF1ED37DFF412B25D902414F1919BAA74981FD9DC61CC6C3092D8E712189264222A6E7D39E9A0956F57E745E3CEEC97848E21FA936EF1CAB66DC3B59CF1 +Test: Verify +# +Message: BA9C7C961C7E346DD9DBA2E07342791D4E2C66922A23488D325BAAA8C6079A90581092283D58C86B92AFAE7F6B1639CB843D7BB9BCD6F2139176BC4C2D0CFA195357003D9B6516DFCF6C85C7A16061617F3C5F284091639226AE34A0CE7EC15FFBE2B69E15B01655454392785852241F3C64F40F8E8A59C09F239491C87906348804A1919B6A8214178316894213F522CDA3CF38872B571824B5AB78EC5B38A83C8D254E003FDAB6CA40970DA84A5838B2914A45B1077D01247D95A6A5234F2FDD903F364BEA599AB14AB242F50FF087ED47BCF96FA431BF7D87B5A2DD268A5D629742D17AB0A4AB9D52F682ED8718FE5BCCB9A106526C9365DF8FCA35A11FDB19B6BCF6E2D899C653EAA38CD8288967CD316D926BB1660584F98CC3D1AC8745622EFEDC08B2995C23AD463E1E4083E5F5F5177714F30CA0101E9EB800CE289F6F9168ADD990E8D923C6AD8369A71413E87790113B8DE76B4DF389A636BCB09C4903D509A2E4F398A5B702CE3E50294660FAA4928CB7B8B5FF993D0F9E594F53DE20431D651EDF4A8A39ABCEF67EC3FECBDDBD8C00026F1521DDB0CB61E78721AF7BF33C10891AC955008FA5A3EEA194D4314BD1ED89BCF2E32442C573C76337DD51CFE920076AEA002AFB505AFF51B522E6D7D72E89EB0F8B66A0989B1EC40C3A735DBA9597AB828F1706984320BD72192025988675E86B24B10EFCDFFB2C0F472BCD3E9B38B0D3AC0A0970EE7CA0458746A1244F433C65D7EAB48612C079CC8089A64AA4313C5FF5937D4367AED88AEE97CB36AAE0BB3AEB6AC4A6458B7470FFDF3157277E9BBEC5C542896F460A565E36F4646ED6674FF5BCD012492CB893F4D918E72030360F3BEF4D80FC3B1F2409F4D620DE3934C380F694DBCF23D639C835DFEA96975D0A836FBDDB50AB0D40018A721B50340C9A7506F9402F9CE13A94DFFD6245D507D60E16881EE41B67506C86BF65521A46FB9C53D680E0BC31FE96C8A4044400A70C8CEA4042C176C5CE61D1D6256B152C0CDB6B9D47D71D5070C902F13FB70D518B889A51F3BC4173C9BA6B537D71E007BC25D57437CD6EFA55D185A9A265F2A617CF18CC476CE29E0986AD0E13CB4650E36FDE21BB4279957A3FF99DB7FC8EFC38042FC3261048C43F59D3A3C8287A4D7E1B27F0B9518CAA9794F0C6321EF86A849628DB5A0154F44AC1F7302A616DB74CA4D816F19744F098D1B8B1C4677F4C4D5AF409D1920FF2DE885189A3914E14572B7EC8F19EB8ABC1E5C61A9BE749F0ABE74897979C5681240646B9C4B4EDBA4231E361D258581B60B543E3B87C207AD5B059F70E1ED4B9EEA85002772DEF4647B23AD2FD31CF9E34D1560591E4B98880EA895FD79F1DEAB26FFB1256913B61F76D683D4F2078F0937E39C31EE6039923FDFC39E31F1C40CDD6B56F90614E406D3021761F03F0A2F571E03D2236CCBAD7E17D27BD8352CDDDC5112BC3490BA22F852CABA874BC3C11D20776150CE30F0D3D35CE809A168931136D46E3CF871A3CCE75B8BB86C117D2E763993D3E6232DE1EA1D8E5DFF46FE222A2984FA9D057CFB4A16569B3999B579C8CE912C1840B2DA29F1B249872CEB6BD580484E1047B7885D9C836CC976C758ECF9EBBADEF0290EDF2C31A51CEE8E6F62CF6638846A5BA1CFBDB6B8396FA462242A7B24B4EDEF46B5B10C4B02CFB5EB75C2899F11821B53F8B46E76B663E16054E0164C7A9D5F0B2E401CD906A52EC53788F2DF874D3D674DB07481D71FD97EAC6CCD83C3B29D32F9596810F1ED0B3811AB708F980DE2AA047289B63FF618FCB3CB557004F6F3B05B19C468BDD12B95F15FB8444890E0E46B3DD626BAFC6AD9A40931C44192E2A4EA9F18125214577B71C694E6FC830ABAA7C29449F54D95EFB012093DD4F173D8A25896F003B09E4F742EFE1230DCFCAA2A29C838267CAF268B6560FCF9F021EF331F5870587B8F013CDD7E3C029BB7361CD55C822DF60FB017DBFCDC3B8640C2181D0D2D2982E66B6AD484FDF8B9ACC1E0821FE434002C2592E91D3E338C8CFED1873D6556C3262F388C0F30B12B01A9E969465FDC79ED45569081939073A2B656678DF710ACA82FB4DFA54952164FE6F2CFF6789076AEA969F2C8522C71B9BE0E63160B3A7966167E9970C06D7384AE23A92DE0CC8D26ECAD4066EBFEC0ACE21FF8F09635365EF9A3502BC5A9F6E474FD09E7E90D967E49EC0FCC444C1F979FC4CE5A892D836BB61F1D51512B488359427C1E72BF9DE451DC7286889B59A9D036647D184648EB25F7A3197091055547718AB0292812511D9CA598A784470CDBBF4D4BA36E91BDE2F02B53154D54599416E4E8D0289CA1E8FA2C1A4EB4F4C310B21316DAEF2D591896A009ED88F2AE2EEBA236280CA9D11AE593014CF13E34AA7DE8F63E906A4B48C128D2D2748BE6D5A5B81811F9C33236918A67170477BC89D1E3D08228802D590DDDB85CD53229DAFCE56CE4273BE1B7A0CB9202AD746453631C2DE74ECC4B2E5B0C6EAAE3987FE195EE2AD9908BB886E9B13FA47561BA8EE455527786CC7A550F650902B2447ABC5ABB63C9314321A943D4D9D8F2BD7E23C51B6F28B8BB9789D293F9AB95926B064C22C0EF2CF743B398AC9DD96D22E488B08177205ED326107A47F4E0D887F202F2D20730C86F6AE1EF1B2C6D14C018B8916D192CB91DC65165FA3F73FC8BDAB6F11C33C225E8D41C39AD4A774AB596B52889B81679E627C5A38A0FA33044D15B9D870F0BC61FB4D31D25557F9943286B489B60AD84D35B2E42E164750897EE0291C86F11F43B4CC3476EE7FEAB47F0816C674FEAEBD94FFCF17D7E8AEDE5F2354D942DDB6B8AD4F624EC79BF83FB3B6526302009EBFC8C2E0E91CED0BAADA1912022A5D033B49B00F2E25783253269ECC43A8C34EAEB9B8313E687B2E4BE3D06E2352878C7F89E8D9F8ED76593794430293380E83B8B445B16DF9059BC3BF85AC2770B3F9C61C6C7E960F69624CFD8C8CF88CAF0DEA3E78EAB17F5CF19EA4367BED09DFA08CF23A063B3C31932686845878B4C33C354ECF1E2912B450D63CFFD058FF0FA1085D6BE380AFBFE27B9F2F2222E7F585DD925926D370D21E728A379706E53E88CFC143B82AB89E2C680C633C92FA215F28E35ADD235DE786A948632DC0E273B1666DC5DD56F4E4E0602B8A219FED4BD2CE10701850B49644BD0063864A1C5B1422ADF57AD094293655EEB5967CD344D72CF82A4A7F80A67DED114B7041B5039BCDDF4BA6D5C580469B456CFEA293205A0E2700D2A375138435B005D462ECBE3D94687AAA58825AB8BA0D596E92470CC33B291C051AC892EBF0A10EDFC66DF1037674176B5577663C3785423FC439ECF9E305519B4C3CA2DA646AD8B40B4EEBB87799A3656230ED69DD6EB821DB7297438C409E4DA78AB4B95EE284524F21626C0B992DEE37676644AD2D2A2EDC5C05E139514FDF6293A6FA2124E43B8450BEE3263F301B63E3BDE26C37E5CDB8288E6AD4FB4797016CA01B06670DB6B09925DB4E76CF6A685A3A1161E6036E5B5493AD221BCAE716D8E8F12BA1F1AFE35C1A85A6C1BCC3B193FE6AE50E171072590ADB37A27D4DC13AE2156F233A1BD18FAEB23FD0088B62CEA51AF1E001843559CF513ED81422DBE16081C0DDBE52411C5D6845AD9D4911FA743264BD7085F39D2F06029E73DD031D6573715DC8FC7774F920A90222DA757FF7 +Digest: 7400981B43F5AD8BF01DFE54B6D8CEACF5EA5925F38D2745341AC1F2EB20D8638FDB1786310BC2CAE3F252E44E99A334FA9B902BF886FD9DE02B94B8241C3475 +Test: Verify +# +Message: 9F4B710E72BE5FE953D5B10F8523335D65709A342B278B956CCD1F9B6A369BC337A5EF97D572C542E2DF410E8C6D1AA4A389063D83145E1FE2B42C2F2A359126B0341FF1923D82EA814152F153F26330DD906AB8F0AE175AAEAE913057A14D40F0AE9DF76E0DFC1B16B064DC40B00ABA4A375D28AC9EA419C7FF060DFA4F8C6B6A99EA721200E1E8FBC83753BD3A53F85947CBE5CC52BF2E33193C11D004D8226E9360DC0E27D5B57B020BE6AD40D5DD3084A7BB9CCEB6EE593D1C9C528C8CE62D393D435A082BB55EEC9076A1906FAE8FC925174CE56F6222F0CDE8A1F62349080FF2869A54C234C755E03D5A278C289DA49CAED8EB51C2803C3AFC3596920A845A1DCB93C1A2CCE6B12DF833F18390CD534CD30576D9A72BF4B26BA10459AE5B8D5BAF63FFF5D2BB6761241CDD4CF8A96BB898FF28F7EB6F19A32AD7DFE8DA2C8FAADFA61FF0F6217E0F9609A7C79BFB9E208CCE62A00BCD4A6B7E0B5D15363CCA8D53D4C60632912C24D3A5BEEE85602DE2A4E4C6E51E3DCD8467C23CF4BD376E62B726CF19A2C158EF6BBBE8D7FCE1A1AE3020C7657584BBD196D540D1CAE2DD8308CCBB27407FD89EDB8FAF1B3CF19B01879EBBD136A8A737AA0D8BCB602AF4FC92DA7F914C1E704F7A7885B56DB93DCD1CF788697A4A45B1B051F85F3ECE10C222EF6F57D5705540EB94863570D6779E370EF8600476FEF94B11EC39FD37C75063A952E9638F756E10CF5F114F20D8F3B01E7003EE8E67C7E0A615985AECEC2BBE024FB63A250D9BED91441491DF5341E3A47612C03525762D5DBE13C55648C5B89A2F68393B825F3E377D7DB693A5514F1820280A82B3E2AEF876AE78A8CC3BDC385BE8E07B732652F0823CB61FC876000E1F085404CB3CD32CC1377987CD43C7A879E160EBC672E2443CBFFDC0A2982E51B1207DB2B523F182A8BDFEE6AAC31451FE427DA185A4E8E5FCC33D9672E7F3E58261B3997F7C5241915F82C2BC9613A43C598A5491353F3E1731CAFC85C2B9E6E8F1C3BFB7C86D4C605DF2779BC921BD910ABE57E029688DC91D826C503ADC739CF2504EF7DD9B079C693A933BE5B5CBE9789C7657F74153BDB31F0B4E7661A7A8C2C3D171E4BFFA2092346723F8829A01B7658D24E899A18E9AB2FD097F5F836767D5A60E9A9F002F8981C0736A6E41F6B5CCF2B13F0A2C00AC8D01E8605FD54B475BC83815B2AD7CADCD0571CE58E642957D17320093D739AD23E22576A7F199F91C259781709999A151C0C42FD1F9A32A2823B639F18224C512FCF2DC3D8E883B0D34E221354D12FCA2A1B902E909F7C53EDD7C6AA72F4EBAF3922B1314C9CDDD042C34625220B8575CE6A2D5B38BED06140D6964A9BA18C2C026BA328E1584B55DBDAC9F167BBE15B8BE7DFF0F03F67F850B824E0A4994142F3470698C3E3EC8FFBAC1D6BF7CB392DF059632485AD70A4B7782301202A3297660F8D35803E425C2FEC8CE13E9C9E9B623E9F263A200760ECA2F067C3DE251A794E2A6CECC8B45B6FB5D2679137919229016446BF568D0A8757FA6937780E73F09757E28614C4E735F643C55804A8280503DBA53C60B618B80CB9B366D26E73369968B91C7410DC6F8EE937E2AC2A505B1204750400FB4501CF7CCA450B12C64889B31904E53BE6A705B50AA168A251CCA6DA87D0EB956BEB8629E11EFFDD820567C5353EBBC3B8F986A23C13274D875BDD04F1041374F9D9E775F20D278B5FB6ED570D59A575ACEE1A61AD444B5EEA3EF1E1F638ADEC44C1644FCD44075B91E9FC9C62C978A49E9E24B20916DDBC745E42D5B55E5F5E22AE2AD65444328F69695B2FEB5089854647287C3D15B7AC4DAE3680EECFF989C1ABC060BE79BCCD3B4947CD75CAF69E8C54521FE4FF308FA97BB6C58683F9CCB6C079D34F1D9E1A0735524DF68210A2D53AAADEE9E0405F1572DD41CBD2B3C25D2AAB453A6924153888FAD3E6431E58287D83BBA043960510DBE79946B5B88CA0D1D818D38DA0A5809F2FCC863F681F7EABBC70667563A4BE61DDFBCE68FCF0D69B548F438AD495C5B4785A31DD270FB1926F5142E453377DAD3202AB2970C6064CBA619696C38456B692FB9DDB139A1750449470AD441F1DD45579FB6365145423ABDF356262E5A33DFAC3F976D49F0F3C893AB342CF19BD4E90A5D4C8464CD5031085FEB4D213A90F19C8C5D8198B850C0C9F9B2064B3A2BBBA4B8FB18BA105394B3DFAF997835A2B188AE0B9E71258E0150679C309F7C796DB70259A7A8761C9A07892A4BA0B88CB8C03EF5FFCD7D36ECCB420626622B77B8713E235656E0E08080ACA52D13A802CAF8CD9DA27CFFFCFB3DD2E5B5FA95C5AF68D716337B3BCACA6A923332F45499F9C06E0F530C080915C75D3B7581018B1839AFACE4FA6B058086E448D9B09639DCEC0EE6F1F92FD10C29FBB9169C61E4F38F95E92F2BF4F7FB086DE19AD3803E1483D3472F6FBEDE1DCDC06A1FA9F33893141FBA23BD338BD0E3CFBC0DA7A98263CFA897A97BFF1A82EC913CA8AE170971710B23AE1280B7A6E02D7B3E24D2CE6588D5BEEAF337973E55935D9E4662DF8C701BB6E3301758746E388DE9461AEC8C18886225A30ACE9A8D2D19BA0773670674D9736E4724773FF4724DF95AF7353DE4E482EC919BD18B79F90E3D77E75AD5D9111FB03C3723A670EF8F6B14CF461C7FF94418539F3F8221185A2E7304CBAA622832B223D4336FA5FEAAB9487CF87A8B9E48E6AF4EC1189D1218C369DB9F5CAF841735C3C9152A6CDFD2519B9773D45E54FC45A6FF78BE0D45DE4CA4905EE13992C559873AC73F6E69369AC6859652F788F28C7A19D5F657DE9D27B89AB9DAA84E21A9BD32C936F92BDDDA1041181A15C48D1DF92419137A231A7E73EDDC67E97DA8C9CF9ED42FB70547E708F5234CFD67AA868851A95371842DF883745C96AB364386702C42ADDB507044BF1FB88D83964C615D1DACACD3E616888A4DE222B0C1D85E7179D75B0A4A6B919563454F7E58CCB64ABF3F9B9AB6FE587DC37D2AC1288658C573956DB3058E3F36FA077F3922B374040BA49FC44AD7145EF1560F68408AF2DDA6677DC94E69742EE2D8CC4FA4C2B8B533DC7C3666BCDA8DC4CF9C36A947BB6C1A9C9FC160CDE81504118486E10302FE71D9422E6D6A61E52F7E6481E6066A43CC532722F84B8E6EDC473E9EDC7378C36AA55A0512D95E732F839E874D23F3B10874B40E3C9C6C2C5CFE0B6A52FB724E3461156C09A3ED4533916E15C28C100F04C20251D9179DAA58F1CB99907FA28EC5B8A8606575ABF5041CC642EA2EAD4E31C74015D4FE2E01E27FD31D4FEE24AC3806982D71F6C9077E147B248D0ECFDF2FF9B69F19952795B66A56A2BA583454ED18DB2CC682007D710FFE924DD22AF2D458EE59EB1F809779CF87371254FC57430AA03001BD651B141686E18576D76B2BDA1E5084274AF0BE042EB4EDD61CA96667B3F5EA3C2B477156487FF89DD3FD0F399C7913D73DB943348CEEAFFE6005EAEA95DF40D5911BAD8922747221F087AA6855DB927D570B007FAA137F23AEFBF6F8FB0972DE886D45F1E031B975E5EA5E3CB83BF9BA235D1DD6047797BFF436344EEC735B80D85C0F03B3BFCAFF09D533762A52AECF9687E917297601B400026A7040D36CDA13807071FDDB63690CB992534353B16F3466147C5E00E1893D6AEA9D7202AB99EAA0B1FDBF6EE82F4161576EDE92F48D00DB8D4AC1935F33502BB5D681567DC397E32C322F267250574A17ABA568DC20AF36E9D0C78B01F29AB0556603A08A4290620F +Digest: 2E1ED63A36E1C80E1C27B7509B5CEF461BBFA091F6F59C8509BA7C6287D050B7244B9B06203441F2D90AABDD6A5AF855464B5CCF6618A3DFE93FF67D452FF699 +Test: Verify +# +Message: 2D4B7ADDD94596D35EA3041B8EC544C66DDBF3EE324652F0BDF31E21853036BB4C7BD689850FFA2F9603E00C4CC1B9309876B15609F90EA63896A7DE59C9D48606AC5238A4305E3A9A2BA78B2853E9C79C23B9FD6DAE44BC4677A5466AD62A92F14A63B5A1BF04C51D1C5EBE108D7EFB43DA4A754981B330F16FECA8751B5C22042FFA2AE2E2ABCCC1CF789031E9C3DBBFE00F108561268B61D190025A2C37CE6F9C6087373BED3C069435752D6923F9A80EB01675F62D9730976C0C18FBCF2E9CA959074B774C5221841E12BCFD8E26BCB4504D01E0EF3D95CF4E8E21D783D25D185B787EB0C2441299471F3717E0CA562D18085478CC7DB4643C5B160412F93DC8C9E52F46A019D39EB0AFCFCED018705D7716F0EA91672C4327A65F78E848A9F40A511F827FD2CCB4B7EE5BB364CE43B777171F2BF5C039631BB8C2C4857E865AF9C6F279AEF3CD7A5AC447DDBB5FB04408B91A77058A5FF50ABD2D2A5B8EDC6933A29588ABA98E69B1166EF6B19E9FFBDC2B177297E435075B5D396B873788C26489FAEA5C002389342B1265464C5D56D95CA6687733AD93C8239A167DA876A74FBB69A25862794AE39B9B7A988B1AD61096592FA47A463FEEEA33DF58F9A2FB7EA74199FF3892E0E210F2071E5D00FF46D3E5766070CF771DE95B1A6B48197F6AA1786038C6858B3D8D9C385336A3C4053E31DEDE4DAABB753639A44C431A2DC902DABA9B104F35259B294AEF96B73B9AC1516598258247D46C03B961ACF732A3FE1E12F9E23B510C1836DE1597C4260DB72B0481C103E417DB43DF5CC13959B1B96B72D4D8F51A20E5C40FAC09D53E8EF92C9FC2DA8D40E4B744A8BF66F01E171614E7D03F024F17BBF29C736529362F03EA4097E97A9373A7E4682EAE18E24CD300BEE130A2F18105149D6D192A964E3D5A6314CF5D2E9DAA559DC9D8D814ABEFFC0ED5A4DF457418CD799381973A4D4C98DFAF7D5F8C0CE3CF7EDB5F0B0DC4EA9A9B8ECBACD5188EF8022E47239DD475505018A40861134DC00132D1BD637223DC38ACCADD6E2C5ECF24AE1F98822165BD818DF96B8CA4C03C63F74A53920F22E027A0BADDEBF9EA50B52DAD538BCD6AF0A7D81DE59ED36FBBEE833D645575291EF71F544D03FD4A4132CB73F48DC762D694B477441B4ACADEB38083E30BFF8F311F1D31535071F4E0322177F2A8EC8D10611A045665947CCB95B595DD9A288B065CEB723CF7EEE50B2617CBBD4A8A92CA5AC8084342F7837177FED5C5388BA58A04A26A61ADA658DF15A2A21FB3262E3861ADDC71D62A816656758EF3A8FA008E30B87F9B3C4E1F9592E15EAA65AE929C3A5257A1DDE6241709E86BE9E6F623D48317C95F9D17640265190A5C9A5DE0390BCA13F22E486A65D3DB5F25192492875E0CDBEDEE852FA6203A307CF1429F0EE717299C3ECD31D7EDC535D17ED313B411A384482FAD3BBA126786AC59E9FA9321D8723417166E0477C89E2B2CAC71973A063D2FCC6F36E6A1CB05689FE8E5AD00F2A9519114205989D0AE1104581BA85357DD40AE83EF16F50EB99779D8FD82B032BD614F7BBF51D9DF743CD9E8C4F37A321D56202AAE8CD3ACCC68F328BA465D31F4E7A8A84DB9684B2CC3DB807B45C870A0A2B67D91EA3D01D6BD8C9D2077EF6037A2CB7F3503ECDD8A39FCBADF86900A0BFB072769F29F80A37955A0BB7F058014D5410975A1F6CFD3D1DE26990BD2839FB70CFCF424E2A71CC7662DE5E689C5A7841692A9949549A2A8E69A32A88D9E5DA2F42ACA0C9F78C87C20660AB07123A94BEDA0F489656B51797A2E0F148820780298AF6D1FAA08BAF4F198DFAF98B1793D3DCA9DCD61F8665B3B6D2348AF5731C12A9A254B7D688D30CBC9E67B33688D3455163EED8BCD05A8DCB7324F1517097039EE12B630E6CD77C620BFD794F3DA4B1548AFFE0A3B68461F4336783B31A24B76003E13AEA8F01263F844FF91314064DD9A8BEAD7316CD452C2EB6C36CD07536052770F6C611F6CF50785D111C2674FEE3E06DEB87E5668E32EA5E49256628CA8F8AF9C0C2973E7CFDBE2C03EBA2B480EEE86043EAA92D77CE55E64ED302B0F3E69B656A3A6EC300261CD74CAA379C7CACAD06E498B9329B812A03F463632E8AD5D16A84466E10A148CEBC5DEEB4A81D48D86FD803AC3B6F510797C5692A964AD4FE551FEF96932A074970C2B989AF218253586A5841DF307B6D053FD0722E5686174CF237DEA2ECC960FC4DAF50B8027944124A62D4A17D668AFF2DBF4F3C3DD19F536C68138B56951039375B1CDA0FA6676246F9EB3570EAE649E9818164349B135F74E45E61A53511521AD744FE84736FD06338637213B716C69681BD366F1B464EE665D632445610620CB0054555417A445502EA3EAE471B586F32A163DCCC9EDB0BFFC2B05EABADB0E64CD408AFC564BC4773A120BB3673FA6AC5BEB2639D2AC2EB3BDD554B0CF3E8484FD30BFCF334CC8E093C79FEA2C651531BE3407F21418263D4353196C3F09553C9129251138B0A11A9BED5E77C720E3719D6E900CC762DD0EA6B11B5BD06AAFAB7F0D20A99C98E82D7BC822B7E60737162C27B7935026AFB0AA04357BA16FFCAFE7EB50062E3E8DCCC5204A09F5D20F8446AAF725F7590DBB9C2B732E368AD39B1F9C8619EA965EA6F7B54AA347B0686E4AD1FF7AE655BA7559F8FC9177EE1A9D7207F9E4986DAAF5BB061CF0E511164DCEF00B586D07A128CCA51CC29E684551E7BF66422993D8F893F1DAB687F0DB9B564A14D8203BF7F279436A13601F1C54734C4172C51899B656839076AAC0116660D6225C5E954842DC505288BCD0E2B019E08E2AB6FF10F99364040F3ECA0EE2926615311BDE5BBAD42EFCDA4B172E42D563AB3720CE763A5ACD1FCADBCE1CAFD46499A52A200691DEAA96AF1E9AE96A8656172F6929C42CDE5882543DEBD09248ABD1675BC61989D7036209B486AF6332C57B3A4FB4B6E0CB4401BAB448FF8EACB9636C7E5DFA3DEF3DF816CC3B11E05DA2EEE1AA6648F844BC8D592EAA0EE15225BF02404A7365D046274E476607C259F6A5FAE6A302E98B4712AFE73A023F0E77CC2DA28B76AD6F092F3964C6D1DDF3DA2F661D17A18971637B37581FC0396417F537C2E80BA1C81A25570566B362743ED71DD51F78F8B462F0A602B8D9E5663DADC996F2FE4B9A75DA1C4B969A31FC5EFBD23AE0EA65A75B21C359AB06E918755962D7C4402CA4AA50013BB9D8906E6C91E3AAEACC08344AA746BF811F4818DB490D1DE2EC32E872EC7A6C7A93B366712CFCE868EF81C5C000A5F1CC4EAB35C2D2E84B5ECA6B809673F2E81D95E1AB08665F8A0C811AFB92AFB96FD81195C7D2DFA6FC547302BACE5F64D334AE890EEC8E0B3F681D48EE6D68DBB822C712D30F1149F47C86BF942B69F069478BBD48D9AD2820C126E40989E19F6D86C103869179EDE89A0CB820363086CD8DC8CB3346AE2C7083AA8AE44C9863DBE34BA1A6367EDD6C0BF191BA28D6FDFDAC3A925DF357047315116E491111317EFBB49C6C5B754C79A1E019B7B2D111646DED8C1C788F74CB2166250D2BB136A5D2F1BA56E8D774A22FD45E39B2A74B3885C142F16BBA3A98D688E8CB03330978DAA3F92CDEB4C150441EB8D81629189ABA609C0FEB2595C95D39B31C4A201740CE0131A89EA61EE0109CF29512AA08CC57394DDC8E1DEF2B2D028DE97C2D68002FF67060A417824137E415AC3787DD708E5091D7FAA83A0721BD86FDBF2CF4076F267E0CFB09938962B285CBACDE472135B53C8BF8E3C34E8F2E9FB3BA3B8BE050D54542ED4580C0262D792A224F7CA8FABB2EC20CD8CD6975B02404AC7FE9C1FB +Digest: 240A73EB540CB99FA504D6E6182EB4CFD215C6783CF945220680A3E0BA5ADB9907F15B922EE569A2AA281C2DE131067817C08493798436D5C67B50F052A1E54C +Test: Verify +# +Message: A21839CBA0DA8DF3F11F1159D73BA32A89B361BF4D8993398E7701CE7649CC18E6A76DCB98C4D7F8A2505BAB0E87226F4D2C9B3683E482E66FFCC2444C4341320E5654707EE927B4F123A043ADB89870C87191CD23317FFDF1569AB9C7CA14DAC88DD31AA65F4BA6C64A7543A0CAFE6133AC0106F42A856E4F49AD095B7DB61898B313E9C92A82E5ADE24133CA57234F997E1E8D106BD71FD92B28825412231B4D42361161002F62CE2020F213E1C0BC4CA81F288505AA535A4CE0C69D0662A8F34785100F718D84FA8E002E81B9FC978BBCAC82CBF648A40D2F7D8997089061AF6E559AC8D448EFAEBA3B43A08A3CF795752EC6103CFEAFFF22B919DBA411D1235E5A9A3A2A137217A074A92EDDDAD2BF07D1898E689DD617BF075AF37530D999221B8A02119190C149BFA7ACA1731083C79751C323A26295D8A39CE483B8DEBFC6C9BAD7A13E5DE8372B79E11FC2A3EB11BE93B6FFC8B030776AFAB5A14B1E1AA2A75EFE49CE194D59F4C6F341DE5F41D62BEC30DB84A721E41F901ABBAAA6D93E47C89886B9CFA5B8A6043A46B8E1A06D27033FE72F51D362A7D4D2086E9E22E045F4F681A7ED9459AA750E6B15167FEDC97A2E80CBD2A5C2FA20E1232307B458AF3BFAD5EBEEDB60713AD4E2D03F858065BDCD8DEDF59A6496E67F69F2C9B4FE8187F43FFDA79E50A6B86E2CF22ECF96A4DFEA3C9646D584DB66AA58F167E2B0B72E18EF0A17ECC90B7EAD0F3080FDD272E78F2062C19B51E1DCD336EC165F7A782153B66DA3374FC4B3BE013752DFB4B64C3146C701AB7243B3150D97D2487B9734C2698A21FD180C78534A12F7E2F287AA45335DC1CA167C0975AFEA4EAB506FA66853FE2F6C715753875591D8C7135756F685553102E0BE36E5074DCEB3EF0720E77CF5E9A049E3BE4159171FF4360F2579D48032E3B18696C8F57D176ADB22C119DFA663FDAE45D90620D90F8992A9872496E23462CD23765CC95F3E19B60FBB87EB0F13AB636F18ECF5B891D5BCE846FA456BC155110D1C048EA88E73B261B67BC98FD8117C0D3BB628E6336CC78E52D83343032413E3716C7D731744CC5A5D084B0A96A01D1B044011CE5BE5AE100AA336A9E0F8A4D6CDB1FF714E73BA332454DCB1D4CB9719FB387F19A81579A56B1B4BE064EED6D54A6D22E319F34E87A9AB23E566A092DCF598793A96DFA246B2D544E16F6F392641764CB6A4431C4E4FD9C4AF889F4F7CC1F38562F0D1AB02B4F77843CF4C39E0BE4E1459C95CC6F8CB9C79722216AB7DAEC1A06433D33B7E6C4FEA04FE93B8DCB386545A1222CE5902779EF30125E3CF837DAD1EDE295CA7A2FC07564C9AA11FEA37ABB06DB93FB2F57D93B4209DFCFBA32185725A6E1AA68C781F28A7AE30FA7AD2448B742C5B33A86AFB277DC785F896D7258FF9B0336361381E81322F6FC3F12030EF6D05F8D222ED44964367CF270B32AB13C4787076082B3E82DE39003814BE7F1560593F1109B1A99EEBB614BD452CDE832BCF10CD0A7F9B8AF47EC888892D9EE353FA1A55D1F75A01AEBAB1E64BA9A6516EBA46CCBF9CFAF6E9D1ECD2A1F00F2E0D689E4230F2CB84F7AFC4CFB514AB7BDF4E20AA938FBB8852F8BABD0305B019C467713A29FBD63544017004AF068DEA89685A8105B2E7375A44D1FF2084800CA332638E3D3E65CCC888E9314D135F119E5B6B6B83844D250C76EEA0EC86993352C6418BB09616CE3DC508F61155601342E86E8DE8A208FAE22625FC5565A47BC2ADC8C1069A68D5871FB32134FAC641CE8DDDAA00EC0F194D491C3AABA47C72026B285C87E2E01D1AD3CA7251CE092D8103AA3D60FFB5813B2AD4C90A14CB382E830F23265D6A1AE489E40A68BC0CD1989DFA56CEFAAF1D3F5BBA86D927EA42A2C93E9CA4E06DACBDAE7C526D3FEE07E92A3443C552E60B6F3CDFDE65A435BFED250875056A512163CC811839C5A0A512AF6B2CBC38330AE514823B613266C849AEE52809D5BD0F5AAACEEFB76E925B6B6B0CF51FC313BFD5870C60F68E8FA68E0C2BD6DC75D55B3C2A762FA51B2513E6AFA28BB265C843574DD2541AFE1F0D2A229A4AEF4D5B60D965437C9EFF0FD6D8160E469E7F8EB1133E10DF4ED688DCBD0D406F2AC5F0251031CE12714EB5146A12B19A2CE89672D7A5F2D452AC0C43606ACEA0731A1F570EFF4D1C5694718802413C4A8E0DA93F159B164D674EE6B8FC9B3B9B5145A8B6574951E42ABC8B2D3E5614DA0E806E943FCC5D608ED416ACC360951A94D56E54FD5E225D72D77ABFDF2426D0FCD4FFF28A9779069B99A560B792DCCBA4E20E834B6F01016EE0D814D69C17F2B3287EA546C574BA5C3DBFDCFA815D69ED1A2973EC5A5E6BFB86FFD5B3469E5C55AA4A89700FCE8451FFA36ED38D8DA9D92FE626B9CD0780971CC9354467BD2FD582767DFF9C72397DE43AAD683FE68E68C99E33A179D1B84C09FBC34562FD6F12C70FE314BCAC70427FC1CAA5AB9723AB681B2E9E63AB3EB0EBA2FDBAAF55C80E20E823486B1C85F663DEF7782FEE149980FF231FCDACA3AF5E8ACC1601BB1D442E20369EBF81418274341239D0711A9E8C8D37C9DC36834AA3C0A65CE2666994F8838196EE9B0628BBE11AFAD09F6BFC2C004309AE3B03480A9522F30AD67CDF37947C9701F67284A63175E53FCDE1968DD35CCE3F43ABDE58BE7E5E2600106201B470432235704054F7079FE953A5A615B0F0340B16615C2494BE12E4671EF3D674607650D334C9C7DA256881666ECA774C0313C906922ECDA05858713849F633DEED7F38A349B5AEC26F3CDAFFA7346304897970494181A50E6351A18E12630B9932CEAD5E51CED623264F25CBF24996E85500CE138BC7212DC410F6B955DB9F9A62340598E405FD63D1A841A5183933FB5B071ECA09AB1FE417CD7B739023C1D2233FEC8974DEA01BD4B9F9E0106C3B31EA81E137636D632B984D26D8983FAF45C2578EB9F1CD9D7CD0569864D004D6138D024E2E730C6E403716A62C7D6DECE1B6D85368F89B794134D0246E4E7A5A57FBE4F0C30772539DA6362EB3F1FC657B0AE4EC95F65798C2DB0E1D1498D1920FCCC085E15355CDFF4E2E56020E2D4000EB46D1B8C0616818166CC4A4022109C94A21A9E456D754177F728D4B6E618553776F2FF29B242AE9E48BD715DE811D5A5E29C28399E5D416EED61CA5BBFD181570DD915C952197863642BF026777FB7138321C1777A3DDFD935575FC88F956664B5FDFFF29555FA98D6331DB8DBE864D24BCDBCF4FFB80E4483A3DAC1442222AB425E5B7A669EDCCA9DA0674E435269114B95A4A88A4F4F1DB4C9419F9843B4B68ECE196180BA62C33AF8DD05047F052BBC2E5066332ADE92F9F79853C327D4B44AA3AD53BF7445EF2C759EE411A7C062B556819E0CC886A1BE1AE9B2B54F778AF93344F4B2F1C20CF2F3F5A248000082B00077F60FAD47270D8312566FA04CAFA6FEE86DE8F70ECBBA68EB41593BDEBA7A5ED69B5B2C657F2A118BC26F1F3C98D27C60A105D7AA951FE210F41F19BF57C7E8ADE33F0B595707822C5C88E444182849D945244B548B595612D996F968412738C3E0F436D61AD3B0091BB7404CDBF1F1355D89432018E222C1917A0180204E6ECABB763A3F986B7CF101BD2CA7C16B3F147E4BBC1978108B84CDD7305614AE82EEF6D75B69883C60E3952A296AC2972CEAB3489B3759C39488D45D57A4E0A84D1151019FA7E54BE328B571C2CC97B4B5DA7AFAF8F0665362C9B63604E154E77FB35886B8C47E2B5A99A4A54E54DF9F3B4A2DD9E4A48E376F2BA14A52443F06EE0CA3490DA34C84B183F84A56DACE17734C0DD05799AE5BF2CBC61489F034B3F4D57ACC1AFD0FB497DB7930F2553BF26CB96609DE039 +Digest: 8A4E6373AC84534A749E756A152D5558DBDE30FC210F2B44A37176EEDB3F351F12CB33D06B506144AFC1646EC4A36856CEC04A58916FC320757F71BDC426B0BC +Test: Verify +# +Message: 1230C14831DB330AD587760520B59FF660000EA71E84B58A3B40ABB1B6332AB9A5A001E63CEE2D1C8DE1701E8C9B60C290BDAABA96CDFA69060C5DC19B83A591B2134BBC787B298476A28C651983145965C5BBD9B25BEAF6CB5CF245BC2C72EA01445A36A2FE3AF0927B21F85BA69F6859E7A1BF0AE4D0A4024D9E59848886AB498B300A5E28A830B85DBC65011224EDF6A292F7D662C4CA6CB9CB2E593887A0D64A1B5444FEC9CDFE496656538F62D12DC345919A9027F4C461EE50AD6BB2DEA462C2048D2FB58B440C9D9521FC653BADBCC4782F56C8B69C9BA96AD59038070E1222E59F6C6BC67FE9A75598C89C5C7305BEC6E35C66A425A5C62B83B6700BDC89E9ED14D5AAF726BBF3F34C8091257976B968B302460D50328006DDDD9115F37684BD9AB3146699533D244067B2B5F096CAECDFD3E62A7E200FF964DA5EC18429234D69C83CE83A5364A723846A6B1F6A7629A1144A9CDFE6DF265227F6B718D37879B2B52E7B523871E08DF2AF1223AFE9BE3F25E08D045D85899DC4BCD4AF657C4C4D268A0219D91B80CC8DC667B59CC6294808156F048E157EAD7245FCAA9ED4A690C7852D3D56D94307A852C3D90BA68816C111F16D806C7B858A43B3885ED18D09FEA5081CD0923CC80C233B07252423FC9F29FC7024E7B9903FDC5633EDB7A87E9A772C83372399F9299F833B35295B6332737973F4862D244FFF336496DDDBB1869CC66840447E85BC4FAD04B962EB80F4F4B026DBE5437F2E7628DE79E33CE70771B810E612F393882BCC24E8A46D7EBE631FD2B80F653E0E0C579CF2B7C1B635B041D63CE623DAF53B47D6A723A923E797C8493AF03E88CA8B55E379CA500762F4AA8A96571625A322C833BB7D3D7F6BD9305815613B562D75C80BD13358E464971CF9DA17DFA4AA8758C8E48D52278B13D76D8ABD9BC03295DF5B8F140C0B21672E75AF94802AE4DFE7EFE2A9C34AFE1912BC9F08C713AFC2E842E61C72B29938FB43FC6FCD0D2D775D40DC905B73A7AF317C3B63C7A1B99C159477EA407D4562C1508716316028B13CBE0E25DD7CC9965C8BF434FBD49111865BA60241245707B478DFB5573C7899F069BF55981A45B736221BF2304E612F15607FF1E800C390893C30555334FCCB0F438CAA80E37F397E61878EBBF3D0FFCAC6CD0AD0010EE2D92614B9C9832E69DB05DC673AB45A6D5591BA07B5A277B86CA9654B92FB1AE924C6531BDBFECDD7C3278B8BD33FE4754B81298CE6E509C4E523EA087FE63A3A344B621E7195B6A0B847FF3EC6A76F192B089240177034359E70FAAB7780522F4C4C4B7D83C430BB05858B27DB47E3F8581138D0881F83C593EF3CA3D297D3954451A5A8203D06D2B6BB583B4B00DE08170E2804951877E13996879091CC1B17B01E3CE9BF7816790556D1F193D57F44DB6A88EFF104C415E1CFB6897E115F9550DF3199BBAD121C17D2BBFC06C557D40CE4212DDC9E86757880E0D2CE4507C70ABA8307F88CAFE35B7B13AC63DB3FD7A8725999D707C2243A33F4B08F3BD35EDF4692F9C93ABEC10CE40B5FE7B73E181095E969DA0ADFE50FF09B4149B50AB2463054F46251785B18F5BC04880E23B27E1B79F5928CF2A076B80097259D3420CD1C9D6574836A8B3720A6138F6BD2C46A329DD0BC34F5372D7F610DA2C8DA6A093318B878EE6916B490CFC14D71A525D98813291BB339ED9BD35437C985D09B92225926448740D77EC3496922FC6CF7C1EB8AFAB59198D89C778764F2E2B9C116BF9066CECD36B527756DA11FDE58781121B8051AB34E19CFAC40C70B39EFF3B8AFCBD4CCFFAD16D50102E40431663A00CB4695483DBB9BFB7D31C094A581C988B2F97D704F45B8F2F803C3F09370002AE2259F3C679DC477C10B444E69B8E7A7E8AFBE6A02EB478DF49C8E12EE51677C1A325B64A942600FC1BE128F415C4BECEEE43E6BDE3D8A076E480ADBE937AB8E0A808F388C21B83C45B89F6BF75327AE31631F740EB599B285AA88E18D1FC3EB145502C5B861CE79AF18B2956FE0BBCDFEC11B80A9E4233E55A94A0CBDF458397B6D6E40A1EC6DD865D31B706D0559AF028A8F386D1AF714EE7C73DE022B76B9450753169DBD3045E9C37A317AF9C6B6999288A9A540D1AB6E2D0479033FB5BD949F0BD4ED54979941C04CFA23265A1D6694527AF695780076BF8866120DDABCCAB354643E68859FE6CEFBA877AE8C483D29D194C82DAFF70F6788ADEB94BC14D688ACE493A28B89CF3346E093CD434EB8342FB409899C362E338E2D00BDF8DBC9F1BED845E0ACB3C0C3EE13FA727CCA7ED8A608FBAE83A40D114C9EB263020B9698793EC8623898CDAA8C3A440C77FBA98B5FEA494CCEE469B4D5B1BC89C5512780EDD9E23EE900406017B3CC7748CA183D5D2B989007BE4A264CD696D8598CC389CFF74C2D223F897DBE852C194044004B0885E8B885A228DC24F04226E469E1945CC9009407BE75626CB75877DE1258F0BF819E1E23F4853EE170661634F99D4F70E1A5B214CBB6AEAD73F286B571685BEC8A3F4A0C3ABDBB5AED82BC5FF387FA64A1C05EAFDC75C5A49FAFCCA4C56783E1C41E4BE5F16A196B7DF4A43732B55302A5CF20DE492BC03B6789674C39DBC0BD755470DB085C5375B218B0AE533B052848D861BE4CFC256A1E30ACE8DDE4D518DCBD0C26FD96949C230BD5F9EBDB9D01EDA1A45F4B1D40896814499054EB2DA9E4EC13E5DB9089021DED3D99B2A7965014A69FE9E0925C3E593F26289CE95DBFC8F1ACD222EE1D1021C9770EEDAC1D6A9DC15ABAB0FDCADE7A1A2C87ADBEEE36461091F1E60E2E9310847590AEA1885571942149131ACFC5EC0E23BB0E6730EF58E5E2990F53D6109B201104F5EE5FADADB39960C9869484EFE796F09B23E603069658C1667968A96E332D37925A9CB8B83A7F943CE965BE6A3BBFB863ADCF08D984B4903124ACFD10C334B2CF4A384BD07C8032BBF4814027E24B6C735E331DDDB635F1BAF1C4227E06DAC5CF3D090CEEBA980E2A61B0588C1324C3CBDBA4933514DD08FB1E9FA8BDECD00101572142707A1A42C50E2F8C9FC7828E0857CCAD76E2421E4A341AB640242120DD197063EA4BC082429598D89F31F5A3CBCD494A2952DD30C12FDE7A1DA15B40A1CE3475EFBB5032676E6AECAC2F54BE430D95BCBBF92A1F97A9B488564ECA52756559E143A8B10D0F8CB345DBB0EFA300812BF090B9C9ABDAE148EBF4B422D8F6E97CB91DFAE7C9BAA87E1F49AC7E533AC833FA8E9D8A0E1AFB15B4ED2E0EA73AF3AE03571DD0312D489E3D6CA357BC744E2863D9199C82C43F4B34BFD17862B7EBAD53CD8C17F1A30C0622791EBC2DF1BADF5EFCC16441CB542F801B399266F956AF8498771A5AAA8394FF17CB92602ED96758DFBAB77FE4DAA8DDFE0D923D156594F5FD6C6A5F65557EF2481218B8A20257E8440514CA4CBDFF7DEB73960F149A3B1B89D3D7B1499A58A915A4DC64C5D9F7344C6D70D4100B8783EFAFEF6809EFB0ECA18D8EE12B14A44E1643D2060ECA6BA7D33200824F3D26E7886BC849E626DE5B8AC3A52DAB001A8E8A55BE4FF60A3AB9E7E008074BD7EADA395B31E48F3820C64AC2BDCFC0C91BB8E3FB06D53806C441368A91F7B459D275285146436E4A4730938E191D431BCF54571C5B9E836F6BF76C464835218DD248190D747411D58C3579C1C22B5AC861A776D989E8C7BE59E4DAE167B7EEC660BE0FEADADB392BCE50DB94E6BF4D21F6613771CF942F6C0AA0F64FD21269AC3B68117A7B139B8A83907E93023871136E68F56110E78E90EBAD1E941AC568DCD5EBE921120FB4C24BB2D8296CC246E17887A3D96322D8A9C99835EE20B4CAC3AB465A97AD955B67D4226F60368FF77CB0CB0705D49650540234FE56CC00653B365C46B5CEB5BEF5DFA9ACEEED1C74F7AE51A04A19DE1D4D +Digest: D45A4EF24F4B95ABBF5126D6D40668AF341D81309962D10984A017C68A01F786B52967121514E0BE18ACFF59EFFD45E23184007207E27CC2B29A62548532F13B +Test: Verify +# +Message: C65164066324BDA8E8D93CB2C8030AD08CCBF769974A2C4F931B98F277D3A079169E81121B80E22FA7515260F04EB64E93C47FB1C47621CAB3D305FE508F5A69790D690AA2879AFEE2B2C32718744EE608602D7BE1F45B5A88563666C8C3C238B8C60BDAB980E392891B50396F208C346E61BD99B720BC205B03A137BAB3C3533EA916CCBF8318A94421CB809C6ABB0AF61F8320B078DA9DD12C8FD5F3929D54AF389B26AFB79D43773E4E47810C8DA1E550B973058106E3FCBB1EDC577B9ABD6FC1F38BBAC490CE6925A592DBF321360BF8E6AAEF02A4299943438F4A80112904A288CBF9989287CBBDA2F28C3414B2CA275887A78842C28295DAA2FF3B3AAC4A4E76A397867BAF168DC5C226B6658CDA125B0B6A54E36CD94E5D2C76628228E36AA40A10790FC824330F9A397688CF64B9DC0D9676354C898E60EF7878F2B3FD26B189FAE166385521747608D8EF62DA9B831BFA7595DAB684A9F86B35FB8C8E0965626391072126D57D7121395B539F8F7936143FBE503DD7FEFE255B8637AD6B4E4888FD9F54256D459EA11E274227FFF654535C0B11E736EFBEFA41AD64309CCA842AE0989C5EEB37312F6ED3CE76A3219D3BCF6F3F980F71C7672769E4685624470988957DD4DEFAFEBB94FFC49E406E52F341897B9696BA26525072B5EEF56425918C297D7F9B9438FC5B7386933E7DFAFE0ED2B62A9D6DCB92D36577DF915F39FF7A21CF122D66B3483187F96FAAA5C33A2AC10EA65791A6353AEC7465E5318EFA4D24C7AAF6CAA583E97AEFF66A4DCED0CF1786195A2F3311B59409E9764489AFB477266A15C9A258D5F59ADB22057984B50EB9747EBD9F7276810D8D74ADE2F1A12353BA65BA3D081E0533A771FBF1D401791FB37415DD5E4B9EB8283B5FBFF8D047ECEE6440D6DF899BE9E9B9FD1D70D07BD32480C2FFCABA97B586A238AD93EB784173B9A0D97D32B658A696C0A8F91256FC1600367732E1212E01B667CB6F1F1BAAB6CA907A33D9AAE4700E4FA0B09D17F534F26DEAAED5CBA47BF590B86668D52A7D0AE61F27C8FC58ED342276AAFCE7C80F028C2A500BACD50BCBB83CD8ED756737A6A9D7AF3049C706139D61CE66A96553EF3F2937D4009429FD84A415E92CCF4403F0953A91F271CFC91C6C4E4B884A706AEF9A654E476B2B2627202062896BA66DD08A7D5BB3306A76BAB5E5A8C55731EACDE04ABEEBC7E605A865BD235290B21612BCF581520ECFF3FF53EFF522CE3C172D9F7680BB76E311E3B496BDEA2560A9E9DDDA06E8B36E150F38CFBD09706441412DCC28FFC1CAA339C623BC74746006E17083B3E3D32AA526CA324EBC0B29DF78CBAF08A4CACFDF9A7DDB09D894666337D206B3177906775F3DCE20851047A96ED5C8B5B869FDF26E9C5CCAF3B003EC553DE24674FCD81A01B6ECA7428E51DB05FE30FC9E0CFC9B5AC6DC7FAA02D3751E6618C2316043C96EAE4311EABFF173F8D9FA5E8917C335298B05D1CC14B90641458F14608A6F69022D6BDCB57C068D6379710F5CB284ED6C67C7998A26BE86E8E6A36C69625366FDBFFF1A5B9DD0BCA6BEAB52AB4950CA74EAAA521212027418F8DA74731A8C132D0A63042672117501EDFA849F11F32DB437C0A22152F43320BC1CE1B56E4BBBFA72C1FEE750AE3A59EDC7DB851EA408D12231F87DB4862FE418F731B4433C11B7B5C1070AC50BFAC2A93EA93D9951F947ABA2F0B4D6DC1DF097AF72BD6AA2734BCDFEA4836A340BD6E120EE5902A9344FA79223754D9FDB0BD7E19B911148FC1B21ABCE9381A0BB196F756354914ADCB0989BFDF1F61F5FF885FBC60A7000FA43BD52460C3B4FA22E54CF6A4E05B7222BB0D8AE83C4AB5933A23C4D80BFBD7A26851CF16FBC67157D6DF7BC75E4721027D2BC1E9834CCC79A2A7AE4018615A42457C882706EFDC9DBE36B275BA80A646169C1574CE823AF75158CDBEA1D18A0D2DAC732DD9A3F39EA3F562865BA557FC9B013416A5EDFF5A54540233321719D2EC6EA54D87030D68F886BE5BC6C93B8EFA58CDD018C75A8FA98808BF1F16981E51A5B2742E55B61BE6969AC0D5490BD9EA8A29CD3B3B2C6122316858035553D1CA198FD6FD79CFE0A811B82649CE4B9E9891B46F4305AEC99EE297E3304E08ACEAB1C13363862BA52EA9C722A1B3D8E279919E671952A6A4564779AAD369BCAE573655A81137A2B6E165EB1B691448EB7A2DDE05104D3A2333F963B66B5097E68A061248855ABBFA68509956639DF1B1C804A9998370CE0D33017D9E3C429E357A668D91E8A46EE71F85AAC03324F4CC5AE11A46BA8724ADB21E1F8C542057313D4504501AAAE0B26D8C977A125CD08B3E0019EC37ECE9F1B38F2C7E4388122CA7527BCAA5F29FB65423BD4F5582EB426440FAFB7ADC01332A35477FA588984434F173F2375A45DA6BA4B6FD5C38E83350B92197AC535212AF878C167B3633F3B2DC9872AD9EA56F340FD9A2F7329440D4E6B6507AD8DA7CAC014F3237C299C203B034E6DF2813036AC0595B8C23DF07125D7FFFBB4DB7CB1FDE55118DCC975817F57F67A0BF52F27CEF6B589EBF04384482E2608CBE8DC9FC9A7D98C4EA5BBF5B6BA83DE46AF43F14300285B53A3B6C3B4F2DBC017CE4D0F068223C2C80D631951D19F6680AC4C692091CFB37F3DB65924DE22C85C85DB24160AFD15AC3A86E3E1AAAD543F90EFE2E072C0DF583499A8EA7FF557D8996F3A734422D573D6530972FEADF03F01D81491B4207F9722E9315406248D4C4E1D5CE6E1E20B8ED8E42DF0B150E015ED77789F64E13FAD13A1E202682B3ABF325736C134E4DCFBE5D4FB358CBD58514DA211E764C59509796D108E7EE972EC05D6EA7ADA84281BF90FEE30D5A3A351DA53925F1376D2A1366FA5774D8F316CD874917A69489D9DBA0725CFD1CB6CB66BEA5E6BBF834F56AF964D424D9BE4A395F61B106D398A4C6B322DAE8F98C742ACC1E3D500C2FE6BF17E68713DFF26D92E571AE6A41B13339320861477FBD2985F5C16A62C91483FACF7B79F952C18203CF65449413AA5FE8C43B8D853FE48A6B9486DD77343DF72E340DB4F46E87A24C1CB6E63B7A76A7D3EA2273BD2DA6ECFD2F734E5B2B011771DFB1B26E4C184557C19799D33302787324A327EA4A0ACE903DB8C2836B3EB2901B5A47FCDB955912F3B861CE54EE1A5C637BE7B91F979F2D6A32FDF99546E80E634F9F15A1C8154D27FC37ADB61ED4999D4494FF59ABA8FA24DB89D740A0F48524420B16AA111CD63C72A53D26AE4AA704CB1447210160A4564B85B71DBE6136311F88892ADC5AF2F045F4AFA0D775050CA8893B1F1F920BAF47EE0A21ECF8E08D3D46E2FB282EF9690B84EF50E6CA5D48E22B70BAD958D77190C80C6660A0250A8BA62A14462BB5FD4D7048A8540C84C6AE7C63D8B6EC7795A9FB3EF3349D08885ABD423654A8DE3D476CD931A5174FE04A86B80970C28DBC261F0B57F5F135D7CE27C2AC09FE32AF2DA060116022D44E0486C737D3077B4B0ABD87085DEDB4AB266CED184B7AD8001F19FCD8D8AA5E51C73A24B3B44619EABBF6B91D4ACFF99ED51616FDBE9575BC041CDACF8572F1094870581D30A0F54B74E14FE1B61FBDB67F7E2B1D33BF6CA270866A673C066C7AE0E6150D9366A45A1341C288BDE73F83040F2FB7B344E8D05B47667ADB3750FDAD55138106B91F685B38C79EA80A5C0E55E8327394E91F8EB31C3A960C40CDC1FFC550B0621CB293457EB54B782C68A52BEBB1BCC7936464276F41618FD57F5E4338C7F4C676DC8A6BADD9D16E65FD4E482C6746B40423368BE501F4108DDD0C1594EBFDFFAA33B8A11BE055A7FABAF3BB013D655A7EDDAAEF1FAEF655CEC456D18F60E4B481EF399B1C8181A5D7335962A483FEBACADAB1F1B2F997555B4567E2BDB1FBCD4BE93BFD4992CB54CA5ECA73B2D448172972EE47C50087F6D0A60D953AF6ECF3C28D5FD64D118731E3F48CE68465B3BE9570450FF8C633C22852B80 +Digest: 366D6B890512D48FEA95A6154BB1E3462B833923DF37639C31C5F23B1F1B1E1C4E4FFE2F5214B0B824B5F0AF94D1615F1D032F692C90D0317EC5CD4DA9936769 +Test: Verify +# +Message: 8964AFD2A716069A18AE20205227336E5F21322F748879AF6187A4B29C519EB728FE976D4732992F96EBC8C688650BA5FDB91FD6ECC51C3EF419879BD0D43DD56E8099822E6552239DC6C60858536A926DC24FA2FE793E3E4AB0D2EBD3FF31A6D3FDDBB27DE09436B08AB841FD00E825BCD459A875FE2A5AFE53DADA60747800EE7EB4F04C9C3425FEFB2DE304EDA0F046DF53DB37AE8AF6E0C09F123B6DD10424385F7192803D26D2E5E7CCD478BB36ECAE0CEBE59512C5527CE298E462750B801077AAD6B11F7158F313BEFE5190A1ABD71B78AC43B67883EDECABFF0931216B2D13E5DD4908D8B242975324784F79A3A4722BA15AE4FDD671280EC6EB6893E39F2B69B98FD0BBAF1CDD372A35691B9064B915608B4C41132924CD4A013867054F2B1B757F85944D11B39F47F3FFEF3F6BFF6C8C1D20949DC4BD3006D8AF0872F8F0D64C7B975944DC298C0F00B02902525AFB5F12CB66952FBA7F1E6C9BD025C3AADD00536C139080493D6D833A69DF5592BC87DD0A3406D02E9CB4F6B1B7DE6A550119A0F673BF20F72A8F9851CF623F9934A000BE19EA71B021441BF4BB54FE5B00E52561A90A9A23820D7A90AAF8FE6D3EA9B9EE1C88DB4D72F640E7FAF3350ADCF96BDCDFD5FBF9F5CE8618451A68964DBB93B7D7CC81A3874713E1BD374E071766D8194B99E2A3CD11E4A2D886EA0A2D31750F78875995143DB0FBDA455AFD807B24AEE59F8264AE4150970C704CD81C5A48BDBE51D6609DCC188E9354C30A80523926098436D6130E5E93D138AC73ADD54B69565CF335CDEB9FFFDC842A5381355F47DA497B3DA86F1FE07AC235497582A1106C7165C8FE94A1599071B1F44630E2B7F686EE5373EB5EB93DAD3DB474D50CBA658D60F1093F824415DCF4CB3C8C2F52B93729E5A4453417D421371F1D36B1E64E960EE7C7656CD18129265BDF2FCE480C72DF801FDFE3D99F9BDA7EA9B840BF2472CCC9AA457D4D4438CB77A26F758C0025FF776AF0DABF7C4932BA72F6E90B3B5A6C97FCC9EF6D998376618BE670F1E849448F59E6EB1E86976C966D3F87085853F3C1D08C1D2A4B6C5E3096B68BD5509A645CD7C1F43357CF6D31FB40FE4A5A6F744D1F3B8FFEFB81BF8B192D2FE537D6EFC769930C99D4DA2900A8A14CB7FFD3362FAEBF60293791BD6CA5CF9F5BA88BCEF73D5CC559216ADE8761B42C09B6C9B8989D8C2302FC94EEC23E2DE515128D23CF030CC92D2C6D5B424618B9B056C2681767D1456CF4007CD3D01A850C59DBBF96DB46B97A1ADDFC0B53DBA3EBC4B9A6A2FFD5C0C7005668F1F9E7F986930E0531E8587931F557DE92938500C7B5A7AF87EC4300009F61BE363D2E43657A23557786CD7020B78719AC1887EFE4A57F94B7E235C0769040446A25DDCF0C2A3989583C259B40B486DAF62DC3F766D507BD1C5527CCA906996E7A405E6C54112900B480C47450D18A7B1109C949D3A5F68D6216E92279A886831A70919A64B834B0FB54B3435959796C6B4C4833071BEE1A59D59A60693557AD96F55A90DD9BD29B3E0ADD5FDA9D5CCA46ECD519B3D7CC46A83CB478EE424AEE4DFF50F45F5532E46D4405710B238A111F0C07F1C3CAA8F4AA10D2A14746AA5F0263A8F5A9563C0222E7E95B9AC2A86FE5A2C60F041B4D5AFDB6682CD48B8638901FBFDEA57423E68EDAB8213F7BD3BF4D84CDA890390E1FF72BC1A44BFB681BE9727AFFEBAB03038CA246CBCFAD96F46FB07C714EBC4016561FB98FAC0EEC69EFBC5869319B4CAEBD91BFA25BD9CF5073B6724E0A8CC4879266C6A32483CDFF2927C4C279E1F55CCC85B482DE568F05FE72957D42A264D5626B79CCD40513736412A2EDB395C35FA2A0105EF529A4C662C0356DC746F74B0D2F837148E5A077475BB09145DA8019682E37A7EA535F249227B21A3D54B8859F94741D10F4722953D9A754C02772A535B1DA21CF5ABC0737249E953A059BC729C76898D8B08B5FA4F57C9957CED4F9D6C806BE9B4A37A8143D899D1E296768CA40CAE1224E8B37EA945866E185A061C5DA8ACF144746F091CA022FE1EE128C4E8775BD2BECB4A8884D67D7B485F2E1C5005499BCB287CD57AF43E75443618F405873BC9AA2701E07497DE667F35F74E07DD3115228795E9876BDA67C16F3290D2AC38885D8E64C87AC3F41E6EA597F8E8910A377C2C3A6ED13826876A54F73B5212786110D085040FBCB93BB71EC30C10C55F08CD2764072CAA3D09558AE065408111DEA6B71AB61C7FC1C597948F84DC7A548DE3AC8511BB84468E098AA1ECA4EF0A3959B7F16992F900741C0AE2E8F7BBB1FB8D0E73B3A5AB85B432B496F24E3AE98779F1FB81D0F5787141D0F38A676CC0FE02D2027B29C724936EB42FC1A643A74439861E1A57FB32DBD1B7A60DF1D7CA473A49DED550938284016C2828EFF51035F27D1CC0FEEB55BBFA382FB0BDDFCF00ADAC784A952FE69A5A5EC58EB364AA91A2DD80F4C10FDF3C32AB978782A0BA78E396569EA4198DB1B5AE49C87582291B7B7FC440F9F38F467492FDD0ABE3FBC9F96C55BA1C32771E423333678B72991C9924F70CD960EE6CD5E7F9C6B3639A438C888ABEE61DAEB3C3BCD9A0BC712A2F4F953F38E9EA924AEA00C2CC3511EE835C44589A7DE37078A4087874ACF658F80BB0B468F9EDE1CB33A1BF24E3D561B3CB09FA754C81F0FDBC3987ADEB68CA52BAE8F38F095FD200F6B8CDFE23460C33D6A7AD5370A0EC19B69AA67E900929F8445DB35325DE1A375CDCA4ECDD0376DB9B945EF702446AE397B9135E568A240D8C7F087498037AE0045B2F4CDDF9AE5727AE374741DBED2FA5A3C50424DF2A2AEEBE08F5B99710B132971A13BA134E7C9B7DB39DB400310BD41E7381ADD440C8F85A6084935106415422DB3361BBEEAFE3484CCA423D622BAE47982ECCD1AA90907B5E3FAC11D7A164051790F9D965BC90BA29881734448A62E0E2EBEB5AEAF61FAE21F8485FE2A0958B8571D7D85A4212C84407D00043F935A4E2322EF1A91E5D636606435FF62C4160B168E5C3BB4E784C4943E882431FC90A11349A516742DE27E23C7505686027044353FF603C964C0E31B4828A880A0A42886EED08A461F7A1DE10F296014C29E1B27503FBC28A81881807C3CF530C8E624DFF21E94A9533D278CAD31887651362041D303B7A76504802630E2B102F10B7D43213A0AB0B14B69992A37E97A1AE06FACD69615A30F93405CCE3E16DDA7DC11B81DCD592E348999D598C1657BF38D66ABD9E0832B39C83C6374F21C64C4C645FDA40C41885C8846D8EC134CAD68B4FC1FE606F920E89158C2D1C2E02A419C0F761F225DD14A12D776EE8D0BCB05D6194149BAE1B170E2610F512E8CDF9ACEFC68F8FC56D0D9C07B078F0BD8C98607E931D1F490550798FD8C9124406B4DD9EDB239EC6E43FEABBA6AB14FD8C849D3E8A7D297CE72DB4AB797E7DBC8CB0138A8CAE74B14D5D803C68517A79BD7AE5C620ECBEFA519B2D94C00B4CE97343B830C51A164239EC9AAA106EEF177FD5B37404BCD7342C0DD317AE4FC47BDA3CE299B2A857DC5912E2133EB1CB301B075A8EAF50E39A55C0B5D64EDFF6208E94A8639B8F4019B912AE2B8F7996960F309AA637466C08D1B1F7BDBE53104392567C46B5C11AB5947471FD580E88A18D29EF3F715E5D805CBC11D251E50E1315694D11837C2A70140AED020A1A2F5EB2C0B35B0CC89F23D9316E3EF88C861CBB088082D28A22909B8259FB00F1ABEEFB1523E5F671AF3568D52D5B4F921A10DDC7E7E9AE9C69B29B7FDCA1DE121E0239E70AFDE1EB4253E0725A0F29CE25DD754D754CA4A7ACA56BAF8FA448B6593B74D71A2859B214C57C5141BD0FACAA8D2C727B7F66715224CB83C4FE7A0969FADCAEFC32640499E123A11A2B51A2FD096B7CEFD09C0BD601311848E2C6C818615261A8FFB797425600F176DE8CE45B37B94E17DB0173BBB8A8A584BD44C7BC93A57D102517F079FBC328F5A1CD94A6C111E64A8B59227A21872F22CB28FA7E86CBE53D35C020C151B +Digest: 01594670FCC2108C7F766C6F4F7EA5852DEDD249D286E9D5C0C843FC486D8B8E8843C72D91AB396C7CB33C8C88607C8AF84B78233AF1F1E0693F5242F66EA10B +Test: Verify +# +Message: 56991EAD848F24B0B57596B00E2FC0FF42D8B37D29ED803260DE222352C0644A5117A238DF2DF3A7DD104CEBD4D3B0A89A2D05BE51592B17928909DDD488F73956A2A022FFC59BCC279283BE1A7F3E9FEDFD7533E45F86CD74306B0A9350B6561F1ADCC5100C44A4EE0159B32AC391FBDFC3BCCF515B9E56BCC12E71F1E21B5608EAA8E789CF8D6C6FA2EE3849DDEFA00CD1808C58BDD521BE6496CDB4DFE9019CD1C7B4784BE49312DC5A00ECE485FA2DB4D537267A8B06527FDB43020504106DC568E3C9D07D2226B6BD8DCBAB3FAC985641E241427EE1A91D5A0C0FD702ECBA91A4F228C81A0F4F936D099250BF96378358A4A30D265DFF1DDDE59CFF2A41EE1E8EE33E0AC13A3BB8AFF781149D298D1F2C653F8D66505FF697D41A032D64FB8B3EA80E46D257C88EA9FC924126CAFD53F6D05D15DBCA3B171BF96460F78FD8065F1A25D4B3456C0B229CF8354A86A99D17AE0FC9704FE12D0C57F238BDB59BF76959F2D9CA6DACA9C32C81D1DBA3F27AFA5E818D2825FAFA3A731B08D8987EB614E48C528825C58FF3FA7E4289EBAC96BA2F9C5DB3039DDFBFD5E5AF0F251453D30375D24CE5D3AE47A029653ECB9F334C6B31775C03FD82660C74CF5DBBB416B6406401D5887EC3DA7AE93A28A1422F6F5CED4D1136C9F9584C1B3CEB5D96161951005293154189BB7F8E7D9DD649DF22795EEAA13AEE15A8EA09D02D5A3EE8704D30F5FF8671906C5DAEF6B893D044C65EBD4F94DA1C0A066AE4EDD16BE940A3EFE4ACDDCEAA391BF7351EBED504DDFE393627D4427F69DB3516C3B469C6DBA2F92C06EBFDBB5502372A75FC5C5B044FDA4EA0A490FAED52D0FD104370B03FC6E1A054B5D1EBC34741111DBE7D9DDE528D3BFF462851370EA8BE2BC14E4002AA6280DFE3938BB79DB936661DA80EE7BCAB4E37CBD7D40967BDFD0092447AE04CEB47742D45294DBB1A9C56F5F60938E0C9AEA20157991FFB44A63C7D91BF909E1C3DBA0471851E96C32E0E4C6D4F6E2523AC9820A8BD6F7FF1F984ACF47E8C1182430D41E72D51BCFA19684046D6E7B51DF20E9A5F437026DAAB30AD803710D9CE731E20247E85E2614C8B0C418B59E0E6BB84BE437AA1926AB54CC4DD8D900A197B7B044D27AF1FE829BE05BE755FE3076338E8946443991F499B920B140A7A23BCA875BC57EDDE6075D16E8779D61634B2CC8880A0A3DBB2B5F53DC04433C9D70F50AA1D8230BBE9084237546F2379E3BFC2814B64794D7E950EAE52FD820D236E9401673DCC4EE9411BE60C23AE14CC4D7EC2C3568A14034ADF38FC88E395095642E162976EEC09B373CDA51A14FFC7D79DC9B82329A80EAF3D35234400F13A205BEE31BF5634EBDBDE558BA9A434178F2A2106CC3C1614F5AF8B5D81EC74F32EA5527B022090F8EE1A49EB7447D69DAAEF082043F2F3FCC2A26D4A27AF43E1601310014DD8C8F15D509AF5AB4DD2FA5007EEDF9015422231759D02F0EB3B45293DF937C896EF3B7DBEBF7A29786CDA2ED394E725D28543F76D221B69FDA96AA5DA41A224BBA54FA5DB635FF6236D95593BB6FAC44DB557222355885F381CFC6F03BC085C6FA08E80635C006B59D291440DC24EC410D96C9643D3EDF80AAB256E171698C5ED3A19B7199D13AD5F8A7C147E24FD7AFC40B4C93E8905EC4073786B17FC6A83E38F19D19325AE4532ADE7D16D75DE06A263705567A8F87ED480461764AB7ADB91B39E169005FC39B64CDD70387C67B71C63A894E7E786D881B8EB1407DFF080F99A74E533BE832AB4B2F089B76BADD4DE94585595D2162A66E4990DA2AE71F9E311B68BA27801B45889C34706BCFB5B5C96413D51F6EB17EF6AFBE010BABF43E9009C139A26FEAB4FBF929B26B94219AC0342BF92D84A4D07683B8CE21B700C5A8334068A583A727EE28069FD53971F11A04B479C889A0F1B683B8F0D70A70449C20D931ED2B35AF4EF616C74EF23255869B23CF264F199A516DE44EC29865238535EFDE14F20C8769F7B1C8C54448EB38BBF2410D2361BE684EE55D16A12454814EDFB5B849917A23834F0B7B9CE6DCB040F7AAB2300971F9B633A319CC92CD1ACA30711FEE3210E9DF3E7F0BA5C76269CAB8270771436BD8A437985C97ABD771F26282FFF13650455C04E49DE28111622908759E3902FCFE2DBFF2E2EB58EAFA004F749DDD15420659D5D45128EBCDADB3DF00553BDD10501B8927FD329EC59F83BB92344F66B9E6BAF5C7CC18083AC0823BA5566D4CBD9E9C00FC991D9EE260D3F30CE4CE077625875E7FFD30F2384354F8DB323EA62357FC1E151F034A417449704C9DF1FC1F45FB599C9737B3A2D6C37033F48ECB9DE869B62EFAB00652CCEA2AA06789927A1BD7D3730EF2528242FB2CA1538EAEA24984EA4B08646952A7B47795505D8D0A22E1E2BB8BCD6CD27ECC574E31BDD281440266BE823976837BE3FA1F0E3BE7B51697C8A872D8151EAAF659EAE28C8776E2C85D1405E891954B37DADE04B4F199DF8E823BB9DD3CE987FFA50EF89877B8C2A3AD8FD967CCC5B9AE7128BFACE1CF63D8051111E0E9447CCAD68313A422921F76FDD52D078D6C7C58F06601860F4C94503307D9940AC57F89E05E7FB42FE4B2E82BBE15D31567C4107F18F03D0752D7B7E07BFB79BAC00B4BDB91CB3CB3775112BAE94944F14BF9F512A25E0FAD1235D58F845F021DBDBB433BF0D6D57D4446F8FBA2736100E203BFB1EA5EFC45375BFAAC8E3B8B0073DABD51B9B7910883A3911A45CB6E889BE75F7430A53B6BA0783DC20CA4EC71C05AD39E2F4107E6B3ABBA63721A947E8383A83B16E0F30FD79C91551E9C077AFF4ED438DBAF4CD70E61F55EB7B419395D39E8E0A0354F081DC96082513FCFC561BCDF57C5A570995F99B4C0CE1AB28DB55E063589BFFD022670E66A241C79A4B50DED6E49FF9BEF34488AAB2B32BE932E2B1C735DCFEB40C1BB89B8E4153563FB4B2844E5CDE2FF7E6B1E42168B81DE8592658C2FEC1A16A2B6CE83393B8B736BEF338C196A6D5D4ECAE0704B1D8D402EBE1AAEB9D4513B0C02AD0F9C6D0E216BEB3DDA38719B9DEE929CB8AA6D54A21164AE325C39996938EDEAED0428779D81B18DDFC62CE9A076D2BAF0C6D5389F06377CA62678755ED724ABA4450255517B4DC2DC2583C672AA62FFF9F5A776A89234E1BAB787BA3997AF7346FD50446F7EC0C58E8375FF2492AC84DC033D8002197DDBFCC980B983E5FB46861BA09AF830B0F20AE9088C30962D1814187E0FB7037CEA56A1777C977D688D0183482E98F14E6DD7624D6F8968026FCA6F12D7045E8B2F138568A3B9CF9DCAE66CF702DC5A0943AF20F48E333D70BA47D7918493B10FECC3995D74E55941F40BAF3F5671C8EFA35C3962B47ADC31F491D14C6CE81205C447DD6009BB047B0E38D5315E263AC829E630FAEDAEC29198FDAB4472B9DBA3605E2A3A377174AFE4B0DF616E58CFB91F2A6A110BBC7E54D2CEAB71996F617B04E5D0389B1ED1FB4F6F4E731B1549F396AAB4E6A55563B61C077F72F2446BC3A9809CBB194A358FAE5A7FB346A560FADAEB8E892FE3F2AC45145DCB96612C697778FA6591733127C93CAF55C3E8A1854E3F992EA2DC5AB1A9BE68397F59552169E8763709DD4F8D24FABA198423040780BED9FF54437D0F664E63887C354378789AFA45BCAA3643096D52DCE99F33DFD954F71A320F720F4D4A8CBEA5AFAD59037E9B00485340B0419DB9DFD0AC88C8B71905DA2D97B28053D137276CCFC6793653332FC7F5170E392C7937D8B0FD2545F4C2E0C558496141C8870C38C5508BF0CFAFCF141AF91951C998802FB1A45266BD43C2DC664E3102449C8E980CC75E0A9A19F7BCEA35C3436322423441EAF101FC29E8115CE5F6E4601E47C847D005A8BC89711FBF365B0EC02E961919D973024B7ED506F3A472BFED266E742A98813E1A63E8C3FCF9C22636F3BEDE17A59750C712A4FD3C33831C535362340B61A092DC816CA6702AE401C9EAC4CBA693D7F297405EFC1BF17EB40545A762250E9913C17FEA55F9E5FD7D7296027D9151D64279CBB +Digest: 492833D231BC9EF15447E1C46944DA2232CDA1223B74567577290895098CCE89020010AB996C3C1364577BE7C48AABB991EA4CE8C3B72E9F8AE66BB0187D489E +Test: Verify +# +Message: 4B61DAA94E5FAC9E97A71FC385D436519A805DEDA12A14D74702BC5BA568A8BA49FC64968A104EDA73BCBB52225E93AF7A75B0F6C0724842D9D63F52292C6F5DAB7EB1F10B8DCF2CA8EC72BD6D16914409BF1047F6A8F7347B2AC7025CDAACCA90CAB8A220AA1B9D41EE90769C540AF08071419743CE35641D148B03BE4147F32F3DEC651A4007C100720967B06A4861D7D95BF18139EA816FF496248BD02AA7012C28AF79FEBD431437CA288D21F22A20AB3487D4E5D950A56ADD2B52D312F28837FA244059C40BD339F3CB79A800C6A4CD3900C43DB1FE4A6BAA535E9F11D4A905381E7617EE5D73CDF23EA26CD22A5CAF28C8C3C545F4684869ECBAF9E7037A35DCD85DFC828FE53A86D56D44FB4369E0B0468B5DF719D09F0DD10FE7B7572CDEF1DA2DD71C52A4E71D1F5415F69FFA3F70EFC14FA095AEF7CB5727E075E01F8C5605802295CCC8EAAACAB4917D5E3EC341C7621446E2F843C2AF9A5547B90FF313479EFA295FEA6F19C6DD68D42E765D18309B82EC989B153B2286AA61FCB61AE4793AF54C107D05A7EC3AF4905FDF131672052CD780037F876B9CD7E626B60741CDBBD9E53DAE525888536DD01281FD5F5036ED39C04FFC75C5A14E8780FF0636FA9684FE0C8B219362450318EAB5EDB44B3F742BFAB5EF6B1782DBF05C7F2B9CD1E559647A813CEDB6A3EE7222DC55A132530A373B28F438D180B943DD75612378B4158B37AA4C328B7CBB69AE29E9750FEB7A913A6CCCC2FE0BF398DD9DD2EAC44C079A5BFB59BA2B34BD733CE7028A5D8A886C8D39C96C704D95F4CCECB4945D6B899F075ABB373A91DFA68E5D11C1CCD2E8A3DE7E711DFF749E9E6F95D59963282A78E3594659A30E555E2DA0B5053A79C184AA7404F52434FE1450F9DDA3C653F5E207739A990FA771626BA5F42FC54EF16B1700991854B74DA9EEF7A687D88F187642F3620039D6E408ABE92215935682280E63B9164CB8658B32B751E0C9F5553FFF88187BF9CE40F0FA3011EE1F2F0AE88B385BB63683A1DC9EDA5381E1C66F883D6298B1776C351BDE7268550BA61B5E0AEB63B8774452DF40ED3F34788FB1995F1FACA1E1BE49BE18ECC4C448C64BB615E06AA21CF6E633886CD6B873799C2B2BC5BC6B37D324FF973C4E504C8079CA92D7A8EE5B6214AD7E03600B33CCE3C6E34E6B58348E1052C429034D135F8158705636DFD7A6AE00A77556D300894D66CBB9E8ED1C51F75877B6350B94B8B91E3C461E948127698A1F7776EC1BB54F58C3ACF043D2FEC6E40CB6D0A27F0C94845166D7AE5D8D9398071A86463972E6EA44070423888E57DB4A4A168F951B980623C22EB67629B61759D1E6D2C10F90FCF8B00F7E3C94DDE74263BC56A0941EAB2ED3AA513DC6083CA8E2813CB55CC6D92BAB60FD85280C20E2D46A930C1C2302DFFB64D1B7B1F124C57BD8D98F766B59B43D88F444E350C3CAA7BAE65F1C9FB5EA384ACC85D2D83C0B8CEF978B12886672945F9D801A18FACC0BB8FB6C0D304CC32977DB5B5DE912650BBD619DB86D3B59DA4DAB9B17D381E5C3F7E3895EE79D8A2F179171E55AE3018EED103772F33238ED18D04793048447A655613686131395F403CAC37727894D3375FC896EB7FE62453CF554BADCE788CE5279322857C8D169703CEC35C822ACD1C3F76AA193ACA8408DE2E968807C0008F0F7B69204A79477F7A9A772229F3B812132BE663A69A611FAF59BC779EDEADAD806FB7FDFCE9A5474142B2AAB0AF3385E0CB2FA15B406247604B4074442E17E4389516BAE7BC6845E2D7F989B2B5684F2E1BE0E8740604C75CBE8A1A12DDF2FE22342819A033EB528CE298D44879EF13B2D1896DE13233D73036A427D80D288D8BC35090DBE876962CA4653122A7866AACA24F92BA4BCC54F15AD6B6FAAE6F949DA75215EE95083575AE2A6751335EA7741103BD48D0AFC1B4377692046B4C33A12F41FACE4EBC50D1F7DE84247814124B263059C330B111801F17F514DCE64BFAD8E26FD8F73BBE3C9BB8841ACBA9D31B087F156F8D4A6D220B351DDEABF6A48A976C4C73156AB618F3E32DF1E441E83E79B283271CC90318E25A05F384BFC60689A80323A77DA20312AB2E9720CC5B4C4F3BD95E6C066C3E9849615E8BF909583B6960B443F36A2D83E50B1B9A167DF99A4FDE7532C09E1469EFCD0E52E3FAB2B79DFB15A815F11B723E272B144E377D9C8276418374BEEF4252609017575CA10BE70A5019F685F9E8210C6EB73A6FDDE58EDEEAAC65EF20F3E26F34EACA12D3EF3954C3C3ED98BACD8453474E51A00C521E8814E7A95FAB9E00CDAAF2473420BE67C3B222D5701A3C868F56CD489E8FA380D250F5181353D5E012045597136B3788E38409BF590814EA2D0D96B47A3EEB17F67A0FD06D5E23694B298A670E63FCC752C0A7A6306DDDC88BD47C7E8EF4376DCBECF3A047358419F8D0AE03638498D931E3D9BF836AD929C87D60127228C2756569DA4472CA9162779982052E9306759CB63FA2A28F2F64C1C84495C9063473AECD25FC6FC90B9ADD5B47270D78B0AFB9D182D2D1BDE7999BF80F9BAF73F0E555E8A6520A4D71A404D3060626ECC041476380EC7D093DCDA3519BC80B175E9C0CE11445F707C8878AF2D1C09D8E77ADB55602155B44A39B902719B97B21D42D301395525F11C8E8859508FB2BD7E7644A59D2EE4E412D9946F6E9DA0AFBF44E194C6E08875973C9287B5A337922179642033398B068B3E2C4F24271F5A12D62916FCE4862E0EDAE3FFA9FCE0371532711742C7747202D6F96EE74F4614B42F7979FBCAE91CEF12B58A615EE432A5FCBEE187C399937F536A96CD81D1BD2DB2AA1C2B5ECC109BFD1BA318A1DD05D67432AF3F6DEF29BD310878F97AD5BB199B88C1B7EEA5FFD2638DF95C188EE671CEA747328DCC7C0EA8D42D91FEC9AD0191C79D88848025E895FD001B6C6D360836E44862BC52276B8DC01BF5176C1F18A19A53ED30755002B4DCAE21A2E5BEB2EBAF0C7E22E096ADAF1161A9EDC72A1CD5FB341444BEC3DDA48FE984E0485F81001C422D9CB56762769D3201D4124A336C70EBBAB776CAE423D7D154E8CD77476B805715BF4C99B5F86C72AFB980A5AE8FF64027263D5A4C45A059BFB9AE9F083AA86147B54B02C063FC2BA4EFA8D7DE5B3ED7231B6839187BBDF06A19C94CE84F572A3A770A8C956F62A1CA8ED67F58639AE107D3878F2BC9FE64EF4915378E5F633A52C0E56C8AA24EF8F13531D104C39282EC88EE891378F6EAF8F36CA89E1F0C967A1C86A34C5A369A8AE24D1C708664093935E4481C6F152544995D7AD344FC3E5227AAA8662AD1977EC53FD4C45CCDCCDB374754D7E4B6B234F0238B1BFA8E9FBF63619BB0B900304415DA9B7534748EA97486E644EBBF29C8827E5BFEE8E576454187F19C0E9182413A44E0230560D996820A8825D82A11ACEA6420F5A003EE6EA7091D914013090F653F1497F88E02314ACD6149A6BEA5070A7BAA02C1B71BAE4B6F6E5A55BE560FADFFA3D118855B1EFB7BF54CBBF037DBBF6F3F3027356F6F372D75F979C76BBE7A7D9CA7572D24840E08BC07B54EB518D7E8D387A7DA74C5D4992FBF224CFDBAD26B518A08F2EE8B8B9A1404CC73CD3DFEE7F1E9004974B16F5FDF1467B5C27FDDFABF9B8522995BF3EB79E4F52ADF2176C6765CC736BB1583C44240E6F6D987210423A5B5C29043555FBFB1D11D10A63309F37F704D4B831F47881CA3121DE800780848FCCA87611E6E0C2AFF244BB1B0B282CCB01F9FC8B60B7A4CBD9DB7F55F7EBF5F01D9480354DAE57FE85DBDDBE8F9B97E31D16880669EEB09FAFCCC826180EA8F76DC5536D7E32A83AF170EB59A6C20CF6A11CAC2E42CEF850E16CB07934060556FC8B41178078A7256A3F8894B1E799E2B5D9306501E0C12A0EDF93018B603D2E377916E0C6726D341B0BA7BF8B075CECE5215150D309A07ABE8FC8BAF2101F1065E14FCB3434D31547F3961A300367555CCD09CB0B9A19DE6156B3B066376A7123CD0C942F4C89CBA8FB9614FA9A07E8DDBD3ACC04ACF4341F5067A562E8462C617FDD0D51047A13D3C086967D71A589F9ADAF773B7D437AC54260FFAB505586E8E +Digest: 441631B849994A22B0947DDCAF425CB5D7D4D30AF8242BC97193F722B2C3B62834273CE9B5A5DB41B8EB343E3B6D5398C290D99F88B7B4232C47C89097B40E93 +Test: Verify +# +Message: BFDCB414165D7874170FBA6FFB09D12E8ABF515F0935D19720E3910B531724CEBD6A6957B5190D9430398C40AAE56F779B1B545B62031601376F1D016B5A5A94FB2BC3441EA91F45F52627DC87BF29F9893B8C193E1CD1592D11D0C4040398F66CCF38AC98E7CD98252346A26A3C38CA871E95894AE9EFE982B57EB10D0333AD739363116A704B5137E273BB7630FEBAA1D2AF8756BA6508A4B160760E25BD30F35AF03B1462451A9454B6657BF6C962DD3922E8D3BDE79B5B94E27D5EF72C7060B3701B8A1F3BADD2AA87D8223DDC60CDC37B3496B54CD8808A718BDA441C7AC101312D33B1E15AD185D38F6B231EE0F0281906DF01A986BFBCA6985A4FADECD1E976F57AA0C76AC80A19A75D8E40A1787234CAEFE6CA4B3D4EA53C66D0CC6B316542BDCF159A73C9C2EEF32602ABBE88917171D66797E4806D0C1FE1BF2D842E73409BAC3D72A5B065516063C0AD90B1A0BB9C9216ED0C8F55A64B1BFD3389868624D5E274F8C7B8391A4495BD393F8213676316C23019C95A02F9C09A517DE1844BFCDB4505C28D42625205A22CE2B9321341795A563963CCA77501F3E1A5BFABA436A02EE35647408E90E8356709659A95FED3A0028503499509045E0F74AB0FA9D029F996F8EF877D509CCAEDC436402664AA4B8A983BDBD47C7F78D3D71B4113DBD49DE9B939771C00D48B6EB826501E633726136563136856923692DF8C38A7184054F6EB8546031D94CD1D77126360028F0000BD57F93AF8825085D0F1BE56362881FA7E723D90274C6A88DC8FBD762B9E02D45238FF8E2A8A3C718F8BA7CC13791C2106C6E574113D8816CE7B4965576EBC9F52D7D05BD4EAB9F8B6C7DF593D4332ABF503A9AC0EDAE5FAF70180864006EF318202D8D7AF362A44DB5AECB9BD655EBAE558C50BD4FADAC8812E02CC518ACA2E8342EAEA13BB851CE175722F64699AD1B68EFCE4B027AE6EAEE7847267E484A3C3F6987F2DBBEC7B10E02328224A92CB9562C3F45AEE7A9AD0DF38A6858034EF99A6C702DF3E1DE7759AABAB653F7DAB99C7EA1263A28DC13211C913B27DCEE3FAE2454D5C8C043037673401ED4B1DDFE5D769F36F189035A210CC309552FCC48B3220815E1693293398337C82882167BA4639C1D1DF3F1715D1B92BF4E1B58599BFF8AD8400B08373B9CF18B8FACC78573B68B97974501B7AD2B3AAA0BB76BE0C6F632F90DB6E51989DF957482695779C6C3D92A1F04568A3B9A9D8B7C4F316A046F950901749824342CBD6DD5B58E452DB788AB1404E924863465D1CD6EA5ABEB8F28DE92DC82B6406619CD9D2950C8D46223F1256B637649C9418DF1070B8DFFEDB7E30D4B1C11F9BE752AA23F4DDA178680C54FF4DBC08C55B63A7E4CCA1A3C12B153706A03C619AB188CDBD92988DD3A3E19BD0BAEB0336954BD2491F34DBF6F21F8693D76D9BD465757771C80631471EDFAC3AF0E5D0F7731A50753A123B27765DA9A85898C553FEFC8CA3775A3F91AC4F215B13FDD910F47868D0DAA0F2C9E7E0A2088F2455AEDFFEB369E5C2AA66CB4671D0359397DDDEC1E2AD7C62C0625227A6037108BEDA56F82A1E3041D78BFD4B417A3383394D0682FC6D6FBE9F7B3225F95D62B47699570E841557140250D85B6D9E2FEB1C1B649C016A90DAEE0D9E5FAE8E84544D4B92E99BA46448E810EC944FB9C8FA58E9B1AA6F3D4182266D1A5A2E52FCBDEFED7B80CFBDFAF18F82BB66D267785894BC51C1E8ACC8F2AC5C7C20372FD2F6C0C0578F54284E4217300289F151B4E2529CF92E28765C1D73054B867ED6257F56F392B409569044DAF5DDAADC1F9702B49A6AB0A1B338F7A7141C3819F32BFD6DBE9F4362726B058B7C8C9B31CDEEB654BC85946364CC457523C71223FC8CBBF8C70A639B369EFB8CEBB35FADF79864F0F587AE26C1B490EA0E502162B611F4C8FCE7DBBE3156A541FA2B3DE006A4EFAE2CA87BA061C361F0BFEDFD5FB24BCF92CD5B679BBF6D2E8937DE2BCAB1EA2B4DDDE8946901DC1B8126F62DEFE84AE3484103F6B4F158DD33974CA51369169FEA12CC04F9030351258D56DFB66DD20658E3FFEDFC99442756C10A419C359648A226F1C8BA47262EFB52319DDBB821B20E49117E1A399E4302F57D1B5C405998D61B89F151C28CE3F7AED453539C1244829F20E9ED10CA9B013CB2C709F2EC1F437D348A0E72DF18A5A2DCA0E56425BD95BB4F1696004CD717721E2772432AECE08469EC1B6397A76EB58723698FBBF2D719E7C97E79930F5258DB0F9E7D4C484EB38B47CE1B5C823B5780C7CDD5DFB858AE48ADE126AB569F13525B1D691A9672D9C789ACFD18359617D433E34278B69045C6E24E4EB98ECD80F9C95C6A9BCA7874893E21BA89D81BB9F7B1CFBCEBB924BF063257529B0FD41FE5435F4292933068482FE4C47314859CD612AF568BF1A26FF50F6CCD2C5D14CB8F65F86955AB5C936F639A9954C6D070F25AA341292D8F2F9F83CD672A810593B7E655952C28F89AB98A99E7C6BAC637A91EDCCAF5EE6BBCDA2D1AB5077CD1106174A963B7A95111BABB1B26A3E6F4F50CA22E8125E180C1F3EC8A51F3F07AC558F038F94DF2632C4D6858F131E47A236781E170BCB0B3C37C6E58F13B870A8B59E342315EEF21C036946853EA5DAC2CAC1EC0D498A2E609CE06409861E1A76432CA23CB1FF65280C4AF3CB0688F1969E79E63841E58D74B0F078FF9C1C7ABBC7E5174767AD6C6767C42F0AE261968E171694B09765A2FE543C035B338920EC5CD1291ED8768EBC0BEA7B5041DB06C04AEF241CAE1C031EEAE4CFC297699086BAFD85A0FB32A2DBD281018B5ACB0545435180B65DDCB9F5750B6645AE6E44B00EDEF08B9A1EF50E780E3A46319CB9CFDA582861AF486B663067F22FDC4CBBACEC31081B48BD6EB0A3D5B8370C45892A726BEF9ECEE54D05CBB1AFB875163DF134E4B79E0D89B83B8BDC315B14B77ED0131B97DC033C0BA3F709137ECDE75EDA2ADED2F46446B6112F8B7500AF738D3B394BDE1B290D10FD44EE989CA4E4D2F56F92B13631E7E248DBB1F19C46785C913FE53FC12ACE5501C271826E9CBEB05203F093FD20E5181F355F388B16631E72FE4DB113C456F9E4668FB36C6F8766A1D4EE7B34B18ECAC224855285B18774C1151B6C1CEC78DAF1F56AE80B067E43DD93672EC684D8F9475024638DA9EAAEB29AB0ABF62D48EF36F7D14FF4B91F9ADAB4B6DE388F38E7A1A13E8063951C8B0079FA089AECAF65188E898245DACBA5FF4B1AAC7038FD606D1EBFFB1A431B71A5374B15E341A5029A2BB3367EEAB24B6773C5E77CFCEAE43D0DE02434D0D09912B873286F433A644B0EB0CD7ED0783A51BC4BE4F38CD76193F3461D5985419BD6AB07E087E9F8D157B5D60A2B2C6440ABC193D6BAD07024CA8EC6730DFF0F5A3C6039B2529341E3D20CF778FBCF60C137865B53CAEF2C93E9138C7BA1CC8E001CF34C35A29022B6D3083C8C5A6BD48C60CFEC3DA57C945961DAB9A444DDB390F05304E0D92EB362C48FC47A895EE384F5E57095D04775DC4C2E8BB78438AC05BEC7F7FA01A1C336FD056D368A46506FECECEE10B31D05A32171F231ECCD61299D071F3037E07D838CECC364275F7D78BAD105274E0B8EDFA95F2CE1DF1A6EAB2D60E08E00526C290BFBEEEA560228A1A0888A0A4AAF968587A3E69B305BD8357EABDA7696B69EED9E66F8246FF05D332399BAB7E30133906D4AA114D0C159766BC9E3714B39F5587796FDAB0A06F48695FC74919D703D3C690549B07936CE8FC6BF2A5DC4C5B25398C2E6822E1ECA751CB027D4FD891925CEF9630DD29E42B69EB5EC0DD8B2A7B3D53AA09A2AFD01BE69E5FC79FB2E2181EC2ADF68400B322116B07199E8C629B9632D8C0EF06CB2C02EA9FF98EFDEFC75546CF1C413DE8B76043AB29F0FC4782D0CA52E0C94A3384DD3AC15B8993B5CC3AFF7B9222E0D55681442D83D147AA15955A88C4890D743C923CC4DEAEE29F5943B94BB43F77DA6CDD2EEB9ADE9DD9C1FC708ABCDB67E7DCD6AF7BC4E959B0CFC83392F9707662C01F2F4B79B81BE3D47EA7F3B9F543DF2DCEB45106405AF895A81E52144B136411A6C2FAB4C01D03FAF664F03F33F3CE +Digest: AB0E6298D0C3E9FFD93107672A6439421BD0D1B81A6B63F35728E8AC7F721004B853D41BB678690F383D78F4809C707FF9F1DFB6F99574DE635888E2CC368105 +Test: Verify +# +Message: 664120525C59BBDDA450655C44EDE0191DCABE6DD7D675C1BB9ADA1713BD74BBBF344FD90CC5FE0371FB6BA27632D604EA0686929ACA5E1EB29858CAE1BA348F1DDE20AFEA5C8AE5B43415F1C2FFD34F00178C123D4FC277011BEB376BAA168BB9EAA9FE6A6020E99BBEB6D7AFAE3BE95CA9356C0A682C7970E282791A641CBF9D37CC03727B169F05E2655E218B175A43BA817518929752B93766780AADA26E43BB6853752D49BB4CD9A8BEA7CD0901FF2995AC2E664A6D7F29B690803E04CEE978A068EC9B1049D274FFFB452E8A70B61F7FD395585CF2B39FA1BE4F8DA58A252B91154B16EDC1DCEEFBE264C00A76389AB9B7848ACB639CC5217634D0CD77C8E7A89D68BE4D45B4158B2CE95123B0D167F6F149447F95EA6C1F55B78686C701EBF21009E36FC4DFBF0DB82168B536CC6D576F1644C3E80FFE7175BD12E4062E70C7BF50A3E18C1422490C7C96773856C2B74B098A6E06C0F1404A0FE253405334C99D24D4B473DDA16672F2C1AD3AA8E00A2AE84F9017C6DC24ABDFDBFF3C7BE524B593ABC95D8CBD45212198DD61C33D809B7C29D674F8571C29AB72137EF4FBE336DC00706C6BE212EB1EA25A7AB6A297253B2D5E55D5442DEF114CE7AD222C382D2E54F95C947D20BBB48E4B20F46A3AA20C743C66FD7551294D58F4AB3F1152950896427E2E0DBFF9326E3974DF7B66F03BB7450EF301162B952E3862A1D7E87D64E1C7C0E48872CFD5F4B6B30968B5C8FB3BB0421C99F4B14998978BF51C254A7C4CF780866D502BF75EFB1B32A38BE55003537D11322A52C23ADCD926FE6E02FAF401041706391FA7A1D6D6759D6E6CD580786E8066C7F224A3D13DB765EC91BA89685357DE02DCF89AC64445AA11ACBC21EC68C2E0FC7C2F8F3D7AF7D8BB43ABF6E865BD2D780AE9C53A11A76E593F1C72407F3AC41FE5B2EE346CCFA0B09AC7B3F10E2EFB1951F23BF55860C04CF3CD914E3116F62435341E058B173386D648A8EA45A08D4A2D6B145A5CA1CAED9B0C030C883905410C978AC013EE6BCD40AE76A4762EB28B8A8A6BF5FB0801397E9BE252DE0AE484F1BE7E5A18A3725E640CB94C5457DA74A6D0C5ACA5605DF517D19A69303ECA1C69BACEDD7A46A57572756A3F16AC6A2330B193F196970E046C43499C46B95380B23A773149651801729CF8059C38979B92E0307CFCD8301FF5CFF5EA6CB22A007A403877956AEEB7F81692B82B1520784AA5B91E832B21489826E5AEBAFD2C7FE04CCBB0133CB4A5BF8634F0C7EB79071378BF79A042878A67BAC150DD45D024A28186015FDCCF29FD372B33E2B8E2BF3AF35D946FA1EE318D9A66BDF41FBA198339E1F3BFA2F207102E77DE155323A2366FBB81EE0D9AC24903E61792C2AB5683C5598966ABD0C6046F612363DAE42F558BAED24CD946D3C0170BFF4A5237FADD0B0B8FB547008131824F40CB35FBD7E42856EFC509DCB5B3BF634D54FEEB1FA54FC3786AF22E79898AB18C0243229348FEEDE103A055F8DEECE8AA2184943857DD9220A9F7BC014573789AF2E9555BE78775BB845A657DFFDE2DBE6284C6133C69647EFE89206958F4B974C0247FD70A284CB27168530BCCBE624EA56E62C730665C2D0C8A2F5B5FFF795A858F934B38B10BEA56C245F1AC79551C6BD5DA529671E37BFD185F99BC3749507ECA49221A0016F67D9B0A779525F891393B7E661E626563092920B4751FFCB947B4EAD5D900B7323AA78C918EA03BA7242C9C3987A945603B9A8DCE520ADC779C0C605D7A29BCBD3848F7DAA6BC44CF4C6E7505F9C4D6AD39290E28F72AD0DBCC74D32E4986C33E729761980005A7FA53911A596147FDD35737DD4B0830F8F26E1B7EC902FECAD31E66BC5E17A0BD2BA8AE418B4CD7702663E3949D040E51302DDF887FDC0BDBA90B71A934DD3B0FC276DFBAE79199064F038F46F4795A22F50AFC61FD159DB5D3C9896761F73B2BDC2D41B18D9329751C5CFB9B10E893D7CAC09C3E8C3C2522A82F45D004F4ADD7B798918109B4BD3D9A42DE40E538CA3099C176BC5658D8776E6DD0C1CBB78495607D7C93A9FE9FD255DB79D7916B321C3E75DD05A19F6CE85D5C9BB5554D20CD3EF293E739C429E5B6679D2A2332831C2AFDBE13A53E3E5FDF6B185E5F5FCE0789FB2C264C64E453F0D4CA0A1D6D57E92C721DE3D0B576753DE23BE464399B28526E7B59900D957B6521BD1A1C9CAD19742CA7E768A597EDB82C6B01E2CD6BAB4F6FB7DC29357711AAF81826D5BE1D7E60E1ADA285FB5A302B037CD3FCA60E456C5CE3B5389E5464D88F9326A9BD2F2DAB3ECAA935FC34C6470668515245FEA6725828F90A01A9A6C54646656613820216056100C871550F797875909C036FD97824415D525754D172329681A77846C868E7AC4B829DD06F389256422949A67E4AF99AB968EDAAAD1DDE7360B10EE364B92FD54B7B9675093AE713658CD2615F97FC0723B9A6F3D6A8535B5BE454CFE108C239544494494A00F173768A17DD221AFC402CB1A7AAB050E597DA6564DC600D3697B1D56E8754F68C930524C721F4AB2817E0916C99205E5C91F045E7F01FD14B38DAC55D789D8300559D314214AB845531B53390E69AB302C53BEC0FBD84AC46ADF38FB58926B91024636628041EAA5B10EF7DF1D873DE181CECF4AAC8DF2CB9D4B459B069F28039F1EB9C08FD96ADC4D9E841B626E8D9D0909DDBA33760775C51BBF8E30C11E7D4858CB940C66A3CBC1E7BC0ED2307FFEF15B5D7584A9298612B021314BCB2F3F91C2F19B3A92E30891175BBCAF64A64C89E4C93EA16DCCDB08A8794956FEE162199DE55982781FEF8A75B453FDA2229C2CC5D409FF1081A62823A7C1292F97DDB69EFFD3E89236FC6F088650F1826EAEFC36318D4A45A42292B5A2DD41B29A5FA716115FC8236709144F82F68A6DDA445F186D2895D62EB9277C4D8B7057068F540C1C66A3B27D1DB12298596464FA8F67B8B4325261F996C14223359684B416838BAD09C87C0C5488F898CBF39DDCB703709F8F9B028C4294B1C3F25443DED68C64A97CD28865230A03BEB3C071DAC034C3E8344370B3AE93BC3B71C508B81A006F7C9FD811FC0CF256634A623BF4C9300C4348A8226961A0BE9986CA76A87A31CEFDEB77072235B9598988DC6E93CE6B736BFC47D896D92C173ADAA730D28140304122FFEB80BCE0AA594C590E28183EF5C86E209696DE3EA8C29A8262441376AEB92FFAF054DE2F8E884173B149F2D2DE6AC3B97D2EB4C55B644C903BDADBF817627C2BED65BFF7BF5207C6A654240E1840D7AEBCE3FEC65D4648D54507E85F80FE8EF48AE0A52DDA2AC181EFDE2F64CC91EE3822D52139A39B2321C55118A75F59F33DEF81B68768090D6B488DB39A90241E75B4E3B8B4DEA421EBA189D7A5FA098CD32B2CB52FEB26D93D93A163C1499D0CFDAAEB366EDADC9A45F312B6D2374CCB97F5A2A596C77048D5A40C4933E6AA44DA0943A62160F01B1371D23C254F3ECD32749B586B492E5DB9CFEB9A728669F9343C7580BDA4FD4F87E0C79E06CFE587BB463C8FF097DDCC27F8E9C25DA562AFBCB8B7650DC9CD76C0F0F12BC28FDCEC7892F7AC4C1F244A5ADCFC7BF53C917894DAAE38293516CB948CC0DA6D37043A197F1173C29BD931C5B8AECF9F7B82EFCEA4878BBADFB9E820C7F0F7097AD2827E3E9BE8E28F4854A8FBD4E9F9D0106BD7450D3741BE7B6A8A98448B3768C03C2E7E348867B221F5272FCD6962BCAD7BCE722B37B6BFF131035466BF581680A9E720F97B62432498B2520DFA20F590CBBCBE7BC18B66A5F1EE1AC350372DB130D4725D8158DC898F8F3DD412BF15115BB6EFFB17C29517A0A97BF80C987280F37134C37DC01D2A0578505CBC1F176D11B92C7451984CD3FBA9A50099CA724E5BC95E811F5EC0F40C15713CEC6633D9F63A05F02E8F937E7990B4AEADD7EE508B7225A7122B60FECF2CFAA6760C187366E6874298D6C1FD2571AE18418E32B8ECC1B06FEADB689F022B09674DBE73F080EF5A9077756C5E57EA082D0C2F3DCE0BCF5253E1C9E67830B2EBF11883B5BA79F021B24B3C8522E7A58AFE4315658D31957DB59623491614F52E4FC23A7C722F92B472D65F6C5C8DCCE1DA1E6AC7C7A2BFD67E1758920D13D771808FB52 +Digest: 11DC1AB8306F98833F6135999E52A9EB5A56C93223C15A9A05B5412D664A32660EB3F387FA671BB928981B4A9EBE162C235752B48CA7AFA77D2AEF7942B963CE +Test: Verify +# +Message: 05E030E1AD7D9EA90F0D5C36ACA5150FEF06FA3CBA6C2B0E464F0C3C3EA8AFF2F89828DA548C1417B006339A076279525A5362794FFBBCD69AF86B60DDC9DC6E1FC6F7D1E3710612E4D843961F6143203FCC4E594504D62C6FFD7C0811CD2A78FC1DE03CFAAE74890A2A4FCE2BC7E88C4EAD39665EED900BBDB7EF7C495B8D64F77D70FD688A6820E3F6E36E8A6F56058EE9FFA6A361196A0B6CF5046310880D23FF569EB9D92C5001821001D1FBE41EF2989ACA6FB90F7B05ED2AA40B1B299480F5F25328427E482A03D2026EE6BAB5C2EDBC7E9F89C60F36904D25D97B39942D3F1E293765C91592FF113ED643237C1586A9F5889E23CDAAAAA2F011C2D72330890F0604BE5A1E5B5B21368B9217D4DAC649D60333196DAE39AAAB3E3F553B4823DB6259DC3A0E054C2945E00FD0BDF313B6735C5B5C644F7E227F3A82E1EFB2885A8CBF090D3A1F7342F0FEB72766CE44B358024F79E7AFFD6B5EE4C2E70609E66F0AF9CB77C26CF124AF916B88239370F2A22E8F33948D474A031D6BD4009E52E3AB7675394DEAC0D5FAD685E365CC60B6A4521C95D6A1E5DE56E9BF5C02FAF1C2013FC1AFC97891BD31DB66DCF004B9D15C7C1FAC95F2F7195978DD2EC4C20AC1E400A33AD2C5E28B613C6D401CB6FEC9455C7FC392411778743A82BCAAABCC18DC3073E7E6677A7AD120FA8776A5C3EBFB354A5CAF8CA33F2FB365F3F3489273718655932BC6A8F80021382F2DB79437915B0ECF512D83AB0DE99364023C42D9328BC28C6B45B5394D1E75CA9BDC729803E719944F24B7373B4C8DC66B7E1F2F18828729D490D45C251C10F90678AE3C70C537BBBCA1F8ABA0E23382B2BF31CE4AE2FB9395D11EBC23057A5147CD28AD54B446FE4A959E8151D4F46D9373963C9ECD6D80B849968685A2DDA98D9FB7B5A8A38E768B85DFEECD24EB60E4BEF3670698B4C43068E4D4287D6A88DE88A2E1D37AE5B133578925CFA96BF2399B813C572D659B932A7EA6F6B0560E4410425FA3EBF77D2007193CB474407FCD345F1BBD2D89C9FA84268FB85F87C895B02C3F528949023C25005630130178E019CE05E9A568EB270A7A19A99043CBD7067768194302F2E8A34F3435E93EF051FE9AF8619CAA7F22517753E926D56BDBC5E27E9C607390DB95976686B685324B36EA30AF2E6E1084B6AB791C413ADB4C7E52768AFC57FD622E32E98BE465CBC41F3265AAA62B00871EA35C75B7B44ED93C9AB74A77DAD8957C3B467C7F398570BE2778E550082CA9294687E58B3E6CFAD716808FB8EC09191607A102E5D72FABD3D4952C057DD98499B9A2DA25249454674F84D5B591EAAAC9A8DE188D2977B3D8533120D0B5959FD0787E0DAA6B606EEB177386D9638A85994F229D8432617EACEFC41B11A22765128C3D3B1D47411545941DB5F9F0FCAC921E8A2518AA3959E14914E7C681B3B48E40188DC343CD644502DE8F1B284271C530A4E26DCC2547D07BD81C0839C9F249D8840DAEB2DB550662692D3DFD460CB7B9CF6DBB74659B1DEE8CCB32F6E0255FEAC6653A8B9798DCC5762BDDBF68718C064109E6B7AF2684E9041ADC51C24A6DE0ED1DE6BA92C857F040AF0C451284979CC0066061D0DA6303286A07BE16BC102E28D605E7EBFC869FFA551EA5B706F7B302EACA726A8C93525C8EE285C1FD2A5DC890607B757FD81FA33D3B57D8FC11F6A927503AC537926DEC365A9F39DE1129507FCB633FB2A82B590172A8BD9CCDA2119528CA7A7A94D1F2FED49DEB1D159EE01378DC239059800641D176794617A9392D1BB700199A8E558E5D58E1810CAC099959F90A0E8A3FCD37BA29E9D346004EABCB3AF6E7F2A56F5178762EEA6CB56B08B405C0954B2C42E4AE82F0DF014C90AE0B1A9FFEE2AE75B23F0D3761ECA5030E1E700AAFCCCFECF311A63CC699DBF09620C708E811F668155099074DAC2DDA130B5EBA5F94FB372389B8009E831081FC049BAB7E2D58CFB542ECA1AC147DE436FAD9C757C448447CD2ACB2C1CC8A15FC34BBCDC3811DD4B49011DB970148187B88BD00650393065B58F6471E72FB649E87FB8ADD3C9AFD44D827048B61770B5A2CA6B1B99A71906DB464D355FED2D754B7640CCFFD1C5CDD87E906B7D31774BB21A9278D7266A12ACD5E00731B76CDAB9425AD18E3D0294881539DE5695C52F94A234A9FBD020987142F92AAA42870A757DC13B9F741C7250C6520EF90C5F52AD59745964D5224A452E42D2433A5C467E08A74AE748542A1A4A690B439F53F58F9394AB9D0CA18E0901A5605E663695E9B02DC572097D4EFCAA0A6AA86760C544082E3497DD8CB67C7078F5D70B26F2789D70174255C97047AADD1FAA38959FF12B8397D5FCCA811D74AEF5215882BFC41117ADBF781341EBE6D9E924C9016BDCD4449E0CEE1DC6C71CB6A765EC07543C709C2452EB5198080DADA2FD96624E4AD7DE0F0127D4A7892B80C9DEA1D7EC1C9EABA52FF02A16F2F96F1B4B2722838A36B94CDABFBAC407356EF75E16EFF8CBCBC45BAD43D29AA380DD2418BB3C3B8BF06C4EB7B607A7F565449BB435329394BED554CE73083F7C77861A4108CD33158E3F158F13760E79778678907F2AC7117051CE131AA36DBF95092B688D671AE77D4C43081EAF55725BD4589250C7D68CD46C30A761C2CCEC2081F8AD5E52E66DD4A1EA969584F688E959BCB42515795971D01349CF773D34F2A5BFE7D14CE64981E742AA5A6AB6878BF04857433DA0BC52CF961621885CEAE7D7B7CE90C33E9D5070771789B51368D9076A6FF629F4EE453C4CD36A86AEC70A629153548D458D2B7C959AC85D0A41C502874796EEB44B2B38782D798E1FF3139F41909AEE24F063C6B664E1446326624B7C849DA183A7BC3A01029838A8623D428C665C3C1FFD1175231AEBBE651361C30F036AD986AD58E908AA284E1A78C2A7E0814C75B96EFAA22C6E79C62C1ABCC4923D43E36C63BB8816845058A0FF118FF538D0AC81D881D813C9473E624E50B2592115634B5602306478A4164A5BAB903EE4015EDEBD2D5C468AC25D57EA9C6845B94B9A28ABB3FF29B9F645AB71E64EFC60A40256C211C5567EF9C0DB6CE1D3C0269550B6FD3503C6F4B142C4C9578315A9BF470E84559EFA971FC9B178D160297B534D627BE4096336DFC4B7DAFD3CD1CDE713F7883B2278673E889AC215F6E0BE84DCAABBE4B509BDFE643B9BB698CD1AF3FC5A97FF5D30802C28926EAF4A923B4CEAF2600121D723C9CA72C3FB094CA0B6761981E42CA030B682E5864FFB2FD39986F768A5EEF0A61AB430225D5D5FD3C43F602354ECE76B2EA746543AFFFFEE065C863773D9B6876B79DDCA1D5F0B65C5114E7A4E375855AC9CD8277C10022E1646127488973D24BF7598C4650FE8B1B3E5FE758C02AC6F621795A28F7C27EC666C9E6790CEA685F36761425B6F2188D193B75660629CC8A3BAB656C56613E22288173A636EA907536DA3C404DC67BD091D47693F4668F5BE7F865EBE111EF04A83D98031DA359616C8CA93CF5A276DCA3138270E2530B834ED81EFDE2CF409313B4FD30F183D07E8446556BFE1C60D75C9531F7FADD3672F03164C76817808296495EAA076937C30C40DAACE6AC9FBCD3C869CF76E23A3A51C3B4A9118B575E33ED429948D909C1DB985C630D6FECCE818B37BC270D657EB59EBCAD33C9112CD8417A86D59226117256BA9912DFFD47CDDD123EC5F09EC43B24D568B130A83C35839A896920D22BDCC84C10454BA37AD6790C5B3DC2E3A8F74792A9CD7BD45DDF2E111FB6F33402B9D7D15DADCAC1A472D9042842DFC4BC81CA99591D45BAE848EB21304526EFC1399E97B70C3746D4E2D082651F21599FA471223EB75947A97B133AAB4D92C70379EFA01BADCC78D12E22F25E0391991BF7C8F0B23BA926435C771EDF8F72729705BB70BB519691E8B89564B3C122CAB9C889ABCED6B2B722783FCF56F135A566C42D4E687665340EB524BAB5F5A6F9EAD529F2BDEE168F1394099BC940B9CC1C1E0D56FB0D0213F1F1FF039AAC83099462CA98387420E02EBD3E5B385676C33BC40099035484847ED5579D062105BAE428EE53E7BD0AF347BBD2A41091DF3C411148DD88B4AC6BC4E16D3A3248F4B7DB7DC77E5C6885185CB37606F515C3F8A0BBFF73120307F450A9BBDE9A293D7F958C2EA899B0 +Digest: 543009E2F626C2D70EF3DD228DD29893463279F4DAD084C1AD7718D93F2BCBED93C598F35B4B76B26B923F7C7FCAA715AD7FD9CE9A691AED760CCBA3C7D13F9B +Test: Verify +# +Message: 5C18AA45E6685E9309F77705961E354498727DBC0C7656081093BF4C0B24C65B21DA99B162FAA9137B20532FDAFC31F639829A6992297F6BFA08D747A25696CF881167441556E96D049203AA575975C4810A2A6ADF4ECCC71565E8A3B74C41FED8AC5A46F131A051FEF3B50F040DA9119ECB31575AF90B577199F5998E3A324DCC42ED2EE692FD1E678E6CFCADC7F0EB30C37B153715BB6D0FE3210745DA08E0AB572BF1FF046A6840D29FEAAA070A64EFA04AD1CA90AC59582E7C049A0CD1E4F185EE0E4C7D25FFE598D86042BCE78053A3AA18A3FC433FA4CAE4D91001683F2D491980560EE215158BAAF3142F4B1B34032585521594EFBF89949F49F2E3BE41012361849B7C209E642D5F734B4532EDEB838E23C59EFA439F764E390FFC6950E88353F98E2162C94A1E071F2C5A99DD4C2125E8F58D580CC7201F07FAD24627051D94B8FFA04E025F1348092C54383C5D7ECFCBC7B2C2294F1EBF8218A20A838FC552D4A2D73555200D69CF34C464D070794B2EE664784A33E4E2F21E28C0D5BFC9D80290960E6752C9DBD7326683EFB1726C0888646F6B9215AF7EA8DC6F185F9B03F0E9AB2B12994B95AADCF0B0224D0128924D0D8D3C320B73EB847F5F9B4FF80A51F8413A2D83E5482EF11F665B71A1D64BDAAC32A017EBBF7C649934F84C54B9A02AA3BFA73034ECDD4714576F46EA9F04916AA4DABB49BA6BB604B62C3F3929BD7C4578E09A5FD0F3C4E581800314CA028BEED1A88C2AEDE72ABA319F1B14E10B182FE4AD8DD9A50563BC6F40E457EAD9D6FCC68C43594005E1CD1EC5D96DE7830222ADE42913BF261212AA361582715B01E19DCE8C0B813966E7DBB48F33540E8A123CEF763EC3A5554030025FC021ECDA4B048935D1F323F01EE1E4F9B90E784DE8B5D26193A99D412C17FCF7A72EEDEA686B7DBF0EFE3E36E0730F525893B13F3CB81170A72A89B28DC153CDAA585F77FBDF7D989BEBA46F87789A2FA429EF2E907399AACD34BAB9B5D82E1B5C77E5CCB7E023C48150FB4761335C82B3D97611C5D00E799C838CB63CCA43A33669607054A49B103A89FE674981A5CA04FFD1C053DCC58F6FCA380603EF95AD385EFDAF199B4CD805F61ACA7768AB9DBB8D6225B70D8F495421C846B5E6207DE03D5AD2A263499C64445A12A5FF6C238BB2CC0E14C639A0871D4150A8E61FBCDFAF2C06FEE26E1283D28E847203BD9E192399B7154D7DEB031553C5A4917D5400C3F87FB5721A4FD0E8BCD8B010143CBBB4E60124CDD932014295C8187BDFA016E6FCAAD2274464B39F583035E5FADEEE398B0E4A001655194CAC70A82DF9850E60171376D8F5B0B57A9435E4D5142C4BA5584DF6A1FEFAB14C1CF32719BFC1680A950FA9765E88E9AFDF11FD9CF4BC88771E0E0F0E24E311E59309E95EA796EFE6BE1FD884FB3D6E95356E0158F5D8FCE6AE2BAFA10D87F02F471DE9698BFB21C4F8D44FB4A76BB3C9B471A912AEEC880E52C2488569963A055F2419A74576C9B9FC9FCF36CF8FD7405E7EBD60371B6D2E4FAC68D632078F76219F3D362F800696DC5454FA0C3A8CC658001E946AE32EB6860C61C865CE5CEB87AD7B388E0932A997FE6D2F395ED134800C8163419AB2CACBCE9D3D25616DAC94FA2E16F2BFF7A16F6DAD4D759C3449AD3E3E57F87D998942CF13DFE3AB7DF0BE4B2D87C3AD9508D4D95A437755198015E200B3C9FCB4DBAF23E2C6B70D09EAD2B5D3EF210D96C151922A4480A6ADAA692184DA0AA99C01993DAA170CAC94026DAA1250C7291FB304BFE4779E1123352E78B75DEEC54F84639CAE10ECC01B8A96919ABE55A47CA48656FB41CF36728418A59B907518E5B4D0CA6C807F106C6434904501B459BFED7992D0542C0418A0D222E004AE5C4FE361BEB05086CCA0EDEFAE0338A02EF4C89FA56EBCDC49B10397DD9600C79819D5D52FA7987CC1D8A8BE2B4DFD2A9A6878ADBADDE858EDD725C3C94470E7E5C71CBD1E8015CCD5C21FDC408A24875BAFF1A1E04E72F1F558D21A90C039EE72E1EF9F3B5A90BD06950311B3B71F17D01AF657FF91A4894B96C415CF475CB258E6C77B04D37ADCBA3635D761CA5ECCA2C9969EDD3D657C546EBC31BA08E52005FFE8E0D3782BB2AFC247C88D0C6CAB7F96A2C1C7EB6EE1E371051439DC38F49C87B06D9C8E77CF9BCFA4BD6EE580751039D773B79D3790FC69C8DE71776F5D35309B88ACCE26F6D65B34851686E9A0049980674C3EA07250882B2A1018B788121AE15E4C5B321B266FF8A082332C20F3AB13EC3B4E681BC97120016417764BA41496E9E3F58B1E1221670023B0BD37CB7C2A079718C88322EBA5E5D58E338CA37DE59CC926B5E1D2CD4620096BA2A3D74BA1A0D83E1C26B9F485D77E529F362C673318611C15E43FC1F0C5D1DBC06B93DD811592794F23ADCD4CA28381C972DA004B48ABEB5502EA364303E48CF017C930E5BA3F84E634426A940969A2DA3E89DB4E15AA658DA41D6E7068636F0F6BB30E3FAFFD209293BEB20F4223D0BAAFE16C1A2C72D7857E6896232597A096C49DF707BB85579EF85E1652CA1F2F70E9FD78826F8D865D63BB4182D4BEDB36EEFF63E5A87270A4E89D7314D652D06D89ED70C068487A7E5A4A0628F3EE65DACE808C5AFE2937E0120596D6D9744ED890226BCC5DB0285CFE2C78334F29004D0FD737C6EA0DB289FA0A2ADA09742DFAED81980A42837BC6A6E8A5ED3DF6AAF75472B5BE82EEC860FF3A4172DEAE070A9C756B0CC8D5D3BEED0C2CA80231B39ECEC7D918048F73459281434376F4133900560660A41C7AC2AC9B50E5FFE6C5396F55524C1CE52CD39DC0FA8C2F5230F7DC229B08624BF8E83097CDAA1B560B22DFFA40F89737C6F2129655714E8D84AC690A555EFC872ADA57D3B2290088661E949598EDC8EA2505CAE6C7AF9AD1249076886F2782BB60C5114BF817E6F740E577A61468B602C67CF6132FF020C7630B96DFAF8552323A04FC04778469864137E3E0A07DB055E3E0FC491FBB76203B09F2929524296BB92DD31B88C4CAD87A7C99AA30E553D9F78765455FC59D717939698815A870FCB89CC7B6850EFDD10F9AF028103A070F1DEA4698C4248260B297F8A9FA83CB7AA588232CD9594904F45DE632A5141430EC37AE4BABE7BE33809521991FA07CE30DE5EA17A53C4EEE249A24919CDC71C1B690EAFBD77A0CB1E9C4016443609627D0BB5F7AFFCB40B2C7856D42539AA800C43BA11DF47BB892938129BF8ED50CE142CB531148B39CB82993FCEF7C79A93B49B9500C4D853A8046D87736423A0DDBB98A2289C8A7AA1A42D329E55D18FCA66932A73BE69E06F0C4B22D757025A947C8CE00B0B703C444B66142EECAEE456434E44747EBE60656C0E7EBA38AD99890BA79E6DC0D95163FF4C3343984208B45858C5FA796B9DBC6EF451FA6DB6BC029CCFCCB1A5E7F91F02C27C7BA25D4366068BA0E377C9DDA52E571A4C97239786EA19D4F04A2E286BFBACC22632FFE583AC2478A4ACC0F7842196F0080B68976FEBE1829BCE07D15881AE1D92417E434C714799BE8923ADD3756DDC7E3A8863671928214F3AFBEC51A4027DBBFBB897A128B76A6D04CA86F5672C997DF777A3F0B43A9F0A85DD869FCD23E061D07867BEC8397704D358CC42F45C0625F6DFFB0D27034F99E0D97975033AFCFCDFDC4FFE9F2155C06D3EA015364F0EB4FDF1606AC17FE09B2954644A28547E9787B5E0BFE79B2DAFE0F86F214C82B842E5BA16AA265DD94DAB1045D1F959C11B9AF1DB276DE3A096C1AA290D086B5FB04AE75BA443D05C6670746BFA6CE71CBAC17F92780070A2D867817A76A4D85EE4FDB70AFA6D8294A4D8654F2105D4AAFF5935E15F4BD16C4572853466CD78EF43FD202D4FD04E607B83919D6068652B687E6FB4EEE8E580540EC63A1AD1F4F6816B3B8E9981B0A04E640037B0F240E383EB9932137F499BB8DB8ED6C2A06132CD30A9FF0DD2A5E5BB3CE09F1587B81D8FE019B5C441E6BD6CA7B67CC741C8B03092A0FC8473739413F3B330DA2B0AA1F82979978683AEFB67B599D8B14474A810EF00609C3C0F269448CDAE464C84F23E1F8E5A78F1D12F88310DFECE24C7731D9ED6DD78F43A9D1F6EB6FCB6331C1F474A4970262453160B193EF24FBEE94C1EE2CF82A3088F4FD5A83FE02088E6D315582F3D0A1EF1754000D30DBE0887C98BCCB1F78B763C11A8DB7 +Digest: 4249291528BC678F5A22378A671E23808A35137E2C84EC61D98BB59CA29F95514DCD7495D381F76FEA496DAFA507C3C86EEEBF0271F84941E983D6D73362F172 +Test: Verify +# +Message: 47C62538EA4AF06BFBEE57C133F0B35AC7A0A76628B7141B790E678D9EA61A4BD8335B5F7221D4F2424EEC67B312541A872A795A33D7365891D6874DC5EEE6CD1275A7D6D30BD590F2C7073FC55758C980EB03F918E8EBAD15F8F95A0F61883B2356A618E15E4F29605C1446A1687B73353BAC804DAE4F1762949C507AB46C375F13FEF4D28BDA53B94380652D9DCF20361429978F559D5EC3D3C51D73D97769E702BE1E207A8BF83A108BDCAEDCB5B8FDC3ABC01F809925AE84F8116DC6D8C7BAAA80F700BFEFDECBB66E34EC98FB1E3E6A76822E1BADE931729639CF35548FEA225810E3CAF7008625D940472D016A2DD072C30AE7E286BC5AF3043B16C97047983A37B9F23BA323D1AC29F1BABB30DE184F9AB4C84E3562364C057CC6D8CF14CC8EC905986168002B8EC41B4E565D255552E5BA1E74BCFCB6347C12501D71EFCDE2004C99CEADDC9DA2D8C88D569C082BCF0CDF24ABBE364E382F85A1A718E6A79E8616A5F97A50BE75F558979F3A95F609BC4905289FF47E7FCA9FE95D61CE10A668144A77EB24672AFC6D479E0F22EB0A1D81A1BF9F4A54D010464150BF9A842322B79063A518DA6612657FB86DF413891218512D98E634FD702BC529F69E53E8AD368F66017609CC93BE615508FB6184965BAB1718A52A950BC71505976E50F3A57EFD43F159BF752F7284482031DF7F39F2054C545BA2903306121789A6467D020E5734A84083836E31CBDD1E4F893068D690054BDED3294915416B38FFC85D7413FBA33B4EDDB4D3496A26FDF9C930A32CFCEE6153B3D1A1D19DEB341C5B6CE5E9F1D2A76502B7F0EA6CC190ECD460651DBECC3E6CF62F149ABDF44DC7B295604DEC77C4FE8A8AC76775E7B88F1CD2BE63EF6C8CF606EC61F69B90CBFA132D38F2FAE96D4DF2E16AF019B4595C1D100B75EAD2DECB81192A572CFEF5C55E67AF56B8CCC24361C20442440E6F633A5B6894D6E34164187A7360CBBE7ABB46950ABE7016D6BE8CC083EC0EFF07E7CD014C296BEA5228475FC57443919AC172A1B5E18B44BF896202166E7EBCFB09898B78D7E96BFEEA3D3D5CD6910DAB94F84533C5D3F73ADA6A1D79E4DA3AA1A7AA7D7D6ACBE6A4773097B3C8DF951537086FFFEF18BD1D40C808B8875D0CEF8060BE3ADBF3F22A8471658539DBA6A56694EF2715D7D16A86F731B6FB25DB003E504CB3A992F07E4228226285AD856FDC30F4D170761E573DA74950450B44656DB47E88CC83085D1BF7916FB2D6F1B42DC438FDAD16E6780138AC63E8571759199CC4BB1909DD990F785FCCF10447B8395E80816D3C3BF59AB066F96CADC2E23788993A26A82EC28AAC771AB53432CD9BDC73F2BBB58BA87115FFD4A5C74C11E4F4A236EE7494FEEFDA9886E15521CD230FF43B29B24C83D6F189B968C21AA62894C12EA9D74BEC5378987E5555ABF676BD2293C44A580D5538D12D41E8E2E458D0599C60851E224DA433A0A933B308316B3FFD827C362272ADB969470554166B317DCD0C7C638E1C0DE107C4C1B1899B34EE06139295BCE99A5E70CFDDD98F4E93A93A6F10714C5EDC8707C07D497FE2F2DCEE7FBA05CA2FA5EAA5622A84CBE199B4CDCFCE0FB9D96980DEA249B4685823EFC782D6D25656A5DC7A3C41642A3362C9223C29A3F327AD6951E37DD8EDA8A9958E8629FF72FD0D8BBBBC33E59E607D3E743A85839FD094ED28C96FDFBB52134E8D7024BBDA2B720C7363BE659F35A1F9DA2FF468E50EFB302CB12307E5FF454572E7099AAD37CAD409A5C40EE15EEF10CAE17FBCCBA6C83BF81E0F2A5E175CF0044F9D2EDDB5B758DBC67160E670A00B5577DAB60B05411EB22658FF72552EF6340107F988998DF14A89E325456FBD8F79B1E92F8307400FC255D73FB6AA77D870646A1DFB0A6EA5DE533769429E8AA911DC193968940AD723C2DC8805B8D78550AAC1144C2B8AD99B2EBF636EDCCAD79A9B141E84D2419141C1F9EF7361FF77CA0A369A882D4FB8BE16A33F890F454E6C176D158D2A349B21430DD175B3208132703FACDFB6B1E11A72A0EFCA5F231A27DCC0093819D34B35025EA8D8677600B9B64FE4439C462C78DFFBE04D2C13A5FE5EBE6B910760378D881FBD26917079814A1615448E7B171FDA2A4B12DEFD51AEA43B9BD6104FD44813EE43886C9DFB647E204F607A7A533C8142DE3441F679ACB925B8BA7D21CC62ABC86925FE10AF84459345B90B02BB05F9C0F365BEA07E19061E0FE4F9F1F99FAB2978DF724519ADE5E156C3B9007F95FB418C315DEF295A18C6C792E4A53C9CAF8942DBB014E04554F6FE2949A53742A7FF2AC247C18A490C5BEE6C65EC09022C14849356CC998E54682D0DA7A5AB0A30BD0C3D8DFF7C47095FCDEAC462A26431B3600CC6288BA86542D15F3C7D5B2BD1B9399F4E6ECA7F36CBB5670091ADFFBB5948EB7C43791EE24336F4CF0F49E1E1551E546B97225AE46D82BA7FA7F7A7F352482B68B0E8F038AD6865EA19BDC684105DFD0ED52237846CF4DA81DED0B67F51C7FF070F4F1FC285A507D2A0547FA01FC6C91DF732AC9F3A65E7CB140E06D0AB83A389DD29CE2A228321D037C1588B761625068B3EC277635BF23DE2A5A6DD03F92C124F94FE0855099363C8EB36F7307C61470BF88841535E746DA1FD2F5E10BC1CEFFE1DCC77D23DA0829EE1657CC3ECA8B6CE881867B984B3CBFB285A5A6C0A99E300B2D45F9A4A0EC189A892B15B4503567708DEA82EDEB17ACC18A725621CD8BE16515F562734DBE80AE4A64B770D7972BBA12DA2615C4CCA73823D87393DF2E473425261FC1105D4B441B8BD4C1DB645EC0735E67963777D5D0B4952BB1A2D7655D581D388C14D7C9C259F7C1A22278EC07EEC911455F86C343504C0351F0229DBA880A0846D8D2928F41BBECFD4E604BA6D9C3EE0B4BE59379694D28276B991F6DD2828DADC1255A9796361BB0DA4128BFBC14EBBD4DCAB8BF9FB4E11E87EA8DA0F1C24E61D756F3974E6DBE411AA44945F3DA2DF494FB37A9A3D22E7111AE4032284D525D2E99D26679DF50DC91059BBC586A9470F0F5AE5FE3DA233C7B0F8A21AD2F566C856AE0346F75B023886FC8FD14ED92C27CD49319044B09093AEEA8948B2A69B456700FA31F9E85D901DCBDE5FA9C1C80E3711F411A26452FD0758DDAA7915AFB77957596D118E2B1326904AFCD666869C3B1BA6C4BE570F0BB44C23F8F37B038DF2B2C629C37D5A79386BE0AB2503F2FBFE54E84E986353FA0B89C53E37F4831586DB3DCF041B0DE1B292935C8A618E7F9B5C5048D044EF2ECEB2744E688663A8D9EA99B8D33ED5ED098A784BCA77E8A130BC5806C7C6499CFEEB29EAA996422490EC3727FE258AD73516941F581CD3832832A759F72793D8D6490E42005CB659DF594A4D0F2D0D02F23D3BEAB1A6DCE007D470FBC0B378AF12D50C2A50B01BE862C4A4AD1CAAD981680A3809A2C4FD7872E79D2BC14A9438D21B30E08D60436EAAB65A89FB372DB6B324D73D0D570695D244980ACF2E9B932BAF36629CA7D6DD04DDEA718093395B02A218E8852F3A76033817DD5E4382EFF1AF0CB116A71990FF69B66F580CC25FAFF229CF22A74EE862052BC07F1EDB4EB16674445F8DC044E02F4553B56DDFBD97668A7321014D21FF7F94E242B33C111119664A1E8B82E9D085409DC7431BEA2A1F4C706EC30637779A7320D6F3720AC1CF491C61114295DE178687FB84FB9CAB6893B8B9AA9D6D02C1D77E2EE03462D0037633D37EAE41EAAAC00D1E9D88437FE34D10770ECFD94F8C0571302472C12043833EE13AF1CB8A1F1EB5FC43629BA924AAF23B29333D798430601E842D9EF01BC55B1EE3B6182EBF7D08214030933AA8E20FB7B79300840BE0CE9E07076219C8476D3AE3FE08A11004B972AA72706F72AF723E41C7BFD6D608CD7FC4381ABAC588E47F1F070C4075925E91D649E951DB61E6C303B16E5D460AAD86BC3FCF3A65EDB20463F2A4AA7BD01864EEE301EE7D1A6FFEB284E8AD9F154A06D1E2F68AB433321EBD256EA41CEFB3F6082F44AC95AFD291EA19DE34AB3717299AB3AB6D4239AA16DBBF8874CA1A53C00CD751F0D687D56AB9F135563667E1B43D0FA42ABEDCB6C227B489C786E12BBEAB34953825C35FD91653C4BFF3C69992EBE84BE32E0B5ADF5C185437D08E2A2F2F4C55D97F765DE81DF05BE13724E5AEB04CD5E90BB9A4B1B9FC13B5A48D39C60AE258F54722E2BBDFBDD86CDB802F3E96ABE66448BFD1DD4808D2 +Digest: F689358DCA4B05EA251142D9106B27FE9AB92143E547AB664F0058986331AEDE037595930E131E6BA0827B0812A31AF3BE2EC4C7E40F5659D10B495728286764 +Test: Verify +# +Message: 42AF7C9B8C33373B41B473A6E40EB0F6F501DF71AF086B5532CC5A3176F7A673F5C656B05C21E0F83552457DCFD804A2F04C9513B99768543B922A4D36FE68079A16EDB4B7A237D8EA8D9BABA99D21B99F51AC60F703170B232CC6378C50721269F30507C20F9CF35ACC0ADD28CECF87ED8F540864A7BDA34F32678F2ABC4D2B7594F3790D8068795293EF200DEAE38481A294CB1BA0F11DDD9EF9108CA562862B83EC2085A73EEC24B0E075E48D1CB9D3EE608ECC7F5F5E2E5B9651CA8B6E815E9FF2EBD26991688C2B87D2A65C647AE3CFB8673695C61A04783A2AA5CA2327883ED0A11B33F0BAF4985CE9E8B6D6EF39396A5EE4B3A654F48C816B90C5AD0A3EBB182DBDFCB71BDF65E1A48B4003FAB9FEC2BB7352A63395ED84B9E65831964A30653F493628076809F1552A39C6891FE56A2B66DF0DB49866D0283C451BACE577010D36E47298D78D9C5608177A85BA14F9E6C26342226DEF408147125012DB18E0CB0BCD95AF83CA045C3F78B15F10251D40B2E748BF473963E6C61523DABB69E86129990B308CEE8140D73414D549D9F4FA5C8EA72623D1F2AAB1254A99C1AC5A69E1826D1687F42ED230F44D8C5B8916FA3A97A089EE36B74D5AF814901DD42A5FCDFBE5EB21C314EF1F1C0B0C7BA5CB2E271D56BB2AF9C1E71FD6A9C14F6B4AD82A136BA744A104931DE87D71438B29CF5E98705447F157021DC321BEAB64A7470FC5CDADE99BAC686A81AAF34E77F40284D6EBC498C8DA86256650F8401A8775F08AEA8C5D683D5C561A00CCAC9B6128D521C7B7FD8A7D14311546F52FE7C1666D4F52546D499CD3BAC913DB70D3A2A966ED82E068E92345848BEBD5CE78C74B280C73E468E52FB28D192DBED6BFFEE16F3706B40974D7E41EB4B07295A7924A1CCB2E4FCC7A9FA076A055F96AE6FB6E351166716EE7BC65586844EAC7ABCB5F6C221984DC4B536FAB18E3E60EFF0674F15EE83CA92F720A3853C66B1F2C66F4A2F8E2FDD07877410A2A17B2699479B93B774E8678E18EAAF5BDF53236732663AE668FE7AC3548C3D98BE036D47E531AC8225F43C26067F4AA13EEEE2EEE3F6D6D7A837F2C11A376092FA3812C07AE2B6A851CA03EF994D1EC8B4ABD739D235DB8A1893F5A5481982D05D9515A9DF1285E21CEB889CCF5E1A1194772B9A30BA4A732FB4C11E315FC1C27FF84491F69BB6FBC6D3B1978F556862C3633CEAF759D8E6AFB3A9780B8957AEA412AFBAE0C16AE2416C72852B702591CB5B16C2028F3EE9918F473FCD59E11C718590C351A6B796A5AECB0F00389E4FDC70E0D2D0ECBC59B3D2AA3462A4027B8DED51B98D4FEC02E83087E04C54F5587DEECCFF13EC5CAAF09E25DC1C3FBE253FEED95513035825AA50BAB36AB5641C335EF4502AF0B0D8CD52D849E50E0F6FAF950779D29773749E4CF1465E4D1CBCD1107A21A24A159D3468A44029609017C3434C0573D7602F651BD77C048D94EA6D2FB9B9AFEA0E0225A92267D9A517A590AE959F382E38BDC048A3B0F2AD5134011B0EA41F5DD99FDE9F2B8FC848FF2D5D8C223EBF34E8F96FF4AE7EB1DF60CEEF6C5E0DD76C049C3909F5F5F4BEF0C0017003582B7C745A893DAA53EE31976550D5A008D5E9C63C82461B1D7E730DCEFE396EB591A295368C6AFE013B75189260E85B936A8F1EBF09615E2CA5510F93126CBA491F05078D30F9D02CC56342CE9FC03D59D4FE687F885EFBB3F5E603705E0D4004A0C6BF0D4B824C3A1D5A1499263F8ADE0FBBE3B68B6B64FC5DF723B1C0ED90AF64C308373E3F49E6A73F4C4814B150133A66056FF77831B27C5093C42EED84D564616B91026A9635C15AC9B17379C1F8DE33FB23A991EB00C4B7ADDC6FC0B02DAA610481CC9A546DEDBB87F817934AC19CAC6BA6582E6C64175E1081EBC26D535A8BC80C5FE5A1DD78B59ADA26E14C54E0637E79D299D9A2C24F72E73709FBAD82521A0F1CCC0E8677709DCC500F8529ADD80D84D5C491004C581B8CB31E3FBC111B27264AF7C094A2CFD1132AA401AF88F1659D01363ABC26563540FBF1F3B00E85D87C156A831CD1823593886DDBBA18894933F5FD28D786BAB7A1D30C7CCDE17B39F8E8C94BEA38EC85F12942EEEE702F3A92C4667C088606A7B425DDBF4E9E9D841A18F39149E293C2B90C8E532020391621ADE86F058E87F9803F49EA793D6997D53C0DB7292ED0AE7DF2734119F4874BB1847E2D3B47160426FBB0F82118702C05A98F330B5938FA54E2DCB0341DF555A69B50045F1CE49C0A99D1ABCC082945117C1926B258AB18267A562CE8FF1493C917005B527E41909D97986327B68AC5B42D809934401A0C8D7A9C125AF90C5652D053AB74F0DCEF9C46D2835B05CFC05E20BB66E60948DC518FF4481C8541B058447EBC49BEB25A4762A1D92BB9900B6CB0E75A120C8DEC72ABABE74DE3B803C8A8D44E781265E7DEA15119B81686977BB64FCE49E26F90D6C9E532CA43CB41CDA3AE815295CFCC0322036A17B3BE1055200C5CE321A26DF24021253A29C2FC628CA0360D79C30FEF07014569FAF9024DFC95CC2E02AA0EB65AD6E4DD738BEB141BB42ED5A350038C114DCD8786EC52AA629073586AE4BFFDFE4919DFEA1577D2DD77792499BF196A97E53D3CF022E07E59CECE24C75936914E88D8305DCC1A4E188D0B9808C21B90D6AF5D8A0D05462B0A85A7E29336CDD7DB47E1436E1CD0D77DDFF977B1015A7D43D5C8E74896055CE6C7127127677C7D2392F633B9BEE3E92A93AF900F8DC1051CF937F6817D7ED011CD3838B2EC32BC0FA73FECB2CFCCE8FD778550F23B163A9CE76E2F529DAE89E9B9A9FC7A2198003C2E2D151CB91719EF8048437621ECAEEA55E44D10AFD1A586DA8F1032883304E742F8C6D3419AEED459200E9E7D70A0421C3CC67912F6303B0E06EBF28132B06E9E67EB26B03C0B7B4FB645B50094620A8FF2DDDDA546EB42F11CCC10F86B0074768EBF854BEFA26C88F11FC75B68D480E623E96593997494752AAD7C18AE8A3B02CC4BB17CA28C0806972F536D18B56D5A40F0C819D20919D924B18745A35943A9F6307A22B340307FDAC33431F11C52FA8807319DBDB78DE8DF6F0A3C956162B16EA6531FB472897A2403DE401F1E234E613F2C31275A37AAFB716CE295132B83D7C7CCA791C5E1A2E340908700B0A53C41087E1ED04D5AE26A5BD9A1D09BCB9E6381612AB9F3998551F02DFBB34AA0EDCD778B47041626F901083EE8040F9DDCA214B4A5C8126DEF2FDC2F2F7580488CEED5DD920040ABA0C5BD50CE53A38CB848D0D42FC065954E60B2D997383B06E0F51C08DF2E4B292332D5227163E9BD0669C96317C18AFC4AEF9FBBCCD85DBE502A10F2DC45963105876ADA7B80EECC877173925EC4C6560F3871E01F029591D9612BCA4E9F9789DD49C7AEFBC7DC7B0C3DF73F5D6B5C0A68C2DFE5BF899BC67BBA89BEEC11E8C820E556301B079F0CFDCB1FE9563BD0F9F5D13F11970A6C143DB5E685982008F54816756160FC2572B4431128649CF4B7F06F04AA04FEFFA660FAC40A7878EE51572C08FEC6B4693F6372F7C2F36A91857E34C5D0A780EAB2C3266F017CBA2EDAAA31303CA3FD80093F098D03373691AB73CD964779EFB6674176F642A558F877C0823B6909204C17974D5267DF23C7CD6967B80E5FC48CEB93CD79276FAA017EBC6DF3A6BC3A2C8AB688C3495010F12A038770AE468CE140B32515B3F865FA9A8713A21A270BC73674589FCE47316D1FB560ADBB6E35AD9884523D5E5AF1DF5C0F327ECA9788F96131F79ED3342B59A2F34CA93C06B59E7F8C16C3DE00DCE897C4373979FED117AE98D60B882DE1B03B59DA62F6A74A03E2A902AE2655C434272E644EA9A06D69A516D94B32702F447313C77379E60DB092758D25FDDA5D7357B6BDA5AB821A7A2336F615AD4843190E62AAADCE66F07F88BA5690D68CCAE37A59632D8D1DEA0594E862C90045813F5D555E36FDD97497088D929B36E729C44A4F642B046BB94DAE54280BCAC2B77669593EBC52824C263000ADE0E6470091C085CA71906602DAF40B9915A6576B6188B4154E03D8FC706783A3CF8B51C26C11D19ED1537A83C815C9594CAA83ECBF236A888BDBED7662706B72D6C15CD6BD2FB53B20F56640D31AA910309FCEF836BDADEBAB75EA3BFA83534AB61830C66152B2061BD028A5316B59026974BA701B58FF6D2FB5929CA6BEB8DB92F58B6E3360A69B897C6ED8C07B23DA9B10759C710DEA5CB8174B8B124CCABE694336A42B4C65BB8871FDA0DDAC437A187D9207A0533F4FEFA46032022A09B9A49627AF644 +Digest: B0591329C5036BB8017D90086011A5B318983CF9A4E7147D0334AC3B85841C7376D6C1639A14C0C4BCC4F3E2B8E5F6EE298445186E3B2E56A659CAD147628ED9 +Test: Verify +# +Message: 5A7A4E07BE0D7A29AFFF42BB5C202FD99217BD1563E718B0933D057CEA02C82A2F3F89CE9001204751990E28B22CD5201E71E20F0046B19B3A0B570FC4F8835B85B73D35DC69CAC6585D134C3EA53CBB406EFFAA9A55112A785545092F86052389C3DB43890C0E4211001059F71A721708C5122AC8CB021AB12E75F80F30406417C375F8A1B5538258F4C82E0F75B3E4E3F548431F7D60DC741EE7056AB1936BE43676F9D56B91A2587B7E985AE2B468E1F5D3766C66B6070A3235DD28606BCC328196BA258B4798095FAD461905085E948C4A69DA1FB08C620C63A7B66C5FCCD26CC6BA349E3D1A81AD7F98EE2E8F52DC09842AF8DD8D330FE6E42B8B602816C31FB3CC919BB965BDDC8F77D50504CE8E6B866876C49DA71BE7D6D52338F441CCF4D2099D995650B8F95A5127910C71F67A0AD3EC1FC4F9147A8788D1091995F035E353515F798ECD4228BD329088C5043B88BD64FBC2C5FE3A82BC6E0A9E043A321B9880E4DE9A24C5709F1827C9F6851AB79EFC4EA99632CD1E8B6766ABB388718316717BD596AE4A9B98E37699241228DDB2B105115B02E22D829D60AED32A5E49840AA3AFDFCFF93A42DCE56124691415E036D12D4F4D9919DF9F289CCCB007CE59DB082D28AD7175CAEB87515C1B7424735A7A255D731FD94B635495EACC1F892A6472A205332AAA72C0535B185D43C6B89B47BCD144E751A7EE397A170F715B5D0D5A9C2C63FEA354707D91051485E93DAB625196EA912CF1852FEAD74803EDB96D1CF493ADE089986399127FFB96D3FA4AA5A8C19EDE9C79CD232636769A0579D8B0179533DC2C1A8E8E1C3CE94A164856E6A04CD7AD207638B71AF38ED51892939E362DD148E4BF23ADC487CF917BE03CF3C16A432E932D54B83A125F2C29EA57769987A37C45E9C2F99395D71854FC647ADD0137B98D953C9714DC5AD592139F071C30519CA2F88A860C57FBE50E24E5523A81EAF4D100516C262C7A7E96BD9E13BB269F7E3EFB9CD86FFAF48CC51C62ED0500CB894AAF47B7DD4E43C6F67F809EE21F0068A5D826AA590FBF172B5AE1CCAAAE65DB0250626DACBD851EC6911A8C5829EBE0B16AA82D281136E5E61AB54743A14EF0CF329D43C88AA77260F90EDF04A2312A6F44C38C1A19BF737327B93135E7742DEA154E5DB25910B5220284610453412EDAEFAC238CB7E267B32C217557AF99AEF67FDA3CA6314AFA7978647C24AE0FEE06DA2F75A9F872B442C1641F65E9D93D2ADC6F7FB6F0F96EF1778CAB54F7CC591D38376F78C960607A5FC7712AD135D7152F2120ABE64C2ABE124A1C8ACB5D946AFDE4BAC15EBD6F4624F27DA0A64554F7F362CD87CCA346ACAF656D2FA9CAE4B7E7704A6FAC4F8A8D13E460DD612C8D20FD6305188C9172A176CDAED5BCAF60A74D16068AB2B69B429EAC734C5C5E626C298381118085D0ADDBFBE39A619BCFDB9340576E9516E0D46FA030DDCE241A3FD0A13B33C1083443702661C9CD3F5E6964C010DE1485C730A729CEA04BDA933E2982F155AFFA884C3B5D25B36E169D1E41C03B1BC69115335082F896802F2B92C2410E725D9824B80C72F02C0465E08AD36F7D919B8631E63E91B53865D9D7E58668AFDA60BBCCDD3DA0849F531C7A262F2FF9DA66AD58D18C50C413841B5C0BE7D608FE4C9A5D20F19C2F9BB4CE8D1715D3C06CDE548E5EA3E8DD413CD3304C5547A73B5927B7AE46F75EECC09064BD7D23C05F972AD8FD3AFF2340BF8E6EF94B38E323DF148F1EB5E531B02A51441F38D15F0BD5E03EC9ECEDCD76731F3311CF485102C42A06B1CB2D1BFB3C262035A40E4CA8B0F79A82D2326DABC0810DBFF244B5738054FB6DCA06FD2714C218A83CF6602C2FF00C8381BE2BF78A2E549D5C70363B5442F4F298B3900B57FB2DAC2D8E07E5DF921034A8783BA827404791E978226EE055C5D0BB9569B3BDF47CCBD12548B9D815C82BF86CF2E4CB7B64EEFD99EB250A8CD74456369C7685D385EEDDDE9370F2AB9F63AAA70472E0FFB0DF41D86AE22050BB1042A9812FFCD95DDAE920BA06D00326AB776765A44F88445E418A78C6FE523096F0FD92D39D0006885873A9B089A48DEFBD0782F5CB3D4D0D6797E39AE18AD8FE16FC85AD04C14F929D524BEFAE9CF59AED0F300EB22A97B6FEAA9263602A6D67BBEC09C59DA7710099654CAE08E0A752FAF19995666BE8792DA517BEAEE5386798FF1B53D53558E49FBBBDF0A58419C448BD32F7DB9E76320DE1B18BEB5FB94A08C8BED40507FD7C3BF5CADF2271E9F218D79BD38D4769209DE9CB3F5D0BF5AA8B3FB5E8E3CB1E90517DB9F1920C61B276EE214B19374D2A374A087D116C4D689738799E6E60E8DCB72AC09198E90316B0D67BF64B3E80CD700E59E24BC3C15C0F372DF604DD32647255F5060303B04C507AC62073EE58F50AE6FF9F8E24EA4BB7606C0A9A8A4F04AF4030B0E61F9175AB35F9DCD0020FF22743C217A7FBD890EF4DEDDFBBAE3897F9B7907FCF06DE803544AD7BB9C3A083ECDE9F6D1DF71EB05DAEE69B6CCF142D16ACE4BE2C5D12572E4F7747AEAA3E95393CCA085827BE189ADE714F3CCEE5E3553E21818252BA9B0E9D74A557A6BA7BB02CE79C591D4FC486D0D259F4E3816DF00F22BDF88C011EC72B3D54038247A9D25C9C03414AEFE8EBBD217E71A8C97C0B4F1D6E8D701298210AF02F9EAD913CF03BDFABEBF3CDD5133A894915CC5A595B7496C58B04D00F14360A78BB6683152789ECA59A41A6DD060E0BA986679E998773A42883715142F9F9D65198C300392E52EE3FF11BC326EDDCF098F4F479B1529ADA58C346CB142135EC0B5AA5C66DC7AA3216A7884DAC8CD0CB1A1DE5FBD5AE5DFA41ABB0C08B3AEEB088F1358F6B26F977E0722E51925DB092D2AFB4DBD5F35C8EB85AA5AF8C96883856E8576537B938BF643E4FE99D44F2B311CCF4956CF45DB9E70A36C285FC4FF34653730058E3D737C7D3769E3175CC2DC62861F6FD65F2653B2F345CEF45E5BC00CF8BDEEA57217B7FB9B9B5ACE9C317A05B9F4B06D8789CE37AA08C20BFEB2EA4059DC2AE970E89604238C070E7AFF48DD4EC37A1CEEB3D7EE8EF5EF84073F3B85E16EACD25886B9D51D2D23D4DF7C58A3AFACF6214E07E7E93731988EEBC0DAC3987DDD0FE4C10EAFC2981424B77A507F39EDBA586004FD46AB29984370A3E87F6CA7962D68EB1797DCAF37846181B4D65960362519E5DCE1DFB6AFB0F4D259C5CB4C6DEC0BE97BDBA4DD6DEE2DFC8C752683852F5258F02FD1F22DDF37329B8843C1706E8806EE1BA24EF0AF9941E3C1F96D331CADB3D4F8C0930056D530318DA63010F11FFA781D952D5200AA2027927D25F5F9D822214F1887A7E68FF56AC033794F70E085E08F029F7C82EFEB35091E9642C1A13A0057F2C47EFE5BD414D0A6FFF8D1A1C61B15D0557F303561B9165E472320B32A0B4EBE6BE9CB76B2EFA592A7F4A7D7BF0194599A1FC105EB15202A8DBF46B30B219B42E651760D48D6B7A133A505F18384A4063285248DA12767D185599B51BC53F69C8F1710115239E7EED4AF2FAC4E261DBBBD1C4504824B0C35C2C316D01A588D35A3B2332A6CB11F9E1A0A81C6D11253D5E09936AB552620C3D1304BE9D7724E951F7236D252508142B7B1FE96FC1D72E637A8353E8690C099A97EE2CCB1875F80CD8CECC39B0B684C8C36C3905C6BF9CC713B0A0B51698E2BFA721F3CA7D875904FA1C3C4C062492141CA20399F712FF984E3F3C1383EBA20E9953777BF61086C95C53D0B3D4F84918B02C97FB6BF5FD36CBA03386636D447720C6A63F48E04F5286606D3D3206726873D3A446C1EAF038B273412532C166776D1501ACAEA004F63AC58B40A6804CF244213AD6A70D43C1B1759B034F0BDCEA2A3FEF05978DA2CE155515A16CC3E74EB8DA8F8693CBEDF2145EA489362F55BF52E81E10213B572635C93FDDED1F74789B5C6F0BB54CE12C3ADFEB0446D6CC197A095B16F8D0FB224DFD3450B52D8E6D75CAC7F94D015968DD252C6910E7048E4CE27D5036649BC2B5636BD1CD396A6E3E1D2F01EF47676C66BFD43CA7BE12B6D9A0B82AFCCCDDA5AF880537F57FBDDB1F8AACE7316B1A63B1C798D8E397565A2104398F9927E7BAEA349DC5576673F97643E9CF8AAAFA27AF711F62C4CF282A48A77481B9D5A6B203584B14028030CDB9BEFAD909084DBF6DDFDC03DF7A23527C6B8BDB6B7669C3A30BC610645E8D9FFAED9F0891BD41DA63D2CD03E4CE534141FF0CF351A00BF614FE502ABF65A49850BA648CD0570CD361CD1C31CBA60804919F815B27C4CB67591F9CC81C40C28BCBBCC4BE73826A1F0DA6A4D2BB883226EBBEB6E4CC9190DF990C858F9D1A015DCB252963 +Digest: 2248B3EEE7FEDD9F23E285556ACC28B8628C8E100A13A6D0D22F315965BE4008B3981F960DC27647B7674B74373454EEC7E525798C449235ADD1C77825946A37 +Test: Verify +# +Message: 2534E68031EA72FF4D5BF64CA8451287F22A3E20A6EF77A06F895ABDB9790B9D331F416CBC540F3779405D975AE9DA15C85DB429ACB92CA856B34464491E8980B34C0BC4DEB34FFB464326D06343D6CA043901FA4401FBCDACC1C07FE227A30486C09758B7894993AA674BC17350167BECD22D011CFF960B73260ADFDF1929A26690D22ED235130FC1D04C00E02BFA10514D1636786D67E483B13AB2C1009AA5B72461D30AC2575E5EBD327667BF7A2A8DA32AB0C4002AFA29BABF7D0796AA284873B5B49B85D1B4342E7D28643FA1C340D2A8ED6EF1E731FA72EDC5D6460B1B0B5D9DA07E31A94E7D421F76739EB010C980C2A2A6D3870269177B909F771BE45A46507F30830BFC8BC6ED92C0B6B68E6343B97A325BFD63A95A43AA2E08D13E191970D271A049C8BA73495909FACB92DFA5454DB6E85B8EB6EAA306B4D58E8567DCD04194C7A5E8402081B5DD2B794107D355A9FF6B32FDA7F7068C2631E4AD401B86107F8A67B81536743EC17A32E1E6524B59607730D14975ACD2D353D4071C92BAC1CDC8F27CB4DFEF95244A8D969CAA5AEB2C7B3A76B482A46455BE44B5D226B9276BF8000E038095A476A354B53C0CADF24332CBD142927E494D5FACCAA30E19DC72C125A6CDA1ADD1BBFF4912F5DC27116E1F42C7F0D273B18E08E175DC2BAAAC3E96E6C89AE2401134587B2A3313C4DBE9742F76A7A13259845B1B76E26BC353DE26E3E327015836A6B2B8436A227098DDA0F6F5A41246F589EE71E6DA1CF6F05E4ECBAC6ADAC9D4DDC1A16FADD12AF28B9E638E634EE494DEA798064849BC626F934BA36D027CE7ADDAF30472E9A665A6155BC4EB45B78ADE6C2CC0BCBF2CE1001AC2C587FFB3A857012D51A5A721C56C3359ACFFE82A073D89CA93306CF0F16E45C5CAF6E6CEF0D4416D3C9BB0EC7B5B979F4CB76A9AA420AEF91B5BB8785D9285FD35FD8546AFD5D61E879B48F25E08AF12A8C0D89A6D03449639DD1CCEEED59AAC8EDF0F4F5AB13A9E05231FD4D3527D234C6B1AABA644DEE8D421061212A63A28B4B047E28C622BF38104BD79BF9AD3F515D879C3BBF273006CCCAC8BD0C2B4DF188AB68FC1A197BA4131C67AD8E2E2A5B90B8CE3CF8FEB305C22107CD5B8211717DE324174D05305B9554D5CEBE12816D18686408D12A60C3CFE3AB6C9FEFE3A194D6D6F595827D85665F62B6D3FC168817EC485CB5EB8E3D8B642EA8AA25E82F7790C0CFE2DF411BBECA3A42375A641FECFD3812FF76613EC0D2FDC8598FD50AE4B8B9CA9CE21B86AA86754D85E6BF42D86F7C009001D4FC8B7BD4A8043ED3F3B59CE04AF6DB4E687612D986A8A3CA844E113F8084B18C0CCB8730D541D42213B0C730614298B2FA0BD38242CD829F708CF15F901465CABFD6CA2ED1EB23FB140294469AB24E3875B65D0C88730C3BD1A94569AB6DA21360AF96733A4F39B7F3C7A3C513CF39ED82F5F4AA804ABA267D942CF43F3F808FDE3907A17670C94968CB62910339DCB3F5FAAC7A879CAE76DA19094EEDEC9E8FC44F090199147335DA0546ECDB5E3E036285A3B35656CD6FF6F3083717F41D57833ABD3747A47387A11D81F1004CAE171E936D4B2F8D6E40E13AA3EBCE8D2CE6DBB13C1469E67A0FC804C9A296E7D5BF330A93638DD0ECCFC4D9044F20EC01D7FDD3B80D684E6742023EFB9603AE8F971646E6C5A78382D6CD98B6DF987B9228ECFB7D9630CAFB93176EE7CC6DA462815685A840ECC381EE3AB039DC357369230BFBECADF7A49595EE8AD3458FE9CB07577ACC1B21104F4F75DD2504AC018FFC1010CAA03FFD5D82F1AAD1BF95A9B44812D0838669F20245C1FEDF8D1D5112104C6761D0C6524C9B54CC309E20051A766F56D91DD24BBF0681DD882326EB5AC15439C3B7D26C2C5B746745DD72C25380B62D2EAC373391C43252FE9D3913384D1FE2558357DA43DC34A7744D1A18FD2704C6C7B49A94A823D586F6FAE9BB5A4FC07C19C0A4B532CE8A54A7E3D6F35EFA49F27E6C7F439AACDAFD7742F2910376B8844DF4DE0EA07F30A6FB963E1A0B353AB8B6F668F8C51873BC26BFA6A690E7C092AB71B6F0DA6E433BD6BF0A0D07A572FF382F5B5BC80CB73C56178B47A1B0C6D9BF32BE3F5AE74609733EE73F097A9E5CD623EFDC361EB2F9BD20834B3643556CDC9361AF32FCDFC6C0EB2DB6B0294FA90479BE6727B355A4F8A3B331608FE64AD60FC031320F980DA674AB10FB08977C664F8979D58422409615B23DC0142336F50E814A5F6294707DDA0E3168A0E4B2E9CB96D66972F068A509B70FF39DB644D3654EA703D5FEDD9E12FFB069612A32461F8A68DF3DC4E05CFADF5EF226EFCA7A205B23FD66B80BFBE242BB91D08380CE55B819E333F15BD6584AF9FEED15ABF10AA2F01273568DCBA6BF414A12FB2355AEE74C4271D311C8A708F2054123376FB035702F8656ACF688DBB53FC2E638A7B80590283B44BA7D46DB0B5AB58DDFFE938100016FEC7D4EEEB714DF33149A58421628C6BE2C919DBAFF923C055959A0E6EE9DE4C74C390152222F626F06415A6AFFBF693DD2117FB06ACB753743FB31444AA42DF2C9A86C96577D90AC85E2CAF258DADC71734515864CD40E1F68C2BDBBF5FFE128FBB06369F1B5D87B1F9942917B7D5DE77C299F570A232C92AA1F6EAE0CC5F1F1CFFA049609C34C1F829943A3CB862DF7C8503D7A3C42706113C860B1191EDBB7B629E662A286B62F15BA4E89300657B933C64E4BB8C247E6AB6D87DC70C997EC123DA9167D9B5A41B7A318E39BA84AB5590D537DDE23E803B59C008F1A704A39CCB968F1A63E9AFC6C576A1B464FDC08E8318B106CC03789D5617E614035A18D4AEE664428A4FECB29790D53E1BA71D9EF3E851E08E15FA73B1457554DC10B5D24CE1DABBDF417AD138511DD1B1272491D29418127DF3E9F5E0CB6EE87A6EBFD6AA9AFAED85099FA84190DEF83A5222E88EE0753E5CEE86EDF8F2A488B8E9E41C89B730E959DBD3FA05F853DFBC14561E144A66A9CFD30A708160724B3DF8362FF4EE0A137A0C58C5EBF890353E446B46BFBFB4DFCE20F9B0400178DBCDB1E0319944F82B2D49100A5472AD09B19E3E97986F6564B47032BA678E00663C2C49D49135B3014C943CEA7EED9DB07500F903502BD250B0C039F3E29375EFB44F1DA3E9F8BE32635878BB27E3E2FF0DAE1A20F60D980FFF5F3A19C95EF4FF4F60627DEAA651E3074BCC0176570DE824DDFA5A2A6557522C50B42158F61EC830E5F60F4A6F25CC8B4F9B99D46D2E82805CE7F1DCE5B2FEE40AC14C43C6421C999F79043878821117FC383080B7AFFCE2D36F6DCA2E85EA8244C5EBB41C0BD6B41D615DF60C2AA417C7072D5FF98904787FE08EA754CE60F4FB8021E0C39C765227C18080A6670D82E257E11BAA65B9DF69CBEA733C98AB1AC54488038E087D9EA511F26AAD01A0FB5D3CCE46EE77B9D2B340F50D0F415B0EE0C8F77B5D03374D130BAFDB50D856D304D508E5D9558AE62E150F0A980EAF89759A300ACD5BA6A4FAA8139862401785947FA386093F1B9F8635333896673ADE617D2B53BC532D21995DE0BF17D19072106FEFEE87EDD552F9AD5C1F7B904B03D3D4E7C02A61B11388AD763C5BD3F9770B11977F9F01F7004CCB6A33BD71971A523C599BA7CC151A1B2BC8F142DF7B6DD3F51CE268C0A999E6A4CDA0FD6CCD667ECE9DE54659A14D3D5CBAD08E7A2A3324D0F05CF99AF43E0EC985EBE3014340A2F2C7D24F1B5E630EBECEBE464CBE8F6A7E747C76F6EB824CE63C60071A571514F82FC86376C2DDC347DE467A7714AACC2CC08886CF9531DBA3889780C2ED5CC1EB4F0554B95A2F579F65916DF7E4DF3A80C2EBCF75AA28FD35F3253B6534EA4F930D2A037AADF4E06E6BD3C49832CC41DA0B37DD86506A0BC760950250146D2AFFD873C82B96B82443C699854701207BA382CFC08A8422B5543095B829972E98EDE23CF8C7C0C0613F592A8217E8595EE37D5C7BFFF78D00D3261AC66EBF400866CD84ECE46931C7FACD64BE4D655DD9096A8AD951CCD128D73B60D66BFE1842049D8008D0BEB36E7DEBED0FDDC2A7459820846773A18E54A8A99F6739B2ADE955F0695E495E7AAA543E57E9C8794A0A541784748EEC1638510707CBE37251733B5BBF530DCF9458B978FD7C93D126B9591B6E14744E004FD9E802AAE1B9E32D07AF2A915CF37DDD68B46EA76C9D442EEABC5B717FD1527895A67819A417F3DAA7175701F8E910AF4F1C6E8D0E29A262F8A12EE467C003172A94347D611499B823B2861CA169F6DC31967C8A18CF96E09B79AEB8FEEAA0BECA2077A343AB0B579886FFA9A2B0BF2FB73CD105626A04D6FDDDAF508C4DD270F6BDC7D5E9DE92A52B3005EC8391103F2C3BBC604D386F79BEB14AF0 +Digest: 885515EA954A48E9A6E112F1608A8264A1013D862F4803047153E3B8A637CAA5926038ABFA38083A571E6C862D3D8AA8CE9EBD9E3F3D52D393ED9E123E792245 +Test: Verify +# +Message: BDA56338272D5274A0C80AED72F825D1410368CFAEC5D4BA5ABECD5963437267B8B868B0042994D370049B8AA9BA2617441724FA62AE08D462281011FB06DC85685D000AB39D2720BC1BC2DC08745B81972189BDA301E5A57B283D5969DBC789CD16E87244E38A99B3288E04154F5425CF502D03482073C952DBD2D4A4E561A3037BD570EEDFE28FAECE2B14E85F11036A427F0CA34818AE70839BE5E6B8D276EFE0D077A2E01A1609EF3ECC3404E0042E7BEF64CAE3DB6F8DF581F606103BE5D654DDE9F3D9F6B6174F1EC6EC4368C3F13EEBDCCD348607BFE065561A0A65C638A0D5CBA2F12DB4CCEA6438F280C5DED77A16B4E150292F3B4CB3A0595785477832862F49A17DF4DA76979C0F38936D2EB45AC6A6CB1ACDE83BAAF1FB5BD7287EED4ADBFB915BABA3495D81D53A09B6DDE19537205175E6888B11306D55EC562128AA079781B80E76CB3E7887F5F2324F41440AA62BAD6052132121235E1597BBE70D99CC58D65E8F78C2B3D95FB5727DEDC573F5E6A5C9EE80F90359CD96A2320F6A7280D0BD7DA8E1C38783A861323B77710177A7EEAB0554530E187D12E76E0B3BD2C2B4807E57866C61AC75BE10FDF83666563EDFB1FBA04694618330E97382A2E22E92D8750C27CD530A984BEF0159EA4C5BA652A0D20F5B3C0B055A8D08E74E5455B4649E279A323D29BF103A8FAD0E51449BC11C2EADE090810B416628C4C379D84AAD711FF392B87E1728DEFF8993D1374D4F36A80977C3FF8789242C8E049E185BA962A17298CFBA360202207BCC90E2B60C20DA12EBCB81A0A1FE700066E9F324B237FAD5E57DEBE671D4B7BB372A40CC987C5C9F9B811FBA2293709D4051BD1627960F798AC211148F13B2BBF88918CF4AB640B6B5BD938727D1A8FBCC921F7F110D2F94294AC0EDC51BD6DF1731FB0A5618C1327D1916109C5326FC40F0EC79610D0CBAB4E4DB0D46609F7D09CB35FC388912AD27D8DE3910B230CB43793E293860F229A756C65486AA92A0C995EB69AB5B6CC01AAA8D8DD5D7112C71CBD3BF9E8CA00B275691C56C6EC7B4D5530B64AF8780174FB1AF14C7E601781DBC9E7AA279492CAE2B084F63457B093486E5A08D42606A8A3AA4B9D10F2269D7630F6E453FB5237C9EF55612E405284FE7970E63E3BCF71E78943AF88C720C59DE576165FF98CEA75A5FBB8C4E83C5B50BCB780EFCDBF401307ADC0158D2E132919B7771D9CE63068BDC0066AE62DDE9B5FB43E0FA9EBF2739AC6073CF113776A29C49163667A1FEE7E5712A89C1AD0DF8726C30934FCAF14943674D899B33BEC13B4BADA84ADE494F404BDE32211F43C95080DA2A36D8D2AF6AF017F6A25DBA2449239DA802061053FA9B0E41E01058E93D266770AF3EBB8DED27AA102B2A69315487EDFDAB338F8A60DF093F8B39F02F76A0E6EB36625CF5EF0684AF6657CD4377DE4E1A300C197B13B0978A9513AE66BFB3AED5EC71D3A9E6BDAF7E6E43249AD81D719FEAB201D7D088B19F5485ED909B52792553B55E13AA8088B593BA0F414559F1C80A5785F8096D0709D8338693C6FBC998BA7CDFBB94E2530900E05A46A436767E9D0B4AE1881078C19B21BC31BE4DB5CAE03BB9C9C45ADD4802AA139B20C448DB6324AEA126955F4FD3DD141306418EABDB8625353C079ACB4FD6E212CEC8E38571D890D271672EA27C0F9012D9B7E1B91D6DBE3C7ACDCEA5FCD62351D0A7E5E10E13070C771B2D6DC14A801C8BEA4CA83F3B756925ED2FD9A496676060DF7C7B693D6B30803E896640D0A9F6D6AE811B1FF7F9DCBDE6A58E0AE38BC5D18C04C732945B45A295301A6F10A8346A87D961EBF2CE7C658ACB0AA1F5683436C15F9D425E278FE4D4B8438044F254F121CF039553FEA4C05656758F382A965368B570F0BD739DB07BD170F13F3EDD1A11F0B6DC5B8FD2A734FD37F55F208A37B70E98EEDA39252407ED5E20A435A5B443D58FDFAFBD86421AC199B2F13AD998066F9743D70897D22828E938DE97EF2365556D98137A4CB2ACC0D9F2EA9F735F95BA1D66A9B9EBA77AC8E014DBD487D551AAC600EA1E6B2486E5837A695680AD331F1C244A5453C0570CF0153412F8663EB9496F156D988E7E23EC4CDE700751BC229EB5537E8962A4D68D60D98AC0A4DC28EAD6A527E26DD8ABAD667DE4CAA6A5262028470F6ABE814B466EB35FFFBCB0BCD9A8C80E56FF23F2D7CBA7A54724BDAC7E87AFEA1E5BA99B3E177E38D4258ADDEF8CA0DC26309621EDB9F4EB20D3BC72DCDD951110DD25007390D7CE2D7CB11BA4BE41BB00B5823D1F5FAB9BE73EDDC85F0A6C0C5A4A43ACECA55D5F955EB6C21A919BD2030FBE38A66C48D9D02CE4890F08FA436A52A00D586B26D11B87FA20EDF980C799ADA3D4F98CACC35B3FBCAB93D66EE84491F100A80CA8D9377BB2D6ADD5F8216DC71D3761C4A124CDD63BCA348FCEAE94D55A41A316B16C6790B0D3A85732B5665D1543FB98F549F8AF30D82DE5C2750EBD78F0832EB366BD1C6CCFBC714B31D4D26B4C14B4D5CDEEA9294A9BE3CF18166F8613C2D7B584305D16A884AA3B926E0D63F5339B587E240158690FAC4398A099097B5129A4E43CE2BE534DB1857DC316BD23A79A87ECD50F7BE27D442C1505BFE446374B4A23F88B97C4464061ACC14C46BBEFE4C3A36BD4FAB60221D95AB63FC2C9E873450DC3F083E667CAB0F999F54959D9F275F770A93D8F01DCFDB9CD95FB368AFFC7B90BEDB44B144D79D34B706FEFDB0DB5EA3F6457DD4FA5701E8221121D28996667C0DCA0798F626A022A6ED941099B6E094166ED38705310D2A99B3E8081554B7AC6BBA22E1391ACEB2A8C609A2B74D2E37BCCA52455D189375C63F990E00713812D37CDA3E90CCC22B3A62CED9BB483D0F7B5D66A931B5F598CC576A70A38CAC00FC1D8F98DBF61956663D42FA90A81AFA950DC781E20F01874A90EFD6E8A1C0185DD969AB0DE4C788133C67B21BD74838319A35B149F72AEB2F0E4C2DBF84C03402877C5E6A39CF7A976157825BDED6EAE3E4DD658CDB63C585D195B3045E35D6C456774E7FBA39C21CC9C68F3D7FD3FA28941C21882431B1BB83D1661B4E7E0D39A6005286D929047D5AA3EC5C38E5017DF7C54E3A01D5623FDFF8D8E471F12213655E46DC5901CB67F8ED739D8742C14A95C1DAA83D837DD41E6047F12E860B72A636B54FDD4E2699062C52BA2E8014F3CCF74FEC4CA551E038B57CB76518E474C5236E49954CEFAB372D90F41C718FA128FCCCFA5D469EEFA13D6BCB1C89A7639C6CC53FE686B3B72CFF04515FD6031C25A86DAFA52C1BC6FF70D03AA5397D1592EC7B58437CA124FBAEA84F8C935013D54FD70814322CB4643F21B387A59DBD16F30AC0722ADAEDE32C0F1ADDB3AA8C8CD836697D582A9173B17A73CA4248C56B8C930B6F33FEABADFF3410C4BF1C0E065526AEDA279762A5BC706D67A38CA6A903AC998E1A4A490B42245E2060B2E052B581C84EA4E787F4656C270F5430D14A411A0585A4C999659C9EB9B157DF30E71C748596825D369B09FF5259EE3DCF076A0EB1A909D392602EE04E10AD6F178A96AE8EC2624C9A9DFD8235A158E55D9B34C4106450A2D1E90E0EEFC9A5ACB477EC961C643276E66F23FC876C4D66C98A0FBFC6F86FF48C95B59E02C80B476745E1C8ED04E31BF8876CE3E54D00B4247EB05AA4CB055E0DB7529E311073CB8FC236FD58AA35241DD1137E85B05B3C8D2C1E329D57F8D1F75428A815C90B7F08BCF6293D2D5080062C5A03E5E783FD49040C61F1982DF132622F335A4081834337AFEA5A26F9B2B556C9809C21A7C623F77D3646DA5314A3B76B75D76F96038AD5671E7D8634FD85DC9B971299CF6118E65D25B5DD2EFFE3CEBCCFD093003BBE241C716FE67BC98B1E4E7B366670C912CB14C423B52E05568FBA0BFC8484A0FE99D5B2AF24AD8F812C71988633786BF1EF3B7B2B82D8032FBB4D1F12C2F66DBC57081DA910945CB4CC115A9E2032A80CEFD8FF733C945C32A80B0555BC3D68F88F8804BF0E3505DC3D0476FEBEC4660555A5816E512FD7D07C7440E48552006CD4276EE0BBCE239C6CBA82D55BB57830FB795EB607A1E0B4CA78050FE143F615956555740BC9D976474A3961AE7C4953C8E3B74A0DC99BD0C6F3166059070915860AB9A0F2E9A71F7F74C9C4B3800FFC202C1E2CCB0B539295BC6389C88EE4E2481686D65CECD904F41E31DE87EB6401E256A780DD8B5E20EAF373A3A434792F7CCC171BB59DDE0D835D90CF543EA28DFBE5243442E8D277B8793324710342BA441B007F64EFF4AD9DBEBBA545779B5BC4A58761C89B5216049D871F05B82C4E9B1BF0847400E0F4EE9A88DE8451AB38BB2B03D333ECCD3855D97B157FD1A6E354E16E3F713986728218FFE9847B1B103BA2F9FA073C84660646BF5E98B9048D9347332A099D86AE4049B6740132EF14EC12BC485C815D353538EA9C9397C +Digest: 9823B6180B1226E148E2376AB98FCDE417B9735E44CD557C16C267F72B9F8E5E8E0F7CE5D9F416D52B9277EF18B563859136A4982727EA33E820D67DCD4E46C3 +Test: Verify +# +Message: 9CB19E622E190C14DAEC36E45F375B4A5321A25964E489141BEBCAAB8202C8C32D232729C5FD99DEA8FEF7D280D8D73F95E168DE08C9935D5D44ABC301C9FE1D6EB8236667D667FC33C22EB70667717484AF53535D5155F02E9C66F4ADEF0FF2A47557D5CA3A16D63D7B865500F992667BEF57DBB4AEBA7DE036850CBD3B9A3A4C0E14260AD126D4FE6E783B6A60771F0A8B8C7212F07B48C7F611D5AFD96130CD4E466C957CDDFE352960151CBF3A9F2704A09762A3F85D8F9A1DC9163042625BEA3D88D116D01429BFEA49D50F953706CF01775A6E565C09165E869E313AE485C0593B7EAE8E25F6FA4D2940AC5F93A14D2F53B3B25A1E5F2FD288D662482AFD8B044A2AA41B4BC167ED74F41B4CBDDE55F76AA2ED328B849889B5D406B779924A781799BEFE0AFA60655C71AF1182888CBCEB412EC1A9B682953C50195303E0606D50C4F6A65EE7221DE52C981AC7C50AFD854273A5EB87C60313605145AEAFAE133FB556FADAC7C7D46A15EA175853BBD73876D052C13A68D948B92A45CDC255E8782F016A361220615ED6E78CA40E7160D9B5B1D7527AEB2785164EB3A052924BF0679E3F41F35DC9AB093E87FC76006950419AF015A98D5F64A994EA0F4C2F54FFD2CC31241A0BD54D3B529456562BBD8AC322A0C94ACFB9223003355C91330C67EE760D92C0AE020FAC285557D0B15904608C93D15D90F117628E310D31D65FCDBBEB2575F35B60F0BA005D1B590C39E54878E95D35285026B2FDC1620FEB934362DEEFF753B567AD26896DA03B218E0F57543A0C507098B8045ED9BAED5646986B584309AFA24B278A27F94C6F876D0543C4DF8B9181205A3E8DAF924CFA017B9C21C2DB5855A03F4BAC83BF67778434E6930B6CF28EFBBAB873BFC534304E22DC6D002CE4C799A73C4A664DFB642E35958A568922118EDD09973F28A6B0D996C617DAFAA7B1F9D6CA1A91FFC2DE3425A63B15E9F1F8D79905BE2870764956610D3B33EFEA4E4E58A12873E6DCCE75606DF7B557687F66BDFD741E27E4D05FA7C1589FB44AA513EF4EDCF2129D07C550A0333A285FEE882A831AB2DF4783AE70A228B4F3A9385170F65E293BF01BF68180BED49659320FD8DCC19F449A7243263BCFF2EEFA242E2D03C41084A88083FE5337D191EA3FB149D82303100056120833C847E6C3C2CFB38DF505154DD19C8F4BB8A7B74A9D9A7E442C02D2F08C73F3792AA4702905BF22DAB70C367AF1910E3635F0F6EEB4A5E8FB3324592D7C7B5675FBABBB1CBE856F29EEA64AA349D529DD5BAE3029BE1100E79C4632ED0AFD873FCF0AA58D10F9C7FC9B0D3B544AC91C6DD4FEAF41EBAA12FA7D667177581C045D2C2F9E8AFD70C7EB8EF11AEBA8E5184A4D1105510357546427E880519874B37400656A819748389B8E69B7A9511C24C04A5DCCA645E3308D1A4F9BA5989E9A690D967FA1FFD438DE2422494DEF831C815E3BBFC495EB6EF95CC582BEF8ECECFB864EE861157495672E6BB4B63118D170514ECFD1A334B6209FBAB3043798443A961AB355813D7C214031C6541C0B15E85C02F354BFD4AC64B6249AB5798A3CF722022A7B6E672D2CC83B86648FE9EF8A3F886D2FA592A41E87F0D27D63DBA75DD76F9B716E21AA6A715261B6CA0EF7B864C3EE3165E6C2C22F16C7B26F25011A819A7BA63DA80F072D89BBCCB6261DA968177113A4BE31A63E3EDF7EE252AF6648E5E9C645D028B32CC3F6586F19AD14F7A04CFF07DB914E5BF3AD78E3AD2B616F5A453C25F198D6E5E2068A4BAABF365F4CD4BAEAB1B1641EEB6C5768E07697A6B19F7B0E65675E793FE2A3D90454C6DEF910FCFC6A6AFF271284935B02741385E29EE11F8FAD3A583DC0142C9B2B7BBC81EE7E1ADE33ECF46E4C45675DB4597C7E4D89285CA692D7188C557FBE2F41154515D8DFDDC5C0A23EB678D6E5893968744A5489C6A0EFC263D812308C401EC949AAFD7B9D354118F1E34486CA7D90D2779623A0ACE6F49F7F1E738E4E2A0E262F70453BECD5F52673F2868495A6EB9FFB2C375897BB6012198F432EA9BB53CF8A3A8FB20A1B8B50C802D37E6AA380CF84014A9B98F1EC965ED90C44DF6393CD1555E683CF40B931A972EE23A25BFF9CAD6A7B67916131193777C276113F15C6C12AB900ABA33EBDDFBB62E01CD8233209B0747A9E5179900F4D3A325181208B6BC13BDB0548552885C890E6D3044E0506CB59A6ABF19A326AE087BD450E0655F2D7DF0790E7C3D98FEB61BC461FC91554EB10A24F4CCBA05EAA111075C1988F1D7501B57EF9B61C0C988C6C7A52F8619D8EEA2D6978D6CD44470F80CFF8BE52724DAF3F755C0C68AE14AF6D6B8C33026767DA26AEA4D437F1FF83B5D73D3371F4EA56D38DAF77CFA8E0FF24E126520412CB72CC59464A4B4E33B05B257BA337A0776E150AFA58BEB53474FA30F900C135BFFF87649184C98E832B05071B94800E3D775040066E8D4BE4F1F1FD6A4503BB1953D04D90D8D8E3EDDA04E4244AFF367AFD79A27903F98FC22FE5AFD55524E34F18F0A39C62BD9530CA40232831820C1EF6EAE535D4CE4B93C0B4B61828A042C03B4491625CA255B69058F9C614513A8A44F9FD849626BEBEED6B1D101AE21A445952188E43F65977307FF57762244D5B2D4EC973DD4BEC4F7F281B318B74034E455523A1EB6FDCB800790A2A6741610056E3B4F1FDBD8C1D664526357115D8CE21C175A3EF9A12CF42AB2680C1099BC9EB6B29CA1BF224D089172748B1EAB01FF7CC41BCB654CB40A3AB49D54A086B9C4B00A0C96430FE0B638347506408B4DFCAEB4E2834B1B71778A676FDA96DA2A1273729F1FB5181FBDA07527E44BE9DD6D75F7984B2A9EC7C19FC4938BAF5CEF533B3AB075BE3CADD13746BC2CD40281691449E16F29C701ECDA9742C09F893C49FA113CC464B27A143BBC8473BBA5B1E56A685467017DC47A223D552CD1D9FE614538031F8B0AB8D403DAE6EFDA6E8CE954E5FCDCC59352225A8B2D956C737A4C98877E6211D9BF8A6DEB8709D111B9972C87577DE2066937AC49F4693C3A97CBBF190ED84E6E9A4F3A255034A0EE60D7A62A055B85790273064DE58D525207187FB6728EA7E2EF1B39416D130211BBED08C73B0F0B52EA3B709569FD924895160DB8D8A0C20E69CB52AFB283F03EBC3D16E8C5E4B882DC1E3EA8473DC6430DF5FEBC443BDFB6697105DB00AF3582E8BC5F6709FECF38A44A867CC14ACEBF2C926DDCE21A0275FEA60A1688CC061A434517ADF4B3ACE9220B608691F565023F6F99B8DC159B41B859C8CCDE4B0D65E47745B487AB97F1EAE2FB9BEF364989508832F869DC244CF4498520B014D8397151C28F19F9E528A2690483375ADBDD0A9259D80B6DC489BB026468D8CE6A51EAB97EEA7082A2AF478287D2FB225289AC502F2BB2AB64A979D161B354E311C5428A29FF1F6498E525885CB1663F0C3DA05EBE6F49A5419C9895CD3CF4A34BE34A6E7B0E06B90D3FC7D48678B9E9CB714E3055B6CFE8F0B4F7D5CD245043BF738F8DEDDC544434BCCB2F9E02D199754A5362C8ECE95667945DB6BF46ED92A6454E4A9614A5367F53CC884814FF6065C9F458080128BBDBA67E7068400091A4B333A6D86EBC096B6F045F620EEF6BB8E8B17536EED9ECCE44B2C395DE86045F614AB9AEADBD1B09DBF3D613615DC86CD85A220B54AC18D40D9666063FDB1952F9D54751079121F723633A2C86B64BE684240576E966232F57698FF1C65641FDC862B27CAD1CA2148B15594AF79348DFF70741EFFF59F07903D94CD3D246B266F33619B5147EE22348AF685AC8134F3D2310C97571DDEDEFDE127B313F229702673218615D73580A45C0FCDF0D6682D940946FAB5AAF55A9670BEF52B5A92C39BC77814B2F107B01FF3FBD4CF2CDA99D64F975203BE7B63136F78B2DB0435611ABC6DFBD88563BCA401D1A579A461CC61D53589B4213672849732EAC71C76DC4B95798120419927F3859EA0B838D83B90F72D39C4D42880D36F226208154A9C6B9192656F3FD30E227B01D7A2D7A2B6C9993B232D3BD320743F68972938B876750E8AD2C9F06DB965FB8F4DE52C18F50B52D1DED517FF0A36309473C91F89462FF6BA5C7AB4AF6EE1793721A2D58446C88B3A559C7A7A2E65E9B8CDF03829F8D4828974F3BEDCA94D753A2C6751B1B8AF1323F75C2BD2414DCC5370856D67131BFCB21D1F7C3B2BB14DD4CABA5C13FD844A0E12B3DF4606169A335E777650FF5EBE56D78D0E4739818656C4F847FEB81AF0F4F7A462331B20A16A5654CCFF78F5F1A835F64659675EF2C3410ED1ECA85583FBA84B37E6F2B2DE1F9621DD66D517C207B18120EF00DB56DF9E1E02941D1417C9BD0CD9BF399840A1AD2759EBD5D8B7359C200EB9A5A4E67FED58E03B244D4319064390FA3E1949E1E3A0FC38EB2206DBBBA1E4A929249E6E0DBAAC54DAA5C1F0781AC142888EE279109E7065879381212515408EAABC258FE89307C65122167909C50DD85ADF761A9D97FD9E09BE7D7F87EE38C2174F96AB +Digest: BE56DCA3B1D6FDBD39A5571F2D9B31A24A146B3237AB1EE0404AEC4150314E91F550873575C59C78DDDE4A68574D7C96DED36C9E5E030631654DE6B28B76CECF +Test: Verify +# +Message: E99F8CE02313F8DE0ED285081C9A9F44C53F6E598B67830084D2478A90E4A520563E9F2BE56C5162C8295ABF29593F9D527EF427C6D535B1CEBE394AC9618B189CA3F77074EF608FD30EE51C7287E2C0A12842FE00A10A9CF080C6FAC2BA75FF8C46699D3C1A58DC2B8B516265382E8D7961CE2942848F91F651491F8B2F3CE7D7609BD9EED59D64DDDA5775E7322AFD82A721F7C1F2CFF03E975DA663A6BF38BDB902611F016A8A49D75B938E746FFED99A1F19119DBF4F0A53BCBC251AE7C2C24C379BE38879CABAB6B3908B3A6F7696B564DCE59B2882D9657C825AA28F5A141468E697DC972C3EAEFA745141DF70B0EEEE1F669ADD7DF0132F166401517D27B030BD158263E0EBA5CDC5DE0B8E884F525ED8E5D2DDC273D24B59AC372D599647699C2BDE86118F405FD7D615A509F88C2936DFF722469A9F0B7D6FE1F08DB2E744AFA930C11D1AF0D00900CBC7E07FFA24CD59E8A1E0CB56185E52D42290D1B61501B3FEF2B7B25227A8FDA1F8AC720372042C4376D4F34CC32F43153C536A2B9F6654E3C7A6E917E12F38E920014B8E206DFEBFF7043DABCA18D422A237252CEF06A28C3398804C5EE98765F76EFFD620BD29202E2BFB7FCEA96FC88DD783E4AB9587EBC9EDB75330627B3D284A32D7932C5D87B413E25E91E25C34B36F411F1DEEF688F51A2CC0B61C667F9BAA6F12FF3AB7AEC919D775FBE6E7D928FE5F49E66DBF4859F68229C0B2832CACE6A421692C83AD6252AA6B8714C42B64AB14E2672DBFF99BA19B9E092C335459C9106A7575FC94CF7A4F38B2522FB7F094E849A9122E6B378EAAEB18D3196EC2D3AE54A972CD98D49551D4B5955B5742AF69E418B277BE004BB91403194C3AA134426187D7F4A4481E05A1D86F822A855511365AA264C8F911B99C61ABD8B632734F19ADA581C4FA6204882ED9FECDBF6072A2D457E0F940A9F1EDD27FB3EBFF9CF93BAF7A385F1FC8595F9B5C402158ADBBEB984C2C0CA1D5202E18D249832881593B8F1B123576622F31E74A36CAA73DC4E63DC34C8530F1D3AE2B41887746BD1451DD9CD163D420743DD12EFE05D181BCEC620EB215DEF8719795D1A278FFED6485F4A13977A93BCC9FEF4AD2FF343E450204FBF98931B20B78754D5A47D336F19E3F45318219CFD009FE307538CA5A70E6B464DC5BDDBAB2A4CC7A364CA1C86F0A7F2037D13FB639F72C59A28E8722484CD55547ABA77A29DAAFF3596F4891C15CCED014EDDEA070E929C1E95A035A54781FF3757CD51FDFBD94E69959792381D42EAB0C2353F0C15BE209B828D9C247DC36A344F132685C7EEC12328F724467F314D550784B6E449CDABD02B46BAE7EC02FEC278672C3B2D044EC3122D5EC14380775E0FFC28B5E2E44E90D76CA28B3EA431E0AF119E781BF05888A18D868373D69EA23DD3921280D8E236816F7788B2D1ACC4DF48F3D413ABA05C0440538EB728ACB8A14EEBD8D2E704C6D473C55239E3E6B04848C60700F954433E525450E806108771BAAC058DF6B187B26414EFC9D62565009F4BC19E9D3402F2F08C9E3A95E09E5E3ABAD04CBBB339C14885D8E0F47AA87FDF3EEBDC263A03AF0426FAB2F582FD16D03EBDDFC8F55FBE0D960BB6338BD4FA6582E7AD527495EA80DFF8508AB77D9859F24AC577B0C961547807E4DD9E9FC51FC3E70020954808476A9156C934F2F8C1336535CCC469EB813A44C47847212503C3D21AEB96ED80D7606A9B4DC40737427C064F8F7DC43F1C3AC808FD0FB0E518C3E7B750A5E677B6F249ACD79C7114D402C9782C7B41525BBB0F6CF6C1500CB8E47422F86BDCF92AEC73A5B89B3DDD38E29D0B9660EE528E8E1827FB073B81D745F8F49C447740C2ABF59A4CDE6052E05E6F3CBEBC565BBD0860E90D446456651E5AF58E78B8ADECB6060B84BD27560BD1132C565FDE16D50831AF16898CC7A6F9A09270BD1E2CB3FCE896A00608B215444707008142F26CB0401D2B9AF142F205FC98A0223EB6A8B5FB84DBF7132429550701C52B0087E42A218DF45FAC0C7EF900763F4C5F4F72639AE6A62EC64D3B73E2EBB18C0A14D9D1B0230C393F90E4EE2D3978AFD41D26F92CC42B99A4013C113409EEF1061B5496AC9E3F3038342A0E3949F91D7DF46F44187E834494DF7F152DC4F3064901588F60BD046096E3DA4AD8455DD0EF35CB4B24DF57A82F3D6A7E71634456E5AA7D230099A0B06B3215E8AB0E0F8B9D42B29C8F4AE91A7C901ED5142F83C6526AC21F1EC0EF06D22D3EF1DB9AEC77C320D50530D68B26450089717F9D5BB51E048FC87750B874ED52AA500E988E158ACFB6774B3FC095CEB662A111316E7D5E14DD2EA65532F68FD5DE5D8D4AB8C5D64B0713BFCD89E1A465C398BC0F0FE1F5CC870DF6C68CB5DD4DC40F56D910B33D8FA9DCEB34E207070661B5A8A16725248B378135FF65EC941895B3C9887FB095BF3600AB34A349AEB89886AEC19C0DCD87657C1159EEB24561F3C086BCE8990984D57A91BEB3E7104C3DBA300B5B3909EE2C5E6D66FD8C179A21DF5037DA7626141362EADC1F44A593C51CE81F5FA7C5672C00D7EA5B76A5735B091FE8C08E9A90BED58DB80E4DA87DDBCFB921B8DFC7FF78AFE0B0C369A5DA31969FFA4FE27CE306C0A6AE63FAF17206B01B551B6000939516D5F4F3E2A92786034B096DAC3EBDB71AB9061EF295841A696CF6B8555D92F0C4EF1E330F468194D2A22475E7BC86A91AC5BE4F09A1EACC6ABE29A556CAE7782F5B58567B0B003D10D716A97772ABECD286BC7F36D47771BEE25473448167A584465A1FE357627351E634CDA0C8886D0EA24C9BDA019F0AD61E7558416488388D8BC9392F6CD3F06C065289CDE7D0BA0E3257D87E21A13ED94B8FB9D2204671E8FA9D28CDCDE387B4CAA3D5F375DAF4FEBBD48477E6EABC6F4401B7469D28D90AC1C669E1409D4094BC57E35FDE9CC4B4CD67AC56B44110595A324400E71A5F982FDB769433B845260D51667CF86A51249C67E3548DBF00B5B078E989A59153CA55A5F0F4E9E8C02A5A1AEA61EE0A67026B0B9258EE532ED086ED0F171477D70967F7CB18C277579C886CDA16A73AA12FD063F231C6AA7BBFD5AA259F259232AA843C0ECDFD7E548AEFE9ADB6AC553765535AE74DE57C7EB5CA861DEC39C8E6008F09DF6B2D128806A0C8899B7F1FA23C6C6BFE766CED3FD2FBCE84C4C690DB4B33729FB7180AB532BA0E2C5491BC0100F550A1DC129390E8029044EDCF1E3016AA65C856465F325E00F1C5C656EEF47DF785BFD86B3F437187EFC4CF094D4461C577BBF0F003ADDA22C7F9EAE47A30B77B18228B561CE0DB911CD35DD847CC7839650068ED641A006D2FE76C489DD6AC8FF4AEFAEE41B5EF5C9065234B75CDDE000F64CEE2DD6027C98A09D0CCA39E35E8896050F3616CC9CA06CB7B8B814175E2C1A7002606F439B5EE7D1CC236C140E333F1C3592C163401487E615134E79EFC58393D9379943589C76616ADAF9F0FDE94E226D907D7A0295DF9BA62EEF564248F0A40EDC575141AF8F9CC5A0DE3A0F2DB8995712E63DC435F704144DA06C1A6B9665BC1FE1D75EA5AA14294A76C98CB25CB40A29D203F92A91130588120BFF0F5D6579FE42BBDB6B6F5418A23D46C7F41A987225EDA236B860CA989D08D2BCF6C8DB501476C554A9EE3E112B91DC7B814DBD31157C228C13DAB1ECC8EBF5CCD9CE941B84BB09AC00FA41FA3F4A808F58113652BA6CE60255AE10A723C2BCAFC025D9A48E0121F0D04A3780500FBF795C6167CD64326E69DD46610F7787A73D9C26577204AEEE1365FAD005AC2DBEF91ACFAB8294443847133F9D785BA17493F76F16E65BBC3BD110C220278544B5BE94702F5D407859CE27738596D9F8BA2641B3D13A99A35E55E63F3D3D061AD4329E38B82BABF35BB9CD17BB1DC4BF26C5F5CF734C0A615C7F9ECD0CDBCD480F633C6A6D11A20956DD3206A27ACDCA634614F42DEC5ECBAB1965B40B202DAC4185E11D7574B5F6A9CB931A9835899D636C99FFE4EEA26332E83A017DD8EECB44AE3CB1DF474938527C473359BCB02EF8FBAED307C5B1C8E0FA7A186EF3525F705A7E8796F444D7AAC03E6106E7A20A50305EE0398CE0F82EF69A554F00B6E96D6C54D56D64ACF2E7DDB94644C12369415C187D986F6BA989D9D0175BC406241FD9EAC3F48B2A3CADBBE1B73389783205903A9E9DBE0D56F0763894B0B581627E76C9435D7E53991BEAE5B7D16F4B9F241D88EE025F86638760EF46570078C5BFBAF74AEF7D24AD8F65671E6224F2A93F823D202EE20012753C6935F4B9C7B50CD8C58B1DF906D4713EB9D890FC8177863C4EDC2840F9F7017E3827F3E1A35A8AC104006E5956A3B10E1834064BC22ACABF3E0137EF4A0EC40503BA17A5ADF39B8DC79809B4D563298DD03A009DC85097325BE82DCC625D004A46105E97D001D02BBE66A1168F5D6A0354755EDB5EFE71A21EB7A3F2D6DDD25253B84DC25E1E7A1BD1A62A3046E8735701B22C268D135B7F8540D9A4B5072CA9985A2D6A8ECDF1B5FF623F53D3FD45C7292BF0CC008A189FBD330D +Digest: C394A22799B8E58DC6CDEE3C853DD0824F7A0F51828EBCF36461F552C7881C73F0D62BCB92D8024257120F30AD928354D4F5E1B6A6179D65063961A294201BDB +Test: Verify +# +Message: C78D5D6231F03C07E885358EB22BFBCE36F8B69479A32A81E0AC0AF06BC19185B4F4E5A629920B6443AF7B513C23F15866DA47C68CF11DA36FCDC1D684333D3B41B576547090689720ADEFA01B1081CFB5A039FF08F3D0E5DE15E9A218D868C5A2B6F0731230D170E6AD72B2EE53E06D4EBE0F5B2F58CE318B84FE9CC7F3687C4F0BB4F71C9C745C13168B211FD3BB8DCC1D5EDC43066EDEA4FA20686299AB20E864F7DBF7F25559DF9D581BBAFF15B9AE00A53E4F86A561CF47C459324CE3638822E0F00E78128D88EE88FC8F3092AE15E8D384709ED3028B3D4A23002360A39E50922602B7CA5063C55ED1EA553DAB999B6FF211DD55E079562A860A040FB23D11E7B6F4EEB527822419CDE8CEE4C47227D648338005A831FFA418825D73D2199E971B25298E2CDE41943479EDD89AAE675A49F217FBB225130493A05E880ECF2D5AA9A0294C3FA3C01D90EC7E975B03C80293EB0DD7018A93214BD0F614C80E8CB562C2A038C26E0928DB68D42ABAC84D249AECB511E37060B5BDA8B9D77FFD8760B58CB45741B5FFE3A0A5CE152618531829AD3693381077EABF29CA9485AB72239D55625BEEE537560542B89AD26ECEB9B2C3D0317AA0317EF3E3597633815A5D967D28BB824FADB835A646758974F27F55301BAC4F1787A0AA8087A347566674347320B9175ABBBEF8BE93F542E5E6267CE64D19B10B938D6863115DDFC6333137CA1CB5BF8586A8FB145F19C2FF7A44254F1D1CA8A1AC4858B2EDBD373F37DB609C9F0F87232FB2037461EC43AEB76B3F21AC2C9739AAE3C25CFD6C07763741DE53C6ABA453C2C50FB3A576F069318F1BD1538DCA3DE47278A4B12109C166CBD6219993F6AD1EE0353125BE23F1703114625ACC2B9D325253B4F3E162FA4509909A60D0F0D794262573555D84CBA9E6C0E37D6DA8614E6ECE1B3BB62702DBB4F16F7A94331A451D54050C83911BC2AB74AA291D300E423B8DE76045AAFF80EF953FA998FE1EA221D1AEFB6FE644A33216F7BA1FF61E6B1DD94033B642F57C673F9B28DCFB50344365257CF9587D73F8B7EC1B8CA9D1978978EE2AC28651952BC0630CC5E45F05A40C43A43DD29DB454CC20FB33FA9F11940DD8E60EB41F299612ABFDDD82066BB874A88D13ADC6BC66E92BEF79057453920577DA58A40D1E8567B21B2697B99A41A9C6F8F1DCCF255E816E66BE81F6AE7ED74A2087ED4C1B58364ABED0E1E7EAC1045298DCBD48E00C09C925BE1107FA49AC2C6BFB88322FB20B9261719219C544D6CD1484B8147A3507F8F52714FD3331AFCA10270A5AF3EA891066AAA175F39F7ACB8ABAB5DC57252F0261041945C890DF15A9015F8A2ED6F56C9789FB9B0CCE3C51EA36F131AF17509511FD130DEE7B6D5CC387B06C19BA5CC3E44AB90ACE9982ABFFEE80EDAEA2FF72414869437A689C1A1B6574B04AD2B3DE4B970AA5D43BC3D0E16E081B4DEE549D9907D2162F677EAE29CD3AE2CD83F30BB2375C80EC1583DBA541F64F0B4C332750D4566C84DC831689E630745B44E37D68187B781713529B0C7E407EBB3DB01EB17BF9ED8520153580D624E22FD5607CF3B15894CDA492CA01222832705FB77664C8687D3D1C816DA48C3FFD80A80D4CE7DBCA8B326C1C2B26FDFDDA583C51853C564B426F6477C6BB457C55F550600A01EE9F95B8041F96C771E3AFBBBBE32D6468D19DFF372D59EDC0910DA9DC2EE2F57BFFA8EEE9EA627049ADB38795FF3A2D3F655B7EBEC23ADE4D2E6DECA8CC209ECD379EF09F7B3518CEFDDE7C9054EFDA62359BB26CEF423CD7710F473E8DB2911A9728CB6D61083F15541C8CC36021F1A63925FA346CD4FFFF6F13649FE8200DD90C66A76A7FCED2C0992F3E550478B76B71DB045BE0950FDEF2271E8FE37998A0148E2751BB235C74F8CA00D226A1BD703830630E645CB780453BF1F2A22E1150214A8C723665134500F62EDC03A9B4F3C35815B850B36F988FA689D06652CF6DF2488DE806682879995D999CB0CADD5E2AF20D8568B58E58EFA796221494090A9E9D76D7F87E345393A5DD66380637DEAE2A5EF51206B133A7044EF3CED0F9D0A99CBF4AE450E49DC8CBFBC319FC0BD3A54EAB7CBB20766DE1ABF72AB2676974474EAF1B9BBC042293A98274678F58C41B70EA104B960870542C40D03317B1994B0DCA71751835E2E37EC7C4078EEFA8C738BF1541B28F5AEE3640E251BE05FAC7D021B3E27FD283638C025E9F9A26FB6DEB93DB464EE2BC94D260A4EFE3857BE806D4EB42F7926E15BA123AFCDA6DE9A885055E28058EF2A48CE3A18AB5BF2EED757187914641BA6B6B06831B4E71334C828E3AB319C9A69C3B5F67FCCD9D7AED9ED42407355813902C92CAEBD573D4F7FC98C1777103CD36C324D742ED3B07F93045DB5516EAAB4DAAB907C428CDE27DE66CCED5329D2F48B520708E0DD869C8ACB325EB961354E85A989414EBFB5238E1939B9CFF491F5A654CCCBE723DA9B9AE99E6709CD9EE209B1D0288B24A3FB3251788334E0B6C3A13CDD9501C543E5BDABA313C743B1D986436D0F10864CA3E5CAA8890B15A282D0BBFE296894041240F00A4FA4EC1C9B755063675D5257DC5A592B539EB8C1221A8BF7DD3C3A49E4E72F0056999CF4E8F07C3CD95AD1919B835AC6C9A037BBBE3BADBB7A5FFB05CD0EDBCA110C07A45C98F128652954A3919B5E9126DD330CA64FB5181FCF8786138C9F614892952BC4BFE41324C9BCDFF8516D58528829F41B5E5AE2F21C2EA98D0BC16955AE87CA3A77BA841D50A167F671689C28671EAD6843CFD2225A7BD8A16B8439DBB4759B0FB16834E56BF93828F69C6C4C71E36DF5A929F08895C5E322606FF91BF7D63E03D6C1A8D85F9E472E0BE3185A8F0E057F0526F47A83796A9884BE5256BC761F1DAFBF25216A68CEB5D2FA7DA45B1C155229EF35F4E3F9446910980A06DDC4C33979122797D6D31B6E0640674B557ECADDA5D6EB7D5095B95058DD6C26309FEB3F9CFA4ACBB48A35772B03CDF7033241E0AB8D25ED86DE0D9252C1836E8008DB1FC6B05263B5E2B0F42B5CBF5BF6D84E1E8AECDD1B4A1F4A6DD2900F0DD5BE361CEFFD3C31D163F7D07882DB910B1B0B54C0262130CAD8C2617544758966619C8A0CFB558B44E1EB5F8654B859C8A7BC43A5B7CC84C8D9DD88D41CDAF8CC8B5B40C498B8DC60B53134410D823F1F421A44A47A412EA11A681DFBF393D4FDE72C89FF968AFEECDB0F3DDE523B26593B0C0E5590CF703A946562DC36AA758D7C87D540FC344854692919650A00B4C8A770C565C52463D7EC2FEAA4C8ADDE9E0C2D3759A8EFCF1915023E0EE022FDF1F94F8677B99DAABE165B8A6CAB58DE490EF481C172160DFEF18E3D63C2BCB92ECC4A95E215DF220C2E85AEA72E815978637D3E7C60FD13BC5862F143265C419F171F327CAF3D61474CB55D9AD18D9C36091CC5994E944291FABE42586E0F4BC782B06DA453839A5EE836CE3BDF2B54744991601B8E0347CD1B355F8F76F334DBB4308FF287F97D57A8DBADB5599C96869C84C3A462A07883A5D4F953B43DB59001BC0EE7ADA778E730BF57FF0B2CF5F16864240AD6389EF201FD74227B873751462DC4D90BF2A286DA776DB15F61F6F63A6BDCBD8F7EBD70DC84E195E1B7FD6B3371EA3E32933A6DA58DB52C11BD949146F4F2E67683410A389A8E5561919864708DF31BC2408E0889601B687A4194274C62F468978C5F198D2705F714B2CE40E5A511C159D45D827A53D0EDB683F04EAA4A3D8D8EFAA26B48EC216B11DDAED12E1282063526AA4FF6F22FAC9F35ED428F92BC1A67A392F8B0E5D2A23DFE0A76BFF34DCB28F26DE03262942451F6E0E07E206941199A23932EE0C7211F358373A65E48225098EE2CF740752D3A9B2B6051B7B65C939286C0030FFDF1FF26607C9EBFCF3C2FE28175CD1A14FA250A2BBFC60CD7E5C34DB903DEC6E11BDE2D9E157EC88A90D4668BFBA61DB61852368FA960F8052B06D051A654E355C11C71073D728B657CB7D7E947001EE8B446E89F5D67564260FBAF0D657436214DAD407EBE65A8CDF0864CE662128D33F5A8185EDCBCDDF67E39D6C75B41901D54BFF5B27375177EA7CCAF3FE4246176E36CAA84678A679D02A877FA15AC7FC039F51B6EC0EA48A279F086990E96A2EAAD21B52749D7381940C7DE8BA5D6479BB4499E607012101ACAB6C7786A6F61253CAA472A9E91810BC9E995000782387F68F5DDE1F4433C14C3D610A13E5EDF34A9B113E0340D93AB6FAC8ACC95A62376D11313EA07C95E841F72C4AEB8ED6877808B1EAFC3996279ADAF8FDE6890901685DA06D0702DA43E25CEAB3EC8D9A31D1F065160E9922A3597AC8A458B0064CCA1B225B5B1FB3E946CBA19BA6F26F4E98087A8AC38C5DE3649B31527E91F14FE871F6BCC06DA483A51BF8467B462CF99D3C36AEB579559646CD5CBE8A2DA726D7659BA46159E2B31C1888C55D861F7676299FF3403514A6BC7C30509EFE3EAC1E475D36B073A8C29141CD537FB80569C1ECD07BF9680D208D7D8DA57DE9E88FEF623DAE70720AB314634E84B77549785389F78C144CCA2E1D48EEB87D7577965B86E10D6CA990 +Digest: 65380AFF7C65B04E9596832B5C50F300FF149B670C32C2C1617E76E7161761370B9F0364C90F0FC43C609BF1F9BA474D016584B49B934610E37A32C43770EDC9 +Test: Verify +# +Message: A8DF9930B2BC69442B1E9FB25AB9C4B50D501FD87F1D14CE535278705F7E832ADA226B3D09355B64FAABBE3191F02BA0ACEF9080CF971B5C8201A975835EC2F8F8891C8FC7A173E33833F0FD2A923DABDB40E57C825E55589321E0F4DE7BC764D5DA742F6999E3FBF58DC66FDD57B792AACDE49DF11176EB30245974396B5EEA517F7802A00AC6BA14CDCCBAB7F0CF97FF0E74CE9123931AA12D5C4BA419EA1E34457E0EE5E9C371CB07EC831015E252794BAC65A5F41513B8693EAE7506994E9AD12EEE2C4CDA204E43AC3797ACC2B4E65BEFB157B44C482865062A768CE07F33919621BB6EF54D1EB4A33BD8A69D6D325CD755344BFE566D4202776BEA122631960BF7A9BA2D9CF3AAD481DBD7CD5C0495CC473ABBE44586BDDAF2D297A7891D4318EC0B74A05FCC63658AA42C680FCFCB98D5EBC7D2B07821FF65A7C19FBAB119CA3EEA32CF7D0FD48116A2F0856F5AE4AC8648891EAD452F87D65B7F7D4BD7DCC3596DB543597D6DB0AF005A770D68708401A47115B8CC2E0FDF930AEEA418D392288C78320C4CDFAB0770BEE614A602D1D1F5C7BF8C97ED11CA41CAF5A89547CC933A405419A2632CD1483FC38999693AAB77EB1A41E396C397D3C2E8D61C2AE20F87F313C906C846C8DA77C1EEFF6B0F83D0050DCA7FB7C6F622BD8522903615A43738EBD47E550CC91690F3A76AB2CD296A8D312FC1676E3743D97708F329B6A804CE22476ACD6B4D7F6A3C10822F9B218631267695D611A8A84F9B789A5BBED2AE190EF1C0727843F8A8199599CF3F9452AE9D772D5FC186E4D68370AABF735B797F68BE9D375AFF9D19BCE21D1BD1BDAFE72D9EAE9689312DEA686AC46BF8CA400921247FE3C79D0537FC4250132045A7C753533B1F407E6F840BC3F9C4ADDF3750390E7A9B6DCB1A7EC6DD6CC4618F3AE833A5E388D1FE1EEAAFE1F87C4BAC739881DB8529819AE8D8E9EEC6F8E51E5DFEC69109D60611CC4AEF5824D930DF3D6678A9264F627D9E4F17FB005431664AEB5B2F85FC7CD59EF97D8F6FA0843FA9B4ECC3EAEBBB00BE81817442EE87626482751717F7AA83B50F9E46D7FDB59406C2CC773A865D62A28F0CC0EC2665A058106D843D4DC5AB0D6D54CD71B9E5D49C564AA2ED2591EA38B71423B8209F9A0ED3EC218029F7F3BB68E505F5341219D77EBEE2B1E1D7FE7DBC6E2AAE209C33B3936FEDE77BBFEE1C825B253CF471A8CA720B7D19D4400FD3E4F895ED9EE6998B48F5E736DB67949221A58D09DF3A46D80A19452EA6DF072B177B7A026910311C4CCCB201F047095EE277C2229562076856270092668449185F7187F1DB3224ED26B1E1385D4CD9D168DDAE50D7BD8828AD98F2294A95C562E4440E267CC6ADE66431BE726DC5F708B17A6C74262ACD74507713A9FA804034D18258718DCA8B68B0778AC4E30C20927DA2A7FF86954433BF7FDECAA3271798B2962A732DDC64DC31B305FF7A0AC00285C872D71420F47D9379E1FF88C41BD3B6784FF44C3C13EB7D338D335B933A25AF7E02EF013DFA97BC1EE5464764B7A28323F03D8B6F487167EB9E2B75EB56D05FEC7554736E4499C2518DA2DB12CBAD998D57D2E158CEE11DD064EFCD7873AA03D49FE2730B623ED89ACA4901F4B7ECC8267F45A8B5FB606328ABE9F03534D5124A0C53507508968779B48D8B5F8B078BEE13CB553F0CD455AD3E5F29088647DFEF333893507B14862FC4561151F988FDF64C10A0347E4639C1631A1AAE6C2E45C0C6A8A6B5A223267D2FE00A03A1676EE506DF5B653FD2A33806D394DB51AEED1E1E2E415831EE33611BC85BC03C4FF14744017E1D0698246E03EE3C2C17461956E84DD2219FA94C275225C85873040D4E55D13E4D69961E6535DD207128EB17C408C93CC379384C41FD5AD7225F3DA831DC906EE7AC3571FAA9DE3865A32AA89E450AB0A3AB27C7B2556CE051F83CD388E5311649CC0F10D2934D3B1C03187D261FA18DCA9143A356B93EF301C9417EBADC15172F95A23AE609989F2810CCF5A73DF5A11F32F758BC828C4A746281AA16796EFB1BA61C3A040C8E4F6310F5E6791D56E393A67E43CA8E2A854E9CB0C62812A2247673F1393CEA4CDEBA4FAE6D7DF9AE1FC5F529B42B96CA35A7CB9D7F1D0D5E3A2703D996C542098AB868C95ED23292A29B03F1E66CF506A04DE4489E9277EA18EEB6640831468E2896730450BC7D66CCDA43D16C922BF5E2135111543AE66E304EF6DA4B1C2DED21EE7147DB083C68D93626DEC65EB4683A48F5B8BFC948DC74A946955407D07A4895FFBD9E0AFA422EA68911169CD4619871F04757C1FC25B116C0EE359DDDCA217F4B01BE74DB984FEA6776242369D984DB6204328537C8B950DEF4E6D29709BA9D8D07458D74F52BBFF724898C9E3B8EC50C7AE79E923AAD5C6F271DEFF58C4D60BF6B40F475161ABC5ED3B367B66CED47FB1A41259418772ABD05566684F82E71B3CB5EEDABA0D980641154C7517CB97E4865C1148626A895DD91F8F9A7CAB0390D2B53BDEE01F6F6850B92BDA894276B1F28BA16CC6EB7C7373F8A6B60B773CC50DF321F183D6B988643A39AD2DFC630F897EC5BF670494A98515A6F67B7D0DD24475A59D7803F123B90DCAAAE34F4524C2AA09CE010D355861DE171FF84FBB251F4B7807171A034BA294FCBE720A19DED460BFA6D0910D689B43ED771BF2A0A32DC57983DD1CB3ECB9DC384517908524176B18CE4122341B32FB3BCE054D37ACFBDA23D288BD3A5F50EDE94C50D622E3314217E664E3834294F8D9A35D817963F7FDC695F8D4F6CF11AA9C8F9D06C64D3C1E802B28AD70D18519ABCB0AA7D7CED79F665794D4EAEA54C79528D67BB89DBA1836FA2631CD56D21938F9EB35E850E666D9A407670BFC3BF52A76A0E503F386A48E1D01817D5221F24208FE155681ABF17DAC706C7FAE37D5F8BC4BD7C2F1B4D8A58B2050DAA3B6EE30A7D3339D8DAECD917670C91139A22E1C2535F5B1B8A5346B5055FAC588CCACF4A24CE3A7ED52D337144437C6B58603D8644264BDE365A314EFFF707C2EC805978FB9F5EF587EF503143BBA049088D8CC7071DECEF2BD8B119368ADBA9B0AA1294D21A4A1BED8C53E98DC9A4901CE5A551708716B81709E99298545CA8F5F8DBA081DA91501110646CBCD87B5237937013A297099360BE7CEF548E1368A71159283416E355AF6DB1B60DB63BCE45B58667FE3A988F92745249E120F6085C8C02BADB3EAF3BBAAFE4A4746A2FF7A649D4F79B9AD6FA2EB7539E826DC8D7E5C1A8FB7D6FE43C344533F6AA8858C086E27C430FAD8DDC717BCA88621B7763D48F95B96E03AE622E98712E83E84952831A112808C21EC70B577DCA5F95C6C8533EAE25BCF61607DEC1D79F67B725BF332CD1F8AD53F10CE7C4E76E8AD401372960B2ED81F1CBA3B841198F194BF41811641ED109CFB744C175A154E1463B157B7E51061632B2D61FD79D133404BB41F07E0057062AA946DBFFDD9F6C1874F375E43E23F7EBE4DE20304864E1454B8EC1B20F0B9C1DA5849033A8E17B8DF9BEB2104CD0A0BC513A9B1631CDAADA71050BF0645901791E66A79F8BBD42616036B7878E738F53544FD0B3B1197CD03D616F9DFE27100A0FEE9C893B201BA30AF2553D1DFB83C151D00A88CE24310364EC68FA57320D975AD52B5B41A84DC3AC9E70141C14E7A39CD6134DF493FB823FD65953AD02732A831D1A070B1A51C151F4F8E885677D2FD668BD98D466A21EC0272CB6A4209BAFF695C06F69AB2F62A2EA6BE89D2EAAA430F7EE901488B5BFD742C0841C32C4435592F7B9C47892A3CA3C238B70E05CDD695F3C406F04913BC683FA614D94F970D4829EB8A3011CFEAB1FDB62AB95901BB931F2477F10F51F2BEF10899AE201402CB04C8659E2AFDEC11E52893CA47B5F4F6132DAC909D584FB4C2AED9F9C7EF826712CDD758D2ECD2BCEF8A92B12F2E4A10844D3BEEF4D8C0050BFD7DA8F8F1074B0A1B1E2FB2C775B1C94C597F64C90C48E66DFE7A021996081ABB9765C60101898CD0425102EA3D837D12A0BD5B8F9BEA572C10F52543A1E1EEE59957CB8580930DCA478196D4BF9AC228CA26420A2212555749F6D2FB8BA77E404A499B28E1D7787E7F71034B7BFBE09477CF528F3BE1C4FAE63DFBAC334D31F4F7955B2B53D65A455C1D1D90E3B321627390EBFAB52A4628E975B7ABAEDF8635EDC7EEDD66B242415AD8A7906EE5C693DDE91F54BE8264E2874F8B339FDD819D44A363C5FACD294790AA70F119B17DCF952FFF4141D109AA33C5447F4D6879706BAB6759F68CCE683DEBEB406D0D53BC7828F1AD43BFC62D4769816AAA681C6DE8D8AD33DFEE3F77431E2400016025DC6C99CF3FD11237ACD379BA47A8D2E153028E57D335CFF0C42037BB8505552EDB30AEE4B1F20F8960A795E84F8293DBBCFCF112973005C94FE5250B0009681D9E7194A6220EE97A97830DF0EDABB91DFA7F51474EB1A74C95D63950F18880F46C42F0F588A1CADBB5166625605017662B35BC1222E627AC5BA2A36D3E79E7BDCE0E3EB3D0DE35C5E0B9EEFDE386A80568BEF6FAC6DC9F6F08046CDC24D8A9FD88391BE12D2A8FF9DDD0296EA6F1E115CE6D78273561FB8AECD03A50FE8ED7A2AAF161C9643ADA1C41CDDB0D39505C7BEB86561B98C +Digest: 90707213207A4D5DFC33083139BDD2B142F70AC46CC1F3A45EF0D394EBEA806459AED3B9604403C46FCDCB7CF58881303D01C11866E1CE7B99911A6827CBC0BF +Test: Verify +# +Message: 188539F4DE35EB01ABD9E1B18A25E62268DFEBB657CE68F5BB6A2D5A1FBD6943EEC8AB79D9C2E80E66EA10B222D7BACA51A71BB03F3D04A265E50AE15FAE8CD580650B3C7E8EA824430F9F75B9C9B0FD12FD795D33718293309B2286A465D223625A9A80CCCB3FEDA6A046DE62AA96D55688F6AC6B211277E3E6BF5877D2DD804D11B4DB230A1742728303BE7136E543DCC7AA00D866EB62DFCC43077857EA06F3A6406979D941630C317FE6E05D7D73EF24882855457FF1E03A6C2D27DAF16964E538D05E52C1A97F8CE1E0B9DB704DC8B1F7045B6504F30ACE2651292C5A5D4ACB363DF773A5169044185D75293AEB9FB4D3EB58DD55EE71C620AF120462B56467A9EB71730E18956390A34AAAE637E7110755C95E1ED8AA892A0D15753E11FB56A1DBD0821B5F7C77EDEC70DD77855BFBC747BD0CD10ACE6F5172A05CDD33ADEE1B0FBBA7F1C9B82C9E9E4778CFF40BA90A8DE814766A10DE4D62E0BD2FC1FA67F3907149D28B7D495DC4F79D6BE2FD0FDACE6EA6A1F4039D95A371DFA01BC70ECE006209BB569850016E36DBF4411E15ED8E75DD6DDE206A075A3A77D1A6C4C7408D32D291B56A1B437176668D12B850EA7DBB301BA211E729949FFF91E5F63E8D6C8B27585C7EC9A63FD867951C61A9C93552A2ABB02CB5D16613EB39582B1B12173350D59CF6F31C163BE251D4705DEFB34D6518FA7E776B372143DBB9CF6A4315B12917ABB4767D7FA390ECD9B470B87F79BF4BEAE7256A691295B57FE2C22ABFE6701B045998C5178654706FCD724AB4AF07D3FFBD4332D2CA03F08574CC37063C482D6BCDF7E25FB211F8E34A3F51FDA8FE7B932C42050A9E10A8ECD763C1CCFB6F5C5A252FABE74BE5900A18662CE916666361CCFF0F195197AF29A268CAEE2B8DA5364C8D91F1D948B7842867A59EA385AD429B00C8E363514AF112DBA67964D97F4A75682DDA51F7E55C6D73127A7FBDD65F3C6EF0374680DA109ACE83F617F1F6E5CB36E96083AE591DEEB3AD70B9EF328A5D13AAE04FC79849AB30CA6FE8B94F9EDE3C1C67CE4B81276804A0B52FE23D92288F0A393BC58FA52FB80B3220B671F758C1296E20DC8FA37E007DF66058D923C2BA348E8433D89CD95878AEC6EE4477D8DD4ACA92EF680CB6FCFBFF75822D22A208FEAC0348BF07D2C63564C6D2C63BE413329894997D3AEC982458CBF0E1C1ABF205DED44952E1310320AC5AB9FFAA78CBF9BB08FAB7A8D1C65DBE3F404829617C85A50ACE2DC9E9650A2AD4560FF518D60D19685ED5C8D34D66F38AF8E9E1F6D0E13775731D388752B164A9C5CD95E4FB2B5072DE45726825A8EC2BD9DA45847C57516ACF52588A7E0D4FAD6773A9BA7D9B0539C2D7407B9E2D7CCDDDC878C9C04DA019E708AF2E555F2FB6BE5D4091D765CE79DD01BEF073C6E79142C19DA8FA49089E0091BAF3C1837CECF0026516F224AF5A9899A60BDDAC66BA876CB2D99104BBD7630394859EADD6B5D3A791E09A0257BB0CFC293089A3B4B64556873C2C60E9C78BAE4CFFC853048901818A73F2DC23F1C54604F92D5D3460C753F3EA9167C9E760F1ED012548AE1953CD4BB89C6C7DF909ACE7983F374DF7AB11796C09A8F1203CEF3BDB72A9C5E03041B45087DCBDD8ABF932335874C391ACAB71B2B7F714F6B2C12948AE55F827DD491FC2A7084A768D959CC9E09FCAF1C61A7F9B1628349FEB81CB4768CA39B921D26A2849DEBE96803A426809A57B7A1F5AF5858CD2F6A29066DD1D105DF1EB9D32814B1E20C8D47330D4A61934ABA98949AADA0792E96411A2A47EE119DF4E22CEE9599E97A9A55C6884B1DCC1A731A3DDD66EF997318A6CCDBD9E43AB24BAB283A62A7E58BD9D5C985AE436C608754A8C45E132E7A9FB9EF0A040D4D01E8132A2274DEE40A9370252D876BE17930CED800711B445A78A4F7B429567BC7DFEB032E911A39A6D7B6831CC291CD59D146F28715C3B65B182FC56E202E5D52A21AA7642AFEA2FF138A79A682A8F0C4230B8FCCF4D74B0D146FD02382579AAD9F0D9C8E2980697C08E35D83A0F225419260F1275410D2FBAD6A48AA2EBCC77D8EC8ACCE5B8E2E844F60E5E6D9338B28325685831FF78E967AB057B663B689CE95217E94B8CF0D38152207E0A05DACDD0E247F252C515256AC0451D26788D0379F542A4A6FCA5DD7709F1D6715657AE0BC19AA9C8FB6E44D20AEFF7714D11BDB504F326B95DA7DE87A64CB4400EA4E74B91DF52FB0A0266DC6C4295318E82893BFFE8CB2FB0D01F583EB95712FAC6CA1F2A50F8B5AF29E6053A487E0328F5EF372393E4271E14D2751430D9C8CC7197889FB0FB9E2EB4B176BAC06F949FBDD82999B82254AE1D45ED8E6E94806D93EEE611C7E05656D3C59D9EF473AA3FC337141FB6351F94105F265AEE61F56CFA15E5BB96A4446207AB90ED8EA0183B9D58E6B6743AD333426FF25A93851B6095CC21935900BD72B2BE6A910F48C41BE0D6B54C96330176E2DAA16D5D48D48DFED4DB0F8DAEA3549219FDCF10A88D9CB4E65AA814D136EB3A3A855AA523FA5F6BDBE5109FE0AEA2BA5AC301FDA6A12E12CDD889C10F01C6357C83FF49AE483728894797C062B59CB4C597DBB3DD1AFCE674C12F9EE11CB5FCC72E4412AA8A3EC835129D0474110AB90CD3C7C4F4086AA47DDE99448F921A46B33E155EE8AF49D06BC0CBD3E47EC385FA594B56207A5C96954A8925EF133CF2A068A4C4F40F30B077E6367BA39BAA49DE2B175A4B2AA19B36AD39EB92AD53D298D4D08060961093A0602D75F290BC44159C73388C2075161134F35789253CEA0E765E37D1CC1D09BEB7ECA860A925EC2B66E1FAC9CE901D3CAD50E56401C3D69DB80F2ACFBE16774CC908BAF9137245661CE172ABF193AF45120678B0CC0241C1AC07AEA1A21F148A18A7E5AF44BF2262E02363467232A32F62CFBC3F406BCEFE786DB2B8732620064B8CB2745DBA4F7025FBD67AD3A350EC0841B1D2E5A6D340B2F4547E16FC825D891D0A596CD80BDF707D7C7106CA39B9EEDBD4B94626AC7D20F81AADAAAE241EBBB465FCDE1ADCE1A178E8AA7AE044031573678592D53557D0A5974185DF5F42451BFA99801771E8828C94E4D4706AEA3869066DFC8121B0C0E227879728B1961B826B929780B10D12956DA38F0139919E1347DF8CD33B926AAF5E05DB8407A59440D1402C28AC2C4EEB80A4935D2AAAFD3D4FF56C52BA9A2B74CDB1E9F00BA1D0535F0E503F0B559826F5D2A0A1360AFB29C8C5D9F0C3FBE607808794E3BE4B7AFB6E5E8361713772F241E0352FD6F20B58F6551C1AFFCD3324325BED88FEFD98361BA16004845DB924A7B195F67C24CFABED7F8DBD476BEA6E231E75FEDD9BC08FA1E0619EAA3B133D28A020DE91AFC7A8B535499787375D7E00A5F80929B7DE2A05ADD30493659FABBEBC04B1E780B81D8C37D179C9E5846158B9ED7A6D086CAF3FCDC9694FC1BFE845198CB581CA3AE2E6CE9EDC15DFFEEED8C3EDBE34E4F7D31FB1C48734EFA460F0D3ED0A1700884960ED17D8D87678944B14111EA0D643313EEA451B6782DCFD4FEFE4EBB262E0FB2915C6284681F68D0AFD5196B0DDC8D796A8DFBAA12F68631B04FCE97685F30B1C6E5D679E691348490B5379E02D0C65D67584269DBA74FF2967D9E9708480B8AC96F6550024EAC6C0EE6569F7976D8B0657F123C7FFCEC54D019F32CDFF6B5577D653748401C0D7987BE36A04C03FD51D8477845C588013EA1CF1F4C7B45180003253C927A4F133FBC060C3893AD2E704AAB41F2E7B0CAD1860421BA9A172189C7F188FA2BE3B6844AEB822E58896DC79F392ACE679C05993F45BAE01E11590EBCC18280947AA760C6A4CFD57C39BAE35BA7C3C77500D138CB8B7E12E6EDEA3F3E8EC13954395C7E1426DCA4AC629C893EB2F7D9E359A6E587BDA19420DA67DB6AC538A40473FB49D628F3C66501E6EF3B3829A8E0F041743F7FA1B1E8AEC47B99F8048FD034EED06547E0CDD58FF8D75A949774B71AE4CA6CD3ED9B54E52BB10565E5289F217299D8169A2BB56FF0708991538CC08D6959F5C2FEC16A16C6408E85F20242C79FDCA72480DD0F24139C360A0DF1D90246D466E41B9D70F4930532ADA8B9BE58961D2AD6F31F5876A9C220EC93B9EDA85D3DD0F58108601B0DC20963E60ACBD9D2947102B6DFD05A54B1E21088327FFA79AAC87C76D6C6E3FA66E56455C9FCA4D0663B076EE65DCB5B0618C6A0035EC6DCEAEDB4471A74B0CF2134CEBF7EB06526971EA3FC872877BB1F95C56BFAA0E964FA2BA6A25D0AC000C28A2D2D0AE1BC934FF7BF450130195E9AC5504FAB8BD37CE1CDEA264DFD7D2003CD607250DFCB3D10BBE0D9C6B3BF1C666BA8C62B2C88C4805CA3DF1EFF711753AF046A0611C6D9411FC69ADD587BF10E1CE0912EDBD035F3055DE125281F3403E68D2B804CEED3F062B2645A9442A5B8784765E09F6F487EEAA9B72620512A618448B5935023FDA09FAB94708610CF9B358360B14107075EEEBFCE6696F97BA6CADF5E202017736DD975BC622047AF212366CC7275CAF0B44A17089456140705A9595158D1A847934A123D52E5DC032F85C3EB85E6F40007850E6DCB08F7928E125D9BF5D502CE62826064D85740C0B56EE25B05D3CE61AC144D2DC88AEDA808452ABCFBB62BB824E46DF21C8209C277CE8E1EE8960E9D5ECFE7D658229E3826FA4 +Digest: 48F60599E1AF71ECC93BAFB61228B2FF354FA1ADBDA488F0DBF17E1B782B1DF0211FCDBBB9E2B25C6C5F905C45250B764656B5221C0DBE5BBE6A98D70ACCC215 +Test: Verify diff --git a/vendor/cryptopp/vendor_cryptopp/TestVectors/xchacha.txt b/vendor/cryptopp/vendor_cryptopp/TestVectors/xchacha.txt new file mode 100644 index 00000000..bcd216b6 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/TestVectors/xchacha.txt @@ -0,0 +1,75 @@ +AlgorithmType: SymmetricCipher +Name: XChaCha20 +Source: https://tools.ietf.org/html/draft-arciszewski-xchacha +# +Comment: A.2. Example and Test Vector for XChaCha20 +Key: 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f \ + 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f +IV: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f \ + 50 51 52 53 54 55 56 58 +Plaintext: r304 00 +Ciphertext: 29 62 4b 4b 1b 14 0a ce 53 74 0e 40 5b 21 68 54 \ + 0f d7 d6 30 c1 f5 36 fe cd 72 2f c3 cd db a7 f4 \ + cc a9 8c f9 e4 7e 5e 64 d1 15 45 0f 9b 12 5b 54 \ + 44 9f f7 61 41 ca 62 0a 1f 9c fc ab 2a 1a 8a 25 \ + 5e 76 6a 52 66 b8 78 84 61 20 ea 64 ad 99 aa 47 \ + 94 71 e6 3b ef cb d3 7c d1 c2 2a 22 1f e4 62 21 \ + 5c f3 2c 74 89 5b f5 05 86 3c cd dd 48 f6 29 16 \ + dc 65 21 f1 ec 50 a5 ae 08 90 3a a2 59 d9 bf 60 \ + 7c d8 02 6f ba 54 86 04 f1 b6 07 2d 91 bc 91 24 \ + 3a 5b 84 5f 7f d1 71 b0 2e dc 5a 0a 84 cf 28 dd \ + 24 11 46 bc 37 6e 3f 48 df 5e 7f ee 1d 11 04 8c \ + 19 0a 3d 3d eb 0f eb 64 b4 2d 9c 6f de ee 29 0f \ + a0 e6 ae 2c 26 c0 24 9e a8 c1 81 f7 e2 ff d1 00 \ + cb e5 fd 3c 4f 82 71 d6 2b 15 33 0c b8 fd cf 00 \ + b3 df 50 7c a8 c9 24 f7 01 7b 7e 71 2d 15 a2 eb \ + 5c 50 48 44 51 e5 4e 1b 4b 99 5b d8 fd d9 45 97 \ + bb 94 d7 af 0b 2c 04 df 10 ba 08 90 89 9e d9 29 \ + 3a 0f 55 b8 ba fa 99 92 64 03 5f 1d 4f be 7f e0 \ + aa fa 10 9a 62 37 20 27 e5 0e 10 cd fe cc a1 27 +Test: Encrypt +# +Comment: A.2. Example and Test Vector for XChaCha20 +Key: 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f \ + 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f +IV: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f \ + 50 51 52 53 54 55 56 58 +Plaintext: 54 68 65 20 64 68 6f 6c 65 20 28 70 72 6f 6e 6f \ + 75 6e 63 65 64 20 22 64 6f 6c 65 22 29 20 69 73 \ + 20 61 6c 73 6f 20 6b 6e 6f 77 6e 20 61 73 20 74 \ + 68 65 20 41 73 69 61 74 69 63 20 77 69 6c 64 20 \ + 64 6f 67 2c 20 72 65 64 20 64 6f 67 2c 20 61 6e \ + 64 20 77 68 69 73 74 6c 69 6e 67 20 64 6f 67 2e \ + 20 49 74 20 69 73 20 61 62 6f 75 74 20 74 68 65 \ + 20 73 69 7a 65 20 6f 66 20 61 20 47 65 72 6d 61 \ + 6e 20 73 68 65 70 68 65 72 64 20 62 75 74 20 6c \ + 6f 6f 6b 73 20 6d 6f 72 65 20 6c 69 6b 65 20 61 \ + 20 6c 6f 6e 67 2d 6c 65 67 67 65 64 20 66 6f 78 \ + 2e 20 54 68 69 73 20 68 69 67 68 6c 79 20 65 6c \ + 75 73 69 76 65 20 61 6e 64 20 73 6b 69 6c 6c 65 \ + 64 20 6a 75 6d 70 65 72 20 69 73 20 63 6c 61 73 \ + 73 69 66 69 65 64 20 77 69 74 68 20 77 6f 6c 76 \ + 65 73 2c 20 63 6f 79 6f 74 65 73 2c 20 6a 61 63 \ + 6b 61 6c 73 2c 20 61 6e 64 20 66 6f 78 65 73 20 \ + 69 6e 20 74 68 65 20 74 61 78 6f 6e 6f 6d 69 63 \ + 20 66 61 6d 69 6c 79 20 43 61 6e 69 64 61 65 2e +Ciphertext: 7d 0a 2e 6b 7f 7c 65 a2 36 54 26 30 29 4e 06 3b \ + 7a b9 b5 55 a5 d5 14 9a a2 1e 4a e1 e4 fb ce 87 \ + ec c8 e0 8a 8b 5e 35 0a be 62 2b 2f fa 61 7b 20 \ + 2c fa d7 20 32 a3 03 7e 76 ff dc dc 43 76 ee 05 \ + 3a 19 0d 7e 46 ca 1d e0 41 44 85 03 81 b9 cb 29 \ + f0 51 91 53 86 b8 a7 10 b8 ac 4d 02 7b 8b 05 0f \ + 7c ba 58 54 e0 28 d5 64 e4 53 b8 a9 68 82 41 73 \ + fc 16 48 8b 89 70 ca c8 28 f1 1a e5 3c ab d2 01 \ + 12 f8 71 07 df 24 ee 61 83 d2 27 4f e4 c8 b1 48 \ + 55 34 ef 2c 5f bc 1e c2 4b fc 36 63 ef aa 08 bc \ + 04 7d 29 d2 50 43 53 2d b8 39 1a 8a 3d 77 6b f4 \ + 37 2a 69 55 82 7c cb 0c dd 4a f4 03 a7 ce 4c 63 \ + d5 95 c7 5a 43 e0 45 f0 cc e1 f2 9c 8b 93 bd 65 \ + af c5 97 49 22 f2 14 a4 0b 7c 40 2c db 91 ae 73 \ + c0 b6 36 15 cd ad 04 80 68 0f 16 51 5a 7a ce 9d \ + 39 23 64 64 32 8a 37 74 3f fc 28 f4 dd b3 24 f4 \ + d0 f5 bb dc 27 0c 65 b1 74 9a 6e ff f1 fb aa 09 \ + 53 61 75 cc d2 9f b9 e6 05 7b 30 73 20 d3 16 83 \ + 8a 9c 71 f7 0b 5b 59 07 a6 6f 7e a4 9a ad c4 09 +Test: Encrypt diff --git a/vendor/cryptopp/vendor_cryptopp/adv_simd.h b/vendor/cryptopp/vendor_cryptopp/adv_simd.h index 41d68ff1..37696c2c 100644 --- a/vendor/cryptopp/vendor_cryptopp/adv_simd.h +++ b/vendor/cryptopp/vendor_cryptopp/adv_simd.h @@ -49,7 +49,8 @@ #include "misc.h" #include "stdcpp.h" -#if (CRYPTOPP_ARM_NEON_AVAILABLE) +// C1189: error: This header is specific to ARM targets +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(_M_ARM64) # include #endif @@ -112,14 +113,10 @@ inline size_t AdvancedProcessBlocks64_6x2_NEON(F2 func2, F6 func6, CRYPTOPP_ASSERT(outBlocks); CRYPTOPP_ASSERT(length >= 8); -#if (CRYPTOPP_LITTLE_ENDIAN) - const uint32x4_t s_one = {0, 0, 0, 1<<24}; - const uint32x4_t s_two = {0, 2<<24, 0, 2<<24}; -#else - // TODO: verify these constants on ARM-BE - const uint32x4_t s_one = {0, 0, 0, 1}; - const uint32x4_t s_two = {0, 2, 0, 2}; -#endif + const unsigned int w_one[] = {0, 0<<24, 0, 1<<24}; + const unsigned int w_two[] = {0, 2<<24, 0, 2<<24}; + const uint32x4_t s_one = vld1q_u32(w_one); + const uint32x4_t s_two = vld1q_u32(w_two); const size_t blockSize = 8; const size_t neonBlockSize = 16; @@ -357,14 +354,10 @@ inline size_t AdvancedProcessBlocks128_6x1_NEON(F1 func1, F6 func6, CRYPTOPP_ASSERT(outBlocks); CRYPTOPP_ASSERT(length >= 16); -#if (CRYPTOPP_LITTLE_ENDIAN) - const uint32x4_t s_one = {0, 0, 0, 1<<24}; - //const uint32x4_t s_two = {0, 2<<24, 0, 2<<24}; -#else - // TODO: verify these constants on ARM-BE - const uint32x4_t s_one = {0, 0, 0, 1}; - //const uint32x4_t s_two = {0, 2, 0, 2}; -#endif + const unsigned int w_one[] = {0, 0<<24, 0, 1<<24}; + const unsigned int w_two[] = {0, 2<<24, 0, 2<<24}; + const uint32x4_t s_one = vld1q_u32(w_one); + const uint32x4_t s_two = vld1q_u32(w_two); const size_t blockSize = 16; // const size_t neonBlockSize = 16; @@ -502,32 +495,25 @@ inline size_t AdvancedProcessBlocks128_6x1_NEON(F1 func1, F6 func6, /// \tparam F1 function to process 1 128-bit block /// \tparam F4 function to process 4 128-bit blocks /// \tparam W word type of the subkey table -/// \tparam V vector type of the NEON datatype /// \details AdvancedProcessBlocks128_4x1_NEON processes 4 and 1 NEON SIMD words /// at a time. /// \details The subkey type is usually word32 or word64. V is the vector type and it is -/// usually uint32x4_t or uint64x2_t. F1, F4, W and V must use the same word and -/// vector type. The V parameter is used to avoid template argument -/// deduction/substitution failures. -template +/// usually uint32x4_t or uint32x4_t. F1, F4, and W must use the same word and +/// vector type. +template inline size_t AdvancedProcessBlocks128_4x1_NEON(F1 func1, F4 func4, - const V& unused, const W *subKeys, size_t rounds, const byte *inBlocks, + const W *subKeys, size_t rounds, const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) { CRYPTOPP_ASSERT(subKeys); CRYPTOPP_ASSERT(inBlocks); CRYPTOPP_ASSERT(outBlocks); CRYPTOPP_ASSERT(length >= 16); - CRYPTOPP_UNUSED(unused); -#if (CRYPTOPP_LITTLE_ENDIAN) - const uint32x4_t s_one = {0, 0, 0, 1<<24}; - //const uint32x4_t s_two = {0, 2<<24, 0, 2<<24}; -#else - // TODO: verify these constants on ARM-BE - const uint32x4_t s_one = {0, 0, 0, 1}; - //const uint32x4_t s_two = {0, 2, 0, 2}; -#endif + const unsigned int w_one[] = {0, 0<<24, 0, 1<<24}; + const unsigned int w_two[] = {0, 2<<24, 0, 2<<24}; + const uint32x4_t s_one = vld1q_u32(w_one); + const uint32x4_t s_two = vld1q_u32(w_two); const size_t blockSize = 16; // const size_t neonBlockSize = 16; @@ -554,62 +540,62 @@ inline size_t AdvancedProcessBlocks128_4x1_NEON(F1 func1, F4 func4, { while (length >= 4*blockSize) { - uint64x2_t block0, block1, block2, block3; + uint32x4_t block0, block1, block2, block3; if (flags & BT_InBlockIsCounter) { - const uint64x2_t one = vreinterpretq_u64_u32(s_one); - block0 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - block1 = vaddq_u64(block0, one); - block2 = vaddq_u64(block1, one); - block3 = vaddq_u64(block2, one); - vst1q_u8(const_cast(inBlocks), - vreinterpretq_u8_u64(vaddq_u64(block3, one))); + const uint32x4_t one = s_one; + block0 = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); + block1 = vreinterpretq_u32_u64(vaddq_u64(vreinterpretq_u64_u32(block0), vreinterpretq_u64_u32(one))); + block2 = vreinterpretq_u32_u64(vaddq_u64(vreinterpretq_u64_u32(block1), vreinterpretq_u64_u32(one))); + block3 = vreinterpretq_u32_u64(vaddq_u64(vreinterpretq_u64_u32(block2), vreinterpretq_u64_u32(one))); + vst1q_u8(const_cast(inBlocks), vreinterpretq_u8_u64(vaddq_u64( + vreinterpretq_u64_u32(block3), vreinterpretq_u64_u32(one)))); } else { - block0 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); + block0 = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); inBlocks = PtrAdd(inBlocks, inIncrement); - block1 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); + block1 = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); inBlocks = PtrAdd(inBlocks, inIncrement); - block2 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); + block2 = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); inBlocks = PtrAdd(inBlocks, inIncrement); - block3 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); + block3 = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); inBlocks = PtrAdd(inBlocks, inIncrement); } if (xorInput) { - block0 = veorq_u64(block0, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); + block0 = veorq_u32(block0, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = veorq_u64(block1, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); + block1 = veorq_u32(block1, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = veorq_u64(block2, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); + block2 = veorq_u32(block2, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = veorq_u64(block3, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); + block3 = veorq_u32(block3, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); xorBlocks = PtrAdd(xorBlocks, xorIncrement); } - func4((V&)block0, (V&)block1, (V&)block2, (V&)block3, subKeys, static_cast(rounds)); + func4(block0, block1, block2, block3, subKeys, static_cast(rounds)); if (xorOutput) { - block0 = veorq_u64(block0, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); + block0 = veorq_u32(block0, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = veorq_u64(block1, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); + block1 = veorq_u32(block1, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = veorq_u64(block2, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); + block2 = veorq_u32(block2, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = veorq_u64(block3, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); + block3 = veorq_u32(block3, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); xorBlocks = PtrAdd(xorBlocks, xorIncrement); } - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block0)); + vst1q_u8(outBlocks, vreinterpretq_u8_u32(block0)); outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block1)); + vst1q_u8(outBlocks, vreinterpretq_u8_u32(block1)); outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block2)); + vst1q_u8(outBlocks, vreinterpretq_u8_u32(block2)); outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block3)); + vst1q_u8(outBlocks, vreinterpretq_u8_u32(block3)); outBlocks = PtrAdd(outBlocks, outIncrement); length -= 4*blockSize; @@ -618,20 +604,20 @@ inline size_t AdvancedProcessBlocks128_4x1_NEON(F1 func1, F4 func4, while (length >= blockSize) { - uint64x2_t block = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); + uint32x4_t block = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); if (xorInput) - block = veorq_u64(block, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); + block = veorq_u32(block, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); if (flags & BT_InBlockIsCounter) const_cast(inBlocks)[15]++; - func1( (V&)block, subKeys, static_cast(rounds)); + func1(block, subKeys, static_cast(rounds)); if (xorOutput) - block = veorq_u64(block, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); + block = veorq_u32(block, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block)); + vst1q_u8(outBlocks, vreinterpretq_u8_u32(block)); inBlocks = PtrAdd(inBlocks, inIncrement); outBlocks = PtrAdd(outBlocks, outIncrement); @@ -660,14 +646,10 @@ inline size_t AdvancedProcessBlocks128_6x2_NEON(F2 func2, F6 func6, CRYPTOPP_ASSERT(outBlocks); CRYPTOPP_ASSERT(length >= 16); -#if (CRYPTOPP_LITTLE_ENDIAN) - const uint32x4_t s_one = {0, 0, 0, 1<<24}; - //const uint32x4_t s_two = {0, 2<<24, 0, 2<<24}; -#else - // TODO: verify these constants on ARM-BE - const uint32x4_t s_one = {0, 0, 0, 1}; - //const uint32x4_t s_two = {0, 2, 0, 2}; -#endif + const unsigned int w_one[] = {0, 0<<24, 0, 1<<24}; + const unsigned int w_two[] = {0, 2<<24, 0, 2<<24}; + const uint32x4_t s_one = vld1q_u32(w_one); + const uint32x4_t s_two = vld1q_u32(w_two); const size_t blockSize = 16; // const size_t neonBlockSize = 16; diff --git a/vendor/cryptopp/vendor_cryptopp/aria_simd.cpp b/vendor/cryptopp/vendor_cryptopp/aria_simd.cpp index 536cfb84..ecdc9a65 100644 --- a/vendor/cryptopp/vendor_cryptopp/aria_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/aria_simd.cpp @@ -14,12 +14,11 @@ # include #endif -#if (CRYPTOPP_ARM_NEON_AVAILABLE) +// C1189: error: This header is specific to ARM targets +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(_M_ARM64) # include #endif -// Can't use CRYPTOPP_ARM_XXX_AVAILABLE because too many -// compilers don't follow ACLE conventions for the include. #if (CRYPTOPP_ARM_ACLE_AVAILABLE) # include # include @@ -47,7 +46,7 @@ using CryptoPP::byte; using CryptoPP::word32; inline byte ARIA_BRF(const word32 x, const int y) { - return GETBYTE(x, y); + return static_cast(GETBYTE(x, y)); } ANONYMOUS_NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/arm_simd.h b/vendor/cryptopp/vendor_cryptopp/arm_simd.h new file mode 100644 index 00000000..71310781 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/arm_simd.h @@ -0,0 +1,189 @@ +// arm_simd.h - written and placed in public domain by Jeffrey Walton + +/// \file arm_simd.h +/// \brief Support functions for ARM and vector operations + +#ifndef CRYPTOPP_ARM_SIMD_H +#define CRYPTOPP_ARM_SIMD_H + +#include "config.h" + +// C1189: error: This header is specific to ARM targets +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(_M_ARM64) +# include +#endif + +#if (CRYPTOPP_ARM_ACLE_AVAILABLE) +# include +# include +#endif + +#if (CRYPTOPP_ARM_PMULL_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) + +/// \brief Polynomial multiplication +/// \param a the first term +/// \param b the second term +/// \returns vector product +/// \details PMULL_00() performs polynomial multiplication and presents +/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x00). +/// The 0x00 indicates the low 64-bits of a and b +/// are multiplied. +/// \note An Intel XMM register is composed of 128-bits. The leftmost bit +/// is MSB and numbered 127, while the the rightmost bit is LSB and +/// numbered 0. +/// \since Crypto++ 8.0 +inline uint64x2_t PMULL_00(const uint64x2_t a, const uint64x2_t b) +{ +#if defined(_MSC_VER) + const __n64 x = { vgetq_lane_u64(a, 0) }; + const __n64 y = { vgetq_lane_u64(b, 0) }; + return vmull_p64(x, y); +#elif defined(__GNUC__) + uint64x2_t r; + __asm __volatile("pmull %0.1q, %1.1d, %2.1d \n\t" + :"=w" (r) : "w" (a), "w" (b) ); + return r; +#else + return (uint64x2_t)(vmull_p64( + vgetq_lane_u64(vreinterpretq_u64_u8(a),0), + vgetq_lane_u64(vreinterpretq_u64_u8(b),0))); +#endif +} + +/// \brief Polynomial multiplication +/// \param a the first term +/// \param b the second term +/// \returns vector product +/// \details PMULL_01 performs() polynomial multiplication and presents +/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x01). +/// The 0x01 indicates the low 64-bits of a and high +/// 64-bits of b are multiplied. +/// \note An Intel XMM register is composed of 128-bits. The leftmost bit +/// is MSB and numbered 127, while the the rightmost bit is LSB and +/// numbered 0. +/// \since Crypto++ 8.0 +inline uint64x2_t PMULL_01(const uint64x2_t a, const uint64x2_t b) +{ +#if defined(_MSC_VER) + const __n64 x = { vgetq_lane_u64(a, 0) }; + const __n64 y = { vgetq_lane_u64(b, 1) }; + return vmull_p64(x, y); +#elif defined(__GNUC__) + uint64x2_t r; + __asm __volatile("pmull %0.1q, %1.1d, %2.1d \n\t" + :"=w" (r) : "w" (a), "w" (vget_high_u64(b)) ); + return r; +#else + return (uint64x2_t)(vmull_p64( + vgetq_lane_u64(vreinterpretq_u64_u8(a),0), + vgetq_lane_u64(vreinterpretq_u64_u8(b),1))); +#endif +} + +/// \brief Polynomial multiplication +/// \param a the first term +/// \param b the second term +/// \returns vector product +/// \details PMULL_10() performs polynomial multiplication and presents +/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x10). +/// The 0x10 indicates the high 64-bits of a and low +/// 64-bits of b are multiplied. +/// \note An Intel XMM register is composed of 128-bits. The leftmost bit +/// is MSB and numbered 127, while the the rightmost bit is LSB and +/// numbered 0. +/// \since Crypto++ 8.0 +inline uint64x2_t PMULL_10(const uint64x2_t a, const uint64x2_t b) +{ +#if defined(_MSC_VER) + const __n64 x = { vgetq_lane_u64(a, 1) }; + const __n64 y = { vgetq_lane_u64(b, 0) }; + return vmull_p64(x, y); +#elif defined(__GNUC__) + uint64x2_t r; + __asm __volatile("pmull %0.1q, %1.1d, %2.1d \n\t" + :"=w" (r) : "w" (vget_high_u64(a)), "w" (b) ); + return r; +#else + return (uint64x2_t)(vmull_p64( + vgetq_lane_u64(vreinterpretq_u64_u8(a),1), + vgetq_lane_u64(vreinterpretq_u64_u8(b),0))); +#endif +} + +/// \brief Polynomial multiplication +/// \param a the first term +/// \param b the second term +/// \returns vector product +/// \details PMULL_11() performs polynomial multiplication and presents +/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x11). +/// The 0x11 indicates the high 64-bits of a and b +/// are multiplied. +/// \note An Intel XMM register is composed of 128-bits. The leftmost bit +/// is MSB and numbered 127, while the the rightmost bit is LSB and +/// numbered 0. +/// \since Crypto++ 8.0 +inline uint64x2_t PMULL_11(const uint64x2_t a, const uint64x2_t b) +{ +#if defined(_MSC_VER) + const __n64 x = { vgetq_lane_u64(a, 1) }; + const __n64 y = { vgetq_lane_u64(b, 1) }; + return vmull_p64(x, y); +#elif defined(__GNUC__) + uint64x2_t r; + __asm __volatile("pmull2 %0.1q, %1.2d, %2.2d \n\t" + :"=w" (r) : "w" (a), "w" (b) ); + return r; +#else + return (uint64x2_t)(vmull_p64( + vgetq_lane_u64(vreinterpretq_u64_u8(a),1), + vgetq_lane_u64(vreinterpretq_u64_u8(b),1))); +#endif +} + +/// \brief Vector extraction +/// \param a the first term +/// \param b the second term +/// \param c the byte count +/// \returns vector +/// \details VEXT_U8() extracts the first c bytes of vector +/// a and the remaining bytes in b. +/// \since Crypto++ 8.0 +inline uint64x2_t VEXT_U8(uint64x2_t a, uint64x2_t b, unsigned int c) +{ +#if defined(_MSC_VER) + return (uint64x2_t)vextq_u8( + vreinterpretq_u8_u64(a), vreinterpretq_u8_u64(b), c); +#else + uint64x2_t r; + __asm __volatile("ext %0.16b, %1.16b, %2.16b, %3 \n\t" + :"=w" (r) : "w" (a), "w" (b), "I" (c) ); + return r; +#endif +} + +/// \brief Vector extraction +/// \tparam C the byte count +/// \param a the first term +/// \param b the second term +/// \returns vector +/// \details VEXT_U8() extracts the first C bytes of vector +/// a and the remaining bytes in b. +/// \since Crypto++ 8.0 +template +inline uint64x2_t VEXT_U8(uint64x2_t a, uint64x2_t b) +{ + // https://github.com/weidai11/cryptopp/issues/366 +#if defined(_MSC_VER) + return (uint64x2_t)vextq_u8( + vreinterpretq_u8_u64(a), vreinterpretq_u8_u64(b), C); +#else + uint64x2_t r; + __asm __volatile("ext %0.16b, %1.16b, %2.16b, %3 \n\t" + :"=w" (r) : "w" (a), "w" (b), "I" (C) ); + return r; +#endif +} + +#endif // CRYPTOPP_ARM_PMULL_AVAILABLE + +#endif // CRYPTOPP_ARM_SIMD_H diff --git a/vendor/cryptopp/vendor_cryptopp/authenc.cpp b/vendor/cryptopp/vendor_cryptopp/authenc.cpp index bb6cf2c0..2ac9362a 100644 --- a/vendor/cryptopp/vendor_cryptopp/authenc.cpp +++ b/vendor/cryptopp/vendor_cryptopp/authenc.cpp @@ -10,11 +10,15 @@ NAMESPACE_BEGIN(CryptoPP) void AuthenticatedSymmetricCipherBase::AuthenticateData(const byte *input, size_t len) { + // UBsan finding with -std=c++03 using memcpy + CRYPTOPP_ASSERT(input && len); + if(!input || !len) return; + unsigned int blockSize = AuthenticationBlockSize(); unsigned int &num = m_bufferedDataLength; byte* data = m_buffer.begin(); - if (num != 0) // process left over data + if (data && num) // process left over data { if (num+len >= blockSize) { @@ -41,7 +45,8 @@ void AuthenticatedSymmetricCipherBase::AuthenticateData(const byte *input, size_ len = leftOver; } - memcpy(data, input, len); + if (data && len) + memcpy(data, input, len); num = (unsigned int)len; } @@ -74,6 +79,7 @@ void AuthenticatedSymmetricCipherBase::Resynchronize(const byte *iv, int length) void AuthenticatedSymmetricCipherBase::Update(const byte *input, size_t length) { + // Part of original authenc.cpp code. Don't remove it. if (length == 0) {return;} switch (m_state) @@ -102,9 +108,9 @@ void AuthenticatedSymmetricCipherBase::Update(const byte *input, size_t length) void AuthenticatedSymmetricCipherBase::ProcessData(byte *outString, const byte *inString, size_t length) { - m_totalMessageLength += length; - if (m_state >= State_IVSet && m_totalMessageLength > MaxMessageLength()) + if (m_state >= State_IVSet && length > MaxMessageLength()-m_totalMessageLength) throw InvalidArgument(AlgorithmName() + ": message length exceeds maximum"); + m_totalMessageLength += length; reswitch: switch (m_state) diff --git a/vendor/cryptopp/vendor_cryptopp/authenc.h b/vendor/cryptopp/vendor_cryptopp/authenc.h index 236ff21d..980de0b4 100644 --- a/vendor/cryptopp/vendor_cryptopp/authenc.h +++ b/vendor/cryptopp/vendor_cryptopp/authenc.h @@ -60,7 +60,7 @@ protected: void AuthenticateData(const byte *data, size_t len); const SymmetricCipher & GetSymmetricCipher() const - {return const_cast(this)->AccessSymmetricCipher();}; + {return const_cast(this)->AccessSymmetricCipher();} virtual SymmetricCipher & AccessSymmetricCipher() =0; virtual bool AuthenticationIsOnPlaintext() const =0; diff --git a/vendor/cryptopp/vendor_cryptopp/bench1.cpp b/vendor/cryptopp/vendor_cryptopp/bench1.cpp index 4398fa9f..04a2e799 100644 --- a/vendor/cryptopp/vendor_cryptopp/bench1.cpp +++ b/vendor/cryptopp/vendor_cryptopp/bench1.cpp @@ -434,17 +434,17 @@ void Benchmark1(double t, double hertz) BenchMarkByNameKeyLess("AutoSeededX917RNG(AES)"); #endif BenchMarkByNameKeyLess("MT19937"); -#if (CRYPTOPP_BOOL_X86) +#if (CRYPTOPP_BOOL_X86) && !defined(CRYPTOPP_DISABLE_ASM) if (HasPadlockRNG()) BenchMarkByNameKeyLess("PadlockRNG"); #endif -#if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64) +#if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64) && !defined(CRYPTOPP_DISABLE_ASM) if (HasRDRAND()) BenchMarkByNameKeyLess("RDRAND"); if (HasRDSEED()) BenchMarkByNameKeyLess("RDSEED"); #endif -#if (CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) +#if (CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) && !defined(CRYPTOPP_DISABLE_ASM) if (HasDARN()) BenchMarkByNameKeyLess("DARN"); #endif diff --git a/vendor/cryptopp/vendor_cryptopp/bench2.cpp b/vendor/cryptopp/vendor_cryptopp/bench2.cpp index 38da6224..3961d02e 100644 --- a/vendor/cryptopp/vendor_cryptopp/bench2.cpp +++ b/vendor/cryptopp/vendor_cryptopp/bench2.cpp @@ -125,6 +125,7 @@ void Benchmark2(double t, double hertz) BenchMarkByName("CMAC(AES)"); BenchMarkByName("DMAC(AES)"); BenchMarkByName("Poly1305(AES)"); + BenchMarkByName("Poly1305TLS"); BenchMarkByName("BLAKE2s"); BenchMarkByName("BLAKE2b"); BenchMarkByName("SipHash-2-4"); @@ -141,6 +142,7 @@ void Benchmark2(double t, double hertz) BenchMarkByName("ChaCha", 0, "ChaCha20"); BenchMarkByName("ChaCha", 0, "ChaCha12", MakeParameters(Name::Rounds(), 12)); BenchMarkByName("ChaCha", 0, "ChaCha8", MakeParameters(Name::Rounds(), 8)); + BenchMarkByName("ChaChaTLS"); BenchMarkByName("Sosemanuk"); BenchMarkByName("Rabbit"); BenchMarkByName("RabbitWithIV"); @@ -245,6 +247,8 @@ void Benchmark2(double t, double hertz) } BenchMarkByName2("AES/CCM"); BenchMarkByName2("AES/EAX"); + BenchMarkByName2("ChaCha20/Poly1305"); + BenchMarkByName2("XChaCha20/Poly1305"); } std::cout << "\n" << std::endl; diff --git a/vendor/cryptopp/vendor_cryptopp/blake2b_simd.cpp b/vendor/cryptopp/vendor_cryptopp/blake2b_simd.cpp index ca5aa054..9a220bd1 100644 --- a/vendor/cryptopp/vendor_cryptopp/blake2b_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/blake2b_simd.cpp @@ -38,12 +38,11 @@ # include #endif -#if (CRYPTOPP_ARM_NEON_AVAILABLE) +// C1189: error: This header is specific to ARM targets +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(_M_ARM64) # include #endif -// Can't use CRYPTOPP_ARM_XXX_AVAILABLE because too many -// compilers don't follow ACLE conventions for the include. #if (CRYPTOPP_ARM_ACLE_AVAILABLE) # include # include diff --git a/vendor/cryptopp/vendor_cryptopp/blake2s_simd.cpp b/vendor/cryptopp/vendor_cryptopp/blake2s_simd.cpp index dece4ec5..4b46c525 100644 --- a/vendor/cryptopp/vendor_cryptopp/blake2s_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/blake2s_simd.cpp @@ -49,12 +49,11 @@ # include #endif -#if (CRYPTOPP_ARM_NEON_AVAILABLE) +// C1189: error: This header is specific to ARM targets +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(_M_ARM64) # include #endif -// Can't use CRYPTOPP_ARM_XXX_AVAILABLE because too many -// compilers don't follow ACLE conventions for the include. #if (CRYPTOPP_ARM_ACLE_AVAILABLE) # include # include @@ -849,6 +848,7 @@ uint32x4_p VectorSet32<2,0,2,0>(const uint32x4_p a, const uint32x4_p b, const uint32x4_p c, const uint32x4_p d) { // a=b, c=d, mask is {2,0, 2,0} + CRYPTOPP_UNUSED(b); CRYPTOPP_UNUSED(d); const uint8x16_p mask = {16,17,18,19, 24,25,26,27, 0,1,2,3, 8,9,10,11}; return VecPermute(a, c, mask); } @@ -858,6 +858,7 @@ uint32x4_p VectorSet32<3,1,3,1>(const uint32x4_p a, const uint32x4_p b, const uint32x4_p c, const uint32x4_p d) { // a=b, c=d, mask is {3,1, 3,1} + CRYPTOPP_UNUSED(b); CRYPTOPP_UNUSED(d); const uint8x16_p mask = {20,21,22,23, 28,29,30,31, 4,5,6,7, 12,13,14,15}; return VecPermute(a, c, mask); } diff --git a/vendor/cryptopp/vendor_cryptopp/ccm.h b/vendor/cryptopp/vendor_cryptopp/ccm.h index c63c98b8..5207a2fd 100644 --- a/vendor/cryptopp/vendor_cryptopp/ccm.h +++ b/vendor/cryptopp/vendor_cryptopp/ccm.h @@ -73,7 +73,7 @@ protected: virtual BlockCipher & AccessBlockCipher() =0; virtual int DefaultDigestSize() const =0; - const BlockCipher & GetBlockCipher() const {return const_cast(this)->AccessBlockCipher();}; + const BlockCipher & GetBlockCipher() const {return const_cast(this)->AccessBlockCipher();} byte *CBC_Buffer() {return m_buffer+REQUIRED_BLOCKSIZE;} enum {REQUIRED_BLOCKSIZE = 16}; diff --git a/vendor/cryptopp/vendor_cryptopp/chacha.cpp b/vendor/cryptopp/vendor_cryptopp/chacha.cpp index 43721b7b..dccde301 100644 --- a/vendor/cryptopp/vendor_cryptopp/chacha.cpp +++ b/vendor/cryptopp/vendor_cryptopp/chacha.cpp @@ -10,19 +10,23 @@ #include "misc.h" #include "cpu.h" +// Internal compiler error in GCC 3.3 and below +#if defined(__GNUC__) && (__GNUC__ < 4) +# undef CRYPTOPP_SSE2_INTRIN_AVAILABLE +#endif + NAMESPACE_BEGIN(CryptoPP) #if (CRYPTOPP_ARM_NEON_AVAILABLE) extern void ChaCha_OperateKeystream_NEON(const word32 *state, const byte* input, byte *output, unsigned int rounds); #endif -#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE) -extern void ChaCha_OperateKeystream_SSE2(const word32 *state, const byte* input, byte *output, unsigned int rounds); -#endif - #if (CRYPTOPP_AVX2_AVAILABLE) extern void ChaCha_OperateKeystream_AVX2(const word32 *state, const byte* input, byte *output, unsigned int rounds); #endif +#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE) +extern void ChaCha_OperateKeystream_SSE2(const word32 *state, const byte* input, byte *output, unsigned int rounds); +#endif #if (CRYPTOPP_POWER7_AVAILABLE) extern void ChaCha_OperateKeystream_POWER7(const word32 *state, const byte* input, byte *output, unsigned int rounds); @@ -30,6 +34,19 @@ extern void ChaCha_OperateKeystream_POWER7(const word32 *state, const byte* inpu extern void ChaCha_OperateKeystream_ALTIVEC(const word32 *state, const byte* input, byte *output, unsigned int rounds); #endif +#if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_DOXYGEN_PROCESSING) +void ChaCha_TestInstantiations() +{ + ChaCha::Encryption x; + ChaChaTLS::Encryption y; + XChaCha20::Encryption z; +} +#endif + +NAMESPACE_END // CryptoPP + +////////////////////////////// ChaCha Core ////////////////////////////// + #define CHACHA_QUARTER_ROUND(a,b,c,d) \ a += b; d ^= a; d = rotlConstant<16,word32>(d); \ c += d; b ^= c; b = rotlConstant<12,word32>(b); \ @@ -37,43 +54,210 @@ extern void ChaCha_OperateKeystream_ALTIVEC(const word32 *state, const byte* inp c += d; b ^= c; b = rotlConstant<7,word32>(b); #define CHACHA_OUTPUT(x){\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 0, x0 + m_state[0]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 1, x1 + m_state[1]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 2, x2 + m_state[2]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 3, x3 + m_state[3]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 4, x4 + m_state[4]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 5, x5 + m_state[5]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 6, x6 + m_state[6]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 7, x7 + m_state[7]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 8, x8 + m_state[8]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 9, x9 + m_state[9]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 10, x10 + m_state[10]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 11, x11 + m_state[11]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 12, x12 + m_state[12]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 13, x13 + m_state[13]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 14, x14 + m_state[14]);\ - CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 15, x15 + m_state[15]);} + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 0, x0 + state[0]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 1, x1 + state[1]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 2, x2 + state[2]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 3, x3 + state[3]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 4, x4 + state[4]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 5, x5 + state[5]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 6, x6 + state[6]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 7, x7 + state[7]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 8, x8 + state[8]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 9, x9 + state[9]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 10, x10 + state[10]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 11, x11 + state[11]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 12, x12 + state[12]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 13, x13 + state[13]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 14, x14 + state[14]);\ + CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 15, x15 + state[15]);} -#if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_DOXYGEN_PROCESSING) -void ChaCha_TestInstantiations() +ANONYMOUS_NAMESPACE_BEGIN + +// Hacks... Bring in all symbols, and supply +// the stuff the templates normally provide. +using namespace CryptoPP; +typedef word32 WordType; +enum {BYTES_PER_ITERATION=64}; + +// MultiBlockSafe detects a condition that can arise in the SIMD +// implementations where we overflow one of the 32-bit state words during +// addition in an intermediate result. Preconditions for the issue include +// a user seeks to around 2^32 blocks (256 GB of data) for ChaCha; or a +// user specifies an arbitrarily large initial counter block for ChaChaTLS. +// Also see https://github.com/weidai11/cryptopp/issues/732. +inline bool MultiBlockSafe(unsigned int ctrLow, unsigned int blocks) { - ChaCha::Encryption x; + return 0xffffffff - ctrLow > blocks; } + +// OperateKeystream always produces a key stream. The key stream is written +// to output. Optionally a message may be supplied to xor with the key stream. +// The message is input, and output = output ^ input. +void ChaCha_OperateKeystream(KeystreamOperation operation, + word32 state[16], word32& ctrLow, word32& ctrHigh, word32 rounds, + byte *output, const byte *input, size_t iterationCount) +{ + do + { +#if (CRYPTOPP_AVX2_AVAILABLE) + if (HasAVX2()) + { + while (iterationCount >= 8 && MultiBlockSafe(state[12], 8)) + { + const bool xorInput = (operation & INPUT_NULL) != INPUT_NULL; + ChaCha_OperateKeystream_AVX2(state, xorInput ? input : NULLPTR, output, rounds); + + // MultiBlockSafe avoids overflow on the counter words + state[12] += 8; + + input += (!!xorInput) * 8 * BYTES_PER_ITERATION; + output += 8 * BYTES_PER_ITERATION; + iterationCount -= 8; + } + } #endif -std::string ChaCha_Policy::AlgorithmName() const -{ - return std::string("ChaCha")+IntToString(m_rounds); +#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE) + if (HasSSE2()) + { + while (iterationCount >= 4 && MultiBlockSafe(state[12], 4)) + { + const bool xorInput = (operation & INPUT_NULL) != INPUT_NULL; + ChaCha_OperateKeystream_SSE2(state, xorInput ? input : NULLPTR, output, rounds); + + // MultiBlockSafe avoids overflow on the counter words + state[12] += 4; + + input += (!!xorInput)*4*BYTES_PER_ITERATION; + output += 4*BYTES_PER_ITERATION; + iterationCount -= 4; + } + } +#endif + +#if (CRYPTOPP_ARM_NEON_AVAILABLE) + if (HasNEON()) + { + while (iterationCount >= 4 && MultiBlockSafe(state[12], 4)) + { + const bool xorInput = (operation & INPUT_NULL) != INPUT_NULL; + ChaCha_OperateKeystream_NEON(state, xorInput ? input : NULLPTR, output, rounds); + + // MultiBlockSafe avoids overflow on the counter words + state[12] += 4; + + input += (!!xorInput)*4*BYTES_PER_ITERATION; + output += 4*BYTES_PER_ITERATION; + iterationCount -= 4; + } + } +#endif + +#if (CRYPTOPP_POWER7_AVAILABLE) + if (HasPower7()) + { + while (iterationCount >= 4 && MultiBlockSafe(state[12], 4)) + { + const bool xorInput = (operation & INPUT_NULL) != INPUT_NULL; + ChaCha_OperateKeystream_POWER7(state, xorInput ? input : NULLPTR, output, rounds); + + // MultiBlockSafe avoids overflow on the counter words + state[12] += 4; + + input += (!!xorInput)*4*BYTES_PER_ITERATION; + output += 4*BYTES_PER_ITERATION; + iterationCount -= 4; + } + } +#elif (CRYPTOPP_ALTIVEC_AVAILABLE) + if (HasAltivec()) + { + while (iterationCount >= 4 && MultiBlockSafe(state[12], 4)) + { + const bool xorInput = (operation & INPUT_NULL) != INPUT_NULL; + ChaCha_OperateKeystream_ALTIVEC(state, xorInput ? input : NULLPTR, output, rounds); + + // MultiBlockSafe avoids overflow on the counter words + state[12] += 4; + + input += (!!xorInput)*4*BYTES_PER_ITERATION; + output += 4*BYTES_PER_ITERATION; + iterationCount -= 4; + } + } +#endif + + if (iterationCount) + { + word32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15; + + x0 = state[0]; x1 = state[1]; x2 = state[2]; x3 = state[3]; + x4 = state[4]; x5 = state[5]; x6 = state[6]; x7 = state[7]; + x8 = state[8]; x9 = state[9]; x10 = state[10]; x11 = state[11]; + x12 = state[12]; x13 = state[13]; x14 = state[14]; x15 = state[15]; + + for (int i = static_cast(rounds); i > 0; i -= 2) + { + CHACHA_QUARTER_ROUND(x0, x4, x8, x12); + CHACHA_QUARTER_ROUND(x1, x5, x9, x13); + CHACHA_QUARTER_ROUND(x2, x6, x10, x14); + CHACHA_QUARTER_ROUND(x3, x7, x11, x15); + + CHACHA_QUARTER_ROUND(x0, x5, x10, x15); + CHACHA_QUARTER_ROUND(x1, x6, x11, x12); + CHACHA_QUARTER_ROUND(x2, x7, x8, x13); + CHACHA_QUARTER_ROUND(x3, x4, x9, x14); + } + + CRYPTOPP_KEYSTREAM_OUTPUT_SWITCH(CHACHA_OUTPUT, BYTES_PER_ITERATION); + + // This is state[12] and state[13] from ChaCha. In the case of + // ChaChaTLS ctrHigh is a reference to a discard value. + if (++ctrLow == 0) + ctrHigh++; + } + + // We may re-enter a SIMD keystream operation from here. + } while (iterationCount--); } -std::string ChaCha_Policy::AlgorithmProvider() const +// XChaCha key derivation +void HChaCha_OperateKeystream(const word32 state[16], word32 output[8]) +{ + word32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15; + + x0 = state[0]; x1 = state[1]; x2 = state[2]; x3 = state[3]; + x4 = state[4]; x5 = state[5]; x6 = state[6]; x7 = state[7]; + x8 = state[8]; x9 = state[9]; x10 = state[10]; x11 = state[11]; + x12 = state[12]; x13 = state[13]; x14 = state[14]; x15 = state[15]; + + for (int i = 20; i > 0; i -= 2) + { + CHACHA_QUARTER_ROUND(x0, x4, x8, x12); + CHACHA_QUARTER_ROUND(x1, x5, x9, x13); + CHACHA_QUARTER_ROUND(x2, x6, x10, x14); + CHACHA_QUARTER_ROUND(x3, x7, x11, x15); + + CHACHA_QUARTER_ROUND(x0, x5, x10, x15); + CHACHA_QUARTER_ROUND(x1, x6, x11, x12); + CHACHA_QUARTER_ROUND(x2, x7, x8, x13); + CHACHA_QUARTER_ROUND(x3, x4, x9, x14); + } + + output[0] = x0; output[1] = x1; + output[2] = x2; output[3] = x3; + output[4] = x12; output[5] = x13; + output[6] = x14; output[7] = x15; +} + +std::string ChaCha_AlgorithmProvider() { #if (CRYPTOPP_AVX2_AVAILABLE) if (HasAVX2()) return "AVX2"; else #endif -#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE) +#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE) if (HasSSE2()) return "SSE2"; else @@ -95,52 +279,14 @@ std::string ChaCha_Policy::AlgorithmProvider() const return "C++"; } -void ChaCha_Policy::CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length) -{ - CRYPTOPP_UNUSED(params); - CRYPTOPP_ASSERT(length == 16 || length == 32); - - m_rounds = params.GetIntValueWithDefault(Name::Rounds(), 20); - if (!(m_rounds == 8 || m_rounds == 12 || m_rounds == 20)) - throw InvalidRounds(ChaCha::StaticAlgorithmName(), m_rounds); - - // "expand 16-byte k" or "expand 32-byte k" - m_state[0] = 0x61707865; - m_state[1] = (length == 16) ? 0x3120646e : 0x3320646e; - m_state[2] = (length == 16) ? 0x79622d36 : 0x79622d32; - m_state[3] = 0x6b206574; - - GetBlock get1(key); - get1(m_state[4])(m_state[5])(m_state[6])(m_state[7]); - - GetBlock get2(key + ((length == 32) ? 16 : 0)); - get2(m_state[8])(m_state[9])(m_state[10])(m_state[11]); -} - -void ChaCha_Policy::CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length) -{ - CRYPTOPP_UNUSED(keystreamBuffer), CRYPTOPP_UNUSED(length); - CRYPTOPP_ASSERT(length==8); - - GetBlock get(IV); - m_state[12] = m_state[13] = 0; - get(m_state[14])(m_state[15]); -} - -void ChaCha_Policy::SeekToIteration(lword iterationCount) -{ - m_state[12] = (word32)iterationCount; // low word - m_state[13] = (word32)SafeRightShift<32>(iterationCount); -} - -unsigned int ChaCha_Policy::GetAlignment() const +unsigned int ChaCha_GetAlignment() { #if (CRYPTOPP_AVX2_AVAILABLE) if (HasAVX2()) return 16; else #endif -#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE) +#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE) if (HasSSE2()) return 16; else @@ -153,14 +299,14 @@ unsigned int ChaCha_Policy::GetAlignment() const return GetAlignmentOf(); } -unsigned int ChaCha_Policy::GetOptimalBlockSize() const +unsigned int ChaCha_GetOptimalBlockSize() { #if (CRYPTOPP_AVX2_AVAILABLE) if (HasAVX2()) return 8 * BYTES_PER_ITERATION; else #endif -#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE) +#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE) if (HasSSE2()) return 4*BYTES_PER_ITERATION; else @@ -178,147 +324,267 @@ unsigned int ChaCha_Policy::GetOptimalBlockSize() const return BYTES_PER_ITERATION; } -bool ChaCha_Policy::MultiBlockSafe(unsigned int blocks) const +ANONYMOUS_NAMESPACE_END + +NAMESPACE_BEGIN(CryptoPP) + +////////////////////////////// Bernstein ChaCha ////////////////////////////// + +std::string ChaCha_Policy::AlgorithmName() const { - return 0xffffffff - m_state[12] > blocks; + return std::string("ChaCha")+IntToString(m_rounds); +} + +std::string ChaCha_Policy::AlgorithmProvider() const +{ + return ChaCha_AlgorithmProvider(); +} + +void ChaCha_Policy::CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length) +{ + CRYPTOPP_ASSERT(key); CRYPTOPP_ASSERT(length == 16 || length == 32); + CRYPTOPP_UNUSED(key); CRYPTOPP_UNUSED(length); + + // Use previous rounds as the default value + int rounds = params.GetIntValueWithDefault(Name::Rounds(), m_rounds); + if (rounds != 20 && rounds != 12 && rounds != 8) + throw InvalidRounds(ChaCha::StaticAlgorithmName(), rounds); + + // Latch a good value + m_rounds = rounds; + + // "expand 16-byte k" or "expand 32-byte k" + m_state[0] = 0x61707865; + m_state[1] = (length == 16) ? 0x3120646e : 0x3320646e; + m_state[2] = (length == 16) ? 0x79622d36 : 0x79622d32; + m_state[3] = 0x6b206574; + + GetBlock get1(key); + get1(m_state[4])(m_state[5])(m_state[6])(m_state[7]); + + GetBlock get2(key + ((length == 32) ? 16 : 0)); + get2(m_state[8])(m_state[9])(m_state[10])(m_state[11]); +} + +void ChaCha_Policy::CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length) +{ + CRYPTOPP_UNUSED(keystreamBuffer), CRYPTOPP_UNUSED(length); + CRYPTOPP_ASSERT(length==8); CRYPTOPP_UNUSED(length); + + GetBlock get(IV); + m_state[12] = m_state[13] = 0; + get(m_state[14])(m_state[15]); +} + +void ChaCha_Policy::SeekToIteration(lword iterationCount) +{ + m_state[12] = (word32)iterationCount; // low word + m_state[13] = (word32)SafeRightShift<32>(iterationCount); +} + +unsigned int ChaCha_Policy::GetAlignment() const +{ + return ChaCha_GetAlignment(); +} + +unsigned int ChaCha_Policy::GetOptimalBlockSize() const +{ + return ChaCha_GetOptimalBlockSize(); } -// OperateKeystream always produces a key stream. The key stream is written -// to output. Optionally a message may be supplied to xor with the key stream. -// The message is input, and output = output ^ input. void ChaCha_Policy::OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount) { - do - { -#if (CRYPTOPP_AVX2_AVAILABLE) - if (HasAVX2()) - { - while (iterationCount >= 8 && MultiBlockSafe(8)) - { - const bool xorInput = (operation & INPUT_NULL) != INPUT_NULL; - ChaCha_OperateKeystream_AVX2(m_state, xorInput ? input : NULLPTR, output, m_rounds); + ChaCha_OperateKeystream(operation, m_state, m_state[12], m_state[13], + m_rounds, output, input, iterationCount); +} - // MultiBlockSafe avoids overflow on the counter words - m_state[12] += 8; - //if (m_state[12] < 8) - // m_state[13]++; +////////////////////////////// IETF ChaChaTLS ////////////////////////////// - input += (!!xorInput) * 8 * BYTES_PER_ITERATION; - output += 8 * BYTES_PER_ITERATION; - iterationCount -= 8; - } - } -#endif +std::string ChaChaTLS_Policy::AlgorithmName() const +{ + return std::string("ChaChaTLS"); +} -#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE) - if (HasSSE2()) - { - while (iterationCount >= 4 && MultiBlockSafe(4)) - { - const bool xorInput = (operation & INPUT_NULL) != INPUT_NULL; - ChaCha_OperateKeystream_SSE2(m_state, xorInput ? input : NULLPTR, output, m_rounds); +std::string ChaChaTLS_Policy::AlgorithmProvider() const +{ + return ChaCha_AlgorithmProvider(); +} - // MultiBlockSafe avoids overflow on the counter words - m_state[12] += 4; - //if (m_state[12] < 4) - // m_state[13]++; +void ChaChaTLS_Policy::CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length) +{ + CRYPTOPP_ASSERT(key); CRYPTOPP_ASSERT(length == 32); + CRYPTOPP_UNUSED(length); - input += (!!xorInput)*4*BYTES_PER_ITERATION; - output += 4*BYTES_PER_ITERATION; - iterationCount -= 4; - } - } -#endif + // ChaChaTLS is always 20 rounds. Fetch Rounds() to avoid a spurious failure. + int rounds = params.GetIntValueWithDefault(Name::Rounds(), ROUNDS); + if (rounds != 20) + throw InvalidRounds(ChaChaTLS::StaticAlgorithmName(), rounds); -#if (CRYPTOPP_ARM_NEON_AVAILABLE) - if (HasNEON()) - { - while (iterationCount >= 4 && MultiBlockSafe(4)) - { - const bool xorInput = (operation & INPUT_NULL) != INPUT_NULL; - ChaCha_OperateKeystream_NEON(m_state, xorInput ? input : NULLPTR, output, m_rounds); + // RFC 8439 test vectors use an initial block counter. However, the counter + // can be an arbitrary value per RFC 8439 Section 2.4. We stash the counter + // away in state[16] and use it for a Resynchronize() operation. I think + // the initial counter is used more like a Tweak when non-0, and it should + // be provided in Resynchronize() (light-weight re-keying). However, + // Resynchronize() does not have an overload that allows us to pass it into + // the function, so we have to use the heavier-weight SetKey to change it. + word64 block; + if (params.GetValue("InitialBlock", block)) + m_counter = static_cast(block); + else + m_counter = 0; - // MultiBlockSafe avoids overflow on the counter words - m_state[12] += 4; - //if (m_state[12] < 4) - // m_state[13]++; + // State words are defined in RFC 8439, Section 2.3. Key is 32-bytes. + GetBlock get(key); + get(m_state[KEY+0])(m_state[KEY+1])(m_state[KEY+2])(m_state[KEY+3]) + (m_state[KEY+4])(m_state[KEY+5])(m_state[KEY+6])(m_state[KEY+7]); +} - input += (!!xorInput)*4*BYTES_PER_ITERATION; - output += 4*BYTES_PER_ITERATION; - iterationCount -= 4; - } - } -#endif +void ChaChaTLS_Policy::CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length) +{ + CRYPTOPP_UNUSED(keystreamBuffer), CRYPTOPP_UNUSED(length); + CRYPTOPP_ASSERT(length==12); -#if (CRYPTOPP_POWER7_AVAILABLE) - if (HasPower7()) - { - while (iterationCount >= 4 && MultiBlockSafe(4)) - { - const bool xorInput = (operation & INPUT_NULL) != INPUT_NULL; - ChaCha_OperateKeystream_POWER7(m_state, xorInput ? input : NULLPTR, output, m_rounds); + // State words are defined in RFC 8439, Section 2.3. + m_state[0] = 0x61707865; m_state[1] = 0x3320646e; + m_state[2] = 0x79622d32; m_state[3] = 0x6b206574; - // MultiBlockSafe avoids overflow on the counter words - m_state[12] += 4; - //if (m_state[12] < 4) - // m_state[13]++; + // Copy saved key into state + std::memcpy(m_state+4, m_state+KEY, 8*sizeof(word32)); - input += (!!xorInput)*4*BYTES_PER_ITERATION; - output += 4*BYTES_PER_ITERATION; - iterationCount -= 4; - } - } -#elif (CRYPTOPP_ALTIVEC_AVAILABLE) - if (HasAltivec()) - { - while (iterationCount >= 4 && MultiBlockSafe(4)) - { - const bool xorInput = (operation & INPUT_NULL) != INPUT_NULL; - ChaCha_OperateKeystream_ALTIVEC(m_state, xorInput ? input : NULLPTR, output, m_rounds); + // State words are defined in RFC 8439, Section 2.3 + GetBlock get(IV); + m_state[12] = m_counter; + get(m_state[13])(m_state[14])(m_state[15]); +} - // MultiBlockSafe avoids overflow on the counter words - m_state[12] += 4; - //if (m_state[12] < 4) - // m_state[13]++; +void ChaChaTLS_Policy::SeekToIteration(lword iterationCount) +{ + // Should we throw here??? If the initial block counter is + // large then we can wrap and process more data as long as + // data processed in the security context does not exceed + // 2^32 blocks or approximately 256 GB of data. + CRYPTOPP_ASSERT(iterationCount <= std::numeric_limits::max()); + m_state[12] = (word32)iterationCount; // low word +} - input += (!!xorInput)*4*BYTES_PER_ITERATION; - output += 4*BYTES_PER_ITERATION; - iterationCount -= 4; - } - } -#endif +unsigned int ChaChaTLS_Policy::GetAlignment() const +{ + return ChaCha_GetAlignment(); +} - if (iterationCount) - { - word32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15; +unsigned int ChaChaTLS_Policy::GetOptimalBlockSize() const +{ + return ChaCha_GetOptimalBlockSize(); +} - x0 = m_state[0]; x1 = m_state[1]; x2 = m_state[2]; x3 = m_state[3]; - x4 = m_state[4]; x5 = m_state[5]; x6 = m_state[6]; x7 = m_state[7]; - x8 = m_state[8]; x9 = m_state[9]; x10 = m_state[10]; x11 = m_state[11]; - x12 = m_state[12]; x13 = m_state[13]; x14 = m_state[14]; x15 = m_state[15]; +void ChaChaTLS_Policy::OperateKeystream(KeystreamOperation operation, + byte *output, const byte *input, size_t iterationCount) +{ + word32 discard=0; + ChaCha_OperateKeystream(operation, m_state, m_state[12], discard, + ROUNDS, output, input, iterationCount); - for (int i = static_cast(m_rounds); i > 0; i -= 2) - { - CHACHA_QUARTER_ROUND(x0, x4, x8, x12); - CHACHA_QUARTER_ROUND(x1, x5, x9, x13); - CHACHA_QUARTER_ROUND(x2, x6, x10, x14); - CHACHA_QUARTER_ROUND(x3, x7, x11, x15); + // If this fires it means ChaCha_OperateKeystream generated a counter + // block carry that was discarded. The problem is, the RFC does not + // specify what should happen when the counter block wraps. All we can + // do is inform the user that something bad may happen because we don't + // know what we should do. + // Also see https://github.com/weidai11/cryptopp/issues/790 and + // https://mailarchive.ietf.org/arch/msg/cfrg/gsOnTJzcbgG6OqD8Sc0GO5aR_tU + // CRYPTOPP_ASSERT(discard==0); +} - CHACHA_QUARTER_ROUND(x0, x5, x10, x15); - CHACHA_QUARTER_ROUND(x1, x6, x11, x12); - CHACHA_QUARTER_ROUND(x2, x7, x8, x13); - CHACHA_QUARTER_ROUND(x3, x4, x9, x14); - } +////////////////////////////// IETF XChaCha20 ////////////////////////////// - CRYPTOPP_KEYSTREAM_OUTPUT_SWITCH(CHACHA_OUTPUT, BYTES_PER_ITERATION); +std::string XChaCha20_Policy::AlgorithmName() const +{ + return std::string("XChaCha20"); +} - if (++m_state[12] == 0) - m_state[13]++; - } +std::string XChaCha20_Policy::AlgorithmProvider() const +{ + return ChaCha_AlgorithmProvider(); +} - // We may re-enter a SIMD keystream operation from here. - } while (iterationCount--); +void XChaCha20_Policy::CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length) +{ + CRYPTOPP_ASSERT(key); CRYPTOPP_ASSERT(length == 32); + CRYPTOPP_UNUSED(length); + + // Use previous rounds as the default value + int rounds = params.GetIntValueWithDefault(Name::Rounds(), m_rounds); + if (rounds != 20 && rounds != 12) + throw InvalidRounds(ChaCha::StaticAlgorithmName(), rounds); + + // Latch a good value + m_rounds = rounds; + + word64 block; + if (params.GetValue("InitialBlock", block)) + m_counter = static_cast(block); + else + m_counter = 1; + + // Stash key away for use in CipherResynchronize + GetBlock get(key); + get(m_state[KEY+0])(m_state[KEY+1])(m_state[KEY+2])(m_state[KEY+3]) + (m_state[KEY+4])(m_state[KEY+5])(m_state[KEY+6])(m_state[KEY+7]); +} + +void XChaCha20_Policy::CipherResynchronize(byte *keystreamBuffer, const byte *iv, size_t length) +{ + CRYPTOPP_UNUSED(keystreamBuffer), CRYPTOPP_UNUSED(length); + CRYPTOPP_ASSERT(length==24); + + // HChaCha derivation + m_state[0] = 0x61707865; m_state[1] = 0x3320646e; + m_state[2] = 0x79622d32; m_state[3] = 0x6b206574; + + // Copy saved key into state + std::memcpy(m_state+4, m_state+KEY, 8*sizeof(word32)); + + GetBlock get(iv); + get(m_state[12])(m_state[13])(m_state[14])(m_state[15]); + + // Operate the keystream without adding state back in. + // This function also gathers the key words into a + // contiguous 8-word block. + HChaCha_OperateKeystream(m_state, m_state+4); + + // XChaCha state + m_state[0] = 0x61707865; m_state[1] = 0x3320646e; + m_state[2] = 0x79622d32; m_state[3] = 0x6b206574; + + // Setup new IV + m_state[12] = m_counter; + m_state[13] = 0; + m_state[14] = GetWord(false, LITTLE_ENDIAN_ORDER, iv+16); + m_state[15] = GetWord(false, LITTLE_ENDIAN_ORDER, iv+20); +} + +void XChaCha20_Policy::SeekToIteration(lword iterationCount) +{ + // Should we throw here??? XChaCha does not have a block + // counter, so I'm not sure how to seek on it. + CRYPTOPP_ASSERT(0); CRYPTOPP_UNUSED(iterationCount); +} + +unsigned int XChaCha20_Policy::GetAlignment() const +{ + return ChaCha_GetAlignment(); +} + +unsigned int XChaCha20_Policy::GetOptimalBlockSize() const +{ + return ChaCha_GetOptimalBlockSize(); +} + +void XChaCha20_Policy::OperateKeystream(KeystreamOperation operation, + byte *output, const byte *input, size_t iterationCount) +{ + ChaCha_OperateKeystream(operation, m_state, m_state[12], m_state[13], + m_rounds, output, input, iterationCount); } NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/chacha.h b/vendor/cryptopp/vendor_cryptopp/chacha.h index 39246c0f..0fab929a 100644 --- a/vendor/cryptopp/vendor_cryptopp/chacha.h +++ b/vendor/cryptopp/vendor_cryptopp/chacha.h @@ -3,13 +3,28 @@ // and Bernstein's reference ChaCha family implementation at // http://cr.yp.to/chacha.html. +// The library added Bernstein's ChaCha classses at Crypto++ 5.6.4. The IETF +// uses a slightly different implementation than Bernstein, and the IETF +// ChaCha and XChaCha classes were added at Crypto++ 8.1. We wanted to maintain +// ABI compatibility at the 8.1 release so the original ChaCha classes were not +// disturbed. Instead new classes were added for IETF ChaCha. The back-end +// implementation shares code as expected, however. + /// \file chacha.h /// \brief Classes for ChaCha8, ChaCha12 and ChaCha20 stream ciphers -/// \details Crypto++ provides Bernstein and ECRYPT's ChaCha from ChaCha, -/// a variant of Salsa20 (2008.01.28). Bernstein's implementation is _slightly_ different from the TLS working group's -/// implementation for cipher suites TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, -/// TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, and TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256. -/// \since Crypto++ 5.6.4 +/// \details Crypto++ provides Bernstein and ECRYPT's ChaCha from ChaCha, a +/// variant of Salsa20 (2008.01.28). Crypto++ also provides the +/// IETF implementation of ChaCha using the ChaChaTLS name. Bernstein's +/// implementation is _slightly_ different from the TLS working group's +/// implementation for cipher suites +/// TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, +/// TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, +/// and TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256. Finally, +/// the library provides XChaCha: +/// eXtended-nonce ChaCha and AEAD_XChaCha20_Poly1305 (rev. 03). +/// \since ChaCha since Crypto++ 5.6.4, ChaChaTLS and XChaCha20 since Crypto++ 8.1 #ifndef CRYPTOPP_CHACHA_H #define CRYPTOPP_CHACHA_H @@ -19,6 +34,8 @@ NAMESPACE_BEGIN(CryptoPP) +////////////////////////////// Bernstein ChaCha ////////////////////////////// + /// \brief ChaCha stream cipher information /// \since Crypto++ 5.6.4 struct ChaCha_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInterface::UNIQUE_IV, 8> @@ -40,8 +57,8 @@ struct ChaCha_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInterf class CRYPTOPP_NO_VTABLE ChaCha_Policy : public AdditiveCipherConcretePolicy { public: - ~ChaCha_Policy() {} - ChaCha_Policy() : m_rounds(0) {} + virtual ~ChaCha_Policy() {} + ChaCha_Policy() : m_rounds(ROUNDS) {} protected: void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); @@ -55,28 +72,149 @@ protected: std::string AlgorithmName() const; std::string AlgorithmProvider() const; - // MultiBlockSafe detects a condition that can arise in the SIMD - // implementations where we overflow one of the 32-bit state words - // during addition in an intermediate result. Conditions to trigger - // issue include a user seeks to around 2^32 blocks (256 GB of data). - // https://github.com/weidai11/cryptopp/issues/732 - inline bool MultiBlockSafe(unsigned int blocks) const; - + CRYPTOPP_CONSTANT(ROUNDS = 20) // Default rounds FixedSizeAlignedSecBlock m_state; unsigned int m_rounds; }; /// \brief ChaCha stream cipher -/// \details Bernstein and ECRYPT's ChaCha is _slightly_ different from the TLS working -/// group's implementation for cipher suites -/// TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, -/// TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, and -/// TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256. -/// \sa ChaCha, a variant of Salsa20 (2008.01.28). +/// \details This is Bernstein and ECRYPT's ChaCha. It is _slightly_ different +/// from the IETF's version of ChaCha called ChaChaTLS. +/// \sa ChaCha, a variant +/// of Salsa20 (2008.01.28). /// \since Crypto++ 5.6.4 struct ChaCha : public ChaCha_Info, public SymmetricCipherDocumentation { + /// \brief ChaCha Encryption typedef SymmetricCipherFinal >, ChaCha_Info > Encryption; + /// \brief ChaCha Decryption + typedef Encryption Decryption; +}; + +////////////////////////////// IETF ChaChaTLS ////////////////////////////// + +/// \brief ChaCha-TLS stream cipher information +/// \since Crypto++ 8.1 +struct ChaChaTLS_Info : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 12>, FixedRounds<20> +{ + /// \brief The algorithm name + /// \returns the algorithm name + /// \details StaticAlgorithmName returns the algorithm's name as a static + /// member function. + /// \details This is the IETF's variant of Bernstein's ChaCha from RFC + /// 8439. IETF ChaCha is called ChaChaTLS in the Crypto++ library. It + /// is _slightly_ different from Bernstein's implementation. + static const char* StaticAlgorithmName() { + return "ChaChaTLS"; + } +}; + +/// \brief ChaCha-TLS stream cipher implementation +/// \since Crypto++ 8.1 +class CRYPTOPP_NO_VTABLE ChaChaTLS_Policy : public AdditiveCipherConcretePolicy +{ +public: + virtual ~ChaChaTLS_Policy() {} + ChaChaTLS_Policy() : m_counter(0) {} + +protected: + void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); + void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); + void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length); + bool CipherIsRandomAccess() const {return true;} + void SeekToIteration(lword iterationCount); + unsigned int GetAlignment() const; + unsigned int GetOptimalBlockSize() const; + + std::string AlgorithmName() const; + std::string AlgorithmProvider() const; + + FixedSizeAlignedSecBlock m_state; + unsigned int m_counter; + CRYPTOPP_CONSTANT(ROUNDS = ChaChaTLS_Info::ROUNDS) + CRYPTOPP_CONSTANT(KEY = 16) // Index into m_state + CRYPTOPP_CONSTANT(CTR = 24) // Index into m_state +}; + +/// \brief ChaCha-TLS stream cipher +/// \details This is the IETF's variant of Bernstein's ChaCha from RFC 8439. +/// IETF ChaCha is called ChaChaTLS in the Crypto++ library. It is +/// _slightly_ different from the Bernstein implementation. ChaCha-TLS +/// can be used for cipher suites +/// TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, +/// TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, and +/// TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256. +/// \sa RFC 8439, ChaCha20 and +/// Poly1305 for IETF Protocols, How +/// to handle block counter wrap in IETF's ChaCha algorithm? and +/// Issue +/// 790, ChaChaTLS results when counter block wraps. +/// \since Crypto++ 8.1 +struct ChaChaTLS : public ChaChaTLS_Info, public SymmetricCipherDocumentation +{ + /// \brief ChaCha-TLS Encryption + typedef SymmetricCipherFinal >, ChaChaTLS_Info > Encryption; + /// \brief ChaCha-TLS Decryption + typedef Encryption Decryption; +}; + +////////////////////////////// IETF XChaCha20 draft ////////////////////////////// + +/// \brief XChaCha stream cipher information +/// \since Crypto++ 8.1 +struct XChaCha20_Info : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 24> +{ + /// \brief The algorithm name + /// \returns the algorithm name + /// \details StaticAlgorithmName returns the algorithm's name as a static + /// member function. + /// \details This is the IETF's XChaCha from draft-arciszewski-xchacha. + static const char* StaticAlgorithmName() { + return "XChaCha20"; + } +}; + +/// \brief XChaCha stream cipher implementation +/// \since Crypto++ 8.1 +class CRYPTOPP_NO_VTABLE XChaCha20_Policy : public AdditiveCipherConcretePolicy +{ +public: + virtual ~XChaCha20_Policy() {} + XChaCha20_Policy() : m_counter(0), m_rounds(ROUNDS) {} + +protected: + void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); + void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); + void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length); + bool CipherIsRandomAccess() const {return false;} + void SeekToIteration(lword iterationCount); + unsigned int GetAlignment() const; + unsigned int GetOptimalBlockSize() const; + + std::string AlgorithmName() const; + std::string AlgorithmProvider() const; + + FixedSizeAlignedSecBlock m_state; + unsigned int m_counter, m_rounds; + CRYPTOPP_CONSTANT(ROUNDS = 20) // Default rounds + CRYPTOPP_CONSTANT(KEY = 16) // Index into m_state +}; + +/// \brief XChaCha stream cipher +/// \details This is the IETF's XChaCha from draft-arciszewski-xchacha. +/// \sa XChaCha: +/// eXtended-nonce ChaCha and AEAD_XChaCha20_Poly1305 (rev. 03), How +/// to handle block counter wrap in IETF's ChaCha algorithm? and +/// Issue +/// 790, ChaCha20 results when counter block wraps. +/// \since Crypto++ 8.1 +struct XChaCha20 : public XChaCha20_Info, public SymmetricCipherDocumentation +{ + /// \brief XChaCha Encryption + typedef SymmetricCipherFinal >, XChaCha20_Info > Encryption; + /// \brief XChaCha Decryption typedef Encryption Decryption; }; diff --git a/vendor/cryptopp/vendor_cryptopp/chacha_simd.cpp b/vendor/cryptopp/vendor_cryptopp/chacha_simd.cpp index 307d4945..65316384 100644 --- a/vendor/cryptopp/vendor_cryptopp/chacha_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/chacha_simd.cpp @@ -30,7 +30,12 @@ #include "chacha.h" #include "misc.h" -#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE) +// Internal compiler error in GCC 3.3 and below +#if defined(__GNUC__) && (__GNUC__ < 4) +# undef CRYPTOPP_SSE2_INTRIN_AVAILABLE +#endif + +#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE) # include # include #endif @@ -43,12 +48,11 @@ # include #endif -#if (CRYPTOPP_ARM_NEON_AVAILABLE) +// C1189: error: This header is specific to ARM targets +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(_M_ARM64) # include #endif -// Can't use CRYPTOPP_ARM_XXX_AVAILABLE because too many -// compilers don't follow ACLE conventions for the include. #if (CRYPTOPP_ARM_ACLE_AVAILABLE) # include # include @@ -161,7 +165,7 @@ inline uint32x4_t Add64(const uint32x4_t& a, const uint32x4_t& b) // ***************************** SSE2 ***************************** // -#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE) +#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE) template inline __m128i RotateLeft(const __m128i val) @@ -199,7 +203,7 @@ inline __m128i RotateLeft<16>(const __m128i val) #endif } -#endif // CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE +#endif // CRYPTOPP_SSE2_INTRIN_AVAILABLE // **************************** Altivec **************************** // @@ -297,8 +301,9 @@ void ChaCha_OperateKeystream_NEON(const word32 *state, const byte* input, byte * const uint32x4_t state2 = vld1q_u32(state + 2*4); const uint32x4_t state3 = vld1q_u32(state + 3*4); + const unsigned int w[] = {1,0,0,0, 2,0,0,0, 3,0,0,0}; const uint32x4_t CTRS[3] = { - {1,0,0,0}, {2,0,0,0}, {3,0,0,0} + vld1q_u32(w+0), vld1q_u32(w+4), vld1q_u32(w+8) }; uint32x4_t r0_0 = state0; @@ -556,7 +561,7 @@ void ChaCha_OperateKeystream_NEON(const word32 *state, const byte* input, byte * // ***************************** SSE2 ***************************** // -#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE) +#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE) void ChaCha_OperateKeystream_SSE2(const word32 *state, const byte* input, byte *output, unsigned int rounds) { @@ -820,7 +825,7 @@ void ChaCha_OperateKeystream_SSE2(const word32 *state, const byte* input, byte * _mm_storeu_si128(output_mm + 15, r3_3); } -#endif // CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE +#endif // CRYPTOPP_SSE2_INTRIN_AVAILABLE #if (CRYPTOPP_POWER7_AVAILABLE || CRYPTOPP_ALTIVEC_AVAILABLE) diff --git a/vendor/cryptopp/vendor_cryptopp/chachapoly.cpp b/vendor/cryptopp/vendor_cryptopp/chachapoly.cpp new file mode 100644 index 00000000..8816935d --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/chachapoly.cpp @@ -0,0 +1,207 @@ +// chachapoly.cpp - written and placed in the public domain by Jeffrey Walton +// RFC 8439, Section 2.8, AEAD Construction, http://tools.ietf.org/html/rfc8439 + +#include "pch.h" +#include "chachapoly.h" +#include "algparam.h" +#include "misc.h" + +NAMESPACE_BEGIN(CryptoPP) + +////////////////////////////// IETF ChaChaTLS ////////////////////////////// + +// RekeyCipherAndMac is heavier-weight than we like. The Authenc framework was +// predicated on BlockCiphers, where the key and key schedule could be +// calculated independent of the IV being used. However, the ChaCha and +// ChaCha20Poly1305 construction combines key setup and IV. That is, both are +// needed to key or rekey the cipher. Even a simple Resync() requires us to +// regenerate the initial state for both ChaCha20 and Poly1305. +void ChaCha20Poly1305_Base::RekeyCipherAndMac(const byte *userKey, size_t keylength, const NameValuePairs ¶ms) +{ + // Derive MAC key + AlgorithmParameters block0 = MakeParameters("InitialBlock", (word64)0, true); + AccessSymmetricCipher().SetKey(userKey, keylength, CombinedNameValuePairs(params, block0)); + + // Only the first 256-bits are used to key the MAC + SecByteBlock derived(NULLPTR, 32); + AccessSymmetricCipher().ProcessString(derived, derived.size()); + + // Key the Poly1305 MAC + AccessMAC().SetKey(derived, derived.size(), params); + + // Key the ChaCha20 cipher + AlgorithmParameters block1 = MakeParameters("InitialBlock", (word64)1, true); + AccessSymmetricCipher().SetKey(userKey, keylength, CombinedNameValuePairs(params, block1)); +} + +void ChaCha20Poly1305_Base::SetKeyWithoutResync(const byte *userKey, size_t userKeyLength, const NameValuePairs ¶ms) +{ + CRYPTOPP_ASSERT(userKey && userKeyLength == 32); + m_userKey.Assign(userKey, userKeyLength); + + // ChaCha/Poly1305 initial state depends on both the key and IV. The + // IV may or may not be present during the call to SetKeyWithoutResync. + // If the IV is present, the framework will call SetKeyWithoutResync + // followed by Resynchronize which calls Resync. In this case we defer + // calculating the initial state until the call to Resynchronize. + // If the IV is not present, it avoids calling ChaCha's SetKey without + // an IV, which results in an exception. In this case the user will need + // to call Resynchronize to key ChaCha and Poly1305. + // RekeyCipherAndMac(userKey, userKeyLength, params); + CRYPTOPP_UNUSED(params); +} + +void ChaCha20Poly1305_Base::Resync(const byte *iv, size_t len) +{ + CRYPTOPP_ASSERT(iv && len == 12); + RekeyCipherAndMac(m_userKey, m_userKey.SizeInBytes(), + MakeParameters(Name::IV(), ConstByteArrayParameter(iv,len))); +} + +size_t ChaCha20Poly1305_Base::AuthenticateBlocks(const byte *data, size_t len) +{ + AccessMAC().Update(data, len); + return 0; +} + +void ChaCha20Poly1305_Base::AuthenticateLastHeaderBlock() +{ + // Pad to a multiple of 16 or 0 + const byte zero[16] = {0}; + size_t pad = (16 - (m_totalHeaderLength % 16)) % 16; + AccessMAC().Update(zero, pad); +} + +void ChaCha20Poly1305_Base::AuthenticateLastConfidentialBlock() +{ + // Pad to a multiple of 16 or 0 + const byte zero[16] = {0}; + size_t pad = (16 - (m_totalMessageLength % 16)) % 16; + AccessMAC().Update(zero, pad); +} + +void ChaCha20Poly1305_Base::AuthenticateLastFooterBlock(byte *mac, size_t macSize) +{ + CRYPTOPP_ALIGN_DATA(8) byte length[2*sizeof(word64)]; + PutWord(true, LITTLE_ENDIAN_ORDER, length+0, m_totalHeaderLength); + PutWord(true, LITTLE_ENDIAN_ORDER, length+8, m_totalMessageLength); + AccessMAC().Update(length, sizeof(length)); + AccessMAC().TruncatedFinal(mac, macSize); + m_state = State_KeySet; +} + +void ChaCha20Poly1305_Base::EncryptAndAuthenticate(byte *ciphertext, byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *message, size_t messageLength) +{ + Resynchronize(iv, ivLength); + Update(aad, aadLength); + ProcessString(ciphertext, message, messageLength); + TruncatedFinal(mac, macSize); +} + +bool ChaCha20Poly1305_Base::DecryptAndVerify(byte *message, const byte *mac, size_t macLength, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *ciphertext, size_t ciphertextLength) +{ + Resynchronize(iv, ivLength); + Update(aad, aadLength); + ProcessString(message, ciphertext, ciphertextLength); + return TruncatedVerify(mac, macLength); +} + +////////////////////////////// IETF XChaCha20 draft ////////////////////////////// + +// RekeyCipherAndMac is heavier-weight than we like. The Authenc framework was +// predicated on BlockCiphers, where the key and key schedule could be +// calculated independent of the IV being used. However, the ChaCha and +// ChaCha20Poly1305 construction combines key setup and IV. That is, both are +// needed to key or rekey the cipher. Even a simple Resync() requires us to +// regenerate the initial state for both ChaCha20 and Poly1305. +void XChaCha20Poly1305_Base::RekeyCipherAndMac(const byte *userKey, size_t keylength, const NameValuePairs ¶ms) +{ + // Derive MAC key + AlgorithmParameters block0 = MakeParameters("InitialBlock", (word64)0, true); + AccessSymmetricCipher().SetKey(userKey, keylength, CombinedNameValuePairs(params, block0)); + + // Only the first 256-bits are used to key the MAC + SecByteBlock derived(NULLPTR, 32); + AccessSymmetricCipher().ProcessString(derived, derived.size()); + + // Key the Poly1305 MAC + AccessMAC().SetKey(derived, derived.size(), params); + + // Key the ChaCha20 cipher + AlgorithmParameters block1 = MakeParameters("InitialBlock", (word64)1, true); + AccessSymmetricCipher().SetKey(userKey, keylength, CombinedNameValuePairs(params, block1)); +} + +void XChaCha20Poly1305_Base::SetKeyWithoutResync(const byte *userKey, size_t userKeyLength, const NameValuePairs ¶ms) +{ + CRYPTOPP_ASSERT(userKey && userKeyLength == 32); + m_userKey.Assign(userKey, userKeyLength); + + // XChaCha20/Poly1305 initial state depends on both the key and IV. The + // IV may or may not be present during the call to SetKeyWithoutResync. + // If the IV is present, the framework will call SetKeyWithoutResync + // followed by Resynchronize which calls Resync. In this case we defer + // calculating the initial state until the call to Resynchronize. + // If the IV is not present, it avoids calling ChaCha's SetKey without + // an IV, which results in an exception. In this case the user will need + // to call Resynchronize to key ChaCha and Poly1305. + // RekeyCipherAndMac(userKey, userKeyLength, params); + CRYPTOPP_UNUSED(params); +} + +void XChaCha20Poly1305_Base::Resync(const byte *iv, size_t len) +{ + CRYPTOPP_ASSERT(iv && len == 24); + RekeyCipherAndMac(m_userKey, m_userKey.SizeInBytes(), + MakeParameters(Name::IV(), ConstByteArrayParameter(iv,len))); +} + +size_t XChaCha20Poly1305_Base::AuthenticateBlocks(const byte *data, size_t len) +{ + AccessMAC().Update(data, len); + return 0; +} + +void XChaCha20Poly1305_Base::AuthenticateLastHeaderBlock() +{ + // Pad to a multiple of 16 or 0 + const byte zero[16] = {0}; + size_t pad = (16 - (m_totalHeaderLength % 16)) % 16; + AccessMAC().Update(zero, pad); +} + +void XChaCha20Poly1305_Base::AuthenticateLastConfidentialBlock() +{ + // Pad to a multiple of 16 or 0 + const byte zero[16] = {0}; + size_t pad = (16 - (m_totalMessageLength % 16)) % 16; + AccessMAC().Update(zero, pad); +} + +void XChaCha20Poly1305_Base::AuthenticateLastFooterBlock(byte *mac, size_t macSize) +{ + CRYPTOPP_ALIGN_DATA(8) byte length[2*sizeof(word64)]; + PutWord(true, LITTLE_ENDIAN_ORDER, length+0, m_totalHeaderLength); + PutWord(true, LITTLE_ENDIAN_ORDER, length+8, m_totalMessageLength); + AccessMAC().Update(length, sizeof(length)); + AccessMAC().TruncatedFinal(mac, macSize); + m_state = State_KeySet; +} + +void XChaCha20Poly1305_Base::EncryptAndAuthenticate(byte *ciphertext, byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *message, size_t messageLength) +{ + Resynchronize(iv, ivLength); + Update(aad, aadLength); + ProcessString(ciphertext, message, messageLength); + TruncatedFinal(mac, macSize); +} + +bool XChaCha20Poly1305_Base::DecryptAndVerify(byte *message, const byte *mac, size_t macLength, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *ciphertext, size_t ciphertextLength) +{ + Resynchronize(iv, ivLength); + Update(aad, aadLength); + ProcessString(message, ciphertext, ciphertextLength); + return TruncatedVerify(mac, macLength); +} + +NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/chachapoly.h b/vendor/cryptopp/vendor_cryptopp/chachapoly.h new file mode 100644 index 00000000..630b3c49 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/chachapoly.h @@ -0,0 +1,320 @@ +// chachapoly.h - written and placed in the public domain by Jeffrey Walton +// RFC 8439, Section 2.8, AEAD Construction, http://tools.ietf.org/html/rfc8439 + +/// \file chachapoly.h +/// \brief ChaCha20/Poly1305-TLS AEAD scheme +/// \details ChaCha20Poly1305 is an authenticated encryption scheme that combines +/// ChaCha20TLS and Poly1305TLS. The scheme is defined in RFC 8439, section 2.8, +/// AEAD_CHACHA20_POLY1305 construction, and uses the IETF versions of ChaCha +/// and Poly1305. +/// \sa RFC 8439, ChaCha20 and Poly1305 +/// for IETF Protocols. +/// \since Crypto++ 8.1 + +#ifndef CRYPTOPP_CHACHA_POLY1305_H +#define CRYPTOPP_CHACHA_POLY1305_H + +#include "cryptlib.h" +#include "authenc.h" +#include "chacha.h" +#include "poly1305.h" + +NAMESPACE_BEGIN(CryptoPP) + +////////////////////////////// IETF ChaChaTLS ////////////////////////////// + +/// \brief ChaCha20Poly1305 cipher base implementation +/// \details Base implementation of the AuthenticatedSymmetricCipher interface +/// \since Crypto++ 8.1 +class ChaCha20Poly1305_Base : public AuthenticatedSymmetricCipherBase +{ +public: + virtual ~ChaCha20Poly1305_Base() {} + + virtual const MessageAuthenticationCode & GetMAC() const = 0; + virtual MessageAuthenticationCode & AccessMAC() = 0; + +public: + // AuthenticatedSymmetricCipher + std::string AlgorithmName() const + {return std::string("ChaCha20/Poly1305");} + std::string AlgorithmProvider() const + {return GetSymmetricCipher().AlgorithmProvider();} + size_t MinKeyLength() const + {return 32;} + size_t MaxKeyLength() const + {return 32;} + size_t DefaultKeyLength() const + {return 32;} + size_t GetValidKeyLength(size_t n) const + {CRYPTOPP_UNUSED(n); return 32;} + bool IsValidKeyLength(size_t n) const + {return n==32;} + unsigned int OptimalDataAlignment() const + {return GetSymmetricCipher().OptimalDataAlignment();} + IV_Requirement IVRequirement() const + {return UNIQUE_IV;} + unsigned int IVSize() const + {return 12;} + unsigned int MinIVLength() const + {return 12;} + unsigned int MaxIVLength() const + {return 12;} + unsigned int DigestSize() const + {return 16;} + lword MaxHeaderLength() const + {return LWORD_MAX;} // 2^64-1 bytes + lword MaxMessageLength() const + {return W64LIT(274877906880);} // 2^38-1 blocks + lword MaxFooterLength() const + {return 0;} + + /// \brief Encrypts and calculates a MAC in one call + /// \param ciphertext the encryption buffer + /// \param mac the mac buffer + /// \param macSize the size of the MAC buffer, in bytes + /// \param iv the iv buffer + /// \param ivLength the size of the IV buffer, in bytes + /// \param aad the AAD buffer + /// \param aadLength the size of the AAD buffer, in bytes + /// \param message the message buffer + /// \param messageLength the size of the messagetext buffer, in bytes + /// \details EncryptAndAuthenticate() encrypts and generates the MAC in one call. The function + /// truncates the MAC if macSize < TagSize(). + virtual void EncryptAndAuthenticate(byte *ciphertext, byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *message, size_t messageLength); + + /// \brief Decrypts and verifies a MAC in one call + /// \param message the decryption buffer + /// \param mac the mac buffer + /// \param macSize the size of the MAC buffer, in bytes + /// \param iv the iv buffer + /// \param ivLength the size of the IV buffer, in bytes + /// \param aad the AAD buffer + /// \param aadLength the size of the AAD buffer, in bytes + /// \param ciphertext the cipher buffer + /// \param ciphertextLength the size of the ciphertext buffer, in bytes + /// \return true if the MAC is valid and the decoding succeeded, false otherwise + /// \details DecryptAndVerify() decrypts and verifies the MAC in one call. + /// message is a decryption buffer and should be at least as large as the ciphertext buffer. + /// \details The function returns true iff MAC is valid. DecryptAndVerify() assumes the MAC + /// is truncated if macLength < TagSize(). + virtual bool DecryptAndVerify(byte *message, const byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *ciphertext, size_t ciphertextLength); + +protected: + // AuthenticatedSymmetricCipherBase + bool AuthenticationIsOnPlaintext() const {return false;} + unsigned int AuthenticationBlockSize() const {return 1;} + void SetKeyWithoutResync(const byte *userKey, size_t keylength, const NameValuePairs ¶ms); + void Resync(const byte *iv, size_t len); + size_t AuthenticateBlocks(const byte *data, size_t len); + void AuthenticateLastHeaderBlock(); + void AuthenticateLastConfidentialBlock(); + void AuthenticateLastFooterBlock(byte *mac, size_t macSize); + +protected: + // See comments in chachapoly.cpp + void RekeyCipherAndMac(const byte *userKey, size_t userKeyLength, const NameValuePairs ¶ms); + + SecByteBlock m_userKey; +}; + +/// \brief ChaCha20Poly1305 cipher final implementation +/// \tparam T_IsEncryption flag indicating cipher direction +/// \details ChaCha20Poly1305 is an authenticated encryption scheme that combines +/// ChaCha20TLS and Poly1305TLS. The scheme is defined in RFC 8439, section 2.8, +/// AEAD_CHACHA20_POLY1305 construction, and uses the IETF versions of ChaCha +/// and Poly1305. +/// \sa RFC 8439, ChaCha20 and Poly1305 +/// for IETF Protocols. +/// \since Crypto++ 8.1 +template +class ChaCha20Poly1305_Final : public ChaCha20Poly1305_Base +{ +public: + static std::string StaticAlgorithmName() + {return std::string("ChaCha20/Poly1305");} + +protected: + const SymmetricCipher & GetSymmetricCipher() + {return const_cast(this)->AccessSymmetricCipher();} + SymmetricCipher & AccessSymmetricCipher() + {return m_cipher;} + bool IsForwardTransformation() const + {return T_IsEncryption;} + + const MessageAuthenticationCode & GetMAC() const + {return const_cast(this)->AccessMAC();} + MessageAuthenticationCode & AccessMAC() + {return m_mac;} + +private: + ChaChaTLS::Encryption m_cipher; + Poly1305TLS m_mac; +}; + +/// \brief ChaCha20/Poly1305-TLS AEAD scheme +/// \details ChaCha20Poly1305 is an authenticated encryption scheme that combines +/// ChaCha20TLS and Poly1305TLS. The scheme is defined in RFC 8439, section 2.8, +/// AEAD_CHACHA20_POLY1305 construction, and uses the IETF versions of ChaCha +/// and Poly1305. +/// \sa RFC 8439, ChaCha20 and Poly1305 +/// for IETF Protocols. +/// \since Crypto++ 8.1 +struct ChaCha20Poly1305 : public AuthenticatedSymmetricCipherDocumentation +{ + /// \brief ChaCha20Poly1305 encryption + typedef ChaCha20Poly1305_Final Encryption; + /// \brief ChaCha20Poly1305 decryption + typedef ChaCha20Poly1305_Final Decryption; +}; + +////////////////////////////// IETF XChaCha20 draft ////////////////////////////// + +/// \brief XChaCha20Poly1305 cipher base implementation +/// \details Base implementation of the AuthenticatedSymmetricCipher interface +/// \since Crypto++ 8.1 +class XChaCha20Poly1305_Base : public AuthenticatedSymmetricCipherBase +{ +public: + virtual ~XChaCha20Poly1305_Base() {} + + virtual const MessageAuthenticationCode & GetMAC() const = 0; + virtual MessageAuthenticationCode & AccessMAC() = 0; + +public: + // AuthenticatedSymmetricCipher + std::string AlgorithmName() const + {return std::string("XChaCha20/Poly1305");} + std::string AlgorithmProvider() const + {return GetSymmetricCipher().AlgorithmProvider();} + size_t MinKeyLength() const + {return 32;} + size_t MaxKeyLength() const + {return 32;} + size_t DefaultKeyLength() const + {return 32;} + size_t GetValidKeyLength(size_t n) const + {CRYPTOPP_UNUSED(n); return 32;} + bool IsValidKeyLength(size_t n) const + {return n==32;} + unsigned int OptimalDataAlignment() const + {return GetSymmetricCipher().OptimalDataAlignment();} + IV_Requirement IVRequirement() const + {return UNIQUE_IV;} + unsigned int IVSize() const + {return 24;} + unsigned int MinIVLength() const + {return 24;} + unsigned int MaxIVLength() const + {return 24;} + unsigned int DigestSize() const + {return 16;} + lword MaxHeaderLength() const + {return LWORD_MAX;} // 2^64-1 bytes + lword MaxMessageLength() const + {return W64LIT(274877906880);} // 2^38-1 blocks + lword MaxFooterLength() const + {return 0;} + + /// \brief Encrypts and calculates a MAC in one call + /// \param ciphertext the encryption buffer + /// \param mac the mac buffer + /// \param macSize the size of the MAC buffer, in bytes + /// \param iv the iv buffer + /// \param ivLength the size of the IV buffer, in bytes + /// \param aad the AAD buffer + /// \param aadLength the size of the AAD buffer, in bytes + /// \param message the message buffer + /// \param messageLength the size of the messagetext buffer, in bytes + /// \details EncryptAndAuthenticate() encrypts and generates the MAC in one call. The function + /// truncates the MAC if macSize < TagSize(). + virtual void EncryptAndAuthenticate(byte *ciphertext, byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *message, size_t messageLength); + + /// \brief Decrypts and verifies a MAC in one call + /// \param message the decryption buffer + /// \param mac the mac buffer + /// \param macSize the size of the MAC buffer, in bytes + /// \param iv the iv buffer + /// \param ivLength the size of the IV buffer, in bytes + /// \param aad the AAD buffer + /// \param aadLength the size of the AAD buffer, in bytes + /// \param ciphertext the cipher buffer + /// \param ciphertextLength the size of the ciphertext buffer, in bytes + /// \return true if the MAC is valid and the decoding succeeded, false otherwise + /// \details DecryptAndVerify() decrypts and verifies the MAC in one call. + /// message is a decryption buffer and should be at least as large as the ciphertext buffer. + /// \details The function returns true iff MAC is valid. DecryptAndVerify() assumes the MAC + /// is truncated if macLength < TagSize(). + virtual bool DecryptAndVerify(byte *message, const byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *ciphertext, size_t ciphertextLength); + +protected: + // AuthenticatedSymmetricCipherBase + bool AuthenticationIsOnPlaintext() const {return false;} + unsigned int AuthenticationBlockSize() const {return 1;} + void SetKeyWithoutResync(const byte *userKey, size_t keylength, const NameValuePairs ¶ms); + void Resync(const byte *iv, size_t len); + size_t AuthenticateBlocks(const byte *data, size_t len); + void AuthenticateLastHeaderBlock(); + void AuthenticateLastConfidentialBlock(); + void AuthenticateLastFooterBlock(byte *mac, size_t macSize); + +protected: + // See comments in chachapoly.cpp + void RekeyCipherAndMac(const byte *userKey, size_t userKeyLength, const NameValuePairs ¶ms); + + SecByteBlock m_userKey; +}; + +/// \brief XChaCha20Poly1305 cipher final implementation +/// \tparam T_IsEncryption flag indicating cipher direction +/// \details XChaCha20Poly1305 is an authenticated encryption scheme that combines +/// XChaCha20 and Poly1305-TLS. The scheme is defined in RFC 8439, section 2.8, +/// AEAD_CHACHA20_POLY1305 construction, and uses the IETF versions of ChaCha +/// and Poly1305. +/// \sa RFC 8439, ChaCha20 and Poly1305 +/// for IETF Protocols. +/// \since Crypto++ 8.1 +template +class XChaCha20Poly1305_Final : public XChaCha20Poly1305_Base +{ +public: + static std::string StaticAlgorithmName() + {return std::string("XChaCha20/Poly1305");} + +protected: + const SymmetricCipher & GetSymmetricCipher() + {return const_cast(this)->AccessSymmetricCipher();} + SymmetricCipher & AccessSymmetricCipher() + {return m_cipher;} + bool IsForwardTransformation() const + {return T_IsEncryption;} + + const MessageAuthenticationCode & GetMAC() const + {return const_cast(this)->AccessMAC();} + MessageAuthenticationCode & AccessMAC() + {return m_mac;} + +private: + XChaCha20::Encryption m_cipher; + Poly1305TLS m_mac; +}; + +/// \brief XChaCha20/Poly1305-TLS AEAD scheme +/// \details XChaCha20Poly1305 is an authenticated encryption scheme that combines +/// XChaCha20 and Poly1305-TLS. The scheme is defined in RFC 8439, section 2.8, +/// AEAD_XCHACHA20_POLY1305 construction, and uses the IETF versions of ChaCha +/// and Poly1305. +/// \sa RFC 8439, ChaCha20 and Poly1305 +/// for IETF Protocols. +/// \since Crypto++ 8.1 +struct XChaCha20Poly1305 : public AuthenticatedSymmetricCipherDocumentation +{ + /// \brief XChaCha20Poly1305 encryption + typedef XChaCha20Poly1305_Final Encryption; + /// \brief XChaCha20Poly1305 decryption + typedef XChaCha20Poly1305_Final Decryption; +}; + +NAMESPACE_END + +#endif // CRYPTOPP_CHACHA_POLY1305_H diff --git a/vendor/cryptopp/vendor_cryptopp/cham.h b/vendor/cryptopp/vendor_cryptopp/cham.h index 0d08c90e..75874031 100644 --- a/vendor/cryptopp/vendor_cryptopp/cham.h +++ b/vendor/cryptopp/vendor_cryptopp/cham.h @@ -95,7 +95,7 @@ public: #endif }; - /// \brief Encryption transformation + /// \brief Decryption transformation /// \details Dec provides implementation for decryption transformation. All key and block /// sizes are supported. /// \since Crypto++ 8.0 @@ -109,11 +109,15 @@ public: #endif }; + /// \brief CHAM64 encryption typedef BlockCipherFinal Encryption; + /// \brief CHAM64 decryption typedef BlockCipherFinal Decryption; }; +/// \brief CHAM64 encryption typedef CHAM64::Encryption CHAM64Encryption; +/// \brief CHAM64 decryption typedef CHAM64::Decryption CHAM64Decryption; /// \brief CHAM 128-bit block cipher @@ -154,7 +158,7 @@ public: #endif }; - /// \brief Encryption transformation + /// \brief Decryption transformation /// \details Dec provides implementation for decryption transformation. All key and block /// sizes are supported. /// \since Crypto++ 8.0 @@ -168,11 +172,15 @@ public: #endif }; + /// \brief CHAM128 encryption typedef BlockCipherFinal Encryption; + /// \brief CHAM128 decryption typedef BlockCipherFinal Decryption; }; +/// \brief CHAM128 encryption typedef CHAM128::Encryption CHAM128Encryption; +/// \brief CHAM128 decryption typedef CHAM128::Decryption CHAM128Decryption; NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/cham_simd.cpp b/vendor/cryptopp/vendor_cryptopp/cham_simd.cpp index b56e6d76..7fcaece1 100644 --- a/vendor/cryptopp/vendor_cryptopp/cham_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/cham_simd.cpp @@ -10,20 +10,14 @@ #include "cham.h" #include "misc.h" -#include "adv_simd.h" // Uncomment for benchmarking C++ against SSE or NEON. // Do so in both simon.cpp and simon-simd.cpp. // #undef CRYPTOPP_SSSE3_AVAILABLE // #undef CRYPTOPP_ARM_NEON_AVAILABLE -#if defined(CRYPTOPP_SSE2_AVAILABLE) -# define CRYPTOPP_AVX512_ROTATE 1 -# include -# include -#endif - #if (CRYPTOPP_SSSE3_AVAILABLE) +#include "adv_simd.h" # include # include #endif @@ -32,6 +26,11 @@ # include #endif +#if defined(__AVX512F__) +# define CRYPTOPP_AVX512_ROTATE 1 +# include +#endif + // Squash MS LNK4221 and libtool warnings extern const char CHAM_SIMD_FNAME[] = __FILE__; @@ -68,7 +67,6 @@ inline __m128i RotateRight16(const __m128i& val) #endif } -// Faster than two Shifts and an Or. Thanks to Louis Wingers and Bryan Weeks. template <> inline __m128i RotateLeft16<8>(const __m128i& val) { @@ -80,7 +78,6 @@ inline __m128i RotateLeft16<8>(const __m128i& val) #endif } -// Faster than two Shifts and an Or. Thanks to Louis Wingers and Bryan Weeks. template <> inline __m128i RotateRight16<8>(const __m128i& val) { diff --git a/vendor/cryptopp/vendor_cryptopp/config.h b/vendor/cryptopp/vendor_cryptopp/config.h index 8db32c65..4516d2b3 100644 --- a/vendor/cryptopp/vendor_cryptopp/config.h +++ b/vendor/cryptopp/vendor_cryptopp/config.h @@ -68,6 +68,30 @@ # define CRYPTOPP_DISABLE_ASM 1 #endif +// Some Clang and SunCC cannot handle mixed asm with positional arguments, +// where the body is Intel style with no prefix and the templates are +// AT&T style. Define this is the Makefile misdetects the configuration. +// Also see https://bugs.llvm.org/show_bug.cgi?id=39895 . +// #define CRYPTOPP_DISABLE_MIXED_ASM 1 + +// Several compilers discard SIMD code that loads unaligned data. The symptom +// is often self test failures and UBsan findings for unaligned loads. For +// example, Power7 can load unaligned data using vec_vsx_ld but some versions +// of GCC and Clang require 16-byte aligned data when using the builtin. +// It is not limited to SSE and PowerPC code. Define this to disable +// Crypto++ code that uses potentially problematic builtins or intrinsics. +// Also see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88234 and +// https://bugs.llvm.org/show_bug.cgi?id=39704 +// #define CRYPTOPP_BUGGY_SIMD_LOAD_AND_STORE 1 + +// This list will probably grow over time as more compilers are identified. +#if defined(CRYPTOPP_BUGGY_SIMD_LOAD_AND_STORE) +# define CRYPTOPP_DISABLE_LEA_SIMD 1 +# define CRYPTOPP_DISABLE_SIMON_SIMD 1 +# define CRYPTOPP_DISABLE_SPECK_SIMD 1 +# define CRYPTOPP_DISABLE_SM4_SIMD 1 +#endif + // Define CRYPTOPP_NO_CXX11 to avoid C++11 related features shown at the // end of this file. Some compilers and standard C++ headers advertise C++11 // but they are really just C++03 with some additional C++11 headers and @@ -92,7 +116,7 @@ // the version of the library the headers came from. It is not // necessarily the version of the library built as a shared object if // versions are inadvertently mixed and matched. -#define CRYPTOPP_VERSION 800 +#define CRYPTOPP_VERSION 810 // Define this if you want to set a prefix for TestData/ and TestVectors/ // Be sure to add the trailing slash since its simple concatenation. @@ -291,12 +315,6 @@ const lword LWORD_MAX = W64LIT(0xffffffffffffffff); #define CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE 1 #endif -// Some Clang cannot handle mixed asm with positional arguments, where the -// body is Intel style with no prefix and the templates are AT&T style. -// Define this is the Makefile misdetects the configuration. -// Also see https://bugs.llvm.org/show_bug.cgi?id=39895 . -// #define CRYPTOPP_DISABLE_MIXED_ASM 1 - // define hword, word, and dword. these are used for multiprecision integer arithmetic // Intel compiler won't have _umul128 until version 10.0. See http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30231625.aspx #if (defined(_MSC_VER) && (!defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1000) && (defined(_M_X64) || defined(_M_IA64))) || (defined(__DECCXX) && defined(__alpha__)) || (defined(__INTEL_COMPILER) && defined(__x86_64__)) || (defined(__SUNPRO_CC) && defined(__x86_64__)) @@ -573,7 +591,7 @@ NAMESPACE_END // Requires Binutils 2.24 #if !defined(CRYPTOPP_DISABLE_AVX2) && defined(CRYPTOPP_AVX_AVAILABLE) && \ (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \ - (CRYPTOPP_GCC_VERSION >= 40700) || (__INTEL_COMPILER >= 1400) || \ + (CRYPTOPP_GCC_VERSION >= 40900) || (__INTEL_COMPILER >= 1400) || \ (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600)) #define CRYPTOPP_AVX2_AVAILABLE 1 #endif @@ -645,7 +663,7 @@ NAMESPACE_END # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) # if defined(__ARM_NEON) || defined(__ARM_FEATURE_NEON) || defined(__ARM_FEATURE_ASIMD) || \ (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_CLANG_VERSION >= 30300) || \ - (CRYPTOPP_MSC_VERSION >= 1910) + (CRYPTOPP_MSC_VERSION >= 1916) # define CRYPTOPP_ARM_NEON_AVAILABLE 1 # define CRYPTOPP_ARM_ASIMD_AVAILABLE 1 # endif // Compilers @@ -658,7 +676,7 @@ NAMESPACE_END #if !defined(CRYPTOPP_ARM_CRC32_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) # if defined(__ARM_FEATURE_CRC32) || (CRYPTOPP_GCC_VERSION >= 40800) || \ - (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1910) + (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) # define CRYPTOPP_ARM_CRC32_AVAILABLE 1 # endif // Compilers # endif // Platforms @@ -670,7 +688,7 @@ NAMESPACE_END #if !defined(CRYPTOPP_ARM_PMULL_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ - (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1910) + (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) # define CRYPTOPP_ARM_PMULL_AVAILABLE 1 # endif // Compilers # endif // Platforms @@ -694,7 +712,7 @@ NAMESPACE_END #if !defined(CRYPTOPP_ARM_SHA_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ - (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1910) + (CRYPTOPP_CLANG_VERSION >= 30300) || (CRYPTOPP_MSC_VERSION >= 1916) # define CRYPTOPP_ARM_SHA1_AVAILABLE 1 # define CRYPTOPP_ARM_SHA2_AVAILABLE 1 # endif // Compilers @@ -707,7 +725,7 @@ NAMESPACE_END #if !defined(CRYPTOPP_ARM_SHA_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) # if defined(__ARM_FEATURE_SHA3) || (CRYPTOPP_GCC_VERSION >= 80000) || \ - (CRYPTOPP_MSC_VERSION >= 2100) + (CRYPTOPP_MSC_VERSION >= 5000) # define CRYPTOPP_ARM_SHA512_AVAILABLE 1 # define CRYPTOPP_ARM_SHA3_AVAILABLE 1 # endif // Compilers @@ -720,7 +738,7 @@ NAMESPACE_END #if !defined(CRYPTOPP_ARM_SM3_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) # if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) # if defined(__ARM_FEATURE_SM3) || (CRYPTOPP_GCC_VERSION >= 80000) || \ - (CRYPTOPP_MSC_VERSION >= 2100) + (CRYPTOPP_MSC_VERSION >= 5000) # define CRYPTOPP_ARM_SM3_AVAILABLE 1 # define CRYPTOPP_ARM_SM4_AVAILABLE 1 # endif // Compilers @@ -921,7 +939,7 @@ NAMESPACE_END #ifndef NO_OS_DEPENDENCE -#if defined(_WIN32) || defined(__CYGWIN__) +#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) #define CRYPTOPP_WIN32_AVAILABLE #endif diff --git a/vendor/cryptopp/vendor_cryptopp/cpu.cpp b/vendor/cryptopp/vendor_cryptopp/cpu.cpp index 6fa3fef3..5a160529 100644 --- a/vendor/cryptopp/vendor_cryptopp/cpu.cpp +++ b/vendor/cryptopp/vendor_cryptopp/cpu.cpp @@ -322,8 +322,13 @@ void DetectX86Features() CRYPTOPP_CONSTANT(AVX_FLAG = (3 << 27)) if ((cpuid1[2] & AVX_FLAG) == AVX_FLAG) { + +// Unable to perform the necessary tests +#if defined(CRYPTOPP_DISABLE_ASM) + g_hasAVX = false; + // GCC 4.1/Binutils 2.17 cannot consume xgetbv -#if defined(__GNUC__) || (__SUNPRO_CC >= 0x5100) || defined(__BORLANDC__) +#elif defined(__GNUC__) || (__SUNPRO_CC >= 0x5100) || defined(__BORLANDC__) // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71659 and // http://www.agner.org/optimize/vectorclass/read.php?i=65 word32 a=0, d=0; @@ -331,7 +336,7 @@ void DetectX86Features() ( // "xgetbv" : "=a"(a), "=d"(d) : "c"(0) : ".byte 0x0f, 0x01, 0xd0" "\n\t" - : "=a"(a), "=d"(d) : "c"(0) : + : "=a"(a), "=d"(d) : "c"(0) : "cc" ); word64 xcr0 = a | static_cast(d) << 32; g_hasAVX = (xcr0 & YMM_FLAG) == YMM_FLAG; @@ -360,8 +365,12 @@ void DetectX86Features() #elif defined(_MSC_VER) && _MSC_VER <= 1500 && defined(_M_X64) word64 xcr0 = ExtendedControlRegister(0); g_hasAVX = (xcr0 & YMM_FLAG) == YMM_FLAG; -#elif defined(__SUNPRO_CC) // fall into + +// Downlevel SunCC +#elif defined(__SUNPRO_CC) g_hasAVX = false; + +// _xgetbv is available #else word64 xcr0 = _xgetbv(0); g_hasAVX = (xcr0 & YMM_FLAG) == YMM_FLAG; diff --git a/vendor/cryptopp/vendor_cryptopp/crc_simd.cpp b/vendor/cryptopp/vendor_cryptopp/crc_simd.cpp index 4699953a..771dabfd 100644 --- a/vendor/cryptopp/vendor_cryptopp/crc_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/crc_simd.cpp @@ -14,7 +14,8 @@ # include #endif -#if (CRYPTOPP_ARM_NEON_AVAILABLE) +// C1189: error: This header is specific to ARM targets +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(_M_ARM64) # include #endif diff --git a/vendor/cryptopp/vendor_cryptopp/cryptest.nmake b/vendor/cryptopp/vendor_cryptopp/cryptest.nmake index a15fc7b0..e480c5f8 100644 --- a/vendor/cryptopp/vendor_cryptopp/cryptest.nmake +++ b/vendor/cryptopp/vendor_cryptopp/cryptest.nmake @@ -16,12 +16,17 @@ # You must also add /DCRYPTOPP_DEBUG or /DDEBUG if you want a debug build with # the library's assert. The library moved from Posix NDEBUG and assert() to # CRYPTOPP_ASSERT at 5.6.5 due to CVE-2016-7420. CRYPTOPP_ASSERT has the -# additional benefit of using DebugBreak(), and the program does not crash +# additional benefit of using DebugBreak(), and the program does not crash # while you are debugging it like would happen with Posix assert(). +# There is mention of cryptopp.dll, CRYPTOPP_IMPORTS and CRYPTOPP_EXPORTS +# below. They are for testing only. Attempting to produce a working DLL on +# Windows fails. Too many missing symbols because cryptest.exe exercises +# about 80% of the library, but CRYPTOPP_DLL is only used for FIPS algos. + # The list of LIB_SRCS and TEST_SRCS was generated under Linux with -# "make sources | fold -w74 -s". The list of LIB_OBJS and TEST_OBJS was -# generated with "make sources | fold -w74 -s | sed 's|.cpp|.obj|g'". The +# "make sources | fold -w73 -s". The list of LIB_OBJS and TEST_OBJS was +# generated with "make sources | fold -w73 -s | sed 's|.cpp|.obj|g'". The # order of the first three object files are significant. See C++ Static # Initialization Order Fisaco on the Crypto++ wiki for details. @@ -56,29 +61,29 @@ LIB_SRCS = \ authenc.cpp base32.cpp base64.cpp basecode.cpp bfinit.cpp blake2.cpp \ blake2b_simd.cpp blake2s_simd.cpp blowfish.cpp blumshub.cpp camellia.cpp \ cast.cpp casts.cpp cbcmac.cpp ccm.cpp chacha.cpp chacha_avx.cpp \ - chacha_simd.cpp cham.cpp cham_simd.cpp channels.cpp cmac.cpp crc.cpp \ - crc_simd.cpp darn.cpp default.cpp des.cpp dessp.cpp dh.cpp dh2.cpp \ - dll.cpp donna_32.cpp donna_64.cpp donna_sse.cpp dsa.cpp eax.cpp ec2n.cpp \ - eccrypto.cpp ecp.cpp elgamal.cpp emsa2.cpp eprecomp.cpp esign.cpp files.cpp \ - filters.cpp fips140.cpp fipstest.cpp gcm.cpp gcm_simd.cpp gf256.cpp \ - gf2_32.cpp gf2n.cpp gfpcrypt.cpp gost.cpp gzip.cpp hc128.cpp hc256.cpp \ - hex.cpp hight.cpp hmac.cpp hrtimer.cpp ida.cpp idea.cpp iterhash.cpp \ - kalyna.cpp kalynatab.cpp keccak.cpp keccakc.cpp lea.cpp lea_simd.cpp \ - luc.cpp mars.cpp marss.cpp md2.cpp md4.cpp md5.cpp misc.cpp modes.cpp \ - mqueue.cpp mqv.cpp nbtheory.cpp neon_simd.cpp oaep.cpp osrng.cpp \ - padlkrng.cpp panama.cpp pkcspad.cpp poly1305.cpp polynomi.cpp \ - ppc_power7.cpp ppc_power8.cpp ppc_power9.cpp ppc_simd.cpp pssr.cpp \ - pubkey.cpp queue.cpp rabbit.cpp rabin.cpp randpool.cpp rc2.cpp rc5.cpp \ - rc6.cpp rdrand.cpp rdtables.cpp rijndael.cpp rijndael_simd.cpp ripemd.cpp \ - rng.cpp rsa.cpp rw.cpp safer.cpp salsa.cpp scrypt.cpp seal.cpp seed.cpp \ - serpent.cpp sha.cpp sha3.cpp sha_simd.cpp shacal2.cpp shacal2_simd.cpp \ - shark.cpp sharkbox.cpp simeck.cpp simeck_simd.cpp simon.cpp \ - simon128_simd.cpp simon64_simd.cpp skipjack.cpp sm3.cpp sm4.cpp \ - sm4_simd.cpp sosemanuk.cpp speck.cpp speck128_simd.cpp speck64_simd.cpp \ - square.cpp squaretb.cpp sse_simd.cpp strciphr.cpp tea.cpp tftables.cpp \ - threefish.cpp tiger.cpp tigertab.cpp ttmac.cpp tweetnacl.cpp twofish.cpp \ - vmac.cpp wake.cpp whrlpool.cpp xed25519.cpp xtr.cpp xtrcrypt.cpp \ - zdeflate.cpp zinflate.cpp zlib.cpp + chacha_simd.cpp chachapoly.cpp cham.cpp cham_simd.cpp channels.cpp \ + cmac.cpp crc.cpp crc_simd.cpp darn.cpp default.cpp des.cpp dessp.cpp \ + dh.cpp dh2.cpp dll.cpp donna_32.cpp donna_64.cpp donna_sse.cpp dsa.cpp \ + eax.cpp ec2n.cpp eccrypto.cpp ecp.cpp elgamal.cpp emsa2.cpp eprecomp.cpp \ + esign.cpp files.cpp filters.cpp fips140.cpp fipstest.cpp gcm.cpp \ + gcm_simd.cpp gf256.cpp gf2_32.cpp gf2n.cpp gf2n_simd.cpp gfpcrypt.cpp \ + gost.cpp gzip.cpp hc128.cpp hc256.cpp hex.cpp hight.cpp hmac.cpp \ + hrtimer.cpp ida.cpp idea.cpp iterhash.cpp kalyna.cpp kalynatab.cpp \ + keccak.cpp keccakc.cpp lea.cpp lea_simd.cpp luc.cpp mars.cpp marss.cpp \ + md2.cpp md4.cpp md5.cpp misc.cpp modes.cpp mqueue.cpp mqv.cpp \ + nbtheory.cpp neon_simd.cpp oaep.cpp osrng.cpp padlkrng.cpp panama.cpp \ + pkcspad.cpp poly1305.cpp polynomi.cpp ppc_power7.cpp ppc_power8.cpp \ + ppc_power9.cpp ppc_simd.cpp pssr.cpp pubkey.cpp queue.cpp rabbit.cpp \ + rabin.cpp randpool.cpp rc2.cpp rc5.cpp rc6.cpp rdrand.cpp rdtables.cpp \ + rijndael.cpp rijndael_simd.cpp ripemd.cpp rng.cpp rsa.cpp rw.cpp \ + safer.cpp salsa.cpp scrypt.cpp seal.cpp seed.cpp serpent.cpp sha.cpp \ + sha3.cpp sha_simd.cpp shacal2.cpp shacal2_simd.cpp shark.cpp sharkbox.cpp \ + simeck.cpp simeck_simd.cpp simon.cpp simon128_simd.cpp simon64_simd.cpp \ + skipjack.cpp sm3.cpp sm4.cpp sm4_simd.cpp sosemanuk.cpp speck.cpp \ + speck128_simd.cpp speck64_simd.cpp square.cpp squaretb.cpp sse_simd.cpp \ + strciphr.cpp tea.cpp tftables.cpp threefish.cpp tiger.cpp tigertab.cpp \ + ttmac.cpp tweetnacl.cpp twofish.cpp vmac.cpp wake.cpp whrlpool.cpp \ + xed25519.cpp xtr.cpp xtrcrypt.cpp zdeflate.cpp zinflate.cpp zlib.cpp LIB_OBJS = \ cryptlib.obj cpu.obj integer.obj 3way.obj adler32.obj algebra.obj \ @@ -86,29 +91,32 @@ LIB_OBJS = \ authenc.obj base32.obj base64.obj basecode.obj bfinit.obj blake2.obj \ blake2b_simd.obj blake2s_simd.obj blowfish.obj blumshub.obj camellia.obj \ cast.obj casts.obj cbcmac.obj ccm.obj chacha.obj chacha_avx.obj \ - chacha_simd.obj cham.obj cham_simd.obj channels.obj cmac.obj crc.obj \ - crc_simd.obj darn.obj default.obj des.obj dessp.obj dh.obj dh2.obj \ - dll.obj donna_32.obj donna_64.obj donna_sse.obj dsa.obj eax.obj ec2n.obj \ - eccrypto.obj ecp.obj elgamal.obj emsa2.obj eprecomp.obj esign.obj files.obj \ - filters.obj fips140.obj fipstest.obj gcm.obj gcm_simd.obj gf256.obj \ - gf2_32.obj gf2n.obj gfpcrypt.obj gost.obj gzip.obj hc128.obj hc256.obj \ - hex.obj hight.obj hmac.obj hrtimer.obj ida.obj idea.obj iterhash.obj \ - kalyna.obj kalynatab.obj keccak.obj keccakc.obj lea.obj lea_simd.obj \ - luc.obj mars.obj marss.obj md2.obj md4.obj md5.obj misc.obj modes.obj \ - mqueue.obj mqv.obj nbtheory.obj neon_simd.obj oaep.obj osrng.obj \ - padlkrng.obj panama.obj pkcspad.obj poly1305.obj polynomi.obj \ - ppc_power7.obj ppc_power8.obj ppc_power9.obj ppc_simd.obj pssr.obj \ - pubkey.obj queue.obj rabbit.obj rabin.obj randpool.obj rc2.obj rc5.obj \ - rc6.obj rdrand.obj rdtables.obj rijndael.obj rijndael_simd.obj ripemd.obj \ - rng.obj rsa.obj rw.obj safer.obj salsa.obj scrypt.obj seal.obj seed.obj \ - serpent.obj sha.obj sha3.obj sha_simd.obj shacal2.obj shacal2_simd.obj \ - shark.obj sharkbox.obj simeck.obj simeck_simd.obj simon.obj \ - simon128_simd.obj simon64_simd.obj skipjack.obj sm3.obj sm4.obj \ - sm4_simd.obj sosemanuk.obj speck.obj speck128_simd.obj speck64_simd.obj \ - square.obj squaretb.obj sse_simd.obj strciphr.obj tea.obj tftables.obj \ - threefish.obj tiger.obj tigertab.obj ttmac.obj tweetnacl.obj twofish.obj \ - vmac.obj wake.obj whrlpool.obj xed25519.obj xtr.obj xtrcrypt.obj \ - zdeflate.obj zinflate.obj zlib.obj + chacha_simd.obj chachapoly.obj cham.obj cham_simd.obj channels.obj \ + cmac.obj crc.obj crc_simd.obj darn.obj default.obj des.obj dessp.obj \ + dh.obj dh2.obj dll.obj donna_32.obj donna_64.obj donna_sse.obj dsa.obj \ + eax.obj ec2n.obj eccrypto.obj ecp.obj elgamal.obj emsa2.obj eprecomp.obj \ + esign.obj files.obj filters.obj fips140.obj fipstest.obj gcm.obj \ + gcm_simd.obj gf256.obj gf2_32.obj gf2n.obj gf2n_simd.obj gfpcrypt.obj \ + gost.obj gzip.obj hc128.obj hc256.obj hex.obj hight.obj hmac.obj \ + hrtimer.obj ida.obj idea.obj iterhash.obj kalyna.obj kalynatab.obj \ + keccak.obj keccakc.obj lea.obj lea_simd.obj luc.obj mars.obj marss.obj \ + md2.obj md4.obj md5.obj misc.obj modes.obj mqueue.obj mqv.obj \ + nbtheory.obj neon_simd.obj oaep.obj osrng.obj padlkrng.obj panama.obj \ + pkcspad.obj poly1305.obj polynomi.obj ppc_power7.obj ppc_power8.obj \ + ppc_power9.obj ppc_simd.obj pssr.obj pubkey.obj queue.obj rabbit.obj \ + rabin.obj randpool.obj rc2.obj rc5.obj rc6.obj rdrand.obj rdtables.obj \ + rijndael.obj rijndael_simd.obj ripemd.obj rng.obj rsa.obj rw.obj \ + safer.obj salsa.obj scrypt.obj seal.obj seed.obj serpent.obj sha.obj \ + sha3.obj sha_simd.obj shacal2.obj shacal2_simd.obj shark.obj sharkbox.obj \ + simeck.obj simeck_simd.obj simon.obj simon128_simd.obj simon64_simd.obj \ + skipjack.obj sm3.obj sm4.obj sm4_simd.obj sosemanuk.obj speck.obj \ + speck128_simd.obj speck64_simd.obj square.obj squaretb.obj sse_simd.obj \ + strciphr.obj tea.obj tftables.obj threefish.obj tiger.obj tigertab.obj \ + ttmac.obj tweetnacl.obj twofish.obj vmac.obj wake.obj whrlpool.obj \ + xed25519.obj xtr.obj xtrcrypt.obj zdeflate.obj zinflate.obj zlib.obj + +ASM_OBJS = \ + rdrand-x86.obj rdrand-x64.obj x64masm.obj x64dll.obj TEST_SRCS = \ test.cpp bench1.cpp bench2.cpp bench3.cpp datatest.cpp \ @@ -127,7 +135,15 @@ TEST_OBJS = \ CXX = cl.exe LD = link.exe AR = lib.exe -RM = del.exe +RM = del +RMDIR = rd + +# We may misdetect the environment on VS2005 or so. Uncomment as +# needed to match the Developer Prompt environment. +# PLATFORM = x86 +# PLATFORM = x64 +# PLATFORM = arm +# PLATFORM = arm64 # C4231 is needed for VS2008 and below. Lots of noise... CXXFLAGS = /nologo /W4 /wd4231 /wd4511 /wd4156 /D_MBCS /Zi /TP /GR /EHsc @@ -195,7 +211,6 @@ LDFLAGS = $(LDFLAGS) /MACHINE:X64 LDLIBS = $(LDLIBS) kernel32.lib !ENDIF -# We still don't know what we need for ARM64 on Windows. ARM64 and arm64 may be incorrect !IF "$(PLATFORM)" == "ARM" || "$(PLATFORM)" == "arm" || "$(PLATFORM)" == "ARM64" || "$(PLATFORM)" == "arm64" # CXXFLAGS = $(CXXFLAGS) /D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1 /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP CXXFLAGS = $(CXXFLAGS) /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP @@ -207,14 +222,57 @@ LIB_OBJS = $(LIB_OBJS) neon_simd.obj all: cryptest.exe +# For testing cryptopp.dll and CRYPTOPP_IMPORTS +#cryptest.exe: pch.pch cryptopp.lib $(TEST_OBJS) +# $(LD) $(LDFLAGS) $(TEST_OBJS) cryptopp.lib $(LDLIBS) /out:$@ + cryptest.exe: pch.pch cryptlib.lib $(TEST_OBJS) $(LD) $(LDFLAGS) $(TEST_OBJS) cryptlib.lib $(LDLIBS) /out:$@ cryptlib.lib: $(LIB_OBJS) $(AR) $(ARFLAGS) $(LIB_OBJS) /out:$@ -clean: - $(RM) /F /Q pch.pch $(LIB_OBJS) pch.obj rdrand-x86.obj rdrand-x64.obj x64masm.obj x64dll.obj cryptlib.lib $(TEST_OBJS) cryptest.exe *.pdb +cryptopp.dump: cryptlib.lib + dumpbin.exe /LINKERMEMBER cryptlib.lib /OUT:$@ + +cryptopp.map: $(LIB_OBJS) + $(LD) $(LDFLAGS) /DLL /MAP /MAPINFO:EXPORTS $(LIB_OBJS) + mv cryptlib.map cryptopp.map + +cryptopp.def: cryptopp.dump + dump2def.exe cryptopp.dump cryptopp.def + +# LD produces 3 output artifacts for cryptopp.dll +cryptopp.dll cryptopp.lib cryptopp.exp: $(LIB_OBJS) cryptopp.def + $(LD) $(LDFLAGS) /DLL /DEF:cryptopp.def /IGNORE:4102 $(LIB_OBJS) $(LDLIBS) /out:cryptopp.dll + +clean :: + $(RM) /F /Q cryptest.exe cryptest.lib cryptest.exp pch.pch 2>nul +clean :: + $(RM) /F /Q cryptlib.lib cryptlib.exp cryptlib.dll 2>nul +clean :: + $(RM) /F /Q cryptopp.dll cryptopp.lib cryptopp.exp cryptopp.def 2>nul +clean :: + $(RM) /F /Q pch.obj $(LIB_OBJS) $(ASM_OBJS) $(TEST_OBJS) *.pdb 2>nul + +distclean :: clean +!IF EXIST ($(USERNAME).sdf) + attrib -r -a -s -h $(USERNAME).sdf 2>nul + $(RM) /F /Q $(USERNAME).sdf 2>nul +!ENDIF +!IF EXIST ($(USERNAME).suo) + attrib -r -a -s -h $(USERNAME).suo 2>nul + $(RM) /F /Q $(USERNAME).suo 2>nul +!ENDIF +!IF EXIST (Win32\) + $(RMDIR) Win32\ /q /s 2>nul +!ENDIF +!IF EXIST (x64\) + $(RMDIR) x64\ /q /s 2>nul +!ENDIF +!IF EXIST (ipch\) + $(RMDIR) ipch\ /q /s 2>nul +!ENDIF # Precompiled header pch.pch: pch.h pch.cpp @@ -245,6 +303,54 @@ chacha_avx.obj: $(CXX) $(CXXFLAGS) /arch:AVX /c chacha_avx.cpp !endif +# For testing cryptopp.dll and CRYPTOPP_IMPORTS +#CXXFLAGS_IMPORTS = /wd4275 /wd4251 /DCRYPTOPP_IMPORTS +#test.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#datatest.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#fipstest.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#bench1.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#bench2.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#bench3.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#regtest1.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#regtest2.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#regtest3.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#regtest4.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#validat1.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#validat2.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#validat3.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#validat4.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#validat5.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#validat6.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#validat7.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#validat8.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#validat9.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? +#validat10.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_IMPORTS) /c $? + +# For testing cryptopp.dll and CRYPTOPP_EXPORTS +#CXXFLAGS_EXPORTS = /wd4275 /wd4251 /DCXXFLAGS_EXPORTS +#.cpp.obj: +# $(CXX) $(CXXFLAGS) $(CXXFLAGS_EXPORTS) /c $< + .cpp.obj: $(CXX) $(CXXFLAGS) /c $< diff --git a/vendor/cryptopp/vendor_cryptopp/cryptest.sh b/vendor/cryptopp/vendor_cryptopp/cryptest.sh index f1a714dc..b79a6577 100755 --- a/vendor/cryptopp/vendor_cryptopp/cryptest.sh +++ b/vendor/cryptopp/vendor_cryptopp/cryptest.sh @@ -108,6 +108,7 @@ fi THIS_SYSTEM=$(uname -s 2>&1) IS_AIX=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c aix) IS_DARWIN=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c darwin) +IS_HURD=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c gnu) IS_LINUX=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c linux) IS_CYGWIN=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c cygwin) IS_MINGW=$(echo -n "$THIS_SYSTEM" | "$GREP" -i -c mingw) @@ -155,6 +156,8 @@ if [[ ("$IS_X86" -ne "0" || "$IS_X64" -ne "0") ]]; then X86_CPU_FLAGS=$(grep Features /var/run/dmesg.boot) elif [[ ("$IS_DRAGONFLY" -ne "0") ]]; then X86_CPU_FLAGS=$(dmesg | grep Features) + elif [[ ("$IS_HURD" -ne "0") ]]; then + : # Do nothing... cpuid is not helpful at the moment else X86_CPU_FLAGS="$($AWK '{IGNORECASE=1}{if ($1 == "flags"){print;exit}}' < /proc/cpuinfo | cut -f 2 -d ':')" fi diff --git a/vendor/cryptopp/vendor_cryptopp/cryptlib.h b/vendor/cryptopp/vendor_cryptopp/cryptlib.h index 34b98b03..0f5c112e 100644 --- a/vendor/cryptopp/vendor_cryptopp/cryptlib.h +++ b/vendor/cryptopp/vendor_cryptopp/cryptlib.h @@ -3,7 +3,7 @@ /// \file cryptlib.h /// \brief Abstract base classes that provide a uniform interface to this library. -/*! \mainpage Crypto++ Library 8.0 API Reference +/*! \mainpage Crypto++ Library 8.1 API Reference
Abstract Base Classes
cryptlib.h @@ -500,9 +500,9 @@ const std::string AAD_CHANNEL; const NameValuePairs& g_nullNameValuePairs; #else -extern const std::string DEFAULT_CHANNEL; -extern const std::string AAD_CHANNEL; -extern const NameValuePairs& g_nullNameValuePairs; +extern CRYPTOPP_DLL const std::string DEFAULT_CHANNEL; +extern CRYPTOPP_DLL const std::string AAD_CHANNEL; +extern CRYPTOPP_DLL const NameValuePairs& g_nullNameValuePairs; #endif // Document additional name spaces which show up elsewhere in the sources. @@ -1129,9 +1129,11 @@ public: unsigned int TagSize() const {return DigestSize();} /// \brief Provides the block size of the compression function - /// \return the block size of the compression function, in bytes - /// \details BlockSize() will return 0 if the hash is not block based. For example, - /// SHA3 is a recursive hash (not an iterative hash), and it does not have a block size. + /// \return block size of the compression function, in bytes + /// \details BlockSize() will return 0 if the hash is not block based + /// or does not have an equivalent block size. For example, Keccak + /// and SHA-3 do not have a block size, but they do have an equivalent + /// block size called rate expressed as r. virtual unsigned int BlockSize() const {return 0;} /// \brief Provides the input block size most efficient for this hash. @@ -1301,31 +1303,63 @@ public: /// \brief Provides the maximum length of AAD that can be input /// \return the maximum length of AAD that can be input before the encrypted data virtual lword MaxHeaderLength() const =0; + /// \brief Provides the maximum length of encrypted data /// \return the maximum length of encrypted data virtual lword MaxMessageLength() const =0; + /// \brief Provides the the maximum length of AAD /// \return the maximum length of AAD that can be input after the encrypted data virtual lword MaxFooterLength() const {return 0;} + /// \brief Determines if data lengths must be specified prior to inputting data /// \return true if the data lengths are required before inputting data, false otherwise /// \details if this function returns true, SpecifyDataLengths() must be called before attempting to input data. /// This is the case for some schemes, such as CCM. /// \sa SpecifyDataLengths() virtual bool NeedsPrespecifiedDataLengths() const {return false;} - /// \brief Prespecifies the data lengths - /// \details this function only needs to be called if NeedsPrespecifiedDataLengths() returns true + + /// \brief Prescribes the data lengths + /// \param headerLength size of data before message is input, in bytes + /// \param messageLength size of the message, in bytes + /// \param footerLength size of data after message is input, in bytes + /// \details SpecifyDataLengths() only needs to be called if NeedsPrespecifiedDataLengths() returns true. + /// If true, then headerLength will be validated against MaxHeaderLength(), + /// messageLength will be validated against MaxMessageLength(), and + /// footerLength will be validated against MaxFooterLength(). /// \sa NeedsPrespecifiedDataLengths() void SpecifyDataLengths(lword headerLength, lword messageLength, lword footerLength=0); + /// \brief Encrypts and calculates a MAC in one call - /// \details EncryptAndAuthenticate() encrypts and generates the MAC in one call. The function will truncate MAC if - /// macSize < TagSize(). + /// \param ciphertext the encryption buffer + /// \param mac the mac buffer + /// \param macSize the size of the MAC buffer, in bytes + /// \param iv the iv buffer + /// \param ivLength the size of the IV buffer, in bytes + /// \param header the AAD buffer + /// \param headerLength the size of the AAD buffer, in bytes + /// \param message the message buffer + /// \param messageLength the size of the messagetext buffer, in bytes + /// \details EncryptAndAuthenticate() encrypts and generates the MAC in one call. The function + /// truncates the MAC if macSize < TagSize(). virtual void EncryptAndAuthenticate(byte *ciphertext, byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *header, size_t headerLength, const byte *message, size_t messageLength); + /// \brief Decrypts and verifies a MAC in one call + /// \param message the decryption buffer + /// \param mac the mac buffer + /// \param macSize the size of the MAC buffer, in bytes + /// \param iv the iv buffer + /// \param ivLength the size of the IV buffer, in bytes + /// \param header the AAD buffer + /// \param headerLength the size of the AAD buffer, in bytes + /// \param ciphertext the ciphertext buffer + /// \param ciphertextLength the size of the ciphertext buffer, in bytes /// \return true if the MAC is valid and the decoding succeeded, false otherwise - /// \details DecryptAndVerify() decrypts and verifies the MAC in one call. The function returns true iff MAC is valid. - /// DecryptAndVerify() will assume MAC is truncated if macLength < TagSize(). - virtual bool DecryptAndVerify(byte *message, const byte *mac, size_t macLength, const byte *iv, int ivLength, const byte *header, size_t headerLength, const byte *ciphertext, size_t ciphertextLength); + /// \details DecryptAndVerify() decrypts and verifies the MAC in one call. + /// message is a decryption buffer and should be at least as large as the ciphertext buffer. + /// \details The function returns true iff MAC is valid. DecryptAndVerify() assumes the MAC + /// is truncated if macLength < TagSize(). + virtual bool DecryptAndVerify(byte *message, const byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *header, size_t headerLength, const byte *ciphertext, size_t ciphertextLength); /// \brief Provides the name of this algorithm /// \return the standard algorithm name diff --git a/vendor/cryptopp/vendor_cryptopp/cryptlib.vcxproj b/vendor/cryptopp/vendor_cryptopp/cryptlib.vcxproj index 9bf9c1ad..afaae0d4 100644 --- a/vendor/cryptopp/vendor_cryptopp/cryptlib.vcxproj +++ b/vendor/cryptopp/vendor_cryptopp/cryptlib.vcxproj @@ -198,6 +198,7 @@ true AdvancedVectorExtensions2 + @@ -238,6 +239,7 @@ + @@ -255,7 +257,8 @@ - + + @@ -307,6 +310,7 @@ + @@ -403,6 +407,7 @@ + @@ -457,7 +462,6 @@ - @@ -511,6 +515,7 @@ + diff --git a/vendor/cryptopp/vendor_cryptopp/cryptlib.vcxproj.filters b/vendor/cryptopp/vendor_cryptopp/cryptlib.vcxproj.filters index 51fff69a..f3a0db1a 100644 --- a/vendor/cryptopp/vendor_cryptopp/cryptlib.vcxproj.filters +++ b/vendor/cryptopp/vendor_cryptopp/cryptlib.vcxproj.filters @@ -95,6 +95,9 @@ Source Files + + Source Files + Source Files @@ -203,6 +206,9 @@ Source Files + + Source Files + Source Files @@ -251,7 +257,10 @@ Source Files - + + Source Files + + Source Files @@ -401,6 +410,9 @@ Source Files + + Source Files + Source Files @@ -753,9 +765,6 @@ Header Files - - Header Files - Header Files @@ -915,6 +924,9 @@ Header Files + + Header Files + Header Files @@ -1014,11 +1026,20 @@ Header Files + + Header Files + Source Files + + Source Files + + + Source Files + Miscellaneous diff --git a/vendor/cryptopp/vendor_cryptopp/cryptopp.rc b/vendor/cryptopp/vendor_cryptopp/cryptopp.rc index 0ccf2390..07bfea74 100644 --- a/vendor/cryptopp/vendor_cryptopp/cryptopp.rc +++ b/vendor/cryptopp/vendor_cryptopp/cryptopp.rc @@ -27,8 +27,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 8,0,0,0 - PRODUCTVERSION 8,0,0,0 + FILEVERSION 8,1,0,0 + PRODUCTVERSION 8,1,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -46,13 +46,13 @@ BEGIN VALUE "Comments", "Free crypto library, more information available at www.cryptopp.com" VALUE "CompanyName", "Wei Dai" VALUE "FileDescription", "Crypto++® Library DLL" - VALUE "FileVersion", "8, 0, 0, 0" + VALUE "FileVersion", "8, 1, 0, 0" VALUE "InternalName", "cryptopp" VALUE "LegalCopyright", "Copyright© 1995-2018 by Wei Dai" VALUE "LegalTrademarks", "Crypto++®" VALUE "OriginalFilename", "cryptopp.dll" VALUE "ProductName", "Crypto++® Library" - VALUE "ProductVersion", "8, 0, 0, 0" + VALUE "ProductVersion", "8, 1, 0, 0" END END BLOCK "VarFileInfo" diff --git a/vendor/cryptopp/vendor_cryptopp/datatest.cpp b/vendor/cryptopp/vendor_cryptopp/datatest.cpp index 6a15ecb2..d948421a 100644 --- a/vendor/cryptopp/vendor_cryptopp/datatest.cpp +++ b/vendor/cryptopp/vendor_cryptopp/datatest.cpp @@ -527,7 +527,7 @@ void TestSymmetricCipher(TestData &v, const NameValuePairs &overrideParameters) // been processed. Also note we only unlatch from testDataPairs. If // overrideParameters are specified, the caller is responsible for // managing the parameter. - v.erase("Tweak"); v.erase("BlockSize"); v.erase("BlockPaddingScheme"); + v.erase("Tweak"); v.erase("InitialBlock"); v.erase("BlockSize"); v.erase("BlockPaddingScheme"); std::string encrypted, xorDigest, ciphertext, ciphertextXorDigest; if (test == "EncryptionMCT" || test == "DecryptionMCT") diff --git a/vendor/cryptopp/vendor_cryptopp/donna.h b/vendor/cryptopp/vendor_cryptopp/donna.h index 68a0c04b..321da901 100644 --- a/vendor/cryptopp/vendor_cryptopp/donna.h +++ b/vendor/cryptopp/vendor_cryptopp/donna.h @@ -81,6 +81,23 @@ int ed25519_publickey(byte publicKey[32], const byte secretKey[32]); /// SHA512. int ed25519_sign(const byte* message, size_t messageLength, const byte secretKey[32], const byte publicKey[32], byte signature[64]); +/// \brief Creates a signature on a message +/// \param stream std::istream derived class +/// \param publicKey byte array with the public key +/// \param secretKey byte array with the private key +/// \param signature byte array for the signature +/// \returns 0 on success, non-0 otherwise +/// \details ed25519_sign() generates a signature on a message using +/// the public and private keys. The various buffers can be exact +/// sizes, and do not require extra space like when using the +/// NaCl library functions. +/// \details This ed25519_sign() overload handles large streams. It +/// was added for signing and verifying files that are too large +/// for a memory allocation. +/// \details At the moment the hash function for signing is fixed at +/// SHA512. +int ed25519_sign(std::istream& stream, const byte secretKey[32], const byte publicKey[32], byte signature[64]); + /// \brief Verifies a signature on a message /// \param message byte array with the message /// \param messageLength size of the message, in bytes @@ -88,13 +105,29 @@ int ed25519_sign(const byte* message, size_t messageLength, const byte secretKey /// \param signature byte array with the signature /// \returns 0 on success, non-0 otherwise /// \details ed25519_sign_open() verifies a signature on a message using -/// the public. The various buffers can be exact sizes, and do not +/// the public key. The various buffers can be exact sizes, and do not /// require extra space like when using the NaCl library functions. /// \details At the moment the hash function for signing is fixed at /// SHA512. int ed25519_sign_open(const byte *message, size_t messageLength, const byte publicKey[32], const byte signature[64]); +/// \brief Verifies a signature on a message +/// \param stream std::istream derived class +/// \param publicKey byte array with the public key +/// \param signature byte array with the signature +/// \returns 0 on success, non-0 otherwise +/// \details ed25519_sign_open() verifies a signature on a message using +/// the public key. The various buffers can be exact sizes, and do not +/// require extra space like when using the NaCl library functions. +/// \details This ed25519_sign_open() overload handles large streams. It +/// was added for signing and verifying files that are too large +/// for a memory allocation. +/// \details At the moment the hash function for signing is fixed at +/// SHA512. +int +ed25519_sign_open(std::istream& stream, const byte publicKey[32], const byte signature[64]); + //****************************** Internal ******************************// #ifndef CRYPTOPP_DOXYGEN_PROCESSING diff --git a/vendor/cryptopp/vendor_cryptopp/donna_32.cpp b/vendor/cryptopp/vendor_cryptopp/donna_32.cpp index 9fe5d22b..25227ff7 100644 --- a/vendor/cryptopp/vendor_cryptopp/donna_32.cpp +++ b/vendor/cryptopp/vendor_cryptopp/donna_32.cpp @@ -27,6 +27,13 @@ #include "misc.h" #include "cpu.h" +#include +#include + +#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE +# pragma GCC diagnostic ignored "-Wunused-function" +#endif + // Squash MS LNK4221 and libtool warnings extern const char DONNA32_FNAME[] = __FILE__; @@ -1029,7 +1036,21 @@ ed25519_extsk(hash_512bits extsk, const byte sk[32]) { } void -ed25519_hram(hash_512bits hram, const byte RS[64], const byte pk[32], const unsigned char *m, size_t mlen) { +UpdateFromStream(HashTransformation& hash, std::istream& stream) +{ + SecByteBlock block(4096); + while (stream.read((char*)block.begin(), block.size())) + hash.Update(block, block.size()); + + std::streamsize rem = stream.gcount(); + if (rem) + hash.Update(block, (size_t)rem); + + block.SetMark(0); +} + +void +ed25519_hram(hash_512bits hram, const byte RS[64], const byte pk[32], const byte *m, size_t mlen) { SHA512 hash; hash.Update(RS, 32); hash.Update(pk, 32); @@ -1037,6 +1058,15 @@ ed25519_hram(hash_512bits hram, const byte RS[64], const byte pk[32], const unsi hash.Final(hram); } +void +ed25519_hram(hash_512bits hram, const byte RS[64], const byte pk[32], std::istream& stream) { + SHA512 hash; + hash.Update(RS, 32); + hash.Update(pk, 32); + UpdateFromStream(hash, stream); + hash.Final(hram); +} + inline bignum256modm_element_t lt_modm(bignum256modm_element_t a, bignum256modm_element_t b) { return (a - b) >> 31; @@ -1552,7 +1582,7 @@ ge25519_pack(byte r[32], const ge25519 *p) { } int -ed25519_verify(const unsigned char *x, const unsigned char *y, size_t len) { +ed25519_verify(const byte *x, const byte *y, size_t len) { size_t differentbits = 0; while (len--) differentbits |= (*x++ ^ *y++); @@ -1735,7 +1765,7 @@ int curve25519_mult_CXX(byte sharedKey[32], const byte secretKey[32], const byte using namespace CryptoPP::Donna::X25519; FixedSizeSecBlock e; - for (size_t i = 0;i < 32;++i) + for (size_t i = 0; i < 32; ++i) e[i] = secretKey[i]; e[0] &= 0xf8; e[31] &= 0x7f; e[31] |= 0x40; @@ -1853,6 +1883,55 @@ ed25519_publickey(byte publicKey[32], const byte secretKey[32]) return ed25519_publickey_CXX(publicKey, secretKey); } +int +ed25519_sign_CXX(std::istream& stream, const byte sk[32], const byte pk[32], byte RS[64]) +{ + using namespace CryptoPP::Donna::Ed25519; + + bignum256modm r, S, a; + ALIGN(16) ge25519 R; + hash_512bits extsk, hashr, hram; + + // Unfortunately we need to read the stream twice. The fisrt time calculates + // 'r = H(aExt[32..64], m)'. The second time calculates 'S = H(R,A,m)'. There + // is a data dependency due to hashing 'RS' with 'R = [r]B' that does not + // allow us to read the stream once. + std::streampos where = stream.tellg(); + + ed25519_extsk(extsk, sk); + + /* r = H(aExt[32..64], m) */ + SHA512 hash; + hash.Update(extsk + 32, 32); + UpdateFromStream(hash, stream); + hash.Final(hashr); + expand256_modm(r, hashr, 64); + + /* R = rB */ + ge25519_scalarmult_base_niels(&R, ge25519_niels_base_multiples, r); + ge25519_pack(RS, &R); + + // Reset stream for the second digest + stream.clear(); + stream.seekg(where); + + /* S = H(R,A,m).. */ + ed25519_hram(hram, RS, pk, stream); + expand256_modm(S, hram, 64); + + /* S = H(R,A,m)a */ + expand256_modm(a, extsk, 32); + mul256_modm(S, S, a); + + /* S = (r + H(R,A,m)a) */ + add256_modm(S, S, r); + + /* S = (r + H(R,A,m)a) mod L */ + contract256_modm(RS + 32, S); + + return 0; +} + int ed25519_sign_CXX(const byte *m, size_t mlen, const byte sk[32], const byte pk[32], byte RS[64]) { @@ -1892,6 +1971,13 @@ ed25519_sign_CXX(const byte *m, size_t mlen, const byte sk[32], const byte pk[32 return 0; } +int +ed25519_sign(std::istream& stream, const byte secretKey[32], const byte publicKey[32], + byte signature[64]) +{ + return ed25519_sign_CXX(stream, secretKey, publicKey, signature); +} + int ed25519_sign(const byte* message, size_t messageLength, const byte secretKey[32], const byte publicKey[32], byte signature[64]) @@ -1899,6 +1985,34 @@ ed25519_sign(const byte* message, size_t messageLength, const byte secretKey[32] return ed25519_sign_CXX(message, messageLength, secretKey, publicKey, signature); } +int +ed25519_sign_open_CXX(std::istream& stream, const byte pk[32], const byte RS[64]) { + + using namespace CryptoPP::Donna::Ed25519; + + ALIGN(16) ge25519 R, A; + hash_512bits hash; + bignum256modm hram, S; + byte checkR[32]; + + if ((RS[63] & 224) || !ge25519_unpack_negative_vartime(&A, pk)) + return -1; + + /* hram = H(R,A,m) */ + ed25519_hram(hash, RS, pk, stream); + expand256_modm(hram, hash, 64); + + /* S */ + expand256_modm(S, RS + 32, 32); + + /* SB - H(R,A,m)A */ + ge25519_double_scalarmult_vartime(&R, &A, hram, S); + ge25519_pack(checkR, &R); + + /* check that R = SB - H(R,A,m)A */ + return ed25519_verify(RS, checkR, 32) ? 0 : -1; +} + int ed25519_sign_open_CXX(const byte *m, size_t mlen, const byte pk[32], const byte RS[64]) { @@ -1907,7 +2021,7 @@ ed25519_sign_open_CXX(const byte *m, size_t mlen, const byte pk[32], const byte ALIGN(16) ge25519 R, A; hash_512bits hash; bignum256modm hram, S; - unsigned char checkR[32]; + byte checkR[32]; if ((RS[63] & 224) || !ge25519_unpack_negative_vartime(&A, pk)) return -1; @@ -1933,6 +2047,12 @@ ed25519_sign_open(const byte *message, size_t messageLength, const byte publicKe return ed25519_sign_open_CXX(message, messageLength, publicKey, signature); } +int +ed25519_sign_open(std::istream& stream, const byte publicKey[32], const byte signature[64]) +{ + return ed25519_sign_open_CXX(stream, publicKey, signature); +} + NAMESPACE_END // Donna NAMESPACE_END // CryptoPP diff --git a/vendor/cryptopp/vendor_cryptopp/donna_64.cpp b/vendor/cryptopp/vendor_cryptopp/donna_64.cpp index 370ff43b..5319c636 100644 --- a/vendor/cryptopp/vendor_cryptopp/donna_64.cpp +++ b/vendor/cryptopp/vendor_cryptopp/donna_64.cpp @@ -27,6 +27,13 @@ #include "misc.h" #include "cpu.h" +#include +#include + +#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE +# pragma GCC diagnostic ignored "-Wunused-function" +#endif + // Squash MS LNK4221 and libtool warnings extern const char DONNA64_FNAME[] = __FILE__; @@ -728,7 +735,7 @@ curve25519_contract(byte *out, const bignum25519 input) { /* out = (flag) ? in : out */ inline void -curve25519_move_conditional_bytes(uint8_t out[96], const uint8_t in[96], word64 flag) { +curve25519_move_conditional_bytes(byte out[96], const byte in[96], word64 flag) { const word64 nb = flag - 1, b = ~nb; const word64 *inq = (const word64 *)in; word64 *outq = (word64 *)out; @@ -749,7 +756,7 @@ curve25519_move_conditional_bytes(uint8_t out[96], const uint8_t in[96], word64 /* if (iswap) swap(a, b) */ inline void curve25519_swap_conditional(bignum25519 a, bignum25519 b, word64 iswap) { - const word64 swap = (word64)(-(int64_t)iswap); + const word64 swap = (word64)(-(sword64)iswap); word64 x0,x1,x2,x3,x4; x0 = swap & (a[0] ^ b[0]); a[0] ^= x0; b[0] ^= x0; @@ -777,7 +784,21 @@ ed25519_extsk(hash_512bits extsk, const byte sk[32]) { } void -ed25519_hram(hash_512bits hram, const byte RS[64], const byte pk[32], const unsigned char *m, size_t mlen) { +UpdateFromStream(HashTransformation& hash, std::istream& stream) +{ + SecByteBlock block(4096); + while (stream.read((char*)block.begin(), block.size())) + hash.Update(block, block.size()); + + std::streamsize rem = stream.gcount(); + if (rem) + hash.Update(block, rem); + + block.SetMark(0); +} + +void +ed25519_hram(hash_512bits hram, const byte RS[64], const byte pk[32], const byte *m, size_t mlen) { SHA512 hash; hash.Update(RS, 32); hash.Update(pk, 32); @@ -785,6 +806,15 @@ ed25519_hram(hash_512bits hram, const byte RS[64], const byte pk[32], const unsi hash.Final(hram); } +void +ed25519_hram(hash_512bits hram, const byte RS[64], const byte pk[32], std::istream& stream) { + SHA512 hash; + hash.Update(RS, 32); + hash.Update(pk, 32); + UpdateFromStream(hash, stream); + hash.Final(hram); +} + bignum256modm_element_t lt_modm(bignum256modm_element_t a, bignum256modm_element_t b) { return (a - b) >> 63; @@ -857,7 +887,6 @@ barrett_reduce256_modm(bignum256modm r, const bignum256modm q1, const bignum256m reduce256_modm(r); } - void add256_modm(bignum256modm r, const bignum256modm x, const bignum256modm y) { bignum256modm_element_t c; @@ -1268,7 +1297,7 @@ ge25519_pack(byte r[32], const ge25519 *p) { } int -ed25519_verify(const unsigned char *x, const unsigned char *y, size_t len) { +ed25519_verify(const byte *x, const byte *y, size_t len) { size_t differentbits = 0; while (len--) differentbits |= (*x++ ^ *y++); @@ -1376,7 +1405,7 @@ ge25519_windowb_equal(word32 b, word32 c) { } void -ge25519_scalarmult_base_choose_niels(ge25519_niels *t, const uint8_t table[256][96], word32 pos, signed char b) { +ge25519_scalarmult_base_choose_niels(ge25519_niels *t, const byte table[256][96], word32 pos, signed char b) { bignum25519 neg; word32 sign = (word32)((byte)b >> 7); word32 mask = ~(sign - 1); @@ -1384,7 +1413,7 @@ ge25519_scalarmult_base_choose_niels(ge25519_niels *t, const uint8_t table[256][ word32 i; /* ysubx, xaddy, t2d in packed form. initialize to ysubx = 1, xaddy = 1, t2d = 0 */ - uint8_t packed[96] = {0}; + byte packed[96] = {0}; packed[0] = 1; packed[32] = 1; @@ -1406,7 +1435,7 @@ ge25519_scalarmult_base_choose_niels(ge25519_niels *t, const uint8_t table[256][ /* computes [s]basepoint */ void -ge25519_scalarmult_base_niels(ge25519 *r, const uint8_t basepoint_table[256][96], const bignum256modm s) { +ge25519_scalarmult_base_niels(ge25519 *r, const byte basepoint_table[256][96], const bignum256modm s) { signed char b[64]; word32 i; ge25519_niels t; @@ -1569,6 +1598,54 @@ ed25519_publickey(byte publicKey[32], const byte secretKey[32]) return ed25519_publickey_CXX(publicKey, secretKey); } +int +ed25519_sign_CXX(std::istream& stream, const byte sk[32], const byte pk[32], byte RS[64]) +{ + using namespace CryptoPP::Donna::Ed25519; + + bignum256modm r, S, a; + ALIGN(16) ge25519 R; + hash_512bits extsk, hashr, hram; + + // Unfortunately we need to read the stream twice. The fisrt time calculates + // 'r = H(aExt[32..64], m)'. The second time calculates 'S = H(R,A,m)'. There + // is a data dependency due to hashing 'RS' with 'R = [r]B' that does not + // allow us to read the stream once. + std::streampos where = stream.tellg(); + + ed25519_extsk(extsk, sk); + + /* r = H(aExt[32..64], m) */ + SHA512 hash; + hash.Update(extsk + 32, 32); + UpdateFromStream(hash, stream); + hash.Final(hashr); + expand256_modm(r, hashr, 64); + + /* R = rB */ + ge25519_scalarmult_base_niels(&R, ge25519_niels_base_multiples, r); + ge25519_pack(RS, &R); + + // Reset stream for the second digest + stream.clear(); + stream.seekg(where); + + /* S = H(R,A,m).. */ + ed25519_hram(hram, RS, pk, stream); + expand256_modm(S, hram, 64); + + /* S = H(R,A,m)a */ + expand256_modm(a, extsk, 32); + mul256_modm(S, S, a); + + /* S = (r + H(R,A,m)a) */ + add256_modm(S, S, r); + + /* S = (r + H(R,A,m)a) mod L */ + contract256_modm(RS + 32, S); + return 0; +} + int ed25519_sign_CXX(const byte *m, size_t mlen, const byte sk[32], const byte pk[32], byte RS[64]) { @@ -1607,6 +1684,13 @@ ed25519_sign_CXX(const byte *m, size_t mlen, const byte sk[32], const byte pk[32 return 0; } +int +ed25519_sign(std::istream& stream, const byte secretKey[32], const byte publicKey[32], + byte signature[64]) +{ + return ed25519_sign_CXX(stream, secretKey, publicKey, signature); +} + int ed25519_sign(const byte* message, size_t messageLength, const byte secretKey[32], const byte publicKey[32], byte signature[64]) @@ -1622,7 +1706,7 @@ ed25519_sign_open_CXX(const byte *m, size_t mlen, const byte pk[32], const byte ALIGN(16) ge25519 R, A; hash_512bits hash; bignum256modm hram, S; - unsigned char checkR[32]; + byte checkR[32]; if ((RS[63] & 224) || !ge25519_unpack_negative_vartime(&A, pk)) return -1; @@ -1642,6 +1726,40 @@ ed25519_sign_open_CXX(const byte *m, size_t mlen, const byte pk[32], const byte return ed25519_verify(RS, checkR, 32) ? 0 : -1; } +int +ed25519_sign_open_CXX(std::istream& stream, const byte pk[32], const byte RS[64]) { + + using namespace CryptoPP::Donna::Ed25519; + + ALIGN(16) ge25519 R, A; + hash_512bits hash; + bignum256modm hram, S; + byte checkR[32]; + + if ((RS[63] & 224) || !ge25519_unpack_negative_vartime(&A, pk)) + return -1; + + /* hram = H(R,A,m) */ + ed25519_hram(hash, RS, pk, stream); + expand256_modm(hram, hash, 64); + + /* S */ + expand256_modm(S, RS + 32, 32); + + /* SB - H(R,A,m)A */ + ge25519_double_scalarmult_vartime(&R, &A, hram, S); + ge25519_pack(checkR, &R); + + /* check that R = SB - H(R,A,m)A */ + return ed25519_verify(RS, checkR, 32) ? 0 : -1; +} + +int +ed25519_sign_open(std::istream& stream, const byte publicKey[32], const byte signature[64]) +{ + return ed25519_sign_open_CXX(stream, publicKey, signature); +} + int ed25519_sign_open(const byte *message, size_t messageLength, const byte publicKey[32], const byte signature[64]) { diff --git a/vendor/cryptopp/vendor_cryptopp/donna_sse.cpp b/vendor/cryptopp/vendor_cryptopp/donna_sse.cpp index 99607b6d..410afbc4 100644 --- a/vendor/cryptopp/vendor_cryptopp/donna_sse.cpp +++ b/vendor/cryptopp/vendor_cryptopp/donna_sse.cpp @@ -24,6 +24,7 @@ // and not the actual alignment of the variable and data. #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE # pragma GCC diagnostic ignored "-Wcast-align" +# pragma GCC diagnostic ignored "-Wunused-function" #endif // Squash MS LNK4221 and libtool warnings diff --git a/vendor/cryptopp/vendor_cryptopp/eccrypto.cpp b/vendor/cryptopp/vendor_cryptopp/eccrypto.cpp index eed99a17..f76c495a 100644 --- a/vendor/cryptopp/vendor_cryptopp/eccrypto.cpp +++ b/vendor/cryptopp/vendor_cryptopp/eccrypto.cpp @@ -99,7 +99,12 @@ template<> struct EcRecommendedParameters StringSource ssA(a, true, new HexDecoder); StringSource ssB(b, true, new HexDecoder); if (t0 == 0) - return new EC2N(GF2NT(t2, t3, t4), EC2N::FieldElement(ssA, (size_t)ssA.MaxRetrievable()), EC2N::FieldElement(ssB, (size_t)ssB.MaxRetrievable())); + { + if (t2 == 233 && t3 == 74 && t4 == 0) + return new EC2N(GF2NT233(233, 74, 0), EC2N::FieldElement(ssA, (size_t)ssA.MaxRetrievable()), EC2N::FieldElement(ssB, (size_t)ssB.MaxRetrievable())); + else + return new EC2N(GF2NT(t2, t3, t4), EC2N::FieldElement(ssA, (size_t)ssA.MaxRetrievable()), EC2N::FieldElement(ssB, (size_t)ssB.MaxRetrievable())); + } else return new EC2N(GF2NPP(t0, t1, t2, t3, t4), EC2N::FieldElement(ssA, (size_t)ssA.MaxRetrievable()), EC2N::FieldElement(ssB, (size_t)ssB.MaxRetrievable())); }; diff --git a/vendor/cryptopp/vendor_cryptopp/fhmqv.h b/vendor/cryptopp/vendor_cryptopp/fhmqv.h index 38657ee8..91cbd9b1 100644 --- a/vendor/cryptopp/vendor_cryptopp/fhmqv.h +++ b/vendor/cryptopp/vendor_cryptopp/fhmqv.h @@ -135,6 +135,7 @@ public: try { + this->GetMaterial().DoQuickSanityCheck(); const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); if(m_role == RoleServer) diff --git a/vendor/cryptopp/vendor_cryptopp/fipstest.cpp b/vendor/cryptopp/vendor_cryptopp/fipstest.cpp index d2ece6df..2440b94f 100644 --- a/vendor/cryptopp/vendor_cryptopp/fipstest.cpp +++ b/vendor/cryptopp/vendor_cryptopp/fipstest.cpp @@ -30,18 +30,18 @@ #include #if defined(_MSC_VER) && _MSC_VER >= 1400 -#ifdef _M_IX86 -#define _CRT_DEBUGGER_HOOK _crt_debugger_hook -#else -#define _CRT_DEBUGGER_HOOK __crt_debugger_hook -#endif -#if _MSC_VER < 1900 +# ifdef _M_IX86 +# define _CRT_DEBUGGER_HOOK _crt_debugger_hook +# else +# define _CRT_DEBUGGER_HOOK __crt_debugger_hook +# endif +# if _MSC_VER < 1900 extern "C" {_CRTIMP void __cdecl _CRT_DEBUGGER_HOOK(int);} -#else +# else extern "C" {void __cdecl _CRT_DEBUGGER_HOOK(int); } +# endif #endif -#endif -#endif +#endif // CRYPTOPP_WIN32_AVAILABLE #include #include @@ -401,7 +401,7 @@ bool IntegrityCheckModule(const char *moduleFilename, const byte *expectedModule } } -#if defined(_MSC_VER) && _MSC_VER >= 1400 && !defined(_M_ARM) +#if defined(_MSC_VER) && _MSC_VER >= 1400 && !(defined(_M_ARM) || defined(_M_ARM64)) // first byte of _CRT_DEBUGGER_HOOK gets modified in memory by the debugger invisibly, so read it from file if (IsDebuggerPresent()) { diff --git a/vendor/cryptopp/vendor_cryptopp/gcm.h b/vendor/cryptopp/vendor_cryptopp/gcm.h index db42aad5..a9302eec 100644 --- a/vendor/cryptopp/vendor_cryptopp/gcm.h +++ b/vendor/cryptopp/vendor_cryptopp/gcm.h @@ -80,7 +80,7 @@ protected: virtual BlockCipher & AccessBlockCipher() =0; virtual GCM_TablesOption GetTablesOption() const =0; - const BlockCipher & GetBlockCipher() const {return const_cast(this)->AccessBlockCipher();}; + const BlockCipher & GetBlockCipher() const {return const_cast(this)->AccessBlockCipher();} byte *HashBuffer() {return m_buffer+REQUIRED_BLOCKSIZE;} byte *HashKey() {return m_buffer+2*REQUIRED_BLOCKSIZE;} byte *MulTable() {return m_buffer+3*REQUIRED_BLOCKSIZE;} diff --git a/vendor/cryptopp/vendor_cryptopp/gcm_simd.cpp b/vendor/cryptopp/vendor_cryptopp/gcm_simd.cpp index 8d81c839..b2578b37 100644 --- a/vendor/cryptopp/vendor_cryptopp/gcm_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/gcm_simd.cpp @@ -29,7 +29,8 @@ # include #endif -#if (CRYPTOPP_ARM_NEON_AVAILABLE) +// C1189: error: This header is specific to ARM targets +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(_M_ARM64) # include #endif @@ -38,6 +39,10 @@ # include #endif +#if defined(CRYPTOPP_ARM_PMULL_AVAILABLE) +# include "arm_simd.h" +#endif + #if defined(CRYPTOPP_ALTIVEC_AVAILABLE) # include "ppc_simd.h" #endif @@ -62,205 +67,6 @@ // Squash MS LNK4221 and libtool warnings extern const char GCM_SIMD_FNAME[] = __FILE__; -ANONYMOUS_NAMESPACE_BEGIN - -// *************************** ARM NEON *************************** // - -#if CRYPTOPP_ARM_PMULL_AVAILABLE -#if defined(__GNUC__) -// Schneiders, Hovsmith and O'Rourke used this trick. -// It results in much better code generation in production code -// by avoiding D-register spills when using vgetq_lane_u64. The -// problem does not surface under minimal test cases. -inline uint64x2_t PMULL_00(const uint64x2_t a, const uint64x2_t b) -{ - uint64x2_t r; - __asm __volatile("pmull %0.1q, %1.1d, %2.1d \n\t" - :"=w" (r) : "w" (a), "w" (b) ); - return r; -} - -inline uint64x2_t PMULL_01(const uint64x2_t a, const uint64x2_t b) -{ - uint64x2_t r; - __asm __volatile("pmull %0.1q, %1.1d, %2.1d \n\t" - :"=w" (r) : "w" (a), "w" (vget_high_u64(b)) ); - return r; -} - -inline uint64x2_t PMULL_10(const uint64x2_t a, const uint64x2_t b) -{ - uint64x2_t r; - __asm __volatile("pmull %0.1q, %1.1d, %2.1d \n\t" - :"=w" (r) : "w" (vget_high_u64(a)), "w" (b) ); - return r; -} - -inline uint64x2_t PMULL_11(const uint64x2_t a, const uint64x2_t b) -{ - uint64x2_t r; - __asm __volatile("pmull2 %0.1q, %1.2d, %2.2d \n\t" - :"=w" (r) : "w" (a), "w" (b) ); - return r; -} - -inline uint64x2_t VEXT_U8(uint64x2_t a, uint64x2_t b, unsigned int c) -{ - uint64x2_t r; - __asm __volatile("ext %0.16b, %1.16b, %2.16b, %3 \n\t" - :"=w" (r) : "w" (a), "w" (b), "I" (c) ); - return r; -} - -// https://github.com/weidai11/cryptopp/issues/366 -template -inline uint64x2_t VEXT_U8(uint64x2_t a, uint64x2_t b) -{ - uint64x2_t r; - __asm __volatile("ext %0.16b, %1.16b, %2.16b, %3 \n\t" - :"=w" (r) : "w" (a), "w" (b), "I" (C) ); - return r; -} -#endif // GCC and compatibles - -#if defined(_MSC_VER) -inline uint64x2_t PMULL_00(const uint64x2_t a, const uint64x2_t b) -{ - return (uint64x2_t)(vmull_p64( - vgetq_lane_u64(vreinterpretq_u64_u8(a),0), - vgetq_lane_u64(vreinterpretq_u64_u8(b),0))); -} - -inline uint64x2_t PMULL_01(const uint64x2_t a, const uint64x2_t b) -{ - return (uint64x2_t)(vmull_p64( - vgetq_lane_u64(vreinterpretq_u64_u8(a),0), - vgetq_lane_u64(vreinterpretq_u64_u8(b),1))); -} - -inline uint64x2_t PMULL_10(const uint64x2_t a, const uint64x2_t b) -{ - return (uint64x2_t)(vmull_p64( - vgetq_lane_u64(vreinterpretq_u64_u8(a),1), - vgetq_lane_u64(vreinterpretq_u64_u8(b),0))); -} - -inline uint64x2_t PMULL_11(const uint64x2_t a, const uint64x2_t b) -{ - return (uint64x2_t)(vmull_p64( - vgetq_lane_u64(vreinterpretq_u64_u8(a),1), - vgetq_lane_u64(vreinterpretq_u64_u8(b),1))); -} - -inline uint64x2_t VEXT_U8(uint64x2_t a, uint64x2_t b, unsigned int c) -{ - return (uint64x2_t)vextq_u8( - vreinterpretq_u8_u64(a), vreinterpretq_u8_u64(b), c); -} - -// https://github.com/weidai11/cryptopp/issues/366 -template -inline uint64x2_t VEXT_U8(uint64x2_t a, uint64x2_t b) -{ - return (uint64x2_t)vextq_u8( - vreinterpretq_u8_u64(a), vreinterpretq_u8_u64(b), C); -} -#endif // Microsoft and compatibles -#endif // CRYPTOPP_ARM_PMULL_AVAILABLE - -// ************************** Power 8 Crypto ************************** // - -#if CRYPTOPP_POWER8_VMULL_AVAILABLE - -using CryptoPP::uint32x4_p; -using CryptoPP::uint64x2_p; -using CryptoPP::VecGetLow; -using CryptoPP::VecGetHigh; -using CryptoPP::VecRotateLeftOctet; - -// POWER8 GCM mode is confusing. The algorithm is reflected so -// nearly everything we do is reversed for a little-endian system, -// including on big-endian machines. VMULL2LE swaps dwords for a -// little endian machine; VMULL_00LE, VMULL_01LE, VMULL_10LE and -// VMULL_11LE are backwards and (1) read low words with -// VecGetHigh, (2) read high words with VecGetLow, and -// (3) yields a product that is endian swapped. The steps ensures -// GCM parameters are presented in the correct order for the -// algorithm on both big and little-endian systems, but it is -// awful to try to follow the logic because it is so backwards. -// Because functions like VMULL_NN are so backwards we can't put -// them in ppc_simd.h. They simply don't work the way a typical -// user expects them to work. - -inline uint64x2_p VMULL2LE(const uint64x2_p& val) -{ -#if (CRYPTOPP_BIG_ENDIAN) - return VecRotateLeftOctet<8>(val); -#else - return val; -#endif -} - -// _mm_clmulepi64_si128(a, b, 0x00) -inline uint64x2_p VMULL_00LE(const uint64x2_p& a, const uint64x2_p& b) -{ -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return VMULL2LE(__vpmsumd (VecGetHigh(a), VecGetHigh(b))); -#elif defined(__clang__) - return VMULL2LE(__builtin_altivec_crypto_vpmsumd (VecGetHigh(a), VecGetHigh(b))); -#else - return VMULL2LE(__builtin_crypto_vpmsumd (VecGetHigh(a), VecGetHigh(b))); -#endif -} - -// _mm_clmulepi64_si128(a, b, 0x01) -inline uint64x2_p VMULL_01LE(const uint64x2_p& a, const uint64x2_p& b) -{ - // Small speedup. VecGetHigh(b) ensures the high dword of 'b' is 0. - // The 0 used in the vmull yields 0 for the high product, so the high - // dword of 'a' is "don't care". -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return VMULL2LE(__vpmsumd (a, VecGetHigh(b))); -#elif defined(__clang__) - return VMULL2LE(__builtin_altivec_crypto_vpmsumd (a, VecGetHigh(b))); -#else - return VMULL2LE(__builtin_crypto_vpmsumd (a, VecGetHigh(b))); -#endif -} - -// _mm_clmulepi64_si128(a, b, 0x10) -inline uint64x2_p VMULL_10LE(const uint64x2_p& a, const uint64x2_p& b) -{ - // Small speedup. VecGetHigh(a) ensures the high dword of 'a' is 0. - // The 0 used in the vmull yields 0 for the high product, so the high - // dword of 'b' is "don't care". -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return VMULL2LE(__vpmsumd (VecGetHigh(a), b)); -#elif defined(__clang__) - return VMULL2LE(__builtin_altivec_crypto_vpmsumd (VecGetHigh(a), b)); -#else - return VMULL2LE(__builtin_crypto_vpmsumd (VecGetHigh(a), b)); -#endif -} - -// _mm_clmulepi64_si128(a, b, 0x11) -inline uint64x2_p VMULL_11LE(const uint64x2_p& a, const uint64x2_p& b) -{ - // Small speedup. VecGetLow(a) ensures the high dword of 'a' is 0. - // The 0 used in the vmull yields 0 for the high product, so the high - // dword of 'b' is "don't care". -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return VMULL2LE(__vpmsumd (VecGetLow(a), b)); -#elif defined(__clang__) - return VMULL2LE(__builtin_altivec_crypto_vpmsumd (VecGetLow(a), b)); -#else - return VMULL2LE(__builtin_crypto_vpmsumd (VecGetLow(a), b)); -#endif -} -#endif // CRYPTOPP_POWER8_VMULL_AVAILABLE - -ANONYMOUS_NAMESPACE_END - NAMESPACE_BEGIN(CryptoPP) // ************************* Feature Probes ************************* // @@ -287,23 +93,24 @@ bool CPU_ProbePMULL() volatile bool result = true; __try { - const poly64_t a1={0x9090909090909090}, b1={0xb0b0b0b0b0b0b0b0}; - const poly8x16_t a2={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0}, - b2={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0}; - - const poly128_t r1 = pmull_p64(a1, b1); - const poly128_t r2 = pmull_high_p64((poly64x2_t)(a2), (poly64x2_t)(b2)); - // Linaro is missing a lot of pmull gear. Also see http://github.com/weidai11/cryptopp/issues/233. - const uint64x2_t t1 = (uint64x2_t)(r1); // {bignum,bignum} - const uint64x2_t t2 = (uint64x2_t)(r2); // {bignum,bignum} + const uint64_t wa1[]={0,0x9090909090909090}, wb1[]={0,0xb0b0b0b0b0b0b0b0}; + const uint64x2_t a1=vld1q_u64(wa1), b1=vld1q_u64(wb1); - result = !!(vgetq_lane_u64(t1,0) == 0x5300530053005300 && - vgetq_lane_u64(t1,1) == 0x5300530053005300 && - vgetq_lane_u64(t2,0) == 0x6c006c006c006c00 && - vgetq_lane_u64(t2,1) == 0x6c006c006c006c00); + const uint8_t wa2[]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0}, + wb2[]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + 0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0}; + const uint8x16_t a2=vld1q_u8(wa2), b2=vld1q_u8(wb2); + + const uint64x2_t r1 = PMULL_00(a1, b1); + const uint64x2_t r2 = PMULL_11(vreinterpretq_u64_u8(a2), + vreinterpretq_u64_u8(b2)); + + result = !!(vgetq_lane_u64(r1,0) == 0x5300530053005300 && + vgetq_lane_u64(r1,1) == 0x5300530053005300 && + vgetq_lane_u64(r2,0) == 0x6c006c006c006c00 && + vgetq_lane_u64(r2,1) == 0x6c006c006c006c00); } __except (EXCEPTION_EXECUTE_HANDLER) { @@ -328,14 +135,18 @@ bool CPU_ProbePMULL() else { // Linaro is missing a lot of pmull gear. Also see http://github.com/weidai11/cryptopp/issues/233. - const uint64x2_t a1={0,0x9090909090909090}, b1={0,0xb0b0b0b0b0b0b0b0}; - const uint8x16_t a2={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + const uint64_t wa1[]={0,0x9090909090909090}, wb1[]={0,0xb0b0b0b0b0b0b0b0}; + const uint64x2_t a1=vld1q_u64(wa1), b1=vld1q_u64(wb1); + + const uint8_t wa2[]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0}, - b2={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + wb2[]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, 0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0}; + const uint8x16_t a2=vld1q_u8(wa2), b2=vld1q_u8(wb2); const uint64x2_t r1 = PMULL_00(a1, b1); - const uint64x2_t r2 = PMULL_11((uint64x2_t)a2, (uint64x2_t)b2); + const uint64x2_t r2 = PMULL_11(vreinterpretq_u64_u8(a2), + vreinterpretq_u64_u8(b2)); result = !!(vgetq_lane_u64(r1,0) == 0x5300530053005300 && vgetq_lane_u64(r1,1) == 0x5300530053005300 && @@ -374,17 +185,24 @@ bool CPU_ProbePMULL() result = false; else { - const uint8x16_p a={0x0f,0x08,0x08,0x08, 0x80,0x80,0x80,0x80, - 0x00,0x0a,0x0a,0x0a, 0xa0,0xa0,0xa0,0xa0}, - b={0x0f,0xc0,0xc0,0xc0, 0x0c,0x0c,0x0c,0x0c, - 0x00,0xe0,0xe0,0xe0, 0x0e,0x0e,0x0e,0x0e}; + const uint64_t wa1[]={0,W64LIT(0x9090909090909090)}, + wb1[]={0,W64LIT(0xb0b0b0b0b0b0b0b0)}; + const uint64x2_p a1=VecLoad(wa1), b1=VecLoad(wb1); - const uint64x2_p r1 = VMULL_00LE((uint64x2_p)(a), (uint64x2_p)(b)); - const uint64x2_p r2 = VMULL_01LE((uint64x2_p)(a), (uint64x2_p)(b)); - const uint64x2_p r3 = VMULL_10LE((uint64x2_p)(a), (uint64x2_p)(b)); - const uint64x2_p r4 = VMULL_11LE((uint64x2_p)(a), (uint64x2_p)(b)); + const uint8_t wa2[]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0}, + wb2[]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + 0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0}; + const uint32x4_p a2=VecLoad(wa2), b2=VecLoad(wb2); - result = VecNotEqual(r1, r2) && VecNotEqual(r3, r4); + const uint64x2_p r1 = VecPolyMultiply00LE(a1, b1); + const uint64x2_p r2 = VecPolyMultiply11LE((uint64x2_p)a2, (uint64x2_p)b2); + + const uint64_t wc1[]={W64LIT(0x5300530053005300), W64LIT(0x5300530053005300)}, + wc2[]={W64LIT(0x6c006c006c006c00), W64LIT(0x6c006c006c006c00)}; + const uint64x2_p c1=VecLoad(wc1), c2=VecLoad(wc2); + + result = !!(VecEqual(r1, c1) && VecEqual(r2, c2)); } sigprocmask(SIG_SETMASK, (sigset_t*)&oldMask, NULLPTR); @@ -765,9 +583,9 @@ uint64x2_p GCM_Reduce_VMULL(uint64x2_p c0, uint64x2_p c1, uint64x2_p c2, uint64x const uint64x2_p m1 = {1,1}, m63 = {63,63}; c1 = VecXor(c1, VecShiftRightOctet<8>(c0)); - c1 = VecXor(c1, VMULL_10LE(c0, r)); + c1 = VecXor(c1, VecPolyMultiply10LE(c0, r)); c0 = VecXor(c1, VecShiftLeftOctet<8>(c0)); - c0 = VMULL_00LE(vec_sl(c0, m1), r); + c0 = VecPolyMultiply00LE(vec_sl(c0, m1), r); c2 = VecXor(c2, c0); c2 = VecXor(c2, VecShiftLeftOctet<8>(c1)); c1 = vec_sr(vec_mergeh(c1, c2), m63); @@ -778,9 +596,9 @@ uint64x2_p GCM_Reduce_VMULL(uint64x2_p c0, uint64x2_p c1, uint64x2_p c2, uint64x inline uint64x2_p GCM_Multiply_VMULL(uint64x2_p x, uint64x2_p h, uint64x2_p r) { - const uint64x2_p c0 = VMULL_00LE(x, h); - const uint64x2_p c1 = VecXor(VMULL_01LE(x, h), VMULL_10LE(x, h)); - const uint64x2_p c2 = VMULL_11LE(x, h); + const uint64x2_p c0 = VecPolyMultiply00LE(x, h); + const uint64x2_p c1 = VecXor(VecPolyMultiply01LE(x, h), VecPolyMultiply10LE(x, h)); + const uint64x2_p c2 = VecPolyMultiply11LE(x, h); return GCM_Reduce_VMULL(c0, c1, c2, r); } @@ -875,35 +693,35 @@ size_t GCM_AuthenticateBlocks_VMULL(const byte *data, size_t len, const byte *mt { d1 = LoadBuffer2(data); d1 = VecXor(d1, x); - c0 = VecXor(c0, VMULL_00LE(d1, h0)); - c2 = VecXor(c2, VMULL_01LE(d1, h1)); + c0 = VecXor(c0, VecPolyMultiply00LE(d1, h0)); + c2 = VecXor(c2, VecPolyMultiply01LE(d1, h1)); d1 = VecXor(d1, SwapWords(d1)); - c1 = VecXor(c1, VMULL_00LE(d1, h2)); + c1 = VecXor(c1, VecPolyMultiply00LE(d1, h2)); break; } d1 = LoadBuffer1(data+(s-i)*16-8); - c0 = VecXor(c0, VMULL_01LE(d2, h0)); - c2 = VecXor(c2, VMULL_01LE(d1, h1)); + c0 = VecXor(c0, VecPolyMultiply01LE(d2, h0)); + c2 = VecXor(c2, VecPolyMultiply01LE(d1, h1)); d2 = VecXor(d2, d1); - c1 = VecXor(c1, VMULL_01LE(d2, h2)); + c1 = VecXor(c1, VecPolyMultiply01LE(d2, h2)); if (++i == s) { d1 = LoadBuffer2(data); d1 = VecXor(d1, x); - c0 = VecXor(c0, VMULL_10LE(d1, h0)); - c2 = VecXor(c2, VMULL_11LE(d1, h1)); + c0 = VecXor(c0, VecPolyMultiply10LE(d1, h0)); + c2 = VecXor(c2, VecPolyMultiply11LE(d1, h1)); d1 = VecXor(d1, SwapWords(d1)); - c1 = VecXor(c1, VMULL_10LE(d1, h2)); + c1 = VecXor(c1, VecPolyMultiply10LE(d1, h2)); break; } d2 = LoadBuffer2(data+(s-i)*16-8); - c0 = VecXor(c0, VMULL_10LE(d1, h0)); - c2 = VecXor(c2, VMULL_10LE(d2, h1)); + c0 = VecXor(c0, VecPolyMultiply10LE(d1, h0)); + c2 = VecXor(c2, VecPolyMultiply10LE(d2, h1)); d1 = VecXor(d1, d2); - c1 = VecXor(c1, VMULL_10LE(d1, h2)); + c1 = VecXor(c1, VecPolyMultiply10LE(d1, h2)); } data += s*16; len -= s*16; diff --git a/vendor/cryptopp/vendor_cryptopp/gf2n.cpp b/vendor/cryptopp/vendor_cryptopp/gf2n.cpp index c907e081..7058487c 100644 --- a/vendor/cryptopp/vendor_cryptopp/gf2n.cpp +++ b/vendor/cryptopp/vendor_cryptopp/gf2n.cpp @@ -13,8 +13,9 @@ #include "words.h" #include "misc.h" #include "gf2n.h" -#include "asn.h" #include "oids.h" +#include "asn.h" +#include "cpu.h" #include @@ -41,6 +42,21 @@ ANONYMOUS_NAMESPACE_END NAMESPACE_BEGIN(CryptoPP) +#if (CRYPTOPP_CLMUL_AVAILABLE) +extern CRYPTOPP_DLL void GF2NT_233_Multiply_Reduce_CLMUL(const word* pA, const word* pB, word* pC); +extern CRYPTOPP_DLL void GF2NT_233_Square_Reduce_CLMUL(const word* pA, word* pC); +#endif + +#if (CRYPTOPP_ARM_PMULL_AVAILABLE) +extern void GF2NT_233_Multiply_Reduce_ARMv8(const word* pA, const word* pB, word* pC); +extern void GF2NT_233_Square_Reduce_ARMv8(const word* pA, word* pC); +#endif + +#if (CRYPTOPP_POWER8_VMULL_AVAILABLE) +extern void GF2NT_233_Multiply_Reduce_POWER8(const word* pA, const word* pB, word* pC); +extern void GF2NT_233_Square_Reduce_POWER8(const word* pA, word* pC); +#endif + PolynomialMod2::PolynomialMod2() { } @@ -75,7 +91,7 @@ void PolynomialMod2::Randomize(RandomNumberGenerator &rng, size_t nbits) PolynomialMod2 PolynomialMod2::AllOnes(size_t bitLength) { PolynomialMod2 result((word)0, bitLength); - SetWords(result.reg, word(SIZE_MAX), result.reg.size()); + SetWords(result.reg, ~(word(0)), result.reg.size()); if (bitLength%WORD_BITS) result.reg[result.reg.size()-1] = (word)Crop(result.reg[result.reg.size()-1], bitLength%WORD_BITS); return result; @@ -943,6 +959,112 @@ GF2NP * BERDecodeGF2NP(BufferedTransformation &bt) return result.release(); } +// ******************************************************** + +GF2NT233::GF2NT233(unsigned int c0, unsigned int c1, unsigned int c2) + : GF2NT(c0, c1, c2) +{ + CRYPTOPP_ASSERT(c0 > c1 && c1 > c2 && c2==0); +} + +const GF2NT::Element& GF2NT233::Multiply(const Element &a, const Element &b) const +{ +#if (CRYPTOPP_CLMUL_AVAILABLE) + if (HasCLMUL()) + { + CRYPTOPP_ASSERT(a.reg.size()*WORD_BITS == 256); + CRYPTOPP_ASSERT(b.reg.size()*WORD_BITS == 256); + CRYPTOPP_ASSERT(result.reg.size()*WORD_BITS == 256); + + const word* pA = a.reg.begin(); + const word* pB = b.reg.begin(); + word* pR = result.reg.begin(); + + GF2NT_233_Multiply_Reduce_CLMUL(pA, pB, pR); + return result; + } + else +#elif (CRYPTOPP_ARM_PMULL_AVAILABLE) + if (HasPMULL()) + { + CRYPTOPP_ASSERT(a.reg.size()*WORD_BITS == 256); + CRYPTOPP_ASSERT(b.reg.size()*WORD_BITS == 256); + CRYPTOPP_ASSERT(result.reg.size()*WORD_BITS == 256); + + const word* pA = a.reg.begin(); + const word* pB = b.reg.begin(); + word* pR = result.reg.begin(); + + GF2NT_233_Multiply_Reduce_ARMv8(pA, pB, pR); + return result; + } + else +#elif (CRYPTOPP_POWER8_VMULL_AVAILABLE) + if (HasPMULL()) + { + CRYPTOPP_ASSERT(a.reg.size()*WORD_BITS == 256); + CRYPTOPP_ASSERT(b.reg.size()*WORD_BITS == 256); + CRYPTOPP_ASSERT(result.reg.size()*WORD_BITS == 256); + + const word* pA = a.reg.begin(); + const word* pB = b.reg.begin(); + word* pR = result.reg.begin(); + + GF2NT_233_Multiply_Reduce_POWER8(pA, pB, pR); + return result; + } + else +#endif + + return GF2NT::Multiply(a, b); +} + +const GF2NT::Element& GF2NT233::Square(const Element &a) const +{ +#if (CRYPTOPP_CLMUL_AVAILABLE) + if (HasCLMUL()) + { + CRYPTOPP_ASSERT(a.reg.size()*WORD_BITS == 256); + CRYPTOPP_ASSERT(result.reg.size()*WORD_BITS == 256); + + const word* pA = a.reg.begin(); + word* pR = result.reg.begin(); + + GF2NT_233_Square_Reduce_CLMUL(pA, pR); + return result; + } + else +#elif (CRYPTOPP_ARM_PMULL_AVAILABLE) + if (HasPMULL()) + { + CRYPTOPP_ASSERT(a.reg.size()*WORD_BITS == 256); + CRYPTOPP_ASSERT(result.reg.size()*WORD_BITS == 256); + + const word* pA = a.reg.begin(); + word* pR = result.reg.begin(); + + GF2NT_233_Square_Reduce_ARMv8(pA, pR); + return result; + } + else +#elif (CRYPTOPP_POWER8_VMULL_AVAILABLE) + if (HasPMULL()) + { + CRYPTOPP_ASSERT(a.reg.size()*WORD_BITS == 256); + CRYPTOPP_ASSERT(result.reg.size()*WORD_BITS == 256); + + const word* pA = a.reg.begin(); + word* pR = result.reg.begin(); + + GF2NT_233_Square_Reduce_POWER8(pA, pR); + return result; + } + else +#endif + + return GF2NT::Square(a); +} + NAMESPACE_END #endif diff --git a/vendor/cryptopp/vendor_cryptopp/gf2n.h b/vendor/cryptopp/vendor_cryptopp/gf2n.h index 4bb34b19..94f2c010 100644 --- a/vendor/cryptopp/vendor_cryptopp/gf2n.h +++ b/vendor/cryptopp/vendor_cryptopp/gf2n.h @@ -246,6 +246,7 @@ public: private: friend class GF2NT; + friend class GF2NT233; SecWordBlock reg; }; @@ -344,13 +345,29 @@ public: const Element& MultiplicativeInverse(const Element &a) const; -private: +protected: const Element& Reduced(const Element &a) const; unsigned int t0, t1; mutable PolynomialMod2 result; }; +/// \brief GF(2^n) for b233 and k233 +/// \details GF2NT233 is a specialization of GF2NT that provides Multiply() +/// and Square() operations when carryless multiplies is available. +class CRYPTOPP_DLL GF2NT233 : public GF2NT +{ +public: + // polynomial modulus = x^t0 + x^t1 + x^t2, t0 > t1 > t2 + GF2NT233(unsigned int t0, unsigned int t1, unsigned int t2); + + GF2NP * Clone() const {return new GF2NT233(*this);} + + const Element& Multiply(const Element &a, const Element &b) const; + + const Element& Square(const Element &a) const; +}; + /// \brief GF(2^n) with Pentanomial Basis class CRYPTOPP_DLL GF2NPP : public GF2NP { diff --git a/vendor/cryptopp/vendor_cryptopp/gf2n_simd.cpp b/vendor/cryptopp/vendor_cryptopp/gf2n_simd.cpp new file mode 100644 index 00000000..395a3c04 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/gf2n_simd.cpp @@ -0,0 +1,610 @@ +// gf2n_simd.cpp - written and placed in the public domain by Jeffrey Walton +// Also based on PCLMULQDQ code by Jankowski, Laurent and +// O'Mahony from Intel (see reference below). +// +// This source file uses intrinsics and built-ins to gain access to +// CLMUL, ARMv8a, and Power8 instructions. A separate source file is +// needed because additional CXXFLAGS are required to enable the +// appropriate instructions sets in some build configurations. +// +// Several speedups were taken from Intel Polynomial Multiplication +// Instruction and its Usage for Elliptic Curve Cryptography, by +// Krzysztof Jankowski, Pierre Laurent and Aidan O'Mahony, +// https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/polynomial-multiplication-instructions-paper.pdf +// There may be more speedups available, see https://eprint.iacr.org/2011/589.pdf. +// The IACR paper performs some optimizations that the compiler is +// expected to perform, like Common Subexpression Elimination to save +// on variables (among others). Note that the compiler may miss the +// optimization so the IACR paper is useful. However, the code is GPL3 +// and toxic for some users of the library... + +#include "pch.h" +#include "config.h" + +#include "gf2n.h" + +#if (CRYPTOPP_CLMUL_AVAILABLE) +# include +# include +#endif + +#if (CRYPTOPP_ARM_PMULL_AVAILABLE) +# include "arm_simd.h" +#endif + +#if defined(CRYPTOPP_ALTIVEC_AVAILABLE) +# include "ppc_simd.h" +#endif + +ANONYMOUS_NAMESPACE_BEGIN + +// ************************** ARMv8 ************************** // + +using CryptoPP::word; + +#if (CRYPTOPP_ARM_PMULL_AVAILABLE) + +// c1c0 = a * b +inline void +F2N_Multiply_128x128_ARMv8(uint64x2_t& c1, uint64x2_t& c0, const uint64x2_t& a, const uint64x2_t& b) +{ + uint64x2_t t1, t2, z0={0}; + + c0 = PMULL_00(a, b); + c1 = PMULL_11(a, b); + t1 = vmovq_n_u64(vgetq_lane_u64(a, 1)); + t1 = veorq_u64(a, t1); + t2 = vmovq_n_u64(vgetq_lane_u64(b, 1)); + t2 = veorq_u64(b, t2); + t1 = PMULL_00(t1, t2); + t1 = veorq_u64(c0, t1); + t1 = veorq_u64(c1, t1); + t2 = t1; + t1 = vextq_u64(z0, t1, 1); + t2 = vextq_u64(t2, z0, 1); + c0 = veorq_u64(c0, t1); + c1 = veorq_u64(c1, t2); +} + +// c3c2c1c0 = a1a0 * b1b0 +inline void +F2N_Multiply_256x256_ARMv8(uint64x2_t& c3, uint64x2_t& c2, uint64x2_t& c1, uint64x2_t& c0, + const uint64x2_t& b1, const uint64x2_t& b0, const uint64x2_t& a1, const uint64x2_t& a0) +{ + uint64x2_t c4, c5; + uint64x2_t x0=a0, x1=a1, y0=b0, y1=b1; + + F2N_Multiply_128x128_ARMv8(c1, c0, x0, y0); + F2N_Multiply_128x128_ARMv8(c3, c2, x1, y1); + + x0 = veorq_u64(x0, x1); + y0 = veorq_u64(y0, y1); + + F2N_Multiply_128x128_ARMv8(c5, c4, x0, y0); + + c4 = veorq_u64(c4, c0); + c4 = veorq_u64(c4, c2); + c5 = veorq_u64(c5, c1); + c5 = veorq_u64(c5, c3); + c1 = veorq_u64(c1, c4); + c2 = veorq_u64(c2, c5); +} + +// c3c2c1c0 = a1a0 * a1a0 +inline void +F2N_Square_256_ARMv8(uint64x2_t& c3, uint64x2_t& c2, uint64x2_t& c1, + uint64x2_t& c0, const uint64x2_t& a1, const uint64x2_t& a0) +{ + c0 = PMULL_00(a0, a0); + c1 = PMULL_11(a0, a0); + c2 = PMULL_00(a1, a1); + c3 = PMULL_11(a1, a1); +} + +// x = (x << n), z = 0 +template +inline uint64x2_t ShiftLeft128_ARMv8(uint64x2_t x) +{ + uint64x2_t u=x, v, z={0}; + x = vshlq_n_u64(x, N); + u = vshrq_n_u64(u, (64-N)); + v = vcombine_u64(vget_low_u64(z), vget_low_u64(u)); + x = vorrq_u64(x, v); + return x; +} + +// c1c0 = c3c2c1c0 MOD p. This is a Barrett reduction. Reading at +// Intel paper or https://github.com/antonblanchard/crc32-vpmsum. +inline void +GF2NT_233_Reduce_ARMv8(uint64x2_t& c3, uint64x2_t& c2, uint64x2_t& c1, uint64x2_t& c0) +{ + const unsigned int mask[4] = { + 0xffffffff, 0xffffffff, 0xffffffff, 0x000001ff, + }; + + uint64x2_t b3, b2, b1, /*b0,*/ a1, a0, m0, z0={0}; + m0 = vreinterpretq_u64_u32(vld1q_u32(mask)); + b1 = c1; a1 = c1; + a0 = vcombine_u64(vget_low_u64(c1), vget_low_u64(z0)); + a1 = vshlq_n_u64(a1, 23); + a1 = vshrq_n_u64(a1, 23); + c1 = vorrq_u64(a1, a0); + b2 = vshrq_n_u64(c2, (64-23)); + c3 = ShiftLeft128_ARMv8<23>(c3); + a0 = vcombine_u64(vget_high_u64(b2), vget_high_u64(z0)); + c3 = vorrq_u64(c3, a0); + b1 = vshrq_n_u64(b1, (64-23)); + c2 = ShiftLeft128_ARMv8<23>(c2); + a0 = vcombine_u64(vget_high_u64(b1), vget_high_u64(z0)); + c2 = vorrq_u64(c2, a0); + b3 = c3; + b2 = vshrq_n_u64(c2, (64-10)); + b3 = ShiftLeft128_ARMv8<10>(b3); + a0 = vcombine_u64(vget_high_u64(b2), vget_high_u64(z0)); + b3 = vorrq_u64(b3, a0); + a0 = vcombine_u64(vget_high_u64(c3), vget_high_u64(z0)); + b3 = veorq_u64(b3, a0); + b1 = vshrq_n_u64(b3, (64-23)); + b3 = ShiftLeft128_ARMv8<23>(b3); + b3 = vcombine_u64(vget_high_u64(b3), vget_high_u64(z0)); + b3 = vorrq_u64(b3, b1); + c2 = veorq_u64(c2, b3); + b3 = c3; + b2 = vshrq_n_u64(c2, (64-10)); + b3 = ShiftLeft128_ARMv8<10>(b3); + b2 = vcombine_u64(vget_high_u64(b2), vget_high_u64(z0)); + b3 = vorrq_u64(b3, b2); + b2 = c2; + b2 = ShiftLeft128_ARMv8<10>(b2); + a0 = vcombine_u64(vget_low_u64(z0), vget_low_u64(b2)); + c2 = veorq_u64(c2, a0); + a0 = vcombine_u64(vget_low_u64(z0), vget_low_u64(b3)); + a1 = vcombine_u64(vget_high_u64(b2), vget_high_u64(z0)); + a0 = vorrq_u64(a0, a1); + c3 = veorq_u64(c3, a0); + c0 = veorq_u64(c0, c2); + c1 = veorq_u64(c1, c3); + c1 = vandq_u64(c1, m0); +} + +#endif + +// ************************** SSE ************************** // + +#if (CRYPTOPP_CLMUL_AVAILABLE) + +using CryptoPP::word; + +// c1c0 = a * b +inline void +F2N_Multiply_128x128_CLMUL(__m128i& c1, __m128i& c0, const __m128i& a, const __m128i& b) +{ + __m128i t1, t2; + + c0 = _mm_clmulepi64_si128(a, b, 0x00); + c1 = _mm_clmulepi64_si128(a, b, 0x11); + t1 = _mm_shuffle_epi32(a, 0xEE); + t1 = _mm_xor_si128(a, t1); + t2 = _mm_shuffle_epi32(b, 0xEE); + t2 = _mm_xor_si128(b, t2); + t1 = _mm_clmulepi64_si128(t1, t2, 0x00); + t1 = _mm_xor_si128(c0, t1); + t1 = _mm_xor_si128(c1, t1); + t2 = t1; + t1 = _mm_slli_si128(t1, 8); + t2 = _mm_srli_si128(t2, 8); + c0 = _mm_xor_si128(c0, t1); + c1 = _mm_xor_si128(c1, t2); +} + +// c3c2c1c0 = a1a0 * b1b0 +inline void +F2N_Multiply_256x256_CLMUL(__m128i& c3, __m128i& c2, __m128i& c1, __m128i& c0, + const __m128i& b1, const __m128i& b0, const __m128i& a1, const __m128i& a0) +{ + __m128i c4, c5; + __m128i x0=a0, x1=a1, y0=b0, y1=b1; + + F2N_Multiply_128x128_CLMUL(c1, c0, x0, y0); + F2N_Multiply_128x128_CLMUL(c3, c2, x1, y1); + + x0 = _mm_xor_si128(x0, x1); + y0 = _mm_xor_si128(y0, y1); + + F2N_Multiply_128x128_CLMUL(c5, c4, x0, y0); + + c4 = _mm_xor_si128(c4, c0); + c4 = _mm_xor_si128(c4, c2); + c5 = _mm_xor_si128(c5, c1); + c5 = _mm_xor_si128(c5, c3); + c1 = _mm_xor_si128(c1, c4); + c2 = _mm_xor_si128(c2, c5); +} + +// c3c2c1c0 = a1a0 * a1a0 +inline void +F2N_Square_256_CLMUL(__m128i& c3, __m128i& c2, __m128i& c1, + __m128i& c0, const __m128i& a1, const __m128i& a0) +{ + c0 = _mm_clmulepi64_si128(a0, a0, 0x00); + c1 = _mm_clmulepi64_si128(a0, a0, 0x11); + c2 = _mm_clmulepi64_si128(a1, a1, 0x00); + c3 = _mm_clmulepi64_si128(a1, a1, 0x11); +} + +// x = (x << n), z = 0 +template +inline __m128i ShiftLeft128_SSE(__m128i x, const __m128i& z) +{ + __m128i u=x, v; + x = _mm_slli_epi64(x, N); + u = _mm_srli_epi64(u, (64-N)); + v = _mm_unpacklo_epi64(z, u); + x = _mm_or_si128(x, v); + return x; +} + +// c1c0 = c3c2c1c0 MOD p. This is a Barrett reduction. Reading at +// Intel paper or https://github.com/antonblanchard/crc32-vpmsum. +inline void +GF2NT_233_Reduce_CLMUL(__m128i& c3, __m128i& c2, __m128i& c1, __m128i& c0) +{ + const unsigned int m[4] = { + 0xffffffff, 0xffffffff, 0xffffffff, 0x000001ff + }; + + __m128i b3, b2, b1, /*b0,*/ a1, a0, m0, z0; + m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]); + z0 = _mm_setzero_si128(); + b1 = c1; a1 = c1; + a0 = _mm_move_epi64(c1); + a1 = _mm_slli_epi64(a1, 23); + a1 = _mm_srli_epi64(a1, 23); + c1 = _mm_or_si128(a1, a0); + b2 = _mm_srli_epi64(c2, (64-23)); + c3 = ShiftLeft128_SSE<23>(c3, z0); + a0 = _mm_unpackhi_epi64(b2, z0); + c3 = _mm_or_si128(c3, a0); + b1 = _mm_srli_epi64(b1, (64-23)); + c2 = ShiftLeft128_SSE<23>(c2, z0); + a0 = _mm_unpackhi_epi64(b1, z0); + c2 = _mm_or_si128(c2, a0); + b3 = c3; + b2 = _mm_srli_epi64(c2, (64-10)); + b3 = ShiftLeft128_SSE<10>(b3, z0); + a0 = _mm_unpackhi_epi64(b2, z0); + b3 = _mm_or_si128(b3, a0); + a0 = _mm_unpackhi_epi64(c3, z0); + b3 = _mm_xor_si128(b3, a0); + b1 = _mm_srli_epi64(b3, (64-23)); + b3 = ShiftLeft128_SSE<23>(b3, z0); + b3 = _mm_unpackhi_epi64(b3, z0); + b3 = _mm_or_si128(b3, b1); + c2 = _mm_xor_si128(c2, b3); + b3 = c3; + b2 = _mm_srli_epi64(c2, (64-10)); + b3 = ShiftLeft128_SSE<10>(b3, z0); + b2 = _mm_unpackhi_epi64(b2, z0); + b3 = _mm_or_si128(b3, b2); + b2 = c2; + b2 = ShiftLeft128_SSE<10>(b2, z0); + a0 = _mm_unpacklo_epi64(z0, b2); + c2 = _mm_xor_si128(c2, a0); + a0 = _mm_unpacklo_epi64(z0, b3); + a1 = _mm_unpackhi_epi64(b2, z0); + a0 = _mm_or_si128(a0, a1); + c3 = _mm_xor_si128(c3, a0); + c0 = _mm_xor_si128(c0, c2); + c1 = _mm_xor_si128(c1, c3); + c1 = _mm_and_si128(c1, m0); +} + +#endif + +// ************************* Power8 ************************* // + +#if (CRYPTOPP_POWER8_VMULL_AVAILABLE) + +using CryptoPP::byte; +using CryptoPP::word; +using CryptoPP::uint8x16_p; +using CryptoPP::uint64x2_p; + +using CryptoPP::VecLoad; +using CryptoPP::VecStore; + +using CryptoPP::VecOr; +using CryptoPP::VecXor; +using CryptoPP::VecAnd; + +using CryptoPP::VecPermute; +using CryptoPP::VecMergeLow; +using CryptoPP::VecMergeHigh; +using CryptoPP::VecShiftLeft; +using CryptoPP::VecShiftRight; + +using CryptoPP::VecPolyMultiply00LE; +using CryptoPP::VecPolyMultiply11LE; + +// c1c0 = a * b +inline void +F2N_Multiply_128x128_POWER8(uint64x2_p& c1, uint64x2_p& c0, const uint64x2_p& a, const uint64x2_p& b) +{ + uint64x2_p t1, t2; + const uint64x2_p z0={0}; + + c0 = VecPolyMultiply00LE(a, b); + c1 = VecPolyMultiply11LE(a, b); + t1 = VecMergeLow(a, a); + t1 = VecXor(a, t1); + t2 = VecMergeLow(b, b); + t2 = VecXor(b, t2); + t1 = VecPolyMultiply00LE(t1, t2); + t1 = VecXor(c0, t1); + t1 = VecXor(c1, t1); + t2 = t1; + t1 = VecMergeHigh(z0, t1); + t2 = VecMergeLow(t2, z0); + c0 = VecXor(c0, t1); + c1 = VecXor(c1, t2); +} + +// c3c2c1c0 = a1a0 * b1b0 +inline void +F2N_Multiply_256x256_POWER8(uint64x2_p& c3, uint64x2_p& c2, uint64x2_p& c1, uint64x2_p& c0, + const uint64x2_p& b1, const uint64x2_p& b0, const uint64x2_p& a1, const uint64x2_p& a0) +{ + uint64x2_p c4, c5; + uint64x2_p x0=a0, x1=a1, y0=b0, y1=b1; + + F2N_Multiply_128x128_POWER8(c1, c0, x0, y0); + F2N_Multiply_128x128_POWER8(c3, c2, x1, y1); + + x0 = VecXor(x0, x1); + y0 = VecXor(y0, y1); + + F2N_Multiply_128x128_POWER8(c5, c4, x0, y0); + + c4 = VecXor(c4, c0); + c4 = VecXor(c4, c2); + c5 = VecXor(c5, c1); + c5 = VecXor(c5, c3); + c1 = VecXor(c1, c4); + c2 = VecXor(c2, c5); +} + +// c3c2c1c0 = a1a0 * a1a0 +inline void +F2N_Square_256_POWER8(uint64x2_p& c3, uint64x2_p& c2, uint64x2_p& c1, + uint64x2_p& c0, const uint64x2_p& a1, const uint64x2_p& a0) +{ + c0 = VecPolyMultiply00LE(a0, a0); + c1 = VecPolyMultiply11LE(a0, a0); + c2 = VecPolyMultiply00LE(a1, a1); + c3 = VecPolyMultiply11LE(a1, a1); +} + +// x = (x << n), z = 0 +template +inline uint64x2_p ShiftLeft128_POWER8(uint64x2_p x) +{ + uint64x2_p u=x, v; + const uint64x2_p z={0}; + + x = VecShiftLeft(x); + u = VecShiftRight<64-N>(u); + v = VecMergeHigh(z, u); + x = VecOr(x, v); + return x; +} + +// c1c0 = c3c2c1c0 MOD p. This is a Barrett reduction. Reading at +// Intel paper or https://github.com/antonblanchard/crc32-vpmsum. +inline void +GF2NT_233_Reduce_POWER8(uint64x2_p& c3, uint64x2_p& c2, uint64x2_p& c1, uint64x2_p& c0) +{ + const uint64_t mod[] = {W64LIT(0xffffffffffffffff), W64LIT(0x01ffffffffff)}; + const uint64x2_p m0 = (uint64x2_p)VecLoad(mod); + + uint64x2_p b3, b2, b1, /*b0,*/ a1, a0; + const uint64x2_p z0={0}; + + b1 = c1; a1 = c1; + a0 = VecMergeHigh(c1, z0); + a1 = VecShiftLeft<23>(a1); + a1 = VecShiftRight<23>(a1); + c1 = VecOr(a1, a0); + b2 = VecShiftRight<64-23>(c2); + c3 = ShiftLeft128_POWER8<23>(c3); + a0 = VecMergeLow(b2, z0); + c3 = VecOr(c3, a0); + b1 = VecShiftRight<64-23>(b1); + c2 = ShiftLeft128_POWER8<23>(c2); + a0 = VecMergeLow(b1, z0); + c2 = VecOr(c2, a0); + b3 = c3; + b2 = VecShiftRight<64-10>(c2); + b3 = ShiftLeft128_POWER8<10>(b3); + a0 = VecMergeLow(b2, z0); + b3 = VecOr(b3, a0); + a0 = VecMergeLow(c3, z0); + b3 = VecXor(b3, a0); + b1 = VecShiftRight<64-23>(b3); + b3 = ShiftLeft128_POWER8<23>(b3); + b3 = VecMergeLow(b3, z0); + b3 = VecOr(b3, b1); + c2 = VecXor(c2, b3); + b3 = c3; + b2 = VecShiftRight<64-10>(c2); + b3 = ShiftLeft128_POWER8<10>(b3); + b2 = VecMergeLow(b2, z0); + b3 = VecOr(b3, b2); + b2 = c2; + b2 = ShiftLeft128_POWER8<10>(b2); + a0 = VecMergeHigh(z0, b2); + c2 = VecXor(c2, a0); + a0 = VecMergeHigh(z0, b3); + a1 = VecMergeLow(b2, z0); + a0 = VecOr(a0, a1); + c3 = VecXor(c3, a0); + c0 = VecXor(c0, c2); + c1 = VecXor(c1, c3); + c1 = VecAnd(c1, m0); +} + +#endif + +ANONYMOUS_NAMESPACE_END + +NAMESPACE_BEGIN(CryptoPP) + +#if (CRYPTOPP_CLMUL_AVAILABLE) + +void +GF2NT_233_Multiply_Reduce_CLMUL(const word* pA, const word* pB, word* pC) +{ + const __m128i* pAA = reinterpret_cast(pA); + const __m128i* pBB = reinterpret_cast(pB); + __m128i a0 = _mm_loadu_si128(pAA+0); + __m128i a1 = _mm_loadu_si128(pAA+1); + __m128i b0 = _mm_loadu_si128(pBB+0); + __m128i b1 = _mm_loadu_si128(pBB+1); + + __m128i c0, c1, c2, c3; + F2N_Multiply_256x256_CLMUL(c3, c2, c1, c0, a1, a0, b1, b0); + GF2NT_233_Reduce_CLMUL(c3, c2, c1, c0); + + __m128i* pCC = reinterpret_cast<__m128i*>(pC); + _mm_storeu_si128(pCC+0, c0); + _mm_storeu_si128(pCC+1, c1); +} + +void +GF2NT_233_Square_Reduce_CLMUL(const word* pA, word* pC) +{ + const __m128i* pAA = reinterpret_cast(pA); + __m128i a0 = _mm_loadu_si128(pAA+0); + __m128i a1 = _mm_loadu_si128(pAA+1); + + __m128i c0, c1, c2, c3; + F2N_Square_256_CLMUL(c3, c2, c1, c0, a1, a0); + GF2NT_233_Reduce_CLMUL(c3, c2, c1, c0); + + __m128i* pCC = reinterpret_cast<__m128i*>(pC); + _mm_storeu_si128(pCC+0, c0); + _mm_storeu_si128(pCC+1, c1); +} + +#elif (CRYPTOPP_ARM_PMULL_AVAILABLE) + +void +GF2NT_233_Multiply_Reduce_ARMv8(const word* pA, const word* pB, word* pC) +{ + // word is either 32-bit or 64-bit, depending on the platform. + // Load using a 32-bit pointer to avoid possible alignment issues. + const uint32_t* pAA = reinterpret_cast(pA); + const uint32_t* pBB = reinterpret_cast(pB); + + uint64x2_t a0 = vreinterpretq_u64_u32(vld1q_u32(pAA+0)); + uint64x2_t a1 = vreinterpretq_u64_u32(vld1q_u32(pAA+4)); + uint64x2_t b0 = vreinterpretq_u64_u32(vld1q_u32(pBB+0)); + uint64x2_t b1 = vreinterpretq_u64_u32(vld1q_u32(pBB+4)); + + uint64x2_t c0, c1, c2, c3; + F2N_Multiply_256x256_ARMv8(c3, c2, c1, c0, a1, a0, b1, b0); + GF2NT_233_Reduce_ARMv8(c3, c2, c1, c0); + + uint32_t* pCC = reinterpret_cast(pC); + vst1q_u32(pCC+0, vreinterpretq_u32_u64(c0)); + vst1q_u32(pCC+4, vreinterpretq_u32_u64(c1)); +} + +void +GF2NT_233_Square_Reduce_ARMv8(const word* pA, word* pC) +{ + // word is either 32-bit or 64-bit, depending on the platform. + // Load using a 32-bit pointer to avoid possible alignment issues. + const uint32_t* pAA = reinterpret_cast(pA); + uint64x2_t a0 = vreinterpretq_u64_u32(vld1q_u32(pAA+0)); + uint64x2_t a1 = vreinterpretq_u64_u32(vld1q_u32(pAA+4)); + + uint64x2_t c0, c1, c2, c3; + F2N_Square_256_ARMv8(c3, c2, c1, c0, a1, a0); + GF2NT_233_Reduce_ARMv8(c3, c2, c1, c0); + + uint32_t* pCC = reinterpret_cast(pC); + vst1q_u32(pCC+0, vreinterpretq_u32_u64(c0)); + vst1q_u32(pCC+4, vreinterpretq_u32_u64(c1)); +} + +#elif (CRYPTOPP_POWER8_VMULL_AVAILABLE) + +void +GF2NT_233_Multiply_Reduce_POWER8(const word* pA, const word* pB, word* pC) +{ + // word is either 32-bit or 64-bit, depending on the platform. + // Load using a byte pointer to avoid possible alignment issues. + const byte* pAA = reinterpret_cast(pA); + const byte* pBB = reinterpret_cast(pB); + + uint64x2_p a0 = (uint64x2_p)VecLoad(pAA+0); + uint64x2_p a1 = (uint64x2_p)VecLoad(pAA+16); + uint64x2_p b0 = (uint64x2_p)VecLoad(pBB+0); + uint64x2_p b1 = (uint64x2_p)VecLoad(pBB+16); + +#if (CRYPTOPP_BIG_ENDIAN) + const uint8_t mb[] = {4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11}; + const uint8x16_p m = (uint8x16_p)VecLoad(mb); + a0 = VecPermute(a0, m); + a1 = VecPermute(a1, m); + b0 = VecPermute(b0, m); + b1 = VecPermute(b1, m); +#endif + + uint64x2_p c0, c1, c2, c3; + F2N_Multiply_256x256_POWER8(c3, c2, c1, c0, a1, a0, b1, b0); + GF2NT_233_Reduce_POWER8(c3, c2, c1, c0); + +#if (CRYPTOPP_BIG_ENDIAN) + c0 = VecPermute(c0, m); + c1 = VecPermute(c1, m); +#endif + + byte* pCC = reinterpret_cast(pC); + VecStore(c0, pCC+0); + VecStore(c1, pCC+16); +} + +void +GF2NT_233_Square_Reduce_POWER8(const word* pA, word* pC) +{ + // word is either 32-bit or 64-bit, depending on the platform. + // Load using a byte pointer to avoid possible alignment issues. + const byte* pAA = reinterpret_cast(pA); + uint64x2_p a0 = (uint64x2_p)VecLoad(pAA+0); + uint64x2_p a1 = (uint64x2_p)VecLoad(pAA+16); + +#if (CRYPTOPP_BIG_ENDIAN) + const uint8_t mb[] = {4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11}; + const uint8x16_p m = (uint8x16_p)VecLoad(mb); + a0 = VecPermute(a0, m); + a1 = VecPermute(a1, m); +#endif + + uint64x2_p c0, c1, c2, c3; + F2N_Square_256_POWER8(c3, c2, c1, c0, a1, a0); + GF2NT_233_Reduce_POWER8(c3, c2, c1, c0); + +#if (CRYPTOPP_BIG_ENDIAN) + c0 = VecPermute(c0, m); + c1 = VecPermute(c1, m); +#endif + + byte* pCC = reinterpret_cast(pC); + VecStore(c0, pCC+0); + VecStore(c1, pCC+16); +} + +#endif + +NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/hashfwd.h b/vendor/cryptopp/vendor_cryptopp/hashfwd.h index 8e11013a..49c2b02a 100644 --- a/vendor/cryptopp/vendor_cryptopp/hashfwd.h +++ b/vendor/cryptopp/vendor_cryptopp/hashfwd.h @@ -20,6 +20,9 @@ class SHA3_256; class SHA3_384; class SHA3_512; +class SHAKE128; +class SHAKE256; + class Tiger; class RIPEMD128; class RIPEMD160; diff --git a/vendor/cryptopp/vendor_cryptopp/hmqv.h b/vendor/cryptopp/vendor_cryptopp/hmqv.h index 870cbfad..3834a619 100644 --- a/vendor/cryptopp/vendor_cryptopp/hmqv.h +++ b/vendor/cryptopp/vendor_cryptopp/hmqv.h @@ -134,6 +134,7 @@ public: try { + this->GetMaterial().DoQuickSanityCheck(); const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); if(m_role == RoleServer) diff --git a/vendor/cryptopp/vendor_cryptopp/integer.cpp b/vendor/cryptopp/vendor_cryptopp/integer.cpp index e73e5d8c..78dd10a1 100644 --- a/vendor/cryptopp/vendor_cryptopp/integer.cpp +++ b/vendor/cryptopp/vendor_cryptopp/integer.cpp @@ -233,7 +233,7 @@ static word AtomicInverseModPower2(word A) #define GetBorrow(u) u##1 #else #define Declare2Words(x) dword x; - #if _MSC_VER >= 1400 && !defined(__INTEL_COMPILER) && !defined(_M_ARM) + #if _MSC_VER >= 1400 && !defined(__INTEL_COMPILER) && (defined(_M_IX86) || defined(_M_X64) || defined(_M_IA64)) #define MultiplyWords(p, a, b) p = __emulu(a, b); #else #define MultiplyWords(p, a, b) p = (dword)a*b; @@ -503,8 +503,9 @@ S DivideThreeWordsByTwo(S *A, S B0, S B1, D *dummy=NULLPTR) template inline D DivideFourWordsByTwo(S *T, const D &Al, const D &Ah, const D &B) { - // Profiling tells us the original second case was dominant, so it was promoted to the first If statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original second case was dominant, so it was + // promoted to the first If statement. The code change occurred at + // Commit dc99266599a0e72d. if (!!B) { @@ -2437,8 +2438,9 @@ void AsymmetricMultiply(word *R, word *T, const word *A, size_t NA, const word * if (NA==2 && !A[1]) { - // Profiling tells us the original Default case was dominant, so it was promoted to the first Case statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original Default case was dominant, so it was + // promoted to the first Case statement. The code change occurred at + // Commit dc99266599a0e72d. switch (A[0]) { default: @@ -2484,8 +2486,9 @@ void AsymmetricMultiply(word *R, word *T, const word *A, size_t NA, const word * void RecursiveInverseModPower2(word *R, word *T, const word *A, size_t N) { - // Profiling tells us the original Else was dominant, so it was promoted to the first If statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original Else was dominant, so it was + // promoted to the first If statement. The code change occurred + // at Commit dc99266599a0e72d. if (N!=2) { const size_t N2 = N/2; @@ -3099,8 +3102,9 @@ Integer& Integer::operator=(const Integer& t) bool Integer::GetBit(size_t n) const { - // Profiling tells us the original Else was dominant, so it was promoted to the first If statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original Else was dominant, so it was + // promoted to the first If statement. The code change occurred + // at Commit dc99266599a0e72d. if (n/WORD_BITS < reg.size()) return bool((reg[n/WORD_BITS] >> (n % WORD_BITS)) & 1); else @@ -3123,8 +3127,9 @@ void Integer::SetBit(size_t n, bool value) byte Integer::GetByte(size_t n) const { - // Profiling tells us the original Else was dominant, so it was promoted to the first If statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original Else was dominant, so it was + // promoted to the first If statement. The code change occurred + // at Commit dc99266599a0e72d. if (n/WORD_SIZE < reg.size()) return byte(reg[n/WORD_SIZE] >> ((n%WORD_SIZE)*8)); else @@ -3227,7 +3232,7 @@ static Integer StringToInteger(const T *str, ByteOrder order) { int digit, ch = static_cast(str[i]); - // Profiling showd the second and third Else needed to be swapped + // Profiling showd the second and third Else needed to be swapped // The code change occurred at Commit dc99266599a0e72d. if (ch >= '0' && ch <= '9') digit = ch - '0'; @@ -3387,8 +3392,9 @@ void Integer::Decode(BufferedTransformation &bt, size_t inputLen, Signedness s) size_t Integer::MinEncodedSize(Signedness signedness) const { - // Profiling tells us the original second If was dominant, so it was promoted to the first If statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original second If was dominant, so it + // was promoted to the first If statement. The code change occurred + // at Commit dc99266599a0e72d. unsigned int outputLen = STDMAX(1U, ByteCount()); const bool pre = (signedness == UNSIGNED); if (!pre && NotNegative() && (GetByte(outputLen-1) & 0x80)) @@ -3523,7 +3529,8 @@ void Integer::Randomize(RandomNumberGenerator &rng, const Integer &min, const In bool Integer::Randomize(RandomNumberGenerator &rng, const Integer &min, const Integer &max, RandomNumberType rnType, const Integer &equiv, const Integer &mod) { - return GenerateRandomNoThrow(rng, MakeParameters("Min", min)("Max", max)("RandomNumberType", rnType)("EquivalentTo", equiv)("Mod", mod)); + return GenerateRandomNoThrow(rng, MakeParameters("Min", min)("Max", max) + ("RandomNumberType", rnType)("EquivalentTo", equiv)("Mod", mod)); } class KDF2_RNG : public RandomNumberGenerator @@ -3842,8 +3849,9 @@ Integer Integer::Xor(const Integer& t) const void PositiveAdd(Integer &sum, const Integer &a, const Integer& b) { - // Profiling tells us the original second Else If was dominant, so it was promoted to the first If statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original second Else If was dominant, so it + // was promoted to the first If statement. The code change occurred at + // Commit dc99266599a0e72d. int carry; const bool pre = (a.reg.size() == b.reg.size()); if (!pre && a.reg.size() > b.reg.size()) { @@ -3877,8 +3885,9 @@ void PositiveSubtract(Integer &diff, const Integer &a, const Integer& b) unsigned bSize = b.WordCount(); bSize += bSize%2; - // Profiling tells us the original second Else If was dominant, so it was promoted to the first If statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original second Else If was dominant, so it + // was promoted to the first If statement. The code change occurred at + // Commit dc99266599a0e72d. if (aSize > bSize) { word borrow = Subtract(diff.reg, a.reg, b.reg, bSize); @@ -4235,7 +4244,9 @@ void Integer::Divide(word &remainder, Integer "ient, const Integer ÷nd if (!divisor) throw Integer::DivideByZero(); - if ((divisor & (divisor-1)) == 0) // divisor is a power of 2 + // IsPowerOf2 uses BMI on x86 if available. There is a small + // but measurable improvement during decryption and signing. + if (IsPowerOf2(divisor)) { quotient = dividend >> (BitPrecision(divisor)-1); remainder = dividend.reg[0] & (divisor-1); @@ -4279,12 +4290,14 @@ word Integer::Modulo(word divisor) const word remainder; - // Profiling tells us the original Else was dominant, so it was promoted to the first If statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original Else was dominant, so it was + // promoted to the first If statement. The code change occurred + // at Commit dc99266599a0e72d. if ((divisor & (divisor-1)) != 0) // divisor is not a power of 2 { - // Profiling tells us the original Else was dominant, so it was promoted to the first If statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original Else was dominant, so it + // was promoted to the first If statement. The code change + // occurred at Commit dc99266599a0e72d. unsigned int i = WordCount(); if (divisor > 5) { @@ -4319,8 +4332,9 @@ void Integer::Negate() int Integer::PositiveCompare(const Integer& t) const { - // Profiling tells us the original Else was dominant, so it was promoted to the first If statement. - // The code change occurred at Commit dc99266599a0e72d. + // Profiling tells us the original Else was dominant, so it + // was promoted to the first If statement. The code change + // occurred at Commit dc99266599a0e72d. const unsigned size = WordCount(), tSize = t.WordCount(); if (size != tSize) return size > tSize ? 1 : -1; diff --git a/vendor/cryptopp/vendor_cryptopp/keccak.cpp b/vendor/cryptopp/vendor_cryptopp/keccak.cpp index 2cfff8fd..ed69590e 100644 --- a/vendor/cryptopp/vendor_cryptopp/keccak.cpp +++ b/vendor/cryptopp/vendor_cryptopp/keccak.cpp @@ -19,10 +19,12 @@ http://creativecommons.org/publicdomain/zero/1.0/ #include "pch.h" #include "keccak.h" -#include "keccakc.h" NAMESPACE_BEGIN(CryptoPP) +// The Keccak core function +extern void KeccakF1600(word64 *state); + void Keccak::Update(const byte *input, size_t length) { CRYPTOPP_ASSERT(!(input == NULLPTR && length != 0)); @@ -52,13 +54,13 @@ void Keccak::Restart() void Keccak::TruncatedFinal(byte *hash, size_t size) { - CRYPTOPP_ASSERT(hash != NULLPTR); + CRYPTOPP_ASSERT(hash != NULLPTR); ThrowIfInvalidTruncatedSize(size); - m_state.BytePtr()[m_counter] ^= 1; + m_state.BytePtr()[m_counter] ^= 0x01; m_state.BytePtr()[r()-1] ^= 0x80; KeccakF1600(m_state); - memcpy(hash, m_state, size); + std::memcpy(hash, m_state, size); Restart(); } diff --git a/vendor/cryptopp/vendor_cryptopp/keccak.h b/vendor/cryptopp/vendor_cryptopp/keccak.h index a686f0a3..75410ba7 100644 --- a/vendor/cryptopp/vendor_cryptopp/keccak.h +++ b/vendor/cryptopp/vendor_cryptopp/keccak.h @@ -39,30 +39,30 @@ NAMESPACE_BEGIN(CryptoPP) /// \since Crypto++ 5.6.4 class Keccak : public HashTransformation { +protected: + /// \brief Construct a Keccak + /// \param digestSize the digest size, in bytes + /// \details Keccak is the base class for Keccak_224, Keccak_256, Keccak_384 and Keccak_512. + /// Library users should instantiate a derived class, and only use Keccak + /// as a base class reference or pointer. + /// \details This constructor was moved to protected at Crypto++ 8.1 + /// because users were attempting to create Keccak objects with it. + /// \since Crypto++ 5.6.4 + Keccak(unsigned int digestSize) : m_digestSize(digestSize) {Restart();} + public: - /// \brief Construct a Keccak - /// \param digestSize the digest size, in bytes - /// \details Keccak is the base class for Keccak_224, Keccak_256, Keccak_384 and Keccak_512. - /// Library users should instantiate a derived class, and only use Keccak - /// as a base class reference or pointer. - /// \since Crypto++ 5.6.4 - Keccak(unsigned int digestSize) : m_digestSize(digestSize) {Restart();} - unsigned int DigestSize() const {return m_digestSize;} - std::string AlgorithmName() const {return "Keccak-" + IntToString(m_digestSize*8);} - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "Keccak"; } - unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} + unsigned int DigestSize() const {return m_digestSize;} + unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} - void Update(const byte *input, size_t length); - void Restart(); - void TruncatedFinal(byte *hash, size_t size); - - //unsigned int BlockSize() const { return r(); } // that's the idea behind it + void Update(const byte *input, size_t length); + void Restart(); + void TruncatedFinal(byte *hash, size_t size); protected: - inline unsigned int r() const {return 200 - 2 * m_digestSize;} + inline unsigned int r() const {return BlockSize();} - FixedSizeSecBlock m_state; - unsigned int m_digestSize, m_counter; + FixedSizeSecBlock m_state; + unsigned int m_digestSize, m_counter; }; /// \brief Keccak message digest template @@ -72,33 +72,48 @@ template class Keccak_Final : public Keccak { public: - CRYPTOPP_CONSTANT(DIGESTSIZE = T_DigestSize) - CRYPTOPP_CONSTANT(BLOCKSIZE = 200 - 2 * DIGESTSIZE) + CRYPTOPP_CONSTANT(DIGESTSIZE = T_DigestSize) + CRYPTOPP_CONSTANT(BLOCKSIZE = 200 - 2 * DIGESTSIZE) + static std::string StaticAlgorithmName() + { return "Keccak-" + IntToString(DIGESTSIZE * 8); } + + /// \brief Construct a Keccak-X message digest + Keccak_Final() : Keccak(DIGESTSIZE) {} + + /// \brief Provides the block size of the compression function + /// \return block size of the compression function, in bytes + /// \details BlockSize() will return 0 if the hash is not block based + /// or does not have an equivalent block size. For example, Keccak + /// and SHA-3 do not have a block size, but they do have an equivalent + /// block size called rate expressed as r. + unsigned int BlockSize() const { return BLOCKSIZE; } + + std::string AlgorithmName() const { return StaticAlgorithmName(); } - /// \brief Construct a Keccak-X message digest - Keccak_Final() : Keccak(DIGESTSIZE) {} - static std::string StaticAlgorithmName() { return "Keccak-" + IntToString(DIGESTSIZE * 8); } - unsigned int BlockSize() const { return BLOCKSIZE; } private: - CRYPTOPP_COMPILE_ASSERT(BLOCKSIZE < 200); // ensure there was no underflow in the math - CRYPTOPP_COMPILE_ASSERT(BLOCKSIZE > (int)T_DigestSize); // this is a general expectation by HMAC +#if !defined(__BORLANDC__) + // ensure there was no underflow in the math + CRYPTOPP_COMPILE_ASSERT(BLOCKSIZE < 200); + // this is a general expectation by HMAC + CRYPTOPP_COMPILE_ASSERT((int)BLOCKSIZE > (int)DIGESTSIZE); +#endif }; /// \brief Keccak-224 message digest /// \since Crypto++ 5.6.4 -typedef Keccak_Final<28> Keccak_224; +DOCUMENTED_TYPEDEF(Keccak_Final<28>, Keccak_224); /// \brief Keccak-256 message digest /// \since Crypto++ 5.6.4 -typedef Keccak_Final<32> Keccak_256; +DOCUMENTED_TYPEDEF(Keccak_Final<32>, Keccak_256); /// \brief Keccak-384 message digest /// \since Crypto++ 5.6.4 -typedef Keccak_Final<48> Keccak_384; +DOCUMENTED_TYPEDEF(Keccak_Final<48>, Keccak_384); /// \brief Keccak-512 message digest /// \since Crypto++ 5.6.4 -typedef Keccak_Final<64> Keccak_512; +DOCUMENTED_TYPEDEF(Keccak_Final<64>, Keccak_512); NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/keccak_core.cpp b/vendor/cryptopp/vendor_cryptopp/keccak_core.cpp new file mode 100644 index 00000000..6a8a91bf --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/keccak_core.cpp @@ -0,0 +1,261 @@ +// keccakc.cpp - Keccak core functions shared between SHA3 and Keccak. +// written and placed in the public domain by JW. + +/* +The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, +Michael Peeters and Gilles Van Assche. For more information, feedback or +questions, please refer to our website: http://keccak.noekeon.org/ + +Implementation by Ronny Van Keer, hereby denoted as "the implementer". + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#include "pch.h" +#include "keccak.h" + +NAMESPACE_BEGIN(CryptoPP) + +// The Keccak core function +extern void KeccakF1600(word64 *state); +// The F1600 round constants +extern const word64 KeccakF1600Constants[24]; + +NAMESPACE_END + +NAMESPACE_BEGIN(CryptoPP) + +CRYPTOPP_ALIGN_DATA(8) +const word64 KeccakF1600Constants[24] = +{ + W64LIT(0x0000000000000001), W64LIT(0x0000000000008082), + W64LIT(0x800000000000808a), W64LIT(0x8000000080008000), + W64LIT(0x000000000000808b), W64LIT(0x0000000080000001), + W64LIT(0x8000000080008081), W64LIT(0x8000000000008009), + W64LIT(0x000000000000008a), W64LIT(0x0000000000000088), + W64LIT(0x0000000080008009), W64LIT(0x000000008000000a), + W64LIT(0x000000008000808b), W64LIT(0x800000000000008b), + W64LIT(0x8000000000008089), W64LIT(0x8000000000008003), + W64LIT(0x8000000000008002), W64LIT(0x8000000000000080), + W64LIT(0x000000000000800a), W64LIT(0x800000008000000a), + W64LIT(0x8000000080008081), W64LIT(0x8000000000008080), + W64LIT(0x0000000080000001), W64LIT(0x8000000080008008) +}; + +void KeccakF1600(word64 *state) +{ + word64 Aba, Abe, Abi, Abo, Abu; + word64 Aga, Age, Agi, Ago, Agu; + word64 Aka, Ake, Aki, Ako, Aku; + word64 Ama, Ame, Ami, Amo, Amu; + word64 Asa, Ase, Asi, Aso, Asu; + word64 BCa, BCe, BCi, BCo, BCu; + word64 Da, De, Di, Do, Du; + word64 Eba, Ebe, Ebi, Ebo, Ebu; + word64 Ega, Ege, Egi, Ego, Egu; + word64 Eka, Eke, Eki, Eko, Eku; + word64 Ema, Eme, Emi, Emo, Emu; + word64 Esa, Ese, Esi, Eso, Esu; + + typedef BlockGetAndPut Block; + Block::Get(state)(Aba)(Abe)(Abi)(Abo)(Abu)(Aga)(Age)(Agi)(Ago)(Agu)(Aka)(Ake)(Aki)(Ako)(Aku)(Ama)(Ame)(Ami)(Amo)(Amu)(Asa)(Ase)(Asi)(Aso)(Asu); + + for( unsigned int round = 0; round < 24; round += 2 ) + { + // prepareTheta + BCa = Aba^Aga^Aka^Ama^Asa; + BCe = Abe^Age^Ake^Ame^Ase; + BCi = Abi^Agi^Aki^Ami^Asi; + BCo = Abo^Ago^Ako^Amo^Aso; + BCu = Abu^Agu^Aku^Amu^Asu; + + //thetaRhoPiChiIotaPrepareTheta(round , A, E) + Da = BCu^rotlConstant<1>(BCe); + De = BCa^rotlConstant<1>(BCi); + Di = BCe^rotlConstant<1>(BCo); + Do = BCi^rotlConstant<1>(BCu); + Du = BCo^rotlConstant<1>(BCa); + + Aba ^= Da; + BCa = Aba; + Age ^= De; + BCe = rotlConstant<44>(Age); + Aki ^= Di; + BCi = rotlConstant<43>(Aki); + Amo ^= Do; + BCo = rotlConstant<21>(Amo); + Asu ^= Du; + BCu = rotlConstant<14>(Asu); + Eba = BCa ^((~BCe)& BCi ); + Eba ^= KeccakF1600Constants[round]; + Ebe = BCe ^((~BCi)& BCo ); + Ebi = BCi ^((~BCo)& BCu ); + Ebo = BCo ^((~BCu)& BCa ); + Ebu = BCu ^((~BCa)& BCe ); + + Abo ^= Do; + BCa = rotlConstant<28>(Abo); + Agu ^= Du; + BCe = rotlConstant<20>(Agu); + Aka ^= Da; + BCi = rotlConstant<3>(Aka); + Ame ^= De; + BCo = rotlConstant<45>(Ame); + Asi ^= Di; + BCu = rotlConstant<61>(Asi); + Ega = BCa ^((~BCe)& BCi ); + Ege = BCe ^((~BCi)& BCo ); + Egi = BCi ^((~BCo)& BCu ); + Ego = BCo ^((~BCu)& BCa ); + Egu = BCu ^((~BCa)& BCe ); + + Abe ^= De; + BCa = rotlConstant<1>(Abe); + Agi ^= Di; + BCe = rotlConstant<6>(Agi); + Ako ^= Do; + BCi = rotlConstant<25>(Ako); + Amu ^= Du; + BCo = rotlConstant<8>(Amu); + Asa ^= Da; + BCu = rotlConstant<18>(Asa); + Eka = BCa ^((~BCe)& BCi ); + Eke = BCe ^((~BCi)& BCo ); + Eki = BCi ^((~BCo)& BCu ); + Eko = BCo ^((~BCu)& BCa ); + Eku = BCu ^((~BCa)& BCe ); + + Abu ^= Du; + BCa = rotlConstant<27>(Abu); + Aga ^= Da; + BCe = rotlConstant<36>(Aga); + Ake ^= De; + BCi = rotlConstant<10>(Ake); + Ami ^= Di; + BCo = rotlConstant<15>(Ami); + Aso ^= Do; + BCu = rotlConstant<56>(Aso); + Ema = BCa ^((~BCe)& BCi ); + Eme = BCe ^((~BCi)& BCo ); + Emi = BCi ^((~BCo)& BCu ); + Emo = BCo ^((~BCu)& BCa ); + Emu = BCu ^((~BCa)& BCe ); + + Abi ^= Di; + BCa = rotlConstant<62>(Abi); + Ago ^= Do; + BCe = rotlConstant<55>(Ago); + Aku ^= Du; + BCi = rotlConstant<39>(Aku); + Ama ^= Da; + BCo = rotlConstant<41>(Ama); + Ase ^= De; + BCu = rotlConstant<2>(Ase); + Esa = BCa ^((~BCe)& BCi ); + Ese = BCe ^((~BCi)& BCo ); + Esi = BCi ^((~BCo)& BCu ); + Eso = BCo ^((~BCu)& BCa ); + Esu = BCu ^((~BCa)& BCe ); + + // prepareTheta + BCa = Eba^Ega^Eka^Ema^Esa; + BCe = Ebe^Ege^Eke^Eme^Ese; + BCi = Ebi^Egi^Eki^Emi^Esi; + BCo = Ebo^Ego^Eko^Emo^Eso; + BCu = Ebu^Egu^Eku^Emu^Esu; + + //thetaRhoPiChiIotaPrepareTheta(round+1, E, A) + Da = BCu^rotlConstant<1>(BCe); + De = BCa^rotlConstant<1>(BCi); + Di = BCe^rotlConstant<1>(BCo); + Do = BCi^rotlConstant<1>(BCu); + Du = BCo^rotlConstant<1>(BCa); + + Eba ^= Da; + BCa = Eba; + Ege ^= De; + BCe = rotlConstant<44>(Ege); + Eki ^= Di; + BCi = rotlConstant<43>(Eki); + Emo ^= Do; + BCo = rotlConstant<21>(Emo); + Esu ^= Du; + BCu = rotlConstant<14>(Esu); + Aba = BCa ^((~BCe)& BCi ); + Aba ^= KeccakF1600Constants[round+1]; + Abe = BCe ^((~BCi)& BCo ); + Abi = BCi ^((~BCo)& BCu ); + Abo = BCo ^((~BCu)& BCa ); + Abu = BCu ^((~BCa)& BCe ); + + Ebo ^= Do; + BCa = rotlConstant<28>(Ebo); + Egu ^= Du; + BCe = rotlConstant<20>(Egu); + Eka ^= Da; + BCi = rotlConstant<3>(Eka); + Eme ^= De; + BCo = rotlConstant<45>(Eme); + Esi ^= Di; + BCu = rotlConstant<61>(Esi); + Aga = BCa ^((~BCe)& BCi ); + Age = BCe ^((~BCi)& BCo ); + Agi = BCi ^((~BCo)& BCu ); + Ago = BCo ^((~BCu)& BCa ); + Agu = BCu ^((~BCa)& BCe ); + + Ebe ^= De; + BCa = rotlConstant<1>(Ebe); + Egi ^= Di; + BCe = rotlConstant<6>(Egi); + Eko ^= Do; + BCi = rotlConstant<25>(Eko); + Emu ^= Du; + BCo = rotlConstant<8>(Emu); + Esa ^= Da; + BCu = rotlConstant<18>(Esa); + Aka = BCa ^((~BCe)& BCi ); + Ake = BCe ^((~BCi)& BCo ); + Aki = BCi ^((~BCo)& BCu ); + Ako = BCo ^((~BCu)& BCa ); + Aku = BCu ^((~BCa)& BCe ); + + Ebu ^= Du; + BCa = rotlConstant<27>(Ebu); + Ega ^= Da; + BCe = rotlConstant<36>(Ega); + Eke ^= De; + BCi = rotlConstant<10>(Eke); + Emi ^= Di; + BCo = rotlConstant<15>(Emi); + Eso ^= Do; + BCu = rotlConstant<56>(Eso); + Ama = BCa ^((~BCe)& BCi ); + Ame = BCe ^((~BCi)& BCo ); + Ami = BCi ^((~BCo)& BCu ); + Amo = BCo ^((~BCu)& BCa ); + Amu = BCu ^((~BCa)& BCe ); + + Ebi ^= Di; + BCa = rotlConstant<62>(Ebi); + Ego ^= Do; + BCe = rotlConstant<55>(Ego); + Eku ^= Du; + BCi = rotlConstant<39>(Eku); + Ema ^= Da; + BCo = rotlConstant<41>(Ema); + Ese ^= De; + BCu = rotlConstant<2>(Ese); + Asa = BCa ^((~BCe)& BCi ); + Ase = BCe ^((~BCi)& BCo ); + Asi = BCi ^((~BCo)& BCu ); + Aso = BCo ^((~BCu)& BCa ); + Asu = BCu ^((~BCa)& BCe ); + } + + Block::Put(NULLPTR, state)(Aba)(Abe)(Abi)(Abo)(Abu)(Aga)(Age)(Agi)(Ago)(Agu)(Aka)(Ake)(Aki)(Ako)(Aku)(Ama)(Ame)(Ami)(Amo)(Amu)(Asa)(Ase)(Asi)(Aso)(Asu); +} + +NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/keccak_simd.cpp b/vendor/cryptopp/vendor_cryptopp/keccak_simd.cpp new file mode 100644 index 00000000..863bca58 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/keccak_simd.cpp @@ -0,0 +1,2678 @@ +// keccak_simd.cpp - written and placed in the public domain by Jeffrey Walton. +// +// This source file uses intrinsics to gain access to SSE and +// NEON instructions. A separate source file is needed because +// additional CXXFLAGS are required to enable the appropriate +// instructions sets in some build configurations. + +// The XKCP package is provided by Guido Bertoni, Joan Daemen, Seth Hoffert, +// Michael Peeters, Gilles Van Assche, and Ronny Van Keer. The code was +// placed public domain by the authors. + +// KeccakF1600x2_SSE is ParallelHash128. The SSE2 ParallelHash128 +// implementation was extracted from XKCP using the following command. +// +// gcc -I lib/common -I lib/low/KeccakP-1600/Optimized \ +// -I lib/low/KeccakP-1600-times2/SIMD128/SSE2ufull \ +// lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c -E + +#include "pch.h" +#include "config.h" +#include "keccak.h" +#include "misc.h" + +#if (CRYPTOPP_SSSE3_AVAILABLE) +# include +# include +#endif + +// Squash MS LNK4221 and libtool warnings +extern const char KECCAK_SIMD_FNAME[] = __FILE__; + +NAMESPACE_BEGIN(CryptoPP) + +#if (CRYPTOPP_SSSE3_AVAILABLE) + +// The Keccak ParallelHash128 core function +extern void KeccakF1600x2_SSE(word64 *state); + +// The F1600 round constants +extern const word64 KeccakF1600Constants[24]; + +const word64 rho8[2] = {0x0605040302010007, 0x0E0D0C0B0A09080F}; +const word64 rho56[2] = {0x0007060504030201, 0x080F0E0D0C0B0A09}; + +#define V128 __m128i +#define CV128 const __m128i + +#define CONST128(a) _mm_load_si128((CV128 *)&(a)) +#define XOREQ128(a, b) a = _mm_xor_si128((a), (b)) +#define UNPACKL(a, b) _mm_unpacklo_epi64((a), (b)) +#define UNPACKH(a, b) _mm_unpackhi_epi64((a), (b)) + +#if defined(__XOP__) +# define ROL64in128(a, o) _mm_roti_epi64((a), (o)) +# define ROL64in128_8(a) ROL64in128((a), 8) +# define ROL64in128_56(a) ROL64in128((a), 56) +#else +# define ROL64in128(a, o) _mm_or_si128(_mm_slli_epi64((a), (o)), _mm_srli_epi64(a, 64-(o))) +# define ROL64in128_8(a) _mm_shuffle_epi8((a), CONST128(rho8)) +# define ROL64in128_56(a) _mm_shuffle_epi8((a), CONST128(rho56)) +#endif + +// Damn Visual Studio is missing too many intrinsics... +inline __m128i SPLAT64(const word64 a) +{ +#if defined(_MSC_VER) + double x; std::memcpy(&x, &a, 8); + return _mm_castpd_si128(_mm_loaddup_pd(&x)); +#else + return _mm_set1_epi64x(a); +#endif +} + +// The Keccak ParallelHash128 core function +void KeccakF1600x2_SSE(word64 *state) +{ + V128 *statesAsLanes = (V128 *)state; + + V128 Aba, Abe, Abi, Abo, Abu; + V128 Aga, Age, Agi, Ago, Agu; + V128 Aka, Ake, Aki, Ako, Aku; + V128 Ama, Ame, Ami, Amo, Amu; + V128 Asa, Ase, Asi, Aso, Asu; + V128 Bba, Bbe, Bbi, Bbo, Bbu; + V128 Bga, Bge, Bgi, Bgo, Bgu; + V128 Bka, Bke, Bki, Bko, Bku; + V128 Bma, Bme, Bmi, Bmo, Bmu; + V128 Bsa, Bse, Bsi, Bso, Bsu; + V128 Ca, Ce, Ci, Co, Cu; + V128 Da, De, Di, Do, Du; + V128 Eba, Ebe, Ebi, Ebo, Ebu; + V128 Ega, Ege, Egi, Ego, Egu; + V128 Eka, Eke, Eki, Eko, Eku; + V128 Ema, Eme, Emi, Emo, Emu; + V128 Esa, Ese, Esi, Eso, Esu; + + Aba = _mm_loadu_si128((CV128 *)&(statesAsLanes[ 0])); + Abe = _mm_loadu_si128((CV128 *)&(statesAsLanes[ 1])); + Abi = _mm_loadu_si128((CV128 *)&(statesAsLanes[ 2])); + Abo = _mm_loadu_si128((CV128 *)&(statesAsLanes[ 3])); + Abu = _mm_loadu_si128((CV128 *)&(statesAsLanes[ 4])); + Aga = _mm_loadu_si128((CV128 *)&(statesAsLanes[ 5])); + Age = _mm_loadu_si128((CV128 *)&(statesAsLanes[ 6])); + Agi = _mm_loadu_si128((CV128 *)&(statesAsLanes[ 7])); + Ago = _mm_loadu_si128((CV128 *)&(statesAsLanes[ 8])); + Agu = _mm_loadu_si128((CV128 *)&(statesAsLanes[ 9])); + Aka = _mm_loadu_si128((CV128 *)&(statesAsLanes[10])); + Ake = _mm_loadu_si128((CV128 *)&(statesAsLanes[11])); + Aki = _mm_loadu_si128((CV128 *)&(statesAsLanes[12])); + Ako = _mm_loadu_si128((CV128 *)&(statesAsLanes[13])); + Aku = _mm_loadu_si128((CV128 *)&(statesAsLanes[14])); + Ama = _mm_loadu_si128((CV128 *)&(statesAsLanes[15])); + Ame = _mm_loadu_si128((CV128 *)&(statesAsLanes[16])); + Ami = _mm_loadu_si128((CV128 *)&(statesAsLanes[17])); + Amo = _mm_loadu_si128((CV128 *)&(statesAsLanes[18])); + Amu = _mm_loadu_si128((CV128 *)&(statesAsLanes[19])); + Asa = _mm_loadu_si128((CV128 *)&(statesAsLanes[20])); + Ase = _mm_loadu_si128((CV128 *)&(statesAsLanes[21])); + Asi = _mm_loadu_si128((CV128 *)&(statesAsLanes[22])); + Aso = _mm_loadu_si128((CV128 *)&(statesAsLanes[23])); + Asu = _mm_loadu_si128((CV128 *)&(statesAsLanes[24])); + + Ca = _mm_xor_si128(Aba, _mm_xor_si128(Aga, _mm_xor_si128(Aka, _mm_xor_si128(Ama, Asa)))); + Ce = _mm_xor_si128(Abe, _mm_xor_si128(Age, _mm_xor_si128(Ake, _mm_xor_si128(Ame, Ase)))); + Ci = _mm_xor_si128(Abi, _mm_xor_si128(Agi, _mm_xor_si128(Aki, _mm_xor_si128(Ami, Asi)))); + Co = _mm_xor_si128(Abo, _mm_xor_si128(Ago, _mm_xor_si128(Ako, _mm_xor_si128(Amo, Aso)))); + Cu = _mm_xor_si128(Abu, _mm_xor_si128(Agu, _mm_xor_si128(Aku, _mm_xor_si128(Amu, Asu)))); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[0])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[1])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[2])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[3])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[4])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[5])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[6])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[7])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[8])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[9])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[10])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[11])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[12])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[13])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[14])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[15])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[16])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[17])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[18])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[19])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[20])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[21])); + Ca = Aba; + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Abe; + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Abi; + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Abo; + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Abu; + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Aga); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Age); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Agi); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ago); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Agu); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Aka); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Ake); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Aki); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Ako); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Aku); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ama); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Ame); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Ami); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Amo); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Amu); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Asa); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ase); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Asi); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Aso); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Asu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Aba = _mm_xor_si128(Aba, Da); + Bba = Aba; + Age = _mm_xor_si128(Age, De); + Bbe = ROL64in128(Age, 44); + Aki = _mm_xor_si128(Aki, Di); + Bbi = ROL64in128(Aki, 43); + Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[22])); + Ca = Eba; + Amo = _mm_xor_si128(Amo, Do); + Bbo = ROL64in128(Amo, 21); + Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Ce = Ebe; + Asu = _mm_xor_si128(Asu, Du); + Bbu = ROL64in128(Asu, 14); + Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Ci = Ebi; + Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Co = Ebo; + Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Cu = Ebu; + Abo = _mm_xor_si128(Abo, Do); + Bga = ROL64in128(Abo, 28); + Agu = _mm_xor_si128(Agu, Du); + Bge = ROL64in128(Agu, 20); + Aka = _mm_xor_si128(Aka, Da); + Bgi = ROL64in128(Aka, 3); + Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Ca = _mm_xor_si128(Ca, Ega); + Ame = _mm_xor_si128(Ame, De); + Bgo = ROL64in128(Ame, 45); + Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Ce = _mm_xor_si128(Ce, Ege); + Asi = _mm_xor_si128(Asi, Di); + Bgu = ROL64in128(Asi, 61); + Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ci = _mm_xor_si128(Ci, Egi); + Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Co = _mm_xor_si128(Co, Ego); + Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Cu = _mm_xor_si128(Cu, Egu); + Abe = _mm_xor_si128(Abe, De); + Bka = ROL64in128(Abe, 1); + Agi = _mm_xor_si128(Agi, Di); + Bke = ROL64in128(Agi, 6); + Ako = _mm_xor_si128(Ako, Do); + Bki = ROL64in128(Ako, 25); + Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Ca = _mm_xor_si128(Ca, Eka); + Amu = _mm_xor_si128(Amu, Du); + Bko = ROL64in128_8(Amu); + Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Ce = _mm_xor_si128(Ce, Eke); + Asa = _mm_xor_si128(Asa, Da); + Bku = ROL64in128(Asa, 18); + Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ci = _mm_xor_si128(Ci, Eki); + Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Co = _mm_xor_si128(Co, Eko); + Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Cu = _mm_xor_si128(Cu, Eku); + Abu = _mm_xor_si128(Abu, Du); + Bma = ROL64in128(Abu, 27); + Aga = _mm_xor_si128(Aga, Da); + Bme = ROL64in128(Aga, 36); + Ake = _mm_xor_si128(Ake, De); + Bmi = ROL64in128(Ake, 10); + Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Ca = _mm_xor_si128(Ca, Ema); + Ami = _mm_xor_si128(Ami, Di); + Bmo = ROL64in128(Ami, 15); + Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Ce = _mm_xor_si128(Ce, Eme); + Aso = _mm_xor_si128(Aso, Do); + Bmu = ROL64in128_56(Aso); + Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Ci = _mm_xor_si128(Ci, Emi); + Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Co = _mm_xor_si128(Co, Emo); + Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Cu = _mm_xor_si128(Cu, Emu); + Abi = _mm_xor_si128(Abi, Di); + Bsa = ROL64in128(Abi, 62); + Ago = _mm_xor_si128(Ago, Do); + Bse = ROL64in128(Ago, 55); + Aku = _mm_xor_si128(Aku, Du); + Bsi = ROL64in128(Aku, 39); + Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ca = _mm_xor_si128(Ca, Esa); + Ama = _mm_xor_si128(Ama, Da); + Bso = ROL64in128(Ama, 41); + Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ce = _mm_xor_si128(Ce, Ese); + Ase = _mm_xor_si128(Ase, De); + Bsu = ROL64in128(Ase, 2); + Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Ci = _mm_xor_si128(Ci, Esi); + Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Co = _mm_xor_si128(Co, Eso); + Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + Cu = _mm_xor_si128(Cu, Esu); + Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1)); + De = _mm_xor_si128(Ca, ROL64in128(Ci, 1)); + Di = _mm_xor_si128(Ce, ROL64in128(Co, 1)); + Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1)); + Du = _mm_xor_si128(Co, ROL64in128(Ca, 1)); + Eba = _mm_xor_si128(Eba, Da); + Bba = Eba; + Ege = _mm_xor_si128(Ege, De); + Bbe = ROL64in128(Ege, 44); + Eki = _mm_xor_si128(Eki, Di); + Bbi = ROL64in128(Eki, 43); + Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi)); + Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[23])); + Emo = _mm_xor_si128(Emo, Do); + Bbo = ROL64in128(Emo, 21); + Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo)); + Esu = _mm_xor_si128(Esu, Du); + Bbu = ROL64in128(Esu, 14); + Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu)); + Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba)); + Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe)); + Ebo = _mm_xor_si128(Ebo, Do); + Bga = ROL64in128(Ebo, 28); + Egu = _mm_xor_si128(Egu, Du); + Bge = ROL64in128(Egu, 20); + Eka = _mm_xor_si128(Eka, Da); + Bgi = ROL64in128(Eka, 3); + Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi)); + Eme = _mm_xor_si128(Eme, De); + Bgo = ROL64in128(Eme, 45); + Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo)); + Esi = _mm_xor_si128(Esi, Di); + Bgu = ROL64in128(Esi, 61); + Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu)); + Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga)); + Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge)); + Ebe = _mm_xor_si128(Ebe, De); + Bka = ROL64in128(Ebe, 1); + Egi = _mm_xor_si128(Egi, Di); + Bke = ROL64in128(Egi, 6); + Eko = _mm_xor_si128(Eko, Do); + Bki = ROL64in128(Eko, 25); + Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki)); + Emu = _mm_xor_si128(Emu, Du); + Bko = ROL64in128_8(Emu); + Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko)); + Esa = _mm_xor_si128(Esa, Da); + Bku = ROL64in128(Esa, 18); + Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku)); + Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka)); + Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke)); + Ebu = _mm_xor_si128(Ebu, Du); + Bma = ROL64in128(Ebu, 27); + Ega = _mm_xor_si128(Ega, Da); + Bme = ROL64in128(Ega, 36); + Eke = _mm_xor_si128(Eke, De); + Bmi = ROL64in128(Eke, 10); + Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi)); + Emi = _mm_xor_si128(Emi, Di); + Bmo = ROL64in128(Emi, 15); + Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo)); + Eso = _mm_xor_si128(Eso, Do); + Bmu = ROL64in128_56(Eso); + Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu)); + Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma)); + Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme)); + Ebi = _mm_xor_si128(Ebi, Di); + Bsa = ROL64in128(Ebi, 62); + Ego = _mm_xor_si128(Ego, Do); + Bse = ROL64in128(Ego, 55); + Eku = _mm_xor_si128(Eku, Du); + Bsi = ROL64in128(Eku, 39); + Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi)); + Ema = _mm_xor_si128(Ema, Da); + Bso = ROL64in128(Ema, 41); + Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso)); + Ese = _mm_xor_si128(Ese, De); + Bsu = ROL64in128(Ese, 2); + Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu)); + Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa)); + Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse)); + + _mm_storeu_si128((V128 *)&(statesAsLanes[ 0]), Aba); + _mm_storeu_si128((V128 *)&(statesAsLanes[ 1]), Abe); + _mm_storeu_si128((V128 *)&(statesAsLanes[ 2]), Abi); + _mm_storeu_si128((V128 *)&(statesAsLanes[ 3]), Abo); + _mm_storeu_si128((V128 *)&(statesAsLanes[ 4]), Abu); + _mm_storeu_si128((V128 *)&(statesAsLanes[ 5]), Aga); + _mm_storeu_si128((V128 *)&(statesAsLanes[ 6]), Age); + _mm_storeu_si128((V128 *)&(statesAsLanes[ 7]), Agi); + _mm_storeu_si128((V128 *)&(statesAsLanes[ 8]), Ago); + _mm_storeu_si128((V128 *)&(statesAsLanes[ 9]), Agu); + _mm_storeu_si128((V128 *)&(statesAsLanes[10]), Aka); + _mm_storeu_si128((V128 *)&(statesAsLanes[11]), Ake); + _mm_storeu_si128((V128 *)&(statesAsLanes[12]), Aki); + _mm_storeu_si128((V128 *)&(statesAsLanes[13]), Ako); + _mm_storeu_si128((V128 *)&(statesAsLanes[14]), Aku); + _mm_storeu_si128((V128 *)&(statesAsLanes[15]), Ama); + _mm_storeu_si128((V128 *)&(statesAsLanes[16]), Ame); + _mm_storeu_si128((V128 *)&(statesAsLanes[17]), Ami); + _mm_storeu_si128((V128 *)&(statesAsLanes[18]), Amo); + _mm_storeu_si128((V128 *)&(statesAsLanes[19]), Amu); + _mm_storeu_si128((V128 *)&(statesAsLanes[20]), Asa); + _mm_storeu_si128((V128 *)&(statesAsLanes[21]), Ase); + _mm_storeu_si128((V128 *)&(statesAsLanes[22]), Asi); + _mm_storeu_si128((V128 *)&(statesAsLanes[23]), Aso); + _mm_storeu_si128((V128 *)&(statesAsLanes[24]), Asu); +} + +#endif + +NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/keccakc.cpp b/vendor/cryptopp/vendor_cryptopp/keccakc.cpp deleted file mode 100644 index 7dd8e729..00000000 --- a/vendor/cryptopp/vendor_cryptopp/keccakc.cpp +++ /dev/null @@ -1,258 +0,0 @@ -// keccakc.cpp - Keccak core functions shared between SHA3 and Keccak. -// written and placed in the public domain by JW. - -/* -The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, -Michael Peeters and Gilles Van Assche. For more information, feedback or -questions, please refer to our website: http://keccak.noekeon.org/ - -Implementation by Ronny Van Keer, hereby denoted as "the implementer". - -To the extent possible under law, the implementer has waived all copyright -and related or neighboring rights to the source code in this file. -http://creativecommons.org/publicdomain/zero/1.0/ -*/ - -#include "pch.h" -#include "keccak.h" -#include "keccakc.h" - -ANONYMOUS_NAMESPACE_BEGIN - -using CryptoPP::word64; - -const word64 KeccakF_RoundConstants[24] = -{ - W64LIT(0x0000000000000001), W64LIT(0x0000000000008082), W64LIT(0x800000000000808a), - W64LIT(0x8000000080008000), W64LIT(0x000000000000808b), W64LIT(0x0000000080000001), - W64LIT(0x8000000080008081), W64LIT(0x8000000000008009), W64LIT(0x000000000000008a), - W64LIT(0x0000000000000088), W64LIT(0x0000000080008009), W64LIT(0x000000008000000a), - W64LIT(0x000000008000808b), W64LIT(0x800000000000008b), W64LIT(0x8000000000008089), - W64LIT(0x8000000000008003), W64LIT(0x8000000000008002), W64LIT(0x8000000000000080), - W64LIT(0x000000000000800a), W64LIT(0x800000008000000a), W64LIT(0x8000000080008081), - W64LIT(0x8000000000008080), W64LIT(0x0000000080000001), W64LIT(0x8000000080008008) -}; - -ANONYMOUS_NAMESPACE_END - -NAMESPACE_BEGIN(CryptoPP) - -void KeccakF1600(word64 *state) -{ - { - word64 Aba, Abe, Abi, Abo, Abu; - word64 Aga, Age, Agi, Ago, Agu; - word64 Aka, Ake, Aki, Ako, Aku; - word64 Ama, Ame, Ami, Amo, Amu; - word64 Asa, Ase, Asi, Aso, Asu; - word64 BCa, BCe, BCi, BCo, BCu; - word64 Da, De, Di, Do, Du; - word64 Eba, Ebe, Ebi, Ebo, Ebu; - word64 Ega, Ege, Egi, Ego, Egu; - word64 Eka, Eke, Eki, Eko, Eku; - word64 Ema, Eme, Emi, Emo, Emu; - word64 Esa, Ese, Esi, Eso, Esu; - - //copyFromState(A, state) - typedef BlockGetAndPut Block; - Block::Get(state)(Aba)(Abe)(Abi)(Abo)(Abu)(Aga)(Age)(Agi)(Ago)(Agu)(Aka)(Ake)(Aki)(Ako)(Aku)(Ama)(Ame)(Ami)(Amo)(Amu)(Asa)(Ase)(Asi)(Aso)(Asu); - - for( unsigned int round = 0; round < 24; round += 2 ) - { - // prepareTheta - BCa = Aba^Aga^Aka^Ama^Asa; - BCe = Abe^Age^Ake^Ame^Ase; - BCi = Abi^Agi^Aki^Ami^Asi; - BCo = Abo^Ago^Ako^Amo^Aso; - BCu = Abu^Agu^Aku^Amu^Asu; - - //thetaRhoPiChiIotaPrepareTheta(round , A, E) - Da = BCu^rotlConstant<1>(BCe); - De = BCa^rotlConstant<1>(BCi); - Di = BCe^rotlConstant<1>(BCo); - Do = BCi^rotlConstant<1>(BCu); - Du = BCo^rotlConstant<1>(BCa); - - Aba ^= Da; - BCa = Aba; - Age ^= De; - BCe = rotlConstant<44>(Age); - Aki ^= Di; - BCi = rotlConstant<43>(Aki); - Amo ^= Do; - BCo = rotlConstant<21>(Amo); - Asu ^= Du; - BCu = rotlConstant<14>(Asu); - Eba = BCa ^((~BCe)& BCi ); - Eba ^= (word64)KeccakF_RoundConstants[round]; - Ebe = BCe ^((~BCi)& BCo ); - Ebi = BCi ^((~BCo)& BCu ); - Ebo = BCo ^((~BCu)& BCa ); - Ebu = BCu ^((~BCa)& BCe ); - - Abo ^= Do; - BCa = rotlConstant<28>(Abo); - Agu ^= Du; - BCe = rotlConstant<20>(Agu); - Aka ^= Da; - BCi = rotlConstant<3>(Aka); - Ame ^= De; - BCo = rotlConstant<45>(Ame); - Asi ^= Di; - BCu = rotlConstant<61>(Asi); - Ega = BCa ^((~BCe)& BCi ); - Ege = BCe ^((~BCi)& BCo ); - Egi = BCi ^((~BCo)& BCu ); - Ego = BCo ^((~BCu)& BCa ); - Egu = BCu ^((~BCa)& BCe ); - - Abe ^= De; - BCa = rotlConstant<1>(Abe); - Agi ^= Di; - BCe = rotlConstant<6>(Agi); - Ako ^= Do; - BCi = rotlConstant<25>(Ako); - Amu ^= Du; - BCo = rotlConstant<8>(Amu); - Asa ^= Da; - BCu = rotlConstant<18>(Asa); - Eka = BCa ^((~BCe)& BCi ); - Eke = BCe ^((~BCi)& BCo ); - Eki = BCi ^((~BCo)& BCu ); - Eko = BCo ^((~BCu)& BCa ); - Eku = BCu ^((~BCa)& BCe ); - - Abu ^= Du; - BCa = rotlConstant<27>(Abu); - Aga ^= Da; - BCe = rotlConstant<36>(Aga); - Ake ^= De; - BCi = rotlConstant<10>(Ake); - Ami ^= Di; - BCo = rotlConstant<15>(Ami); - Aso ^= Do; - BCu = rotlConstant<56>(Aso); - Ema = BCa ^((~BCe)& BCi ); - Eme = BCe ^((~BCi)& BCo ); - Emi = BCi ^((~BCo)& BCu ); - Emo = BCo ^((~BCu)& BCa ); - Emu = BCu ^((~BCa)& BCe ); - - Abi ^= Di; - BCa = rotlConstant<62>(Abi); - Ago ^= Do; - BCe = rotlConstant<55>(Ago); - Aku ^= Du; - BCi = rotlConstant<39>(Aku); - Ama ^= Da; - BCo = rotlConstant<41>(Ama); - Ase ^= De; - BCu = rotlConstant<2>(Ase); - Esa = BCa ^((~BCe)& BCi ); - Ese = BCe ^((~BCi)& BCo ); - Esi = BCi ^((~BCo)& BCu ); - Eso = BCo ^((~BCu)& BCa ); - Esu = BCu ^((~BCa)& BCe ); - - // prepareTheta - BCa = Eba^Ega^Eka^Ema^Esa; - BCe = Ebe^Ege^Eke^Eme^Ese; - BCi = Ebi^Egi^Eki^Emi^Esi; - BCo = Ebo^Ego^Eko^Emo^Eso; - BCu = Ebu^Egu^Eku^Emu^Esu; - - //thetaRhoPiChiIotaPrepareTheta(round+1, E, A) - Da = BCu^rotlConstant<1>(BCe); - De = BCa^rotlConstant<1>(BCi); - Di = BCe^rotlConstant<1>(BCo); - Do = BCi^rotlConstant<1>(BCu); - Du = BCo^rotlConstant<1>(BCa); - - Eba ^= Da; - BCa = Eba; - Ege ^= De; - BCe = rotlConstant<44>(Ege); - Eki ^= Di; - BCi = rotlConstant<43>(Eki); - Emo ^= Do; - BCo = rotlConstant<21>(Emo); - Esu ^= Du; - BCu = rotlConstant<14>(Esu); - Aba = BCa ^((~BCe)& BCi ); - Aba ^= (word64)KeccakF_RoundConstants[round+1]; - Abe = BCe ^((~BCi)& BCo ); - Abi = BCi ^((~BCo)& BCu ); - Abo = BCo ^((~BCu)& BCa ); - Abu = BCu ^((~BCa)& BCe ); - - Ebo ^= Do; - BCa = rotlConstant<28>(Ebo); - Egu ^= Du; - BCe = rotlConstant<20>(Egu); - Eka ^= Da; - BCi = rotlConstant<3>(Eka); - Eme ^= De; - BCo = rotlConstant<45>(Eme); - Esi ^= Di; - BCu = rotlConstant<61>(Esi); - Aga = BCa ^((~BCe)& BCi ); - Age = BCe ^((~BCi)& BCo ); - Agi = BCi ^((~BCo)& BCu ); - Ago = BCo ^((~BCu)& BCa ); - Agu = BCu ^((~BCa)& BCe ); - - Ebe ^= De; - BCa = rotlConstant<1>(Ebe); - Egi ^= Di; - BCe = rotlConstant<6>(Egi); - Eko ^= Do; - BCi = rotlConstant<25>(Eko); - Emu ^= Du; - BCo = rotlConstant<8>(Emu); - Esa ^= Da; - BCu = rotlConstant<18>(Esa); - Aka = BCa ^((~BCe)& BCi ); - Ake = BCe ^((~BCi)& BCo ); - Aki = BCi ^((~BCo)& BCu ); - Ako = BCo ^((~BCu)& BCa ); - Aku = BCu ^((~BCa)& BCe ); - - Ebu ^= Du; - BCa = rotlConstant<27>(Ebu); - Ega ^= Da; - BCe = rotlConstant<36>(Ega); - Eke ^= De; - BCi = rotlConstant<10>(Eke); - Emi ^= Di; - BCo = rotlConstant<15>(Emi); - Eso ^= Do; - BCu = rotlConstant<56>(Eso); - Ama = BCa ^((~BCe)& BCi ); - Ame = BCe ^((~BCi)& BCo ); - Ami = BCi ^((~BCo)& BCu ); - Amo = BCo ^((~BCu)& BCa ); - Amu = BCu ^((~BCa)& BCe ); - - Ebi ^= Di; - BCa = rotlConstant<62>(Ebi); - Ego ^= Do; - BCe = rotlConstant<55>(Ego); - Eku ^= Du; - BCi = rotlConstant<39>(Eku); - Ema ^= Da; - BCo = rotlConstant<41>(Ema); - Ese ^= De; - BCu = rotlConstant<2>(Ese); - Asa = BCa ^((~BCe)& BCi ); - Ase = BCe ^((~BCi)& BCo ); - Asi = BCi ^((~BCo)& BCu ); - Aso = BCo ^((~BCu)& BCa ); - Asu = BCu ^((~BCa)& BCe ); - } - - //copyToState(state, A) - Block::Put(NULLPTR, state)(Aba)(Abe)(Abi)(Abo)(Abu)(Aga)(Age)(Agi)(Ago)(Agu)(Aka)(Ake)(Aki)(Ako)(Aku)(Ama)(Ame)(Ami)(Amo)(Amu)(Asa)(Ase)(Asi)(Aso)(Asu); - } -} - -NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/keccakc.h b/vendor/cryptopp/vendor_cryptopp/keccakc.h deleted file mode 100644 index ed186593..00000000 --- a/vendor/cryptopp/vendor_cryptopp/keccakc.h +++ /dev/null @@ -1,13 +0,0 @@ -// keccakc.h - Keccak core functions shared between SHA3 and Keccak. -// written and placed in the public domain by JW. - -#ifndef CRYPTOPP_KECCAK_CORE -#define CRYPTOPP_KECCAK_CORE - -NAMESPACE_BEGIN(CryptoPP) - -void KeccakF1600(word64 *state); - -NAMESPACE_END - -#endif // CRYPTOPP_KECCAK_CORE diff --git a/vendor/cryptopp/vendor_cryptopp/lea.h b/vendor/cryptopp/vendor_cryptopp/lea.h index a3482d5d..a41bd221 100644 --- a/vendor/cryptopp/vendor_cryptopp/lea.h +++ b/vendor/cryptopp/vendor_cryptopp/lea.h @@ -16,7 +16,9 @@ #include "algparam.h" #if (CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8) -# define CRYPTOPP_LEA_ADVANCED_PROCESS_BLOCKS 1 +# ifndef CRYPTOPP_DISABLE_LEA_SIMD +# define CRYPTOPP_LEA_ADVANCED_PROCESS_BLOCKS 1 +# endif #endif // Yet another SunStudio/SunCC workaround. Failed self tests diff --git a/vendor/cryptopp/vendor_cryptopp/lea_simd.cpp b/vendor/cryptopp/vendor_cryptopp/lea_simd.cpp index 8278330e..b4180e34 100644 --- a/vendor/cryptopp/vendor_cryptopp/lea_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/lea_simd.cpp @@ -10,7 +10,6 @@ #include "lea.h" #include "misc.h" -#include "adv_simd.h" // Uncomment for benchmarking C++ against SSE or NEON. // Do so in both simon.cpp and simon-simd.cpp. @@ -18,6 +17,7 @@ // #undef CRYPTOPP_ARM_NEON_AVAILABLE #if (CRYPTOPP_SSSE3_AVAILABLE) +# include "adv_simd.h" # include # include #endif @@ -26,38 +26,41 @@ # include #endif -#if defined(__AVX512F__) && defined(__AVX512VL__) +#if defined(__AVX512F__) # define CRYPTOPP_AVX512_ROTATE 1 # include #endif +// C1189: error: This header is specific to ARM targets #if (CRYPTOPP_ARM_NEON_AVAILABLE) -# include +# include "adv_simd.h" +# ifndef _M_ARM64 +# include +# endif #endif -// Can't use CRYPTOPP_ARM_XXX_AVAILABLE because too many -// compilers don't follow ACLE conventions for the include. #if (CRYPTOPP_ARM_ACLE_AVAILABLE) # include # include #endif // Do not port this to POWER architecture. Naively we hoped -// for a 2x to 3x speedup. The result was a 5x slow down -// because of the rotates and scattered loads. +// for a 2x to 3x speedup. The result was a 5x slow down. +// The table below shows MiB/s and cpb. // // C++: -// LEA-128(128)/CTR (128-bit key)C++20715.640.5932015 -// LEA-128(192)/CTR (192-bit key)C++18617.480.6992378 -// LEA-128(256)/CTR (256-bit key)C++12426.20.8422861 +// LEA-128(128)/CTR (128-bit key)C++20715.64 +// LEA-128(192)/CTR (192-bit key)C++18617.48 +// LEA-128(256)/CTR (256-bit key)C++12426.2 // // Power8: -// LEA-128(128)/CTR (128-bit key)Power83788.70.5952023 -// LEA-128(192)/CTR (192-bit key)Power84082.10.6992375 -// LEA-128(256)/CTR (256-bit key)Power828116.01.0063419 +// LEA-128(128)/CTR (128-bit key)Power83788.7 +// LEA-128(192)/CTR (192-bit key)Power84082.1 +// LEA-128(256)/CTR (256-bit key)Power828116.0 #undef CRYPTOPP_POWER8_AVAILABLE #if defined(CRYPTOPP_POWER8_AVAILABLE) +# include "adv_simd.h" # include "ppc_simd.h" #endif @@ -1034,17 +1037,15 @@ size_t LEA_Dec_AdvancedProcessBlocks_SSSE3(const word32* subKeys, size_t rounds, size_t LEA_Enc_AdvancedProcessBlocks_NEON(const word32* subKeys, size_t rounds, const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) { - uint32x4_t unused; // Avoid template argument deduction/substitution failures return AdvancedProcessBlocks128_4x1_NEON(LEA_Enc_Block, LEA_Enc_4_Blocks, - unused, subKeys, rounds, inBlocks, xorBlocks, outBlocks, length, flags); + subKeys, rounds, inBlocks, xorBlocks, outBlocks, length, flags); } size_t LEA_Dec_AdvancedProcessBlocks_NEON(const word32* subKeys, size_t rounds, const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) { - uint32x4_t unused; // Avoid template argument deduction/substitution failures return AdvancedProcessBlocks128_4x1_NEON(LEA_Dec_Block, LEA_Dec_4_Blocks, - unused, subKeys, rounds, inBlocks, xorBlocks, outBlocks, length, flags); + subKeys, rounds, inBlocks, xorBlocks, outBlocks, length, flags); } #endif // CRYPTOPP_ARM_NEON_AVAILABLE diff --git a/vendor/cryptopp/vendor_cryptopp/misc.cpp b/vendor/cryptopp/vendor_cryptopp/misc.cpp index 6752a81a..cfd03828 100644 --- a/vendor/cryptopp/vendor_cryptopp/misc.cpp +++ b/vendor/cryptopp/vendor_cryptopp/misc.cpp @@ -280,8 +280,6 @@ void CallNewHandler() throw std::bad_alloc(); } -#if CRYPTOPP_BOOL_ALIGN16 - void * AlignedAllocate(size_t size) { byte *p; @@ -300,10 +298,13 @@ void * AlignedAllocate(size_t size) #ifdef CRYPTOPP_NO_ALIGNED_ALLOC size_t adjustment = 16-((size_t)p%16); + CRYPTOPP_ASSERT(adjustment > 0); p += adjustment; p[-1] = (byte)adjustment; #endif + // If this assert fires then there are problems that need + // to be fixed. Please open a bug report. CRYPTOPP_ASSERT(IsAlignedOn(p, 16)); return p; } @@ -320,8 +321,6 @@ void AlignedDeallocate(void *p) #endif } -#endif // CRYPTOPP_BOOL_ALIGN16 - void * UnalignedAllocate(size_t size) { void *p; diff --git a/vendor/cryptopp/vendor_cryptopp/misc.h b/vendor/cryptopp/vendor_cryptopp/misc.h index 14b0dd19..67e399d4 100644 --- a/vendor/cryptopp/vendor_cryptopp/misc.h +++ b/vendor/cryptopp/vendor_cryptopp/misc.h @@ -18,11 +18,12 @@ # endif #endif -// Issue 340 +// Issue 340 and Issue 793 #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Wsign-conversion" +# pragma GCC diagnostic ignored "-Wunused-function" #endif #include "cryptlib.h" @@ -101,35 +102,6 @@ #endif // CRYPTOPP_DOXYGEN_PROCESSING -// NumericLimitsMin and NumericLimitsMax added for word128 types, -// see http://github.com/weidai11/cryptopp/issues/364 -ANONYMOUS_NAMESPACE_BEGIN -template -T NumericLimitsMin() -{ - CRYPTOPP_ASSERT(std::numeric_limits::is_specialized); - return (std::numeric_limits::min)(); -} -template -T NumericLimitsMax() -{ - CRYPTOPP_ASSERT(std::numeric_limits::is_specialized); - return (std::numeric_limits::max)(); -} -#if defined(CRYPTOPP_WORD128_AVAILABLE) -template<> -CryptoPP::word128 NumericLimitsMin() -{ - return 0; -} -template<> -CryptoPP::word128 NumericLimitsMax() -{ - return (((CryptoPP::word128)W64LIT(0xffffffffffffffff)) << 64U) | (CryptoPP::word128)W64LIT(0xffffffffffffffff); -} -#endif -ANONYMOUS_NAMESPACE_END - NAMESPACE_BEGIN(CryptoPP) // Forward declaration for IntToString specialization @@ -617,7 +589,7 @@ template inline const T1 UnsignedMin(const T1& a, const T2& template inline bool SafeConvert(T1 from, T2 &to) { - to = (T2)from; + to = static_cast(from); if (from != to || (from > 0) != (to > 0)) return false; return true; @@ -632,7 +604,7 @@ template std::string IntToString(T value, unsigned int base = 10) { // Hack... set the high bit for uppercase. - static const unsigned int HIGH_BIT = (1U << 31); + const unsigned int HIGH_BIT = (1U << 31); const char CH = !!(base & HIGH_BIT) ? 'A' : 'a'; base &= ~HIGH_BIT; @@ -899,18 +871,20 @@ CRYPTOPP_DLL void CRYPTOPP_API xorbuf(byte *output, const byte *input, const byt /// \param buf1 the first buffer /// \param buf2 the second buffer /// \param count the size of the buffers, in bytes -/// \details The function effectively performs an XOR of the elements in two equally sized buffers -/// and retruns a result based on the XOR operation. The function is near constant-time because -/// CPU micro-code timings could affect the "constant-ness". Calling code is responsible for -/// mitigating timing attacks if the buffers are not equally sized. +/// \details The function effectively performs an XOR of the elements in two equally sized +/// buffers and retruns a result based on the XOR operation. The function is near +/// constant-time because CPU micro-code timings could affect the "constant-ness". +/// Calling code is responsible for mitigating timing attacks if the buffers are not +/// equally sized. /// \sa ModPowerOf2 CRYPTOPP_DLL bool CRYPTOPP_API VerifyBufsEqual(const byte *buf1, const byte *buf2, size_t count); /// \brief Tests whether a value is a power of 2 /// \param value the value to test /// \returns true if value is a power of 2, false otherwise -/// \details The function creates a mask of value - 1 and returns the result of -/// an AND operation compared to 0. If value is 0 or less than 0, then the function returns false. +/// \details The function creates a mask of value - 1 and returns the result +/// of an AND operation compared to 0. If value is 0 or less than 0, then the function +/// returns false. template inline bool IsPowerOf2(const T &value) { @@ -933,13 +907,65 @@ inline bool IsPowerOf2(const word64 &value) # endif // __x86_64__ #endif // __BMI__ +/// \brief Provide the minimum value for a type +/// \tparam T type of class +/// \returns the minimum value of the type or class +/// \details NumericLimitsMin() was introduced for Clang at Issue 364, +/// Apple Clang 6.0 and numeric_limits::max() returns 0. +/// \details NumericLimitsMin() requires a specialization for T, +/// meaning std::numeric_limits::is_specialized must return +/// true. In the case of word128 Clang did not specialize +/// numeric_limits for the type. +/// \since Crypto++ 8.1 +template +inline T NumericLimitsMin() +{ + CRYPTOPP_ASSERT(std::numeric_limits::is_specialized); + return (std::numeric_limits::min)(); +} + +/// \brief Provide the maximum value for a type +/// \tparam T type of class +/// \returns the maximum value of the type or class +/// \details NumericLimitsMax() was introduced for Clang at Issue 364, +/// Apple Clang 6.0 and numeric_limits::max() returns 0. +/// \details NumericLimitsMax() requires a specialization for T, +/// meaning std::numeric_limits::is_specialized must return +/// true. In the case of word128 Clang did not specialize +/// numeric_limits for the type. +/// \since Crypto++ 8.1 +template +inline T NumericLimitsMax() +{ + CRYPTOPP_ASSERT(std::numeric_limits::is_specialized); + return (std::numeric_limits::max)(); +} + +// NumericLimitsMin and NumericLimitsMax added for word128 types, +// see http://github.com/weidai11/cryptopp/issues/364 +#if defined(CRYPTOPP_WORD128_AVAILABLE) +template<> +inline word128 NumericLimitsMin() +{ + return 0; +} +template<> +inline word128 NumericLimitsMax() +{ + return (static_cast(LWORD_MAX) << 64U) | LWORD_MAX; +} +#endif + /// \brief Performs a saturating subtract clamped at 0 /// \tparam T1 class or type /// \tparam T2 class or type /// \param a the minuend /// \param b the subtrahend /// \returns the difference produced by the saturating subtract -/// \details Saturating arithmetic restricts results to a fixed range. Results that are less than 0 are clamped at 0. +/// \details Saturating arithmetic restricts results to a fixed range. Results that are +/// less than 0 are clamped at 0. /// \details Use of saturating arithmetic in places can be advantageous because it can /// avoid a branch by using an instruction like a conditional move (CMOVE). template @@ -955,8 +981,8 @@ inline T1 SaturatingSubtract(const T1 &a, const T2 &b) /// \param a the minuend /// \param b the subtrahend /// \returns the difference produced by the saturating subtract -/// \details Saturating arithmetic restricts results to a fixed range. Results that are less than -/// 1 are clamped at 1. +/// \details Saturating arithmetic restricts results to a fixed range. Results that are +/// less than 1 are clamped at 1. /// \details Use of saturating arithmetic in places can be advantageous because it can /// avoid a branch by using an instruction like a conditional move (CMOVE). template @@ -1156,6 +1182,7 @@ inline CipherDir GetCipherDir(const T &obj) /// to free memory. There is no guarantee CallNewHandler will be able to procure more memory so /// an allocation succeeds. If the call to set_new_handler fails, then CallNewHandler throws /// a bad_alloc exception. +/// \sa AlignedAllocate, AlignedDeallocate, UnalignedAllocate, UnalignedDeallocate CRYPTOPP_DLL void CRYPTOPP_API CallNewHandler(); /// \brief Performs an addition with carry on a block of bytes @@ -1380,37 +1407,44 @@ std::string StringNarrow(const wchar_t *str, bool throwOnError = true); /// then a 0x21 error is returned on Windows which eventually results in an InvalidArgument() exception. std::wstring StringWiden(const char *str, bool throwOnError = true); -#ifdef CRYPTOPP_DOXYGEN_PROCESSING - /// \brief Allocates a buffer on 16-byte boundary /// \param size the size of the buffer -/// \details AlignedAllocate is primarily used when the data will be proccessed by MMX, SSE2 and NEON -/// instructions. The assembly language routines rely on the alignment. If the alignment is not +/// \details AlignedAllocate is primarily used when the data will be +/// proccessed by SSE, NEON, ARMv8 or PowerPC instructions. The assembly +/// language routines rely on the alignment. If the alignment is not /// respected, then a SIGBUS could be generated on Unix and Linux, and an /// EXCEPTION_DATATYPE_MISALIGNMENT could be generated on Windows. -/// \note AlignedAllocate and AlignedDeallocate are available when CRYPTOPP_BOOL_ALIGN16 is -/// defined. CRYPTOPP_BOOL_ALIGN16 is defined in config.h +/// \details Formerly, AlignedAllocate and AlignedDeallocate were only +/// available on certain platforms when CRYTPOPP_DISABLE_ASM was not in +/// effect. However, Android and iOS debug simulator builds got into a +/// state where the aligned allocator was not available and caused link +/// failures. +/// \since AlignedAllocate for SIMD since Crypto++ 1.0, AlignedAllocate +/// for all builds since Crypto++ 8.1 +/// \sa AlignedDeallocate, UnalignedAllocate, UnalignedDeallocate, CallNewHandler, +/// Issue 779 CRYPTOPP_DLL void* CRYPTOPP_API AlignedAllocate(size_t size); /// \brief Frees a buffer allocated with AlignedAllocate /// \param ptr the buffer to free -/// \note AlignedAllocate and AlignedDeallocate are available when CRYPTOPP_BOOL_ALIGN16 is -/// defined. CRYPTOPP_BOOL_ALIGN16 is defined in config.h +/// \since AlignedDeallocate for SIMD since Crypto++ 1.0, AlignedAllocate +/// for all builds since Crypto++ 8.1 +/// \sa AlignedAllocate, UnalignedAllocate, UnalignedDeallocate, CallNewHandler, +/// Issue 779 CRYPTOPP_DLL void CRYPTOPP_API AlignedDeallocate(void *ptr); -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -#if CRYPTOPP_BOOL_ALIGN16 -CRYPTOPP_DLL void* CRYPTOPP_API AlignedAllocate(size_t size); -CRYPTOPP_DLL void CRYPTOPP_API AlignedDeallocate(void *ptr); -#endif // CRYPTOPP_BOOL_ALIGN16 - /// \brief Allocates a buffer /// \param size the size of the buffer +/// \since Crypto++ 1.0 +/// \sa AlignedAllocate, AlignedDeallocate, UnalignedDeallocate, CallNewHandler, +/// Issue 779 CRYPTOPP_DLL void * CRYPTOPP_API UnalignedAllocate(size_t size); /// \brief Frees a buffer allocated with UnalignedAllocate /// \param ptr the buffer to free +/// \since Crypto++ 1.0 +/// \sa AlignedAllocate, AlignedDeallocate, UnalignedAllocate, CallNewHandler, +/// Issue 779 CRYPTOPP_DLL void CRYPTOPP_API UnalignedDeallocate(void *ptr); // ************** rotate functions *************** @@ -1436,8 +1470,8 @@ template inline T rotlConstant(T x) // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57157, // http://software.intel.com/en-us/forums/topic/580884 // and http://llvm.org/bugs/show_bug.cgi?id=24226 - static const unsigned int THIS_SIZE = sizeof(T)*8; - static const unsigned int MASK = THIS_SIZE-1; + CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8) + CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1) CRYPTOPP_ASSERT(R < THIS_SIZE); return T((x<>(-R&MASK))); } @@ -1462,8 +1496,8 @@ template inline T rotrConstant(T x) // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57157, // http://software.intel.com/en-us/forums/topic/580884 // and http://llvm.org/bugs/show_bug.cgi?id=24226 - static const unsigned int THIS_SIZE = sizeof(T)*8; - static const unsigned int MASK = THIS_SIZE-1; + CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8) + CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1) CRYPTOPP_ASSERT(R < THIS_SIZE); return T((x >> R)|(x<<(-R&MASK))); } @@ -1487,8 +1521,8 @@ template inline T rotlFixed(T x, unsigned int y) // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57157, // http://software.intel.com/en-us/forums/topic/580884 // and http://llvm.org/bugs/show_bug.cgi?id=24226 - static const unsigned int THIS_SIZE = sizeof(T)*8; - static const unsigned int MASK = THIS_SIZE-1; + CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8) + CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1) CRYPTOPP_ASSERT(y < THIS_SIZE); return T((x<>(-y&MASK))); } @@ -1512,8 +1546,8 @@ template inline T rotrFixed(T x, unsigned int y) // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57157, // http://software.intel.com/en-us/forums/topic/580884 // and http://llvm.org/bugs/show_bug.cgi?id=24226 - static const unsigned int THIS_SIZE = sizeof(T)*8; - static const unsigned int MASK = THIS_SIZE-1; + CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8) + CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1) CRYPTOPP_ASSERT(y < THIS_SIZE); return T((x >> y)|(x<<(-y&MASK))); } @@ -1532,8 +1566,8 @@ template inline T rotrFixed(T x, unsigned int y) /// \since Crypto++ 3.0 template inline T rotlVariable(T x, unsigned int y) { - static const unsigned int THIS_SIZE = sizeof(T)*8; - static const unsigned int MASK = THIS_SIZE-1; + CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8) + CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1) CRYPTOPP_ASSERT(y < THIS_SIZE); return T((x<>(-y&MASK))); } @@ -1552,8 +1586,8 @@ template inline T rotlVariable(T x, unsigned int y) /// \since Crypto++ 3.0 template inline T rotrVariable(T x, unsigned int y) { - static const unsigned int THIS_SIZE = sizeof(T)*8; - static const unsigned int MASK = THIS_SIZE-1; + CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8) + CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1) CRYPTOPP_ASSERT(y < THIS_SIZE); return T((x>>y)|(x<<(-y&MASK))); } @@ -1569,8 +1603,8 @@ template inline T rotrVariable(T x, unsigned int y) /// \since Crypto++ 3.0 template inline T rotlMod(T x, unsigned int y) { - static const unsigned int THIS_SIZE = sizeof(T)*8; - static const unsigned int MASK = THIS_SIZE-1; + CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8) + CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1) return T((x<<(y&MASK))|(x>>(-y&MASK))); } @@ -1585,8 +1619,8 @@ template inline T rotlMod(T x, unsigned int y) /// \since Crypto++ 3.0 template inline T rotrMod(T x, unsigned int y) { - static const unsigned int THIS_SIZE = sizeof(T)*8; - static const unsigned int MASK = THIS_SIZE-1; + CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8) + CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1) return T((x>>(y&MASK))|(x<<(-y&MASK))); } diff --git a/vendor/cryptopp/vendor_cryptopp/naclite.h b/vendor/cryptopp/vendor_cryptopp/naclite.h index 8be89e4a..d0fae99d 100644 --- a/vendor/cryptopp/vendor_cryptopp/naclite.h +++ b/vendor/cryptopp/vendor_cryptopp/naclite.h @@ -53,7 +53,7 @@ #include "config.h" #include "stdcpp.h" -#if defined(NO_OS_DEPENDENCE) +#if defined(NO_OS_DEPENDENCE) || !defined(OS_RNG_AVAILABLE) # define CRYPTOPP_DISABLE_NACL 1 #endif diff --git a/vendor/cryptopp/vendor_cryptopp/neon_simd.cpp b/vendor/cryptopp/vendor_cryptopp/neon_simd.cpp index 1a77260b..aec3e5ef 100644 --- a/vendor/cryptopp/vendor_cryptopp/neon_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/neon_simd.cpp @@ -11,12 +11,11 @@ #include "config.h" #include "stdcpp.h" -#if (CRYPTOPP_ARM_NEON_AVAILABLE) +// C1189: error: This header is specific to ARM targets +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(_M_ARM64) # include #endif -// Can't use CRYPTOPP_ARM_XXX_AVAILABLE because too many -// compilers don't follow ACLE conventions for the include. #if (CRYPTOPP_ARM_ACLE_AVAILABLE) # include # include diff --git a/vendor/cryptopp/vendor_cryptopp/osrng.cpp b/vendor/cryptopp/vendor_cryptopp/osrng.cpp index 6d36aaea..244bf74c 100644 --- a/vendor/cryptopp/vendor_cryptopp/osrng.cpp +++ b/vendor/cryptopp/vendor_cryptopp/osrng.cpp @@ -8,8 +8,10 @@ #ifndef CRYPTOPP_IMPORTS // Win32 has CryptoAPI and . Windows 10 and Windows Store 10 have CNG and . -// There's a hole for Windows Phone 8 and Windows Store 8. There is no userland crypto available. -// Also see http://stackoverflow.com/questions/36974545/random-numbers-for-windows-phone-8-and-windows-store-8 +// There's a hole for Windows Phone 8 and Windows Store 8. There is no userland RNG available. +// Also see http://www.drdobbs.com/windows/using-c-and-com-with-winrt/240168150 and +// http://stackoverflow.com/questions/36974545/random-numbers-for-windows-phone-8-and-windows-store-8 and +// https://social.msdn.microsoft.com/Forums/vstudio/en-US/25b83e13-c85f-4aa1-a057-88a279ea3fd6/what-crypto-random-generator-c-code-could-use-on-wp81 #if defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(OS_RNG_AVAILABLE) # pragma message("WARNING: Compiling for Windows but an OS RNG is not available. This is likely a Windows Phone 8 or Windows Store 8 app.") #endif diff --git a/vendor/cryptopp/vendor_cryptopp/panama.h b/vendor/cryptopp/vendor_cryptopp/panama.h index 69262606..04d2468b 100644 --- a/vendor/cryptopp/vendor_cryptopp/panama.h +++ b/vendor/cryptopp/vendor_cryptopp/panama.h @@ -50,6 +50,7 @@ public: unsigned int DigestSize() const {return DIGESTSIZE;} void TruncatedFinal(byte *hash, size_t size); CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return B::ToEnum() == BIG_ENDIAN_ORDER ? "Panama-BE" : "Panama-LE";} + std::string AlgorithmProvider() const {return Panama::AlgorithmProvider();} // Fix https://github.com/weidai11/cryptopp/issues/801 protected: void Init() {Panama::Reset();} diff --git a/vendor/cryptopp/vendor_cryptopp/poly1305.cpp b/vendor/cryptopp/vendor_cryptopp/poly1305.cpp index 9836dcdd..9f3f97aa 100644 --- a/vendor/cryptopp/vendor_cryptopp/poly1305.cpp +++ b/vendor/cryptopp/vendor_cryptopp/poly1305.cpp @@ -1,120 +1,59 @@ // poly1305.cpp - written and placed in the public domain by Jeffrey Walton and Jean-Pierre Munch -// Based on Andy Polyakov's Base-2^26 scalar multiplication implementation for OpenSSL. +// Based on Andy Polyakov's Base-2^26 scalar multiplication implementation. +// For more information, see https://www.openssl.org/~appro/cryptogams/. + +// Copyright (c) 2006-2017, CRYPTOGAMS by +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// * Redistributions of source code must retain copyright notices, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials +// provided with the distribution. +// * Neither the name of the CRYPTOGAMS nor the names of its copyright +// holder and contributors may be used to endorse or promote products +// derived from this software without specific prior written permission. #include "pch.h" #include "cryptlib.h" +#include "poly1305.h" #include "aes.h" #include "cpu.h" -#include "poly1305.h" -NAMESPACE_BEGIN(CryptoPP) +////////////////////////////// Common Poly1305 ////////////////////////////// -#define CONSTANT_TIME_CARRY(a,b) ((a ^ ((a ^ b) | ((a - b) ^ b))) >> (sizeof(a) * 8 - 1)) +ANONYMOUS_NAMESPACE_BEGIN -template -std::string Poly1305_Base::AlgorithmProvider() const +using namespace CryptoPP; + +inline word32 CONSTANT_TIME_CARRY(word32 a, word32 b) { - return m_cipher.AlgorithmProvider(); + return ((a ^ ((a ^ b) | ((a - b) ^ b))) >> (sizeof(a) * 8 - 1)); } -template -void Poly1305_Base::UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms) -{ - if (key && length) - { - // key is {k,r} pair, r is 16 bytes - length = SaturatingSubtract(length, (unsigned)BLOCKSIZE); - m_cipher.SetKey(key, length); - key += length; - - // Rbar is clamped and little endian - m_r[0] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 0) & 0x0fffffff; - m_r[1] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 4) & 0x0ffffffc; - m_r[2] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 8) & 0x0ffffffc; - m_r[3] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 12) & 0x0ffffffc; - - m_used = false; - } - - ConstByteArrayParameter t; - if (params.GetValue(Name::IV(), t) && t.begin() && t.size()) - { - // Nonce key is a class member to avoid the zeroizer on a temporary - CRYPTOPP_ASSERT(t.size() == m_nk.size()); - std::memcpy(m_nk.begin(), t.begin(), m_nk.size()); - m_cipher.ProcessBlock(m_nk.begin()); - - m_n[0] = GetWord(false, LITTLE_ENDIAN_ORDER, m_nk + 0); - m_n[1] = GetWord(false, LITTLE_ENDIAN_ORDER, m_nk + 4); - m_n[2] = GetWord(false, LITTLE_ENDIAN_ORDER, m_nk + 8); - m_n[3] = GetWord(false, LITTLE_ENDIAN_ORDER, m_nk + 12); - - m_used = false; - } - - Restart(); -} - -template -void Poly1305_Base::Update(const byte *input, size_t length) -{ - CRYPTOPP_ASSERT((input && length) || !length); - if (!length) return; - - size_t rem, num = m_idx; - if (num) - { - rem = BLOCKSIZE - num; - if (length >= rem) - { - // Process - memcpy_s(m_acc + num, BLOCKSIZE - num, input, rem); - HashBlocks(m_acc, BLOCKSIZE, 1); - input += rem; - length -= rem; - } - else - { - // Accumulate - memcpy_s(m_acc + num, BLOCKSIZE - num, input, length); - m_idx = num + length; - return; - } - } - - rem = length % BLOCKSIZE; - length -= rem; - - if (length >= BLOCKSIZE) { - HashBlocks(input, length, 1); - input += length; - } - - if (rem) - memcpy(m_acc, input, rem); - - m_idx = rem; -} - -template -void Poly1305_Base::HashBlocks(const byte *input, size_t length, word32 padbit) +void Poly1305_HashBlocks(word32 h[5], word32 r[4], const byte *input, size_t length, word32 padbit) { word32 r0, r1, r2, r3; word32 s1, s2, s3; word32 h0, h1, h2, h3, h4, c; word64 d0, d1, d2, d3; - r0 = m_r[0]; r1 = m_r[1]; - r2 = m_r[2]; r3 = m_r[3]; + r0 = r[0]; r1 = r[1]; + r2 = r[2]; r3 = r[3]; s1 = r1 + (r1 >> 2); s2 = r2 + (r2 >> 2); s3 = r3 + (r3 >> 2); - h0 = m_h[0]; h1 = m_h[1]; h2 = m_h[2]; - h3 = m_h[3]; h4 = m_h[4]; + h0 = h[0]; h1 = h[1]; h2 = h[2]; + h3 = h[3]; h4 = h[4]; - while (length >= BLOCKSIZE) + while (length >= 16) { // h += m[i] h0 = (word32)(d0 = (word64)h0 + GetWord(false, LITTLE_ENDIAN_ORDER, input + 0)); @@ -161,51 +100,26 @@ void Poly1305_Base::HashBlocks(const byte *input, size_t length, word32 padbi h3 += (c = CONSTANT_TIME_CARRY(h2,c)); h4 += CONSTANT_TIME_CARRY(h3,c); - input += BLOCKSIZE; - length -= BLOCKSIZE; + input += 16; + length -= 16; } - m_h[0] = h0; m_h[1] = h1; m_h[2] = h2; - m_h[3] = h3; m_h[4] = h4; + h[0] = h0; h[1] = h1; h[2] = h2; + h[3] = h3; h[4] = h4; } -template -void Poly1305_Base::TruncatedFinal(byte *mac, size_t size) -{ - CRYPTOPP_ASSERT(mac); // Pointer is valid - CRYPTOPP_ASSERT(!m_used); // Nonce is fresh - - ThrowIfInvalidTruncatedSize(size); - - size_t num = m_idx; - if (num) - { - m_acc[num++] = 1; /* pad bit */ - while (num < BLOCKSIZE) - m_acc[num++] = 0; - HashBlocks(m_acc, BLOCKSIZE, 0); - } - - HashFinal(mac, size); - - // Restart - m_used = true; - Restart(); -} - -template -void Poly1305_Base::HashFinal(byte *mac, size_t size) +void Poly1305_HashFinal(word32 h[5], word32 n[4], byte *mac, size_t size) { word32 h0, h1, h2, h3, h4; word32 g0, g1, g2, g3, g4; word32 mask; word64 t; - h0 = m_h[0]; - h1 = m_h[1]; - h2 = m_h[2]; - h3 = m_h[3]; - h4 = m_h[4]; + h0 = h[0]; + h1 = h[1]; + h2 = h[2]; + h3 = h[3]; + h4 = h[4]; // compare to modulus by computing h + -p g0 = (word32)(t = (word64)h0 + 5); @@ -223,12 +137,12 @@ void Poly1305_Base::HashFinal(byte *mac, size_t size) h2 = (h2 & mask) | g2; h3 = (h3 & mask) | g3; // mac = (h + nonce) % (2^128) - h0 = (word32)(t = (word64)h0 + m_n[0]); - h1 = (word32)(t = (word64)h1 + (t >> 32) + m_n[1]); - h2 = (word32)(t = (word64)h2 + (t >> 32) + m_n[2]); - h3 = (word32)(t = (word64)h3 + (t >> 32) + m_n[3]); + h0 = (word32)(t = (word64)h0 + n[0]); + h1 = (word32)(t = (word64)h1 + (t >> 32) + n[1]); + h2 = (word32)(t = (word64)h2 + (t >> 32) + n[2]); + h3 = (word32)(t = (word64)h3 + (t >> 32) + n[3]); - if (size >= BLOCKSIZE) + if (size >= 16) { PutWord(false, LITTLE_ENDIAN_ORDER, mac + 0, h0); PutWord(false, LITTLE_ENDIAN_ORDER, mac + 4, h1); @@ -237,21 +151,150 @@ void Poly1305_Base::HashFinal(byte *mac, size_t size) } else { - FixedSizeAlignedSecBlock m; + FixedSizeAlignedSecBlock m; PutWord(false, LITTLE_ENDIAN_ORDER, m + 0, h0); PutWord(false, LITTLE_ENDIAN_ORDER, m + 4, h1); PutWord(false, LITTLE_ENDIAN_ORDER, m + 8, h2); PutWord(false, LITTLE_ENDIAN_ORDER, m + 12, h3); - memcpy(mac, m, size); + std::memcpy(mac, m, size); } } +ANONYMOUS_NAMESPACE_END + +NAMESPACE_BEGIN(CryptoPP) + +////////////////////////////// Bernstein Poly1305 ////////////////////////////// + +// TODO: No longer needed. Remove at next major version bump +template +void Poly1305_Base::HashBlocks(const byte *input, size_t length, word32 padbit) { + CRYPTOPP_UNUSED(input); CRYPTOPP_UNUSED(length); CRYPTOPP_UNUSED(padbit); + CRYPTOPP_ASSERT(0); +} + +// TODO: No longer needed. Remove at next major version bump +template +void Poly1305_Base::HashFinal(byte *mac, size_t length) { + CRYPTOPP_UNUSED(mac); CRYPTOPP_UNUSED(length); + CRYPTOPP_ASSERT(0); +} + +template +std::string Poly1305_Base::AlgorithmProvider() const +{ + return m_cipher.AlgorithmProvider(); +} + +template +void Poly1305_Base::UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms) +{ + CRYPTOPP_ASSERT(key && length >= 32); + + // key is {k,r} pair. k is AES key, r is the additional key that gets clamped + length = SaturatingSubtract(length, (unsigned)BLOCKSIZE); + m_cipher.SetKey(key, length); + key += length; + + // Rbar is clamped and little endian + m_r[0] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 0) & 0x0fffffff; + m_r[1] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 4) & 0x0ffffffc; + m_r[2] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 8) & 0x0ffffffc; + m_r[3] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 12) & 0x0ffffffc; + + // Mark the nonce as dirty, meaning we need a new one + m_used = true; + + ConstByteArrayParameter t; + if (params.GetValue(Name::IV(), t) && t.begin() && t.size()) + { + CRYPTOPP_ASSERT(t.size() == m_nk.size()); + Resynchronize(t.begin(), (int)t.size()); + } + + Restart(); +} + +template +void Poly1305_Base::Update(const byte *input, size_t length) +{ + CRYPTOPP_ASSERT((input && length) || !length); + if (!length) return; + + size_t rem, num = m_idx; + if (num) + { + rem = BLOCKSIZE - num; + if (length >= rem) + { + // Process + memcpy_s(m_acc + num, BLOCKSIZE - num, input, rem); + Poly1305_HashBlocks(m_h, m_r, m_acc, BLOCKSIZE, 1); + input += rem; length -= rem; + } + else + { + // Accumulate + memcpy_s(m_acc + num, BLOCKSIZE - num, input, length); + m_idx = num + length; + return; + } + } + + rem = length % BLOCKSIZE; + length -= rem; + + if (length >= BLOCKSIZE) { + Poly1305_HashBlocks(m_h, m_r, input, length, 1); + input += length; + } + + if (rem) + memcpy(m_acc, input, rem); + + m_idx = rem; +} + +template +void Poly1305_Base::TruncatedFinal(byte *mac, size_t size) +{ + CRYPTOPP_ASSERT(mac); // Pointer is valid + CRYPTOPP_ASSERT(!m_used); // Nonce is fresh + + ThrowIfInvalidTruncatedSize(size); + + size_t num = m_idx; + if (num) + { + m_acc[num++] = 1; /* pad bit */ + while (num < BLOCKSIZE) + m_acc[num++] = 0; + Poly1305_HashBlocks(m_h, m_r, m_acc, BLOCKSIZE, 0); + } + + Poly1305_HashFinal(m_h, m_n, mac, size); + + // Restart + m_used = true; + Restart(); +} + template void Poly1305_Base::Resynchronize(const byte *nonce, int nonceLength) { CRYPTOPP_ASSERT(nonceLength == -1 || nonceLength == (int)BLOCKSIZE); nonceLength == -1 ? nonceLength = BLOCKSIZE : nonceLength; - this->UncheckedSetKey(NULLPTR, 0, MakeParameters(Name::IV(), ConstByteArrayParameter(nonce, nonceLength))); + + // Encrypt the nonce, stash in m_nk + m_cipher.ProcessBlock(nonce, m_nk.begin()); + + m_n[0] = GetWord(false, LITTLE_ENDIAN_ORDER, m_nk + 0); + m_n[1] = GetWord(false, LITTLE_ENDIAN_ORDER, m_nk + 4); + m_n[2] = GetWord(false, LITTLE_ENDIAN_ORDER, m_nk + 8); + m_n[3] = GetWord(false, LITTLE_ENDIAN_ORDER, m_nk + 12); + + // Mark nonce as unused, meaning it is fresh + m_used = false; } template @@ -264,7 +307,93 @@ template void Poly1305_Base::Restart() { m_h[0] = m_h[1] = m_h[2] = m_h[3] = m_h[4] = 0; - // m_r[0] = m_r[1] = m_r[2] = m_r[3] = 0; + m_idx = 0; +} + +////////////////////////////// IETF Poly1305 ////////////////////////////// + +void Poly1305TLS_Base::UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms) +{ + CRYPTOPP_UNUSED(params); CRYPTOPP_UNUSED(length); + CRYPTOPP_ASSERT(key && length >= 32); + + // key is {r,s} pair. r is the additional key that gets clamped, s is the nonce. + m_r[0] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 0) & 0x0fffffff; + m_r[1] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 4) & 0x0ffffffc; + m_r[2] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 8) & 0x0ffffffc; + m_r[3] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 12) & 0x0ffffffc; + + key += 16; + m_n[0] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 0); + m_n[1] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 4); + m_n[2] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 8); + m_n[3] = GetWord(false, LITTLE_ENDIAN_ORDER, key + 12); + + Restart(); +} + +void Poly1305TLS_Base::Update(const byte *input, size_t length) +{ + CRYPTOPP_ASSERT((input && length) || !length); + if (!length) return; + + size_t rem, num = m_idx; + if (num) + { + rem = BLOCKSIZE - num; + if (length >= rem) + { + // Process + memcpy_s(m_acc + num, BLOCKSIZE - num, input, rem); + Poly1305_HashBlocks(m_h, m_r, m_acc, BLOCKSIZE, 1); + input += rem; length -= rem; + } + else + { + // Accumulate + memcpy_s(m_acc + num, BLOCKSIZE - num, input, length); + m_idx = num + length; + return; + } + } + + rem = length % BLOCKSIZE; + length -= rem; + + if (length >= BLOCKSIZE) { + Poly1305_HashBlocks(m_h, m_r, input, length, 1); + input += length; + } + + if (rem) + memcpy(m_acc, input, rem); + + m_idx = rem; +} + +void Poly1305TLS_Base::TruncatedFinal(byte *mac, size_t size) +{ + CRYPTOPP_ASSERT(mac); // Pointer is valid + + ThrowIfInvalidTruncatedSize(size); + + size_t num = m_idx; + if (num) + { + m_acc[num++] = 1; /* pad bit */ + while (num < BLOCKSIZE) + m_acc[num++] = 0; + Poly1305_HashBlocks(m_h, m_r, m_acc, BLOCKSIZE, 0); + } + + Poly1305_HashFinal(m_h, m_n, mac, size); + + Restart(); +} + +void Poly1305TLS_Base::Restart() +{ + m_h[0] = m_h[1] = m_h[2] = m_h[3] = m_h[4] = 0; m_idx = 0; } diff --git a/vendor/cryptopp/vendor_cryptopp/poly1305.h b/vendor/cryptopp/vendor_cryptopp/poly1305.h index f7b23aad..b784d9a1 100644 --- a/vendor/cryptopp/vendor_cryptopp/poly1305.h +++ b/vendor/cryptopp/vendor_cryptopp/poly1305.h @@ -1,45 +1,26 @@ // poly1305.h - written and placed in the public domain by Jeffrey Walton and Jean-Pierre Munch -// Based on Andy Polyakov's Base-2^26 scalar multiplication implementation for OpenSSL. +// Based on Andy Polyakov's Base-2^26 scalar multiplication implementation. +// For more information, see https://www.openssl.org/~appro/cryptogams/. + +// The library added Bernstein's Poly1305 classses at Crypto++ 6.0. The IETF +// uses a slightly different implementation than Bernstein, and the IETF +// classes were added at Crypto++ 8.1. We wanted to maintain ABI compatibility +// at the 8.1 release so the original Poly1305 classes were not disturbed. +// Instead new classes were added for IETF Poly1305. The back-end implementation +// shares code as expected, however. /// \file poly1305.h /// \brief Classes for Poly1305 message authentication code /// \details Poly1305-AES is a state-of-the-art message-authentication code suitable for a wide /// variety of applications. Poly1305-AES computes a 16-byte authenticator of a variable-length /// message, using a 16-byte AES key, a 16-byte additional key, and a 16-byte nonce. -/// \details Each message must use a unique security context, which means either the key or nonce -/// must be changed after each message. It can be accomplished in one of two ways. First, you -/// can create a new Poly1305 object with a key and nonce each time its needed. -///
  SecByteBlock key(32), nonce(16);
-///   prng.GenerateBlock(key, key.size());
-///   prng.GenerateBlock(nonce, nonce.size());
-///
-///   Poly1305 poly1305(key, key.size(), nonce, nonce.size());
-///   poly1305.Update(...);
-///   poly1305.Final(...);
-/// -/// \details Second, you can create a Poly1305 object, reuse the key, and set a fresh nonce -/// for each message. The second and subsequent nonces can be generated directly using a -/// RandomNumberGenerator() derived class; or it can be generated using GetNextIV(). -///
  SecByteBlock key(32), nonce(16);
-///   prng.GenerateBlock(key, key.size());
-///   prng.GenerateBlock(nonce, nonce.size());
-///
-///   // First message
-///   Poly1305 poly1305(key, key.size());
-///   poly1305.Resynchronize(nonce);
-///   poly1305.Update(...);
-///   poly1305.Final(...);
-///
-///   // Second message
-///   poly1305.GetNextIV(prng, nonce);
-///   poly1305.Resynchronize(nonce);
-///   poly1305.Update(...);
-///   poly1305.Final(...);
-///   ...
+/// \details Crypto++ also supplies the IETF's version of Poly1305. It is a slightly different +/// algorithm than Bernstein's version. /// \sa Daniel J. Bernstein The Poly1305-AES -/// Message-Authentication Code (20050329) and Andy Polyakov , RFC +/// 8439, ChaCha20 and Poly1305 for IETF Protocols and Andy Polyakov Poly1305 Revised -/// \since Crypto++ 6.0 +/// \since Poly1305 since Crypto++ 6.0, Poly1305TLS since Crypto++ 8.1 #ifndef CRYPTOPP_POLY1305_H #define CRYPTOPP_POLY1305_H @@ -52,8 +33,11 @@ NAMESPACE_BEGIN(CryptoPP) +////////////////////////////// Bernstein Poly1305 ////////////////////////////// + /// \brief Poly1305 message authentication code base class -/// \tparam T class derived from BlockCipherDocumentation with 16-byte key and 16-byte blocksize +/// \tparam T BlockCipherDocumentation derived class with 16-byte key and 16-byte blocksize +/// \details Poly1305_Base is the base class of Bernstein's Poly1305 algorithm. /// \since Crypto++ 6.0 template class CRYPTOPP_NO_VTABLE Poly1305_Base : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 16>, public MessageAuthenticationCode @@ -67,6 +51,7 @@ public: CRYPTOPP_CONSTANT(DIGESTSIZE=T::BLOCKSIZE) CRYPTOPP_CONSTANT(BLOCKSIZE=T::BLOCKSIZE) + virtual ~Poly1305_Base() {} Poly1305_Base() : m_idx(0), m_used(true) {} void Resynchronize (const byte *iv, int ivLength=-1); @@ -83,6 +68,7 @@ public: std::string AlgorithmProvider() const; protected: + // TODO: No longer needed. Remove at next major version bump void HashBlocks(const byte *input, size_t length, word32 padbit); void HashFinal(byte *mac, size_t length); @@ -106,9 +92,13 @@ protected: /// \details Poly1305-AES is a state-of-the-art message-authentication code suitable for a wide /// variety of applications. Poly1305-AES computes a 16-byte authenticator of a variable-length /// message, using a 16-byte AES key, a 16-byte additional key, and a 16-byte nonce. -/// \details Each message must use a unique security context, which means either the key or nonce +/// \details The key is 32 bytes and a concatenation key = {k,s}, where +/// k is the AES key and r is additional key that gets clamped. +/// The key is clamped internally so there is no need to perform the operation +/// before setting the key. +/// \details Each message must have a unique security context, which means either the key or nonce /// must be changed after each message. It can be accomplished in one of two ways. First, you -/// can create a new Poly1305 object with a key and nonce each time its needed. +/// can create a new Poly1305 object each time its needed. ///
  SecByteBlock key(32), nonce(16);
 ///   prng.GenerateBlock(key, key.size());
 ///   prng.GenerateBlock(nonce, nonce.size());
@@ -118,8 +108,7 @@ protected:
 ///   poly1305.Final(...);
/// /// \details Second, you can create a Poly1305 object, reuse the key, and set a fresh nonce -/// for each message. The second and subsequent nonces can be generated directly using a -/// RandomNumberGenerator() derived class; or it can be generated using GetNextIV(). +/// for each message. The second and subsequent nonces can be generated using GetNextIV(). ///
  SecByteBlock key(32), nonce(16);
 ///   prng.GenerateBlock(key, key.size());
 ///   prng.GenerateBlock(nonce, nonce.size());
@@ -136,8 +125,9 @@ protected:
 ///   poly1305.Update(...);
 ///   poly1305.Final(...);
 ///   ...
-/// \warning The Poly1305 class does not enforce a fresh nonce for each message. The source code -/// will assert in debug builds to alert of nonce reuse. No action is taken in release builds. +/// \warning Each message must have a unique security context. The Poly1305 class does not +/// enforce a fresh key or nonce for each message. The source code will assert in debug +/// builds to alert of nonce reuse. No action is taken in release builds. /// \sa Daniel J. Bernstein The Poly1305-AES /// Message-Authentication Code (20050329) and Andy Polyakov Poly1305 Revised @@ -156,14 +146,96 @@ public: /// \param keyLength the size of the byte array, in bytes /// \param nonce a byte array used to key the cipher /// \param nonceLength the size of the byte array, in bytes - /// \details key is the 32-byte key composed of the 16-byte AES key and the 16 additional key - /// bytes used for r. - /// \details Each message requires a unique security context. You can use GetNextIV() and - /// Resynchronize() to set a new nonce under a key for a message. + /// \details The key is 32 bytes and a concatenation key = {k,s}, where + /// k is the AES key and r is additional key that gets clamped. + /// The key is clamped internally so there is no need to perform the operation + /// before setting the key. + /// \details Each message requires a unique security context. You can use GetNextIV() + /// and Resynchronize() to set a new nonce under a key for a message. Poly1305(const byte *key, size_t keyLength=DEFAULT_KEYLENGTH, const byte *nonce=NULLPTR, size_t nonceLength=0) {this->SetKey(key, keyLength, MakeParameters(Name::IV(), ConstByteArrayParameter(nonce, nonceLength)));} }; +////////////////////////////// IETF Poly1305 ////////////////////////////// + +/// \brief Poly1305-TLS message authentication code base class +/// \details Poly1305TLS_Base is the base class of the IETF's Poly1305 algorithm. +/// \since Crypto++ 8.1 +class Poly1305TLS_Base : public FixedKeyLength<32>, public MessageAuthenticationCode +{ +public: + static std::string StaticAlgorithmName() {return std::string("Poly1305TLS");} + CRYPTOPP_CONSTANT(DIGESTSIZE=16) + CRYPTOPP_CONSTANT(BLOCKSIZE=16) + + virtual ~Poly1305TLS_Base() {} + Poly1305TLS_Base() {} + + void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); + void Update(const byte *input, size_t length); + void TruncatedFinal(byte *mac, size_t size); + void Restart(); + + unsigned int BlockSize() const {return BLOCKSIZE;} + unsigned int DigestSize() const {return DIGESTSIZE;} + +protected: + // Accumulated hash, clamped r-key, and encrypted nonce + FixedSizeAlignedSecBlock m_h; + FixedSizeAlignedSecBlock m_r; + FixedSizeAlignedSecBlock m_n; + + // Accumulated message bytes and index + FixedSizeAlignedSecBlock m_acc; + size_t m_idx; +}; + +/// \brief Poly1305-TLS message authentication code +/// \details This is the IETF's variant of Bernstein's Poly1305 from RFC 8439. +/// IETF Poly1305 is called Poly1305TLS in the Crypto++ library. It is +/// _slightly_ different from the Bernstein implementation. Poly1305-TLS +/// can be used for cipher suites +/// TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, +/// TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, and +/// TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256. +/// \details The key is 32 bytes and a concatenation key = {r,s}, where +/// r is additional key that gets clamped and s is the nonce. +/// The key is clamped internally so there is no need to perform the operation +/// before setting the key. +/// \details Each message must have a unique security context, which means the key +/// must be changed after each message. It can be accomplished in one of two ways. +/// First, you can create a new Poly1305 object with a new key each time its needed. +///
  SecByteBlock key(32);
+///   prng.GenerateBlock(key, key.size());
+///
+///   Poly1305TLS poly1305(key, key.size());
+///   poly1305.Update(...);
+///   poly1305.Final(...);
+/// +/// \details Second, you can create a Poly1305 object, and use a new key for each +/// message. The keys can be generated directly using a RandomNumberGenerator() +/// derived class. +///
  SecByteBlock key(32);
+///   prng.GenerateBlock(key, key.size());
+///
+///   // First message
+///   Poly1305TLS poly1305(key, key.size());
+///   poly1305.Update(...);
+///   poly1305.Final(...);
+///
+///   // Second message
+///   prng.GenerateBlock(key, key.size());
+///   poly1305.SetKey(key, key.size());
+///   poly1305.Update(...);
+///   poly1305.Final(...);
+///   ...
+/// \warning Each message must have a unique security context. The Poly1305-TLS class +/// does not enforce a fresh key or nonce for each message. +/// \since Crypto++ 8.1 +/// \sa MessageAuthenticationCode(), RFC +/// 8439, ChaCha20 and Poly1305 for IETF Protocols +DOCUMENTED_TYPEDEF(MessageAuthenticationCodeFinal, Poly1305TLS) + NAMESPACE_END #endif // CRYPTOPP_POLY1305_H diff --git a/vendor/cryptopp/vendor_cryptopp/ppc_simd.h b/vendor/cryptopp/vendor_cryptopp/ppc_simd.h index 08733435..d074e33f 100644 --- a/vendor/cryptopp/vendor_cryptopp/ppc_simd.h +++ b/vendor/cryptopp/vendor_cryptopp/ppc_simd.h @@ -39,9 +39,10 @@ /// builtins. When using XLC with -qxlcompatmacros the compiler pretends to /// be GCC, Clang and XLC all at once but it can only consume it's variety /// of builtins. -/// \details At Crypto++ 8.0 the various VectorFunc{Name} were renamed to -/// VecFunc{Name}. For example, VectorAnd was changed to VecAnd. The name -/// change helped consolidate two slightly different implementations. +/// \details At Crypto++ 8.0 the various Vector{FuncName} were +/// renamed to Vec{FuncName}. For example, VectorAnd was +/// changed to VecAnd. The name change helped consolidate two +/// slightly different implementations. /// \since Crypto++ 6.0, LLVM Clang compiler support since Crypto++ 8.0 // Use __ALTIVEC__, _ARCH_PWR7 and _ARCH_PWR8 when detecting actual @@ -175,7 +176,8 @@ inline T VecReverse(const T data) #endif } -//////////////////////// Loads //////////////////////// +/// \name LOAD OPERATIONS +//@{ /// \brief Loads a vector from a byte array /// \param src the byte array @@ -503,7 +505,10 @@ inline uint32x4_p VecLoadBE(int off, const byte src[16]) #endif // _ARCH_PWR7 } -//////////////////////// Stores //////////////////////// +//@} + +/// \name STORE OPERATIONS +//@{ /// \brief Stores a vector to a byte array /// \tparam T vector type @@ -857,44 +862,10 @@ inline void VecStoreBE(const T data, int off, word32 dest[4]) return VecStoreBE((uint8x16_p)data, off, (byte*)dest); } -//////////////////////// Miscellaneous //////////////////////// +//@} -/// \brief Permutes a vector -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec the vector -/// \param mask vector mask -/// \returns vector -/// \details VecPermute() returns a new vector from vec based on -/// mask. mask is an uint8x16_p type vector. The return -/// vector is the same type as vec. -/// \par Wraps -/// vec_perm -/// \since Crypto++ 6.0 -template -inline T1 VecPermute(const T1 vec, const T2 mask) -{ - return (T1)vec_perm(vec, vec, (uint8x16_p)mask); -} - -/// \brief Permutes two vectors -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \param mask vector mask -/// \returns vector -/// \details VecPermute() returns a new vector from vec1 and vec2 -/// based on mask. mask is an uint8x16_p type vector. The return -/// vector is the same type as vec1. -/// \par Wraps -/// vec_perm -/// \since Crypto++ 6.0 -template -inline T1 VecPermute(const T1 vec1, const T1 vec2, const T2 mask) -{ - return (T1)vec_perm(vec1, (T1)vec2, (uint8x16_p)mask); -} +/// \name LOGICAL OPERATIONS +//@{ /// \brief AND two vectors /// \tparam T1 vector type @@ -947,6 +918,11 @@ inline T1 VecXor(const T1 vec1, const T2 vec2) return (T1)vec_xor(vec1, (T1)vec2); } +//@} + +/// \name ARITHMETIC OPERATIONS +//@{ + /// \brief Add two vectors /// \tparam T1 vector type /// \tparam T2 vector type @@ -1013,6 +989,48 @@ inline uint32x4_p VecAdd64(const uint32x4_p& vec1, const uint32x4_p& vec2) #endif } +//@} + +/// \name OTHER OPERATIONS +//@{ + +/// \brief Permutes a vector +/// \tparam T1 vector type +/// \tparam T2 vector type +/// \param vec the vector +/// \param mask vector mask +/// \returns vector +/// \details VecPermute() returns a new vector from vec based on +/// mask. mask is an uint8x16_p type vector. The return +/// vector is the same type as vec. +/// \par Wraps +/// vec_perm +/// \since Crypto++ 6.0 +template +inline T1 VecPermute(const T1 vec, const T2 mask) +{ + return (T1)vec_perm(vec, vec, (uint8x16_p)mask); +} + +/// \brief Permutes two vectors +/// \tparam T1 vector type +/// \tparam T2 vector type +/// \param vec1 the first vector +/// \param vec2 the second vector +/// \param mask vector mask +/// \returns vector +/// \details VecPermute() returns a new vector from vec1 and vec2 +/// based on mask. mask is an uint8x16_p type vector. The return +/// vector is the same type as vec1. +/// \par Wraps +/// vec_perm +/// \since Crypto++ 6.0 +template +inline T1 VecPermute(const T1 vec1, const T1 vec2, const T2 mask) +{ + return (T1)vec_perm(vec1, (T1)vec2, (uint8x16_p)mask); +} + /// \brief Shift a vector left /// \tparam C shift byte count /// \tparam T vector type @@ -1172,6 +1190,49 @@ inline uint32x4_p VecRotateLeft(const uint32x4_p vec) return vec_rl(vec, m); } +/// \brief Shift a packed vector left +/// \tparam C shift bit count +/// \param vec the vector +/// \returns vector +/// \details VecShiftLeft() rotates each element in a packed vector by bit count. +/// \par Wraps +/// vec_sl +/// \since Crypto++ 8.1 +template +inline uint32x4_p VecShiftLeft(const uint32x4_p vec) +{ + const uint32x4_p m = {C, C, C, C}; + return vec_sl(vec, m); +} + +/// \brief Merge two vectors +/// \tparam T vector type +/// \param vec1 the first vector +/// \param vec2 the second vector +/// \returns vector +/// \par Wraps +/// vec_mergeh +/// \since Crypto++ 8.1 +template +inline T VecMergeHigh(const T vec1, const T vec2) +{ + return vec_mergeh(vec1, vec2); +} + +/// \brief Merge two vectors +/// \tparam T vector type +/// \param vec1 the first vector +/// \param vec2 the second vector +/// \returns vector +/// \par Wraps +/// vec_mergel +/// \since Crypto++ 8.1 +template +inline T VecMergeLow(const T vec1, const T vec2) +{ + return vec_mergel(vec1, vec2); +} + #if defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) /// \brief Rotate a packed vector left @@ -1190,6 +1251,22 @@ inline uint64x2_p VecRotateLeft(const uint64x2_p vec) return vec_rl(vec, m); } +/// \brief Shift a packed vector left +/// \tparam C shift bit count +/// \param vec the vector +/// \returns vector +/// \details VecShiftLeft() rotates each element in a packed vector by bit count. +/// \details VecShiftLeft() with 64-bit elements is available on POWER8 and above. +/// \par Wraps +/// vec_sl +/// \since Crypto++ 8.1 +template +inline uint64x2_p VecShiftLeft(const uint64x2_p vec) +{ + const uint64x2_p m = {C, C}; + return vec_sl(vec, m); +} + #endif /// \brief Rotate a packed vector right @@ -1207,6 +1284,21 @@ inline uint32x4_p VecRotateRight(const uint32x4_p vec) return vec_rl(vec, m); } +/// \brief Shift a packed vector right +/// \tparam C shift bit count +/// \param vec the vector +/// \returns vector +/// \details VecShiftRight() rotates each element in a packed vector by bit count. +/// \par Wraps +/// vec_rl +/// \since Crypto++ 8.1 +template +inline uint32x4_p VecShiftRight(const uint32x4_p vec) +{ + const uint32x4_p m = {C, C, C, C}; + return vec_sr(vec, m); +} + #if defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) /// \brief Rotate a packed vector right @@ -1225,6 +1317,22 @@ inline uint64x2_p VecRotateRight(const uint64x2_p vec) return vec_rl(vec, m); } +/// \brief Shift a packed vector right +/// \tparam C shift bit count +/// \param vec the vector +/// \returns vector +/// \details VecShiftRight() rotates each element in a packed vector by bit count. +/// \details VecShiftRight() with 64-bit elements is available on POWER8 and above. +/// \par Wraps +/// vec_sr +/// \since Crypto++ 8.1 +template +inline uint64x2_p VecShiftRight(const uint64x2_p vec) +{ + const uint64x2_p m = {C, C}; + return vec_sr(vec, m); +} + #endif /// \brief Exchange high and low double words @@ -1254,10 +1362,12 @@ inline T VecSwapWords(const T vec) template inline T VecGetLow(const T val) { - //const T zero = {0}; - //const uint8x16_p mask = {16,16,16,16, 16,16,16,16, 8,9,10,11, 12,13,14,15 }; - //return (T)vec_perm(zero, val, mask); +#if (CRYPTOPP_BIG_ENDIAN) && (_ARCH_PWR8) + const T zero = {0}; + return (T)VecMergeLow((uint64x2_p)zero, (uint64x2_p)val); +#else return VecShiftRightOctet<8>(VecShiftLeftOctet<8>(val)); +#endif } /// \brief Extract a dword from a vector @@ -1274,10 +1384,12 @@ inline T VecGetLow(const T val) template inline T VecGetHigh(const T val) { - //const T zero = {0}; - //const uint8x16_p mask = {16,16,16,16, 16,16,16,16, 0,1,2,3, 4,5,6,7 }; - //return (T)vec_perm(zero, val, mask); +#if (CRYPTOPP_BIG_ENDIAN) && (_ARCH_PWR8) + const T zero = {0}; + return (T)VecMergeHigh((uint64x2_p)zero, (uint64x2_p)val); +#else return VecShiftRightOctet<8>(val); +#endif } /// \brief Compare two vectors @@ -1314,10 +1426,158 @@ inline bool VecNotEqual(const T1 vec1, const T2 vec2) return 0 == vec_all_eq((uint32x4_p)vec1, (uint32x4_p)vec2); } +//@} + //////////////////////// Power8 Crypto //////////////////////// #if defined(__CRYPTO__) || defined(CRYPTOPP_DOXYGEN_PROCESSING) +/// \name POLYNOMIAL MULTIPLICATION +//@{ + +/// \brief Polynomial multiplication +/// \param a the first term +/// \param b the second term +/// \returns vector product +/// \details VecPolyMultiply() performs polynomial multiplication. POWER8 +/// polynomial multiplication multiplies the high and low terms, and then +/// XOR's the high and low products. That is, the result is ah*bh XOR +/// al*bl. It is different behavior than Intel polynomial +/// multiplication. To obtain a single product without the XOR, then set +/// one of the high or low terms to 0. For example, setting ah=0 +/// results in 0*bh XOR al*bl = al*bl. +/// \par Wraps +/// __vpmsumw, __builtin_altivec_crypto_vpmsumw and __builtin_crypto_vpmsumw. +/// \since Crypto++ 8.1 +inline uint32x4_p VecPolyMultiply(const uint32x4_p& a, const uint32x4_p& b) +{ +#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) + return __vpmsumw (a, b); +#elif defined(__clang__) + return __builtin_altivec_crypto_vpmsumw (a, b); +#else + return __builtin_crypto_vpmsumw (a, b); +#endif +} + +/// \brief Polynomial multiplication +/// \param a the first term +/// \param b the second term +/// \returns vector product +/// \details VecPolyMultiply() performs polynomial multiplication. POWER8 +/// polynomial multiplication multiplies the high and low terms, and then +/// XOR's the high and low products. That is, the result is ah*bh XOR +/// al*bl. It is different behavior than Intel polynomial +/// multiplication. To obtain a single product without the XOR, then set +/// one of the high or low terms to 0. For example, setting ah=0 +/// results in 0*bh XOR al*bl = al*bl. +/// \par Wraps +/// __vpmsumd, __builtin_altivec_crypto_vpmsumd and __builtin_crypto_vpmsumd. +/// \since Crypto++ 8.1 +inline uint64x2_p VecPolyMultiply(const uint64x2_p& a, const uint64x2_p& b) +{ +#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) + return __vpmsumd (a, b); +#elif defined(__clang__) + return __builtin_altivec_crypto_vpmsumd (a, b); +#else + return __builtin_crypto_vpmsumd (a, b); +#endif +} + +/// \brief Polynomial multiplication +/// \param a the first term +/// \param b the second term +/// \returns vector product +/// \details VecPolyMultiply00LE() performs polynomial multiplication and presents +/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x00). +/// The 0x00 indicates the low 64-bits of a and b +/// are multiplied. +/// \note An Intel XMM register is composed of 128-bits. The leftmost bit +/// is MSB and numbered 127, while the the rightmost bit is LSB and numbered 0. +/// \par Wraps +/// __vpmsumd, __builtin_altivec_crypto_vpmsumd and __builtin_crypto_vpmsumd. +/// \since Crypto++ 8.0 +inline uint64x2_p VecPolyMultiply00LE(const uint64x2_p& a, const uint64x2_p& b) +{ +#if (CRYPTOPP_BIG_ENDIAN) + return VecSwapWords(VecPolyMultiply(VecGetHigh(a), VecGetHigh(b))); +#else + return VecPolyMultiply(VecGetHigh(a), VecGetHigh(b)); +#endif +} + +/// \brief Polynomial multiplication +/// \param a the first term +/// \param b the second term +/// \returns vector product +/// \details VecPolyMultiply01LE performs() polynomial multiplication and presents +/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x01). +/// The 0x01 indicates the low 64-bits of a and high +/// 64-bits of b are multiplied. +/// \note An Intel XMM register is composed of 128-bits. The leftmost bit +/// is MSB and numbered 127, while the the rightmost bit is LSB and numbered 0. +/// \par Wraps +/// __vpmsumd, __builtin_altivec_crypto_vpmsumd and __builtin_crypto_vpmsumd. +/// \since Crypto++ 8.0 +inline uint64x2_p VecPolyMultiply01LE(const uint64x2_p& a, const uint64x2_p& b) +{ +#if (CRYPTOPP_BIG_ENDIAN) + return VecSwapWords(VecPolyMultiply(a, VecGetHigh(b))); +#else + return VecPolyMultiply(a, VecGetHigh(b)); +#endif +} + +/// \brief Polynomial multiplication +/// \param a the first term +/// \param b the second term +/// \returns vector product +/// \details VecPolyMultiply10LE() performs polynomial multiplication and presents +/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x10). +/// The 0x10 indicates the high 64-bits of a and low +/// 64-bits of b are multiplied. +/// \note An Intel XMM register is composed of 128-bits. The leftmost bit +/// is MSB and numbered 127, while the the rightmost bit is LSB and numbered 0. +/// \par Wraps +/// __vpmsumd, __builtin_altivec_crypto_vpmsumd and __builtin_crypto_vpmsumd. +/// \since Crypto++ 8.0 +inline uint64x2_p VecPolyMultiply10LE(const uint64x2_p& a, const uint64x2_p& b) +{ +#if (CRYPTOPP_BIG_ENDIAN) + return VecSwapWords(VecPolyMultiply(VecGetHigh(a), b)); +#else + return VecPolyMultiply(VecGetHigh(a), b); +#endif +} + +/// \brief Polynomial multiplication +/// \param a the first term +/// \param b the second term +/// \returns vector product +/// \details VecPolyMultiply11LE() performs polynomial multiplication and presents +/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x11). +/// The 0x11 indicates the high 64-bits of a and b +/// are multiplied. +/// \note An Intel XMM register is composed of 128-bits. The leftmost bit +/// is MSB and numbered 127, while the the rightmost bit is LSB and numbered 0. +/// \par Wraps +/// __vpmsumd, __builtin_altivec_crypto_vpmsumd and __builtin_crypto_vpmsumd. +/// \since Crypto++ 8.0 +inline uint64x2_p VecPolyMultiply11LE(const uint64x2_p& a, const uint64x2_p& b) +{ +#if (CRYPTOPP_BIG_ENDIAN) + return VecSwapWords(VecPolyMultiply(VecGetLow(a), b)); +#else + return VecPolyMultiply(VecGetLow(a), b); +#endif +} + +//@} + +/// \name AES ENCRYPTION +//@{ + /// \brief One round of AES encryption /// \tparam T1 vector type /// \tparam T2 vector type @@ -1418,6 +1678,11 @@ inline T1 VecDecryptLast(const T1 state, const T2 key) #endif } +//@} + +/// \name SHA DIGESTS +//@{ + /// \brief SHA256 Sigma functions /// \tparam func function /// \tparam fmask function mask @@ -1468,6 +1733,8 @@ inline T VecSHA512(const T vec) #endif } +//@} + #endif // __CRYPTO__ #endif // _ALTIVEC_ diff --git a/vendor/cryptopp/vendor_cryptopp/pubkey.h b/vendor/cryptopp/vendor_cryptopp/pubkey.h index b09bc0e4..9af794be 100644 --- a/vendor/cryptopp/vendor_cryptopp/pubkey.h +++ b/vendor/cryptopp/vendor_cryptopp/pubkey.h @@ -379,7 +379,7 @@ public: { static HashIdentifier CRYPTOPP_API Lookup() { - return HashIdentifier((const byte *)NULLPTR, 0); + return HashIdentifier(static_cast(NULLPTR), 0); } }; }; diff --git a/vendor/cryptopp/vendor_cryptopp/rdrand.cpp b/vendor/cryptopp/vendor_cryptopp/rdrand.cpp index 15afcd93..8175d7ac 100644 --- a/vendor/cryptopp/vendor_cryptopp/rdrand.cpp +++ b/vendor/cryptopp/vendor_cryptopp/rdrand.cpp @@ -24,7 +24,7 @@ ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// -#if defined(CRYPTOPP_CPUID_AVAILABLE) +#if defined(CRYPTOPP_CPUID_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) # if defined(CRYPTOPP_MSC_VERSION) # define MASM_RDRAND_ASM_AVAILABLE 1 @@ -54,7 +54,7 @@ extern "C" void CRYPTOPP_FASTCALL MASM_RDSEED_GenerateBlock(byte*, size_t); NAMESPACE_BEGIN(CryptoPP) -#if defined(CRYPTOPP_CPUID_AVAILABLE) +#if defined(CRYPTOPP_CPUID_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) // Fills 4 bytes inline void RDRAND32(void* output) diff --git a/vendor/cryptopp/vendor_cryptopp/regtest1.cpp b/vendor/cryptopp/vendor_cryptopp/regtest1.cpp index 848ad885..caefc2c9 100644 --- a/vendor/cryptopp/vendor_cryptopp/regtest1.cpp +++ b/vendor/cryptopp/vendor_cryptopp/regtest1.cpp @@ -15,6 +15,7 @@ #include "md5.h" #include "keccak.h" #include "sha3.h" +#include "shake.h" #include "blake2.h" #include "sha.h" #include "sha3.h" @@ -109,6 +110,8 @@ void RegisterFactories1() RegisterDefaultFactoryFor(); RegisterDefaultFactoryFor(); RegisterDefaultFactoryFor(); + RegisterDefaultFactoryFor(); + RegisterDefaultFactoryFor(); RegisterDefaultFactoryFor(); RegisterDefaultFactoryFor(); RegisterDefaultFactoryFor(); diff --git a/vendor/cryptopp/vendor_cryptopp/regtest2.cpp b/vendor/cryptopp/vendor_cryptopp/regtest2.cpp index e68db6cc..e14036fa 100644 --- a/vendor/cryptopp/vendor_cryptopp/regtest2.cpp +++ b/vendor/cryptopp/vendor_cryptopp/regtest2.cpp @@ -23,6 +23,7 @@ #include "sha3.h" #include "blake2.h" #include "ripemd.h" +#include "chacha.h" #include "poly1305.h" #include "siphash.h" #include "panama.h" @@ -72,6 +73,7 @@ void RegisterFactories2() RegisterDefaultFactoryFor >(); RegisterDefaultFactoryFor >(); RegisterDefaultFactoryFor >(); + RegisterDefaultFactoryFor(); RegisterDefaultFactoryFor >(); RegisterDefaultFactoryFor(); RegisterDefaultFactoryFor(); @@ -93,6 +95,8 @@ void RegisterFactories3() RegisterSymmetricCipherDefaultFactories(); RegisterSymmetricCipherDefaultFactories(); RegisterSymmetricCipherDefaultFactories(); + RegisterSymmetricCipherDefaultFactories(); + RegisterSymmetricCipherDefaultFactories(); RegisterSymmetricCipherDefaultFactories(); RegisterSymmetricCipherDefaultFactories(); RegisterSymmetricCipherDefaultFactories(); diff --git a/vendor/cryptopp/vendor_cryptopp/regtest3.cpp b/vendor/cryptopp/vendor_cryptopp/regtest3.cpp index b1267b65..f954c09a 100644 --- a/vendor/cryptopp/vendor_cryptopp/regtest3.cpp +++ b/vendor/cryptopp/vendor_cryptopp/regtest3.cpp @@ -39,6 +39,7 @@ #include "rc5.h" #include "skipjack.h" #include "blowfish.h" +#include "chachapoly.h" // Aggressive stack checking with VS2005 SP1 and above. #if (_MSC_FULL_VER >= 140050727) @@ -70,6 +71,9 @@ void RegisterFactories4() RegisterAuthenticatedSymmetricCipherDefaultFactories >(); RegisterAuthenticatedSymmetricCipherDefaultFactories >(); RegisterAuthenticatedSymmetricCipherDefaultFactories >(); + RegisterAuthenticatedSymmetricCipherDefaultFactories(); + RegisterAuthenticatedSymmetricCipherDefaultFactories(); + RegisterSymmetricCipherDefaultFactories >(); // For test vectors RegisterSymmetricCipherDefaultFactories >(); RegisterSymmetricCipherDefaultFactories >(); diff --git a/vendor/cryptopp/vendor_cryptopp/rijndael_simd.cpp b/vendor/cryptopp/vendor_cryptopp/rijndael_simd.cpp index 36ad06ac..0b0a3001 100644 --- a/vendor/cryptopp/vendor_cryptopp/rijndael_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/rijndael_simd.cpp @@ -23,15 +23,20 @@ #include "pch.h" #include "config.h" #include "misc.h" -#include "adv_simd.h" #if (CRYPTOPP_AESNI_AVAILABLE) +# include "adv_simd.h" +# include # include # include #endif +// C1189: error: This header is specific to ARM targets #if (CRYPTOPP_ARM_NEON_AVAILABLE) -# include +# include "adv_simd.h" +# ifndef _M_ARM64 +# include +# endif #endif #if (CRYPTOPP_ARM_ACLE_AVAILABLE) @@ -40,6 +45,7 @@ #endif #if defined(CRYPTOPP_POWER8_AES_AVAILABLE) +# include "adv_simd.h" # include "ppc_simd.h" #endif @@ -191,7 +197,7 @@ static inline void ARMV8_Enc_6_Blocks(uint64x2_t &data0, uint64x2_t &data1, uint8x16_t key; for (unsigned int i=0; i(x[14]+x[13]); } -#ifdef _MSC_VER +// OpenMP 4.0 released July 2013. +#if _OPENMP >= 201307 + #pragma omp simd for (size_t i = 0; i < 16; ++i) data[i] += x[i]; #else - #pragma omp simd for (size_t i = 0; i < 16; ++i) data[i] += x[i]; #endif @@ -111,10 +112,13 @@ std::string Salsa20_Policy::AlgorithmProvider() const void Salsa20_Policy::CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length) { - m_rounds = params.GetIntValueWithDefault(Name::Rounds(), 20); + // Use previous rounds as the default value + int rounds = params.GetIntValueWithDefault(Name::Rounds(), m_rounds); + if (rounds != 20 && rounds != 12 && rounds != 8) + throw InvalidRounds(Salsa20::StaticAlgorithmName(), rounds); - if (!(m_rounds == 8 || m_rounds == 12 || m_rounds == 20)) - throw InvalidRounds(Salsa20::StaticAlgorithmName(), m_rounds); + // Latch a good value + m_rounds = rounds; // m_state is reordered for SSE2 GetBlock get1(key); @@ -691,8 +695,7 @@ Salsa20_OperateKeystream ENDP void XSalsa20_Policy::CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length) { - m_rounds = params.GetIntValueWithDefault(Name::Rounds(), 20); - + m_rounds = params.GetIntValueWithDefault(Name::Rounds(), m_rounds); if (!(m_rounds == 8 || m_rounds == 12 || m_rounds == 20)) throw InvalidRounds(XSalsa20::StaticAlgorithmName(), m_rounds); diff --git a/vendor/cryptopp/vendor_cryptopp/salsa.h b/vendor/cryptopp/vendor_cryptopp/salsa.h index a42d684b..31bb9a67 100644 --- a/vendor/cryptopp/vendor_cryptopp/salsa.h +++ b/vendor/cryptopp/vendor_cryptopp/salsa.h @@ -36,6 +36,7 @@ struct Salsa20_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInter class CRYPTOPP_NO_VTABLE Salsa20_Policy : public AdditiveCipherConcretePolicy { protected: + Salsa20_Policy() : m_rounds(ROUNDS) {} void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length); @@ -49,6 +50,7 @@ protected: std::string AlgorithmProvider() const; + CRYPTOPP_CONSTANT(ROUNDS = 20) // Default rounds FixedSizeAlignedSecBlock m_state; int m_rounds; }; diff --git a/vendor/cryptopp/vendor_cryptopp/scrypt.cpp b/vendor/cryptopp/vendor_cryptopp/scrypt.cpp index 69f486d1..97493cd5 100644 --- a/vendor/cryptopp/vendor_cryptopp/scrypt.cpp +++ b/vendor/cryptopp/vendor_cryptopp/scrypt.cpp @@ -20,6 +20,15 @@ # include #endif +// https://github.com/weidai11/cryptopp/issues/777 +#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE +# if defined(__clang__) +# pragma GCC diagnostic ignored "-Wtautological-compare" +# elif defined(__GNUC__) +# pragma GCC diagnostic ignored "-Wtype-limits" +# endif +#endif + ANONYMOUS_NAMESPACE_BEGIN using CryptoPP::byte; @@ -32,40 +41,48 @@ using CryptoPP::rotlConstant; using CryptoPP::LITTLE_ENDIAN_ORDER; using CryptoPP::AlignedSecByteBlock; -static inline void LE32ENC(byte* out, word32 in) +inline void LE32ENC(byte* out, word32 in) { PutWord(false, LITTLE_ENDIAN_ORDER, out, in); } -static inline word32 LE32DEC(const byte* in) +inline word32 LE32DEC(const byte* in) { return GetWord(false, LITTLE_ENDIAN_ORDER, in); } -static inline word64 LE64DEC(const byte* in) +inline word64 LE64DEC(const byte* in) { return GetWord(false, LITTLE_ENDIAN_ORDER, in); } -static inline void BlockCopy(byte* dest, byte* src, size_t len) +inline void BlockCopy(byte* dest, byte* src, size_t len) { +// OpenMP 4.0 released July 2013. +#if _OPENMP >= 201307 + #pragma omp simd for (size_t i = 0; i < len; ++i) dest[i] = src[i]; +#else + for (size_t i = 0; i < len; ++i) + dest[i] = src[i]; +#endif } -static inline void BlockXOR(byte* dest, byte* src, size_t len) +inline void BlockXOR(byte* dest, byte* src, size_t len) { -#ifdef _MSC_VER +// OpenMP 4.0 released July 2013. +#if _OPENMP >= 201307 + #pragma omp simd for (size_t i = 0; i < len; ++i) dest[i] ^= src[i]; #else - #pragma omp simd for (size_t i = 0; i < len; ++i) dest[i] ^= src[i]; #endif } -static inline void PBKDF2_SHA256(byte* buf, size_t dkLen, +inline void PBKDF2_SHA256(byte* buf, size_t dkLen, const byte* passwd, size_t passwdlen, const byte* salt, size_t saltlen, byte count) { @@ -76,7 +93,7 @@ static inline void PBKDF2_SHA256(byte* buf, size_t dkLen, pbkdf.DeriveKey(buf, dkLen, 0, passwd, passwdlen, salt, saltlen, count, 0.0f); } -static inline void Salsa20_8(byte B[64]) +inline void Salsa20_8(byte B[64]) { word32 B32[16]; @@ -89,7 +106,7 @@ static inline void Salsa20_8(byte B[64]) LE32ENC(&B[4 * i], B32[i]); } -static inline void BlockMix(byte* B, byte* Y, size_t r) +inline void BlockMix(byte* B, byte* Y, size_t r) { byte X[64]; @@ -115,13 +132,13 @@ static inline void BlockMix(byte* B, byte* Y, size_t r) BlockCopy(&B[(i + r) * 64], &Y[(i * 2 + 1) * 64], 64); } -static inline word64 Integerify(byte* B, size_t r) +inline word64 Integerify(byte* B, size_t r) { byte* X = &B[(2 * r - 1) * 64]; return LE64DEC(X); } -static inline void Smix(byte* B, size_t r, word64 N, byte* V, byte* XY) +inline void Smix(byte* B, size_t r, word64 N, byte* V, byte* XY) { byte* X = XY; byte* Y = XY+128*r; diff --git a/vendor/cryptopp/vendor_cryptopp/secblock.h b/vendor/cryptopp/vendor_cryptopp/secblock.h index 26ebd0ae..af1d96f0 100644 --- a/vendor/cryptopp/vendor_cryptopp/secblock.h +++ b/vendor/cryptopp/vendor_cryptopp/secblock.h @@ -71,6 +71,12 @@ public: /// to optimize it well in either form. CRYPTOPP_CONSTEXPR size_type max_size() const {return ELEMS_MAX;} +#if defined(__SUNPRO_CC) + // https://github.com/weidai11/cryptopp/issues/770 + // and https://stackoverflow.com/q/53999461/608639 + CRYPTOPP_CONSTEXPR size_type max_size(size_type n) const {return (~(size_type)0)/n;} +#endif + #if defined(CRYPTOPP_CXX11_VARIADIC_TEMPLATES) || defined(CRYPTOPP_DOXYGEN_PROCESSING) /// \brief Constructs a new V using variadic arguments @@ -248,7 +254,7 @@ public: return StandardReallocate(*this, oldPtr, oldSize, newSize, preserve); } - /// \brief Template class memeber Rebind + /// \brief Template class member Rebind /// \tparam V bound class or type /// \details Rebind allows a container class to allocate a different type of object /// to store elements. For example, a std::list will allocate std::list_node to @@ -415,7 +421,7 @@ public: CRYPTOPP_ASSERT(size <= S); CRYPTOPP_ASSERT(m_allocated); m_allocated = false; - SecureWipeArray((pointer)ptr, size); + SecureWipeArray(reinterpret_cast(ptr), size); } else m_fallbackAllocator.deallocate(ptr, size); @@ -497,7 +503,7 @@ private: // The library is OK but users may hit it. So we need to guard // for a large T, and that is what PAD achieves. T* GetAlignedArray() { - T* p_array = (T*)(void*)(((byte*)m_array) + (0-(size_t)m_array)%16); + T* p_array = reinterpret_cast(static_cast((reinterpret_cast(m_array)) + (0-reinterpret_cast(m_array))%16)); // Verify the 16-byte alignment CRYPTOPP_ASSERT(IsAlignedOn(p_array, 16)); // Verify allocated array with pad is large enough. diff --git a/vendor/cryptopp/vendor_cryptopp/seckey.h b/vendor/cryptopp/vendor_cryptopp/seckey.h index 90fd6dce..f80767ac 100644 --- a/vendor/cryptopp/vendor_cryptopp/seckey.h +++ b/vendor/cryptopp/vendor_cryptopp/seckey.h @@ -265,7 +265,7 @@ public: /// \brief The maximum key length used by the algorithm /// \returns maximum key length used by the algorithm, in bytes size_t MaxKeyLength() const - {return (size_t)INFO::MAX_KEYLENGTH;} + {return static_cast(INFO::MAX_KEYLENGTH);} /// \brief The default key length used by the algorithm /// \returns default key length used by the algorithm, in bytes @@ -286,7 +286,7 @@ public: /// \details The default value is NOT_RESYNCHRONIZABLE. See IV_Requirement /// in cryptlib.h for allowed values. SimpleKeyingInterface::IV_Requirement IVRequirement() const - {return (SimpleKeyingInterface::IV_Requirement)INFO::IV_REQUIREMENT;} + {return static_cast(INFO::IV_REQUIREMENT);} /// \brief The initialization vector length for the algorithm /// \details IVSize is provided in bytes, not bits. The default implementation uses diff --git a/vendor/cryptopp/vendor_cryptopp/setenv-ios.sh b/vendor/cryptopp/vendor_cryptopp/setenv-ios.sh index d9f86940..efd6a8b5 100755 --- a/vendor/cryptopp/vendor_cryptopp/setenv-ios.sh +++ b/vendor/cryptopp/vendor_cryptopp/setenv-ios.sh @@ -63,26 +63,31 @@ do # ARMv5 if [ "$CL" == "armv5" ]; then BACK_ARCH=armv5 + APPLE_SDK=iPhoneOS fi # ARMv6 if [ "$CL" == "armv6" ]; then BACK_ARCH=armv6 + APPLE_SDK=iPhoneOS fi # ARMv7 if [ "$CL" == "armv7" ]; then BACK_ARCH=armv7 + APPLE_SDK=iPhoneOS fi # ARMv7s if [ "$CL" == "armv7s" ]; then BACK_ARCH=armv7s + APPLE_SDK=iPhoneOS fi # ARM64 if [[ ("$CL" == "arm64" || "$CL" == "armv8" || "$CL" == "aarch64") ]]; then BACK_ARCH=arm64 + APPLE_SDK=iPhoneOS fi # iPhone @@ -201,7 +206,7 @@ fi # Simulator fixup. LD fails to link dylib. if [ "$APPLE_SDK" == "iPhoneSimulator" ] && [ "$IOS_ARCH" == "i386" ]; then - IOS_FLAGS="$IOS_FLAGS -miphoneos-version-min=5 -DCRYPTOPP_DISABLE_ASM" + IOS_FLAGS="$IOS_FLAGS -miphoneos-version-min=5" fi # ARMv7s fixup. Xcode 4/iOS 6 @@ -219,12 +224,6 @@ if [ "$APPLE_SDK" == "AppleTVOS" ]; then IOS_FLAGS="" fi -# ARM64 Simulator fixup. Under Xcode 6/iOS 8, it uses x86_64 and not i386 -# -ios_simulator_version_min does not work though it is in LLVM sources. -if [ "$IOS_ARCH" == "x86_64" ]; then - IOS_FLAGS="$IOS_FLAGS -DCRYPTOPP_DISABLE_ASM" -fi - # Disable ASM for simulator. We are failing on Travis due to missing _start. # We may need to link against crt1.o for simulator builds. Also see # https://stackoverflow.com/q/24841283/608639 diff --git a/vendor/cryptopp/vendor_cryptopp/sha.cpp b/vendor/cryptopp/vendor_cryptopp/sha.cpp index aa54af20..87cf749a 100644 --- a/vendor/cryptopp/vendor_cryptopp/sha.cpp +++ b/vendor/cryptopp/vendor_cryptopp/sha.cpp @@ -956,15 +956,16 @@ void SHA512::InitState(HashWordType *state) #if CRYPTOPP_SSE2_ASM_AVAILABLE && (CRYPTOPP_BOOL_X86) -// Anonymous namespace removed due to a new compile error. +ANONYMOUS_NAMESPACE_BEGIN + +// No inlining due to https://github.com/weidai11/cryptopp/issues/684 // g++ -DNDEBUG -g2 -O3 -pthread -pipe -c sha.cpp // sha.cpp: Assembler messages: // sha.cpp:1155: Error: symbol `SHA512_Round' is already defined // sha.cpp:1155: Error: symbol `SHA512_Round' is already defined -// ANONYMOUS_NAMESPACE_BEGIN - -CRYPTOPP_NAKED void CRYPTOPP_FASTCALL SHA512_HashBlock_SSE2(word64 *state, const word64 *data) +CRYPTOPP_NOINLINE CRYPTOPP_NAKED +void CRYPTOPP_FASTCALL SHA512_HashBlock_SSE2(word64 *state, const word64 *data) { #ifdef __GNUC__ __asm__ __volatile__ @@ -1150,7 +1151,7 @@ CRYPTOPP_NAKED void CRYPTOPP_FASTCALL SHA512_HashBlock_SSE2(word64 *state, const #endif } -// ANONYMOUS_NAMESPACE_END +ANONYMOUS_NAMESPACE_END #endif // CRYPTOPP_SSE2_ASM_AVAILABLE diff --git a/vendor/cryptopp/vendor_cryptopp/sha3.cpp b/vendor/cryptopp/vendor_cryptopp/sha3.cpp index 0a4ba893..35de1b13 100644 --- a/vendor/cryptopp/vendor_cryptopp/sha3.cpp +++ b/vendor/cryptopp/vendor_cryptopp/sha3.cpp @@ -19,7 +19,13 @@ http://creativecommons.org/publicdomain/zero/1.0/ #include "pch.h" #include "sha3.h" -#include "keccakc.h" + +NAMESPACE_BEGIN(CryptoPP) + +// The Keccak core function +extern void KeccakF1600(word64 *state); + +NAMESPACE_END NAMESPACE_BEGIN(CryptoPP) @@ -58,7 +64,7 @@ void SHA3::TruncatedFinal(byte *hash, size_t size) m_state.BytePtr()[m_counter] ^= 0x06; m_state.BytePtr()[r()-1] ^= 0x80; KeccakF1600(m_state); - memcpy(hash, m_state, size); + std::memcpy(hash, m_state, size); Restart(); } diff --git a/vendor/cryptopp/vendor_cryptopp/sha3.h b/vendor/cryptopp/vendor_cryptopp/sha3.h index fe1fe21a..ea412166 100644 --- a/vendor/cryptopp/vendor_cryptopp/sha3.h +++ b/vendor/cryptopp/vendor_cryptopp/sha3.h @@ -13,6 +13,7 @@ #include "cryptlib.h" #include "secblock.h" +#include "misc.h" NAMESPACE_BEGIN(CryptoPP) @@ -26,28 +27,30 @@ NAMESPACE_BEGIN(CryptoPP) /// \since Crypto++ 5.6.2 class SHA3 : public HashTransformation { -public: - /// \brief Construct a SHA3 - /// \param digestSize the digest size, in bytes - /// \details SHA3 is the base class for SHA3_224, SHA3_256, SHA3_384 and SHA3_512. - /// Library users should instantiate a derived class, and only use SHA3 - /// as a base class reference or pointer. - SHA3(unsigned int digestSize) : m_digestSize(digestSize) {Restart();} - unsigned int DigestSize() const {return m_digestSize;} - std::string AlgorithmName() const {return "SHA3-" + IntToString(m_digestSize*8);} - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "SHA3"; } - unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} - - void Update(const byte *input, size_t length); - void Restart(); - void TruncatedFinal(byte *hash, size_t size); - - // unsigned int BlockSize() const { return r(); } // that's the idea behind it protected: - inline unsigned int r() const {return 200 - 2 * m_digestSize;} + /// \brief Construct a SHA3 + /// \param digestSize the digest size, in bytes + /// \details SHA3 is the base class for SHA3_224, SHA3_256, SHA3_384 and SHA3_512. + /// Library users should instantiate a derived class, and only use SHA3 + /// as a base class reference or pointer. + /// \details This constructor was moved to protected at Crypto++ 8.1 + /// because users were attempting to create Keccak objects with it. + /// \since Crypto++ 5.6.2 + SHA3(unsigned int digestSize) : m_digestSize(digestSize) {Restart();} - FixedSizeSecBlock m_state; - unsigned int m_digestSize, m_counter; +public: + unsigned int DigestSize() const {return m_digestSize;} + unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} + + void Update(const byte *input, size_t length); + void Restart(); + void TruncatedFinal(byte *hash, size_t size); + +protected: + inline unsigned int r() const {return BlockSize();} + + FixedSizeSecBlock m_state; + unsigned int m_digestSize, m_counter; }; /// \brief SHA3 message digest template @@ -57,47 +60,48 @@ template class SHA3_Final : public SHA3 { public: - CRYPTOPP_CONSTANT(DIGESTSIZE = T_DigestSize) - CRYPTOPP_CONSTANT(BLOCKSIZE = 200 - 2 * DIGESTSIZE) + CRYPTOPP_CONSTANT(DIGESTSIZE = T_DigestSize) + CRYPTOPP_CONSTANT(BLOCKSIZE = 200 - 2 * DIGESTSIZE) + static std::string StaticAlgorithmName() + { return "SHA3-" + IntToString(DIGESTSIZE * 8); } + + /// \brief Construct a SHA3-X message digest + SHA3_Final() : SHA3(DIGESTSIZE) {} + + /// \brief Provides the block size of the compression function + /// \return block size of the compression function, in bytes + /// \details BlockSize() will return 0 if the hash is not block based + /// or does not have an equivalent block size. For example, Keccak + /// and SHA-3 do not have a block size, but they do have an equivalent + /// block size called rate expressed as r. + unsigned int BlockSize() const { return BLOCKSIZE; } + + std::string AlgorithmName() const { return StaticAlgorithmName(); } - /// \brief Construct a SHA3-X message digest - SHA3_Final() : SHA3(DIGESTSIZE) {} - static std::string StaticAlgorithmName() { return "SHA3-" + IntToString(DIGESTSIZE * 8); } - unsigned int BlockSize() const { return BLOCKSIZE; } private: #if !defined(__BORLANDC__) - CRYPTOPP_COMPILE_ASSERT(BLOCKSIZE < 200); // ensure there was no underflow in the math - CRYPTOPP_COMPILE_ASSERT(BLOCKSIZE > (int)T_DigestSize); // this is a general expectation by HMAC + // ensure there was no underflow in the math + CRYPTOPP_COMPILE_ASSERT(BLOCKSIZE < 200); + // this is a general expectation by HMAC + CRYPTOPP_COMPILE_ASSERT((int)BLOCKSIZE > (int)DIGESTSIZE); #endif }; /// \brief SHA3-224 message digest /// \since Crypto++ 5.6.2 -// typedef SHA3_Final<28> SHA3_224; -class SHA3_224 : public SHA3_Final<28> -{ -}; +class SHA3_224 : public SHA3_Final<28> {}; /// \brief SHA3-256 message digest /// \since Crypto++ 5.6.2 -// typedef SHA3_Final<32> SHA3_256; -class SHA3_256 : public SHA3_Final<32> -{ -}; +class SHA3_256 : public SHA3_Final<32> {}; /// \brief SHA3-384 message digest /// \since Crypto++ 5.6.2 -// typedef SHA3_Final<48> SHA3_384; -class SHA3_384 : public SHA3_Final<48> -{ -}; +class SHA3_384 : public SHA3_Final<48> {}; /// \brief SHA3-512 message digest /// \since Crypto++ 5.6.2 -// typedef SHA3_Final<64> SHA3_512; -class SHA3_512 : public SHA3_Final<64> -{ -}; +class SHA3_512 : public SHA3_Final<64> {}; NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/sha_simd.cpp b/vendor/cryptopp/vendor_cryptopp/sha_simd.cpp index 95ac10fc..0b31ea37 100644 --- a/vendor/cryptopp/vendor_cryptopp/sha_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/sha_simd.cpp @@ -23,7 +23,8 @@ # include #endif -#if (CRYPTOPP_ARM_NEON_AVAILABLE) +// C1189: error: This header is specific to ARM targets +#if (CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(_M_ARM64) # include #endif @@ -83,7 +84,10 @@ bool CPU_ProbeSHA1() volatile bool result = true; __try { - uint32x4_t data1 = {1,2,3,4}, data2 = {5,6,7,8}, data3 = {9,10,11,12}; + unsigned int w[] = {1,2,3,4, 5,6,7,8, 9,10,11,12}; + uint32x4_t data1 = vld1q_u32(w+0); + uint32x4_t data2 = vld1q_u32(w+4); + uint32x4_t data3 = vld1q_u32(w+8); uint32x4_t r1 = vsha1cq_u32 (data1, 0, data2); uint32x4_t r2 = vsha1mq_u32 (data1, 0, data2); @@ -116,7 +120,10 @@ bool CPU_ProbeSHA1() result = false; else { - uint32x4_t data1 = {1,2,3,4}, data2 = {5,6,7,8}, data3 = {9,10,11,12}; + unsigned int w[] = {1,2,3,4, 5,6,7,8, 9,10,11,12}; + uint32x4_t data1 = vld1q_u32(w+0); + uint32x4_t data2 = vld1q_u32(w+4); + uint32x4_t data3 = vld1q_u32(w+8); uint32x4_t r1 = vsha1cq_u32 (data1, 0, data2); uint32x4_t r2 = vsha1mq_u32 (data1, 0, data2); @@ -145,7 +152,10 @@ bool CPU_ProbeSHA2() volatile bool result = true; __try { - uint32x4_t data1 = {1,2,3,4}, data2 = {5,6,7,8}, data3 = {9,10,11,12}; + unsigned int w[] = {1,2,3,4, 5,6,7,8, 9,10,11,12}; + uint32x4_t data1 = vld1q_u32(w+0); + uint32x4_t data2 = vld1q_u32(w+4); + uint32x4_t data3 = vld1q_u32(w+8); uint32x4_t r1 = vsha256hq_u32 (data1, data2, data3); uint32x4_t r2 = vsha256h2q_u32 (data1, data2, data3); @@ -177,7 +187,10 @@ bool CPU_ProbeSHA2() result = false; else { - uint32x4_t data1 = {1,2,3,4}, data2 = {5,6,7,8}, data3 = {9,10,11,12}; + unsigned int w[] = {1,2,3,4, 5,6,7,8, 9,10,11,12}; + uint32x4_t data1 = vld1q_u32(w+0); + uint32x4_t data2 = vld1q_u32(w+4); + uint32x4_t data3 = vld1q_u32(w+8); uint32x4_t r1 = vsha256hq_u32 (data1, data2, data3); uint32x4_t r2 = vsha256h2q_u32 (data1, data2, data3); diff --git a/vendor/cryptopp/vendor_cryptopp/shake.cpp b/vendor/cryptopp/vendor_cryptopp/shake.cpp new file mode 100644 index 00000000..65e08235 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/shake.cpp @@ -0,0 +1,85 @@ +// shake.cpp - modified by Wei Dai from Ronny Van Keer's public domain +// sha3-simple.c. All modifications here are placed in the +// public domain by Wei Dai. +// Keccack core function moved to keccakc.cpp in AUG 2018 +// by Jeffrey Walton. Separating the core file allows both +// SHA3 and Keccack to share the core implementation. + +/* +The SHAKE sponge function, designed by Guido Bertoni, Joan Daemen, +Michael Peeters and Gilles Van Assche. For more information, feedback or +questions, please refer to our website: http://keccak.noekeon.org/ + +Implementation by Ronny Van Keer, hereby denoted as "the implementer". + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#include "pch.h" +#include "shake.h" + +NAMESPACE_BEGIN(CryptoPP) + +// The Keccak core function +extern void KeccakF1600(word64 *state); + +void SHAKE::Update(const byte *input, size_t length) +{ + CRYPTOPP_ASSERT(!(input == NULLPTR && length != 0)); + if (length == 0) { return; } + + size_t spaceLeft; + while (length >= (spaceLeft = r() - m_counter)) + { + if (spaceLeft) + xorbuf(m_state.BytePtr() + m_counter, input, spaceLeft); + KeccakF1600(m_state); + input += spaceLeft; + length -= spaceLeft; + m_counter = 0; + } + + if (length) + xorbuf(m_state.BytePtr() + m_counter, input, length); + m_counter += (unsigned int)length; +} + +void SHAKE::Restart() +{ + memset(m_state, 0, m_state.SizeInBytes()); + m_counter = 0; +} + +void SHAKE::ThrowIfInvalidTruncatedSize(size_t size) const +{ + if (size > UINT_MAX) + throw InvalidArgument(std::string("HashTransformation: can't truncate a ") + + IntToString(UINT_MAX) + " byte digest to " + IntToString(size) + " bytes"); +} + +void SHAKE::TruncatedFinal(byte *hash, size_t size) +{ + CRYPTOPP_ASSERT(hash != NULLPTR); + ThrowIfInvalidTruncatedSize(size); + + m_state.BytePtr()[m_counter] ^= 0x1F; + m_state.BytePtr()[r()-1] ^= 0x80; + + // FIPS 202, Algorithm 8, pp 18-19. + while (size > 0) + { + KeccakF1600(m_state); + + const size_t segmentLen = STDMIN(size, (size_t)BlockSize()); + std::memcpy(hash, m_state, segmentLen); + + hash += segmentLen; + size -= segmentLen; + } + + Restart(); +} + +NAMESPACE_END diff --git a/vendor/cryptopp/vendor_cryptopp/shake.h b/vendor/cryptopp/vendor_cryptopp/shake.h new file mode 100644 index 00000000..a615b573 --- /dev/null +++ b/vendor/cryptopp/vendor_cryptopp/shake.h @@ -0,0 +1,163 @@ +// shake.h - written and placed in the public domain by Jeffrey Walton + +/// \file shake.h +/// \brief Classes for SHAKE message digests +/// \details The library provides byte oriented SHAKE128 and SHAKE256 using F1600. +/// FIPS 202 allows nearly unlimited output sizes, but Crypto++ limits the output +/// size to UINT_MAX due underlying data types. +/// \sa Keccak, SHA3, SHAKE128, SHAKE256, +/// FIPS 202, +/// SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions +/// \since Crypto++ 8.1 + +#ifndef CRYPTOPP_SHAKE_H +#define CRYPTOPP_SHAKE_H + +#include "cryptlib.h" +#include "secblock.h" + +NAMESPACE_BEGIN(CryptoPP) + +/// \brief SHAKE message digest base class +/// \details SHAKE is the base class for SHAKE128 and SHAKE258. +/// Library users should instantiate a derived class, and only use SHAKE +/// as a base class reference or pointer. +/// \sa Keccak, SHA3, SHAKE128, SHAKE256, +/// FIPS 202, +/// SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions +/// \since Crypto++ 8.1 +class SHAKE : public HashTransformation +{ +protected: + /// \brief Construct a SHAKE + /// \param digestSize the digest size, in bytes + /// \details SHAKE is the base class for SHAKE128 and SHAKE256. + /// Library users should instantiate a derived class, and only use SHAKE + /// as a base class reference or pointer. + /// \details This constructor was moved to protected at Crypto++ 8.1 + /// because users were attempting to create Keccak objects with it. + /// \since Crypto++ 8.1 + SHAKE(unsigned int digestSize) : m_digestSize(digestSize) {Restart();} + +public: + unsigned int DigestSize() const {return m_digestSize;} + unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} + + void Update(const byte *input, size_t length); + void Restart(); + void TruncatedFinal(byte *hash, size_t size); + +protected: + inline unsigned int r() const {return BlockSize();} + + // SHAKE-128 and SHAKE-256 effectively allow unlimited + // output length. However, we use an unsigned int so + // we are limited in practice to UINT_MAX. + void ThrowIfInvalidTruncatedSize(size_t size) const; + + FixedSizeSecBlock m_state; + unsigned int m_digestSize, m_counter; +}; + +/// \brief SHAKE message digest template +/// \tparam T_Strength the strength of the digest +/// \since Crypto++ 8.1 +template +class SHAKE_Final : public SHAKE +{ +public: + CRYPTOPP_CONSTANT(DIGESTSIZE = (T_Strength == 128 ? 32 : 64)) + CRYPTOPP_CONSTANT(BLOCKSIZE = (T_Strength == 128 ? 1344/8 : 1088/8)) + static std::string StaticAlgorithmName() + { return "SHAKE-" + IntToString(T_Strength); } + + /// \brief Construct a SHAKE-X message digest + /// \details SHAKE128 and SHAKE256 don't need the output size in advance + /// because the output size does not affect the digest. TruncatedFinal + /// produces the correct digest for any output size. However, cSHAKE + /// requires the output size in advance because the algoirthm uses + /// output size as a parameter to the hash function. + SHAKE_Final(unsigned int outputSize=DIGESTSIZE) : SHAKE(outputSize) {} + + /// \brief Provides the block size of the compression function + /// \return block size of the compression function, in bytes + /// \details BlockSize() will return 0 if the hash is not block based + /// or does not have an equivalent block size. For example, Keccak + /// and SHA-3 do not have a block size, but they do have an equivalent + /// to block size called rate expressed as r. + unsigned int BlockSize() const { return BLOCKSIZE; } + + std::string AlgorithmName() const { return StaticAlgorithmName(); } + +private: +#if !defined(__BORLANDC__) + // ensure there was no underflow in the math + CRYPTOPP_COMPILE_ASSERT(BLOCKSIZE < 200); + // this is a general expectation by HMAC + CRYPTOPP_COMPILE_ASSERT((int)BLOCKSIZE > (int)DIGESTSIZE); +#endif +}; + +/// \brief SHAKE128 message digest +/// \details The library provides byte oriented SHAKE128 using F1600. +/// FIPS 202 allows nearly unlimited output sizes, but Crypto++ limits +/// the output size to UINT_MAX due underlying data types. +/// \sa Keccak, SHA3, SHAKE256, +/// FIPS 202, +/// SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions +/// \since Crypto++ 8.1 +class SHAKE128 : public SHAKE_Final<128> +{ +public: + /// \brief Construct a SHAKE128 message digest + /// \details SHAKE128 and SHAKE256 don't need the output size in advance + /// because the output size does not affect the digest. TruncatedFinal + /// produces the correct digest for any output size. However, cSHAKE + /// requires the output size in advance because the algoirthm uses + /// output size as a parameter to the hash function. + /// \since Crypto++ 8.1 + SHAKE128() {} + + /// \brief Construct a SHAKE128 message digest + /// \details SHAKE128 and SHAKE256 don't need the output size in advance + /// because the output size does not affect the digest. TruncatedFinal + /// produces the correct digest for any output size. However, cSHAKE + /// requires the output size in advance because the algoirthm uses + /// output size as a parameter to the hash function. + /// \since Crypto++ 8.1 + SHAKE128(unsigned int outputSize) : SHAKE_Final(outputSize) {} +}; + +/// \brief SHAKE256 message digest +/// \details The library provides byte oriented SHAKE256 using F1600. +/// FIPS 202 allows nearly unlimited output sizes, but Crypto++ limits +/// the output size to UINT_MAX due underlying data types. +/// \sa Keccak, SHA3, SHAKE128, +/// FIPS 202, +/// SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions +/// \since Crypto++ 8.1 +class SHAKE256 : public SHAKE_Final<256> +{ +public: + /// \brief Construct a SHAKE256 message digest + /// \details SHAKE128 and SHAKE256 don't need the output size in advance + /// because the output size does not affect the digest. TruncatedFinal + /// produces the correct digest for any output size. However, cSHAKE + /// requires the output size in advance because the algoirthm uses + /// output size as a parameter to the hash function. + /// \since Crypto++ 8.1 + SHAKE256() {} + + /// \brief Construct a SHAKE256 message digest + /// \details SHAKE128 and SHAKE256 don't need the output size in advance + /// because the output size does not affect the digest. TruncatedFinal + /// produces the correct digest for any output size. However, cSHAKE + /// requires the output size in advance because the algoirthm uses + /// output size as a parameter to the hash function. + /// \since Crypto++ 8.1 + SHAKE256(unsigned int outputSize) : SHAKE_Final(outputSize) {} +}; + +NAMESPACE_END + +#endif diff --git a/vendor/cryptopp/vendor_cryptopp/simeck_simd.cpp b/vendor/cryptopp/vendor_cryptopp/simeck_simd.cpp index abb4ffbd..37ea2c5e 100644 --- a/vendor/cryptopp/vendor_cryptopp/simeck_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/simeck_simd.cpp @@ -10,7 +10,6 @@ #include "simeck.h" #include "misc.h" -#include "adv_simd.h" // Uncomment for benchmarking C++ against SSE or NEON. // Do so in both simon.cpp and simon-simd.cpp. @@ -18,6 +17,7 @@ // #undef CRYPTOPP_ARM_NEON_AVAILABLE #if (CRYPTOPP_SSSE3_AVAILABLE) +# include "adv_simd.h" # include # include #endif @@ -26,7 +26,7 @@ # include #endif -#if defined(__AVX512F__) && defined(__AVX512VL__) +#if defined(__AVX512F__) # define CRYPTOPP_AVX512_ROTATE 1 # include #endif diff --git a/vendor/cryptopp/vendor_cryptopp/simon.h b/vendor/cryptopp/vendor_cryptopp/simon.h index 2bcb0e5e..ae37503e 100644 --- a/vendor/cryptopp/vendor_cryptopp/simon.h +++ b/vendor/cryptopp/vendor_cryptopp/simon.h @@ -20,13 +20,17 @@ #if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || \ CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8 || \ CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64 -# define CRYPTOPP_SIMON64_ADVANCED_PROCESS_BLOCKS 1 +# ifndef CRYPTOPP_DISABLE_SIMON_SIMD +# define CRYPTOPP_SIMON64_ADVANCED_PROCESS_BLOCKS 1 +# endif #endif #if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || \ CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8 || \ CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64 -# define CRYPTOPP_SIMON128_ADVANCED_PROCESS_BLOCKS 1 +# ifndef CRYPTOPP_DISABLE_SIMON_SIMD +# define CRYPTOPP_SIMON128_ADVANCED_PROCESS_BLOCKS 1 +# endif #endif // Yet another SunStudio/SunCC workaround. Failed self tests diff --git a/vendor/cryptopp/vendor_cryptopp/simon128_simd.cpp b/vendor/cryptopp/vendor_cryptopp/simon128_simd.cpp index c3006547..7b3f8518 100644 --- a/vendor/cryptopp/vendor_cryptopp/simon128_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/simon128_simd.cpp @@ -10,7 +10,6 @@ #include "simon.h" #include "misc.h" -#include "adv_simd.h" // Uncomment for benchmarking C++ against SSE or NEON. // Do so in both simon.cpp and simon-simd.cpp. @@ -18,6 +17,7 @@ // #undef CRYPTOPP_ARM_NEON_AVAILABLE #if (CRYPTOPP_SSSE3_AVAILABLE) +# include "adv_simd.h" # include # include #endif @@ -26,23 +26,26 @@ # include #endif -#if defined(__AVX512F__) && defined(__AVX512VL__) +#if defined(__AVX512F__) # define CRYPTOPP_AVX512_ROTATE 1 # include #endif +// C1189: error: This header is specific to ARM targets #if (CRYPTOPP_ARM_NEON_AVAILABLE) -# include +# include "adv_simd.h" +# ifndef _M_ARM64 +# include +# endif #endif -// Can't use CRYPTOPP_ARM_XXX_AVAILABLE because too many -// compilers don't follow ACLE conventions for the include. #if (CRYPTOPP_ARM_ACLE_AVAILABLE) # include # include #endif #if defined(CRYPTOPP_POWER7_AVAILABLE) +# include "adv_simd.h" # include "ppc_simd.h" #endif @@ -60,6 +63,14 @@ using CryptoPP::vec_swap; // SunCC #if (CRYPTOPP_ARM_NEON_AVAILABLE) +// Missing from Microsoft's ARM A-32 implementation +#if defined(_MSC_VER) && !defined(_M_ARM64) +inline uint64x2_t vld1q_dup_u64(const uint64_t* ptr) +{ + return vmovq_n_u64(*ptr); +} +#endif + template inline T UnpackHigh64(const T& a, const T& b) { diff --git a/vendor/cryptopp/vendor_cryptopp/simon64_simd.cpp b/vendor/cryptopp/vendor_cryptopp/simon64_simd.cpp index 000ae94d..3ad26bcd 100644 --- a/vendor/cryptopp/vendor_cryptopp/simon64_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/simon64_simd.cpp @@ -10,7 +10,6 @@ #include "simon.h" #include "misc.h" -#include "adv_simd.h" // Uncomment for benchmarking C++ against SSE or NEON. // Do so in both simon.cpp and simon-simd.cpp. @@ -18,6 +17,7 @@ // #undef CRYPTOPP_ARM_NEON_AVAILABLE #if (CRYPTOPP_SSSE3_AVAILABLE) +# include "adv_simd.h" # include # include #endif @@ -30,23 +30,26 @@ # include #endif -#if defined(__AVX512F__) && defined(__AVX512VL__) +#if defined(__AVX512F__) # define CRYPTOPP_AVX512_ROTATE 1 # include #endif +// C1189: error: This header is specific to ARM targets #if (CRYPTOPP_ARM_NEON_AVAILABLE) -# include +# include "adv_simd.h" +# ifndef _M_ARM64 +# include +# endif #endif -// Can't use CRYPTOPP_ARM_XXX_AVAILABLE because too many -// compilers don't follow ACLE conventions for the include. #if (CRYPTOPP_ARM_ACLE_AVAILABLE) # include # include #endif #if defined(CRYPTOPP_ALTIVEC_AVAILABLE) +# include "adv_simd.h" # include "ppc_simd.h" #endif diff --git a/vendor/cryptopp/vendor_cryptopp/sm4.h b/vendor/cryptopp/vendor_cryptopp/sm4.h index 92883a31..efc0c4d8 100644 --- a/vendor/cryptopp/vendor_cryptopp/sm4.h +++ b/vendor/cryptopp/vendor_cryptopp/sm4.h @@ -19,7 +19,9 @@ #include "secblock.h" #if (CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86) -# define CRYPTOPP_SM4_ADVANCED_PROCESS_BLOCKS 1 +# ifndef CRYPTOPP_DISABLE_SM4_SIMD +# define CRYPTOPP_SM4_ADVANCED_PROCESS_BLOCKS 1 +# endif #endif NAMESPACE_BEGIN(CryptoPP) diff --git a/vendor/cryptopp/vendor_cryptopp/sm4_simd.cpp b/vendor/cryptopp/vendor_cryptopp/sm4_simd.cpp index f0d39ae2..99bafa41 100644 --- a/vendor/cryptopp/vendor_cryptopp/sm4_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/sm4_simd.cpp @@ -15,18 +15,14 @@ #include "sm4.h" #include "misc.h" -#include "adv_simd.h" // Uncomment for benchmarking C++ against SSE. // Do so in both simon.cpp and simon-simd.cpp. // #undef CRYPTOPP_AESNI_AVAILABLE -#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE) -# include -# include -#endif - #if (CRYPTOPP_AESNI_AVAILABLE) +# include "adv_simd.h" +# include # include # include #endif diff --git a/vendor/cryptopp/vendor_cryptopp/speck.h b/vendor/cryptopp/vendor_cryptopp/speck.h index 09fb26ee..a01c50fd 100644 --- a/vendor/cryptopp/vendor_cryptopp/speck.h +++ b/vendor/cryptopp/vendor_cryptopp/speck.h @@ -20,13 +20,17 @@ #if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || \ CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8 || \ CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64 -# define CRYPTOPP_SPECK64_ADVANCED_PROCESS_BLOCKS 1 +# ifndef CRYPTOPP_DISABLE_SPECK_SIMD +# define CRYPTOPP_SPECK64_ADVANCED_PROCESS_BLOCKS 1 +# endif #endif #if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || \ CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8 || \ CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64 -# define CRYPTOPP_SPECK128_ADVANCED_PROCESS_BLOCKS 1 +# ifndef CRYPTOPP_DISABLE_SPECK_SIMD +# define CRYPTOPP_SPECK128_ADVANCED_PROCESS_BLOCKS 1 +# endif #endif // Yet another SunStudio/SunCC workaround. Failed self tests diff --git a/vendor/cryptopp/vendor_cryptopp/speck128_simd.cpp b/vendor/cryptopp/vendor_cryptopp/speck128_simd.cpp index e42f62f5..d5028fe6 100644 --- a/vendor/cryptopp/vendor_cryptopp/speck128_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/speck128_simd.cpp @@ -10,7 +10,6 @@ #include "speck.h" #include "misc.h" -#include "adv_simd.h" // Uncomment for benchmarking C++ against SSE or NEON. // Do so in both speck.cpp and speck-simd.cpp. @@ -18,6 +17,7 @@ // #undef CRYPTOPP_ARM_NEON_AVAILABLE #if (CRYPTOPP_SSSE3_AVAILABLE) +# include "adv_simd.h" # include # include #endif @@ -26,23 +26,26 @@ # include #endif -#if defined(__AVX512F__) && defined(__AVX512VL__) +#if defined(__AVX512F__) # define CRYPTOPP_AVX512_ROTATE 1 # include #endif +// C1189: error: This header is specific to ARM targets #if (CRYPTOPP_ARM_NEON_AVAILABLE) -# include +# include "adv_simd.h" +# ifndef _M_ARM64 +# include +# endif #endif -// Can't use CRYPTOPP_ARM_XXX_AVAILABLE because too many -// compilers don't follow ACLE conventions for the include. #if (CRYPTOPP_ARM_ACLE_AVAILABLE) # include # include #endif #if defined(CRYPTOPP_POWER8_AVAILABLE) +# include "adv_simd.h" # include "ppc_simd.h" #endif @@ -59,6 +62,14 @@ using CryptoPP::word64; #if (CRYPTOPP_ARM_NEON_AVAILABLE) +// Missing from Microsoft's ARM A-32 implementation +#if defined(_MSC_VER) && !defined(_M_ARM64) +inline uint64x2_t vld1q_dup_u64(const uint64_t* ptr) +{ + return vmovq_n_u64(*ptr); +} +#endif + template inline T UnpackHigh64(const T& a, const T& b) { diff --git a/vendor/cryptopp/vendor_cryptopp/speck64_simd.cpp b/vendor/cryptopp/vendor_cryptopp/speck64_simd.cpp index c8ee0604..885acad4 100644 --- a/vendor/cryptopp/vendor_cryptopp/speck64_simd.cpp +++ b/vendor/cryptopp/vendor_cryptopp/speck64_simd.cpp @@ -10,7 +10,6 @@ #include "speck.h" #include "misc.h" -#include "adv_simd.h" // Uncomment for benchmarking C++ against SSE or NEON. // Do so in both speck.cpp and speck-simd.cpp. @@ -18,6 +17,7 @@ // #undef CRYPTOPP_ARM_NEON_AVAILABLE #if (CRYPTOPP_SSSE3_AVAILABLE) +# include "adv_simd.h" # include # include #endif @@ -30,23 +30,26 @@ # include #endif -#if defined(__AVX512F__) && defined(__AVX512VL__) +#if defined(__AVX512F__) # define CRYPTOPP_AVX512_ROTATE 1 # include #endif +// C1189: error: This header is specific to ARM targets #if (CRYPTOPP_ARM_NEON_AVAILABLE) -# include +# include "adv_simd.h" +# ifndef _M_ARM64 +# include +# endif #endif -// Can't use CRYPTOPP_ARM_XXX_AVAILABLE because too many -// compilers don't follow ACLE conventions for the include. #if (CRYPTOPP_ARM_ACLE_AVAILABLE) # include # include #endif #if defined(CRYPTOPP_ALTIVEC_AVAILABLE) +# include "adv_simd.h" # include "ppc_simd.h" #endif diff --git a/vendor/cryptopp/vendor_cryptopp/stdcpp.h b/vendor/cryptopp/vendor_cryptopp/stdcpp.h index a13fd25b..41dda240 100644 --- a/vendor/cryptopp/vendor_cryptopp/stdcpp.h +++ b/vendor/cryptopp/vendor_cryptopp/stdcpp.h @@ -60,11 +60,18 @@ namespace std { #endif #include -#include #include #include #include +// It is 2019 and VS2017/Win10 still can't compile a +// program that includes without making users +// do something special. "Epic fail" comes to mind. +// Also see https://github.com/weidai11/cryptopp/issues/781 +#ifndef _MSC_VER +# include +#endif + // uintptr_t and ptrdiff_t #if defined(__SUNPRO_CC) # if (__SUNPRO_CC >= 0x5100) diff --git a/vendor/cryptopp/vendor_cryptopp/strciphr.h b/vendor/cryptopp/vendor_cryptopp/strciphr.h index e2e2b944..e7e32a51 100644 --- a/vendor/cryptopp/vendor_cryptopp/strciphr.h +++ b/vendor/cryptopp/vendor_cryptopp/strciphr.h @@ -200,7 +200,14 @@ struct CRYPTOPP_DLL CRYPTOPP_NO_VTABLE AdditiveCipherAbstractPolicy template struct CRYPTOPP_NO_VTABLE AdditiveCipherConcretePolicy : public BASE { + /// \brief Word type for the cipher typedef WT WordType; + + /// \brief Number of bytes for an iteration + /// \details BYTES_PER_ITERATION is the product sizeof(WordType) * W. + /// For example, ChaCha uses 16 each word32, and the value of + /// BYTES_PER_ITERATION is 64. Each invocation of the ChaCha block function + /// produces 64 bytes of keystream. CRYPTOPP_CONSTANT(BYTES_PER_ITERATION = sizeof(WordType) * W) virtual ~AdditiveCipherConcretePolicy() {} @@ -208,8 +215,9 @@ struct CRYPTOPP_NO_VTABLE AdditiveCipherConcretePolicy : public BASE #if !(CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X64) /// \brief Provides data alignment requirements /// \returns data alignment requirements, in bytes - /// \details Internally, the default implementation returns 1. If the stream cipher is implemented - /// using an SSE2 ASM or intrinsics, then the value returned is usually 16. + /// \details Internally, the default implementation returns 1. If the stream + /// cipher is implemented using an SSE2 ASM or intrinsics, then the value + /// returned is usually 16. unsigned int GetAlignment() const {return GetAlignmentOf();} #endif @@ -223,7 +231,8 @@ struct CRYPTOPP_NO_VTABLE AdditiveCipherConcretePolicy : public BASE unsigned int GetIterationsToBuffer() const {return X;} /// \brief Flag indicating - /// \returns true if the stream can be generated independent of the transformation input, false otherwise + /// \returns true if the stream can be generated independent of the + /// transformation input, false otherwise /// \sa CanOperateKeystream(), OperateKeystream(), WriteKeystream() bool CanOperateKeystream() const {return true;} diff --git a/vendor/cryptopp/vendor_cryptopp/test.cpp b/vendor/cryptopp/vendor_cryptopp/test.cpp index 843342b6..5eb5dcbf 100644 --- a/vendor/cryptopp/vendor_cryptopp/test.cpp +++ b/vendor/cryptopp/vendor_cryptopp/test.cpp @@ -41,6 +41,21 @@ #include #endif +#if defined(CRYPTOPP_UNIX_AVAILABLE) || defined(CRYPTOPP_BSD_AVAILABLE) +#include +#include +#include +#define UNIX_PATH_FAMILY 1 +#endif + +#if defined(CRYPTOPP_OSX_AVAILABLE) +#include +#include +#include +#include +#define UNIX_PATH_FAMILY 1 +#endif + #if (_MSC_VER >= 1000) #include // for the debug heap #endif @@ -75,6 +90,7 @@ NAMESPACE_BEGIN(CryptoPP) NAMESPACE_BEGIN(Test) const int MAX_PHRASE_LENGTH=250; +std::string g_argvPathHint=""; void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed); std::string RSAEncryptString(const char *pubFilename, const char *seed, const char *message); @@ -110,6 +126,7 @@ void HexDecode(const char *infile, const char *outfile); void FIPS140_GenerateRandomFiles(); bool Validate(int, bool, const char *); +void SetArgvPathHint(const char* argv0, std::string& pathHint); ANONYMOUS_NAMESPACE_BEGIN #if (CRYPTOPP_USE_AES_GENERATOR) @@ -149,6 +166,9 @@ int scoped_main(int argc, char *argv[]) cin.set_safe_flag(stream_MT::unsafe_object); #endif + // A hint to help locate TestData/ and TestVectors/ after install. + SetArgvPathHint(argv[0], g_argvPathHint); + try { RegisterFactories(All); @@ -426,6 +446,82 @@ int scoped_main(int argc, char *argv[]) } } // main() +void SetArgvPathHint(const char* argv0, std::string& pathHint) +{ +# if (PATH_MAX > 0) // Posix + size_t path_max = (size_t)PATH_MAX; +#elif (MAX_PATH > 0) // Microsoft + size_t path_max = (size_t)MAX_PATH; +#else + size_t path_max = 260; +#endif + + // OS X and Solaris provide a larger path using pathconf than MAX_PATH. + // Also see https://stackoverflow.com/a/33249023/608639 for FreeBSD. +#if defined(_PC_PATH_MAX) + long ret = pathconf(argv0, _PC_PATH_MAX); + const size_t old_path_max = path_max; + if (SafeConvert(ret, path_max) == false) + path_max = old_path_max; +#endif + + const size_t argLen = std::strlen(argv0); + if (argLen >= path_max) + return; // Can't use realpath safely + pathHint = std::string(argv0, argLen); + +#if defined(AT_EXECFN) + if (getauxval(AT_EXECFN)) + pathHint = getauxval(AT_EXECFN); +#elif defined(_MSC_VER) + char* pgmptr = NULLPTR; + errno_t err = _get_pgmptr(&pgmptr); + if (err == 0 && pgmptr != NULLPTR) + pathHint = pgmptr; +#elif defined(CRYPTOPP_OSX_AVAILABLE) + std::string t(path_max, (char)0); + unsigned int len = (unsigned int)t.size(); + if (_NSGetExecutablePath(&t[0], &len) == 0) + { + t.resize(len); + std::swap(pathHint, t); + } +#elif defined(sun) || defined(__sun) + if (getexecname()) + pathHint = getexecname(); +#endif + +#if (_POSIX_C_SOURCE >= 200809L) || (_XOPEN_SOURCE >= 700) + char* resolved = realpath (pathHint.c_str(), NULLPTR); + if (resolved != NULLPTR) + { + pathHint = resolved; + std::free(resolved); + } +#elif defined(UNIX_PATH_FAMILY) + std::string resolved(path_max, (char)0); + char* r = realpath (pathHint.c_str(), &resolved[0]); + if (r != NULLPTR) + { + resolved.resize(std::strlen(&resolved[0])); + std::swap(pathHint, resolved); + } +#endif + +#if defined(UNIX_PATH_FAMILY) + // Is it possible for realpath to fail? + struct stat buf; int x; + x = lstat(pathHint.c_str(), &buf); + if (x != 0 || S_ISLNK(buf.st_mode)) + pathHint.clear(); +#endif + + // Trim the executable name, leave the path with a slash. + std::string::size_type pos = pathHint.find_last_of("\\/"); + if (pos != std::string::npos) + pathHint.erase(pos+1); +} + void FIPS140_GenerateRandomFiles() { #ifdef OS_RNG_AVAILABLE @@ -451,7 +547,8 @@ void PrintSeedAndThreads() tc = omp_get_num_threads(); } - std::cout << "Using " << tc << " OMP " << (tc == 1 ? "thread" : "threads") << std::endl; + std::cout << "OpenMP version " << (int)_OPENMP << ", "; + std::cout << tc << (tc == 1 ? " thread" : " threads") << std::endl; #endif } @@ -812,6 +909,7 @@ bool Validate(int alg, bool thorough, const char *seedInput) g_testBegin = ::time(NULLPTR); PrintSeedAndThreads(); + // TODO: we need to group these tests like benchmarks... switch (alg) { case 0: result = ValidateAll(thorough); break; @@ -886,10 +984,11 @@ bool Validate(int alg, bool thorough, const char *seedInput) case 68: result = ValidateTTMAC(); break; case 70: result = ValidateSalsa(); break; case 71: result = ValidateChaCha(); break; - case 72: result = ValidateSosemanuk(); break; - case 73: result = ValidateRabbit(); break; - case 74: result = ValidateHC128(); break; - case 75: result = ValidateHC256(); break; + case 72: result = ValidateChaChaTLS(); break; + case 73: result = ValidateSosemanuk(); break; + case 74: result = ValidateRabbit(); break; + case 75: result = ValidateHC128(); break; + case 76: result = ValidateHC256(); break; case 80: result = ValidateVMAC(); break; case 81: result = ValidateCCM(); break; case 82: result = ValidateGCM(); break; @@ -907,6 +1006,10 @@ bool Validate(int alg, bool thorough, const char *seedInput) case 102: result = ValidateSIMON(); break; case 103: result = ValidateSPECK(); break; + case 110: result = ValidateSHA3(); break; + case 111: result = ValidateSHAKE(); break; + case 112: result = ValidateSHAKE_XOF(); break; + #if defined(CRYPTOPP_EXTENDED_VALIDATION) // http://github.com/weidai11/cryptopp/issues/92 case 9999: result = TestSecBlock(); break; diff --git a/vendor/cryptopp/vendor_cryptopp/trap.h b/vendor/cryptopp/vendor_cryptopp/trap.h index a34be810..c5a9117d 100644 --- a/vendor/cryptopp/vendor_cryptopp/trap.h +++ b/vendor/cryptopp/vendor_cryptopp/trap.h @@ -2,14 +2,18 @@ /// \file trap.h /// \brief Debugging and diagnostic assertions -/// \details CRYPTOPP_ASSERT is the library's debugging and diagnostic assertion. CRYPTOPP_ASSERT -/// is enabled by CRYPTOPP_DEBUG, DEBUG or _DEBUG. -/// \details CRYPTOPP_ASSERT raises a SIGTRAP (Unix) or calls __debugbreak() (Windows). -/// CRYPTOPP_ASSERT is only in effect when the user requests a debug configuration. Unlike Posix assert, +/// \details CRYPTOPP_ASSERT is the library's debugging and diagnostic +/// assertion. CRYPTOPP_ASSERT is enabled by CRYPTOPP_DEBUG, +/// DEBUG or _DEBUG. +/// \details CRYPTOPP_ASSERT raises a SIGTRAP (Unix) or calls +/// __debugbreak() (Windows). CRYPTOPP_ASSERT is only in +/// effect when the user requests a debug configuration. Unlike Posix assert, /// NDEBUG (or failure to define it) does not affect the library. -/// The traditional Posix define NDEBUG has no effect on CRYPTOPP_DEBUG or DebugTrapHandler. +/// The traditional Posix define NDEBUG has no effect on +/// CRYPTOPP_DEBUG or DebugTrapHandler. /// \since Crypto++ 5.6.5 -/// \sa DebugTrapHandler, Issue 277, +/// \sa DebugTrapHandler, Issue 277, /// CVE-2016-7420 #ifndef CRYPTOPP_TRAP_H @@ -32,21 +36,25 @@ #if defined(CRYPTOPP_DOXYGEN_PROCESSING) /// \brief Debugging and diagnostic assertion -/// \details CRYPTOPP_ASSERT is the library's debugging and diagnostic assertion. CRYPTOPP_ASSERT -/// is enabled by the preprocessor macros CRYPTOPP_DEBUG, DEBUG or _DEBUG. -/// \details CRYPTOPP_ASSERT raises a SIGTRAP (Unix) or calls DebugBreak() (Windows). -/// CRYPTOPP_ASSERT is only in effect when the user explicitly requests a debug configuration. -/// \details If you want to ensure CRYPTOPP_ASSERT is inert, then do not define -/// CRYPTOPP_DEBUG, DEBUG or _DEBUG. Avoiding the defines means CRYPTOPP_ASSERT -/// is preprocessed into an empty string. -/// \details The traditional Posix define NDEBUG has no effect on CRYPTOPP_DEBUG, CRYPTOPP_ASSERT -/// or DebugTrapHandler. -/// \details An example of using \ref CRYPTOPP_ASSERT "CRYPTOPP_ASSERT" and DebugTrapHandler is shown below. The library's -/// test program, cryptest.exe (from test.cpp), exercises the structure: +/// \details CRYPTOPP_ASSERT is the library's debugging and diagnostic +/// assertion. CRYPTOPP_ASSERT is enabled by the preprocessor macros +/// CRYPTOPP_DEBUG, DEBUG or _DEBUG. +/// \details CRYPTOPP_ASSERT raises a SIGTRAP (Unix) or calls +/// DebugBreak() (Windows). CRYPTOPP_ASSERT is only in effect +/// when the user explicitly requests a debug configuration. +/// \details If you want to ensure CRYPTOPP_ASSERT is inert, then do +/// not define CRYPTOPP_DEBUG, DEBUG or _DEBUG. +/// Avoiding the defines means CRYPTOPP_ASSERT is preprocessed into an +/// empty string. +/// \details The traditional Posix define NDEBUG has no effect on +/// CRYPTOPP_DEBUG, CRYPTOPP_ASSERT or DebugTrapHandler. +/// \details An example of using CRYPTOPP_ASSERT and DebugTrapHandler is shown +/// below. The library's test program, cryptest.exe (from test.cpp), +/// exercises the structure: ///
-///    #if defined(CRYPTOPP_DEBUG) && defined(UNIX_SIGNALS_AVAILABLE)
+///    \#if defined(CRYPTOPP_DEBUG) && defined(UNIX_SIGNALS_AVAILABLE)
 ///    static const DebugTrapHandler g_dummyHandler;
-///    #endif
+///    \#endif
 ///
 ///    int main(int argc, char* argv[])
 ///    {
@@ -55,7 +63,8 @@
 ///    }
 ///  
/// \since Crypto++ 5.6.5 -/// \sa DebugTrapHandler, SignalHandler, Issue 277, +/// \sa DebugTrapHandler, SignalHandler, Issue 277, /// CVE-2016-7420 # define CRYPTOPP_ASSERT(exp) { ... } #endif @@ -96,30 +105,37 @@ NAMESPACE_BEGIN(CryptoPP) #if (CRYPTOPP_DEBUG && defined(UNIX_SIGNALS_AVAILABLE)) || defined(CRYPTOPP_DOXYGEN_PROCESSING) /// \brief Default SIGTRAP handler -/// \details DebugTrapHandler() can be used by a program to install an empty SIGTRAP handler. If present, -/// the handler ensures there is a signal handler in place for SIGTRAP raised by -/// CRYPTOPP_ASSERT. If CRYPTOPP_ASSERT raises SIGTRAP without -/// a handler, then one of two things can occur. First, the OS might allow the program -/// to continue. Second, the OS might terminate the program. OS X allows the program to continue, while +/// \details DebugTrapHandler() can be used by a program to install an empty +/// SIGTRAP handler. If present, the handler ensures there is a signal +/// handler in place for SIGTRAP raised by +/// CRYPTOPP_ASSERT. If CRYPTOPP_ASSERT raises +/// SIGTRAP without a handler, then one of two things can +/// occur. First, the OS might allow the program to continue. Second, the OS +/// might terminate the program. OS X allows the program to continue, while /// some Linuxes terminate the program. -/// \details If DebugTrapHandler detects another handler in place, then it will not install a handler. This -/// ensures a debugger can gain control of the SIGTRAP signal without contention. It also allows multiple -/// DebugTrapHandler to be created without contentious or unusual behavior. Though multiple DebugTrapHandler can be -/// created, a program should only create one, if needed. -/// \details A DebugTrapHandler is subject to C++ static initialization [dis]order. If you need to install a handler -/// and it must be installed early, then reference the code associated with CRYPTOPP_INIT_PRIORITY in -/// cryptlib.cpp and cpu.cpp. -/// \details If you want to ensure CRYPTOPP_ASSERT is inert, then do not define -/// CRYPTOPP_DEBUG, DEBUG or _DEBUG. Avoiding the defines means CRYPTOPP_ASSERT +/// \details If DebugTrapHandler detects another handler in place, then it will +/// not install a handler. This ensures a debugger can gain control of the +/// SIGTRAP signal without contention. It also allows multiple +/// DebugTrapHandler to be created without contentious or unusual behavior. +/// Though multiple DebugTrapHandler can be created, a program should only +/// create one, if needed. +/// \details A DebugTrapHandler is subject to C++ static initialization +/// [dis]order. If you need to install a handler and it must be installed +/// early, then reference the code associated with +/// CRYPTOPP_INIT_PRIORITY in cryptlib.cpp and cpu.cpp. +/// \details If you want to ensure CRYPTOPP_ASSERT is inert, then +/// do not define CRYPTOPP_DEBUG, DEBUG or +/// _DEBUG. Avoiding the defines means CRYPTOPP_ASSERT /// is processed into ((void)(exp)). -/// \details The traditional Posix define NDEBUG has no effect on CRYPTOPP_DEBUG, CRYPTOPP_ASSERT -/// or DebugTrapHandler. -/// \details An example of using \ref CRYPTOPP_ASSERT "CRYPTOPP_ASSERT" and DebugTrapHandler is shown below. The library's -/// test program, cryptest.exe (from test.cpp), exercises the structure: +/// \details The traditional Posix define NDEBUG has no effect on +/// CRYPTOPP_DEBUG, CRYPTOPP_ASSERT or DebugTrapHandler. +/// \details An example of using \ref CRYPTOPP_ASSERT "CRYPTOPP_ASSERT" and +/// DebugTrapHandler is shown below. The library's test program, +/// cryptest.exe (from test.cpp), exercises the structure: ///
-///    #if defined(CRYPTOPP_DEBUG) && defined(UNIX_SIGNALS_AVAILABLE)
+///    \#if defined(CRYPTOPP_DEBUG) && defined(UNIX_SIGNALS_AVAILABLE)
 ///    static const DebugTrapHandler g_dummyHandler;
-///    #endif
+///    \#endif
 ///
 ///    int main(int argc, char* argv[])
 ///    {
@@ -128,7 +144,8 @@ NAMESPACE_BEGIN(CryptoPP)
 ///    }
 ///  
/// \since Crypto++ 5.6.5 -/// \sa \ref CRYPTOPP_ASSERT "CRYPTOPP_ASSERT", SignalHandler, Issue 277, +/// \sa \ref CRYPTOPP_ASSERT "CRYPTOPP_ASSERT", SignalHandler, Issue 277, /// CVE-2016-7420 #if defined(CRYPTOPP_DOXYGEN_PROCESSING) diff --git a/vendor/cryptopp/vendor_cryptopp/tweetnacl.cpp b/vendor/cryptopp/vendor_cryptopp/tweetnacl.cpp index aec6210e..c7547183 100644 --- a/vendor/cryptopp/vendor_cryptopp/tweetnacl.cpp +++ b/vendor/cryptopp/vendor_cryptopp/tweetnacl.cpp @@ -884,7 +884,7 @@ int crypto_sign_open(byte *m,word64 *mlen,const byte *sm,word64 n,const byte *pk byte t[32],h[64]; gf p[4],q[4]; - *mlen = -1; + *mlen = ~W64LIT(0); if (n < 64) return -1; if (unpackneg(q,pk)) return -1; diff --git a/vendor/cryptopp/vendor_cryptopp/validat0.cpp b/vendor/cryptopp/vendor_cryptopp/validat0.cpp index 56c3e159..8cb10b8a 100644 --- a/vendor/cryptopp/vendor_cryptopp/validat0.cpp +++ b/vendor/cryptopp/vendor_cryptopp/validat0.cpp @@ -1251,11 +1251,56 @@ bool TestRounding() #if defined(CRYPTOPP_EXTENDED_VALIDATION) struct ASN1_TestTuple { - int disposition; - int identifier; - const char* name; - const char* data; - size_t len; + ASN1_TestTuple(int tag, int result, const char* data, size_t len) { + m_result = result; + m_tag = tag; + m_data = std::string(data, len); + } + + std::string Name() const { + return Id2String(); + } + + const byte* Data() const { + return reinterpret_cast(&m_data[0]); + } + + size_t Size() const { + return m_data.size(); + } + + int Tag() const { + return m_tag; + } + + int Result() const { + return m_result; + } + + std::string Id2String() const + { + switch(m_tag) + { + case BIT_STRING: + return "BIT_STRING"; + case OCTET_STRING: + return "OCTET_STRING"; + case INTEGER: + return "INTEGER"; + case UTF8_STRING: + return "UTF8_STRING"; + case PRINTABLE_STRING: + return "PRINTABLE_STRING"; + case IA5_STRING: + return "IA5_STRING"; + default: + return "Unknown"; + } + } + +protected: + std::string m_data; + int m_tag, m_result; }; bool RunASN1TestSet(const ASN1_TestTuple asnTuples[], size_t count) @@ -1268,8 +1313,8 @@ bool RunASN1TestSet(const ASN1_TestTuple asnTuples[], size_t count) for(size_t i=0; i r', +// where 'r' is rate and acts like a blockSize, then TruncatedFinal acts +// like a traditional KDF and applies KeccakF1600 core function multiple +// times on state to create the stream. Regarding the NIST test vectors, +// the SHAKE128 KATs do not engage 'd > r'. However, the SHAKE256 KATs +// do engage it. +bool ValidateSHAKE_XOF() +{ + std::cout << "\nSHAKE XOF validation suite running...\n"; + bool pass = true, fail; + + ////// NIST test vectors SHAKE128VariableOut.rsp ////// + + // SHAKE128, COUNT = 0 (first test) + { + std::string m, msg = "84e950051876050dc851fbd99e6247b8"; + std::string o, out = "8599bd89f63a848c49ca593ec37a12c6"; + std::string r; + + StringSource(msg, true, new HexDecoder(new StringSink(m))); + StringSource(out, true, new HexDecoder(new StringSink(o))); + r.reserve(o.size()); + + SHAKE128 hash((unsigned int)r.size()); + hash.Update((const byte*)&m[0], m.size()); + hash.TruncatedFinal((byte*)&o[0], o.size()); + + fail = (std::memcmp(r.data(), r.data(), o.size()) != 0); + pass = pass & !fail; + + if (fail) + std::cout << "FAILED " << "SHAKE128 test COUNT=0" << std::endl; + + pass = pass && !fail; + } + + // SHAKE128, COUNT = 1125 (last test) + { + std::string m, msg = "0a13ad2c7a239b4ba73ea6592ae84ea9"; + std::string o, out = "5feaf99c15f48851943ff9baa6e5055d 8377f0dd347aa4dbece51ad3a6d9ce0c" + "01aee9fe2260b80a4673a909b532adcd d1e421c32d6460535b5fe392a58d2634" + "979a5a104d6c470aa3306c400b061db9 1c463b2848297bca2bc26d1864ba49d7" + "ff949ebca50fbf79a5e63716dc82b600 bd52ca7437ed774d169f6bf02e464879" + "56fba2230f34cd2a0485484d"; + std::string r; + + StringSource(msg, true, new HexDecoder(new StringSink(m))); + StringSource(out, true, new HexDecoder(new StringSink(o))); + r.reserve(o.size()); + + SHAKE128 hash((unsigned int)r.size()); + hash.Update((const byte*)&m[0], m.size()); + hash.TruncatedFinal((byte*)&o[0], o.size()); + + fail = (std::memcmp(r.data(), r.data(), o.size()) != 0); + pass = pass & !fail; + + if (fail) + std::cout << "FAILED " << "SHAKE128 test COUNT=1125" << std::endl; + + pass = pass && !fail; + } + + ////// NIST test vectors SHAKE256VariableOut.rsp ////// + + // SHAKE256, COUNT = 0 (first test) + { + std::string m, msg = "c61a9188812ae73994bc0d6d4021e31b f124dc72669749111232da7ac29e61c4"; + std::string o, out = "23ce"; + std::string r; + + StringSource(msg, true, new HexDecoder(new StringSink(m))); + StringSource(out, true, new HexDecoder(new StringSink(o))); + r.reserve(o.size()); + + SHAKE256 hash((unsigned int)r.size()); + hash.Update((const byte*)&m[0], m.size()); + hash.TruncatedFinal((byte*)&o[0], o.size()); + + fail = (std::memcmp(r.data(), r.data(), o.size()) != 0); + pass = pass & !fail; + + if (fail) + std::cout << "FAILED " << "SHAKE256 test COUNT=0" << std::endl; + + pass = pass && !fail; + } + + // SHAKE256, COUNT = 1245 (last test) + { + std::string m, msg = "8d8001e2c096f1b88e7c9224a086efd4 797fbf74a8033a2d422a2b6b8f6747e4"; + std::string o, out = "2e975f6a8a14f0704d51b13667d8195c 219f71e6345696c49fa4b9d08e9225d3" + "d39393425152c97e71dd24601c11abcf a0f12f53c680bd3ae757b8134a9c10d4" + "29615869217fdd5885c4db174985703a 6d6de94a667eac3023443a8337ae1bc6" + "01b76d7d38ec3c34463105f0d3949d78 e562a039e4469548b609395de5a4fd43" + "c46ca9fd6ee29ada5efc07d84d553249 450dab4a49c483ded250c9338f85cd93" + "7ae66bb436f3b4026e859fda1ca57143 2f3bfc09e7c03ca4d183b741111ca048" + "3d0edabc03feb23b17ee48e844ba2408 d9dcfd0139d2e8c7310125aee801c61a" + "b7900d1efc47c078281766f361c5e611 1346235e1dc38325666c"; + std::string r; + + StringSource(msg, true, new HexDecoder(new StringSink(m))); + StringSource(out, true, new HexDecoder(new StringSink(o))); + r.reserve(o.size()); + + SHAKE256 hash((unsigned int)r.size()); + hash.Update((const byte*)&m[0], m.size()); + hash.TruncatedFinal((byte*)&o[0], o.size()); + + fail = (std::memcmp(r.data(), r.data(), o.size()) != 0); + pass = pass & !fail; + + if (fail) + std::cout << "FAILED " << "SHAKE256 test COUNT=0" << std::endl; + + pass = pass && !fail; + } + + std::cout << (!pass ? "FAILED " : "passed ") << " SHAKE XOF message digests" << std::endl; + + return pass; +} + bool ValidateTiger() { std::cout << "\nTiger validation suite running...\n\n"; diff --git a/vendor/cryptopp/vendor_cryptopp/validat7.cpp b/vendor/cryptopp/vendor_cryptopp/validat7.cpp index b240993f..ad8bf755 100644 --- a/vendor/cryptopp/vendor_cryptopp/validat7.cpp +++ b/vendor/cryptopp/vendor_cryptopp/validat7.cpp @@ -404,7 +404,7 @@ bool TestX25519() int ret2 = Donna::curve25519_mult(share2, priv2, pub1); int ret3 = std::memcmp(share1, share2, 32); -#if defined(NO_OS_DEPENDENCE) +#if defined(CRYPTOPP_DISABLE_NACL) int ret4=0, ret5=0, ret6=0; #else // Bernstein's NaCl requires DefaultAutoSeededRNG. @@ -436,7 +436,7 @@ bool TestEd25519() std::cout << "\nTesting ed25519 Signatures...\n\n"; bool pass = true; -#ifndef NO_OS_DEPENDENCE +#ifndef CRYPTOPP_DISABLE_NACL const unsigned int SIGN_COUNT = 64, MSG_SIZE=128; const unsigned int NACL_EXTRA=NaCl::crypto_sign_BYTES; @@ -537,6 +537,59 @@ bool TestEd25519() else std::cout << "FAILED:"; std::cout << " " << SIGN_COUNT << " verifications" << std::endl; + + // Test signature verification using streams + for (unsigned int i = 0; i r, needs hand crafted tests +bool ValidateKeccak(); bool ValidateTiger(); bool ValidateRIPEMD(); bool ValidatePanama(); @@ -100,6 +110,7 @@ bool ValidateHC256(); bool ValidateRabbit(); bool ValidateSalsa(); bool ValidateChaCha(); +bool ValidateChaChaTLS(); bool ValidateSosemanuk(); bool ValidateVMAC(); @@ -205,10 +216,10 @@ inline std::string TimeToString(const time_t& t) // Cleanup whitespace std::string::size_type pos = 0; - while (!str.empty() && std::isspace(*(str.end()-1))) + while (!str.empty() && std::isspace(str[str.length()-1])) {str.erase(str.end()-1);} while (!str.empty() && std::string::npos != (pos = str.find(" ", pos))) - { str.erase(pos, 1); } + {str.erase(pos, 1);} return str; } @@ -252,39 +263,68 @@ inline int StringToValue(const std::string& str) inline std::string AddSeparator(std::string str) { - const char last = (str.empty() ? '\0' : *str.end()-1); + if (str.empty()) return ""; + const char last = str[str.length()-1]; if (last != '/' && last != '\\') return str + "/"; return str; } -// Ideally we would cache the directory and just add the prefix -// to subsequent calls, but ... Static Initialization Order Fiasco +// Use CRYPTOPP_DATA_DIR last. The problem this sidesteps is, finding an +// old version of Crypto++ library in CRYPTOPP_DATA_DIR when the library +// has been staged in DESTDIR. Using CRYPTOPP_DATA_DIR first only works +// as expected when CRYPTOPP_DATA_DIR is empty before an install. We +// encountered this problem rather quickly during testing of Crypto++ 8.1 +// when Crypto++ 8.0 was installed locally. It took some time to realize +// where the old test data was coming from. +static std::string GetDataDir() +{ + std::ifstream file; + std::string name, filename = "TestData/usage.dat"; + +#ifndef CRYPTOPP_DISABLE_DATA_DIR_SEARCH + // Look in $ORIGIN/../share/. This is likely a Linux install directory. + name = AddSeparator(g_argvPathHint) + std::string("../share/cryptopp/") + filename; + file.open(name.c_str()); + if (file.is_open()) + return AddSeparator(g_argvPathHint) + std::string("../share/cryptopp/"); +#endif +#ifndef CRYPTOPP_DISABLE_DATA_DIR_SEARCH + // Look in current working directory + name = AddSeparator(g_argvPathHint) + filename; + file.open(name.c_str()); + if (file.is_open()) + return AddSeparator(g_argvPathHint); +#endif +#ifdef CRYPTOPP_DATA_DIR + // Honor CRYPTOPP_DATA_DIR. This is likely an install directory if it is not "./". + name = AddSeparator(CRYPTOPP_DATA_DIR) + filename; + file.open(name.c_str()); + if (file.is_open()) + return AddSeparator(CRYPTOPP_DATA_DIR); +#endif + return "./"; +} + inline std::string DataDir(const std::string& filename) { std::string name; std::ifstream file; -#ifndef CRYPTOPP_DISABLE_DATA_DIR_SEARCH - // Data files in PWD are probably the newest. This is probably a build directory. - name = std::string("./") + filename; - file.open(name.c_str()); - if (file.is_open()) - return name; -#endif -#ifdef CRYPTOPP_DATA_DIR - // Honor the user's setting next. This is likely an install directory if it is not "./". - name = AddSeparator(CRYPTOPP_DATA_DIR) + filename; - file.open(name.c_str()); - if (file.is_open()) - return name; -#endif -#ifndef CRYPTOPP_DISABLE_DATA_DIR_SEARCH - // Finally look in $ORIGIN/../share/. This is likely a Linux install directory for users. - name = std::string("../share/cryptopp/") + filename; + +#if CRYPTOPP_CXX11_DYNAMIC_INIT + static std::string path = AddSeparator(GetDataDir()); + name = path + filename; + file.open(name.c_str()); + if (file.is_open()) + return name; +#else + // Avoid static initialization problems + name = AddSeparator(GetDataDir()) + filename; file.open(name.c_str()); if (file.is_open()) return name; #endif + // This will cause the expected exception in the caller return filename; } diff --git a/vendor/cryptopp/vendor_cryptopp/vmac.cpp b/vendor/cryptopp/vendor_cryptopp/vmac.cpp index 8312854b..535cce21 100644 --- a/vendor/cryptopp/vendor_cryptopp/vmac.cpp +++ b/vendor/cryptopp/vendor_cryptopp/vmac.cpp @@ -435,7 +435,7 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64, #define AccumulateNH(a, b, c) a += word128(b)*(c) #define Multiply128(r, i1, i2) r = word128(word64(i1)) * word64(i2) #else - #if _MSC_VER >= 1400 && !defined(__INTEL_COMPILER) && !defined(_M_ARM) + #if _MSC_VER >= 1400 && !defined(__INTEL_COMPILER) && (defined(_M_IX86) || defined(_M_X64) || defined(_M_IA64)) #define MUL32(a, b) __emulu(word32(a), word32(b)) #else #define MUL32(a, b) ((word64)((word32)(a)) * (word32)(b)) diff --git a/vendor/cryptopp/vendor_cryptopp/vs2005.zip b/vendor/cryptopp/vendor_cryptopp/vs2005.zip index f2de526c44c1fe06c37d4919f234fbd3ea9be230..8ff7d5f579bf0eb3cad066f616a0b21f759fe3a3 100644 GIT binary patch delta 3817 zcmV<}@bCXdKHGksB68)T&_CHwM(P~zENo->X zXp*}kCd?w`fdVtxl}18syMdngHQnum+{b^v-L?sV48d{N?o71)Fp(csr>m=~t4`a% z9R0coeC-xfMxyYzX6)-V4To;zk#Kfgn>l8~Fl)d5>&G9CJ`$E7f5a1yL_->V#xDQy zhrRr0e19L~<60)7*}wc!6SqDtLEHPfE-zf5KnS_?KIWM5+DiNVhe7YS_Mgsax8Jpz zt$Mq2V%4qoVW-~hS^c_g+6~Jv+LqmK{!gl1MG==^EJp4IqOf%DXy_w8jcCB++3HlD z9G z#PEMt7VTXoJWhCzP~n=0-XGWAyj>11b$HKk`UiJy~QDy zw=?;JtqOL+cod{MMZ|wUKkFfm-s2DpS46ak&NX&MnBEdsPHA!fBHi;r@2rTNeP%~N zEYj~0>fXBRa^H%~@JWdKN$AS!r;8YcY=2GQG(?V%MFLSG?zl@yc3k5$!AtCb@V*ES z9!5l_+WK7)hL}b!W-OvTJQdlHBV6=OPd>bVH?c1-Mwe%&@2&?I%bedE$pL3WVSieA z9>Iwu;;STjNVMG2rGaPo7W-!;yxCM287d5NGY5IUVdP=D0=Y&s6dI}aajmg5CVz=z zD(oL|M0paQpfHq5k5GHqNoIpkuBFt&{q$gk&?8J*H;S=Kro_#M5k9a)Mcoz8a}v^da$nW78hn{FX z1hc%P`^4E7|FmmnP8w!<_~z}!<$vJfx6`Y^_~*j0S`Cut(6S_^L%q1T?&WJ3Z|1<- zprgbY-7}7ZhqAR?k@yNvF%>hFqpvSJ`|`Zk9rq(YYrp0$e|Duqi#T3n6q$+^Sw!~t zo)EvmMMO`STU4~au%oz$U^k8ha}bNBSi+0?DpJRf?t_9kIE)zI-X)F>)_=lYtamS& zLe;se&RunGu+E){orZHHYNa;_nYfo~q&c?)tNMGf;N??%6CTz09A^kZ zTZ^;$_D?OMPkO)|8sd=<+n=H^_gVmTGd z`35ZKQM)P2aVkpkS|~}W=Q zKPXmFm10r+`%x7TCi2w}+ioKs&wp07q9@;qp1kg!xw8b8ZGWFtoBXcZWbsY>&J3xV zWU&}lP4drgl2!XF=G9!PYJarrz$d$jq`_JeMk>Q|44_( zOc;wed`#1eWg}-2$F+UF;MtWAA^DQvfyj2AI^ww2wmQ14n|58d4o~Wq-k8?A-Hu*A zF;6?qwr%(APJg}_^NC9fvWZ_|k-p>>4-ucQjs6K?wi%q>8!I*R8Lh{ffxl3v~b znHY^$0|tps-B#zYqYj4A0sw@OS*Q*(gIE=F*D%`v z^6x`{1#yF27u~4i_!z*L08xNK5mI%G$OUM5vDlgf0B)hkaR@;EUWxr&fYouRD18ya zF$_|C<1%AnOqxJ&3?PN*ojL|XK19c27y*zTP@=2?Z0ayM(^v%<4)P(uaF7oHhJyr! zbCC}LL;~yr&?A8p0dR9h;yGe-0H6S30R$ERNW^e}!UV#}F-WX91eN7;it&^{#EScD zqVkks4U2>9K5ju!?$8YY8@-!TKaQejNm6>qF@McY`kRj-N9k(-&5peMiFAMY7}Aa7 z?8***Y%hn)Y{BIO;f%pF#-^!&tX(Ilr-h_%5%Ddh|(QEkQka`s-C_K(-?scz39&UfenSC)wlj577o1bUrPakmV?T*tioWr`~i+)gZF;qAV2?R!XoPA=-?~= zTc^1Ge^5&U1QY-O00;p6Se#9F0J7n54FCY~vuhh&34i32Ez@ci32-MXMc3AM%07L2 zvs?{v2<`x?D;9qyu<9dpltkbU^-7o(1K|lOaEzOoMN4+It)g64e@Tc$yE4Dnwg%(~y+wVuiLetY1BiBJ6lnT1dz={@tBrwY6##vw%oEgJw%8OS{j z;4($eHh8hw2Qrno&5ZU?;Irlj?CflPSzasIU_NvL0(i{&u&#NWCuU9qc;b6 zza3L3x(bNQ5};ZJ{6EYh)%48mBCmC3D*N^p0)L1|-&K#l5Ld7;zW$~3>o?`?5rMv? z-Y(|QslUFpwe~BxDWJhk9|M;7ZRV>_d*(g35Av1qGW3LGe(6h1rF(Pm@NY)AW5iGX z&4}InPpM3hApM&W!Ss^n$$=sC+HHs;EL9MeWh2H=mx~x-rMHQ3eQr7!YpTs*jBtuW zSbvs77(lZO!XUW~X?B=B7-3!hUx>^y??P;rcNbuXS$82;X^3-aa}m;m23eLe7bDRp zx^%S&iz+8|$q*SQ5GFA>^AxoJnu`!4V#v!}T)9xW?ntyZ;0pl#?9>S&x_W-aL*!%Se$UftYgE-LHp|eMxwhusU(mn{I7?&mNL(n{3AHZgbiV)J}8G=d34u3*S zxna`1mG&?n#6ps$`GFA5hh}7(;0MCCFbva)@yFDJRuF6R2_c;DiDViY94-?P2oB;H z6WCo_he&9Sw5Qt46at}n>LY}u`bJ1-NOEYJOfxMZ9P=R~aQT@aP+?mE!?aEi%WYC8 zg!G`nl_#@6&^(m|$fk)b5H|MUoqz2#1qQ;o1Q-Z;ttbR$;O38( z1X7Te2}cKuyGMn9!&_7kEKu!UgYu^Lrw}f`J%zABV)5qibQZ#5^U3gJ7QhbAWg%>S zDhpws{q;J1IsQb}F;gB5Lrub|NU|eY6CT$RgWI0@ZhArAfA|;~`@`TP=25QbiXQ0c z;ZsWd=vnr@n%u`Kefd5VU9-q_AK$&%YkXoVA>o-$d?q?le5Rf@pZ^cD3n^a)4)Rl+ zO_n<|F8c`p0Pb^>crQmE{aBn$cL1{Ca18(e@w@;44*(bd000000RSKX004cH-Y--K fHYorAWNd7ckS{BfWH2HD@{@-!JO<(}00000kjf|o delta 3770 zcmV;r4n^_wVaZ{zLlF+f8;?y9NxFa12><{wa+6UJHGkX268-D~{SSn0P^9RUO;VIB zA@(g~%1QKE4xcS?&H7TS(36WJBn!Sv`J8Yh{4Cq+1Z)dnZqUR z9Q=A02F4BLg2mBc&Du3<293PfXVL7imda_pUHkQ4KmKs=o{5wMBboXv9`g7j_2iE~ z>=Z|r_kRgJtmPtx`^zsixb=R4+1@oxb>WPJAms7;L{cGZOYOJs2ED`De>%tAe%EQX z>g~>vQ+L|?oqD(D^y{weHXO@pJ8r-EKc#jN$5Mfbgm_O7!P1?BVL;?G=Alq$%Tsky z7;(j-hOOjx_SVYWwVb8I!QKk!!DSo=eHPICY=3X{)QzJlo28scn15l!%C$$MT+o0L zLI1n7Xy-hYNh*7cgKJ`be^`6s~<$4}#E5Gwj(DUhO-#x6E`GxM~$tjCi$o@@*dyz($ETkuF!U?~BC&&ymrz8-x zz<-?+PCT%6MCDsPN=_cgX2c$^!rRhDK7| z&gJ*kD!8eTahU0p5&!-4q(>xqOCt)dhED>@lbe#1O9rMvqV>7EXHCuQW^6E_YM zNWVv@JFBiMd<&Tou!#24$Wzyk?-CM;6@P)_h)eRkv!!efsL5%V6MLN*i#XT9U2cW>W}-Se~2`N{E{tHIeK=XXYGz}XP&&kD~Y zI7lM7OrnQGD=b|YctUSzaKfVNr|OWQV33zP$p4KJpYkQh72y$RWZH+d#=@91Nq;!l zKazyYG&v$sq?8_^_UI&?4I;IcG7tB&gC#|&QsmI0BxXasxVY{VYnVRGft5i= z>11>-Bn=NxUNq{-PqA8c~P+uW+g7`ixnS;Yv$n{;~U~eVt<$rqjf+K_uW_rjg~`0<7xq<$_m8RsDTa3I5Cb`_3idGb&GsH-{At zc>A0DT=o60+V^`WC-p&?#9SKNJideaxX8jnJy)!Hf4N9jz5i?Ue)r;!;pO>oI3Ao1 z&o3@VIR|*41dFoxXOV%b&3~7RQz3=W=AnLsA&LBxtSM1%9vhc)CJgU!Sur^MltQh7 z%c`ZvNwVt)!R}B0xHEfi)X(mlO!JR8H9Qg-6SZm$CXIWTpP<3iNCkM*kaLQP5D=nug$82%!Ej_)j#;;j8xk-d>Zfl&mEAQ4Q-3wk^HHC{s_|hK z;5B6p=o+^SEQw-iOsJZ&V32SCn~n7_$}^la3Lr9Ss1(=^pT*#r$132m73XXU&G*2l z*7dW$oJduK>H8r}<@Zb~y0jXWiY_gyVMUiJx>V7niY_feQ_-at(4}hM>HDQoS&nSG z>y#^_H`;kQW26z<*Xtk6(RZT5~&DDMM%C4LQ?IWd~ZbM#TzCYKNPE| zO1UWh{iq5G6Z!1Nw(E$;m%o**=*icjC*OC^+*ks)ZJ$+}{C}p~Wci2qjTurk$#OBQ zn&h9~B&+sU&Z~t~)&4dWw{6>B_4N2nw#6rx@;~OV{Hh`sd2;^nS0A!N=pWe-xe1pL zhxb`}iG1W-;;^>H&+bI@fF@JGoK|b*d3hB#k=#a?y%IF^m70WRfihD})B_Kh70Kys3N0|hWj5Zd| z1Pchk$sS}*5McPo^FjoWIn*c&W99_Invi(g;#) z!6>;y01<2!>BG!0@_6o9b{hl6Znh9$*laElV6Ocs0)Gn1qPix*eT1+euBqpdYki!6 zA{Y}Aj!-Bfu8$FW2u&)1hlvouEu2gy3?Y9n;0Y|G`Zyd)UrcC%gOpr*!WvuSCK8-L zNFjc!k0D5a(Xj+22sBVo>LZ|FP!j-waJS6ylqF(pwM`^QR5%2#t5C+a?I0UAhK`60 z*=VC%*?+WbY)Di%1O}*3mI1a+oSbPa1B?gx5MVsWhXCV2qQZG3zyM+)^$_S0;KT^r zT(D$L#2f)A#8?2Kg8&i>8j>i*aB_kYD~Um6<(yMGWf-xNff!@$3rLCb^l^iNa!ale z*y!z?2T2@%ktAh@lJfkd|8(PUlx^G_ZtNF($bbFC#-W!a`IQX@5q}zx@0)kk#w7tfPIiZn>sicN)$8dfV!^>+K_}d(?HEcJsJfsuL{6|IqNMfcdDA zU+#z{$}PFqN6Fp-=|McaDA9$1>T9=e5MbarNf*YaQy-{|wag417+V`gc$7=sIn6E8 zcC~$qp^?<}Zt?010ft{AOzN5?ABlIZ3-c)@oZjf>jJ%E2D;Ztir0Ta>G%@b% zX4C5Ef=CWe`}-CKOvCviamWtW?|-`GzuaLc@u%Nj&-3%=TW)5%GwE29{W=i$M&0R5 zNPRN3TJ@&mPs}E1`pv1I>u#7x_9kO7&PzNnCF&K@{WhwLU-nn2%O9KQH000080MZ+eO*zAgDRZo}dE9xRqG6WLMiN z%60XZgh;fjQ&xk=Wz0gWjNDp!EDk_#rO^{Jx>sfyqXS7Po+&^x_+W90!Y7-whL3OS z8%i}N9_Xd@jllJF4NHAPuD~&I6UcuM{~^IF+wE29ne5KD2VR)?)IX3}1T>PJGp~87 zxM^Y-QB=^f@!OPf*yH#sQ}k?Oue(ZTrm#ty(2Ll~&+pgHLE`Vo93F2(%|V|t60;iQ zMb-7}PUAv$@G~27bCCDjF@>V5fXFNXs%60c!z@xw&)hEZT4$!RZ*L)hi1dG5_4o^M z1qswoEzk-_r8r<|TV2PhrzWTIh-h=xfUl}h$PsqiW zzSLB@HwO>@#hFaQFCkWfe9HdKdhk=*a0xeB$2XR?yJA@V3f+bCB z2XHojS?>mlVq88v2n4&*=E6g;G!q^IUim$U1Dzc@d*oU70MzE(gD{G5S-w34&9m(R zY?fyTAzhjvn1t*g#FT#;9rlG;%5($CeAdWGC-K}$ogyu+ls?AIx5SnK$LRhMAgoK79ho;FiQ4+#2A2I@$ zUI_vfwiPhU$^^08=43)h4;ox~E(!$AGf{wSnuh{mV-MchPBVX4Ae_rzfsi-8-42DM zh3B9w?*&FOD5x0byg*nF^0qeL1%yG1`|Q3NLS}y>9%A#mY7m=VGebyh_LA7%l)OPG zcfAY(LrhKuN6qQQGKllKp}O|1(AO-8V3)rdm(Iub!P;HY|2EII@Z_(G`u8+z%gnG?rs)BYTt{op_$*S z0$7c0GThyYLSP1N{%A=c1!S^=&{{XW#DPIN-#v6}K5lOm#(g^?nF>;fmFGnBJ8;?yn!;0l@4FCYJyZ`_X02lxO k0000103ZMW092C+FjN5xlU^`W0mqZFFgymgE&u=k091=A)&Kwi diff --git a/vendor/cryptopp/vendor_cryptopp/xed25519.cpp b/vendor/cryptopp/vendor_cryptopp/xed25519.cpp index 05414e45..42694050 100644 --- a/vendor/cryptopp/vendor_cryptopp/xed25519.cpp +++ b/vendor/cryptopp/vendor_cryptopp/xed25519.cpp @@ -116,8 +116,8 @@ x25519::x25519(const Integer &x) x25519::x25519(RandomNumberGenerator &rng) { rng.GenerateBlock(m_sk, SECRET_KEYLENGTH); - m_sk[0] &= 248; m_sk[31] &= 127; m_sk[31] |= 64; - Donna::curve25519_mult(m_pk, m_sk); + ClampKey(m_sk); + SecretToPublicKey(m_pk, m_sk); } x25519::x25519(BufferedTransformation ¶ms) @@ -125,10 +125,9 @@ x25519::x25519(BufferedTransformation ¶ms) Load(params); } -void x25519::ClampKeys(byte y[PUBLIC_KEYLENGTH], byte x[SECRET_KEYLENGTH]) const +void x25519::ClampKey(byte x[SECRET_KEYLENGTH]) const { x[0] &= 248; x[31] &= 127; x[31] |= 64; - Donna::curve25519_mult(y, x); } bool x25519::IsClamped(const byte x[SECRET_KEYLENGTH]) const @@ -141,6 +140,11 @@ bool x25519::IsSmallOrder(const byte y[PUBLIC_KEYLENGTH]) const return HasSmallOrder(y); } +void x25519::SecretToPublicKey(byte y[PUBLIC_KEYLENGTH], const byte x[SECRET_KEYLENGTH]) const +{ + Donna::curve25519_mult(y, x); +} + void x25519::BERDecodeAndCheckAlgorithmID(BufferedTransformation &bt) { // We have not yet determined the OID to use for this object. @@ -269,10 +273,10 @@ bool x25519::Validate(RandomNumberGenerator &rng, unsigned int level) const return false; if (level >= 3) { - SecByteBlock sk(m_sk, SECRET_KEYLENGTH), pk(PUBLIC_KEYLENGTH); - ClampKeys(pk, sk); + // Verify m_pk is pairwise consistent with m_sk + SecByteBlock pk(PUBLIC_KEYLENGTH); + SecretToPublicKey(pk, m_sk); - // Secret key is already clamped, bufs are equal if (VerifyBufsEqual(pk, m_pk, PUBLIC_KEYLENGTH) == false) return false; } @@ -327,6 +331,10 @@ void x25519::AssignFrom(const NameValuePairs &source) { m_oid = oid; } + + bool derive = false; + if (source.GetValue("DerivePublicKey", derive) && derive == true) + SecretToPublicKey(m_pk, m_sk); } void x25519::GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs ¶ms) @@ -336,20 +344,20 @@ void x25519::GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &pa rng.IncorporateEntropy(seed.begin(), seed.size()); rng.GenerateBlock(m_sk, SECRET_KEYLENGTH); - m_sk[0] &= 248; m_sk[31] &= 127; m_sk[31] |= 64; - Donna::curve25519_mult(m_pk, m_sk); + ClampKey(m_sk); + SecretToPublicKey(m_pk, m_sk); } void x25519::GeneratePrivateKey(RandomNumberGenerator &rng, byte *privateKey) const { rng.GenerateBlock(privateKey, SECRET_KEYLENGTH); - privateKey[0] &= 248; privateKey[31] &= 127; privateKey[31] |= 64; + ClampKey(privateKey); } void x25519::GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const { CRYPTOPP_UNUSED(rng); - Donna::curve25519_mult(publicKey, privateKey); + SecretToPublicKey(publicKey, privateKey); } bool x25519::Agree(byte *agreedValue, const byte *privateKey, const byte *otherPublicKey, bool validateOtherPublicKey) const @@ -365,18 +373,12 @@ bool x25519::Agree(byte *agreedValue, const byte *privateKey, const byte *otherP // ******************** ed25519 Signer ************************* // -void ed25519PrivateKey::ClampKeys(byte y[PUBLIC_KEYLENGTH], byte x[SECRET_KEYLENGTH]) const +void ed25519PrivateKey::SecretToPublicKey(byte y[PUBLIC_KEYLENGTH], const byte x[SECRET_KEYLENGTH]) const { - x[0] &= 248; x[31] &= 127; x[31] |= 64; int ret = Donna::ed25519_publickey(y, x); CRYPTOPP_ASSERT(ret == 0); CRYPTOPP_UNUSED(ret); } -bool ed25519PrivateKey::IsClamped(const byte x[SECRET_KEYLENGTH]) const -{ - return (x[0] & 248) == x[0] && (x[31] & 127) == x[31] && (x[31] | 64) == x[31]; -} - bool ed25519PrivateKey::IsSmallOrder(const byte y[PUBLIC_KEYLENGTH]) const { return HasSmallOrder(y); @@ -385,19 +387,16 @@ bool ed25519PrivateKey::IsSmallOrder(const byte y[PUBLIC_KEYLENGTH]) const bool ed25519PrivateKey::Validate(RandomNumberGenerator &rng, unsigned int level) const { CRYPTOPP_UNUSED(rng); - CRYPTOPP_ASSERT(IsClamped(m_sk) == true); CRYPTOPP_ASSERT(IsSmallOrder(m_pk) == false); - if (level >= 1 && IsClamped(m_sk) == false) - return false; - if (level >= 2 && IsSmallOrder(m_pk) == true) + if (level >= 1 && IsSmallOrder(m_pk) == true) return false; if (level >= 3) { - SecByteBlock sk(m_sk, SECRET_KEYLENGTH), pk(PUBLIC_KEYLENGTH); - ClampKeys(pk, sk); + // Verify m_pk is pairwise consistent with m_sk + SecByteBlock pk(PUBLIC_KEYLENGTH); + SecretToPublicKey(pk, m_sk); - // Secret key is already clamped, bufs are equal if (VerifyBufsEqual(pk, m_pk, PUBLIC_KEYLENGTH) == false) return false; } @@ -454,11 +453,10 @@ void ed25519PrivateKey::AssignFrom(const NameValuePairs &source) m_oid = oid; } - bool clamp = false; - if (source.GetValue("Clamp", clamp) && clamp == true) - ClampKeys(m_pk, m_sk); + bool derive = false; + if (source.GetValue("DerivePublicKey", derive) && derive == true) + SecretToPublicKey(m_pk, m_sk); - CRYPTOPP_ASSERT(IsClamped(m_sk) == true); CRYPTOPP_ASSERT(IsSmallOrder(m_pk) == false); } @@ -468,8 +466,7 @@ void ed25519PrivateKey::GenerateRandom(RandomNumberGenerator &rng, const NameVal if (params.GetValue(Name::Seed(), seed) && rng.CanIncorporateEntropy()) rng.IncorporateEntropy(seed.begin(), seed.size()); - rng.GenerateBlock(m_sk, 32); - m_sk[0] &= 248; m_sk[31] &= 127; m_sk[31] |= 64; + rng.GenerateBlock(m_sk, SECRET_KEYLENGTH); int ret = Donna::ed25519_publickey(m_pk, m_sk); CRYPTOPP_ASSERT(ret == 0); CRYPTOPP_UNUSED(ret); } @@ -537,7 +534,6 @@ void ed25519PrivateKey::BERDecode(BufferedTransformation &bt) if (generatePublicKey) Donna::ed25519_publickey(m_pk, m_sk); - CRYPTOPP_ASSERT(IsClamped(m_sk) == true); CRYPTOPP_ASSERT(IsSmallOrder(m_pk) == false); } @@ -601,7 +597,7 @@ void ed25519PrivateKey::SetPrivateExponent (const byte x[SECRET_KEYLENGTH]) { AssignFrom(MakeParameters (Name::PrivateExponent(), ConstByteArrayParameter(x, SECRET_KEYLENGTH)) - ("Clamp", true)); + ("DerivePublicKey", true)); } void ed25519PrivateKey::SetPrivateExponent (const Integer &x) @@ -613,7 +609,7 @@ void ed25519PrivateKey::SetPrivateExponent (const Integer &x) AssignFrom(MakeParameters (Name::PrivateExponent(), ConstByteArrayParameter(bx, SECRET_KEYLENGTH, false)) - ("Clamp", true)); + ("DerivePublicKey", true)); } const Integer& ed25519PrivateKey::GetPrivateExponent() const @@ -635,7 +631,7 @@ ed25519Signer::ed25519Signer(const byte x[SECRET_KEYLENGTH]) { AccessPrivateKey().AssignFrom(MakeParameters (Name::PrivateExponent(), ConstByteArrayParameter(x, SECRET_KEYLENGTH, false)) - ("Clamp", true)); + ("DerivePublicKey", true)); } ed25519Signer::ed25519Signer(const Integer &y, const Integer &x) @@ -661,7 +657,7 @@ ed25519Signer::ed25519Signer(const Integer &x) AccessPrivateKey().AssignFrom(MakeParameters (Name::PrivateExponent(), ConstByteArrayParameter(bx, SECRET_KEYLENGTH, false)) - ("Clamp", true)); + ("DerivePublicKey", true)); } ed25519Signer::ed25519Signer(RandomNumberGenerator &rng) @@ -689,6 +685,17 @@ size_t ed25519Signer::SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccum return ret == 0 ? SIGNATURE_LENGTH : 0; } +size_t ed25519Signer::SignStream (RandomNumberGenerator &rng, std::istream& stream, byte *signature) const +{ + CRYPTOPP_ASSERT(signature != NULLPTR); CRYPTOPP_UNUSED(rng); + + const ed25519PrivateKey& pk = static_cast(GetPrivateKey()); + int ret = Donna::ed25519_sign(stream, pk.GetPrivateKeyBytePtr(), pk.GetPublicKeyBytePtr(), signature); + CRYPTOPP_ASSERT(ret == 0); + + return ret == 0 ? SIGNATURE_LENGTH : 0; +} + // ******************** ed25519 Verifier ************************* // bool ed25519PublicKey::GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const @@ -860,4 +867,15 @@ bool ed25519Verifier::VerifyAndRestart(PK_MessageAccumulator &messageAccumulator return ret == 0; } +bool ed25519Verifier::VerifyStream(std::istream& stream, const byte *signature, size_t signatureLen) const +{ + CRYPTOPP_ASSERT(signatureLen == SIGNATURE_LENGTH); + CRYPTOPP_UNUSED(signatureLen); + + const ed25519PublicKey& pk = static_cast(GetPublicKey()); + int ret = Donna::ed25519_sign_open(stream, pk.GetPublicKeyBytePtr(), signature); + + return ret == 0; +} + NAMESPACE_END // CryptoPP diff --git a/vendor/cryptopp/vendor_cryptopp/xed25519.h b/vendor/cryptopp/vendor_cryptopp/xed25519.h index 354d49ae..c0e0dd30 100644 --- a/vendor/cryptopp/vendor_cryptopp/xed25519.h +++ b/vendor/cryptopp/vendor_cryptopp/xed25519.h @@ -1,8 +1,8 @@ // xed25519.h - written and placed in public domain by Jeffrey Walton // Crypto++ specific implementation wrapped around Andrew // Moon's public domain curve25519-donna and ed25519-donna, -// https://github.com/floodyberry/curve25519-donna and -// https://github.com/floodyberry/ed25519-donna. +// http://github.com/floodyberry/curve25519-donna and +// http://github.com/floodyberry/ed25519-donna. // Typically the key agreement classes encapsulate their data more // than x25519 does below. They are a little more accessible @@ -23,15 +23,15 @@ /// clamed with 248. That is my_arr[0] &= 248 to mask the lower 3 bits. /// \details PKCS8 and X509 keys encoded using ASN.1 follow little endian /// arrays. The format is specified in draft-ietf-curdle-pkix. +/// "http:///tools.ietf.org/html/draft-ietf-curdle-pkix">draft-ietf-curdle-pkix. /// \details If you have a little endian array and you want to wrap it in /// an Integer using big endian then you can perform the following: ///
Integer x(my_arr, SECRET_KEYLENGTH, UNSIGNED, LITTLE_ENDIAN_ORDER);
/// \sa Andrew Moon's x22519 GitHub curve25519-donna, +/// HREF="http://github.com/floodyberry/curve25519-donna">curve25519-donna, /// ed22519 GitHub ed25519-donna, and -/// draft-ietf-curdle-pkix +/// HREF="http://github.com/floodyberry/ed25519-donna">ed25519-donna, and +/// draft-ietf-curdle-pkix /// \since Crypto++ 8.0 #ifndef CRYPTOPP_XED25519_H @@ -111,11 +111,10 @@ public: x25519(const OID &oid); /// \brief Clamp a private key - /// \param y public key /// \param x private key /// \details ClampKeys() clamps a private key and then regenerates the /// public key from the private key. - void ClampKeys(byte y[PUBLIC_KEYLENGTH], byte x[SECRET_KEYLENGTH]) const; + void ClampKey(byte x[SECRET_KEYLENGTH]) const; /// \brief Determine if private key is clamped /// \param x private key @@ -125,7 +124,7 @@ public: /// \param y public key bool IsSmallOrder(const byte y[PUBLIC_KEYLENGTH]) const; - /// \Brief Get the Object Identifier + /// \brief Get the Object Identifier /// \returns the Object Identifier /// \details The default OID is from RFC 8410 using id-X25519. /// The default private key format is RFC 5208. @@ -133,7 +132,7 @@ public: return m_oid.Empty() ? ASN1::X25519() : m_oid; } - /// \Brief Set the Object Identifier + /// \brief Set the Object Identifier /// \param oid the new Object Identifier void SetAlgorithmID(const OID& oid) { m_oid = oid; @@ -156,7 +155,7 @@ public: /// The default private key format is RFC 5208, which is the old format. /// The old format provides the best interop, and keys will work /// with OpenSSL. - /// \sa RFC 5958, Asymmetric + /// \sa RFC 5958, Asymmetric /// Key Packages void Save(BufferedTransformation &bt) const { DEREncode(bt, 0); @@ -175,7 +174,7 @@ public: /// the best interop, and keys will work with OpenSSL. The other /// option uses INTEGER 1. INTEGER 1 means RFC 5958 format, /// which is the new format. - /// \sa RFC 5958, Asymmetric + /// \sa RFC 5958, Asymmetric /// Key Packages void Save(BufferedTransformation &bt, bool v1) const { DEREncode(bt, v1 ? 0 : 1); @@ -183,7 +182,7 @@ public: /// \brief BER decode ASN.1 object /// \param bt BufferedTransformation object - /// \sa RFC 5958, Asymmetric + /// \sa RFC 5958, Asymmetric /// Key Packages void Load(BufferedTransformation &bt) { BERDecode(bt); @@ -236,6 +235,10 @@ public: void GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const; bool Agree(byte *agreedValue, const byte *privateKey, const byte *otherPublicKey, bool validateOtherPublicKey=true) const; +protected: + // Create a public key from a private key + void SecretToPublicKey(byte y[PUBLIC_KEYLENGTH], const byte x[SECRET_KEYLENGTH]) const; + protected: FixedSizeSecBlock m_sk; FixedSizeSecBlock m_pk; @@ -249,7 +252,22 @@ protected: /// digest the message incrementally. You should be careful with /// large messages like files on-disk. The behavior is by design /// because Bernstein feels small messages should be authenticated; -/// and larger messages will be hashed by the application. +/// and larger messages will be digested by the application. +/// \details The accumulator is used for signing and verification. +/// The first 64-bytes of storage is reserved for the signature. +/// During signing the signature storage is unused. During +/// verification the first 64 bytes holds the signature. The +/// signature is provided by the PK_Verifier framework and the +/// call to PK_Signer::InputSignature. Member functions data() +/// and size() refer to the accumulated message. Member function +/// signature() refers to the signature with an implicit size of +/// SIGNATURE_LENGTH bytes. +/// \details Applications which digest large messages, like an ISO +/// disk file, should take care because the design effectively +/// disgorges the format operation from the signing operation. +/// Put another way, be careful to ensure what you are signing is +/// is in fact a digest of the intended message, and not a different +/// message digest supplied by an attacker. struct ed25519_MessageAccumulator : public PK_MessageAccumulator { CRYPTOPP_CONSTANT(RESERVE_SIZE=2048+64) @@ -322,12 +340,10 @@ protected: /// class members of interest are byte arrays and not Integers. /// In addition, the byte arrays are little-endian meaning /// LSB is at element 0 and the MSB is at element 31. -/// If you call \ref ed25519PrivateKey::GetPrivateExponent() -/// "GetPrivateExponent()" then the little-endian byte array is -/// converted to a big-endian Integer() so it can be returned -/// the way a caller expects. And calling -/// \ref ed25519PrivateKey::SetPrivateExponent "SetPrivateExponent()" -/// perfoms a similar internal conversion. +/// If you call GetPrivateExponent() then the little-endian byte +/// array is converted to a big-endian Integer() so it can be +/// returned the way a caller expects. And calling +/// SetPrivateExponent perfoms a similar internal conversion. /// \since Crypto++ 8.0 struct ed25519PrivateKey : public PKCS8PrivateKey { @@ -362,7 +378,7 @@ struct ed25519PrivateKey : public PKCS8PrivateKey /// The default private key format is RFC 5208, which is the old format. /// The old format provides the best interop, and keys will work /// with OpenSSL. - /// \sa RFC 5958, Asymmetric + /// \sa RFC 5958, Asymmetric /// Key Packages void Save(BufferedTransformation &bt) const { DEREncode(bt, 0); @@ -381,7 +397,7 @@ struct ed25519PrivateKey : public PKCS8PrivateKey /// the best interop, and keys will work with OpenSSL. The other /// option uses INTEGER 1. INTEGER 1 means RFC 5958 format, /// which is the new format. - /// \sa RFC 5958, Asymmetric + /// \sa RFC 5958, Asymmetric /// Key Packages void Save(BufferedTransformation &bt, bool v1) const { DEREncode(bt, v1 ? 0 : 1); @@ -389,7 +405,7 @@ struct ed25519PrivateKey : public PKCS8PrivateKey /// \brief BER decode ASN.1 object /// \param bt BufferedTransformation object - /// \sa RFC 5958, Asymmetric + /// \sa RFC 5958, Asymmetric /// Key Packages void Load(BufferedTransformation &bt) { BERDecode(bt); @@ -439,17 +455,6 @@ struct ed25519PrivateKey : public PKCS8PrivateKey void SetPrivateExponent(const Integer &x); const Integer& GetPrivateExponent() const; - /// \brief Clamp a private key - /// \param y public key - /// \param x private key - /// \details ClampKeys() clamps a private key and then regenerates the - /// public key from the private key. - void ClampKeys(byte y[PUBLIC_KEYLENGTH], byte x[SECRET_KEYLENGTH]) const; - - /// \brief Determine if private key is clamped - /// \param x private key - bool IsClamped(const byte x[SECRET_KEYLENGTH]) const; - /// \brief Test if a key has small order /// \param y public key bool IsSmallOrder(const byte y[PUBLIC_KEYLENGTH]) const; @@ -468,6 +473,10 @@ struct ed25519PrivateKey : public PKCS8PrivateKey return m_pk.begin(); } +protected: + // Create a public key from a private key + void SecretToPublicKey(byte y[PUBLIC_KEYLENGTH], const byte x[SECRET_KEYLENGTH]) const; + protected: FixedSizeSecBlock m_sk; FixedSizeSecBlock m_pk; @@ -536,9 +545,13 @@ struct ed25519Signer : public PK_Signer ed25519Signer(BufferedTransformation ¶ms); // DL_ObjectImplBase + /// \brief Retrieves a reference to a Private Key + /// \details AccessKey() retrieves a non-const reference to a private key. PrivateKey& AccessKey() { return m_key; } PrivateKey& AccessPrivateKey() { return m_key; } + /// \brief Retrieves a reference to a Private Key + /// \details AccessKey() retrieves a const reference to a private key. const PrivateKey& GetKey() const { return m_key; } const PrivateKey& GetPrivateKey() const { return m_key; } @@ -565,6 +578,20 @@ struct ed25519Signer : public PK_Signer size_t SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart) const; + /// \brief Sign a stream + /// \param rng a RandomNumberGenerator derived class + /// \param stream an std::istream derived class + /// \param signature a block of bytes for the signature + /// \return actual signature length + /// \details SignStream() handles large streams. The Stream functions were added to + /// ed25519 for signing and verifying files that are too large for a memory allocation. + /// The functions are not present in other library signers and verifiers. + /// \details ed25519 is a determinsitic signature scheme. IsProbabilistic() + /// returns false and the random number generator can be NullRNG(). + /// \pre COUNTOF(signature) == MaxSignatureLength() + /// \since Crypto++ 8.1 + size_t SignStream (RandomNumberGenerator &rng, std::istream& stream, byte *signature) const; + protected: ed25519PrivateKey m_key; }; @@ -583,12 +610,10 @@ protected: /// class members of interest are byte arrays and not Integers. /// In addition, the byte arrays are little-endian meaning /// LSB is at element 0 and the MSB is at element 31. -/// If you call \ref ed25519PublicKey::GetPublicElement() -/// "GetPublicElement()" then the little-endian byte array is -/// converted to a big-endian Integer() so it can be returned -/// the way a caller expects. And calling -/// \ref ed25519PublicKey::SetPublicElement "SetPublicElement()" -/// perfoms a similar internal conversion. +/// If you call GetPublicElement() then the little-endian byte +/// array is converted to a big-endian Integer() so it can be +/// returned the way a caller expects. And calling +/// SetPublicElement() perfoms a similar internal conversion. /// \since Crypto++ 8.0 struct ed25519PublicKey : public X509PublicKey { @@ -616,7 +641,7 @@ struct ed25519PublicKey : public X509PublicKey /// \brief BER decode ASN.1 object /// \param bt BufferedTransformation object - /// \sa RFC 5958, Asymmetric + /// \sa RFC 5958, Asymmetric /// Key Packages void Load(BufferedTransformation &bt) { BERDecode(bt); @@ -704,9 +729,13 @@ struct ed25519Verifier : public PK_Verifier ed25519Verifier(const ed25519Signer& signer); // DL_ObjectImplBase + /// \brief Retrieves a reference to a Public Key + /// \details AccessKey() retrieves a non-const reference to a public key. PublicKey& AccessKey() { return m_key; } PublicKey& AccessPublicKey() { return m_key; } + /// \brief Retrieves a reference to a Public Key + /// \details GetKey() retrieves a const reference to a public key. const PublicKey& GetKey() const { return m_key; } const PublicKey& GetPublicKey() const { return m_key; } @@ -735,6 +764,17 @@ struct ed25519Verifier : public PK_Verifier bool VerifyAndRestart(PK_MessageAccumulator &messageAccumulator) const; + /// \brief Check whether input signature is a valid signature for input message + /// \param stream an std::istream derived class + /// \param signature a pointer to the signature over the message + /// \param signatureLen the size of the signature + /// \return true if the signature is valid, false otherwise + /// \details VerifyStream() handles large streams. The Stream functions were added to + /// ed25519 for signing and verifying files that are too large for a memory allocation. + /// The functions are not present in other library signers and verifiers. + /// \since Crypto++ 8.1 + bool VerifyStream(std::istream& stream, const byte *signature, size_t signatureLen) const; + DecodingResult RecoverAndRestart(byte *recoveredMessage, PK_MessageAccumulator &messageAccumulator) const { CRYPTOPP_UNUSED(recoveredMessage); CRYPTOPP_UNUSED(messageAccumulator); throw NotImplemented("ed25519Verifier: this object does not support recoverable messages"); @@ -745,10 +785,13 @@ protected: }; /// \brief Ed25519 signature scheme +/// \sa Ed25519 on the Crypto++ wiki. /// \since Crypto++ 8.0 struct ed25519 { + /// \brief ed25519 Signer typedef ed25519Signer Signer; + /// \brief ed25519 Verifier typedef ed25519Verifier Verifier; }; From 8c189c9acedfa079e7ace3d8ab0654d61755f461 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Wed, 27 Feb 2019 18:55:40 -0800 Subject: [PATCH 4/5] fix cmake crypto++ --- ChangeLog.txt | 3 + vendor/README | 2 +- .../cryptopp/vendor_cryptopp/CMakeLists.txt | 1563 +++++++++-------- .../vendor_cryptopp/cryptopp-config.cmake | 2 +- 4 files changed, 798 insertions(+), 772 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 74445b20..855e00a6 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -4,6 +4,9 @@ Fixed bugs: * If file system migration encounters files or folders with the wrong format in the base directory, it now just ignores them instead of crashing. * When trying to migrate a file system from CryFS 0.9.3 or older, show an error message suggesting to first open it with 0.9.10 because we can't load that anymore. +Other: +* Updated to crypto++ 8.1 + Version 0.10.0 --------------- diff --git a/vendor/README b/vendor/README index 4318b65a..c0be8014 100644 --- a/vendor/README +++ b/vendor/README @@ -3,5 +3,5 @@ googletest: https://github.com/google/googletest/tree/4e4df226fc197c0dda6e37f5c8 - changed: added NOLINT comment as workaround for clang-tidy warning https://github.com/google/googletest/issues/853 spdlog: https://github.com/gabime/spdlog/tree/v0.16.3/include/spdlog cryptopp: https://github.com/weidai11/cryptopp/tree/CRYPTOPP_8_1_0 - - changed: added CMakeLists.txt and cryptopp-config.cmake from https://github.com/noloader/cryptopp-cmake/tree/CRYPTOPP_8_0_0 + - changed: added CMakeLists.txt and cryptopp-config.cmake from https://github.com/noloader/cryptopp-cmake/tree/07a064d57d97477cb055f994a498f45425df0c1d - changed: commented out line including winapifamily.h in CMakeLists.txt diff --git a/vendor/cryptopp/vendor_cryptopp/CMakeLists.txt b/vendor/cryptopp/vendor_cryptopp/CMakeLists.txt index bc942fc6..55d18719 100644 --- a/vendor/cryptopp/vendor_cryptopp/CMakeLists.txt +++ b/vendor/cryptopp/vendor_cryptopp/CMakeLists.txt @@ -13,17 +13,17 @@ # # error "The CMAKE_C_COMPILER is set to a C++ compiler" if(NOT DEFINED cryptocpp_DISPLAY_CMAKE_SUPPORT_WARNING) - set(cryptocpp_DISPLAY_CMAKE_SUPPORT_WARNING 1) + set(cryptocpp_DISPLAY_CMAKE_SUPPORT_WARNING 1) endif() if(cryptocpp_DISPLAY_CMAKE_SUPPORT_WARNING) - message( STATUS -"*************************************************************************\n" -"The Crypto++ library does not officially support CMake. CMake support is a\n" -"community effort, and the library works with the folks using CMake to help\n" -"improve it. If you find an issue then please fix it or report it at\n" -"https://github.com/noloader/cryptopp-cmake.\n" -"-- *************************************************************************" -) + message( STATUS + "*************************************************************************\n" + "The Crypto++ library does not officially support CMake. CMake support is a\n" + "community effort, and the library works with the folks using CMake to help\n" + "improve it. If you find an issue then please fix it or report it at\n" + "https://github.com/noloader/cryptopp-cmake.\n" + "-- *************************************************************************" + ) endif() # Print useful information @@ -31,16 +31,16 @@ message( STATUS "CMake version ${CMAKE_VERSION}" ) cmake_minimum_required(VERSION 2.8.6) if (${CMAKE_VERSION} VERSION_LESS "3.0.0") - project(cryptopp) - set(cryptopp_VERSION_MAJOR 7) - set(cryptopp_VERSION_MINOR 0) - set(cryptopp_VERSION_PATCH 0) + project(cryptopp) + set(cryptopp_VERSION_MAJOR 7) + set(cryptopp_VERSION_MINOR 0) + set(cryptopp_VERSION_PATCH 0) else () - cmake_policy(SET CMP0048 NEW) - project(cryptopp VERSION 7.0.0) - if (NOT ${CMAKE_VERSION} VERSION_LESS "3.1.0") - cmake_policy(SET CMP0054 NEW) - endif () + cmake_policy(SET CMP0048 NEW) + project(cryptopp VERSION 7.0.0) + if (NOT ${CMAKE_VERSION} VERSION_LESS "3.1.0") + cmake_policy(SET CMP0054 NEW) + endif () endif () # Need to set SRC_DIR manually after removing the Python library code. @@ -50,11 +50,11 @@ set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # If not in multi-configuration environments, no explicit build type or CXX # flags are set by the user and if we are the root CMakeLists.txt file. if (NOT CMAKE_CONFIGURATION_TYPES AND - NOT CMAKE_NO_BUILD_TYPE AND - NOT CMAKE_BUILD_TYPE AND - NOT CMAKE_CXX_FLAGS AND - CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(CMAKE_BUILD_TYPE RelWithDebInfo) + NOT CMAKE_NO_BUILD_TYPE AND + NOT CMAKE_BUILD_TYPE AND + NOT CMAKE_CXX_FLAGS AND + CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + set(CMAKE_BUILD_TYPE RelWithDebInfo) endif () include(GNUInstallDirs) @@ -103,39 +103,39 @@ set(LIB_VER ${cryptopp_VERSION_MAJOR}${cryptopp_VERSION_MINOR}${cryptopp_VERSION set(CMAKE_MACOSX_RPATH 0) if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - list(APPEND CRYPTOPP_COMPILE_OPTIONS -wd68 -wd186 -wd279 -wd327 -wd161 -wd3180) + list(APPEND CRYPTOPP_COMPILE_OPTIONS -wd68 -wd186 -wd279 -wd327 -wd161 -wd3180) endif () # Also see http://github.com/weidai11/cryptopp/issues/395 if (DISABLE_ASM) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ASM) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ASM) endif () if (DISABLE_SSSE3) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE3) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE3) endif () if (DISABLE_SSE4) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE4) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE4) endif () if (DISABLE_AESNI) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AESNI) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AESNI) endif () if (DISABLE_SHA) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SHA) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SHA) endif () if (DISABLE_ALTIVEC) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ALTIVEC) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ALTIVEC) endif () if (DISABLE_POWER7) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER7) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER7) endif () if (DISABLE_POWER8) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER8) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER8) endif () if (DISABLE_POWER9) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER9) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER9) endif () if (NOT CRYPTOPP_DATA_DIR STREQUAL "") - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS "CRYPTOPP_DATA_DIR=${CRYPTOPP_DATA_DIR}") + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS "CRYPTOPP_DATA_DIR=${CRYPTOPP_DATA_DIR}") endif () ############################################################################### @@ -144,125 +144,125 @@ endif () # Tru64, HP-UX and a few others need tweaking if (EXISTS /usr/xpg4/bin/grep) - set(GREP_CMD /usr/xpg4/bin/grep) + set(GREP_CMD /usr/xpg4/bin/grep) elseif (EXISTS /usr/gnu/bin/grep) - set(GREP_CMD /usr/gnu/bin/grep) + set(GREP_CMD /usr/gnu/bin/grep) elseif (EXISTS /usr/linux/bin/grep) - set(GREP_CMD /usr/linux/bin/grep) + set(GREP_CMD /usr/linux/bin/grep) else () - set(GREP_CMD grep) + set(GREP_CMD grep) endif () if (EXISTS /usr/xpg4/bin/sed) - set(SED_CMD /usr/xpg4/bin/sed) + set(SED_CMD /usr/xpg4/bin/sed) elseif (EXISTS /usr/gnu/bin/sed) - set(SED_CMD /usr/gnu/bin/sed) + set(SED_CMD /usr/gnu/bin/sed) elseif (EXISTS /usr/linux/bin/sed) - set(SED_CMD /usr/linux/bin/sed) + set(SED_CMD /usr/linux/bin/sed) else () - set(SED_CMD sed) + set(SED_CMD sed) endif () ############################################################################### function(CheckCompileOption opt var) - if (MSVC) + if (MSVC) - # TODO: improve this... - CHECK_CXX_COMPILER_FLAG(${opt} ${var}) + # TODO: improve this... + CHECK_CXX_COMPILER_FLAG(${opt} ${var}) - elseif (CMAKE_CXX_COMPILER_ID MATCHES "SunPro") + elseif (CMAKE_CXX_COMPILER_ID MATCHES "SunPro") - message(STATUS "Performing Test ${var}") - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${opt} -c ${TEST_CXX_FILE} 2>&1" - COMMAND ${GREP_CMD} -i -c -E "illegal value ignored" - RESULT_VARIABLE COMMAND_RESULT - OUTPUT_VARIABLE COMMAND_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Performing Test ${var}") + execute_process( + COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${opt} -c ${TEST_CXX_FILE} 2>&1" + COMMAND ${GREP_CMD} -i -c -E "illegal value ignored" + RESULT_VARIABLE COMMAND_RESULT + OUTPUT_VARIABLE COMMAND_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # No dereference below. Thanks for the warning, CMake (not!). + if (COMMAND_RESULT AND NOT COMMAND_OUTPUT) + set(${var} 1 PARENT_SCOPE) + message(STATUS "Performing Test ${var} - Success") + else () + set(${var} 0 PARENT_SCOPE) + message(STATUS "Performing Test ${var} - Failed") + endif () + + # Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. + elseif (CMAKE_CXX_COMPILER MATCHES "xlC") + + message(STATUS "Performing Test ${var}") + execute_process( + COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${opt} -c ${TEST_CXX_FILE} 2>&1" + COMMAND ${GREP_CMD} -i -c -E "Unrecognized value" + RESULT_VARIABLE COMMAND_RESULT + OUTPUT_VARIABLE COMMAND_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # No dereference below. Thanks for the warning, CMake (not!). + if (COMMAND_RESULT AND NOT COMMAND_OUTPUT) + set(${var} 1 PARENT_SCOPE) + message(STATUS "Performing Test ${var} - Success") + else () + set(${var} 0 PARENT_SCOPE) + message(STATUS "Performing Test ${var} - Failed") + endif () - # No dereference below. Thanks for the warning, CMake (not!). - if (COMMAND_RESULT AND NOT COMMAND_OUTPUT) - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") + + CHECK_CXX_COMPILER_FLAG(${opt} ${var}) + endif () - # Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. - elseif (CMAKE_CXX_COMPILER MATCHES "xlC") - - message(STATUS "Performing Test ${var}") - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${opt} -c ${TEST_CXX_FILE} 2>&1" - COMMAND ${GREP_CMD} -i -c -E "Unrecognized value" - RESULT_VARIABLE COMMAND_RESULT - OUTPUT_VARIABLE COMMAND_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # No dereference below. Thanks for the warning, CMake (not!). - if (COMMAND_RESULT AND NOT COMMAND_OUTPUT) - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") - else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") - endif () - - else () - - CHECK_CXX_COMPILER_FLAG(${opt} ${var}) - - endif () - endfunction(CheckCompileOption) function(CheckCompileLinkOption opt var prog) - if (MSVC) + if (MSVC) - # TODO: improve this... - CHECK_CXX_COMPILER_FLAG(${opt} ${var}) + # TODO: improve this... + CHECK_CXX_COMPILER_FLAG(${opt} ${var}) - else () - - message(STATUS "Performing Test ${var}") - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${opt} ${prog} 2>&1" - RESULT_VARIABLE COMMAND_RESULT - OUTPUT_VARIABLE COMMAND_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # message(STATUS "RESULT_VARIABLE ${RESULT_VARIABLE}") - # message(STATUS "COMMAND_RESULT ${COMMAND_RESULT}") - # message(STATUS "OUTPUT_VARIABLE ${OUTPUT_VARIABLE}") - # message(STATUS "COMMAND_OUTPUT ${COMMAND_OUTPUT}") - - # This test is strict. We require two things. First, the invocation - # of the compile command must return 0. Second, there must be no - # messages on the console. We are interested in diagnostics like - # warnings to decide when to reject an option. But we will probably - # capture chatty compiler that want to say, "Hooray, success". For - # chatty compilers we will need to find a quiet option and use it - # for the test. Microsoft compilers come to mind. - if ("${COMMAND_RESULT}" EQUAL 0 AND "${COMMAND_OUTPUT}" STREQUAL "") - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") - endif () - endif () + message(STATUS "Performing Test ${var}") + execute_process( + COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${opt} ${prog} 2>&1" + RESULT_VARIABLE COMMAND_RESULT + OUTPUT_VARIABLE COMMAND_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # message(STATUS "RESULT_VARIABLE ${RESULT_VARIABLE}") + # message(STATUS "COMMAND_RESULT ${COMMAND_RESULT}") + # message(STATUS "OUTPUT_VARIABLE ${OUTPUT_VARIABLE}") + # message(STATUS "COMMAND_OUTPUT ${COMMAND_OUTPUT}") + + # This test is strict. We require two things. First, the invocation + # of the compile command must return 0. Second, there must be no + # messages on the console. We are interested in diagnostics like + # warnings to decide when to reject an option. But we will probably + # capture chatty compiler that want to say, "Hooray, success". For + # chatty compilers we will need to find a quiet option and use it + # for the test. Microsoft compilers come to mind. + if ("${COMMAND_RESULT}" EQUAL 0 AND "${COMMAND_OUTPUT}" STREQUAL "") + set(${var} 1 PARENT_SCOPE) + message(STATUS "Performing Test ${var} - Success") + else () + set(${var} 0 PARENT_SCOPE) + message(STATUS "Performing Test ${var} - Failed") + endif () + + endif () endfunction(CheckCompileLinkOption) function(AddCompileOption opt) if ("${COMMAND_OUTPUT}" NOT STREQUAL "") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "${opt}") + list(APPEND CRYPTOPP_COMPILE_OPTIONS "${opt}") endif () endfunction(AddCompileOption) @@ -271,22 +271,22 @@ endfunction(AddCompileOption) function(DumpMachine output pattern) - if (MSVC) + if (MSVC) - # CMake does not provide a generic shell/terminal mechanism - # and Microsoft environments don't know what 'sh' is. - set(${output} 0 PARENT_SCOPE) + # CMake does not provide a generic shell/terminal mechanism + # and Microsoft environments don't know what 'sh' is. + set(${output} 0 PARENT_SCOPE) - else () + else () - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1" - COMMAND ${GREP_CMD} -i -c -E "${pattern}" - OUTPUT_VARIABLE ${output} - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(${output} "${${output}}" PARENT_SCOPE) + execute_process( + COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1" + COMMAND ${GREP_CMD} -i -c -E "${pattern}" + OUTPUT_VARIABLE ${output} + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(${output} "${${output}}" PARENT_SCOPE) - endif() + endif() endfunction(DumpMachine) @@ -312,66 +312,66 @@ DumpMachine(CRYPTOPP_POWERPC64 "ppc64") # Test SunCC for a string like 'CC: Sun C++ 5.13 SunOS_i386' if (NOT CRYPTOPP_SOLARIS) - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" - COMMAND ${GREP_CMD} -i -c "SunOS" - OUTPUT_VARIABLE CRYPTOPP_SOLARIS - OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" + COMMAND ${GREP_CMD} -i -c "SunOS" + OUTPUT_VARIABLE CRYPTOPP_SOLARIS + OUTPUT_STRIP_TRAILING_WHITESPACE) endif () # Test GCC for a string like 'i386-pc-solaris2.11' if (NOT CRYPTOPP_SOLARIS) - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1" - COMMAND ${GREP_CMD} -i -c "Solaris" - OUTPUT_VARIABLE CRYPTOPP_SOLARIS - OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1" + COMMAND ${GREP_CMD} -i -c "Solaris" + OUTPUT_VARIABLE CRYPTOPP_SOLARIS + OUTPUT_STRIP_TRAILING_WHITESPACE) endif () # Fixup PowerPC. If both 32-bit and 64-bit use 64-bit. if (CRYPTOPP_POWERPC AND CRYPTOPP_POWERPC64) - unset(CRYPTOPP_POWERPC) + unset(CRYPTOPP_POWERPC) endif () # Fixup for xlC compiler. -dumpmachine fails so we miss PowerPC # TODO: something better than proxying the platform via compiler # Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. if (CMAKE_CXX_COMPILER MATCHES "xlC") - message ("-- Fixing platform due to IBM xlC") - set(CRYPTOPP_POWERPC64 1) + message ("-- Fixing platform due to IBM xlC") + set(CRYPTOPP_POWERPC64 1) endif () # DumpMachine SunCC style if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - # SunCC is 32-bit, but it builds both 32 and 64 bit. Use - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" - COMMAND ${GREP_CMD} -i -c "Sparc" - OUTPUT_VARIABLE CRYPTOPP_SPARC - OUTPUT_STRIP_TRAILING_WHITESPACE) + # SunCC is 32-bit, but it builds both 32 and 64 bit. Use + execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" + COMMAND ${GREP_CMD} -i -c "Sparc" + OUTPUT_VARIABLE CRYPTOPP_SPARC + OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" - COMMAND ${GREP_CMD} -i -c -E "i386|i86" - OUTPUT_VARIABLE CRYPTOPP_I386 - OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" + COMMAND ${GREP_CMD} -i -c -E "i386|i86" + OUTPUT_VARIABLE CRYPTOPP_I386 + OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c "i386" - OUTPUT_VARIABLE KERNEL_I386 - OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND isainfo -k + COMMAND ${GREP_CMD} -i -c "i386" + OUTPUT_VARIABLE KERNEL_I386 + OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c "amd64" - OUTPUT_VARIABLE KERNEL_AMD64 - OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND isainfo -k + COMMAND ${GREP_CMD} -i -c "amd64" + OUTPUT_VARIABLE KERNEL_AMD64 + OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c "Sparc" - OUTPUT_VARIABLE KERNEL_SPARC - OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND isainfo -k + COMMAND ${GREP_CMD} -i -c "Sparc" + OUTPUT_VARIABLE KERNEL_SPARC + OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c -E "UltraSarc|Sparc64|SparcV9" - OUTPUT_VARIABLE KERNEL_SPARC64 - OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND isainfo -k + COMMAND ${GREP_CMD} -i -c -E "UltraSarc|Sparc64|SparcV9" + OUTPUT_VARIABLE KERNEL_SPARC64 + OUTPUT_STRIP_TRAILING_WHITESPACE) endif () @@ -379,125 +379,125 @@ endif () if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} --version 2>&1" - COMMAND ${GREP_CMD} -i -c "macports" - OUTPUT_VARIABLE MACPORTS - OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} --version 2>&1" + COMMAND ${GREP_CMD} -i -c "macports" + OUTPUT_VARIABLE MACPORTS + OUTPUT_STRIP_TRAILING_WHITESPACE) - if (MACPORTS EQUAL 0) - # Get GAS version, add defs + set as appropriate - set(GAS_CMD sh -c "${CMAKE_CXX_COMPILER} -xc -c /dev/null -Wa,-v -o/dev/null 2>&1") + if (MACPORTS EQUAL 0) + # Get GAS version, add defs + set as appropriate + set(GAS_CMD sh -c "${CMAKE_CXX_COMPILER} -xc -c /dev/null -Wa,-v -o/dev/null 2>&1") - execute_process(COMMAND ${GAS_CMD} - OUTPUT_VARIABLE GAS_STRING - OUTPUT_STRIP_TRAILING_WHITESPACE) - string(FIND "${GAS_STRING}" "GNU assembler" GAS_OUTPUT) + execute_process(COMMAND ${GAS_CMD} + OUTPUT_VARIABLE GAS_STRING + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(FIND "${GAS_STRING}" "GNU assembler" GAS_OUTPUT) - if (NOT GAS_OUTPUT EQUAL -1) - #.intel_syntax wasn't supported until GNU assembler 2.10 + if (NOT GAS_OUTPUT EQUAL -1) + #.intel_syntax wasn't supported until GNU assembler 2.10 - # TODO(unassigned): string() REGEX was not cooperating at time of writing. Re-implement as needed. - execute_process(COMMAND echo ${GAS_STRING} - COMMAND ${GREP_CMD} -i -c -E "GNU.[Aa]ssembler.*(2\\.[1-9][0-9]|[3-9])" - OUTPUT_VARIABLE GAS210_OR_LATER) - if (GAS210_OR_LATER EQUAL 0) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ASM) - set(DISABLE_ASM 1) - endif () + # TODO(unassigned): string() REGEX was not cooperating at time of writing. Re-implement as needed. + execute_process(COMMAND echo ${GAS_STRING} + COMMAND ${GREP_CMD} -i -c -E "GNU.[Aa]ssembler.*(2\\.[1-9][0-9]|[3-9])" + OUTPUT_VARIABLE GAS210_OR_LATER) + if (GAS210_OR_LATER EQUAL 0) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ASM) + set(DISABLE_ASM 1) + endif () - execute_process(COMMAND echo ${GAS_STRING} - COMMAND ${GREP_CMD} -i -c -E "GNU.[Aa]ssembler.*(2\\.1[7-9]|2\\.[2-9]|[3-9])" - OUTPUT_VARIABLE GAS217_OR_LATER) - if (GAS217_OR_LATER EQUAL 0) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE3) - set(DISABLE_SSSE3 1) - endif () + execute_process(COMMAND echo ${GAS_STRING} + COMMAND ${GREP_CMD} -i -c -E "GNU.[Aa]ssembler.*(2\\.1[7-9]|2\\.[2-9]|[3-9])" + OUTPUT_VARIABLE GAS217_OR_LATER) + if (GAS217_OR_LATER EQUAL 0) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE3) + set(DISABLE_SSSE3 1) + endif () - # OpenBSD and CentOS 5 needed this one due to ARIA and BLAKE2 - execute_process(COMMAND echo ${GAS_STRING} - COMMAND ${GREP_CMD} -i -c -E "GNU.[Aa]ssembler.*(2\\.1[8-9]|2\\.[2-9]|[3-9])" - OUTPUT_VARIABLE GAS218_OR_LATER) - if (GAS218_OR_LATER EQUAL 0) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE4) - set(DISABLE_SSE4 1) - endif () + # OpenBSD and CentOS 5 needed this one due to ARIA and BLAKE2 + execute_process(COMMAND echo ${GAS_STRING} + COMMAND ${GREP_CMD} -i -c -E "GNU.[Aa]ssembler.*(2\\.1[8-9]|2\\.[2-9]|[3-9])" + OUTPUT_VARIABLE GAS218_OR_LATER) + if (GAS218_OR_LATER EQUAL 0) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE4) + set(DISABLE_SSE4 1) + endif () - execute_process(COMMAND echo ${GAS_STRING} - COMMAND ${GREP_CMD} -i -c -E "GNU.[Aa]ssembler.*(2\\.19|2\\.[2-9]|[3-9])" - OUTPUT_VARIABLE GAS219_OR_LATER) - if (GAS219_OR_LATER EQUAL 0) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AESNI) - set(DISABLE_AESNI 1) - endif () + execute_process(COMMAND echo ${GAS_STRING} + COMMAND ${GREP_CMD} -i -c -E "GNU.[Aa]ssembler.*(2\\.19|2\\.[2-9]|[3-9])" + OUTPUT_VARIABLE GAS219_OR_LATER) + if (GAS219_OR_LATER EQUAL 0) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AESNI) + set(DISABLE_AESNI 1) + endif () - # Ubuntu 10 and Ubuntu 12 needed this one - execute_process(COMMAND echo ${GAS_STRING} - COMMAND ${GREP_CMD} -i -c -E "GNU.[Aa]ssembler.*(2\\.2[3-9]|2\\.[3-9]|[3-9])" - OUTPUT_VARIABLE GAS223_OR_LATER) - if (GAS223_OR_LATER EQUAL 0) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SHA) - set(DISABLE_SHA 1) - endif () + # Ubuntu 10 and Ubuntu 12 needed this one + execute_process(COMMAND echo ${GAS_STRING} + COMMAND ${GREP_CMD} -i -c -E "GNU.[Aa]ssembler.*(2\\.2[3-9]|2\\.[3-9]|[3-9])" + OUTPUT_VARIABLE GAS223_OR_LATER) + if (GAS223_OR_LATER EQUAL 0) + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SHA) + set(DISABLE_SHA 1) + endif () + endif () endif () - endif () endif () # TODO: what about ICC and LLVM on Windows? if (MSVC) - if (CMAKE_SYSTEM_VERSION MATCHES "10\\.0.*") - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS "_WIN32_WINNT=0x0A00") - endif () - #list(APPEND CRYPTOPP_COMPILE_OPTIONS "/FI\"winapifamily.h\"") + if (CMAKE_SYSTEM_VERSION MATCHES "10\\.0.*") + list(APPEND CRYPTOPP_COMPILE_DEFINITIONS "_WIN32_WINNT=0x0A00") + endif () + #list(APPEND CRYPTOPP_COMPILE_OPTIONS "/FI\"winapifamily.h\"") endif () # Enable PIC for all target machines except 32-bit i386 due to register pressures. if (NOT CRYPTOPP_I386) - SET(CMAKE_POSITION_INDEPENDENT_CODE 1) + SET(CMAKE_POSITION_INDEPENDENT_CODE 1) endif () # IBM XLC compiler options for AIX and Linux. # Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. if (CMAKE_CXX_COMPILER MATCHES "xlC") - #CheckCompileLinkOption("-qxlcompatmacros" CRYPTOPP_XLC_COMPAT "${TEST_CXX_FILE}") - #if (CRYPTOPP_XLC_COMPAT) - # list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qxlcompatmacros") - #endif () + #CheckCompileLinkOption("-qxlcompatmacros" CRYPTOPP_XLC_COMPAT "${TEST_CXX_FILE}") + #if (CRYPTOPP_XLC_COMPAT) + # list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qxlcompatmacros") + #endif () - CheckCompileLinkOption("-qrtti" CRYPTOPP_PPC_RTTI "${TEST_CXX_FILE}") - if (CRYPTOPP_PPC_RTTI) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qrtti") - endif () + CheckCompileLinkOption("-qrtti" CRYPTOPP_PPC_RTTI "${TEST_CXX_FILE}") + if (CRYPTOPP_PPC_RTTI) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qrtti") + endif () - CheckCompileLinkOption("-qmaxmem=-1" CRYPTOPP_PPC_MAXMEM "${TEST_CXX_FILE}") - if (CRYPTOPP_PPC_MAXMEM) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qmaxmem=-1") - endif () + CheckCompileLinkOption("-qmaxmem=-1" CRYPTOPP_PPC_MAXMEM "${TEST_CXX_FILE}") + if (CRYPTOPP_PPC_MAXMEM) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qmaxmem=-1") + endif () - CheckCompileLinkOption("-qthreaded" CRYPTOPP_PPC_THREADED "${TEST_CXX_FILE}") - if (CRYPTOPP_PPC_THREADED) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qthreaded") - endif () + CheckCompileLinkOption("-qthreaded" CRYPTOPP_PPC_THREADED "${TEST_CXX_FILE}") + if (CRYPTOPP_PPC_THREADED) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qthreaded") + endif () endif () # Solaris specific if (CRYPTOPP_SOLARIS) - # SunCC needs -template=no%extdef - if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-template=no%extdef") - endif () + # SunCC needs -template=no%extdef + if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-template=no%extdef") + endif () - # SunCC needs -xregs=no%appl on Sparc (not x86) for libraries (not test program) - # TODO: wire this up properly - if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro" AND (CRYPTOPP_SPARC OR CRYPTOPP_SPARC64)) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-xregs=no%appl") - endif () + # SunCC needs -xregs=no%appl on Sparc (not x86) for libraries (not test program) + # TODO: wire this up properly + if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro" AND (CRYPTOPP_SPARC OR CRYPTOPP_SPARC64)) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-xregs=no%appl") + endif () - # GCC needs to enable use of '/' for division in the assembler - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-Wa,--divide") - endif () + # GCC needs to enable use of '/' for division in the assembler + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-Wa,--divide") + endif () endif () @@ -510,79 +510,79 @@ file(GLOB cryptopp_HEADERS ${SRC_DIR}/*.h) # Remove headers used to build test suite list(REMOVE_ITEM cryptopp_HEADERS - ${SRC_DIR}/bench.h - ${SRC_DIR}/validate.h - ) + ${SRC_DIR}/bench.h + ${SRC_DIR}/validate.h + ) # Test sources. You can use the GNUmakefile to generate the list: `make sources`. set(cryptopp_SOURCES_TEST - ${SRC_DIR}/test.cpp - ${SRC_DIR}/bench1.cpp - ${SRC_DIR}/bench2.cpp - ${SRC_DIR}/bench3.cpp - ${SRC_DIR}/validat0.cpp - ${SRC_DIR}/validat1.cpp - ${SRC_DIR}/validat2.cpp - ${SRC_DIR}/validat3.cpp - ${SRC_DIR}/validat4.cpp - ${SRC_DIR}/validat5.cpp - ${SRC_DIR}/validat6.cpp - ${SRC_DIR}/validat7.cpp - ${SRC_DIR}/validat8.cpp - ${SRC_DIR}/validat9.cpp - ${SRC_DIR}/validat10.cpp - ${SRC_DIR}/regtest1.cpp - ${SRC_DIR}/regtest2.cpp - ${SRC_DIR}/regtest3.cpp - ${SRC_DIR}/regtest4.cpp - ${SRC_DIR}/datatest.cpp - ${SRC_DIR}/fipsalgt.cpp - ${SRC_DIR}/fipstest.cpp - ${SRC_DIR}/dlltest.cpp - #${SRC_DIR}/adhoc.cpp - ) + ${SRC_DIR}/test.cpp + ${SRC_DIR}/bench1.cpp + ${SRC_DIR}/bench2.cpp + ${SRC_DIR}/bench3.cpp + ${SRC_DIR}/validat0.cpp + ${SRC_DIR}/validat1.cpp + ${SRC_DIR}/validat2.cpp + ${SRC_DIR}/validat3.cpp + ${SRC_DIR}/validat4.cpp + ${SRC_DIR}/validat5.cpp + ${SRC_DIR}/validat6.cpp + ${SRC_DIR}/validat7.cpp + ${SRC_DIR}/validat8.cpp + ${SRC_DIR}/validat9.cpp + ${SRC_DIR}/validat10.cpp + ${SRC_DIR}/regtest1.cpp + ${SRC_DIR}/regtest2.cpp + ${SRC_DIR}/regtest3.cpp + ${SRC_DIR}/regtest4.cpp + ${SRC_DIR}/datatest.cpp + ${SRC_DIR}/fipsalgt.cpp + ${SRC_DIR}/fipstest.cpp + ${SRC_DIR}/dlltest.cpp + #${SRC_DIR}/adhoc.cpp + ) # Library sources. You can use the GNUmakefile to generate the list: `make sources`. # Makefile sorted them at http://github.com/weidai11/cryptopp/pull/426. file(GLOB cryptopp_SOURCES ${SRC_DIR}/*.cpp) list(SORT cryptopp_SOURCES) list(REMOVE_ITEM cryptopp_SOURCES - ${SRC_DIR}/cryptlib.cpp - ${SRC_DIR}/cpu.cpp - ${SRC_DIR}/integer.cpp - ${SRC_DIR}/pch.cpp - ${SRC_DIR}/simple.cpp - ${SRC_DIR}/adhoc.cpp - ${cryptopp_SOURCES_TEST} - ) + ${SRC_DIR}/cryptlib.cpp + ${SRC_DIR}/cpu.cpp + ${SRC_DIR}/integer.cpp + ${SRC_DIR}/pch.cpp + ${SRC_DIR}/simple.cpp + ${SRC_DIR}/adhoc.cpp + ${cryptopp_SOURCES_TEST} + ) set(cryptopp_SOURCES - ${SRC_DIR}/cryptlib.cpp - ${SRC_DIR}/cpu.cpp - ${SRC_DIR}/integer.cpp - ${cryptopp_SOURCES} - ) + ${SRC_DIR}/cryptlib.cpp + ${SRC_DIR}/cpu.cpp + ${SRC_DIR}/integer.cpp + ${cryptopp_SOURCES} + ) set(cryptopp_SOURCES_ASM) if (MSVC AND NOT DISABLE_ASM) - if (${CMAKE_GENERATOR} MATCHES ".*ARM") - message(STATUS "Disabling ASM because ARM is specified as target platform.") - else () - enable_language(ASM_MASM) - list(APPEND cryptopp_SOURCES_ASM - ${SRC_DIR}/rdrand.asm - ) - if (CMAKE_SIZEOF_VOID_P EQUAL 8) - list(APPEND cryptopp_SOURCES_ASM - ${SRC_DIR}/x64dll.asm - ${SRC_DIR}/x64masm.asm - ) - set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES COMPILE_DEFINITIONS "_M_X64") + if (${CMAKE_GENERATOR} MATCHES ".*ARM") + message(STATUS "Disabling ASM because ARM is specified as target platform.") else () - set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES COMPILE_DEFINITIONS "_M_X86" COMPILE_FLAGS "/safeseh") + enable_language(ASM_MASM) + list(APPEND cryptopp_SOURCES_ASM + ${SRC_DIR}/rdrand.asm + ) + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + list(APPEND cryptopp_SOURCES_ASM + ${SRC_DIR}/x64dll.asm + ${SRC_DIR}/x64masm.asm + ) + set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES COMPILE_DEFINITIONS "_M_X64") + else () + set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES COMPILE_DEFINITIONS "_M_X86" COMPILE_FLAGS "/safeseh") + endif () + set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES LANGUAGE ASM_MASM) endif () - set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES LANGUAGE ASM_MASM) - endif () endif () #============================================================================ @@ -595,352 +595,375 @@ endif () # Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel" OR CMAKE_CXX_COMPILER MATCHES "xlC") - if (CRYPTOPP_AMD64 OR CRYPTOPP_I386 OR CRYPTOPP_X32) + if (CRYPTOPP_AMD64 OR CRYPTOPP_I386 OR CRYPTOPP_X32) - CheckCompileLinkOption("-msse2" CRYPTOPP_IA32_SSE2 - "${TEST_PROG_DIR}/test_x86_sse2.cxx") - CheckCompileLinkOption("-mssse3" CRYPTOPP_IA32_SSSE3 - "${TEST_PROG_DIR}/test_x86_ssse3.cxx") - CheckCompileLinkOption("-msse4.1" CRYPTOPP_IA32_SSE41 - "${TEST_PROG_DIR}/test_x86_sse41.cxx") - CheckCompileLinkOption("-msse4.2" CRYPTOPP_IA32_SSE42 - "${TEST_PROG_DIR}/test_x86_sse42.cxx") - CheckCompileLinkOption("-mssse3 -mpclmul" CRYPTOPP_IA32_CLMUL - "${TEST_PROG_DIR}/test_x86_clmul.cxx") - CheckCompileLinkOption("-msse4.1 -maes" CRYPTOPP_IA32_AES - "${TEST_PROG_DIR}/test_x86_aes.cxx") - CheckCompileLinkOption("-mavx" CRYPTOPP_IA32_AVX - "${TEST_PROG_DIR}/test_x86_avx.cxx") - CheckCompileLinkOption("-mavx2" CRYPTOPP_IA32_AVX2 - "${TEST_PROG_DIR}/test_x86_avx2.cxx") - CheckCompileLinkOption("-msse4.2 -msha" CRYPTOPP_IA32_SHA - "${TEST_PROG_DIR}/test_x86_sha.cxx") - CheckCompileLinkOption("" CRYPTOPP_MIXED_ASM - "${TEST_PROG_DIR}/test_mixed_asm.cxx") + CheckCompileLinkOption("-msse2" CRYPTOPP_IA32_SSE2 + "${TEST_PROG_DIR}/test_x86_sse2.cxx") + CheckCompileLinkOption("-mssse3" CRYPTOPP_IA32_SSSE3 + "${TEST_PROG_DIR}/test_x86_ssse3.cxx") + CheckCompileLinkOption("-msse4.1" CRYPTOPP_IA32_SSE41 + "${TEST_PROG_DIR}/test_x86_sse41.cxx") + CheckCompileLinkOption("-msse4.2" CRYPTOPP_IA32_SSE42 + "${TEST_PROG_DIR}/test_x86_sse42.cxx") + CheckCompileLinkOption("-mssse3 -mpclmul" CRYPTOPP_IA32_CLMUL + "${TEST_PROG_DIR}/test_x86_clmul.cxx") + CheckCompileLinkOption("-msse4.1 -maes" CRYPTOPP_IA32_AES + "${TEST_PROG_DIR}/test_x86_aes.cxx") + CheckCompileLinkOption("-mavx" CRYPTOPP_IA32_AVX + "${TEST_PROG_DIR}/test_x86_avx.cxx") + CheckCompileLinkOption("-mavx2" CRYPTOPP_IA32_AVX2 + "${TEST_PROG_DIR}/test_x86_avx2.cxx") + CheckCompileLinkOption("-msse4.2 -msha" CRYPTOPP_IA32_SHA + "${TEST_PROG_DIR}/test_x86_sha.cxx") + CheckCompileLinkOption("" CRYPTOPP_MIXED_ASM + "${TEST_PROG_DIR}/test_mixed_asm.cxx") - # https://github.com/weidai11/cryptopp/issues/756 - if (NOT CRYPTOPP_MIXED_ASM) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_MIXED_ASM") - endif () - - if (CRYPTOPP_IA32_SSE2 AND NOT DISABLE_ASM) - set_source_files_properties(${SRC_DIR}/sse_simd.cpp PROPERTIES COMPILE_FLAGS "-msse2") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-msse2") - set_source_files_properties(${SRC_DIR}/donna_sse.cpp PROPERTIES COMPILE_FLAGS "-msse2") - endif () - if (CRYPTOPP_IA32_SSSE3 AND NOT DISABLE_SSSE3) - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/simeck_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - if (CRYPTOPP_IA32_SSE41 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") - set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") - set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") - endif () - if (CRYPTOPP_IA32_SSE42 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2") - if (CRYPTOPP_IA32_CLMUL AND NOT DISABLE_AES) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -mpclmul") + # https://github.com/weidai11/cryptopp/issues/756 + if (NOT CRYPTOPP_MIXED_ASM) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_MIXED_ASM") endif () - if (CRYPTOPP_IA32_AES AND NOT DISABLE_AES) - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1 -maes") - set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -maes") + + if (NOT CRYPTOPP_IA32_SSE2 AND NOT DISABLE_ASM) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ASM") + elseif (CRYPTOPP_IA32_SSE2 AND NOT DISABLE_ASM) + set_source_files_properties(${SRC_DIR}/sse_simd.cpp PROPERTIES COMPILE_FLAGS "-msse2") + set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-msse2") + set_source_files_properties(${SRC_DIR}/donna_sse.cpp PROPERTIES COMPILE_FLAGS "-msse2") endif () - #if (CRYPTOPP_IA32_AVX AND NOT DISABLE_AVX) - # set_source_files_properties(${SRC_DIR}/XXX_avx.cpp PROPERTIES COMPILE_FLAGS "-mavx") - #endif () - if (CRYPTOPP_IA32_AVX2 AND NOT DISABLE_AVX2) - set_source_files_properties(${SRC_DIR}/chacha_avx.cpp PROPERTIES COMPILE_FLAGS "-mavx2") + if (NOT CRYPTOPP_IA32_SSSE3 AND NOT DISABLE_SSSE3) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSSE3") + elseif (CRYPTOPP_IA32_SSSE3 AND NOT DISABLE_SSSE3) + set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") + set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") + set_source_files_properties(${SRC_DIR}/keccak_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") + set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") + set_source_files_properties(${SRC_DIR}/simeck_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") + set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") + set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") + if (NOT CRYPTOPP_IA32_SSE41 AND NOT DISABLE_SSE4) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSE4") + elseif (CRYPTOPP_IA32_SSE41 AND NOT DISABLE_SSE4) + set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") + set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") + set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") + set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") + endif () + if (NOT CRYPTOPP_IA32_SSE42 AND NOT DISABLE_SSE4) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSE4") + elseif (CRYPTOPP_IA32_SSE42 AND NOT DISABLE_SSE4) + set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2") + if (NOT CRYPTOPP_IA32_CLMUL AND NOT DISABLE_AES) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_CLMUL") + elseif (CRYPTOPP_IA32_CLMUL AND NOT DISABLE_AES) + set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -mpclmul") + set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS "-mpclmul") + endif () + if (NOT CRYPTOPP_IA32_AES AND NOT DISABLE_AES) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_AESNI") + elseif (CRYPTOPP_IA32_AES AND NOT DISABLE_AES) + set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1 -maes") + set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -maes") + endif () + #if (NOT CRYPTOPP_IA32_AVX AND NOT DISABLE_AVX) + # list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_AVX") + #elseif (CRYPTOPP_IA32_AVX AND NOT DISABLE_AVX) + # set_source_files_properties(${SRC_DIR}/XXX_avx.cpp PROPERTIES COMPILE_FLAGS "-mavx") + #endif () + if (NOT CRYPTOPP_IA32_AVX2 AND NOT DISABLE_AVX2) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_AVX2") + elseif (CRYPTOPP_IA32_AVX2 AND NOT DISABLE_AVX2) + set_source_files_properties(${SRC_DIR}/chacha_avx.cpp PROPERTIES COMPILE_FLAGS "-mavx2") + endif () + if (NOT CRYPTOPP_IA32_SHA AND NOT DISABLE_SHA) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SHANI") + elseif (CRYPTOPP_IA32_SHA AND NOT DISABLE_SHA) + set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha") + set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha") + endif () + endif () endif () - if (CRYPTOPP_IA32_SHA AND NOT DISABLE_SHA) - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha") - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha") + + elseif (CRYPTOPP_AARCH32 OR CRYPTOPP_AARCH64) + + CheckCompileOption("-march=armv8-a" CRYPTOPP_ARMV8A_ASIMD) + CheckCompileOption("-march=armv8-a+crc" CRYPTOPP_ARMV8A_CRC) + CheckCompileOption("-march=armv8-a+crypto" CRYPTOPP_ARMV8A_CRYPTO) + CheckCompileOption("-march=armv8-a" CRYPTOPP_ARMV8A_NATIVE) + + if (CRYPTOPP_ARMV8A_ASIMD) + set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/neon_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/simeck_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") + set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") endif () - endif () - endif () - - elseif (CRYPTOPP_AARCH32 OR CRYPTOPP_AARCH64) - - CheckCompileOption("-march=armv8-a" CRYPTOPP_ARMV8A_ASIMD) - CheckCompileOption("-march=armv8-a+crc" CRYPTOPP_ARMV8A_CRC) - CheckCompileOption("-march=armv8-a+crypto" CRYPTOPP_ARMV8A_CRYPTO) - CheckCompileOption("-march=armv8-a" CRYPTOPP_ARMV8A_NATIVE) - - if (CRYPTOPP_ARMV8A_ASIMD) - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/neon_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/simeck_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - endif () - if (CRYPTOPP_ARMV8A_CRC) - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crc") - endif () - if (CRYPTOPP_ARMV8A_CRYPTO) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - endif () - - elseif (CRYPTOPP_ARM OR CRYPTOPP_ARMHF) - - # Need to set floating point ABI to something, like "hard" of "softfp". - # Most Linux use hard floats. - CheckCompileLinkOption("-march=armv7-a -mfpu=neon" CRYPTOPP_ARMV7A_NEON - "${TEST_PROG_DIR}/test_arm_neon.cxx") - CheckCompileLinkOption("-march=armv7-a -mfloat-abi=hard -mfpu=neon" CRYPTOPP_ARMV7A_HARD - "${TEST_PROG_DIR}/test_arm_neon.cxx") - CheckCompileLinkOption("-march=armv7-a -mfloat-abi=softfp -mfpu=neon" CRYPTOPP_ARMV7A_SOFTFP - "${TEST_PROG_DIR}/test_arm_neon.cxx") - - if (CRYPTOPP_ARMV7A_HARD) - set(CRYPTOPP_ARMV7A_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon") - elseif (CRYPTOPP_ARMV7A_SOFTFP) - set(CRYPTOPP_ARMV7A_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon") - else () - AddCompileOption("-DCRYPTOPP_DISABLE_NEON") - endif() - - if (CRYPTOPP_ARMV7A_HARD OR CRYPTOPP_ARMV7A_SOFTFP) - # Add ASM files for ARM - if (NOT MSVC) - list(APPEND cryptopp_SOURCES ${SRC_DIR}/aes_armv4.S) - set_source_files_properties(${SRC_DIR}/aes_armv4.S PROPERTIES LANGUAGE C) - endif () - - set_source_files_properties(${SRC_DIR}/aes_armv4.S PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/neon_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/simeck_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") - endif () - - elseif (CRYPTOPP_POWERPC OR CRYPTOPP_POWERPC64) - - if (CMAKE_CXX_COMPILER MATCHES "xlC") - set(CRYPTOPP_ALTIVEC_FLAGS "-qaltivec") - set(CRYPTOPP_POWER4_FLAGS "-qarch=pwr4 -qaltivec") - set(CRYPTOPP_POWER5_FLAGS "-qarch=pwr5 -qaltivec") - set(CRYPTOPP_POWER6_FLAGS "-qarch=pwr6 -qaltivec") - set(CRYPTOPP_POWER7_FLAGS "-qarch=pwr7 -qaltivec") - set(CRYPTOPP_POWER8_FLAGS "-qarch=pwr8 -qaltivec") - set(CRYPTOPP_POWER9_FLAGS "-qarch=pwr9 -qaltivec") - else () - set(CRYPTOPP_ALTIVEC_FLAGS "-maltivec") - set(CRYPTOPP_POWER7_FLAGS "-mcpu=power7 -maltivec") - set(CRYPTOPP_POWER8_FLAGS "-mcpu=power8 -maltivec") - set(CRYPTOPP_POWER9_FLAGS "-mcpu=power9 -maltivec") - endif () - - CheckCompileLinkOption("${CRYPTOPP_ALTIVEC_FLAGS}" PPC_ALTIVEC_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cxx") - - # Hack for XLC - if (CMAKE_CXX_COMPILER MATCHES "xlC") - if (NOT PPC_ALTIVEC_FLAG) - CheckCompileLinkOption("${CRYPTOPP_POWER4_FLAGS}" PPC_POWER4_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cxx") - if (PPC_POWER4_FLAG) - set(PPC_ALTIVEC_FLAG 1) - set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER4_FLAGS}") + if (CRYPTOPP_ARMV8A_CRC) + set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crc") endif () - endif () - if (NOT PPC_ALTIVEC_FLAG) - CheckCompileLinkOption("${CRYPTOPP_POWER5_FLAGS}" PPC_POWER5_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cxx") - if (PPC_POWER5_FLAG) - set(PPC_ALTIVEC_FLAG 1) - set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER5_FLAGS}") + if (CRYPTOPP_ARMV8A_CRYPTO) + set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") + set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") + set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") + set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") + set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") endif () - endif () - if (NOT PPC_ALTIVEC_FLAG) - CheckCompileLinkOption("${CRYPTOPP_POWER6_FLAGS}" PPC_POWER6_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cxx") - if (PPC_POWER6_FLAG) - set(PPC_ALTIVEC_FLAG 1) - set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER6_FLAGS}") + + elseif (CRYPTOPP_ARM OR CRYPTOPP_ARMHF) + + # Need to set floating point ABI to something, like "hard" of "softfp". + # Most Linux use hard floats. + CheckCompileLinkOption("-march=armv7-a -mfpu=neon" CRYPTOPP_ARMV7A_NEON + "${TEST_PROG_DIR}/test_arm_neon.cxx") + CheckCompileLinkOption("-march=armv7-a -mfloat-abi=hard -mfpu=neon" CRYPTOPP_ARMV7A_HARD + "${TEST_PROG_DIR}/test_arm_neon.cxx") + CheckCompileLinkOption("-march=armv7-a -mfloat-abi=softfp -mfpu=neon" CRYPTOPP_ARMV7A_SOFTFP + "${TEST_PROG_DIR}/test_arm_neon.cxx") + + if (CRYPTOPP_ARMV7A_HARD) + set(CRYPTOPP_ARMV7A_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon") + elseif (CRYPTOPP_ARMV7A_SOFTFP) + set(CRYPTOPP_ARMV7A_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon") + else () + AddCompileOption("-DCRYPTOPP_DISABLE_NEON") + endif() + + if (CRYPTOPP_ARMV7A_HARD OR CRYPTOPP_ARMV7A_SOFTFP) + # Add ASM files for ARM + if (NOT MSVC) + list(APPEND cryptopp_SOURCES ${SRC_DIR}/aes_armv4.S) + set_source_files_properties(${SRC_DIR}/aes_armv4.S PROPERTIES LANGUAGE C) + endif () + + set_source_files_properties(${SRC_DIR}/aes_armv4.S PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/neon_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/simeck_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") + set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "${CRYPTOPP_ARMV7A_FLAGS}") endif () - endif () + + elseif (CRYPTOPP_POWERPC OR CRYPTOPP_POWERPC64) + + if (CMAKE_CXX_COMPILER MATCHES "xlC") + set(CRYPTOPP_ALTIVEC_FLAGS "-qaltivec") + set(CRYPTOPP_POWER4_FLAGS "-qarch=pwr4 -qaltivec") + set(CRYPTOPP_POWER5_FLAGS "-qarch=pwr5 -qaltivec") + set(CRYPTOPP_POWER6_FLAGS "-qarch=pwr6 -qaltivec") + set(CRYPTOPP_POWER7_FLAGS "-qarch=pwr7 -qaltivec") + set(CRYPTOPP_POWER8_FLAGS "-qarch=pwr8 -qaltivec") + set(CRYPTOPP_POWER9_FLAGS "-qarch=pwr9 -qaltivec") + else () + set(CRYPTOPP_ALTIVEC_FLAGS "-maltivec") + set(CRYPTOPP_POWER7_FLAGS "-mcpu=power7 -maltivec") + set(CRYPTOPP_POWER8_FLAGS "-mcpu=power8 -maltivec") + set(CRYPTOPP_POWER9_FLAGS "-mcpu=power9 -maltivec") + endif () + + CheckCompileLinkOption("${CRYPTOPP_ALTIVEC_FLAGS}" PPC_ALTIVEC_FLAG + "${TEST_PROG_DIR}/test_ppc_altivec.cxx") + + # Hack for XLC + if (CMAKE_CXX_COMPILER MATCHES "xlC") + if (NOT PPC_ALTIVEC_FLAG) + CheckCompileLinkOption("${CRYPTOPP_POWER4_FLAGS}" PPC_POWER4_FLAG + "${TEST_PROG_DIR}/test_ppc_altivec.cxx") + if (PPC_POWER4_FLAG) + set(PPC_ALTIVEC_FLAG 1) + set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER4_FLAGS}") + endif () + endif () + if (NOT PPC_ALTIVEC_FLAG) + CheckCompileLinkOption("${CRYPTOPP_POWER5_FLAGS}" PPC_POWER5_FLAG + "${TEST_PROG_DIR}/test_ppc_altivec.cxx") + if (PPC_POWER5_FLAG) + set(PPC_ALTIVEC_FLAG 1) + set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER5_FLAGS}") + endif () + endif () + if (NOT PPC_ALTIVEC_FLAG) + CheckCompileLinkOption("${CRYPTOPP_POWER6_FLAGS}" PPC_POWER6_FLAG + "${TEST_PROG_DIR}/test_ppc_altivec.cxx") + if (PPC_POWER6_FLAG) + set(PPC_ALTIVEC_FLAG 1) + set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER6_FLAGS}") + endif () + endif () + endif () + + CheckCompileLinkOption("${CRYPTOPP_POWER7_FLAGS}" PPC_POWER7_FLAG + "${TEST_PROG_DIR}/test_ppc_power7.cxx") + + CheckCompileLinkOption("${CRYPTOPP_POWER8_FLAGS}" PPC_POWER8_FLAG + "${TEST_PROG_DIR}/test_ppc_power8.cxx") + + CheckCompileLinkOption("${CRYPTOPP_POWER9_FLAGS}" PPC_POWER9_FLAG + "${TEST_PROG_DIR}/test_ppc_power9.cxx") + + if (PPC_POWER9_FLAG AND NOT DISABLE_POWER9) + set_source_files_properties(${SRC_DIR}/ppc_power9.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER9_FLAGS}) + endif () + + if (PPC_POWER8_FLAG AND NOT DISABLE_POWER8) + set_source_files_properties(${SRC_DIR}/ppc_power8.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) + set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) + #set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) + set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) + set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) + set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) + set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) + set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) + set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) + set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) + endif () + + if (PPC_POWER7_FLAG AND NOT DISABLE_POWER7) + set_source_files_properties(${SRC_DIR}/ppc_power7.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) + set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) + set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) + set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) + set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) + set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) + set_source_files_properties(${SRC_DIR}/simeck_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) + set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) + set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) + endif () + + if (PPC_ALTIVEC_FLAG AND NOT DISABLE_ALTIVEC) + set_source_files_properties(${SRC_DIR}/ppc_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) + endif () + + # Drop to Power7 if Power8 unavailable + if (NOT PPC_POWER8_FLAG) + if (PPC_POWER7_FLAG) + set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) + endif () + endif () + + # Drop to Altivec if Power7 unavailable + if (NOT PPC_POWER7_FLAG) + if (PPC_ALTIVEC_FLAG) + set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) + set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) + set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) + set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) + endif () + endif () + + if (NOT PPC_ALTIVEC_FLAG) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ALTIVEC") + elseif (NOT PPC_POWER7_FLAG) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER7") + elseif (NOT PPC_POWER8_FLAG) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER8") + elseif (NOT PPC_POWER9_FLAG) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER9") + endif () + endif () - - CheckCompileLinkOption("${CRYPTOPP_POWER7_FLAGS}" PPC_POWER7_FLAG - "${TEST_PROG_DIR}/test_ppc_power7.cxx") - - CheckCompileLinkOption("${CRYPTOPP_POWER8_FLAGS}" PPC_POWER8_FLAG - "${TEST_PROG_DIR}/test_ppc_power8.cxx") - - CheckCompileLinkOption("${CRYPTOPP_POWER9_FLAGS}" PPC_POWER9_FLAG - "${TEST_PROG_DIR}/test_ppc_power9.cxx") - - if (PPC_POWER9_FLAG AND NOT DISABLE_POWER9) - set_source_files_properties(${SRC_DIR}/ppc_power9.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER9_FLAGS}) - endif () - - if (PPC_POWER8_FLAG AND NOT DISABLE_POWER8) - set_source_files_properties(${SRC_DIR}/ppc_power8.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - #set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - endif () - - if (PPC_POWER7_FLAG AND NOT DISABLE_POWER7) - set_source_files_properties(${SRC_DIR}/ppc_power7.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - set_source_files_properties(${SRC_DIR}/simeck_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - endif () - - if (PPC_ALTIVEC_FLAG AND NOT DISABLE_ALTIVEC) - set_source_files_properties(${SRC_DIR}/ppc_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - endif () - - # Drop to Power7 if Power8 unavailable - if (NOT PPC_POWER8_FLAG) - if (PPC_POWER7_FLAG) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - endif () - endif () - - # Drop to Altivec if Power7 unavailable - if (NOT PPC_POWER7_FLAG) - if (PPC_ALTIVEC_FLAG) - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - endif () - endif () - - if (NOT PPC_ALTIVEC_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ALTIVEC") - elseif (NOT PPC_POWER7_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER7") - elseif (NOT PPC_POWER8_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER8") - elseif (NOT PPC_POWER9_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER9") - endif () - - endif () endif () # New as of Pull Request 461, http://github.com/weidai11/cryptopp/pull/461. if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - if (CRYPTOPP_AMD64 OR CRYPTOPP_I386 OR CRYPTOPP_X32) + if (CRYPTOPP_AMD64 OR CRYPTOPP_I386 OR CRYPTOPP_X32) - CheckCompileLinkOption("-xarch=sse2" CRYPTOPP_IA32_SSE2 - "${TEST_PROG_DIR}/test_x86_sse2.cxx") - CheckCompileLinkOption("-xarch=ssse3" CRYPTOPP_IA32_SSSE3 - "${TEST_PROG_DIR}/test_x86_ssse3.cxx") - CheckCompileLinkOption("-xarch=sse4_1" CRYPTOPP_IA32_SSE41 - "${TEST_PROG_DIR}/test_x86_sse41.cxx") - CheckCompileLinkOption("-xarch=sse4_2" CRYPTOPP_IA32_SSE42 - "${TEST_PROG_DIR}/test_x86_sse42.cxx") - CheckCompileLinkOption("-xarch=aes" CRYPTOPP_IA32_CLMUL - "${TEST_PROG_DIR}/test_x86_clmul.cxx") - CheckCompileLinkOption("-xarch=aes" CRYPTOPP_IA32_AES - "${TEST_PROG_DIR}/test_x86_aes.cxx") - CheckCompileLinkOption("-xarch=avx" CRYPTOPP_IA32_AVX - "${TEST_PROG_DIR}/test_x86_avx.cxx") - CheckCompileLinkOption("-xarch=avx2" CRYPTOPP_IA32_AVX2 - "${TEST_PROG_DIR}/test_x86_avx2.cxx") - CheckCompileLinkOption("-xarch=sha" CRYPTOPP_IA32_SHA - "${TEST_PROG_DIR}/test_x86_sha.cxx") + CheckCompileLinkOption("-xarch=sse2" CRYPTOPP_IA32_SSE2 + "${TEST_PROG_DIR}/test_x86_sse2.cxx") + CheckCompileLinkOption("-xarch=ssse3" CRYPTOPP_IA32_SSSE3 + "${TEST_PROG_DIR}/test_x86_ssse3.cxx") + CheckCompileLinkOption("-xarch=sse4_1" CRYPTOPP_IA32_SSE41 + "${TEST_PROG_DIR}/test_x86_sse41.cxx") + CheckCompileLinkOption("-xarch=sse4_2" CRYPTOPP_IA32_SSE42 + "${TEST_PROG_DIR}/test_x86_sse42.cxx") + CheckCompileLinkOption("-xarch=aes" CRYPTOPP_IA32_CLMUL + "${TEST_PROG_DIR}/test_x86_clmul.cxx") + CheckCompileLinkOption("-xarch=aes" CRYPTOPP_IA32_AES + "${TEST_PROG_DIR}/test_x86_aes.cxx") + CheckCompileLinkOption("-xarch=avx" CRYPTOPP_IA32_AVX + "${TEST_PROG_DIR}/test_x86_avx.cxx") + CheckCompileLinkOption("-xarch=avx2" CRYPTOPP_IA32_AVX2 + "${TEST_PROG_DIR}/test_x86_avx2.cxx") + CheckCompileLinkOption("-xarch=sha" CRYPTOPP_IA32_SHA + "${TEST_PROG_DIR}/test_x86_sha.cxx") - # Each -xarch=XXX options must be added to LDFLAGS if the option is used during a compile. - set(XARCH_LDFLAGS "") + # Each -xarch=XXX options must be added to LDFLAGS if the option is used during a compile. + set(XARCH_LDFLAGS "") + + if (CRYPTOPP_IA32_SSE2 AND NOT DISABLE_ASM) + set_source_files_properties(${SRC_DIR}/sse_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse2") + set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse2") + set(XARCH_LDFLAGS "-xarch=sse2") + endif () + if (CRYPTOPP_IA32_SSSE3 AND NOT DISABLE_SSSE3) + set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") + set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") + set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") + set_source_files_properties(${SRC_DIR}/simeck_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") + set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") + set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") + set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=ssse3") + if (CRYPTOPP_IA32_SSE41 AND NOT DISABLE_SSE4) + set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") + set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") + set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") + set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") + set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sse4_1") + endif () + if (CRYPTOPP_IA32_SSE42 AND NOT DISABLE_SSE4) + set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_2") + set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sse4_2") + if (CRYPTOPP_IA32_CLMUL AND NOT DISABLE_CLMUL) + set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") + set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") + endif () + if (CRYPTOPP_IA32_AES AND NOT DISABLE_AES) + set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") + set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") + set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=aes") + endif () + #if (CRYPTOPP_IA32_AVX AND NOT DISABLE_AVX) + # set_source_files_properties(${SRC_DIR}/XXX_avx.cpp PROPERTIES COMPILE_FLAGS "-xarch=avx2") + # set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=avx") + #endif () + if (CRYPTOPP_IA32_AVX2 AND NOT DISABLE_AVX2) + set_source_files_properties(${SRC_DIR}/chacha_avx.cpp PROPERTIES COMPILE_FLAGS "-xarch=avx2") + set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=avx2") + endif () + if (CRYPTOPP_IA32_SHA AND NOT DISABLE_SHA) + set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha") + set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha") + set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sha") + endif () + endif () + endif () + + # https://stackoverflow.com/a/6088646/608639 + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") + + # elseif (CRYPTOPP_SPARC OR CRYPTOPP_SPARC64) - if (CRYPTOPP_IA32_SSE2 AND NOT DISABLE_ASM) - set_source_files_properties(${SRC_DIR}/sse_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse2") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse2") - set(XARCH_LDFLAGS "-xarch=sse2") endif () - if (CRYPTOPP_IA32_SSSE3 AND NOT DISABLE_SSSE3) - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/simeck_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=ssse3") - if (CRYPTOPP_IA32_SSE41 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") - set_source_files_properties(${SRC_DIR}/simon64_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") - set_source_files_properties(${SRC_DIR}/speck64_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sse4_1") - endif () - if (CRYPTOPP_IA32_SSE42 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_2") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sse4_2") - if (CRYPTOPP_IA32_CLMUL AND NOT DISABLE_CLMUL) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - endif () - if (CRYPTOPP_IA32_AES AND NOT DISABLE_AES) - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=aes") - endif () - #if (CRYPTOPP_IA32_AVX AND NOT DISABLE_AVX) - # set_source_files_properties(${SRC_DIR}/XXX_avx.cpp PROPERTIES COMPILE_FLAGS "-xarch=avx2") - # set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=avx") - #endif () - if (CRYPTOPP_IA32_AVX2 AND NOT DISABLE_AVX2) - set_source_files_properties(${SRC_DIR}/chacha_avx.cpp PROPERTIES COMPILE_FLAGS "-xarch=avx2") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=avx2") - endif () - if (CRYPTOPP_IA32_SHA AND NOT DISABLE_SHA) - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha") - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sha") - endif () - endif () - endif () - - # https://stackoverflow.com/a/6088646/608639 - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") - - # elseif (CRYPTOPP_SPARC OR CRYPTOPP_SPARC64) - - endif () endif () # Attempt to determine a suitable native option @@ -948,16 +971,16 @@ if (CRYPTOPP_NATIVE_ARCH) CheckCompileOption("-march=native" NATIVE_ARCH) if (NATIVE_ARCH) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-march=native") + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-march=native") else () - CheckCompileOption("-native" NATIVE_ARCH) - if (NATIVE_ARCH) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-native") - endif () + CheckCompileOption("-native" NATIVE_ARCH) + if (NATIVE_ARCH) + list(APPEND CRYPTOPP_COMPILE_OPTIONS "-native") + endif () endif () if (NOT NATIVE_ARCH) - message(WARNING "CRYPTOPP_NATIVE_ARCH enabled, but failed to detect native architecture option") + message(WARNING "CRYPTOPP_NATIVE_ARCH enabled, but failed to detect native architecture option") endif () endif() @@ -970,80 +993,80 @@ endif() # target_compile_xxxx commands # !!! DO NOT try to use the old way for newer version - it does not work !!! function(cryptopp_target_compile_properties target) - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") - target_compile_definitions(${target} PUBLIC ${CRYPTOPP_COMPILE_DEFINITIONS}) - else() - string (REPLACE ";" " " PROP_STR "${CRYPTOPP_COMPILE_DEFINITIONS}") - set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS "${CRYPTOPP_COMPILE_DEFINITIONS}") - endif() - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.12") - target_compile_options(${target} PUBLIC ${CRYPTOPP_COMPILE_OPTIONS}) - else() - string (REPLACE ";" " " PROP_STR "${CRYPTOPP_COMPILE_OPTIONS}") - set_target_properties(${target} PROPERTIES COMPILE_FLAGS "${PROP_STR}") - endif() + if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") + target_compile_definitions(${target} PUBLIC ${CRYPTOPP_COMPILE_DEFINITIONS}) + else() + string (REPLACE ";" " " PROP_STR "${CRYPTOPP_COMPILE_DEFINITIONS}") + set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS "${CRYPTOPP_COMPILE_DEFINITIONS}") + endif() + if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.12") + target_compile_options(${target} PUBLIC ${CRYPTOPP_COMPILE_OPTIONS}) + else() + string (REPLACE ";" " " PROP_STR "${CRYPTOPP_COMPILE_OPTIONS}") + set_target_properties(${target} PROPERTIES COMPILE_FLAGS "${PROP_STR}") + endif() endfunction() set(cryptopp_LIBRARY_SOURCES ${cryptopp_SOURCES_ASM}) if (USE_INTERMEDIATE_OBJECTS_TARGET AND NOT ${CMAKE_VERSION} VERSION_LESS "2.8.8") - add_library(cryptopp-object OBJECT ${cryptopp_SOURCES}) - cryptopp_target_compile_properties(cryptopp-object) + add_library(cryptopp-object OBJECT ${cryptopp_SOURCES}) + cryptopp_target_compile_properties(cryptopp-object) - list(APPEND cryptopp_LIBRARY_SOURCES - $ - ) + list(APPEND cryptopp_LIBRARY_SOURCES + $ + ) else () - list(APPEND cryptopp_LIBRARY_SOURCES - ${cryptopp_SOURCES} - ) + list(APPEND cryptopp_LIBRARY_SOURCES + ${cryptopp_SOURCES} + ) endif () if (BUILD_STATIC) - add_library(cryptopp-static STATIC ${cryptopp_LIBRARY_SOURCES}) - cryptopp_target_compile_properties(cryptopp-static) - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") - target_include_directories(cryptopp-static PUBLIC $ $) - else () - set_target_properties(cryptopp-static PROPERTIES INCLUDE_DIRECTORIES "$ $") - endif () + add_library(cryptopp-static STATIC ${cryptopp_LIBRARY_SOURCES}) + cryptopp_target_compile_properties(cryptopp-static) + if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") + target_include_directories(cryptopp-static PUBLIC $ $) + else () + set_target_properties(cryptopp-static PROPERTIES INCLUDE_DIRECTORIES "$ $") + endif () endif () if (BUILD_SHARED) - add_library(cryptopp-shared SHARED ${cryptopp_LIBRARY_SOURCES}) - cryptopp_target_compile_properties(cryptopp-shared) - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") - target_include_directories(cryptopp-shared PUBLIC $ $) - else () - set_target_properties(cryptopp-shared PROPERTIES INCLUDE_DIRECTORIES "$ $") - endif () + add_library(cryptopp-shared SHARED ${cryptopp_LIBRARY_SOURCES}) + cryptopp_target_compile_properties(cryptopp-shared) + if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") + target_include_directories(cryptopp-shared PUBLIC $ $) + else () + set_target_properties(cryptopp-shared PROPERTIES INCLUDE_DIRECTORIES "$ $") + endif () endif () # Set filenames for targets to be "cryptopp" if (NOT MSVC) - set(COMPAT_VERSION ${cryptopp_VERSION_MAJOR}.${cryptopp_VERSION_MINOR}) + set(COMPAT_VERSION ${cryptopp_VERSION_MAJOR}.${cryptopp_VERSION_MINOR}) - if (BUILD_STATIC) - set_target_properties(cryptopp-static - PROPERTIES - OUTPUT_NAME cryptopp) - endif () - if (BUILD_SHARED) - set_target_properties(cryptopp-shared - PROPERTIES - SOVERSION ${COMPAT_VERSION} - OUTPUT_NAME cryptopp) - endif () + if (BUILD_STATIC) + set_target_properties(cryptopp-static + PROPERTIES + OUTPUT_NAME cryptopp) + endif () + if (BUILD_SHARED) + set_target_properties(cryptopp-shared + PROPERTIES + SOVERSION ${COMPAT_VERSION} + OUTPUT_NAME cryptopp) + endif () endif () # Add alternate ways to invoke the build for the shared library that are # similar to how the crypto++ 'make' tool works. # see https://github.com/noloader/cryptopp-cmake/issues/32 if (BUILD_STATIC) - add_custom_target(static DEPENDS cryptopp-static) + add_custom_target(static DEPENDS cryptopp-static) endif () if (BUILD_SHARED) - add_custom_target(shared DEPENDS cryptopp-shared) - add_custom_target(dynamic DEPENDS cryptopp-shared) + add_custom_target(shared DEPENDS cryptopp-shared) + add_custom_target(dynamic DEPENDS cryptopp-shared) endif () #============================================================================ @@ -1051,30 +1074,30 @@ endif () #============================================================================ if (WIN32) - if (BUILD_STATIC) - target_link_libraries(cryptopp-static ws2_32) - endif () - if (BUILD_SHARED) - target_link_libraries(cryptopp-shared ws2_32) - endif () + if (BUILD_STATIC) + target_link_libraries(cryptopp-static ws2_32) + endif () + if (BUILD_SHARED) + target_link_libraries(cryptopp-shared ws2_32) + endif () endif () # This may need to be expanded to "Solaris" if (CRYPTOPP_SOLARIS) - if (BUILD_STATIC) - target_link_libraries(cryptopp-static nsl socket) - endif () - if (BUILD_SHARED) - target_link_libraries(cryptopp-shared nsl socket) - endif () + if (BUILD_STATIC) + target_link_libraries(cryptopp-static nsl socket) + endif () + if (BUILD_SHARED) + target_link_libraries(cryptopp-shared nsl socket) + endif () endif () find_package(Threads) if (BUILD_STATIC) - target_link_libraries(cryptopp-static ${CMAKE_THREAD_LIBS_INIT}) + target_link_libraries(cryptopp-static ${CMAKE_THREAD_LIBS_INIT}) endif () if (BUILD_SHARED) - target_link_libraries(cryptopp-shared ${CMAKE_THREAD_LIBS_INIT}) + target_link_libraries(cryptopp-shared ${CMAKE_THREAD_LIBS_INIT}) endif () #============================================================================ @@ -1083,24 +1106,24 @@ endif () enable_testing() if (BUILD_TESTING) - add_executable(cryptest ${cryptopp_SOURCES_TEST}) - target_link_libraries(cryptest cryptopp-static) + add_executable(cryptest ${cryptopp_SOURCES_TEST}) + target_link_libraries(cryptest cryptopp-static) - # Setting "cryptest" binary name to "cryptest.exe" - if (NOT (WIN32 OR CYGWIN)) - set_target_properties(cryptest PROPERTIES OUTPUT_NAME cryptest.exe) - endif () - if (NOT TARGET cryptest.exe) - add_custom_target(cryptest.exe) - add_dependencies(cryptest.exe cryptest) - endif () + # Setting "cryptest" binary name to "cryptest.exe" + if (NOT (WIN32 OR CYGWIN)) + set_target_properties(cryptest PROPERTIES OUTPUT_NAME cryptest.exe) + endif () + if (NOT TARGET cryptest.exe) + add_custom_target(cryptest.exe) + add_dependencies(cryptest.exe cryptest) + endif () - file(COPY ${SRC_DIR}/TestData DESTINATION ${PROJECT_BINARY_DIR}) - file(COPY ${SRC_DIR}/TestVectors DESTINATION ${PROJECT_BINARY_DIR}) + file(COPY ${SRC_DIR}/TestData DESTINATION ${PROJECT_BINARY_DIR}) + file(COPY ${SRC_DIR}/TestVectors DESTINATION ${PROJECT_BINARY_DIR}) - add_test(NAME build_cryptest COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target cryptest) - add_test(NAME cryptest COMMAND $ v) - set_tests_properties(cryptest PROPERTIES DEPENDS build_cryptest) + add_test(NAME build_cryptest COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target cryptest) + add_test(NAME cryptest COMMAND $ v) + set_tests_properties(cryptest PROPERTIES DEPENDS build_cryptest) endif () #============================================================================ @@ -1108,24 +1131,24 @@ endif () #============================================================================ if (BUILD_DOCUMENTATION) - find_package(Doxygen REQUIRED) + find_package(Doxygen REQUIRED) - set(in_source_DOCS_DIR "${SRC_DIR}/html-docs") - set(out_source_DOCS_DIR "${PROJECT_BINARY_DIR}/html-docs") + set(in_source_DOCS_DIR "${SRC_DIR}/html-docs") + set(out_source_DOCS_DIR "${PROJECT_BINARY_DIR}/html-docs") - add_custom_target(docs ALL - COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile -d CRYPTOPP_DOXYGEN_PROCESSING - WORKING_DIRECTORY ${SRC_DIR} - SOURCES ${SRC_DIR}/Doxyfile - ) + add_custom_target(docs ALL + COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile -d CRYPTOPP_DOXYGEN_PROCESSING + WORKING_DIRECTORY ${SRC_DIR} + SOURCES ${SRC_DIR}/Doxyfile + ) - if (NOT ${in_source_DOCS_DIR} STREQUAL ${out_source_DOCS_DIR}) - add_custom_command( - TARGET docs POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${in_source_DOCS_DIR}" "${out_source_DOCS_DIR}" - COMMAND ${CMAKE_COMMAND} -E remove_directory "${in_source_DOCS_DIR}" - ) - endif () + if (NOT ${in_source_DOCS_DIR} STREQUAL ${out_source_DOCS_DIR}) + add_custom_command( + TARGET docs POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory "${in_source_DOCS_DIR}" "${out_source_DOCS_DIR}" + COMMAND ${CMAKE_COMMAND} -E remove_directory "${in_source_DOCS_DIR}" + ) + endif () endif () #============================================================================ @@ -1136,81 +1159,81 @@ set(export_name "cryptopp-targets") # Runtime package if (BUILD_SHARED) - export(TARGETS cryptopp-shared FILE ${export_name}.cmake ) - install( - TARGETS cryptopp-shared - EXPORT ${export_name} - DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - ) + export(TARGETS cryptopp-shared FILE ${export_name}.cmake ) + install( + TARGETS cryptopp-shared + EXPORT ${export_name} + DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) endif () # Development package if (BUILD_STATIC) - export(TARGETS cryptopp-static FILE ${export_name}.cmake ) - install(TARGETS cryptopp-static EXPORT ${export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR}) + export(TARGETS cryptopp-static FILE ${export_name}.cmake ) + install(TARGETS cryptopp-static EXPORT ${export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif () install(FILES ${cryptopp_HEADERS} DESTINATION include/cryptopp) # CMake Package if (NOT CMAKE_VERSION VERSION_LESS 2.8.8) - include(CMakePackageConfigHelpers) - write_basic_package_version_file("${PROJECT_BINARY_DIR}/cryptopp-config-version.cmake" VERSION ${cryptopp_VERSION_MAJOR}.${cryptopp_VERSION_MINOR}.${cryptopp_VERSION_PATCH} COMPATIBILITY SameMajorVersion) - install(FILES cryptopp-config.cmake ${PROJECT_BINARY_DIR}/cryptopp-config-version.cmake DESTINATION "lib/cmake/cryptopp") - install(EXPORT ${export_name} DESTINATION "lib/cmake/cryptopp") + include(CMakePackageConfigHelpers) + write_basic_package_version_file("${PROJECT_BINARY_DIR}/cryptopp-config-version.cmake" VERSION ${cryptopp_VERSION_MAJOR}.${cryptopp_VERSION_MINOR}.${cryptopp_VERSION_PATCH} COMPATIBILITY SameMajorVersion) + install(FILES cryptopp-config.cmake ${PROJECT_BINARY_DIR}/cryptopp-config-version.cmake DESTINATION "lib/cmake/cryptopp") + install(EXPORT ${export_name} DESTINATION "lib/cmake/cryptopp") endif () # Tests if (BUILD_TESTING) - install(TARGETS cryptest DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(DIRECTORY ${SRC_DIR}/TestData DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cryptopp) - install(DIRECTORY ${SRC_DIR}/TestVectors DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cryptopp) + install(TARGETS cryptest DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(DIRECTORY ${SRC_DIR}/TestData DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cryptopp) + install(DIRECTORY ${SRC_DIR}/TestVectors DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cryptopp) endif () # Documentation if (BUILD_DOCUMENTATION) - install(DIRECTORY "${out_source_DOCS_DIR}" DESTINATION ${CMAKE_INSTALL_DOCDIR}) + install(DIRECTORY "${out_source_DOCS_DIR}" DESTINATION ${CMAKE_INSTALL_DOCDIR}) endif () # Print a configuration summary. We want CXX and CXXFLAGS, but they are not includd in ALL. if (CRYPTOPP_I386) - message(STATUS "Platform: i386/i686") + message(STATUS "Platform: i386/i686") elseif (CRYPTOPP_AMD64) - message(STATUS "Platform: x86_64") + message(STATUS "Platform: x86_64") elseif (CRYPTOPP_X32) - message(STATUS "Platform: x86_64-x32") + message(STATUS "Platform: x86_64-x32") elseif (CRYPTOPP_ARMHF) - message(STATUS "Platform: armhf") + message(STATUS "Platform: armhf") elseif (CRYPTOPP_ARM) - message(STATUS "Platform: arm") + message(STATUS "Platform: arm") elseif (CRYPTOPP_AARCH32) - message(STATUS "Platform: Aarch32") + message(STATUS "Platform: Aarch32") elseif (CRYPTOPP_AARCH64) - message(STATUS "Platform: Aarch64") + message(STATUS "Platform: Aarch64") elseif (CRYPTOPP_SPARC) - message(STATUS "Platform: Sparc") + message(STATUS "Platform: Sparc") elseif (CRYPTOPP_SPARC64) - message(STATUS "Platform: Sparc64") + message(STATUS "Platform: Sparc64") elseif (CRYPTOPP_POWERPC) - message(STATUS "Platform: PowerPC") + message(STATUS "Platform: PowerPC") elseif (CRYPTOPP_POWERPC64) - message(STATUS "Platform: PowerPC-64") + message(STATUS "Platform: PowerPC-64") elseif (CRYPTOPP_MINGW32) - message(STATUS "Platform: MinGW-32") + message(STATUS "Platform: MinGW-32") elseif (CRYPTOPP_MINGW32) - message(STATUS "Platform: MinGW-64") + message(STATUS "Platform: MinGW-64") endif () if (CRYPTOPP_ARMV7A_NEON) - message(STATUS "NEON: TRUE") + message(STATUS "NEON: TRUE") endif () if (CRYPTOPP_NATIVE_ARCH) - message(STATUS "Native arch: TRUE") + message(STATUS "Native arch: TRUE") else () - message(STATUS "Native arch: FALSE") + message(STATUS "Native arch: FALSE") endif () message(STATUS "Compiler: ${CMAKE_CXX_COMPILER}") message(STATUS "Compiler options: ${CMAKE_CXX_FLAGS} ${CRYPTOPP_COMPILE_OPTIONS}") message(STATUS "Compiler definitions: ${CRYPTOPP_COMPILE_DEFINITIONS}") -message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") +message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") \ No newline at end of file diff --git a/vendor/cryptopp/vendor_cryptopp/cryptopp-config.cmake b/vendor/cryptopp/vendor_cryptopp/cryptopp-config.cmake index b739501a..66487005 100644 --- a/vendor/cryptopp/vendor_cryptopp/cryptopp-config.cmake +++ b/vendor/cryptopp/vendor_cryptopp/cryptopp-config.cmake @@ -1 +1 @@ -include("${CMAKE_CURRENT_LIST_DIR}/cryptopp-targets.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/cryptopp-targets.cmake") \ No newline at end of file From f573843f27fc297d21d389c7c4e15495044027ee Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Thu, 28 Feb 2019 02:29:10 -0800 Subject: [PATCH 5/5] Fix --unmount--idle --- ChangeLog.txt | 1 + src/cpp-utils/thread/ThreadSystem.cpp | 19 ++++++++++++++++++ src/cryfs-cli/Cli.cpp | 6 +++++- test/cpp-utils/process/SubprocessTest.cpp | 24 +++++++++++++++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 74445b20..db50a259 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -3,6 +3,7 @@ Version 0.10.1 (unreleased) Fixed bugs: * If file system migration encounters files or folders with the wrong format in the base directory, it now just ignores them instead of crashing. * When trying to migrate a file system from CryFS 0.9.3 or older, show an error message suggesting to first open it with 0.9.10 because we can't load that anymore. +* The '--unmount-idle' parameter works again Version 0.10.0 diff --git a/src/cpp-utils/thread/ThreadSystem.cpp b/src/cpp-utils/thread/ThreadSystem.cpp index dc5a62a6..13a0b0a6 100644 --- a/src/cpp-utils/thread/ThreadSystem.cpp +++ b/src/cpp-utils/thread/ThreadSystem.cpp @@ -52,15 +52,34 @@ namespace cpputils { void ThreadSystem::_stopAllThreadsForRestart() { _mutex.lock(); // Is unlocked in the after-fork handler. This way, the whole fork() is protected. for (RunningThread &thread : _runningThreads) { + if (boost::this_thread::get_id() == thread.thread.get_id()) { + // This means fork was called from within one of our _runningThreads. + // We cannot wait or ourselves to die. + // Forking from within a thread is usually chaos since the forked process only gets a copy + // of the calling thread as its new main thread. So we (hopefully) never should do this. + // This is, however, a valid pattern when fork() is directly followed by an exec(). + // So let's just ignore this situation and continue as if nothing happened, assuming an exec() + // follows soon. + continue; + } thread.thread.interrupt(); } for (RunningThread &thread : _runningThreads) { + if (boost::this_thread::get_id() == thread.thread.get_id()) { + // This means fork was called from within one of our _runningThreads. See comment above. + continue; + } thread.thread.join(); } } void ThreadSystem::_restartAllThreads() { for (RunningThread &thread : _runningThreads) { + if (thread.thread.joinable()) { + // Because all non-self threads have been terminated in _stopAllThreadsForRestart, + // this means fork was called from within one of our _runningThreads. See comment above. + continue; + } thread.thread = _startThread(thread.loopIteration, thread.threadName); } _mutex.unlock(); // Was locked in the before-fork handler diff --git a/src/cryfs-cli/Cli.cpp b/src/cryfs-cli/Cli.cpp index b4e7a508..261459f9 100644 --- a/src/cryfs-cli/Cli.cpp +++ b/src/cryfs-cli/Cli.cpp @@ -252,7 +252,11 @@ namespace cryfs_cli { ASSERT(_device != none, "File system not ready to be initialized. Was it already initialized before?"); //TODO Test auto unmounting after idle timeout - _idleUnmounter = _createIdleCallback(options.unmountAfterIdleMinutes(), [fs] {fs->stop();}); + const boost::optional idle_minutes = options.unmountAfterIdleMinutes(); + _idleUnmounter = _createIdleCallback(idle_minutes, [fs, idle_minutes] { + LOG(INFO, "Unmounting because file system was idle for {} minutes", *idle_minutes); + fs->stop(); + }); if (_idleUnmounter != none) { (*_device)->onFsAction(std::bind(&CallAfterTimeout::resetTimer, _idleUnmounter->get())); } diff --git a/test/cpp-utils/process/SubprocessTest.cpp b/test/cpp-utils/process/SubprocessTest.cpp index a5b0e93d..9a1c857c 100644 --- a/test/cpp-utils/process/SubprocessTest.cpp +++ b/test/cpp-utils/process/SubprocessTest.cpp @@ -1,6 +1,8 @@ #include #include +#include + using cpputils::Subprocess; using cpputils::SubprocessError; @@ -98,3 +100,25 @@ TEST(SubprocessTest, Call_error5withoutput_output) { TEST(SubprocessTest, Call_error5withoutput_exitcode) { EXPECT_EQ(5, Subprocess::call(exit_with_message_and_status("hello", 5)).exitcode); } + +// TODO Move this test to a test suite for ThreadSystem/LoopThread +#include +TEST(SubprocessTest, CallFromThreadSystemThread) { + cpputils::ConditionBarrier barrier; + + cpputils::LoopThread thread( + [&barrier] () { + auto result = Subprocess::check_call(exit_with_message_and_status("hello", 0)); + EXPECT_EQ(0, result.exitcode); + EXPECT_EQ("hello", result.output); + + barrier.release(); + + return false; // don't run loop again + }, + "child_thread" + ); + thread.start(); + barrier.wait(); + thread.stop(); // just to make sure it's stopped before the test exits. Returning false above should already stop it, but we don't know when exactly. thread.stop() will block until it's actually stopped. +}